From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhoucm1 Subject: Re: [PATCH 2/2] drm/amd/amdgpu: Port gfx9 driver over to new read/write macros Date: Mon, 10 Apr 2017 10:57:44 +0800 Message-ID: <58EAF4A8.1080600@amd.com> References: <20170407115523.21273-1-tom.stdenis@amd.com> <20170407115523.21273-2-tom.stdenis@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Tom St Denis , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org CgpPbiAyMDE35bm0MDTmnIgwOOaXpSAwMTo0MCwgVG9tIFN0IERlbmlzIHdyb3RlOgo+IE9uIDA3 LzA0LzE3IDA4OjA1IEFNLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+PiBBbSAwNy4wNC4yMDE3 IHVtIDEzOjU1IHNjaHJpZWIgVG9tIFN0IERlbmlzOgo+Pj4gU2lnbmVkLW9mZi1ieTogVG9tIFN0 IERlbmlzIDx0b20uc3RkZW5pc0BhbWQuY29tPgo+Pgo+PiBBY2tlZC1ieTogQ2hyaXN0aWFuIEvD tm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPi4KPgo+Cj4gSWYgSSBjb3VsZCBnZXQgYSBS QiBieSBzb21lb25lIEkgY291bGQgZ2V0IGdvaW5nIG9uIHRoZSByZXN0IG9mIHRoZSAKPiBBSSsg Y29kZS4KRmVlbCBmcmVlIHRvIGFkZCBteSBSQjogUmV2aWV3ZWQtYnk6IENodW5taW5nIFpob3Ug CjxkYXZpZDEuemhvdUBhbWQuY29tPiwgYW5kIHBscyBnbyBhaGVhZC4KClJlZ2FyZHMsCkRhdmlk IFpob3UKPgo+IFRvbQo+Cj4KPj4KPj4+IC0tLQo+Pj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9nZnhfdjlfMC5jIHwgNDA2Cj4+PiArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tCj4+PiAgIDEgZmlsZSBjaGFuZ2VkLCAyMDMgaW5zZXJ0aW9ucygrKSwgMjAzIGRlbGV0aW9u cygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhf djlfMC5jCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OV8wLmMKPj4+IGlu ZGV4IGNiNmM3ZWI4YTg3ZS4uZDU0OTI2MjlkNDlhIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y5XzAuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvZ2Z4X3Y5XzAuYwo+Pj4gQEAgLTcwNSwxOSArNzA1LDE5IEBAIHN0YXRpYyB2b2lk IGdmeF92OV8wX2NvbXB1dGVfbXFkX3N3X2Zpbmkoc3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICph ZGV2KQo+Pj4gICAgIHN0YXRpYyB1aW50MzJfdCB3YXZlX3JlYWRfaW5kKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LCB1aW50MzJfdAo+Pj4gc2ltZCwgdWludDMyX3Qgd2F2ZSwgdWludDMyX3Qg YWRkcmVzcykKPj4+ICAgewo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwg bW1TUV9JTkRfSU5ERVgpLAo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tU1FfSU5EX0lO REVYLAo+Pj4gICAgICAgICAgICh3YXZlIDw8IFNRX0lORF9JTkRFWF9fV0FWRV9JRF9fU0hJRlQp IHwKPj4+ICAgICAgICAgICAoc2ltZCA8PCBTUV9JTkRfSU5ERVhfX1NJTURfSURfX1NISUZUKSB8 Cj4+PiAgICAgICAgICAgKGFkZHJlc3MgPDwgU1FfSU5EX0lOREVYX19JTkRFWF9fU0hJRlQpIHwK Pj4+ICAgICAgICAgICAoU1FfSU5EX0lOREVYX19GT1JDRV9SRUFEX01BU0spKTsKPj4+IC0gICAg cmV0dXJuIFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVNRX0lORF9EQVRBKSk7Cj4+ PiArICAgIHJldHVybiBSUkVHMzJfU09DMTUoR0MsIDAsIG1tU1FfSU5EX0RBVEEpOwo+Pj4gICB9 Cj4+PiAgICAgc3RhdGljIHZvaWQgd2F2ZV9yZWFkX3JlZ3Moc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsIHVpbnQzMl90IAo+Pj4gc2ltZCwKPj4+ICAgICAgICAgICAgICAgICAgdWludDMyX3Qg d2F2ZSwgdWludDMyX3QgdGhyZWFkLAo+Pj4gICAgICAgICAgICAgICAgICB1aW50MzJfdCByZWdu bywgdWludDMyX3QgbnVtLCB1aW50MzJfdCAqb3V0KQo+Pj4gICB7Cj4+PiAtICAgIFdSRUczMihT T0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVNRX0lORF9JTkRFWCksCj4+PiArICAgIFdSRUczMl9T T0MxNShHQywgMCwgbW1TUV9JTkRfSU5ERVgsCj4+PiAgICAgICAgICAgKHdhdmUgPDwgU1FfSU5E X0lOREVYX19XQVZFX0lEX19TSElGVCkgfAo+Pj4gICAgICAgICAgIChzaW1kIDw8IFNRX0lORF9J TkRFWF9fU0lNRF9JRF9fU0hJRlQpIHwKPj4+ICAgICAgICAgICAocmVnbm8gPDwgU1FfSU5EX0lO REVYX19JTkRFWF9fU0hJRlQpIHwKPj4+IEBAIC03MjUsNyArNzI1LDcgQEAgc3RhdGljIHZvaWQg d2F2ZV9yZWFkX3JlZ3Moc3RydWN0IGFtZGdwdV9kZXZpY2UKPj4+ICphZGV2LCB1aW50MzJfdCBz aW1kLAo+Pj4gICAgICAgICAgIChTUV9JTkRfSU5ERVhfX0ZPUkNFX1JFQURfTUFTSykgfAo+Pj4g ICAgICAgICAgIChTUV9JTkRfSU5ERVhfX0FVVE9fSU5DUl9NQVNLKSk7Cj4+PiAgICAgICB3aGls ZSAobnVtLS0pCj4+PiAtICAgICAgICAqKG91dCsrKSA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VU KEdDLCAwLCBtbVNRX0lORF9EQVRBKSk7Cj4+PiArICAgICAgICAqKG91dCsrKSA9IFJSRUczMl9T T0MxNShHQywgMCwgbW1TUV9JTkRfREFUQSk7Cj4+PiAgIH0KPj4+ICAgICBzdGF0aWMgdm9pZCBn ZnhfdjlfMF9yZWFkX3dhdmVfZGF0YShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+IHVp bnQzMl90IHNpbWQsIHVpbnQzMl90IHdhdmUsIHVpbnQzMl90ICpkc3QsIGludCAqbm9fZmllbGRz KQo+Pj4gQEAgLTk1Myw3ICs5NTMsNyBAQCBzdGF0aWMgaW50IGdmeF92OV8wX25nZ19lbihzdHJ1 Y3QgYW1kZ3B1X2RldmljZQo+Pj4gKmFkZXYpCj4+PiAgICAgICBzaXplID0gYWRldi0+Z2Z4Lm5n Zy5idWZbUE9TXS5zaXplIC8gMjU2Owo+Pj4gICAgICAgZGF0YSA9IFJFR19TRVRfRklFTEQoZGF0 YSwgV0RfQlVGX1JFU09VUkNFXzEsIFBPU19CVUZfU0laRSwgCj4+PiBzaXplKTsKPj4+ICAgLSAg ICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1XRF9CVUZfUkVTT1VSQ0VfMSksIGRh dGEpOwo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tV0RfQlVGX1JFU09VUkNFXzEsIGRh dGEpOwo+Pj4gICAgICAgICBkYXRhID0gMDsKPj4+ICAgICAgIHNpemUgPSBhZGV2LT5nZngubmdn LmJ1ZltDTlRMXS5zaXplIC8gMjU2Owo+Pj4gQEAgLTk2MiwzMiArOTYyLDMyIEBAIHN0YXRpYyBp bnQgZ2Z4X3Y5XzBfbmdnX2VuKHN0cnVjdCBhbWRncHVfZGV2aWNlCj4+PiAqYWRldikKPj4+ICAg ICAgIHNpemUgPSBhZGV2LT5nZngubmdnLmJ1ZltQQVJBTV0uc2l6ZSAvIDEwMjQ7Cj4+PiAgICAg ICBkYXRhID0gUkVHX1NFVF9GSUVMRChkYXRhLCBXRF9CVUZfUkVTT1VSQ0VfMiwgUEFSQU1fQlVG X1NJWkUsCj4+PiBzaXplKTsKPj4+ICAgLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywg MCwgbW1XRF9CVUZfUkVTT1VSQ0VfMiksIGRhdGEpOwo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0Ms IDAsIG1tV0RfQlVGX1JFU09VUkNFXzIsIGRhdGEpOwo+Pj4gICAgICAgICAvKiBQcm9ncmFtIGJ1 ZmZlciBiYXNlIGFkZHJlc3MgKi8KPj4+ICAgICAgIGJhc2UgPSBsb3dlcl8zMl9iaXRzKGFkZXYt PmdmeC5uZ2cuYnVmW1BSSU1dLmdwdV9hZGRyKTsKPj4+ICAgICAgIGRhdGEgPSBSRUdfU0VUX0ZJ RUxEKDAsIFdEX0lOREVYX0JVRl9CQVNFLCBCQVNFLCBiYXNlKTsKPj4+IC0gICAgV1JFRzMyKFNP QzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tV0RfSU5ERVhfQlVGX0JBU0UpLCBkYXRhKTsKPj4+ICsg ICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbVdEX0lOREVYX0JVRl9CQVNFLCBkYXRhKTsKPj4+ICAg ICAgICAgYmFzZSA9IHVwcGVyXzMyX2JpdHMoYWRldi0+Z2Z4Lm5nZy5idWZbUFJJTV0uZ3B1X2Fk ZHIpOwo+Pj4gICAgICAgZGF0YSA9IFJFR19TRVRfRklFTEQoMCwgV0RfSU5ERVhfQlVGX0JBU0Vf SEksIEJBU0VfSEksIGJhc2UpOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywg MCwgbW1XRF9JTkRFWF9CVUZfQkFTRV9ISSksIGRhdGEpOwo+Pj4gKyAgICBXUkVHMzJfU09DMTUo R0MsIDAsIG1tV0RfSU5ERVhfQlVGX0JBU0VfSEksIGRhdGEpOwo+Pj4gICAgICAgICBiYXNlID0g bG93ZXJfMzJfYml0cyhhZGV2LT5nZngubmdnLmJ1ZltQT1NdLmdwdV9hZGRyKTsKPj4+ICAgICAg IGRhdGEgPSBSRUdfU0VUX0ZJRUxEKDAsIFdEX1BPU19CVUZfQkFTRSwgQkFTRSwgYmFzZSk7Cj4+ PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVdEX1BPU19CVUZfQkFTRSks IGRhdGEpOwo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tV0RfUE9TX0JVRl9CQVNFLCBk YXRhKTsKPj4+ICAgICAgICAgYmFzZSA9IHVwcGVyXzMyX2JpdHMoYWRldi0+Z2Z4Lm5nZy5idWZb UE9TXS5ncHVfYWRkcik7Cj4+PiAgICAgICBkYXRhID0gUkVHX1NFVF9GSUVMRCgwLCBXRF9QT1Nf QlVGX0JBU0VfSEksIEJBU0VfSEksIGJhc2UpOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09G RlNFVChHQywgMCwgbW1XRF9QT1NfQlVGX0JBU0VfSEkpLCBkYXRhKTsKPj4+ICsgICAgV1JFRzMy X1NPQzE1KEdDLCAwLCBtbVdEX1BPU19CVUZfQkFTRV9ISSwgZGF0YSk7Cj4+PiAgICAgICAgIGJh c2UgPSBsb3dlcl8zMl9iaXRzKGFkZXYtPmdmeC5uZ2cuYnVmW0NOVExdLmdwdV9hZGRyKTsKPj4+ ICAgICAgIGRhdGEgPSBSRUdfU0VUX0ZJRUxEKDAsIFdEX0NOVExfU0JfQlVGX0JBU0UsIEJBU0Us IGJhc2UpOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1XRF9DTlRM X1NCX0JVRl9CQVNFKSwgZGF0YSk7Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1XRF9D TlRMX1NCX0JVRl9CQVNFLCBkYXRhKTsKPj4+ICAgICAgICAgYmFzZSA9IHVwcGVyXzMyX2JpdHMo YWRldi0+Z2Z4Lm5nZy5idWZbQ05UTF0uZ3B1X2FkZHIpOwo+Pj4gICAgICAgZGF0YSA9IFJFR19T RVRfRklFTEQoMCwgV0RfQ05UTF9TQl9CVUZfQkFTRV9ISSwgQkFTRV9ISSwgYmFzZSk7Cj4+PiAt ICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVdEX0NOVExfU0JfQlVGX0JBU0Vf SEkpLCBkYXRhKTsKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbVdEX0NOVExfU0JfQlVG X0JBU0VfSEksIGRhdGEpOwo+Pj4gICAgICAgICAvKiBDbGVhciBHRFMgcmVzZXJ2ZWQgbWVtb3J5 ICovCj4+PiAgICAgICByID0gYW1kZ3B1X3JpbmdfYWxsb2MocmluZywgMTcpOwo+Pj4gQEAgLTEy MDMsNyArMTIwMyw3IEBAIHN0YXRpYyB2b2lkIGdmeF92OV8wX3NlbGVjdF9zZV9zaChzdHJ1Y3QK Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHUzMiBzZV9udW0sIHUzMiBzaAo+Pj4gICAgICAgICAg IGRhdGEgPSBSRUdfU0VUX0ZJRUxEKGRhdGEsIEdSQk1fR0ZYX0lOREVYLCBTSF9JTkRFWCwgc2hf bnVtKTsKPj4+ICAgICAgICAgICBkYXRhID0gUkVHX1NFVF9GSUVMRChkYXRhLCBHUkJNX0dGWF9J TkRFWCwgU0VfSU5ERVgsIHNlX251bSk7Cj4+PiAgICAgICB9Cj4+PiAtICAgIFdSRUczMiggU09D MTVfUkVHX09GRlNFVChHQywgMCwgbW1HUkJNX0dGWF9JTkRFWCksIGRhdGEpOwo+Pj4gKyAgICBX UkVHMzJfU09DMTUoR0MsIDAsIG1tR1JCTV9HRlhfSU5ERVgsIGRhdGEpOwo+Pj4gICB9Cj4+PiAg ICAgc3RhdGljIHUzMiBnZnhfdjlfMF9jcmVhdGVfYml0bWFzayh1MzIgYml0X3dpZHRoKQo+Pj4g QEAgLTEyMTUsOCArMTIxNSw4IEBAIHN0YXRpYyB1MzIgZ2Z4X3Y5XzBfZ2V0X3JiX2FjdGl2ZV9i aXRtYXAoc3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICphZGV2KQo+Pj4gICB7Cj4+PiAgICAgICB1 MzIgZGF0YSwgbWFzazsKPj4+ICAgLSAgICBkYXRhID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQo R0MsIDAsIG1tQ0NfUkJfQkFDS0VORF9ESVNBQkxFKSk7Cj4+PiAtICAgIGRhdGEgfD0gUlJFRzMy KFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsCj4+PiBtbUdDX1VTRVJfUkJfQkFDS0VORF9ESVNBQkxF KSk7Cj4+PiArICAgIGRhdGEgPSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tQ0NfUkJfQkFDS0VORF9E SVNBQkxFKTsKPj4+ICsgICAgZGF0YSB8PSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tR0NfVVNFUl9S Ql9CQUNLRU5EX0RJU0FCTEUpOwo+Pj4gICAgICAgICBkYXRhICY9IENDX1JCX0JBQ0tFTkRfRElT QUJMRV9fQkFDS0VORF9ESVNBQkxFX01BU0s7Cj4+PiAgICAgICBkYXRhID4+PSBHQ19VU0VSX1JC X0JBQ0tFTkRfRElTQUJMRV9fQkFDS0VORF9ESVNBQkxFX19TSElGVDsKPj4+IEBAIC0xMjc2LDgg KzEyNzYsOCBAQCBzdGF0aWMgdm9pZCBnZnhfdjlfMF9pbml0X2NvbXB1dGVfdm1pZChzdHJ1Y3QK Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiAgICAgICBmb3IgKGkgPSBGSVJTVF9DT01QVVRF X1ZNSUQ7IGkgPCBMQVNUX0NPTVBVVEVfVk1JRDsgaSsrKSB7Cj4+PiAgICAgICAgICAgc29jMTVf Z3JibV9zZWxlY3QoYWRldiwgMCwgMCwgMCwgaSk7Cj4+PiAgICAgICAgICAgLyogQ1AgYW5kIHNo YWRlcnMgKi8KPj4+IC0gICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVNI X01FTV9DT05GSUcpLCAKPj4+IHNoX21lbV9jb25maWcpOwo+Pj4gLSAgICAgICAgV1JFRzMyKFNP QzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tU0hfTUVNX0JBU0VTKSwgc2hfbWVtX2Jhc2VzKTsKPj4+ ICsgICAgICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1TSF9NRU1fQ09ORklHLCBzaF9tZW1fY29u ZmlnKTsKPj4+ICsgICAgICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1TSF9NRU1fQkFTRVMsIHNo X21lbV9iYXNlcyk7Cj4+PiAgICAgICB9Cj4+PiAgICAgICBzb2MxNV9ncmJtX3NlbGVjdChhZGV2 LCAwLCAwLCAwLCAwKTsKPj4+ICAgICAgIG11dGV4X3VubG9jaygmYWRldi0+c3JibV9tdXRleCk7 Cj4+PiBAQCAtMTMwNCw4ICsxMzA0LDggQEAgc3RhdGljIHZvaWQgZ2Z4X3Y5XzBfZ3B1X2luaXQo c3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICphZGV2KQo+Pj4gICAgICAgICAgIHRtcCA9IDA7Cj4+ PiAgICAgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFNIX01FTV9DT05GSUcsIEFMSUdO TUVOVF9NT0RFLAo+Pj4gICAgICAgICAgICAgICAgICAgICAgIFNIX01FTV9BTElHTk1FTlRfTU9E RV9VTkFMSUdORUQpOwo+Pj4gLSAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAs IG1tU0hfTUVNX0NPTkZJRyksIHRtcCk7Cj4+PiAtICAgICAgICBXUkVHMzIoU09DMTVfUkVHX09G RlNFVChHQywgMCwgbW1TSF9NRU1fQkFTRVMpLCAwKTsKPj4+ICsgICAgICAgIFdSRUczMl9TT0Mx NShHQywgMCwgbW1TSF9NRU1fQ09ORklHLCB0bXApOwo+Pj4gKyAgICAgICAgV1JFRzMyX1NPQzE1 KEdDLCAwLCBtbVNIX01FTV9CQVNFUywgMCk7Cj4+PiAgICAgICB9Cj4+PiAgICAgICBzb2MxNV9n cmJtX3NlbGVjdChhZGV2LCAwLCAwLCAwLCAwKTsKPj4+ICAgQEAgLTEzMjAsNyArMTMyMCw3IEBA IHN0YXRpYyB2b2lkIGdmeF92OV8wX2dwdV9pbml0KHN0cnVjdAo+Pj4gYW1kZ3B1X2RldmljZSAq YWRldikKPj4+ICAgICAgICAqLwo+Pj4gICAgICAgZ2Z4X3Y5XzBfc2VsZWN0X3NlX3NoKGFkZXYs IDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpOwo+Pj4gICAtICAgIFdSRUczMihT T0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVBBX1NDX0ZJRk9fU0laRSksCj4+PiArICAgIFdSRUcz Ml9TT0MxNShHQywgMCwgbW1QQV9TQ19GSUZPX1NJWkUsCj4+PiAgICAgICAgICAgICAgKGFkZXYt PmdmeC5jb25maWcuc2NfcHJpbV9maWZvX3NpemVfZnJvbnRlbmQgPDwKPj4+IFBBX1NDX0ZJRk9f U0laRV9fU0NfRlJPTlRFTkRfUFJJTV9GSUZPX1NJWkVfX1NISUZUKSB8Cj4+PiAgICAgICAgICAg ICAgKGFkZXYtPmdmeC5jb25maWcuc2NfcHJpbV9maWZvX3NpemVfYmFja2VuZCA8PAo+Pj4gQEAg LTEzNDMsNyArMTM0Myw3IEBAIHN0YXRpYyB2b2lkIGdmeF92OV8wX3dhaXRfZm9yX3JsY19zZXJk ZXMoc3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICphZGV2KQo+Pj4gICAgICAgICAgIGZvciAoaiA9 IDA7IGogPCBhZGV2LT5nZnguY29uZmlnLm1heF9zaF9wZXJfc2U7IGorKykgewo+Pj4gICAgICAg ICAgICAgICBnZnhfdjlfMF9zZWxlY3Rfc2Vfc2goYWRldiwgaSwgaiwgMHhmZmZmZmZmZik7Cj4+ PiAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGsrKykg ewo+Pj4gLSAgICAgICAgICAgICAgICBpZiAoUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAs Cj4+PiBtbVJMQ19TRVJERVNfQ1VfTUFTVEVSX0JVU1kpKSA9PSAwKQo+Pj4gKyAgICAgICAgICAg ICAgICBpZiAoUlJFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19TRVJERVNfQ1VfTUFTVEVSX0JVU1kp Cj4+PiA9PSAwKQo+Pj4gICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gICAgICAgICAg ICAgICAgICAgdWRlbGF5KDEpOwo+Pj4gICAgICAgICAgICAgICB9Cj4+PiBAQCAtMTM1Nyw3ICsx MzU3LDcgQEAgc3RhdGljIHZvaWQgZ2Z4X3Y5XzBfd2FpdF9mb3JfcmxjX3NlcmRlcyhzdHJ1Y3QK Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiAgICAgICAgICAgUkxDX1NFUkRFU19OT05DVV9N QVNURVJfQlVTWV9fVEMwX01BU1RFUl9CVVNZX01BU0sgfAo+Pj4gICAgICAgICAgIFJMQ19TRVJE RVNfTk9OQ1VfTUFTVEVSX0JVU1lfX1RDMV9NQVNURVJfQlVTWV9NQVNLOwo+Pj4gICAgICAgZm9y IChrID0gMDsgayA8IGFkZXYtPnVzZWNfdGltZW91dDsgaysrKSB7Cj4+PiAtICAgICAgICBpZiAo KFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+Pj4gbW1STENfU0VSREVTX05PTkNVX01B U1RFUl9CVVNZKSkgJiBtYXNrKSA9PSAwKQo+Pj4gKyAgICAgICAgaWYgKChSUkVHMzJfU09DMTUo R0MsIDAsIG1tUkxDX1NFUkRFU19OT05DVV9NQVNURVJfQlVTWSkgJgo+Pj4gbWFzaykgPT0gMCkK Pj4+ICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiAgICAgICAgICAgdWRlbGF5KDEpOwo+Pj4gICAg ICAgfQo+Pj4gQEAgLTEzNjYsNyArMTM2Niw3IEBAIHN0YXRpYyB2b2lkIGdmeF92OV8wX3dhaXRf Zm9yX3JsY19zZXJkZXMoc3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICphZGV2KQo+Pj4gICBzdGF0 aWMgdm9pZCBnZnhfdjlfMF9lbmFibGVfZ3VpX2lkbGVfaW50ZXJydXB0KHN0cnVjdCBhbWRncHVf ZGV2aWNlCj4+PiAqYWRldiwKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBl bmFibGUpCj4+PiAgIHsKPj4+IC0gICAgdTMyIHRtcCA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VU KEdDLCAwLCBtbUNQX0lOVF9DTlRMX1JJTkcwKSk7Cj4+PiArICAgIHUzMiB0bXAgPSBSUkVHMzJf U09DMTUoR0MsIDAsIG1tQ1BfSU5UX0NOVExfUklORzApOwo+Pj4gICAgICAgICBpZiAoZW5hYmxl KQo+Pj4gICAgICAgICAgIHJldHVybjsKPj4+IEBAIC0xMzc2LDE1ICsxMzc2LDE1IEBAIHN0YXRp YyB2b2lkCj4+PiBnZnhfdjlfMF9lbmFibGVfZ3VpX2lkbGVfaW50ZXJydXB0KHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAo+Pj4gICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0lO VF9DTlRMX1JJTkcwLCBDTVBfQlVTWV9JTlRfRU5BQkxFLAo+Pj4gZW5hYmxlID8gMSA6IDApOwo+ Pj4gICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0lOVF9DTlRMX1JJTkcwLCBHRlhf SURMRV9JTlRfRU5BQkxFLAo+Pj4gZW5hYmxlID8gMSA6IDApOwo+Pj4gICAtICAgIFdSRUczMihT T0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0lOVF9DTlRMX1JJTkcwKSwgdG1wKTsKPj4+ICsg ICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX0lOVF9DTlRMX1JJTkcwLCB0bXApOwo+Pj4gICB9 Cj4+PiAgICAgdm9pZCBnZnhfdjlfMF9ybGNfc3RvcChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl dikKPj4+ICAgewo+Pj4gLSAgICB1MzIgdG1wID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0Ms IDAsIG1tUkxDX0NOVEwpKTsKPj4+ICsgICAgdTMyIHRtcCA9IFJSRUczMl9TT0MxNShHQywgMCwg bW1STENfQ05UTCk7Cj4+PiAgICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBSTENfQ05U TCwgUkxDX0VOQUJMRV9GMzIsIDApOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChH QywgMCwgbW1STENfQ05UTCksIHRtcCk7Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1S TENfQ05UTCwgdG1wKTsKPj4+ICAgICAgICAgZ2Z4X3Y5XzBfZW5hYmxlX2d1aV9pZGxlX2ludGVy cnVwdChhZGV2LCBmYWxzZSk7Cj4+PiAgIEBAIC0xNDE1LDE3ICsxNDE1LDE3IEBAIHN0YXRpYyB2 b2lkIGdmeF92OV8wX3JsY19zdGFydChzdHJ1Y3QKPj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+ PiAgICAgI2lmZGVmIEFNREdQVV9STENfREVCVUdfUkVUUlkKPj4+ICAgICAgIC8qIFJMQ19HUE1f R0VORVJBTF82IDogUkxDIFVjb2RlIHZlcnNpb24gKi8KPj4+IC0gICAgcmxjX3Vjb2RlX3ZlciA9 IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+Pj4gbW1STENfR1BNX0dFTkVSQUxfNikp Owo+Pj4gKyAgICBybGNfdWNvZGVfdmVyID0gUlJFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19HUE1f R0VORVJBTF82KTsKPj4+ICAgICAgIGlmKHJsY191Y29kZV92ZXIgPT0gMHgxMDgpIHsKPj4+ICAg ICAgICAgICBEUk1fSU5GTygiVXNpbmcgcmxjIGRlYnVnIHVjb2RlLiBtbVJMQ19HUE1fR0VORVJB TF82Cj4+PiA9PTB4MDgleCAvIGZ3X3ZlciA9PSAlaSBcbiIsCj4+PiAgICAgICAgICAgICAgICAg ICBybGNfdWNvZGVfdmVyLCBhZGV2LT5nZngucmxjX2Z3X3ZlcnNpb24pOwo+Pj4gICAgICAgICAg IC8qIFJMQ19HUE1fVElNRVJfSU5UXzMgOiBUaW1lciBpbnRlcnZhbCBpbiBSZWZDTEsgY3ljbGVz LAo+Pj4gICAgICAgICAgICAqIGRlZmF1bHQgaXMgMHg5QzQgdG8gY3JlYXRlIGEgMTAwdXMgaW50 ZXJ2YWwgKi8KPj4+IC0gICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVJM Q19HUE1fVElNRVJfSU5UXzMpLCAweDlDNCk7Cj4+PiArICAgICAgICBXUkVHMzJfU09DMTUoR0Ms IDAsIG1tUkxDX0dQTV9USU1FUl9JTlRfMywgMHg5QzQpOwo+Pj4gICAgICAgICAgIC8qIFJMQ19H UE1fR0VORVJBTF8xMiA6IE1pbmltdW0gZ2FwIGJldHdlZW4gd3B0ciBhbmQgcnB0cgo+Pj4gICAg ICAgICAgICAqIHRvIGRpc2FibGUgdGhlIHBhZ2UgZmF1bHQgcmV0cnkgaW50ZXJydXB0cywgZGVm YXVsdCBpcwo+Pj4gICAgICAgICAgICAqIDB4MTAwICgyNTYpICovCj4+PiAtICAgICAgICBXUkVH MzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1STENfR1BNX0dFTkVSQUxfMTIpLCAweDEwMCk7 Cj4+PiArICAgICAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tUkxDX0dQTV9HRU5FUkFMXzEyLCAw eDEwMCk7Cj4+PiAgICAgICB9Cj4+PiAgICNlbmRpZgo+Pj4gICB9Cj4+PiBAQCAtMTQ0NiwxMSAr MTQ0NiwxMSBAQCBzdGF0aWMgaW50IGdmeF92OV8wX3JsY19sb2FkX21pY3JvY29kZShzdHJ1Y3QK Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiBsZTMyX3RvX2NwdShoZHItPmhlYWRlci51Y29k ZV9hcnJheV9vZmZzZXRfYnl0ZXMpKTsKPj4+ICAgICAgIGZ3X3NpemUgPSBsZTMyX3RvX2NwdSho ZHItPmhlYWRlci51Y29kZV9zaXplX2J5dGVzKSAvIDQ7Cj4+PiAgIC0gICAgV1JFRzMyKFNPQzE1 X1JFR19PRkZTRVQoR0MsIDAsIG1tUkxDX0dQTV9VQ09ERV9BRERSKSwKPj4+ICsgICAgV1JFRzMy X1NPQzE1KEdDLCAwLCBtbVJMQ19HUE1fVUNPREVfQUREUiwKPj4+ICAgICAgICAgICAgICAgUkxD R19VQ09ERV9MT0FESU5HX1NUQVJUX0FERFJFU1MpOwo+Pj4gICAgICAgZm9yIChpID0gMDsgaSA8 IGZ3X3NpemU7IGkrKykKPj4+IC0gICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAw LCBtbVJMQ19HUE1fVUNPREVfREFUQSksCj4+PiBsZTMyX3RvX2NwdXAoZndfZGF0YSsrKSk7Cj4+ PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVJMQ19HUE1fVUNPREVfQURE UiksCj4+PiBhZGV2LT5nZngucmxjX2Z3X3ZlcnNpb24pOwo+Pj4gKyAgICAgICAgV1JFRzMyX1NP QzE1KEdDLCAwLCBtbVJMQ19HUE1fVUNPREVfREFUQSwKPj4+IGxlMzJfdG9fY3B1cChmd19kYXRh KyspKTsKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19HUE1fVUNPREVfQUREUiwg Cj4+PiBhZGV2LT5nZngucmxjX2Z3X3ZlcnNpb24pOwo+Pj4gICAgICAgICByZXR1cm4gMDsKPj4+ ICAgfQo+Pj4gQEAgLTE0NjUsMTAgKzE0NjUsMTAgQEAgc3RhdGljIGludCBnZnhfdjlfMF9ybGNf cmVzdW1lKHN0cnVjdAo+Pj4gYW1kZ3B1X2RldmljZSAqYWRldikKPj4+ICAgICAgIGdmeF92OV8w X3JsY19zdG9wKGFkZXYpOwo+Pj4gICAgICAgICAvKiBkaXNhYmxlIENHICovCj4+PiAtICAgIFdS RUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVJMQ19DR0NHX0NHTFNfQ1RSTCksIDApOwo+ Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tUkxDX0NHQ0dfQ0dMU19DVFJMLCAwKTsKPj4+ ICAgICAgICAgLyogZGlzYWJsZSBQRyAqLwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNF VChHQywgMCwgbW1STENfUEdfQ05UTCksIDApOwo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAs IG1tUkxDX1BHX0NOVEwsIDApOwo+Pj4gICAgICAgICBnZnhfdjlfMF9ybGNfcmVzZXQoYWRldik7 Cj4+PiAgIEBAIC0xNDg3LDcgKzE0ODcsNyBAQCBzdGF0aWMgaW50IGdmeF92OV8wX3JsY19yZXN1 bWUoc3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICphZGV2KQo+Pj4gICBzdGF0aWMgdm9pZCBnZnhf djlfMF9jcF9nZnhfZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBib29sCj4+PiBl bmFibGUpCj4+PiAgIHsKPj4+ICAgICAgIGludCBpOwo+Pj4gLSAgICB1MzIgdG1wID0gUlJFRzMy KFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfTUVfQ05UTCkpOwo+Pj4gKyAgICB1MzIgdG1w ID0gUlJFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX01FX0NOVEwpOwo+Pj4gICAgICAgICB0bXAgPSBS RUdfU0VUX0ZJRUxEKHRtcCwgQ1BfTUVfQ05UTCwgTUVfSEFMVCwgZW5hYmxlID8gMCA6IDEpOwo+ Pj4gICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX01FX0NOVEwsIFBGUF9IQUxULCBl bmFibGUgPyAwIDogMSk7Cj4+PiBAQCAtMTQ5Niw3ICsxNDk2LDcgQEAgc3RhdGljIHZvaWQgZ2Z4 X3Y5XzBfY3BfZ2Z4X2VuYWJsZShzdHJ1Y3QKPj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wg ZW5hYmxlKQo+Pj4gICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhZGV2LT5nZngubnVtX2dmeF9y aW5nczsgaSsrKQo+Pj4gICAgICAgICAgICAgICBhZGV2LT5nZnguZ2Z4X3JpbmdbaV0ucmVhZHkg PSBmYWxzZTsKPj4+ICAgICAgIH0KPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0Ms IDAsIG1tQ1BfTUVfQ05UTCksIHRtcCk7Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1D UF9NRV9DTlRMLCB0bXApOwo+Pj4gICAgICAgdWRlbGF5KDUwKTsKPj4+ICAgfQo+Pj4gICBAQCAt MTUyOSwzMCArMTUyOSwzMCBAQCBzdGF0aWMgaW50Cj4+PiBnZnhfdjlfMF9jcF9nZnhfbG9hZF9t aWNyb2NvZGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiAgICAgICAgICAgKGFkZXYt PmdmeC5wZnBfZnctPmRhdGEgKwo+Pj4gbGUzMl90b19jcHUocGZwX2hkci0+aGVhZGVyLnVjb2Rl X2FycmF5X29mZnNldF9ieXRlcykpOwo+Pj4gICAgICAgZndfc2l6ZSA9IGxlMzJfdG9fY3B1KHBm cF9oZHItPmhlYWRlci51Y29kZV9zaXplX2J5dGVzKSAvIDQ7Cj4+PiAtICAgIFdSRUczMihTT0Mx NV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX1BGUF9VQ09ERV9BRERSKSwgMCk7Cj4+PiArICAgIFdS RUczMl9TT0MxNShHQywgMCwgbW1DUF9QRlBfVUNPREVfQUREUiwgMCk7Cj4+PiAgICAgICBmb3Ig KGkgPSAwOyBpIDwgZndfc2l6ZTsgaSsrKQo+Pj4gLSAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19P RkZTRVQoR0MsIDAsIG1tQ1BfUEZQX1VDT0RFX0RBVEEpLAo+Pj4gbGUzMl90b19jcHVwKGZ3X2Rh dGErKykpOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9QRlBf VUNPREVfQUREUiksCj4+PiBhZGV2LT5nZngucGZwX2Z3X3ZlcnNpb24pOwo+Pj4gKyAgICAgICAg V1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX1BGUF9VQ09ERV9EQVRBLAo+Pj4gbGUzMl90b19jcHVw KGZ3X2RhdGErKykpOwo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfUEZQX1VDT0RF X0FERFIsIAo+Pj4gYWRldi0+Z2Z4LnBmcF9md192ZXJzaW9uKTsKPj4+ICAgICAgICAgLyogQ0Ug Ki8KPj4+ICAgICAgIGZ3X2RhdGEgPSAoY29uc3QgX19sZTMyICopCj4+PiAgICAgICAgICAgKGFk ZXYtPmdmeC5jZV9mdy0+ZGF0YSArCj4+PiBsZTMyX3RvX2NwdShjZV9oZHItPmhlYWRlci51Y29k ZV9hcnJheV9vZmZzZXRfYnl0ZXMpKTsKPj4+ICAgICAgIGZ3X3NpemUgPSBsZTMyX3RvX2NwdShj ZV9oZHItPmhlYWRlci51Y29kZV9zaXplX2J5dGVzKSAvIDQ7Cj4+PiAtICAgIFdSRUczMihTT0Mx NV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0NFX1VDT0RFX0FERFIpLCAwKTsKPj4+ICsgICAgV1JF RzMyX1NPQzE1KEdDLCAwLCBtbUNQX0NFX1VDT0RFX0FERFIsIDApOwo+Pj4gICAgICAgZm9yIChp ID0gMDsgaSA8IGZ3X3NpemU7IGkrKykKPj4+IC0gICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZG U0VUKEdDLCAwLCBtbUNQX0NFX1VDT0RFX0RBVEEpLAo+Pj4gbGUzMl90b19jcHVwKGZ3X2RhdGEr KykpOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9DRV9VQ09E RV9BRERSKSwKPj4+IGFkZXYtPmdmeC5jZV9md192ZXJzaW9uKTsKPj4+ICsgICAgICAgIFdSRUcz Ml9TT0MxNShHQywgMCwgbW1DUF9DRV9VQ09ERV9EQVRBLAo+Pj4gbGUzMl90b19jcHVwKGZ3X2Rh dGErKykpOwo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfQ0VfVUNPREVfQUREUiwg YWRldi0+Z2Z4LmNlX2Z3X3ZlcnNpb24pOwo+Pj4gICAgICAgICAvKiBNRSAqLwo+Pj4gICAgICAg ZndfZGF0YSA9IChjb25zdCBfX2xlMzIgKikKPj4+ICAgICAgICAgICAoYWRldi0+Z2Z4Lm1lX2Z3 LT5kYXRhICsKPj4+IGxlMzJfdG9fY3B1KG1lX2hkci0+aGVhZGVyLnVjb2RlX2FycmF5X29mZnNl dF9ieXRlcykpOwo+Pj4gICAgICAgZndfc2l6ZSA9IGxlMzJfdG9fY3B1KG1lX2hkci0+aGVhZGVy LnVjb2RlX3NpemVfYnl0ZXMpIC8gNDsKPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQo R0MsIDAsIG1tQ1BfTUVfUkFNX1dBRERSKSwgMCk7Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywg MCwgbW1DUF9NRV9SQU1fV0FERFIsIDApOwo+Pj4gICAgICAgZm9yIChpID0gMDsgaSA8IGZ3X3Np emU7IGkrKykKPj4+IC0gICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQ X01FX1JBTV9EQVRBKSwKPj4+IGxlMzJfdG9fY3B1cChmd19kYXRhKyspKTsKPj4+IC0gICAgV1JF RzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfTUVfUkFNX1dBRERSKSwKPj4+IGFkZXYt PmdmeC5tZV9md192ZXJzaW9uKTsKPj4+ICsgICAgICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1D UF9NRV9SQU1fREFUQSwgCj4+PiBsZTMyX3RvX2NwdXAoZndfZGF0YSsrKSk7Cj4+PiArICAgIFdS RUczMl9TT0MxNShHQywgMCwgbW1DUF9NRV9SQU1fV0FERFIsIGFkZXYtPmdmeC5tZV9md192ZXJz aW9uKTsKPj4+ICAgICAgICAgcmV0dXJuIDA7Cj4+PiAgIH0KPj4+IEBAIC0xNTk0LDggKzE1OTQs OCBAQCBzdGF0aWMgaW50IGdmeF92OV8wX2NwX2dmeF9zdGFydChzdHJ1Y3QKPj4+IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCj4+PiAgICAgICBpbnQgciwgaTsKPj4+ICAgICAgICAgLyogaW5pdCB0aGUg Q1AgKi8KPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfTUFYX0NP TlRFWFQpLAo+Pj4gYWRldi0+Z2Z4LmNvbmZpZy5tYXhfaHdfY29udGV4dHMgLSAxKTsKPj4+IC0g ICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfREVWSUNFX0lEKSwgMSk7Cj4+ PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9NQVhfQ09OVEVYVCwKPj4+IGFkZXYtPmdm eC5jb25maWcubWF4X2h3X2NvbnRleHRzIC0gMSk7Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywg MCwgbW1DUF9ERVZJQ0VfSUQsIDEpOwo+Pj4gICAgICAgICBnZnhfdjlfMF9jcF9nZnhfZW5hYmxl KGFkZXYsIHRydWUpOwo+Pj4gICBAQCAtMTY1MCwxMCArMTY1MCwxMCBAQCBzdGF0aWMgaW50IGdm eF92OV8wX2NwX2dmeF9yZXN1bWUoc3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICphZGV2KQo+Pj4g ICAgICAgdTY0IHJiX2FkZHIsIHJwdHJfYWRkciwgd3B0cl9ncHVfYWRkcjsKPj4+ICAgICAgICAg LyogU2V0IHRoZSB3cml0ZSBwb2ludGVyIGRlbGF5ICovCj4+PiAtICAgIFdSRUczMihTT0MxNV9S RUdfT0ZGU0VUKEdDLCAwLCBtbUNQX1JCX1dQVFJfREVMQVkpLCAwKTsKPj4+ICsgICAgV1JFRzMy X1NPQzE1KEdDLCAwLCBtbUNQX1JCX1dQVFJfREVMQVksIDApOwo+Pj4gICAgICAgICAvKiBzZXQg dGhlIFJCIHRvIHVzZSB2bWlkIDAgKi8KPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQo R0MsIDAsIG1tQ1BfUkJfVk1JRCksIDApOwo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1t Q1BfUkJfVk1JRCwgMCk7Cj4+PiAgICAgICAgIC8qIFNldCByaW5nIGJ1ZmZlciBzaXplICovCj4+ PiAgICAgICByaW5nID0gJmFkZXYtPmdmeC5nZnhfcmluZ1swXTsKPj4+IEBAIC0xNjYzLDMwICsx NjYzLDMwIEBAIHN0YXRpYyBpbnQgZ2Z4X3Y5XzBfY3BfZ2Z4X3Jlc3VtZShzdHJ1Y3QKPj4+IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiAgICNpZmRlZiBfX0JJR19FTkRJQU4KPj4+ICAgICAgIHRt cCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9SQjBfQ05UTCwgQlVGX1NXQVAsIDEpOwo+Pj4gICAj ZW5kaWYKPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfUkIwX0NO VEwpLCB0bXApOwo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfUkIwX0NOVEwsIHRt cCk7Cj4+PiAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyJ3Mgd3JpdGUgcG9p bnRlcnMgKi8KPj4+ICAgICAgIHJpbmctPndwdHIgPSAwOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVf UkVHX09GRlNFVChHQywgMCwgbW1DUF9SQjBfV1BUUiksCj4+PiBsb3dlcl8zMl9iaXRzKHJpbmct PndwdHIpKTsKPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfUkIw X1dQVFJfSEkpLAo+Pj4gdXBwZXJfMzJfYml0cyhyaW5nLT53cHRyKSk7Cj4+PiArICAgIFdSRUcz Ml9TT0MxNShHQywgMCwgbW1DUF9SQjBfV1BUUiwgbG93ZXJfMzJfYml0cyhyaW5nLT53cHRyKSk7 Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9SQjBfV1BUUl9ISSwgdXBwZXJfMzJf Yml0cyhyaW5nLT53cHRyKSk7Cj4+PiAgICAgICAgIC8qIHNldCB0aGUgd2IgYWRkcmVzcyB3ZXRo ZXIgaXQncyBlbmFibGVkIG9yIG5vdCAqLwo+Pj4gICAgICAgcnB0cl9hZGRyID0gYWRldi0+d2Iu Z3B1X2FkZHIgKyAocmluZy0+cnB0cl9vZmZzICogNCk7Cj4+PiAtICAgIFdSRUczMihTT0MxNV9S RUdfT0ZGU0VUKEdDLCAwLCBtbUNQX1JCMF9SUFRSX0FERFIpLAo+Pj4gbG93ZXJfMzJfYml0cyhy cHRyX2FkZHIpKTsKPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1Bf UkIwX1JQVFJfQUREUl9ISSksCj4+PiB1cHBlcl8zMl9iaXRzKHJwdHJfYWRkcikgJiBDUF9SQl9S UFRSX0FERFJfSElfX1JCX1JQVFJfQUREUl9ISV9NQVNLKTsKPj4+ICsgICAgV1JFRzMyX1NPQzE1 KEdDLCAwLCBtbUNQX1JCMF9SUFRSX0FERFIsIGxvd2VyXzMyX2JpdHMocnB0cl9hZGRyKSk7Cj4+ PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9SQjBfUlBUUl9BRERSX0hJLAo+Pj4gdXBw ZXJfMzJfYml0cyhycHRyX2FkZHIpICYgQ1BfUkJfUlBUUl9BRERSX0hJX19SQl9SUFRSX0FERFJf SElfTUFTSyk7Cj4+PiAgICAgICAgIHdwdHJfZ3B1X2FkZHIgPSBhZGV2LT53Yi5ncHVfYWRkciAr IChyaW5nLT53cHRyX29mZnMgKiA0KTsKPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQo R0MsIDAsIG1tQ1BfUkJfV1BUUl9QT0xMX0FERFJfTE8pLAo+Pj4gbG93ZXJfMzJfYml0cyh3cHRy X2dwdV9hZGRyKSk7Cj4+PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQ X1JCX1dQVFJfUE9MTF9BRERSX0hJKSwKPj4+IHVwcGVyXzMyX2JpdHMod3B0cl9ncHVfYWRkcikp Owo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfUkJfV1BUUl9QT0xMX0FERFJfTE8s Cj4+PiBsb3dlcl8zMl9iaXRzKHdwdHJfZ3B1X2FkZHIpKTsKPj4+ICsgICAgV1JFRzMyX1NPQzE1 KEdDLCAwLCBtbUNQX1JCX1dQVFJfUE9MTF9BRERSX0hJLAo+Pj4gdXBwZXJfMzJfYml0cyh3cHRy X2dwdV9hZGRyKSk7Cj4+PiAgICAgICAgIG1kZWxheSgxKTsKPj4+IC0gICAgV1JFRzMyKFNPQzE1 X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfUkIwX0NOVEwpLCB0bXApOwo+Pj4gKyAgICBXUkVHMzJf U09DMTUoR0MsIDAsIG1tQ1BfUkIwX0NOVEwsIHRtcCk7Cj4+PiAgICAgICAgIHJiX2FkZHIgPSBy aW5nLT5ncHVfYWRkciA+PiA4Owo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywg MCwgbW1DUF9SQjBfQkFTRSksIHJiX2FkZHIpOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09G RlNFVChHQywgMCwgbW1DUF9SQjBfQkFTRV9ISSksCj4+PiB1cHBlcl8zMl9iaXRzKHJiX2FkZHIp KTsKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX1JCMF9CQVNFLCByYl9hZGRyKTsK Pj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX1JCMF9CQVNFX0hJLCB1cHBlcl8zMl9i aXRzKHJiX2FkZHIpKTsKPj4+ICAgLSAgICB0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChH QywgMCwgbW1DUF9SQl9ET09SQkVMTF9DT05UUk9MKSk7Cj4+PiArICAgIHRtcCA9IFJSRUczMl9T T0MxNShHQywgMCwgbW1DUF9SQl9ET09SQkVMTF9DT05UUk9MKTsKPj4+ICAgICAgIGlmIChyaW5n LT51c2VfZG9vcmJlbGwpIHsKPj4+ICAgICAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwg Q1BfUkJfRE9PUkJFTExfQ09OVFJPTCwKPj4+ICAgICAgICAgICAgICAgICAgICAgICBET09SQkVM TF9PRkZTRVQsIHJpbmctPmRvb3JiZWxsX2luZGV4KTsKPj4+IEBAIC0xNjk1LDEzICsxNjk1LDEz IEBAIHN0YXRpYyBpbnQgZ2Z4X3Y5XzBfY3BfZ2Z4X3Jlc3VtZShzdHJ1Y3QKPj4+IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCj4+PiAgICAgICB9IGVsc2Ugewo+Pj4gICAgICAgICAgIHRtcCA9IFJFR19T RVRfRklFTEQodG1wLCBDUF9SQl9ET09SQkVMTF9DT05UUk9MLAo+Pj4gRE9PUkJFTExfRU4sIDAp Owo+Pj4gICAgICAgfQo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1D UF9SQl9ET09SQkVMTF9DT05UUk9MKSwgdG1wKTsKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAw LCBtbUNQX1JCX0RPT1JCRUxMX0NPTlRST0wsIHRtcCk7Cj4+PiAgICAgICAgIHRtcCA9IFJFR19T RVRfRklFTEQoMCwgQ1BfUkJfRE9PUkJFTExfUkFOR0VfTE9XRVIsCj4+PiAgICAgICAgICAgICAg IERPT1JCRUxMX1JBTkdFX0xPV0VSLCByaW5nLT5kb29yYmVsbF9pbmRleCk7Cj4+PiAtICAgIFdS RUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX1JCX0RPT1JCRUxMX1JBTkdFX0xPV0VS KSwgCj4+PiB0bXApOwo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfUkJfRE9PUkJF TExfUkFOR0VfTE9XRVIsIHRtcCk7Cj4+PiAgIC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQo R0MsIDAsIG1tQ1BfUkJfRE9PUkJFTExfUkFOR0VfVVBQRVIpLAo+Pj4gKyAgICBXUkVHMzJfU09D MTUoR0MsIDAsIG1tQ1BfUkJfRE9PUkJFTExfUkFOR0VfVVBQRVIsCj4+PiBDUF9SQl9ET09SQkVM TF9SQU5HRV9VUFBFUl9fRE9PUkJFTExfUkFOR0VfVVBQRVJfTUFTSyk7Cj4+PiAgICAgQEAgLTE3 MTcsOSArMTcxNyw5IEBAIHN0YXRpYyB2b2lkCj4+PiBnZnhfdjlfMF9jcF9jb21wdXRlX2VuYWJs ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCBlbmFibGUpCj4+PiAgICAgICBpbnQg aTsKPj4+ICAgICAgICAgaWYgKGVuYWJsZSkgewo+Pj4gLSAgICAgICAgV1JFRzMyKFNPQzE1X1JF R19PRkZTRVQoR0MsIDAsIG1tQ1BfTUVDX0NOVEwpLCAwKTsKPj4+ICsgICAgICAgIFdSRUczMl9T T0MxNShHQywgMCwgbW1DUF9NRUNfQ05UTCwgMCk7Cj4+PiAgICAgICB9IGVsc2Ugewo+Pj4gLSAg ICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfTUVDX0NOVEwpLAo+Pj4g KyAgICAgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX01FQ19DTlRMLAo+Pj4gICAgICAgICAg ICAgICAoQ1BfTUVDX0NOVExfX01FQ19NRTFfSEFMVF9NQVNLIHwKPj4+IENQX01FQ19DTlRMX19N RUNfTUUyX0hBTFRfTUFTSykpOwo+Pj4gICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhZGV2LT5n ZngubnVtX2NvbXB1dGVfcmluZ3M7IGkrKykKPj4+ICAgICAgICAgICAgICAgYWRldi0+Z2Z4LmNv bXB1dGVfcmluZ1tpXS5yZWFkeSA9IGZhbHNlOwo+Pj4gQEAgLTE3NTYsMjEgKzE3NTYsMjEgQEAg c3RhdGljIGludAo+Pj4gZ2Z4X3Y5XzBfY3BfY29tcHV0ZV9sb2FkX21pY3JvY29kZShzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldikKPj4+ICAgICAgIHRtcCA9IDA7Cj4+PiAgICAgICB0bXAgPSBS RUdfU0VUX0ZJRUxEKHRtcCwgQ1BfQ1BDX0lDX0JBU0VfQ05UTCwgVk1JRCwgMCk7Cj4+PiAgICAg ICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfQ1BDX0lDX0JBU0VfQ05UTCwgQ0FDSEVfUE9M SUNZLCAwKTsKPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfQ1BD X0lDX0JBU0VfQ05UTCksIHRtcCk7Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9D UENfSUNfQkFTRV9DTlRMLCB0bXApOwo+Pj4gICAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VU KEdDLCAwLCBtbUNQX0NQQ19JQ19CQVNFX0xPKSwKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAw LCBtbUNQX0NQQ19JQ19CQVNFX0xPLAo+Pj4gICAgICAgICAgIGFkZXYtPmdmeC5tZWMubWVjX2Z3 X2dwdV9hZGRyICYgMHhGRkZGRjAwMCk7Cj4+PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VU KEdDLCAwLCBtbUNQX0NQQ19JQ19CQVNFX0hJKSwKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAw LCBtbUNQX0NQQ19JQ19CQVNFX0hJLAo+Pj4gICAgICAgICAgIHVwcGVyXzMyX2JpdHMoYWRldi0+ Z2Z4Lm1lYy5tZWNfZndfZ3B1X2FkZHIpKTsKPj4+ICAgICAgICAgIC8qIE1FQzEgKi8KPj4+IC0g ICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfTUVDX01FMV9VQ09ERV9BRERS KSwKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX01FQ19NRTFfVUNPREVfQUREUiwK Pj4+ICAgICAgICAgICAgICAgIG1lY19oZHItPmp0X29mZnNldCk7Cj4+PiAgICAgICBmb3IgKGkg PSAwOyBpIDwgbWVjX2hkci0+anRfc2l6ZTsgaSsrKQo+Pj4gLSAgICAgICAgV1JFRzMyKFNPQzE1 X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfTUVDX01FMV9VQ09ERV9EQVRBKSwKPj4+ICsgICAgICAg IFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9NRUNfTUUxX1VDT0RFX0RBVEEsCj4+PiAgICAgICAg ICAgICAgIGxlMzJfdG9fY3B1cChmd19kYXRhICsgbWVjX2hkci0+anRfb2Zmc2V0ICsgaSkpOwo+ Pj4gICAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX01FQ19NRTFfVUNP REVfQUREUiksCj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9NRUNfTUUxX1VDT0RF X0FERFIsCj4+PiAgICAgICAgICAgICAgIGFkZXYtPmdmeC5tZWNfZndfdmVyc2lvbik7Cj4+PiAg ICAgICAvKiBUb2RvIDogTG9hZGluZyBNRUMyIGZpcm13YXJlIGlzIG9ubHkgbmVjZXNzYXJ5IGlm IE1FQzIgc2hvdWxkCj4+PiBydW4gZGlmZmVyZW50IG1pY3JvY29kZSB0aGFuIE1FQzEuICovCj4+ PiAgIEBAIC0xODIzLDEyICsxODIzLDEyIEBAIHN0YXRpYyB2b2lkIGdmeF92OV8wX2tpcV9zZXR0 aW5nKHN0cnVjdAo+Pj4gYW1kZ3B1X3JpbmcgKnJpbmcpCj4+PiAgICAgICBzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7Cj4+PiAgICAgICAgIC8qIHRlbGwgUkxDIHdoaWNo IGlzIEtJUSBxdWV1ZSAqLwo+Pj4gLSAgICB0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChH QywgMCwgbW1STENfQ1BfU0NIRURVTEVSUykpOwo+Pj4gKyAgICB0bXAgPSBSUkVHMzJfU09DMTUo R0MsIDAsIG1tUkxDX0NQX1NDSEVEVUxFUlMpOwo+Pj4gICAgICAgdG1wICY9IDB4ZmZmZmZmMDA7 Cj4+PiAgICAgICB0bXAgfD0gKHJpbmctPm1lIDw8IDUpIHwgKHJpbmctPnBpcGUgPDwgMykgfCAo cmluZy0+cXVldWUpOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1S TENfQ1BfU0NIRURVTEVSUyksIHRtcCk7Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1S TENfQ1BfU0NIRURVTEVSUywgdG1wKTsKPj4+ICAgICAgIHRtcCB8PSAweDgwOwo+Pj4gLSAgICBX UkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1STENfQ1BfU0NIRURVTEVSUyksIHRtcCk7 Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1STENfQ1BfU0NIRURVTEVSUywgdG1wKTsK Pj4+ICAgfQo+Pj4gICAgIHN0YXRpYyB2b2lkIGdmeF92OV8wX2tpcV9lbmFibGUoc3RydWN0IGFt ZGdwdV9yaW5nICpyaW5nKQo+Pj4gQEAgLTE4OTgsMTQgKzE4OTgsMTQgQEAgc3RhdGljIGludCBn ZnhfdjlfMF9tcWRfaW5pdChzdHJ1Y3QKPj4+IGFtZGdwdV9yaW5nICpyaW5nKQo+Pj4gICAgICAg bXFkLT5jcF9ocWRfZW9wX2Jhc2VfYWRkcl9oaSA9IHVwcGVyXzMyX2JpdHMoZW9wX2Jhc2VfYWRk cik7Cj4+PiAgICAgICAgIC8qIHNldCB0aGUgRU9QIHNpemUsIHJlZ2lzdGVyIHZhbHVlIGlzIDJe KEVPUF9TSVpFKzEpIGR3b3JkcyAqLwo+Pj4gLSAgICB0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09G RlNFVChHQywgMCwgbW1DUF9IUURfRU9QX0NPTlRST0wpKTsKPj4+ICsgICAgdG1wID0gUlJFRzMy X1NPQzE1KEdDLCAwLCBtbUNQX0hRRF9FT1BfQ09OVFJPTCk7Cj4+PiAgICAgICB0bXAgPSBSRUdf U0VUX0ZJRUxEKHRtcCwgQ1BfSFFEX0VPUF9DT05UUk9MLCBFT1BfU0laRSwKPj4+ICAgICAgICAg ICAgICAgKG9yZGVyX2Jhc2VfMihNRUNfSFBEX1NJWkUgLyA0KSAtIDEpKTsKPj4+ICAgICAgICAg bXFkLT5jcF9ocWRfZW9wX2NvbnRyb2wgPSB0bXA7Cj4+PiAgICAgICAgIC8qIGVuYWJsZSBkb29y YmVsbD8gKi8KPj4+IC0gICAgdG1wID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIAo+ Pj4gbW1DUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCkpOwo+Pj4gKyAgICB0bXAgPSBSUkVHMzJf U09DMTUoR0MsIDAsIG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wpOwo+Pj4gICAgICAgICBp ZiAocmluZy0+dXNlX2Rvb3JiZWxsKSB7Cj4+PiAgICAgICAgICAgdG1wID0gUkVHX1NFVF9GSUVM RCh0bXAsIENQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MLAo+Pj4gQEAgLTE5MzUsNyArMTkzNSw3 IEBAIHN0YXRpYyBpbnQgZ2Z4X3Y5XzBfbXFkX2luaXQoc3RydWN0IGFtZGdwdV9yaW5nCj4+PiAq cmluZykKPj4+ICAgICAgIG1xZC0+Y3BfbXFkX2Jhc2VfYWRkcl9oaSA9IHVwcGVyXzMyX2JpdHMo cmluZy0+bXFkX2dwdV9hZGRyKTsKPj4+ICAgICAgICAgLyogc2V0IE1RRCB2bWlkIHRvIDAgKi8K Pj4+IC0gICAgdG1wID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfTVFEX0NP TlRST0wpKTsKPj4+ICsgICAgdG1wID0gUlJFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX01RRF9DT05U Uk9MKTsKPj4+ICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9NUURfQ09OVFJPTCwg Vk1JRCwgMCk7Cj4+PiAgICAgICBtcWQtPmNwX21xZF9jb250cm9sID0gdG1wOwo+Pj4gICBAQCAt MTk0NSw3ICsxOTQ1LDcgQEAgc3RhdGljIGludCBnZnhfdjlfMF9tcWRfaW5pdChzdHJ1Y3QKPj4+ IGFtZGdwdV9yaW5nICpyaW5nKQo+Pj4gICAgICAgbXFkLT5jcF9ocWRfcHFfYmFzZV9oaSA9IHVw cGVyXzMyX2JpdHMoaHFkX2dwdV9hZGRyKTsKPj4+ICAgICAgICAgLyogc2V0IHVwIHRoZSBIUUQs IHRoaXMgaXMgc2ltaWxhciB0byBDUF9SQjBfQ05UTCAqLwo+Pj4gLSAgICB0bXAgPSBSUkVHMzIo U09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9IUURfUFFfQ09OVFJPTCkpOwo+Pj4gKyAgICB0 bXAgPSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX1BRX0NPTlRST0wpOwo+Pj4gICAgICAg dG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9QUV9DT05UUk9MLCBRVUVVRV9TSVpFLAo+ Pj4gICAgICAgICAgICAgICAgICAgKG9yZGVyX2Jhc2VfMihyaW5nLT5yaW5nX3NpemUgLyA0KSAt IDEpKTsKPj4+ICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9IUURfUFFfQ09OVFJP TCwgUlBUUl9CTE9DS19TSVpFLAo+Pj4gQEAgLTE5NzMsNyArMTk3Myw3IEBAIHN0YXRpYyBpbnQg Z2Z4X3Y5XzBfbXFkX2luaXQoc3RydWN0IGFtZGdwdV9yaW5nCj4+PiAqcmluZykKPj4+ICAgICAg IHRtcCA9IDA7Cj4+PiAgICAgICAvKiBlbmFibGUgdGhlIGRvb3JiZWxsIGlmIHJlcXVlc3RlZCAq Lwo+Pj4gICAgICAgaWYgKHJpbmctPnVzZV9kb29yYmVsbCkgewo+Pj4gLSAgICAgICAgdG1wID0g UlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsCj4+PiBtbUNQX0hRRF9QUV9ET09SQkVMTF9D T05UUk9MKSk7Cj4+PiArICAgICAgICB0bXAgPSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFE X1BRX0RPT1JCRUxMX0NPTlRST0wpOwo+Pj4gICAgICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQo dG1wLCBDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCwKPj4+ICAgICAgICAgICAgICAgICAgIERP T1JCRUxMX09GRlNFVCwgcmluZy0+ZG9vcmJlbGxfaW5kZXgpOwo+Pj4gICBAQCAtMjAxMyw5NCAr MjAxMyw5NCBAQCBzdGF0aWMgaW50IGdmeF92OV8wX2tpcV9pbml0X3JlZ2lzdGVyKHN0cnVjdAo+ Pj4gYW1kZ3B1X3JpbmcgKnJpbmcpCj4+PiAgICAgICAvKiBkaXNhYmxlIHdwdHIgcG9sbGluZyAq Lwo+Pj4gICAgICAgV1JFRzMyX0ZJRUxEMTUoR0MsIDAsIENQX1BRX1dQVFJfUE9MTF9DTlRMLCBF TiwgMCk7Cj4+PiAgIC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfSFFE X0VPUF9CQVNFX0FERFIpLAo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX0VP UF9CQVNFX0FERFIsCj4+PiAgICAgICAgICAgICAgbXFkLT5jcF9ocWRfZW9wX2Jhc2VfYWRkcl9s byk7Cj4+PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9FT1Bf QkFTRV9BRERSX0hJKSwKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX0hRRF9FT1Bf QkFTRV9BRERSX0hJLAo+Pj4gICAgICAgICAgICAgIG1xZC0+Y3BfaHFkX2VvcF9iYXNlX2FkZHJf aGkpOwo+Pj4gICAgICAgICAvKiBzZXQgdGhlIEVPUCBzaXplLCByZWdpc3RlciB2YWx1ZSBpcyAy XihFT1BfU0laRSsxKSBkd29yZHMgKi8KPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQo R0MsIDAsIG1tQ1BfSFFEX0VPUF9DT05UUk9MKSwKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAw LCBtbUNQX0hRRF9FT1BfQ09OVFJPTCwKPj4+ICAgICAgICAgICAgICBtcWQtPmNwX2hxZF9lb3Bf Y29udHJvbCk7Cj4+PiAgICAgICAgIC8qIGVuYWJsZSBkb29yYmVsbD8gKi8KPj4+IC0gICAgV1JF RzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wp LAo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRS T0wsCj4+PiAgICAgICAgICAgICAgbXFkLT5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCk7Cj4+ PiAgICAgICAgIC8qIGRpc2FibGUgdGhlIHF1ZXVlIGlmIGl0J3MgYWN0aXZlICovCj4+PiAtICAg IGlmIChSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9IUURfQUNUSVZFKSkgJiAx KSB7Cj4+PiAtICAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9IUURf REVRVUVVRV9SRVFVRVNUKSwgMSk7Cj4+PiArICAgIGlmIChSUkVHMzJfU09DMTUoR0MsIDAsIG1t Q1BfSFFEX0FDVElWRSkgJiAxKSB7Cj4+PiArICAgICAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1t Q1BfSFFEX0RFUVVFVUVfUkVRVUVTVCwgMSk7Cj4+PiAgICAgICAgICAgZm9yIChqID0gMDsgaiA8 IGFkZXYtPnVzZWNfdGltZW91dDsgaisrKSB7Cj4+PiAtICAgICAgICAgICAgaWYgKCEoUlJFRzMy KFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfSFFEX0FDVElWRSkpIAo+Pj4gJiAxKSkKPj4+ ICsgICAgICAgICAgICBpZiAoIShSUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX0FDVElWRSkg JiAxKSkKPj4+ICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gICAgICAgICAgICAgICB1ZGVs YXkoMSk7Cj4+PiAgICAgICAgICAgfQo+Pj4gLSAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZT RVQoR0MsIDAsIG1tQ1BfSFFEX0RFUVVFVUVfUkVRVUVTVCksCj4+PiArICAgICAgICBXUkVHMzJf U09DMTUoR0MsIDAsIG1tQ1BfSFFEX0RFUVVFVUVfUkVRVUVTVCwKPj4+ICAgICAgICAgICAgICAg ICAgbXFkLT5jcF9ocWRfZGVxdWV1ZV9yZXF1ZXN0KTsKPj4+IC0gICAgICAgIFdSRUczMihTT0Mx NV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9QUV9SUFRSKSwKPj4+ICsgICAgICAgIFdSRUcz Ml9TT0MxNShHQywgMCwgbW1DUF9IUURfUFFfUlBUUiwKPj4+ICAgICAgICAgICAgICAgICAgbXFk LT5jcF9ocWRfcHFfcnB0cik7Cj4+PiAtICAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChH QywgMCwgbW1DUF9IUURfUFFfV1BUUl9MTyksCj4+PiArICAgICAgICBXUkVHMzJfU09DMTUoR0Ms IDAsIG1tQ1BfSFFEX1BRX1dQVFJfTE8sCj4+PiAgICAgICAgICAgICAgICAgIG1xZC0+Y3BfaHFk X3BxX3dwdHJfbG8pOwo+Pj4gLSAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAs IG1tQ1BfSFFEX1BRX1dQVFJfSEkpLAo+Pj4gKyAgICAgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBt bUNQX0hRRF9QUV9XUFRSX0hJLAo+Pj4gICAgICAgICAgICAgICAgICBtcWQtPmNwX2hxZF9wcV93 cHRyX2hpKTsKPj4+ICAgICAgIH0KPj4+ICAgICAgICAgLyogc2V0IHRoZSBwb2ludGVyIHRvIHRo ZSBNUUQgKi8KPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfTVFE X0JBU0VfQUREUiksCj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9NUURfQkFTRV9B RERSLAo+Pj4gICAgICAgICAgICAgIG1xZC0+Y3BfbXFkX2Jhc2VfYWRkcl9sbyk7Cj4+PiAtICAg IFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX01RRF9CQVNFX0FERFJfSEkpLAo+ Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfTVFEX0JBU0VfQUREUl9ISSwKPj4+ICAg ICAgICAgICAgICBtcWQtPmNwX21xZF9iYXNlX2FkZHJfaGkpOwo+Pj4gICAgICAgICAvKiBzZXQg TVFEIHZtaWQgdG8gMCAqLwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwg bW1DUF9NUURfQ09OVFJPTCksCj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9NUURf Q09OVFJPTCwKPj4+ICAgICAgICAgICAgICBtcWQtPmNwX21xZF9jb250cm9sKTsKPj4+ICAgICAg ICAgLyogc2V0IHRoZSBwb2ludGVyIHRvIHRoZSBIUUQsIHRoaXMgaXMgc2ltaWxhciAKPj4+IENQ X1JCMF9CQVNFL19ISSAqLwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwg bW1DUF9IUURfUFFfQkFTRSksCj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9IUURf UFFfQkFTRSwKPj4+ICAgICAgICAgICAgICBtcWQtPmNwX2hxZF9wcV9iYXNlX2xvKTsKPj4+IC0g ICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfSFFEX1BRX0JBU0VfSEkpLAo+ Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX1BRX0JBU0VfSEksCj4+PiAgICAg ICAgICAgICAgbXFkLT5jcF9ocWRfcHFfYmFzZV9oaSk7Cj4+PiAgICAgICAgIC8qIHNldCB1cCB0 aGUgSFFELCB0aGlzIGlzIHNpbWlsYXIgdG8gQ1BfUkIwX0NOVEwgKi8KPj4+IC0gICAgV1JFRzMy KFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfSFFEX1BRX0NPTlRST0wpLAo+Pj4gKyAgICBX UkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX1BRX0NPTlRST0wsCj4+PiAgICAgICAgICAgICAg bXFkLT5jcF9ocWRfcHFfY29udHJvbCk7Cj4+PiAgICAgICAgIC8qIHNldCB0aGUgd2IgYWRkcmVz cyB3aGV0aGVyIGl0J3MgZW5hYmxlZCBvciBub3QgKi8KPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JF R19PRkZTRVQoR0MsIDAsIG1tQ1BfSFFEX1BRX1JQVFJfUkVQT1JUX0FERFIpLAo+Pj4gKyAgICBX UkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX1BRX1JQVFJfUkVQT1JUX0FERFIsCj4+PiAgICAg ICAgICAgICAgICAgICBtcWQtPmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2xvKTsKPj4+IC0g ICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfSFFEX1BRX1JQVFJfUkVQT1JU X0FERFJfSEkpLAo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX1BRX1JQVFJf UkVQT1JUX0FERFJfSEksCj4+PiAgICAgICAgICAgICAgICAgICBtcWQtPmNwX2hxZF9wcV9ycHRy X3JlcG9ydF9hZGRyX2hpKTsKPj4+ICAgICAgICAgLyogb25seSB1c2VkIGlmCj4+PiBDUF9QUV9X UFRSX1BPTExfQ05UTC5DUF9QUV9XUFRSX1BPTExfQ05UTF9fRU5fTUFTSz0xICovCj4+PiAtICAg IFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9QUV9XUFRSX1BPTExfQURE UiksCj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9IUURfUFFfV1BUUl9QT0xMX0FE RFIsCj4+PiAgICAgICAgICAgICAgbXFkLT5jcF9ocWRfcHFfd3B0cl9wb2xsX2FkZHJfbG8pOwo+ Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9IUURfUFFfV1BUUl9Q T0xMX0FERFJfSEkpLAo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX1BRX1dQ VFJfUE9MTF9BRERSX0hJLAo+Pj4gICAgICAgICAgICAgIG1xZC0+Y3BfaHFkX3BxX3dwdHJfcG9s bF9hZGRyX2hpKTsKPj4+ICAgICAgICAgLyogZW5hYmxlIHRoZSBkb29yYmVsbCBpZiByZXF1ZXN0 ZWQgKi8KPj4+ICAgICAgIGlmIChyaW5nLT51c2VfZG9vcmJlbGwpIHsKPj4+IC0gICAgICAgIFdS RUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX01FQ19ET09SQkVMTF9SQU5HRV9MT1dF UiksCj4+PiArICAgICAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfTUVDX0RPT1JCRUxMX1JB TkdFX0xPV0VSLAo+Pj4gICAgICAgICAgICAgICAgICAgICAgIChBTURHUFVfRE9PUkJFTEw2NF9L SVEgKjIpIDw8IDIpOwo+Pj4gLSAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAs IG1tQ1BfTUVDX0RPT1JCRUxMX1JBTkdFX1VQUEVSKSwKPj4+ICsgICAgICAgIFdSRUczMl9TT0Mx NShHQywgMCwgbW1DUF9NRUNfRE9PUkJFTExfUkFOR0VfVVBQRVIsCj4+PiAgICAgICAgICAgICAg ICAgICAgICAgKEFNREdQVV9ET09SQkVMTDY0X1VTRVJRVUVVRV9FTkQgKiAyKSA8PCAyKTsKPj4+ ICAgICAgIH0KPj4+ICAgLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9I UURfUFFfRE9PUkJFTExfQ09OVFJPTCksCj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1D UF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCwKPj4+ICAgICAgICAgICAgICBtcWQtPmNwX2hxZF9w cV9kb29yYmVsbF9jb250cm9sKTsKPj4+ICAgICAgICAgLyogcmVzZXQgcmVhZCBhbmQgd3JpdGUg cG9pbnRlcnMsIHNpbWlsYXIgdG8gCj4+PiBDUF9SQjBfV1BUUi9fUlBUUiAqLwo+Pj4gLSAgICBX UkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9IUURfUFFfV1BUUl9MTyksCj4+PiAr ICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9IUURfUFFfV1BUUl9MTywKPj4+ICAgICAgICAg ICAgICBtcWQtPmNwX2hxZF9wcV93cHRyX2xvKTsKPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19P RkZTRVQoR0MsIDAsIG1tQ1BfSFFEX1BRX1dQVFJfSEkpLAo+Pj4gKyAgICBXUkVHMzJfU09DMTUo R0MsIDAsIG1tQ1BfSFFEX1BRX1dQVFJfSEksCj4+PiAgICAgICAgICAgICAgbXFkLT5jcF9ocWRf cHFfd3B0cl9oaSk7Cj4+PiAgICAgICAgIC8qIHNldCB0aGUgdm1pZCBmb3IgdGhlIHF1ZXVlICov Cj4+PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9WTUlEKSwg bXFkLT5jcF9ocWRfdm1pZCk7Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9IUURf Vk1JRCwgbXFkLT5jcF9ocWRfdm1pZCk7Cj4+PiAgIC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZT RVQoR0MsIDAsIG1tQ1BfSFFEX1BFUlNJU1RFTlRfU1RBVEUpLAo+Pj4gKyAgICBXUkVHMzJfU09D MTUoR0MsIDAsIG1tQ1BfSFFEX1BFUlNJU1RFTlRfU1RBVEUsCj4+PiAgICAgICAgICAgICAgbXFk LT5jcF9ocWRfcGVyc2lzdGVudF9zdGF0ZSk7Cj4+PiAgICAgICAgIC8qIGFjdGl2YXRlIHRoZSBx dWV1ZSAqLwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9IUURf QUNUSVZFKSwKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX0hRRF9BQ1RJVkUsCj4+ PiAgICAgICAgICAgICAgbXFkLT5jcF9ocWRfYWN0aXZlKTsKPj4+ICAgICAgICAgaWYgKHJpbmct PnVzZV9kb29yYmVsbCkKPj4+IEBAIC0yMzIzLDcgKzIzMjMsNyBAQCBzdGF0aWMgYm9vbCBnZnhf djlfMF9pc19pZGxlKHZvaWQgKmhhbmRsZSkKPj4+ICAgewo+Pj4gICAgICAgc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+PiAgIC0g ICAgaWYgKFJFR19HRVRfRklFTEQoUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIAo+Pj4g bW1HUkJNX1NUQVRVUykpLAo+Pj4gKyAgICBpZiAoUkVHX0dFVF9GSUVMRChSUkVHMzJfU09DMTUo R0MsIDAsIG1tR1JCTV9TVEFUVVMpLAo+Pj4gICAgICAgICAgICAgICAgICAgR1JCTV9TVEFUVVMs IEdVSV9BQ1RJVkUpKQo+Pj4gICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4+ICAgICAgIGVsc2UK Pj4+IEBAIC0yMzM4LDcgKzIzMzgsNyBAQCBzdGF0aWMgaW50IGdmeF92OV8wX3dhaXRfZm9yX2lk bGUodm9pZCAqaGFuZGxlKQo+Pj4gICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYWRldi0+dXNlY190 aW1lb3V0OyBpKyspIHsKPj4+ICAgICAgICAgICAvKiByZWFkIE1DX1NUQVRVUyAqLwo+Pj4gLSAg ICAgICAgdG1wID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tR1JCTV9TVEFUVVMp KSAmCj4+PiArICAgICAgICB0bXAgPSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tR1JCTV9TVEFUVVMp ICYKPj4+ICAgICAgICAgICAgICAgR1JCTV9TVEFUVVNfX0dVSV9BQ1RJVkVfTUFTSzsKPj4+ICAg ICAgICAgICAgIGlmICghUkVHX0dFVF9GSUVMRCh0bXAsIEdSQk1fU1RBVFVTLCBHVUlfQUNUSVZF KSkKPj4+IEBAIC0yMzU1LDcgKzIzNTUsNyBAQCBzdGF0aWMgaW50IGdmeF92OV8wX3NvZnRfcmVz ZXQodm9pZCAqaGFuZGxlKQo+Pj4gICAgICAgc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAo c3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7Cj4+PiAgICAgICAgIC8qIEdSQk1fU1RBVFVT ICovCj4+PiAtICAgIHRtcCA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUdSQk1f U1RBVFVTKSk7Cj4+PiArICAgIHRtcCA9IFJSRUczMl9TT0MxNShHQywgMCwgbW1HUkJNX1NUQVRV Uyk7Cj4+PiAgICAgICBpZiAodG1wICYgKEdSQk1fU1RBVFVTX19QQV9CVVNZX01BU0sgfCAKPj4+ IEdSQk1fU1RBVFVTX19TQ19CVVNZX01BU0sgfAo+Pj4gICAgICAgICAgICAgIEdSQk1fU1RBVFVT X19CQ0lfQlVTWV9NQVNLIHwgR1JCTV9TVEFUVVNfX1NYX0JVU1lfTUFTSyB8Cj4+PiAgICAgICAg ICAgICAgR1JCTV9TVEFUVVNfX1RBX0JVU1lfTUFTSyB8IEdSQk1fU1RBVFVTX19WR1RfQlVTWV9N QVNLIHwKPj4+IEBAIC0yMzc0LDcgKzIzNzQsNyBAQCBzdGF0aWMgaW50IGdmeF92OV8wX3NvZnRf cmVzZXQodm9pZCAqaGFuZGxlKQo+Pj4gICAgICAgfQo+Pj4gICAgICAgICAvKiBHUkJNX1NUQVRV UzIgKi8KPj4+IC0gICAgdG1wID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tR1JC TV9TVEFUVVMyKSk7Cj4+PiArICAgIHRtcCA9IFJSRUczMl9TT0MxNShHQywgMCwgbW1HUkJNX1NU QVRVUzIpOwo+Pj4gICAgICAgaWYgKFJFR19HRVRfRklFTEQodG1wLCBHUkJNX1NUQVRVUzIsIFJM Q19CVVNZKSkKPj4+ICAgICAgICAgICBncmJtX3NvZnRfcmVzZXQgPSBSRUdfU0VUX0ZJRUxEKGdy Ym1fc29mdF9yZXNldCwKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JCTV9TT0ZUX1JF U0VULCBTT0ZUX1JFU0VUX1JMQywgMSk7Cj4+PiBAQCAtMjM5MSwxNyArMjM5MSwxNyBAQCBzdGF0 aWMgaW50IGdmeF92OV8wX3NvZnRfcmVzZXQodm9pZCAqaGFuZGxlKQo+Pj4gICAgICAgICAgIGdm eF92OV8wX2NwX2NvbXB1dGVfZW5hYmxlKGFkZXYsIGZhbHNlKTsKPj4+ICAgICAgICAgICAgIGlm IChncmJtX3NvZnRfcmVzZXQpIHsKPj4+IC0gICAgICAgICAgICB0bXAgPSBSUkVHMzIoU09DMTVf UkVHX09GRlNFVChHQywgMCwgbW1HUkJNX1NPRlRfUkVTRVQpKTsKPj4+ICsgICAgICAgICAgICB0 bXAgPSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tR1JCTV9TT0ZUX1JFU0VUKTsKPj4+ICAgICAgICAg ICAgICAgdG1wIHw9IGdyYm1fc29mdF9yZXNldDsKPj4+ICAgICAgICAgICAgICAgZGV2X2luZm8o YWRldi0+ZGV2LCAiR1JCTV9TT0ZUX1JFU0VUPTB4JTA4WFxuIiwgdG1wKTsKPj4+IC0gICAgICAg ICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1HUkJNX1NPRlRfUkVTRVQpLCB0 bXApOwo+Pj4gLSAgICAgICAgICAgIHRtcCA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAw LCBtbUdSQk1fU09GVF9SRVNFVCkpOwo+Pj4gKyAgICAgICAgICAgIFdSRUczMl9TT0MxNShHQywg MCwgbW1HUkJNX1NPRlRfUkVTRVQsIHRtcCk7Cj4+PiArICAgICAgICAgICAgdG1wID0gUlJFRzMy X1NPQzE1KEdDLCAwLCBtbUdSQk1fU09GVF9SRVNFVCk7Cj4+PiAgICAgICAgICAgICAgICAgdWRl bGF5KDUwKTsKPj4+ICAgICAgICAgICAgICAgICB0bXAgJj0gfmdyYm1fc29mdF9yZXNldDsKPj4+ IC0gICAgICAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1HUkJNX1NPRlRf UkVTRVQpLCB0bXApOwo+Pj4gLSAgICAgICAgICAgIHRtcCA9IFJSRUczMihTT0MxNV9SRUdfT0ZG U0VUKEdDLCAwLCBtbUdSQk1fU09GVF9SRVNFVCkpOwo+Pj4gKyAgICAgICAgICAgIFdSRUczMl9T T0MxNShHQywgMCwgbW1HUkJNX1NPRlRfUkVTRVQsIHRtcCk7Cj4+PiArICAgICAgICAgICAgdG1w ID0gUlJFRzMyX1NPQzE1KEdDLCAwLCBtbUdSQk1fU09GVF9SRVNFVCk7Cj4+PiAgICAgICAgICAg fQo+Pj4gICAgICAgICAgICAgLyogV2FpdCBhIGxpdHRsZSBmb3IgdGhpbmdzIHRvIHNldHRsZSBk b3duICovCj4+PiBAQCAtMjQxNSw5ICsyNDE1LDkgQEAgc3RhdGljIHVpbnQ2NF90Cj4+PiBnZnhf djlfMF9nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+ PiAgICAgICB1aW50NjRfdCBjbG9jazsKPj4+ICAgICAgICAgbXV0ZXhfbG9jaygmYWRldi0+Z2Z4 LmdwdV9jbG9ja19tdXRleCk7Cj4+PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAw LCBtbVJMQ19DQVBUVVJFX0dQVV9DTE9DS19DT1VOVCksIDEpOwo+Pj4gLSAgICBjbG9jayA9ICh1 aW50NjRfdClSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwKPj4+IG1tUkxDX0dQVV9DTE9D S19DT1VOVF9MU0IpKSB8Cj4+PiAtICAgICAgICAoKHVpbnQ2NF90KVJSRUczMihTT0MxNV9SRUdf T0ZGU0VUKEdDLCAwLAo+Pj4gbW1STENfR1BVX0NMT0NLX0NPVU5UX01TQikpIDw8IDMyVUxMKTsK Pj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19DQVBUVVJFX0dQVV9DTE9DS19DT1VO VCwgMSk7Cj4+PiArICAgIGNsb2NrID0gKHVpbnQ2NF90KVJSRUczMl9TT0MxNShHQywgMCwgbW1S TENfR1BVX0NMT0NLX0NPVU5UX0xTQikgfAo+Pj4gKyAgICAgICAgKCh1aW50NjRfdClSUkVHMzJf U09DMTUoR0MsIDAsIG1tUkxDX0dQVV9DTE9DS19DT1VOVF9NU0IpIDw8Cj4+PiAzMlVMTCk7Cj4+ PiAgICAgICBtdXRleF91bmxvY2soJmFkZXYtPmdmeC5ncHVfY2xvY2tfbXV0ZXgpOwo+Pj4gICAg ICAgcmV0dXJuIGNsb2NrOwo+Pj4gICB9Cj4+PiBAQCAtMjQ5Nyw3ICsyNDk3LDcgQEAgc3RhdGlj IHZvaWQgZ2Z4X3Y5XzBfZW50ZXJfcmxjX3NhZmVfbW9kZShzdHJ1Y3QKPj4+IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCj4+PiAgICAgICAgICAgcmV0dXJuOwo+Pj4gICAgICAgICAvKiBpZiBSTEMgaXMg bm90IGVuYWJsZWQsIGRvIG5vdGhpbmcgKi8KPj4+IC0gICAgcmxjX3NldHRpbmcgPSBSUkVHMzIo U09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1STENfQ05UTCkpOwo+Pj4gKyAgICBybGNfc2V0dGlu ZyA9IFJSRUczMl9TT0MxNShHQywgMCwgbW1STENfQ05UTCk7Cj4+PiAgICAgICBpZiAoIShybGNf c2V0dGluZyAmIFJMQ19DTlRMX19STENfRU5BQkxFX0YzMl9NQVNLKSkKPj4+ICAgICAgICAgICBy ZXR1cm47Cj4+PiAgIEBAIC0yNTA2LDcgKzI1MDYsNyBAQCBzdGF0aWMgdm9pZAo+Pj4gZ2Z4X3Y5 XzBfZW50ZXJfcmxjX3NhZmVfbW9kZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4+ICAg ICAgICAgICAgQU1EX0NHX1NVUFBPUlRfR0ZYXzNEX0NHQ0cpKSB7Cj4+PiAgICAgICAgICAgZGF0 YSA9IFJMQ19TQUZFX01PREVfX0NNRF9NQVNLOwo+Pj4gICAgICAgICAgIGRhdGEgfD0gKDEgPDwg UkxDX1NBRkVfTU9ERV9fTUVTU0FHRV9fU0hJRlQpOwo+Pj4gLSAgICAgICAgV1JFRzMyKFNPQzE1 X1JFR19PRkZTRVQoR0MsIDAsIG1tUkxDX1NBRkVfTU9ERSksIGRhdGEpOwo+Pj4gKyAgICAgICAg V1JFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19TQUZFX01PREUsIGRhdGEpOwo+Pj4gICAgICAgICAg ICAgLyogd2FpdCBmb3IgUkxDX1NBRkVfTU9ERSAqLwo+Pj4gICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewo+Pj4gQEAgLTI1MjYsNyArMjUyNiw3IEBA IHN0YXRpYyB2b2lkIGdmeF92OV8wX2V4aXRfcmxjX3NhZmVfbW9kZShzdHJ1Y3QKPj4+IGFtZGdw dV9kZXZpY2UgKmFkZXYpCj4+PiAgICAgICAgICAgcmV0dXJuOwo+Pj4gICAgICAgICAvKiBpZiBS TEMgaXMgbm90IGVuYWJsZWQsIGRvIG5vdGhpbmcgKi8KPj4+IC0gICAgcmxjX3NldHRpbmcgPSBS UkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1STENfQ05UTCkpOwo+Pj4gKyAgICBybGNf c2V0dGluZyA9IFJSRUczMl9TT0MxNShHQywgMCwgbW1STENfQ05UTCk7Cj4+PiAgICAgICBpZiAo IShybGNfc2V0dGluZyAmIFJMQ19DTlRMX19STENfRU5BQkxFX0YzMl9NQVNLKSkKPj4+ICAgICAg ICAgICByZXR1cm47Cj4+PiAgIEBAIC0yNTM3LDcgKzI1MzcsNyBAQCBzdGF0aWMgdm9pZCBnZnhf djlfMF9leGl0X3JsY19zYWZlX21vZGUoc3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICphZGV2KQo+ Pj4gICAgICAgICAgICAqIG1vZGUuCj4+PiAgICAgICAgICAgICovCj4+PiAgICAgICAgICAgZGF0 YSA9IFJMQ19TQUZFX01PREVfX0NNRF9NQVNLOwo+Pj4gLSAgICAgICAgV1JFRzMyKFNPQzE1X1JF R19PRkZTRVQoR0MsIDAsIG1tUkxDX1NBRkVfTU9ERSksIGRhdGEpOwo+Pj4gKyAgICAgICAgV1JF RzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19TQUZFX01PREUsIGRhdGEpOwo+Pj4gICAgICAgICAgIGFk ZXYtPmdmeC5ybGMuaW5fc2FmZV9tb2RlID0gZmFsc2U7Cj4+PiAgICAgICB9Cj4+PiAgIH0KPj4+ IEBAIC0yNTUwLDcgKzI1NTAsNyBAQCBzdGF0aWMgdm9pZAo+Pj4gZ2Z4X3Y5XzBfdXBkYXRlX21l ZGl1bV9ncmFpbl9jbG9ja19nYXRpbmcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYKPj4+ICAg ICAgIC8qIEl0IGlzIGRpc2FibGVkIGJ5IEhXIGJ5IGRlZmF1bHQgKi8KPj4+ICAgICAgIGlmIChl bmFibGUgJiYgKGFkZXYtPmNnX2ZsYWdzICYgQU1EX0NHX1NVUFBPUlRfR0ZYX01HQ0cpKSB7Cj4+ PiAgICAgICAgICAgLyogMSAtIFJMQ19DR1RUX01HQ0dfT1ZFUlJJREUgKi8KPj4+IC0gICAgICAg IGRlZiA9IGRhdGEgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwKPj4+IG1tUkxDX0NH VFRfTUdDR19PVkVSUklERSkpOwo+Pj4gKyAgICAgICAgZGVmID0gZGF0YSA9IFJSRUczMl9TT0Mx NShHQywgMCwgbW1STENfQ0dUVF9NR0NHX09WRVJSSURFKTsKPj4+ICAgICAgICAgICBkYXRhICY9 IAo+Pj4gfihSTENfQ0dUVF9NR0NHX09WRVJSSURFX19DUEZfQ0dUVF9TQ0xLX09WRVJSSURFX01B U0sgfAo+Pj4gUkxDX0NHVFRfTUdDR19PVkVSUklERV9fR1JCTV9DR1RUX1NDTEtfT1ZFUlJJREVf TUFTSyB8Cj4+PiBSTENfQ0dUVF9NR0NHX09WRVJSSURFX19HRlhJUF9NR0NHX09WRVJSSURFX01B U0sgfAo+Pj4gQEAgLTI1NjAsNDggKzI1NjAsNDggQEAgc3RhdGljIHZvaWQKPj4+IGdmeF92OV8w X3VwZGF0ZV9tZWRpdW1fZ3JhaW5fY2xvY2tfZ2F0aW5nKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2Cj4+PiAgICAgICAgICAgZGF0YSB8PSBSTENfQ0dUVF9NR0NHX09WRVJSSURFX19STENfQ0dU VF9TQ0xLX09WRVJSSURFX01BU0s7Cj4+PiAgICAgICAgICAgICBpZiAoZGVmICE9IGRhdGEpCj4+ PiAtICAgICAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tUkxDX0NHVFRf TUdDR19PVkVSUklERSksCj4+PiBkYXRhKTsKPj4+ICsgICAgICAgICAgICBXUkVHMzJfU09DMTUo R0MsIDAsIG1tUkxDX0NHVFRfTUdDR19PVkVSUklERSwgZGF0YSk7Cj4+PiAgICAgICAgICAgICAv KiBNR0xTIGlzIGEgZ2xvYmFsIGZsYWcgdG8gY29udHJvbCBhbGwgTUdMUyBpbiBHRlggKi8KPj4+ ICAgICAgICAgICBpZiAoYWRldi0+Y2dfZmxhZ3MgJiBBTURfQ0dfU1VQUE9SVF9HRlhfTUdMUykg ewo+Pj4gICAgICAgICAgICAgICAvKiAyIC0gUkxDIG1lbW9yeSBMaWdodCBzbGVlcCAqLwo+Pj4g ICAgICAgICAgICAgICBpZiAoYWRldi0+Y2dfZmxhZ3MgJiBBTURfQ0dfU1VQUE9SVF9HRlhfUkxD X0xTKSB7Cj4+PiAtICAgICAgICAgICAgICAgIGRlZiA9IGRhdGEgPSBSUkVHMzIoU09DMTVfUkVH X09GRlNFVChHQywgMCwKPj4+IG1tUkxDX01FTV9TTFBfQ05UTCkpOwo+Pj4gKyAgICAgICAgICAg ICAgICBkZWYgPSBkYXRhID0gUlJFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19NRU1fU0xQX0NOVEwp Owo+Pj4gICAgICAgICAgICAgICAgICAgZGF0YSB8PSBSTENfTUVNX1NMUF9DTlRMX19STENfTUVN X0xTX0VOX01BU0s7Cj4+PiAgICAgICAgICAgICAgICAgICBpZiAoZGVmICE9IGRhdGEpCj4+PiAt ICAgICAgICAgICAgICAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwKPj4+IG1t UkxDX01FTV9TTFBfQ05UTCksIGRhdGEpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgV1JFRzMy X1NPQzE1KEdDLCAwLCBtbVJMQ19NRU1fU0xQX0NOVEwsIGRhdGEpOwo+Pj4gICAgICAgICAgICAg ICB9Cj4+PiAgICAgICAgICAgICAgIC8qIDMgLSBDUCBtZW1vcnkgTGlnaHQgc2xlZXAgKi8KPj4+ ICAgICAgICAgICAgICAgaWYgKGFkZXYtPmNnX2ZsYWdzICYgQU1EX0NHX1NVUFBPUlRfR0ZYX0NQ X0xTKSB7Cj4+PiAtICAgICAgICAgICAgICAgIGRlZiA9IGRhdGEgPSBSUkVHMzIoU09DMTVfUkVH X09GRlNFVChHQywgMCwKPj4+IG1tQ1BfTUVNX1NMUF9DTlRMKSk7Cj4+PiArICAgICAgICAgICAg ICAgIGRlZiA9IGRhdGEgPSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfTUVNX1NMUF9DTlRMKTsK Pj4+ICAgICAgICAgICAgICAgICAgIGRhdGEgfD0gQ1BfTUVNX1NMUF9DTlRMX19DUF9NRU1fTFNf RU5fTUFTSzsKPj4+ICAgICAgICAgICAgICAgICAgIGlmIChkZWYgIT0gZGF0YSkKPj4+IC0gICAg ICAgICAgICAgICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+Pj4gbW1DUF9N RU1fU0xQX0NOVEwpLCBkYXRhKTsKPj4+ICsgICAgICAgICAgICAgICAgICAgIFdSRUczMl9TT0Mx NShHQywgMCwgbW1DUF9NRU1fU0xQX0NOVEwsIGRhdGEpOwo+Pj4gICAgICAgICAgICAgICB9Cj4+ PiAgICAgICAgICAgfQo+Pj4gICAgICAgfSBlbHNlIHsKPj4+ICAgICAgICAgICAvKiAxIC0gTUdD R19PVkVSUklERSAqLwo+Pj4gLSAgICAgICAgZGVmID0gZGF0YSA9IFJSRUczMihTT0MxNV9SRUdf T0ZGU0VUKEdDLCAwLAo+Pj4gbW1STENfQ0dUVF9NR0NHX09WRVJSSURFKSk7Cj4+PiArICAgICAg ICBkZWYgPSBkYXRhID0gUlJFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19DR1RUX01HQ0dfT1ZFUlJJ REUpOwo+Pj4gICAgICAgICAgIGRhdGEgfD0gCj4+PiAoUkxDX0NHVFRfTUdDR19PVkVSUklERV9f Q1BGX0NHVFRfU0NMS19PVkVSUklERV9NQVNLIHwKPj4+IFJMQ19DR1RUX01HQ0dfT1ZFUlJJREVf X1JMQ19DR1RUX1NDTEtfT1ZFUlJJREVfTUFTSyB8Cj4+PiBSTENfQ0dUVF9NR0NHX09WRVJSSURF X19HUkJNX0NHVFRfU0NMS19PVkVSUklERV9NQVNLIHwKPj4+IFJMQ19DR1RUX01HQ0dfT1ZFUlJJ REVfX0dGWElQX01HQ0dfT1ZFUlJJREVfTUFTSyB8Cj4+PiBSTENfQ0dUVF9NR0NHX09WRVJSSURF X19HRlhJUF9NR0xTX09WRVJSSURFX01BU0spOwo+Pj4gICAgICAgICAgIGlmIChkZWYgIT0gZGF0 YSkKPj4+IC0gICAgICAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1STENf Q0dUVF9NR0NHX09WRVJSSURFKSwKPj4+IGRhdGEpOwo+Pj4gKyAgICAgICAgICAgIFdSRUczMl9T T0MxNShHQywgMCwgbW1STENfQ0dUVF9NR0NHX09WRVJSSURFLCBkYXRhKTsKPj4+ICAgICAgICAg ICAgIC8qIDIgLSBkaXNhYmxlIE1HTFMgaW4gUkxDICovCj4+PiAtICAgICAgICBkYXRhID0gUlJF RzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tUkxDX01FTV9TTFBfQ05UTCkpOwo+Pj4gKyAg ICAgICAgZGF0YSA9IFJSRUczMl9TT0MxNShHQywgMCwgbW1STENfTUVNX1NMUF9DTlRMKTsKPj4+ ICAgICAgICAgICBpZiAoZGF0YSAmIFJMQ19NRU1fU0xQX0NOVExfX1JMQ19NRU1fTFNfRU5fTUFT Sykgewo+Pj4gICAgICAgICAgICAgICBkYXRhICY9IH5STENfTUVNX1NMUF9DTlRMX19STENfTUVN X0xTX0VOX01BU0s7Cj4+PiAtICAgICAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0Ms IDAsIG1tUkxDX01FTV9TTFBfQ05UTCksIGRhdGEpOwo+Pj4gKyAgICAgICAgICAgIFdSRUczMl9T T0MxNShHQywgMCwgbW1STENfTUVNX1NMUF9DTlRMLCBkYXRhKTsKPj4+ICAgICAgICAgICB9Cj4+ PiAgICAgICAgICAgICAvKiAzIC0gZGlzYWJsZSBNR0xTIGluIENQICovCj4+PiAtICAgICAgICBk YXRhID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfTUVNX1NMUF9DTlRMKSk7 Cj4+PiArICAgICAgICBkYXRhID0gUlJFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX01FTV9TTFBfQ05U TCk7Cj4+PiAgICAgICAgICAgaWYgKGRhdGEgJiBDUF9NRU1fU0xQX0NOVExfX0NQX01FTV9MU19F Tl9NQVNLKSB7Cj4+PiAgICAgICAgICAgICAgIGRhdGEgJj0gfkNQX01FTV9TTFBfQ05UTF9fQ1Bf TUVNX0xTX0VOX01BU0s7Cj4+PiAtICAgICAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQo R0MsIDAsIG1tQ1BfTUVNX1NMUF9DTlRMKSwgZGF0YSk7Cj4+PiArICAgICAgICAgICAgV1JFRzMy X1NPQzE1KEdDLCAwLCBtbUNQX01FTV9TTFBfQ05UTCwgZGF0YSk7Cj4+PiAgICAgICAgICAgfQo+ Pj4gICAgICAgfQo+Pj4gICB9Cj4+PiBAQCAtMjYxNiwzNyArMjYxNiwzNyBAQCBzdGF0aWMgdm9p ZAo+Pj4gZ2Z4X3Y5XzBfdXBkYXRlXzNkX2Nsb2NrX2dhdGluZyhzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwKPj4+ICAgICAgIC8qIEVuYWJsZSAzRCBDR0NHL0NHTFMgKi8KPj4+ICAgICAgIGlm IChlbmFibGUgJiYgKGFkZXYtPmNnX2ZsYWdzICYgQU1EX0NHX1NVUFBPUlRfR0ZYXzNEX0NHQ0cp KSB7Cj4+PiAgICAgICAgICAgLyogd3JpdGUgY21kIHRvIGNsZWFyIGNnY2cvY2dscyBvdiAqLwo+ Pj4gLSAgICAgICAgZGVmID0gZGF0YSA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+ Pj4gbW1STENfQ0dUVF9NR0NHX09WRVJSSURFKSk7Cj4+PiArICAgICAgICBkZWYgPSBkYXRhID0g UlJFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19DR1RUX01HQ0dfT1ZFUlJJREUpOwo+Pj4gICAgICAg ICAgIC8qIHVuc2V0IENHQ0cgb3ZlcnJpZGUgKi8KPj4+ICAgICAgICAgICBkYXRhICY9IAo+Pj4g flJMQ19DR1RUX01HQ0dfT1ZFUlJJREVfX0dGWElQX0dGWDNEX0NHX09WRVJSSURFX01BU0s7Cj4+ PiAgICAgICAgICAgLyogdXBkYXRlIENHQ0cgYW5kIENHTFMgb3ZlcnJpZGUgYml0cyAqLwo+Pj4g ICAgICAgICAgIGlmIChkZWYgIT0gZGF0YSkKPj4+IC0gICAgICAgICAgICBXUkVHMzIoU09DMTVf UkVHX09GRlNFVChHQywgMCwgbW1STENfQ0dUVF9NR0NHX09WRVJSSURFKSwKPj4+IGRhdGEpOwo+ Pj4gKyAgICAgICAgICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1STENfQ0dUVF9NR0NHX09WRVJS SURFLCBkYXRhKTsKPj4+ICAgICAgICAgICAvKiBlbmFibGUgM0RjZ2NnIEZTTSgweDAwMjAwMDNm KSAqLwo+Pj4gLSAgICAgICAgZGVmID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIAo+ Pj4gbW1STENfQ0dDR19DR0xTX0NUUkxfM0QpKTsKPj4+ICsgICAgICAgIGRlZiA9IFJSRUczMl9T T0MxNShHQywgMCwgbW1STENfQ0dDR19DR0xTX0NUUkxfM0QpOwo+Pj4gICAgICAgICAgIGRhdGEg PSAoMHgyMDAwIDw8Cj4+PiBSTENfQ0dDR19DR0xTX0NUUkxfM0RfX0NHQ0dfR0ZYX0lETEVfVEhS RVNIT0xEX19TSElGVCkgfAo+Pj4gICAgICAgICAgICAgICBSTENfQ0dDR19DR0xTX0NUUkxfM0Rf X0NHQ0dfRU5fTUFTSzsKPj4+ICAgICAgICAgICBpZiAoYWRldi0+Y2dfZmxhZ3MgJiBBTURfQ0df U1VQUE9SVF9HRlhfM0RfQ0dMUykKPj4+ICAgICAgICAgICAgICAgZGF0YSB8PSAoMHgwMDBGIDw8 Cj4+PiBSTENfQ0dDR19DR0xTX0NUUkxfM0RfX0NHTFNfUkVQX0NPTVBBTlNBVF9ERUxBWV9fU0hJ RlQpIHwKPj4+ICAgICAgICAgICAgICAgICAgIFJMQ19DR0NHX0NHTFNfQ1RSTF8zRF9fQ0dMU19F Tl9NQVNLOwo+Pj4gICAgICAgICAgIGlmIChkZWYgIT0gZGF0YSkKPj4+IC0gICAgICAgICAgICBX UkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1STENfQ0dDR19DR0xTX0NUUkxfM0QpLAo+ Pj4gZGF0YSk7Cj4+PiArICAgICAgICAgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19DR0NH X0NHTFNfQ1RSTF8zRCwgZGF0YSk7Cj4+PiAgICAgICAgICAgICAvKiBzZXQgSURMRV9QT0xMX0NP VU5UKDB4MDA5MDAxMDApICovCj4+PiAtICAgICAgICBkZWYgPSBSUkVHMzIoU09DMTVfUkVHX09G RlNFVChHQywgMCwgbW1DUF9SQl9XUFRSX1BPTExfQ05UTCkpOwo+Pj4gKyAgICAgICAgZGVmID0g UlJFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX1JCX1dQVFJfUE9MTF9DTlRMKTsKPj4+ICAgICAgICAg ICBkYXRhID0gKDB4MDEwMCA8PAo+Pj4gQ1BfUkJfV1BUUl9QT0xMX0NOVExfX1BPTExfRlJFUVVF TkNZX19TSElGVCkgfAo+Pj4gICAgICAgICAgICAgICAoMHgwMDkwIDw8IENQX1JCX1dQVFJfUE9M TF9DTlRMX19JRExFX1BPTExfQ09VTlRfX1NISUZUKTsKPj4+ICAgICAgICAgICBpZiAoZGVmICE9 IGRhdGEpCj4+PiAtICAgICAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1t Q1BfUkJfV1BUUl9QT0xMX0NOVEwpLAo+Pj4gZGF0YSk7Cj4+PiArICAgICAgICAgICAgV1JFRzMy X1NPQzE1KEdDLCAwLCBtbUNQX1JCX1dQVFJfUE9MTF9DTlRMLCBkYXRhKTsKPj4+ICAgICAgIH0g ZWxzZSB7Cj4+PiAgICAgICAgICAgLyogRGlzYWJsZSBDR0NHL0NHTFMgKi8KPj4+IC0gICAgICAg IGRlZiA9IGRhdGEgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwKPj4+IG1tUkxDX0NH Q0dfQ0dMU19DVFJMXzNEKSk7Cj4+PiArICAgICAgICBkZWYgPSBkYXRhID0gUlJFRzMyX1NPQzE1 KEdDLCAwLCBtbVJMQ19DR0NHX0NHTFNfQ1RSTF8zRCk7Cj4+PiAgICAgICAgICAgLyogZGlzYWJs ZSBjZ2NnLCBjZ2xzIHNob3VsZCBiZSBkaXNhYmxlZCAqLwo+Pj4gICAgICAgICAgIGRhdGEgJj0g fihSTENfQ0dDR19DR0xTX0NUUkxfM0RfX0NHQ0dfRU5fTUFTSyB8Cj4+PiAgICAgICAgICAgICAg ICAgUkxDX0NHQ0dfQ0dMU19DVFJMXzNEX19DR0xTX0VOX01BU0spOwo+Pj4gICAgICAgICAgIC8q IGRpc2FibGUgY2djZyBhbmQgY2dscyBpbiBGU00gKi8KPj4+ICAgICAgICAgICBpZiAoZGVmICE9 IGRhdGEpCj4+PiAtICAgICAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1t UkxDX0NHQ0dfQ0dMU19DVFJMXzNEKSwKPj4+IGRhdGEpOwo+Pj4gKyAgICAgICAgICAgIFdSRUcz Ml9TT0MxNShHQywgMCwgbW1STENfQ0dDR19DR0xTX0NUUkxfM0QsIGRhdGEpOwo+Pj4gICAgICAg fQo+Pj4gICAgICAgICBhZGV2LT5nZngucmxjLmZ1bmNzLT5leGl0X3NhZmVfbW9kZShhZGV2KTsK Pj4+IEBAIC0yNjYwLDcgKzI2NjAsNyBAQCBzdGF0aWMgdm9pZAo+Pj4gZ2Z4X3Y5XzBfdXBkYXRl X2NvYXJzZV9ncmFpbl9jbG9ja19nYXRpbmcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYKPj4+ ICAgICAgIGFkZXYtPmdmeC5ybGMuZnVuY3MtPmVudGVyX3NhZmVfbW9kZShhZGV2KTsKPj4+ICAg ICAgICAgaWYgKGVuYWJsZSAmJiAoYWRldi0+Y2dfZmxhZ3MgJiBBTURfQ0dfU1VQUE9SVF9HRlhf Q0dDRykpIHsKPj4+IC0gICAgICAgIGRlZiA9IGRhdGEgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNF VChHQywgMCwKPj4+IG1tUkxDX0NHVFRfTUdDR19PVkVSUklERSkpOwo+Pj4gKyAgICAgICAgZGVm ID0gZGF0YSA9IFJSRUczMl9TT0MxNShHQywgMCwgbW1STENfQ0dUVF9NR0NHX09WRVJSSURFKTsK Pj4+ICAgICAgICAgICAvKiB1bnNldCBDR0NHIG92ZXJyaWRlICovCj4+PiAgICAgICAgICAgZGF0 YSAmPSB+UkxDX0NHVFRfTUdDR19PVkVSUklERV9fR0ZYSVBfQ0dDR19PVkVSUklERV9NQVNLOwo+ Pj4gICAgICAgICAgIGlmIChhZGV2LT5jZ19mbGFncyAmIEFNRF9DR19TVVBQT1JUX0dGWF9DR0xT KQo+Pj4gQEAgLTI2NjksMzEgKzI2NjksMzEgQEAgc3RhdGljIHZvaWQKPj4+IGdmeF92OV8wX3Vw ZGF0ZV9jb2Fyc2VfZ3JhaW5fY2xvY2tfZ2F0aW5nKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 Cj4+PiAgICAgICAgICAgICAgIGRhdGEgfD0gUkxDX0NHVFRfTUdDR19PVkVSUklERV9fR0ZYSVBf Q0dMU19PVkVSUklERV9NQVNLOwo+Pj4gICAgICAgICAgIC8qIHVwZGF0ZSBDR0NHIGFuZCBDR0xT IG92ZXJyaWRlIGJpdHMgKi8KPj4+ICAgICAgICAgICBpZiAoZGVmICE9IGRhdGEpCj4+PiAtICAg ICAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tUkxDX0NHVFRfTUdDR19P VkVSUklERSksCj4+PiBkYXRhKTsKPj4+ICsgICAgICAgICAgICBXUkVHMzJfU09DMTUoR0MsIDAs IG1tUkxDX0NHVFRfTUdDR19PVkVSUklERSwgZGF0YSk7Cj4+PiAgICAgICAgICAgICAvKiBlbmFi bGUgY2djZyBGU00oMHgwMDIwMDAzRikgKi8KPj4+IC0gICAgICAgIGRlZiA9IFJSRUczMihTT0Mx NV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVJMQ19DR0NHX0NHTFNfQ1RSTCkpOwo+Pj4gKyAgICAgICAg ZGVmID0gUlJFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19DR0NHX0NHTFNfQ1RSTCk7Cj4+PiAgICAg ICAgICAgZGF0YSA9ICgweDIwMDAgPDwKPj4+IFJMQ19DR0NHX0NHTFNfQ1RSTF9fQ0dDR19HRlhf SURMRV9USFJFU0hPTERfX1NISUZUKSB8Cj4+PiAgICAgICAgICAgICAgIFJMQ19DR0NHX0NHTFNf Q1RSTF9fQ0dDR19FTl9NQVNLOwo+Pj4gICAgICAgICAgIGlmIChhZGV2LT5jZ19mbGFncyAmIEFN RF9DR19TVVBQT1JUX0dGWF9DR0xTKQo+Pj4gICAgICAgICAgICAgICBkYXRhIHw9ICgweDAwMEYg PDwKPj4+IFJMQ19DR0NHX0NHTFNfQ1RSTF9fQ0dMU19SRVBfQ09NUEFOU0FUX0RFTEFZX19TSElG VCkgfAo+Pj4gICAgICAgICAgICAgICAgICAgUkxDX0NHQ0dfQ0dMU19DVFJMX19DR0xTX0VOX01B U0s7Cj4+PiAgICAgICAgICAgaWYgKGRlZiAhPSBkYXRhKQo+Pj4gLSAgICAgICAgICAgIFdSRUcz MihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVJMQ19DR0NHX0NHTFNfQ1RSTCksIAo+Pj4gZGF0 YSk7Cj4+PiArICAgICAgICAgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19DR0NHX0NHTFNf Q1RSTCwgZGF0YSk7Cj4+PiAgICAgICAgICAgICAvKiBzZXQgSURMRV9QT0xMX0NPVU5UKDB4MDA5 MDAxMDApICovCj4+PiAtICAgICAgICBkZWYgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywg MCwgbW1DUF9SQl9XUFRSX1BPTExfQ05UTCkpOwo+Pj4gKyAgICAgICAgZGVmID0gUlJFRzMyX1NP QzE1KEdDLCAwLCBtbUNQX1JCX1dQVFJfUE9MTF9DTlRMKTsKPj4+ICAgICAgICAgICBkYXRhID0g KDB4MDEwMCA8PAo+Pj4gQ1BfUkJfV1BUUl9QT0xMX0NOVExfX1BPTExfRlJFUVVFTkNZX19TSElG VCkgfAo+Pj4gICAgICAgICAgICAgICAoMHgwMDkwIDw8IENQX1JCX1dQVFJfUE9MTF9DTlRMX19J RExFX1BPTExfQ09VTlRfX1NISUZUKTsKPj4+ICAgICAgICAgICBpZiAoZGVmICE9IGRhdGEpCj4+ PiAtICAgICAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfUkJfV1BU Ul9QT0xMX0NOVEwpLAo+Pj4gZGF0YSk7Cj4+PiArICAgICAgICAgICAgV1JFRzMyX1NPQzE1KEdD LCAwLCBtbUNQX1JCX1dQVFJfUE9MTF9DTlRMLCBkYXRhKTsKPj4+ICAgICAgIH0gZWxzZSB7Cj4+ PiAtICAgICAgICBkZWYgPSBkYXRhID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsCj4+ PiBtbVJMQ19DR0NHX0NHTFNfQ1RSTCkpOwo+Pj4gKyAgICAgICAgZGVmID0gZGF0YSA9IFJSRUcz Ml9TT0MxNShHQywgMCwgbW1STENfQ0dDR19DR0xTX0NUUkwpOwo+Pj4gICAgICAgICAgIC8qIHJl c2V0IENHQ0cvQ0dMUyBiaXRzICovCj4+PiAgICAgICAgICAgZGF0YSAmPSB+KFJMQ19DR0NHX0NH TFNfQ1RSTF9fQ0dDR19FTl9NQVNLIHwKPj4+IFJMQ19DR0NHX0NHTFNfQ1RSTF9fQ0dMU19FTl9N QVNLKTsKPj4+ICAgICAgICAgICAvKiBkaXNhYmxlIGNnY2cgYW5kIGNnbHMgaW4gRlNNICovCj4+ PiAgICAgICAgICAgaWYgKGRlZiAhPSBkYXRhKQo+Pj4gLSAgICAgICAgICAgIFdSRUczMihTT0Mx NV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVJMQ19DR0NHX0NHTFNfQ1RSTCksIAo+Pj4gZGF0YSk7Cj4+ PiArICAgICAgICAgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19DR0NHX0NHTFNfQ1RSTCwg ZGF0YSk7Cj4+PiAgICAgICB9Cj4+PiAgICAgICAgIGFkZXYtPmdmeC5ybGMuZnVuY3MtPmV4aXRf c2FmZV9tb2RlKGFkZXYpOwo+Pj4gQEAgLTI3NjAsMTIgKzI3NjAsMTIgQEAgc3RhdGljIHZvaWQK Pj4+IGdmeF92OV8wX2dldF9jbG9ja2dhdGluZ19zdGF0ZSh2b2lkICpoYW5kbGUsIHUzMiAqZmxh Z3MpCj4+PiAgICAgICAgICAgKmZsYWdzID0gMDsKPj4+ICAgICAgICAgLyogQU1EX0NHX1NVUFBP UlRfR0ZYX01HQ0cgKi8KPj4+IC0gICAgZGF0YSA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdD LCAwLCBtbVJMQ19DR1RUX01HQ0dfT1ZFUlJJREUpKTsKPj4+ICsgICAgZGF0YSA9IFJSRUczMl9T T0MxNShHQywgMCwgbW1STENfQ0dUVF9NR0NHX09WRVJSSURFKTsKPj4+ICAgICAgIGlmICghKGRh dGEgJiBSTENfQ0dUVF9NR0NHX09WRVJSSURFX19HRlhJUF9NR0NHX09WRVJSSURFX01BU0spKQo+ Pj4gICAgICAgICAgICpmbGFncyB8PSBBTURfQ0dfU1VQUE9SVF9HRlhfTUdDRzsKPj4+ICAgICAg ICAgLyogQU1EX0NHX1NVUFBPUlRfR0ZYX0NHQ0cgKi8KPj4+IC0gICAgZGF0YSA9IFJSRUczMihT T0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVJMQ19DR0NHX0NHTFNfQ1RSTCkpOwo+Pj4gKyAgICBk YXRhID0gUlJFRzMyX1NPQzE1KEdDLCAwLCBtbVJMQ19DR0NHX0NHTFNfQ1RSTCk7Cj4+PiAgICAg ICBpZiAoZGF0YSAmIFJMQ19DR0NHX0NHTFNfQ1RSTF9fQ0dDR19FTl9NQVNLKQo+Pj4gICAgICAg ICAgICpmbGFncyB8PSBBTURfQ0dfU1VQUE9SVF9HRlhfQ0dDRzsKPj4+ICAgQEAgLTI3NzQsMTcg KzI3NzQsMTcgQEAgc3RhdGljIHZvaWQKPj4+IGdmeF92OV8wX2dldF9jbG9ja2dhdGluZ19zdGF0 ZSh2b2lkICpoYW5kbGUsIHUzMiAqZmxhZ3MpCj4+PiAgICAgICAgICAgKmZsYWdzIHw9IEFNRF9D R19TVVBQT1JUX0dGWF9DR0xTOwo+Pj4gICAgICAgICAvKiBBTURfQ0dfU1VQUE9SVF9HRlhfUkxD X0xTICovCj4+PiAtICAgIGRhdGEgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1S TENfTUVNX1NMUF9DTlRMKSk7Cj4+PiArICAgIGRhdGEgPSBSUkVHMzJfU09DMTUoR0MsIDAsIG1t UkxDX01FTV9TTFBfQ05UTCk7Cj4+PiAgICAgICBpZiAoZGF0YSAmIFJMQ19NRU1fU0xQX0NOVExf X1JMQ19NRU1fTFNfRU5fTUFTSykKPj4+ICAgICAgICAgICAqZmxhZ3MgfD0gQU1EX0NHX1NVUFBP UlRfR0ZYX1JMQ19MUyB8IAo+Pj4gQU1EX0NHX1NVUFBPUlRfR0ZYX01HTFM7Cj4+PiAgICAgICAg IC8qIEFNRF9DR19TVVBQT1JUX0dGWF9DUF9MUyAqLwo+Pj4gLSAgICBkYXRhID0gUlJFRzMyKFNP QzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfTUVNX1NMUF9DTlRMKSk7Cj4+PiArICAgIGRhdGEg PSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfTUVNX1NMUF9DTlRMKTsKPj4+ICAgICAgIGlmIChk YXRhICYgQ1BfTUVNX1NMUF9DTlRMX19DUF9NRU1fTFNfRU5fTUFTSykKPj4+ICAgICAgICAgICAq ZmxhZ3MgfD0gQU1EX0NHX1NVUFBPUlRfR0ZYX0NQX0xTIHwgQU1EX0NHX1NVUFBPUlRfR0ZYX01H TFM7Cj4+PiAgICAgICAgIC8qIEFNRF9DR19TVVBQT1JUX0dGWF8zRF9DR0NHICovCj4+PiAtICAg IGRhdGEgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1STENfQ0dDR19DR0xTX0NU UkxfM0QpKTsKPj4+ICsgICAgZGF0YSA9IFJSRUczMl9TT0MxNShHQywgMCwgbW1STENfQ0dDR19D R0xTX0NUUkxfM0QpOwo+Pj4gICAgICAgaWYgKGRhdGEgJiBSTENfQ0dDR19DR0xTX0NUUkxfM0Rf X0NHQ0dfRU5fTUFTSykKPj4+ICAgICAgICAgICAqZmxhZ3MgfD0gQU1EX0NHX1NVUFBPUlRfR0ZY XzNEX0NHQ0c7Cj4+PiAgIEBAIC0yODA3LDggKzI4MDcsOCBAQCBzdGF0aWMgdTY0IGdmeF92OV8w X3JpbmdfZ2V0X3dwdHJfZ2Z4KHN0cnVjdAo+Pj4gYW1kZ3B1X3JpbmcgKnJpbmcpCj4+PiAgICAg ICBpZiAocmluZy0+dXNlX2Rvb3JiZWxsKSB7Cj4+PiAgICAgICAgICAgd3B0ciA9IGF0b21pYzY0 X3JlYWQoKGF0b21pYzY0X3QKPj4+ICopJmFkZXYtPndiLndiW3JpbmctPndwdHJfb2Zmc10pOwo+ Pj4gICAgICAgfSBlbHNlIHsKPj4+IC0gICAgICAgIHdwdHIgPSBSUkVHMzIoU09DMTVfUkVHX09G RlNFVChHQywgMCwgbW1DUF9SQjBfV1BUUikpOwo+Pj4gLSAgICAgICAgd3B0ciArPSAodTY0KVJS RUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+Pj4gbW1DUF9SQjBfV1BUUl9ISSkpIDw8IDMy Owo+Pj4gKyAgICAgICAgd3B0ciA9IFJSRUczMl9TT0MxNShHQywgMCwgbW1DUF9SQjBfV1BUUik7 Cj4+PiArICAgICAgICB3cHRyICs9ICh1NjQpUlJFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX1JCMF9X UFRSX0hJKSA8PCAzMjsKPj4+ICAgICAgIH0KPj4+ICAgICAgICAgcmV0dXJuIHdwdHI7Cj4+PiBA QCAtMjgyMyw4ICsyODIzLDggQEAgc3RhdGljIHZvaWQgZ2Z4X3Y5XzBfcmluZ19zZXRfd3B0cl9n Zngoc3RydWN0Cj4+PiBhbWRncHVfcmluZyAqcmluZykKPj4+IGF0b21pYzY0X3NldCgoYXRvbWlj NjRfdCopJmFkZXYtPndiLndiW3JpbmctPndwdHJfb2Zmc10sCj4+PiByaW5nLT53cHRyKTsKPj4+ ICAgICAgICAgICBXRE9PUkJFTEw2NChyaW5nLT5kb29yYmVsbF9pbmRleCwgcmluZy0+d3B0cik7 Cj4+PiAgICAgICB9IGVsc2Ugewo+Pj4gLSAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQo R0MsIDAsIG1tQ1BfUkIwX1dQVFIpLAo+Pj4gbG93ZXJfMzJfYml0cyhyaW5nLT53cHRyKSk7Cj4+ PiAtICAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9SQjBfV1BUUl9I SSksCj4+PiB1cHBlcl8zMl9iaXRzKHJpbmctPndwdHIpKTsKPj4+ICsgICAgICAgIFdSRUczMl9T T0MxNShHQywgMCwgbW1DUF9SQjBfV1BUUiwgbG93ZXJfMzJfYml0cyhyaW5nLT53cHRyKSk7Cj4+ PiArICAgICAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfUkIwX1dQVFJfSEksCj4+PiB1cHBl cl8zMl9iaXRzKHJpbmctPndwdHIpKTsKPj4+ICAgICAgIH0KPj4+ICAgfQo+Pj4gICBAQCAtMzM4 NiwyMCArMzM4NiwyMCBAQCBzdGF0aWMgaW50Cj4+PiBnZnhfdjlfMF9raXFfc2V0X2ludGVycnVw dF9zdGF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+ICAgICAgIHN3aXRjaCAodHlw ZSkgewo+Pj4gICAgICAgY2FzZSBBTURHUFVfQ1BfS0lRX0lSUV9EUklWRVIwOgo+Pj4gICAgICAg ICAgIGlmIChzdGF0ZSA9PSBBTURHUFVfSVJRX1NUQVRFX0RJU0FCTEUpIHsKPj4+IC0gICAgICAg ICAgICB0bXAgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUENfSU5UX0NOVEwp KTsKPj4+ICsgICAgICAgICAgICB0bXAgPSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BDX0lOVF9D TlRMKTsKPj4+ICAgICAgICAgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQQ19JTlRf Q05UTCwKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFTkVSSUMyX0lOVF9FTkFCTEUs IDApOwo+Pj4gLSAgICAgICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQ Q19JTlRfQ05UTCksIHRtcCk7Cj4+PiArICAgICAgICAgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBt bUNQQ19JTlRfQ05UTCwgdG1wKTsKPj4+ICAgICAgICAgICAgICAgICB0bXAgPSBSUkVHMzIodGFy Z2V0KTsKPj4+ICAgICAgICAgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX01FMl9Q SVBFMF9JTlRfQ05UTCwKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFTkVSSUMyX0lO VF9FTkFCTEUsIDApOwo+Pj4gICAgICAgICAgICAgICBXUkVHMzIodGFyZ2V0LCB0bXApOwo+Pj4g ICAgICAgICAgIH0gZWxzZSB7Cj4+PiAtICAgICAgICAgICAgdG1wID0gUlJFRzMyKFNPQzE1X1JF R19PRkZTRVQoR0MsIDAsIG1tQ1BDX0lOVF9DTlRMKSk7Cj4+PiArICAgICAgICAgICAgdG1wID0g UlJFRzMyX1NPQzE1KEdDLCAwLCBtbUNQQ19JTlRfQ05UTCk7Cj4+PiAgICAgICAgICAgICAgIHRt cCA9IFJFR19TRVRfRklFTEQodG1wLCBDUENfSU5UX0NOVEwsCj4+PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHRU5FUklDMl9JTlRfRU5BQkxFLCAxKTsKPj4+IC0gICAgICAgICAgICBXUkVH MzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUENfSU5UX0NOVEwpLCB0bXApOwo+Pj4gKyAg ICAgICAgICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUENfSU5UX0NOVEwsIHRtcCk7Cj4+PiAg ICAgICAgICAgICAgICAgdG1wID0gUlJFRzMyKHRhcmdldCk7Cj4+PiAgICAgICAgICAgICAgIHRt cCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9NRTJfUElQRTBfSU5UX0NOVEwsCj4+PiBAQCAtMzYx Miw3ICszNjEyLDcgQEAgc3RhdGljIHZvaWQgZ2Z4X3Y5XzBfc2V0X3JsY19mdW5jcyhzdHJ1Y3QK Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiAgIHN0YXRpYyB2b2lkIGdmeF92OV8wX3NldF9n ZHNfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4+ICAgewo+Pj4gICAgICAgLyog aW5pdCBhc2NpIGdkcyBpbmZvICovCj4+PiAtICAgIGFkZXYtPmdkcy5tZW0udG90YWxfc2l6ZSA9 IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+Pj4gbW1HRFNfVk1JRDBfU0laRSkpOwo+ Pj4gKyAgICBhZGV2LT5nZHMubWVtLnRvdGFsX3NpemUgPSBSUkVHMzJfU09DMTUoR0MsIDAsIG1t R0RTX1ZNSUQwX1NJWkUpOwo+Pj4gICAgICAgYWRldi0+Z2RzLmd3cy50b3RhbF9zaXplID0gNjQ7 Cj4+PiAgICAgICBhZGV2LT5nZHMub2EudG90YWxfc2l6ZSA9IDE2Owo+Pj4gICBAQCAtMzY0MSw4 ICszNjQxLDggQEAgc3RhdGljIHUzMgo+Pj4gZ2Z4X3Y5XzBfZ2V0X2N1X2FjdGl2ZV9iaXRtYXAo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiAgIHsKPj4+ICAgICAgIHUzMiBkYXRhLCBt YXNrOwo+Pj4gICAtICAgIGRhdGEgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwKPj4+ IG1tQ0NfR0NfU0hBREVSX0FSUkFZX0NPTkZJRykpOwo+Pj4gLSAgICBkYXRhIHw9IFJSRUczMihT T0MxNV9SRUdfT0ZGU0VUKEdDLCAwLAo+Pj4gbW1HQ19VU0VSX1NIQURFUl9BUlJBWV9DT05GSUcp KTsKPj4+ICsgICAgZGF0YSA9IFJSRUczMl9TT0MxNShHQywgMCwgbW1DQ19HQ19TSEFERVJfQVJS QVlfQ09ORklHKTsKPj4+ICsgICAgZGF0YSB8PSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tR0NfVVNF Ul9TSEFERVJfQVJSQVlfQ09ORklHKTsKPj4+ICAgICAgICAgZGF0YSAmPSBDQ19HQ19TSEFERVJf QVJSQVlfQ09ORklHX19JTkFDVElWRV9DVVNfTUFTSzsKPj4+ICAgICAgIGRhdGEgPj49IENDX0dD X1NIQURFUl9BUlJBWV9DT05GSUdfX0lOQUNUSVZFX0NVU19fU0hJRlQ7Cj4+PiBAQCAtMzc2Mywy NSArMzc2MywyNSBAQCBzdGF0aWMgaW50IGdmeF92OV8wX2luaXRfcXVldWUoc3RydWN0Cj4+PiBh bWRncHVfcmluZyAqcmluZykKPj4+ICAgICAgIGVvcF9ncHVfYWRkciA9IGFkZXYtPmdmeC5tZWMu aHBkX2VvcF9ncHVfYWRkciArIChyaW5nLT5xdWV1ZSAqCj4+PiBNRUNfSFBEX1NJWkUpOwo+Pj4g ICAgICAgZW9wX2dwdV9hZGRyID4+PSA4Owo+Pj4gICAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZG U0VUKEdDLCAwLCBtbUNQX0hRRF9FT1BfQkFTRV9BRERSKSwKPj4+IGxvd2VyXzMyX2JpdHMoZW9w X2dwdV9hZGRyKSk7Cj4+PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQ X0hRRF9FT1BfQkFTRV9BRERSX0hJKSwKPj4+IHVwcGVyXzMyX2JpdHMoZW9wX2dwdV9hZGRyKSk7 Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9IUURfRU9QX0JBU0VfQUREUiwKPj4+ IGxvd2VyXzMyX2JpdHMoZW9wX2dwdV9hZGRyKSk7Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywg MCwgbW1DUF9IUURfRU9QX0JBU0VfQUREUl9ISSwKPj4+IHVwcGVyXzMyX2JpdHMoZW9wX2dwdV9h ZGRyKSk7Cj4+PiAgICAgICBtcWQtPmNwX2hxZF9lb3BfYmFzZV9hZGRyX2xvID0gbG93ZXJfMzJf Yml0cyhlb3BfZ3B1X2FkZHIpOwo+Pj4gICAgICAgbXFkLT5jcF9ocWRfZW9wX2Jhc2VfYWRkcl9o aSA9IHVwcGVyXzMyX2JpdHMoZW9wX2dwdV9hZGRyKTsKPj4+ICAgICAgICAgLyogc2V0IHRoZSBF T1Agc2l6ZSwgcmVnaXN0ZXIgdmFsdWUgaXMgMl4oRU9QX1NJWkUrMSkgZHdvcmRzICovCj4+PiAt ICAgIHRtcCA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9FT1BfQ09O VFJPTCkpOwo+Pj4gKyAgICB0bXAgPSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX0VPUF9D T05UUk9MKTsKPj4+ICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9IUURfRU9QX0NP TlRST0wsIEVPUF9TSVpFLAo+Pj4gICAgICAgICAgICAgICAgICAgICAgIChvcmRlcl9iYXNlXzIo TUVDX0hQRF9TSVpFIC8gNCkgLSAxKSk7Cj4+PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VU KEdDLCAwLCBtbUNQX0hRRF9FT1BfQ09OVFJPTCksIHRtcCk7Cj4+PiArICAgIFdSRUczMl9TT0Mx NShHQywgMCwgbW1DUF9IUURfRU9QX0NPTlRST0wsIHRtcCk7Cj4+PiAgICAgICAgIC8qIGVuYWJs ZSBkb29yYmVsbD8gKi8KPj4+IC0gICAgdG1wID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0Ms IDAsIAo+Pj4gbW1DUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCkpOwo+Pj4gKyAgICB0bXAgPSBS UkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wpOwo+Pj4gICAg ICAgaWYgKHVzZV9kb29yYmVsbCkKPj4+ICAgICAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRt cCwgQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wsCj4+PiBET09SQkVMTF9FTiwgMSk7Cj4+PiAg ICAgICBlbHNlCj4+PiAgICAgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9Q UV9ET09SQkVMTF9DT05UUk9MLAo+Pj4gRE9PUkJFTExfRU4sIDApOwo+Pj4gICAtICAgIFdSRUcz MihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MKSwK Pj4+IHRtcCk7Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9IUURfUFFfRE9PUkJF TExfQ09OVFJPTCwgdG1wKTsKPj4+ICAgICAgIG1xZC0+Y3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRy b2wgPSB0bXA7Cj4+PiAgICAgICAgIC8qIGRpc2FibGUgdGhlIHF1ZXVlIGlmIGl0J3MgYWN0aXZl ICovCj4+PiBAQCAtMzc5MCw0MCArMzc5MCw0MCBAQCBzdGF0aWMgaW50IGdmeF92OV8wX2luaXRf cXVldWUoc3RydWN0Cj4+PiBhbWRncHVfcmluZyAqcmluZykKPj4+ICAgICAgIG1xZC0+Y3BfaHFk X3BxX3JwdHIgPSAwOwo+Pj4gICAgICAgbXFkLT5jcF9ocWRfcHFfd3B0cl9sbyA9IDA7Cj4+PiAg ICAgICBtcWQtPmNwX2hxZF9wcV93cHRyX2hpID0gMDsKPj4+IC0gICAgaWYgKFJSRUczMihTT0Mx NV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9BQ1RJVkUpKSAmIDEpIHsKPj4+IC0gICAgICAg IFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9ERVFVRVVFX1JFUVVFU1Qp LCAxKTsKPj4+ICsgICAgaWYgKFJSRUczMl9TT0MxNShHQywgMCwgbW1DUF9IUURfQUNUSVZFKSAm IDEpIHsKPj4+ICsgICAgICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9IUURfREVRVUVVRV9S RVFVRVNULCAxKTsKPj4+ICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYWRldi0+dXNlY190aW1l b3V0OyBqKyspIHsKPj4+IC0gICAgICAgICAgICBpZiAoIShSUkVHMzIoU09DMTVfUkVHX09GRlNF VChHQywgMCwgbW1DUF9IUURfQUNUSVZFKSkgCj4+PiAmIDEpKQo+Pj4gKyAgICAgICAgICAgIGlm ICghKFJSRUczMl9TT0MxNShHQywgMCwgbW1DUF9IUURfQUNUSVZFKSAmIDEpKQo+Pj4gICAgICAg ICAgICAgICAgICAgYnJlYWs7Cj4+PiAgICAgICAgICAgICAgIHVkZWxheSgxKTsKPj4+ICAgICAg ICAgICB9Cj4+PiAtICAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9I UURfREVRVUVVRV9SRVFVRVNUKSwKPj4+IG1xZC0+Y3BfaHFkX2RlcXVldWVfcmVxdWVzdCk7Cj4+ PiAtICAgICAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9IUURfUFFfUlBU UiksCj4+PiBtcWQtPmNwX2hxZF9wcV9ycHRyKTsKPj4+IC0gICAgICAgIFdSRUczMihTT0MxNV9S RUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9QUV9XUFRSX0xPKSwKPj4+IG1xZC0+Y3BfaHFkX3Bx X3dwdHJfbG8pOwo+Pj4gLSAgICAgICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1t Q1BfSFFEX1BRX1dQVFJfSEkpLAo+Pj4gbXFkLT5jcF9ocWRfcHFfd3B0cl9oaSk7Cj4+PiArICAg ICAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX0RFUVVFVUVfUkVRVUVTVCwKPj4+IG1x ZC0+Y3BfaHFkX2RlcXVldWVfcmVxdWVzdCk7Cj4+PiArICAgICAgICBXUkVHMzJfU09DMTUoR0Ms IDAsIG1tQ1BfSFFEX1BRX1JQVFIsIG1xZC0+Y3BfaHFkX3BxX3JwdHIpOwo+Pj4gKyAgICAgICAg V1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX0hRRF9QUV9XUFRSX0xPLAo+Pj4gbXFkLT5jcF9ocWRf cHFfd3B0cl9sbyk7Cj4+PiArICAgICAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX1BR X1dQVFJfSEksCj4+PiBtcWQtPmNwX2hxZF9wcV93cHRyX2hpKTsKPj4+ICAgICAgIH0KPj4+ICAg ICAgICAgLyogc2V0IHRoZSBwb2ludGVyIHRvIHRoZSBNUUQgKi8KPj4+ICAgICAgIG1xZC0+Y3Bf bXFkX2Jhc2VfYWRkcl9sbyA9IG1xZF9ncHVfYWRkciAmIDB4ZmZmZmZmZmM7Cj4+PiAgICAgICBt cWQtPmNwX21xZF9iYXNlX2FkZHJfaGkgPSB1cHBlcl8zMl9iaXRzKG1xZF9ncHVfYWRkcik7Cj4+ PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX01RRF9CQVNFX0FERFIp LAo+Pj4gbXFkLT5jcF9tcWRfYmFzZV9hZGRyX2xvKTsKPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JF R19PRkZTRVQoR0MsIDAsIG1tQ1BfTVFEX0JBU0VfQUREUl9ISSksCj4+PiBtcWQtPmNwX21xZF9i YXNlX2FkZHJfaGkpOwo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfTVFEX0JBU0Vf QUREUiwgbXFkLT5jcF9tcWRfYmFzZV9hZGRyX2xvKTsKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdD LCAwLCBtbUNQX01RRF9CQVNFX0FERFJfSEksCj4+PiBtcWQtPmNwX21xZF9iYXNlX2FkZHJfaGkp Owo+Pj4gICAgICAgICAvKiBzZXQgTVFEIHZtaWQgdG8gMCAqLwo+Pj4gLSAgICB0bXAgPSBSUkVH MzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9NUURfQ09OVFJPTCkpOwo+Pj4gKyAgICB0 bXAgPSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfTVFEX0NPTlRST0wpOwo+Pj4gICAgICAgdG1w ID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX01RRF9DT05UUk9MLCBWTUlELCAwKTsKPj4+IC0gICAg V1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfTVFEX0NPTlRST0wpLCB0bXApOwo+ Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfTVFEX0NPTlRST0wsIHRtcCk7Cj4+PiAg ICAgICBtcWQtPmNwX21xZF9jb250cm9sID0gdG1wOwo+Pj4gICAgICAgICAvKiBzZXQgdGhlIHBv aW50ZXIgdG8gdGhlIEhRRCwgdGhpcyBpcyBzaW1pbGFyIAo+Pj4gQ1BfUkIwX0JBU0UvX0hJICov Cj4+PiAgICAgICBocWRfZ3B1X2FkZHIgPSByaW5nLT5ncHVfYWRkciA+PiA4Owo+Pj4gICAgICAg bXFkLT5jcF9ocWRfcHFfYmFzZV9sbyA9IGhxZF9ncHVfYWRkcjsKPj4+ICAgICAgIG1xZC0+Y3Bf aHFkX3BxX2Jhc2VfaGkgPSB1cHBlcl8zMl9iaXRzKGhxZF9ncHVfYWRkcik7Cj4+PiAtICAgIFdS RUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9QUV9CQVNFKSwKPj4+IG1xZC0+ Y3BfaHFkX3BxX2Jhc2VfbG8pOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywg MCwgbW1DUF9IUURfUFFfQkFTRV9ISSksCj4+PiBtcWQtPmNwX2hxZF9wcV9iYXNlX2hpKTsKPj4+ ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX0hRRF9QUV9CQVNFLCBtcWQtPmNwX2hxZF9w cV9iYXNlX2xvKTsKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX0hRRF9QUV9CQVNF X0hJLCBtcWQtPmNwX2hxZF9wcV9iYXNlX2hpKTsKPj4+ICAgICAgICAgLyogc2V0IHVwIHRoZSBI UUQsIHRoaXMgaXMgc2ltaWxhciB0byBDUF9SQjBfQ05UTCAqLwo+Pj4gLSAgICB0bXAgPSBSUkVH MzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9IUURfUFFfQ09OVFJPTCkpOwo+Pj4gKyAg ICB0bXAgPSBSUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX1BRX0NPTlRST0wpOwo+Pj4gICAg ICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9QUV9DT05UUk9MLCBRVUVVRV9TSVpF LAo+Pj4gICAgICAgICAgIChvcmRlcl9iYXNlXzIocmluZy0+cmluZ19zaXplIC8gNCkgLSAxKSk7 Cj4+PiAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfSFFEX1BRX0NPTlRST0wsIFJQ VFJfQkxPQ0tfU0laRSwKPj4+IEBAIC0zODM1LDcgKzM4MzUsNyBAQCBzdGF0aWMgaW50IGdmeF92 OV8wX2luaXRfcXVldWUoc3RydWN0Cj4+PiBhbWRncHVfcmluZyAqcmluZykKPj4+ICAgICAgIHRt cCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9IUURfUFFfQ09OVFJPTCwgUk9RX1BRX0lCX0ZMSVAs IDApOwo+Pj4gICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9QUV9DT05UUk9M LCBQUklWX1NUQVRFLCAxKTsKPj4+ICAgICAgIHRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9I UURfUFFfQ09OVFJPTCwgS01EX1FVRVVFLCAxKTsKPj4+IC0gICAgV1JFRzMyKFNPQzE1X1JFR19P RkZTRVQoR0MsIDAsIG1tQ1BfSFFEX1BRX0NPTlRST0wpLCB0bXApOwo+Pj4gKyAgICBXUkVHMzJf U09DMTUoR0MsIDAsIG1tQ1BfSFFEX1BRX0NPTlRST0wsIHRtcCk7Cj4+PiAgICAgICBtcWQtPmNw X2hxZF9wcV9jb250cm9sID0gdG1wOwo+Pj4gICAgICAgICAvKiBzZXQgdGhlIHdiIGFkZHJlc3Mg d2V0aGVyIGl0J3MgZW5hYmxlZCBvciBub3QgKi8KPj4+IEBAIC0zODQzLDI3ICszODQzLDI3IEBA IHN0YXRpYyBpbnQgZ2Z4X3Y5XzBfaW5pdF9xdWV1ZShzdHJ1Y3QKPj4+IGFtZGdwdV9yaW5nICpy aW5nKQo+Pj4gICAgICAgbXFkLT5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkcl9sbyA9IHdiX2dw dV9hZGRyICYgMHhmZmZmZmZmYzsKPj4+ICAgICAgIG1xZC0+Y3BfaHFkX3BxX3JwdHJfcmVwb3J0 X2FkZHJfaGkgPQo+Pj4gICAgICAgdXBwZXJfMzJfYml0cyh3Yl9ncHVfYWRkcikgJiAweGZmZmY7 Cj4+PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9QUV9SUFRS X1JFUE9SVF9BRERSKSwKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX0hRRF9QUV9S UFRSX1JFUE9SVF9BRERSLAo+Pj4gICAgICAgICAgIG1xZC0+Y3BfaHFkX3BxX3JwdHJfcmVwb3J0 X2FkZHJfbG8pOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9I UURfUFFfUlBUUl9SRVBPUlRfQUREUl9ISSksCj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwg bW1DUF9IUURfUFFfUlBUUl9SRVBPUlRfQUREUl9ISSwKPj4+ICAgICAgICAgICBtcWQtPmNwX2hx ZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2hpKTsKPj4+ICAgICAgICAgLyogb25seSB1c2VkIGlmCj4+ PiBDUF9QUV9XUFRSX1BPTExfQ05UTC5DUF9QUV9XUFRSX1BPTExfQ05UTF9fRU5fTUFTSz0xICov Cj4+PiAgICAgICB3Yl9ncHVfYWRkciA9IGFkZXYtPndiLmdwdV9hZGRyICsgKHJpbmctPndwdHJf b2ZmcyAqIDQpOwo+Pj4gICAgICAgbXFkLT5jcF9ocWRfcHFfd3B0cl9wb2xsX2FkZHJfbG8gPSB3 Yl9ncHVfYWRkciAmIDB4ZmZmZmZmZmM7Cj4+PiAgICAgICBtcWQtPmNwX2hxZF9wcV93cHRyX3Bv bGxfYWRkcl9oaSA9IHVwcGVyXzMyX2JpdHMod2JfZ3B1X2FkZHIpICYKPj4+IDB4ZmZmZjsKPj4+ IC0gICAgV1JFRzMyKFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfSFFEX1BRX1dQVFJfUE9M TF9BRERSKSwKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX0hRRF9QUV9XUFRSX1BP TExfQUREUiwKPj4+ICAgICAgICAgICBtcWQtPmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkcl9sbyk7 Cj4+PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9QUV9XUFRS X1BPTExfQUREUl9ISSksCj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9IUURfUFFf V1BUUl9QT0xMX0FERFJfSEksCj4+PiAgICAgICAgICAgbXFkLT5jcF9ocWRfcHFfd3B0cl9wb2xs X2FkZHJfaGkpOwo+Pj4gICAgICAgICAvKiBlbmFibGUgdGhlIGRvb3JiZWxsIGlmIHJlcXVlc3Rl ZCAqLwo+Pj4gICAgICAgaWYgKHVzZV9kb29yYmVsbCkgewo+Pj4gLSAgICAgICAgV1JFRzMyKFNP QzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfTUVDX0RPT1JCRUxMX1JBTkdFX0xPV0VSKSwKPj4+ ICsgICAgICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9NRUNfRE9PUkJFTExfUkFOR0VfTE9X RVIsCj4+PiAgICAgICAgICAgICAgIChBTURHUFVfRE9PUkJFTEw2NF9LSVEgKiAyKSA8PCAyKTsK Pj4+IC0gICAgICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX01FQ19ET09S QkVMTF9SQU5HRV9VUFBFUiksCj4+PiArICAgICAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1Bf TUVDX0RPT1JCRUxMX1JBTkdFX1VQUEVSLAo+Pj4gICAgICAgICAgICAgICAoQU1ER1BVX0RPT1JC RUxMNjRfTUVDX1JJTkc3ICogMikgPDwgMik7Cj4+PiAtICAgICAgICB0bXAgPSBSUkVHMzIoU09D MTVfUkVHX09GRlNFVChHQywgMCwKPj4+IG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wpKTsK Pj4+ICsgICAgICAgIHRtcCA9IFJSRUczMl9TT0MxNShHQywgMCwgbW1DUF9IUURfUFFfRE9PUkJF TExfQ09OVFJPTCk7Cj4+PiAgICAgICAgICAgdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hR RF9QUV9ET09SQkVMTF9DT05UUk9MLAo+Pj4gICAgICAgICAgICAgICBET09SQkVMTF9PRkZTRVQs IHJpbmctPmRvb3JiZWxsX2luZGV4KTsKPj4+ICAgICAgICAgICB0bXAgPSBSRUdfU0VUX0ZJRUxE KHRtcCwgQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wsCj4+PiBET09SQkVMTF9FTiwgMSk7Cj4+ PiBAQCAtMzg3NCwyNSArMzg3NCwyNSBAQCBzdGF0aWMgaW50IGdmeF92OV8wX2luaXRfcXVldWUo c3RydWN0Cj4+PiBhbWRncHVfcmluZyAqcmluZykKPj4+ICAgICAgIH0gZWxzZSB7Cj4+PiAgICAg ICAgICAgbXFkLT5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9IDA7Cj4+PiAgICAgICB9Cj4+ PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9QUV9ET09SQkVM TF9DT05UUk9MKSwKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX0hRRF9QUV9ET09S QkVMTF9DT05UUk9MLAo+Pj4gICAgICAgICAgIG1xZC0+Y3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRy b2wpOwo+Pj4gICAgICAgICAvKiByZXNldCByZWFkIGFuZCB3cml0ZSBwb2ludGVycywgc2ltaWxh ciB0byAKPj4+IENQX1JCMF9XUFRSL19SUFRSICovCj4+PiAtICAgIFdSRUczMihTT0MxNV9SRUdf T0ZGU0VUKEdDLCAwLCBtbUNQX0hRRF9QUV9XUFRSX0xPKSwKPj4+IG1xZC0+Y3BfaHFkX3BxX3dw dHJfbG8pOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9IUURf UFFfV1BUUl9ISSksCj4+PiBtcWQtPmNwX2hxZF9wcV93cHRyX2hpKTsKPj4+ICsgICAgV1JFRzMy X1NPQzE1KEdDLCAwLCBtbUNQX0hRRF9QUV9XUFRSX0xPLCBtcWQtPmNwX2hxZF9wcV93cHRyX2xv KTsKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBtbUNQX0hRRF9QUV9XUFRSX0hJLCBtcWQt PmNwX2hxZF9wcV93cHRyX2hpKTsKPj4+ICAgICAgICAgLyogc2V0IHRoZSB2bWlkIGZvciB0aGUg cXVldWUgKi8KPj4+ICAgICAgIG1xZC0+Y3BfaHFkX3ZtaWQgPSAwOwo+Pj4gLSAgICBXUkVHMzIo U09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9IUURfVk1JRCksIG1xZC0+Y3BfaHFkX3ZtaWQp Owo+Pj4gKyAgICBXUkVHMzJfU09DMTUoR0MsIDAsIG1tQ1BfSFFEX1ZNSUQsIG1xZC0+Y3BfaHFk X3ZtaWQpOwo+Pj4gICAtICAgIHRtcCA9IFJSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCAK Pj4+IG1tQ1BfSFFEX1BFUlNJU1RFTlRfU1RBVEUpKTsKPj4+ICsgICAgdG1wID0gUlJFRzMyX1NP QzE1KEdDLCAwLCBtbUNQX0hRRF9QRVJTSVNURU5UX1NUQVRFKTsKPj4+ICAgICAgIHRtcCA9IFJF R19TRVRfRklFTEQodG1wLCBDUF9IUURfUEVSU0lTVEVOVF9TVEFURSwgUFJFTE9BRF9TSVpFLAo+ Pj4gMHg1Myk7Cj4+PiAtICAgIFdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hR RF9QRVJTSVNURU5UX1NUQVRFKSwgdG1wKTsKPj4+ICsgICAgV1JFRzMyX1NPQzE1KEdDLCAwLCBt bUNQX0hRRF9QRVJTSVNURU5UX1NUQVRFLCB0bXApOwo+Pj4gICAgICAgbXFkLT5jcF9ocWRfcGVy c2lzdGVudF9zdGF0ZSA9IHRtcDsKPj4+ICAgICAgICAgLyogYWN0aXZhdGUgdGhlIHF1ZXVlICov Cj4+PiAgICAgICBtcWQtPmNwX2hxZF9hY3RpdmUgPSAxOwo+Pj4gLSAgICBXUkVHMzIoU09DMTVf UkVHX09GRlNFVChHQywgMCwgbW1DUF9IUURfQUNUSVZFKSwKPj4+IG1xZC0+Y3BfaHFkX2FjdGl2 ZSk7Cj4+PiArICAgIFdSRUczMl9TT0MxNShHQywgMCwgbW1DUF9IUURfQUNUSVZFLCBtcWQtPmNw X2hxZF9hY3RpdmUpOwo+Pj4gICAgICAgICBzb2MxNV9ncmJtX3NlbGVjdChhZGV2LCAwLCAwLCAw LCAwKTsKPj4+ICAgICAgIG11dGV4X3VubG9jaygmYWRldi0+c3JibV9tdXRleCk7Cj4+Cj4+Cj4K PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGFtZC1n ZnggbWFpbGluZyBsaXN0Cj4gYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBs aXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=