From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wan ZongShun Subject: Re: [PATCH v2]: NUC900: Add spi driver support for nuc900 Date: Thu, 26 Nov 2009 14:40:59 +0800 Message-ID: References: <4B062887.90803@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Russell King , linux-arm-kernel To: linux-spi , Andrew Morton Return-path: In-Reply-To: <4B062887.90803-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: spi-devel-general-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: linux-spi.vger.kernel.org SGkgQW5kcmV3CgpIb3cgYWJvdXQgdGhpcyBzcGkgZHJpdmVyLCBDb3VsZCBpdCBiZSBhcHBsaWVk PwoKMjAwOS8xMS8yMCBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+Ogo+IERlYXIg c2lycywKPgo+IFRoYW5rcyBhIGxvdCBmb3IgeW91ciBoZWxwLGFuZCBJIGZpeCB0aGUgc3BpIGRy aXZlciBhbmQgcmUtc3VibWl0IGl0Lgo+Cj4KPiBTaWduZWQtb2ZmLWJ5OiBXYW4gWm9uZ1NodW4g PG1jdW9zLmNvbUBnbWFpbC5jb20+Cj4KPiAtLS0KPiDCoGFyY2gvYXJtL21hY2gtdzkweDkwMC9p bmNsdWRlL21hY2gvbnVjOTAwX3NwaS5oIHwgwqAgMzUgKysKPiDCoGRyaXZlcnMvc3BpL0tjb25m aWcgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfCDCoCDCoDcgKwo+ IMKgZHJpdmVycy9zcGkvTWFrZWZpbGUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqB8IMKgIMKgMSArCj4gwqBkcml2ZXJzL3NwaS9zcGlfbnVjOTAwLmMgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB8IMKgNTA5ICsrKysrKysrKysrKysrKysrKysrKysr Cj4gwqA0IGZpbGVzIGNoYW5nZWQsIDU1MiBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQo+ IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gv bnVjOTAwX3NwaS5oCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zcGkvc3BpX251Yzkw MC5jCj4KPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9u dWM5MDBfc3BpLmggYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL251YzkwMF9z cGkuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMjRlYTIzYgo+IC0t LSAvZGV2L251bGwKPiArKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL251 YzkwMF9zcGkuaAo+IEBAIC0wLDAgKzEsMzUgQEAKPiArLyoKPiArICogYXJjaC9hcm0vbWFjaC13 OTB4OTAwL2luY2x1ZGUvbWFjaC9udWM5MDBfc3BpLmgKPiArICoKPiArICogQ29weXJpZ2h0IChj KSAyMDA5IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KPiArICoKPiArICogV2FuIFpv bmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQo+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24g MiBvZiB0aGUgTGljZW5zZS4KPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIF9fQVNNX0FSQ0hf U1BJX0gKPiArI2RlZmluZSBfX0FTTV9BUkNIX1NQSV9ICj4gKwo+ICtleHRlcm4gdm9pZCBtZnBf c2V0X2dyb3VwZyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ICsKPiArc3RydWN0IHc5MHA5MTBfc3Bp X2luZm8gewo+ICsgwqAgwqAgwqAgdW5zaWduZWQgaW50IG51bV9jczsKPiArIMKgIMKgIMKgIHVu c2lnbmVkIGludCBsc2I7Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCBpbnQgdHhuZWc7Cj4gKyDCoCDC oCDCoCB1bnNpZ25lZCBpbnQgcnhuZWc7Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCBpbnQgZGl2aWRl cjsKPiArIMKgIMKgIMKgIHVuc2lnbmVkIGludCBzbGVlcDsKPiArIMKgIMKgIMKgIHVuc2lnbmVk IGludCB0eG51bTsKPiArIMKgIMKgIMKgIHVuc2lnbmVkIGludCB0eGJpdGxlbjsKPiArIMKgIMKg IMKgIGludCBidXNfbnVtOwo+ICt9Owo+ICsKPiArc3RydWN0IHc5MHA5MTBfc3BpX2NoaXAgewo+ ICsgwqAgwqAgwqAgdW5zaWduZWQgY2hhciBiaXRzX3Blcl93b3JkOwo+ICt9Owo+ICsKPiArI2Vu ZGlmIC8qIF9fQVNNX0FSQ0hfU1BJX0ggKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvS2Nv bmZpZyBiL2RyaXZlcnMvc3BpL0tjb25maWcKPiBpbmRleCA0YjZmN2NiLi4yZTFiMjBjIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvc3BpL0tjb25maWcKPiArKysgYi9kcml2ZXJzL3NwaS9LY29uZmln Cj4gQEAgLTI0NCw2ICsyNDQsMTMgQEAgY29uZmlnIFNQSV9YSUxJTlgKPiDCoCDCoCDCoCDCoCDC oFNlZSB0aGUgIk9QQiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKFNQSSkgKHYxLjAwZSki Cj4gwqAgwqAgwqAgwqAgwqBQcm9kdWN0IFNwZWNpZmljYXRpb24gZG9jdW1lbnQgKERTNDY0KSBm b3IgaGFyZHdhcmUgZGV0YWlscy4KPgo+ICtjb25maWcgU1BJX05VQzkwMAo+ICsgwqAgwqAgwqAg dHJpc3RhdGUgIk51dm90b24gTlVDOTAwIHNlcmllcyBTUEkiCj4gKyDCoCDCoCDCoCBkZXBlbmRz IG9uIEFSQ0hfVzkwWDkwMCAmJiBFWFBFUklNRU5UQUwKPiArIMKgIMKgIMKgIHNlbGVjdCBTUElf QklUQkFORwo+ICsgwqAgwqAgwqAgaGVscAo+ICsgwqAgwqAgwqAgwqAgU1BJIGRyaXZlciBmb3Ig TnV2b3RvbiBOVUM5MDAgc2VyaWVzIEFSTSBTb0NzCj4gKwo+IMKgIwo+IMKgIyBBZGQgbmV3IFNQ SSBtYXN0ZXIgY29udHJvbGxlcnMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGFib3ZlIHRoaXMgbGlu ZQo+IMKgIwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3Bp L01ha2VmaWxlCj4gaW5kZXggMjFhMTE4Mi4uNjk0YTRjYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L3NwaS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCj4gQEAgLTMzLDYgKzMz LDcgQEAgb2JqLSQoQ09ORklHX1NQSV9UWFg5KSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCs9IHNwaV90eHg5Lm8KPiDCoG9iai0kKENPTkZJR19TUElfWElMSU5YKSDCoCDCoCDC oCDCoCDCoCDCoCDCoCArPSB4aWxpbnhfc3BpLm8KPiDCoG9iai0kKENPTkZJR19TUElfU0hfU0NJ KSDCoCDCoCDCoCDCoCDCoCDCoCDCoCArPSBzcGlfc2hfc2NpLm8KPiDCoG9iai0kKENPTkZJR19T UElfU1RNUDNYWFgpIMKgIMKgIMKgIMKgIMKgIMKgICs9IHNwaV9zdG1wLm8KPiArb2JqLSQoQ09O RklHX1NQSV9OVUM5MDApIMKgIMKgIMKgIMKgIMKgIMKgIMKgICs9IHNwaV9udWM5MDAubwo+IMKg IyDCoCDCoCDCoC4uLiBhZGQgYWJvdmUgdGhpcyBsaW5lIC4uLgo+Cj4gwqAjIFNQSSBwcm90b2Nv bCBkcml2ZXJzIChkZXZpY2UvbGluayBvbiBidXMpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Bp L3NwaV9udWM5MDAuYyBiL2RyaXZlcnMvc3BpL3NwaV9udWM5MDAuYwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNjgzNmZkMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL3NwaS9zcGlfbnVjOTAwLmMKPiBAQCAtMCwwICsxLDUwOSBAQAo+ICsvKiBsaW51eC9k cml2ZXJzL3NwaS9zcGlfbnVjOTAwLmMKPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDA5IE51 dm90b24gdGVjaG5vbG9neS4KPiArICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29t Pgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArKi8KPiArCj4gKyNpbmNs dWRlIDxsaW51eC9pbml0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgo+ICsjaW5j bHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4K PiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgo+ ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNl Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ ICsKPiArI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NwaS9z cGlfYml0YmFuZy5oPgo+ICsKPiArI2luY2x1ZGUgPG1hY2gvbnVjOTAwX3NwaS5oPgo+ICsKPiAr LyogdXNpIHJlZ2lzdGVycyBvZmZzZXQgKi8KPiArI2RlZmluZSBVU0lfQ05UIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgMHgwMAo+ICsjZGVmaW5lIFVTSV9ESVYgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAweDA0Cj4gKyNkZWZpbmUgVVNJX1NTUiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDB4MDgKPiAr I2RlZmluZSBVU0lfUlgwIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgMHgxMAo+ICsjZGVmaW5lIFVT SV9UWDAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAweDEwCj4gKwo+ICsvKiB1c2kgcmVnaXN0ZXIg Yml0ICovCj4gKyNkZWZpbmUgRU5JTlQgwqAgwqAgwqAgwqAgwqAoMHgwMSA8PCAxNykKPiArI2Rl ZmluZSBFTkZMRyDCoCDCoCDCoCDCoCDCoCgweDAxIDw8IDE2KQo+ICsjZGVmaW5lIFRYTlVNIMKg IMKgIMKgIMKgIMKgKDB4MDMgPDwgOCkKPiArI2RlZmluZSBUWE5FRyDCoCDCoCDCoCDCoCDCoCgw eDAxIDw8IDIpCj4gKyNkZWZpbmUgUlhORUcgwqAgwqAgwqAgwqAgwqAoMHgwMSA8PCAxKQo+ICsj ZGVmaW5lIExTQiDCoCDCoCDCoCDCoCDCoCDCoCgweDAxIDw8IDEwKQo+ICsjZGVmaW5lIFNFTEVD VExFViDCoCDCoCDCoCgweDAxIDw8IDIpCj4gKyNkZWZpbmUgU0VMRUNUUE9MIMKgIMKgIMKgKDB4 MDEgPDwgMzEpCj4gKyNkZWZpbmUgU0VMRUNUU0xBVkUgwqAgwqAweDAxCj4gKyNkZWZpbmUgR09C VVNZIMKgIMKgIMKgIMKgIDB4MDEKPiArCj4gK3N0cnVjdCB3OTBwOTEwX3NwaSB7Cj4gKyDCoCDC oCDCoCBzdHJ1Y3Qgc3BpX2JpdGJhbmcgwqAgwqAgwqAgYml0YmFuZzsKPiArIMKgIMKgIMKgIHN0 cnVjdCBjb21wbGV0aW9uIMKgIMKgIMKgIMKgZG9uZTsKPiArIMKgIMKgIMKgIHZvaWQgX19pb21l bSDCoCDCoCDCoCDCoCDCoCDCoCpyZWdzOwo+ICsgwqAgwqAgwqAgaW50IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgaXJxOwo+ICsgwqAgwqAgwqAgaW50IMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgbGVuOwo+ICsgwqAgwqAgwqAgaW50IMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgY291bnQ7Cj4gKyDCoCDCoCDCoCBjb25zdCB1bnNpZ25lZCBjaGFyIMKgIMKg ICp0eDsKPiArIMKgIMKgIMKgIHVuc2lnbmVkIGNoYXIgwqAgwqAgwqAgwqAgwqAgKnJ4Owo+ICsg wqAgwqAgwqAgc3RydWN0IGNsayDCoCDCoCDCoCDCoCDCoCDCoCDCoCpjbGs7Cj4gKyDCoCDCoCDC oCBzdHJ1Y3QgcmVzb3VyY2UgwqAgwqAgwqAgwqAgKmlvYXJlYTsKPiArIMKgIMKgIMKgIHN0cnVj dCBzcGlfbWFzdGVyIMKgIMKgIMKgICptYXN0ZXI7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qgc3BpX2Rl dmljZSDCoCDCoCDCoCAqY3VyZGV2Owo+ICsgwqAgwqAgwqAgc3RydWN0IGRldmljZSDCoCDCoCDC oCDCoCDCoCAqZGV2Owo+ICsgwqAgwqAgwqAgc3RydWN0IHc5MHA5MTBfc3BpX2luZm8gKnBkYXRh Owo+ICsgwqAgwqAgwqAgc3BpbmxvY2tfdCDCoCDCoCDCoCDCoCDCoCDCoCDCoGxvY2s7Cj4gK307 Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB3OTBwOTEwX3NwaSAqdG9faHcoc3RydWN0IHNw aV9kZXZpY2UgKnNkZXYpCj4gK3sKPiArIMKgIMKgIMKgIHJldHVybiBzcGlfbWFzdGVyX2dldF9k ZXZkYXRhKHNkZXYtPm1hc3Rlcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHc5MHA5MTBfc2xh dmVfc2VsZWN0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHVuc2lnbmVkIGludCBzc3IpCj4gK3sK PiArIMKgIMKgIMKgIHN0cnVjdCB3OTBwOTEwX3NwaSAqaHcgPSB0b19odyhzcGkpOwo+ICsgwqAg wqAgwqAgdW5zaWduZWQgaW50IHZhbDsKPiArIMKgIMKgIMKgIHVuc2lnbmVkIGludCBjcyA9IHNw aS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMSA6IDA7Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCBpbnQg Y3BvbCA9IHNwaS0+bW9kZSAmIFNQSV9DUE9MID8gMSA6IDA7Cj4gKyDCoCDCoCDCoCB1bnNpZ25l ZCBsb25nIGZsYWdzOwo+ICsKPiArIMKgIMKgIMKgIHNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9j aywgZmxhZ3MpOwo+ICsKPiArIMKgIMKgIMKgIHZhbCA9IF9fcmF3X3JlYWRsKGh3LT5yZWdzICsg VVNJX1NTUik7Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKCFjcykKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHZhbCAmPSB+U0VMRUNUTEVWOwo+ICsgwqAgwqAgwqAgZWxzZQo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgdmFsIHw9IFNFTEVDVExFVjsKPiArCj4gKyDCoCDCoCDCoCBpZiAoIXNzcikKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHZhbCAmPSB+U0VMRUNUU0xBVkU7Cj4gKyDCoCDCoCDCoCBl bHNlCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB2YWwgfD0gU0VMRUNUU0xBVkU7Cj4gKwo+ICsg wqAgwqAgwqAgX19yYXdfd3JpdGVsKHZhbCwgaHctPnJlZ3MgKyBVU0lfU1NSKTsKPiArCj4gKyDC oCDCoCDCoCB2YWwgPSBfX3Jhd19yZWFkbChody0+cmVncyArIFVTSV9DTlQpOwo+ICsKPiArIMKg IMKgIMKgIGlmICghY3BvbCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHZhbCAmPSB+U0VMRUNU UE9MOwo+ICsgwqAgwqAgwqAgZWxzZQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdmFsIHw9IFNF TEVDVFBPTDsKPiArCj4gKyDCoCDCoCDCoCBfX3Jhd193cml0ZWwodmFsLCBody0+cmVncyArIFVT SV9DTlQpOwo+ICsKPiArIMKgIMKgIMKgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5sb2Nr LCBmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHc5MHA5MTBfc3BpX2NoaXBzZWwoc3Ry dWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IHZhbHVlKQo+ICt7Cj4gKyDCoCDCoCDCoCBzd2l0Y2gg KHZhbHVlKSB7Cj4gKyDCoCDCoCDCoCBjYXNlIEJJVEJBTkdfQ1NfSU5BQ1RJVkU6Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCB3OTBwOTEwX3NsYXZlX3NlbGVjdChzcGksIDApOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4gKwo+ICsgwqAgwqAgwqAgY2FzZSBCSVRCQU5HX0NTX0FD VElWRToKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHc5MHA5MTBfc2xhdmVfc2VsZWN0KHNwaSwg MSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiArIMKgIMKgIMKgIH0KPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgdzkwcDkxMF9zcGlfc2V0dXBfdHhudW0oc3RydWN0IHc5MHA5MTBf c3BpICpodywKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHVuc2lnbmVkIGludCB0eG51bSkK PiArewo+ICsgwqAgwqAgwqAgdW5zaWduZWQgaW50IHZhbDsKPiArIMKgIMKgIMKgIHVuc2lnbmVk IGxvbmcgZmxhZ3M7Cj4gKwo+ICsgwqAgwqAgwqAgc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5sb2Nr LCBmbGFncyk7Cj4gKwo+ICsgwqAgwqAgwqAgdmFsID0gX19yYXdfcmVhZGwoaHctPnJlZ3MgKyBV U0lfQ05UKTsKPiArCj4gKyDCoCDCoCDCoCBpZiAoIXR4bnVtKQo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgdmFsICY9IH5UWE5VTTsKPiArIMKgIMKgIMKgIGVsc2UKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHZhbCB8PSB0eG51bSA8PCAweDA4Owo+ICsKPiArIMKgIMKgIMKgIF9fcmF3X3dyaXRl bCh2YWwsIGh3LT5yZWdzICsgVVNJX0NOVCk7Cj4gKwo+ICsgwqAgwqAgwqAgc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmaHctPmxvY2ssIGZsYWdzKTsKPiArCj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHc5MHA5MTBfc3BpX3NldHVwX3R4Yml0bGVuKHN0cnVjdCB3OTBwOTEwX3NwaSAqaHcsCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1bnNpZ25lZCBpbnQgdHhiaXRsZW4pCj4gK3sKPiArIMKg IMKgIMKgIHVuc2lnbmVkIGludCB2YWw7Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCBsb25nIGZsYWdz Owo+ICsKPiArIMKgIMKgIMKgIHNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOwo+ ICsKPiArIMKgIMKgIMKgIHZhbCA9IF9fcmF3X3JlYWRsKGh3LT5yZWdzICsgVVNJX0NOVCk7Cj4g Kwo+ICsgwqAgwqAgwqAgdmFsIHw9ICh0eGJpdGxlbiA8PCAweDAzKTsKPiArCj4gKyDCoCDCoCDC oCBfX3Jhd193cml0ZWwodmFsLCBody0+cmVncyArIFVTSV9DTlQpOwo+ICsKPiArIMKgIMKgIMKg IHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5sb2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHc5MHA5MTBfc3BpX2dvYnVzeShzdHJ1Y3QgdzkwcDkxMF9zcGkgKmh3KQo+ICt7 Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCBpbnQgdmFsOwo+ICsgwqAgwqAgwqAgdW5zaWduZWQgbG9u ZyBmbGFnczsKPiArCj4gKyDCoCDCoCDCoCBzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmxvY2ssIGZs YWdzKTsKPiArCj4gKyDCoCDCoCDCoCB2YWwgPSBfX3Jhd19yZWFkbChody0+cmVncyArIFVTSV9D TlQpOwo+ICsKPiArIMKgIMKgIMKgIHZhbCB8PSBHT0JVU1k7Cj4gKwo+ICsgwqAgwqAgwqAgX19y YXdfd3JpdGVsKHZhbCwgaHctPnJlZ3MgKyBVU0lfQ05UKTsKPiArCj4gKyDCoCDCoCDCoCBzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHc5MHA5MTBfc3BpX3NldHVweGZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzdHJ1Y3Qgc3BpX3Ry YW5zZmVyICp0KQo+ICt7Cj4gKyDCoCDCoCDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCB3OTBwOTEwX3NwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+ICt7Cj4gKyDC oCDCoCDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQg aHdfdHhieXRlKHN0cnVjdCB3OTBwOTEwX3NwaSAqaHcsIGludCBjb3VudCkKPiArewo+ICsgwqAg wqAgwqAgcmV0dXJuIGh3LT50eCA/IGh3LT50eFtjb3VudF0gOiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IHc5MHA5MTBfc3BpX3R4cngoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNw aV90cmFuc2ZlciAqdCkKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IHc5MHA5MTBfc3BpICpodyA9 IHRvX2h3KHNwaSk7Cj4gKwo+ICsgwqAgwqAgwqAgaHctPnR4ID0gdC0+dHhfYnVmOwo+ICsgwqAg wqAgwqAgaHctPnJ4ID0gdC0+cnhfYnVmOwo+ICsgwqAgwqAgwqAgaHctPmxlbiA9IHQtPmxlbjsK PiArIMKgIMKgIMKgIGh3LT5jb3VudCA9IDA7Cj4gKwo+ICsgwqAgwqAgwqAgX19yYXdfd3JpdGVs KGh3X3R4Ynl0ZShodywgMHgwKSwgaHctPnJlZ3MgKyBVU0lfVFgwKTsKPiArCj4gKyDCoCDCoCDC oCB3OTBwOTEwX3NwaV9nb2J1c3koaHcpOwo+ICsKPiArIMKgIMKgIMKgIHdhaXRfZm9yX2NvbXBs ZXRpb24oJmh3LT5kb25lKTsKPiArCj4gKyDCoCDCoCDCoCByZXR1cm4gaHctPmNvdW50Owo+ICt9 Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgdzkwcDkxMF9zcGlfaXJxKGludCBpcnEsIHZvaWQg KmRldikKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IHc5MHA5MTBfc3BpICpodyA9IGRldjsKPiAr IMKgIMKgIMKgIHVuc2lnbmVkIGludCBzdGF0dXM7Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCBpbnQg Y291bnQgPSBody0+Y291bnQ7Cj4gKwo+ICsgwqAgwqAgwqAgc3RhdHVzID0gX19yYXdfcmVhZGwo aHctPnJlZ3MgKyBVU0lfQ05UKTsKPiArIMKgIMKgIMKgIF9fcmF3X3dyaXRlbChzdGF0dXMsIGh3 LT5yZWdzICsgVVNJX0NOVCk7Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKHN0YXR1cyAmIEVORkxHKSB7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBody0+Y291bnQrKzsKPiArCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCBpZiAoaHctPnJ4KQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgaHctPnJ4W2NvdW50XSA9IF9fcmF3X3JlYWRsKGh3LT5yZWdzICsgVVNJX1JYMCk7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCBjb3VudCsrOwo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGlmIChjb3VudCA8IGh3LT5sZW4pIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIF9fcmF3X3dyaXRlbChod190eGJ5dGUoaHcsIGNvdW50KSwgaHctPnJlZ3MgKyBVU0lfVFgw KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHc5MHA5MTBfc3BpX2dvYnVz eShodyk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9IGVsc2Ugewo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgY29tcGxldGUoJmh3LT5kb25lKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gSVJRX0hBTkRM RUQ7Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgY29tcGxldGUoJmh3LT5kb25lKTsK PiArIMKgIMKgIMKgIHJldHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg dzkwcDkxMF90eF9lZGdlKHN0cnVjdCB3OTBwOTEwX3NwaSAqaHcsIHVuc2lnbmVkIGludCBlZGdl KQo+ICt7Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCBpbnQgdmFsOwo+ICsgwqAgwqAgwqAgdW5zaWdu ZWQgbG9uZyBmbGFnczsKPiArCj4gKyDCoCDCoCDCoCBzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmxv Y2ssIGZsYWdzKTsKPiArCj4gKyDCoCDCoCDCoCB2YWwgPSBfX3Jhd19yZWFkbChody0+cmVncyAr IFVTSV9DTlQpOwo+ICsKPiArIMKgIMKgIMKgIGlmIChlZGdlKQo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgdmFsIHw9IFRYTkVHOwo+ICsgwqAgwqAgwqAgZWxzZQo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgdmFsICY9IH5UWE5FRzsKPiArIMKgIMKgIMKgIF9fcmF3X3dyaXRlbCh2YWwsIGh3LT5y ZWdzICsgVVNJX0NOVCk7Cj4gKwo+ICsgwqAgwqAgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm aHctPmxvY2ssIGZsYWdzKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdzkwcDkxMF9yeF9lZGdl KHN0cnVjdCB3OTBwOTEwX3NwaSAqaHcsIHVuc2lnbmVkIGludCBlZGdlKQo+ICt7Cj4gKyDCoCDC oCDCoCB1bnNpZ25lZCBpbnQgdmFsOwo+ICsgwqAgwqAgwqAgdW5zaWduZWQgbG9uZyBmbGFnczsK PiArCj4gKyDCoCDCoCDCoCBzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmxvY2ssIGZsYWdzKTsKPiAr Cj4gKyDCoCDCoCDCoCB2YWwgPSBfX3Jhd19yZWFkbChody0+cmVncyArIFVTSV9DTlQpOwo+ICsK PiArIMKgIMKgIMKgIGlmIChlZGdlKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdmFsIHw9IFJY TkVHOwo+ICsgwqAgwqAgwqAgZWxzZQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdmFsICY9IH5S WE5FRzsKPiArIMKgIMKgIMKgIF9fcmF3X3dyaXRlbCh2YWwsIGh3LT5yZWdzICsgVVNJX0NOVCk7 Cj4gKwo+ICsgwqAgwqAgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmxvY2ssIGZsYWdz KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdzkwcDkxMF9zZW5kX2ZpcnN0KHN0cnVjdCB3OTBw OTEwX3NwaSAqaHcsIHVuc2lnbmVkIGludCBsc2IpCj4gK3sKPiArIMKgIMKgIMKgIHVuc2lnbmVk IGludCB2YWw7Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArIMKgIMKg IMKgIHNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOwo+ICsKPiArIMKgIMKgIMKg IHZhbCA9IF9fcmF3X3JlYWRsKGh3LT5yZWdzICsgVVNJX0NOVCk7Cj4gKwo+ICsgwqAgwqAgwqAg aWYgKGxzYikKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHZhbCB8PSBMU0I7Cj4gKyDCoCDCoCDC oCBlbHNlCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB2YWwgJj0gfkxTQjsKPiArIMKgIMKgIMKg IF9fcmF3X3dyaXRlbCh2YWwsIGh3LT5yZWdzICsgVVNJX0NOVCk7Cj4gKwo+ICsgwqAgwqAgwqAg c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmxvY2ssIGZsYWdzKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgdzkwcDkxMF9zZXRfc2xlZXAoc3RydWN0IHc5MHA5MTBfc3BpICpodywgdW5zaWdu ZWQgaW50IHNsZWVwKQo+ICt7Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCBpbnQgdmFsOwo+ICsgwqAg wqAgwqAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKyDCoCDCoCDCoCBzcGluX2xvY2tfaXJx c2F2ZSgmaHctPmxvY2ssIGZsYWdzKTsKPiArCj4gKyDCoCDCoCDCoCB2YWwgPSBfX3Jhd19yZWFk bChody0+cmVncyArIFVTSV9DTlQpOwo+ICsKPiArIMKgIMKgIMKgIGlmIChzbGVlcCkKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHZhbCB8PSAoc2xlZXAgPDwgMTIpOwo+ICsgwqAgwqAgwqAgZWxz ZQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdmFsICY9IH4oMHgwZiA8PCAxMik7Cj4gKyDCoCDC oCDCoCBfX3Jhd193cml0ZWwodmFsLCBody0+cmVncyArIFVTSV9DTlQpOwo+ICsKPiArIMKgIMKg IMKgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5sb2NrLCBmbGFncyk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIHc5MHA5MTBfZW5hYmxlX2ludChzdHJ1Y3QgdzkwcDkxMF9zcGkgKmh3LCB1 bnNpZ25lZCBpbnQgZW5hYmxlKQo+ICt7Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCBpbnQgdmFsOwo+ ICsgwqAgwqAgwqAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKyDCoCDCoCDCoCBzcGluX2xv Y2tfaXJxc2F2ZSgmaHctPmxvY2ssIGZsYWdzKTsKPiArCj4gKyDCoCDCoCDCoCB2YWwgPSBfX3Jh d19yZWFkbChody0+cmVncyArIFVTSV9DTlQpOwo+ICsKPiArIMKgIMKgIMKgIGlmIChlbmFibGUp Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB2YWwgfD0gRU5JTlQ7Cj4gKyDCoCDCoCDCoCBlbHNl Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB2YWwgJj0gfkVOSU5UOwo+ICsKPiArIMKgIMKgIMKg IF9fcmF3X3dyaXRlbCh2YWwsIGh3LT5yZWdzICsgVVNJX0NOVCk7Cj4gKwo+ICsgwqAgwqAgwqAg c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmxvY2ssIGZsYWdzKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgdzkwcDkxMF9zZXRfZGl2aWRlcihzdHJ1Y3QgdzkwcDkxMF9zcGkgKmh3KQo+ICt7 Cj4gKyDCoCDCoCDCoCBfX3Jhd193cml0ZWwoaHctPnBkYXRhLT5kaXZpZGVyLCBody0+cmVncyAr IFVTSV9ESVYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB3OTBwOTEwX2luaXRfc3BpKHN0cnVj dCB3OTBwOTEwX3NwaSAqaHcpCj4gK3sKPiArIMKgIMKgIMKgIGNsa19lbmFibGUoaHctPmNsayk7 Cj4gKyDCoCDCoCDCoCBzcGluX2xvY2tfaW5pdCgmaHctPmxvY2spOwo+ICsKPiArIMKgIMKgIMKg IHc5MHA5MTBfdHhfZWRnZShodywgaHctPnBkYXRhLT50eG5lZyk7Cj4gKyDCoCDCoCDCoCB3OTBw OTEwX3J4X2VkZ2UoaHcsIGh3LT5wZGF0YS0+cnhuZWcpOwo+ICsgwqAgwqAgwqAgdzkwcDkxMF9z ZW5kX2ZpcnN0KGh3LCBody0+cGRhdGEtPmxzYik7Cj4gKyDCoCDCoCDCoCB3OTBwOTEwX3NldF9z bGVlcChodywgaHctPnBkYXRhLT5zbGVlcCk7Cj4gKyDCoCDCoCDCoCB3OTBwOTEwX3NwaV9zZXR1 cF90eGJpdGxlbihodywgaHctPnBkYXRhLT50eGJpdGxlbik7Cj4gKyDCoCDCoCDCoCB3OTBwOTEw X3NwaV9zZXR1cF90eG51bShodywgaHctPnBkYXRhLT50eG51bSk7Cj4gKyDCoCDCoCDCoCB3OTBw OTEwX3NldF9kaXZpZGVyKGh3KTsKPiArIMKgIMKgIMKgIHc5MHA5MTBfZW5hYmxlX2ludChodywg MSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19kZXZpbml0IHc5MHA5MTBfc3BpX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArIMKgIMKgIMKgIHN0cnVjdCB3OTBw OTEwX3NwaSAqaHc7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwo+ICsg wqAgwqAgwqAgc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKyDCoCDCoCDCoCBpbnQgZXJyID0gMDsK PiArCj4gKyDCoCDCoCDCoCBtYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNp emVvZihzdHJ1Y3QgdzkwcDkxMF9zcGkpKTsKPiArIMKgIMKgIMKgIGlmIChtYXN0ZXIgPT0gTlVM TCkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gbWVt b3J5IGZvciBzcGlfbWFzdGVyXG4iKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGVyciA9IC1F Tk9NRU07Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIGVycl9ub21lbTsKPiArIMKgIMKg IMKgIH0KPiArCj4gKyDCoCDCoCDCoCBodyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVy KTsKPiArIMKgIMKgIMKgIG1lbXNldChodywgMCwgc2l6ZW9mKHN0cnVjdCB3OTBwOTEwX3NwaSkp Owo+ICsKPiArIMKgIMKgIMKgIGh3LT5tYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChtYXN0ZXIpOwo+ ICsgwqAgwqAgwqAgaHctPnBkYXRhIMKgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKPiArIMKg IMKgIMKgIGh3LT5kZXYgPSAmcGRldi0+ZGV2Owo+ICsKPiArIMKgIMKgIMKgIGlmIChody0+cGRh dGEgPT0gTlVMTCkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGV2X2VycigmcGRldi0+ZGV2 LCAiTm8gcGxhdGZvcm0gZGF0YSBzdXBwbGllZFxuIik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBlcnIgPSAtRU5PRU5UOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBlcnJfcGRhdGE7 Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgaHcpOwo+ICsgwqAgwqAgwqAgaW5pdF9jb21wbGV0aW9uKCZody0+ZG9uZSk7Cj4gKwo+ICsg wqAgwqAgwqAgbWFzdGVyLT5tb2RlX2JpdHMgwqAgwqAgwqAgwqAgwqA9IFNQSV9NT0RFXzA7Cj4g KyDCoCDCoCDCoCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0IMKgIMKgID0gaHctPnBkYXRhLT5udW1f Y3M7Cj4gKyDCoCDCoCDCoCBtYXN0ZXItPmJ1c19udW0gwqAgwqAgwqAgwqAgwqAgwqA9IGh3LT5w ZGF0YS0+YnVzX251bTsKPiArIMKgIMKgIMKgIGh3LT5iaXRiYW5nLm1hc3RlciDCoCDCoCDCoCDC oCA9IGh3LT5tYXN0ZXI7Cj4gKyDCoCDCoCDCoCBody0+Yml0YmFuZy5zZXR1cF90cmFuc2ZlciA9 IHc5MHA5MTBfc3BpX3NldHVweGZlcjsKPiArIMKgIMKgIMKgIGh3LT5iaXRiYW5nLmNoaXBzZWxl Y3QgwqAgwqAgPSB3OTBwOTEwX3NwaV9jaGlwc2VsOwo+ICsgwqAgwqAgwqAgaHctPmJpdGJhbmcu dHhyeF9idWZzIMKgIMKgIMKgPSB3OTBwOTEwX3NwaV90eHJ4Owo+ICsgwqAgwqAgwqAgaHctPmJp dGJhbmcubWFzdGVyLT5zZXR1cCDCoD0gdzkwcDkxMF9zcGlfc2V0dXA7Cj4gKwo+ICsgwqAgwqAg wqAgcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsK PiArIMKgIMKgIMKgIGlmIChyZXMgPT0gTlVMTCkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg ZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGdldCBJT1JFU09VUkNFX01FTVxuIik7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCBlcnIgPSAtRU5PRU5UOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgZ290byBlcnJfcGRhdGE7Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgaHctPmlv YXJlYSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LAo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmVzb3VyY2Vfc2l6ZShy ZXMpLCBwZGV2LT5uYW1lKTsKPiArCj4gKyDCoCDCoCDCoCBpZiAoaHctPmlvYXJlYSA9PSBOVUxM KSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3Qg cmVzZXJ2ZSByZWdpb25cbiIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXJyID0gLUVOWElP Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBlcnJfcGRhdGE7Cj4gKyDCoCDCoCDCoCB9 Cj4gKwo+ICsgwqAgwqAgwqAgaHctPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNl X3NpemUocmVzKSk7Cj4gKyDCoCDCoCDCoCBpZiAoaHctPnJlZ3MgPT0gTlVMTCkgewo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG1hcCBJT1xuIik7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlcnIgPSAtRU5YSU87Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBnb3RvIGVycl9pb21hcDsKPiArIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCBo dy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKPiArIMKgIMKgIMKgIGlmIChody0+ aXJxIDwgMCkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGV2X2VycigmcGRldi0+ZGV2LCAi Tm8gSVJRIHNwZWNpZmllZFxuIik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlcnIgPSAtRU5P RU5UOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBlcnJfaXJxOwo+ICsgwqAgwqAgwqAg fQo+ICsKPiArIMKgIMKgIMKgIGVyciA9IHJlcXVlc3RfaXJxKGh3LT5pcnEsIHc5MHA5MTBfc3Bp X2lycSwgMCwgcGRldi0+bmFtZSwgaHcpOwo+ICsgwqAgwqAgwqAgaWYgKGVycikgewo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGNsYWltIElSUVxu Iik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIGVycl9pcnE7Cj4gKyDCoCDCoCDCoCB9 Cj4gKwo+ICsgwqAgwqAgwqAgaHctPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNwaSIpOwo+ ICsgwqAgwqAgwqAgaWYgKElTX0VSUihody0+Y2xrKSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gY2xvY2sgZm9yIGRldmljZVxuIik7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCBlcnIgPSBQVFJfRVJSKGh3LT5jbGspOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgZ290byBlcnJfY2xrOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIG1m cF9zZXRfZ3JvdXBnKCZwZGV2LT5kZXYpOwo+ICsgwqAgwqAgwqAgdzkwcDkxMF9pbml0X3NwaSho dyk7Cj4gKwo+ICsgwqAgwqAgwqAgZXJyID0gc3BpX2JpdGJhbmdfc3RhcnQoJmh3LT5iaXRiYW5n KTsKPiArIMKgIMKgIMKgIGlmIChlcnIpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRldl9l cnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBTUEkgbWFzdGVyXG4iKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gZXJyX3JlZ2lzdGVyOwo+ICsgwqAgwqAgwqAgfQo+ICsK PiArIMKgIMKgIMKgIHJldHVybiAwOwo+ICsKPiArZXJyX3JlZ2lzdGVyOgo+ICsgwqAgwqAgwqAg Y2xrX2Rpc2FibGUoaHctPmNsayk7Cj4gKyDCoCDCoCDCoCBjbGtfcHV0KGh3LT5jbGspOwo+ICtl cnJfY2xrOgo+ICsgwqAgwqAgwqAgZnJlZV9pcnEoaHctPmlycSwgaHcpOwo+ICtlcnJfaXJxOgo+ ICsgwqAgwqAgwqAgaW91bm1hcChody0+cmVncyk7Cj4gK2Vycl9pb21hcDoKPiArIMKgIMKgIMKg IHJlbGVhc2VfcmVzb3VyY2UoaHctPmlvYXJlYSk7Cj4gKyDCoCDCoCDCoCBrZnJlZShody0+aW9h cmVhKTsKPiArZXJyX3BkYXRhOgo+ICsgwqAgwqAgwqAgc3BpX21hc3Rlcl9wdXQoaHctPm1hc3Rl cik7Owo+ICsKPiArZXJyX25vbWVtOgo+ICsgwqAgwqAgwqAgcmV0dXJuIGVycjsKPiArfQo+ICsK PiArc3RhdGljIGludCBfX2RldmV4aXQgdzkwcDkxMF9zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKmRldikKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IHc5MHA5MTBfc3BpICpodyA9 IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsgwqAgwqAgwqAgdzkwcDkxMF9lbmFi bGVfaW50KGh3LCAwKTsKPiArCj4gKyDCoCDCoCDCoCBmcmVlX2lycShody0+aXJxLCBodyk7Cj4g Kwo+ICsgwqAgwqAgwqAgcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKPiArCj4gKyDC oCDCoCDCoCBzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIoaHctPm1hc3Rlcik7Cj4gKwo+ICsgwqAgwqAg wqAgY2xrX2Rpc2FibGUoaHctPmNsayk7Cj4gKyDCoCDCoCDCoCBjbGtfcHV0KGh3LT5jbGspOwo+ ICsKPiArIMKgIMKgIMKgIGlvdW5tYXAoaHctPnJlZ3MpOwo+ICsKPiArIMKgIMKgIMKgIHJlbGVh c2VfcmVzb3VyY2UoaHctPmlvYXJlYSk7Cj4gKyDCoCDCoCDCoCBrZnJlZShody0+aW9hcmVhKTsK PiArCj4gKyDCoCDCoCDCoCBzcGlfbWFzdGVyX3B1dChody0+bWFzdGVyKTsKPiArIMKgIMKgIMKg IHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3OTBw OTEwX3NwaV9kcml2ZXIgPSB7Cj4gKyDCoCDCoCDCoCAucHJvYmUgwqAgwqAgwqAgwqAgwqA9IHc5 MHA5MTBfc3BpX3Byb2JlLAo+ICsgwqAgwqAgwqAgLnJlbW92ZSDCoCDCoCDCoCDCoCA9IF9fZGV2 ZXhpdF9wKHc5MHA5MTBfc3BpX3JlbW92ZSksCj4gKyDCoCDCoCDCoCAuZHJpdmVyIMKgIMKgIMKg IMKgID0gewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLm5hbWUgwqAgPSAidzkwcDkxMC1zcGki LAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLm93bmVyIMKgPSBUSElTX01PRFVMRSwKPiArIMKg IMKgIMKgIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCB3OTBwOTEwX3NwaV9pbml0 KHZvaWQpCj4gK3sKPiArIMKgIMKgIMKgIHJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIo Jnc5MHA5MTBfc3BpX2RyaXZlcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCB3OTBw OTEwX3NwaV9leGl0KHZvaWQpCj4gK3sKPiArIMKgIMKgIMKgIHBsYXRmb3JtX2RyaXZlcl91bnJl Z2lzdGVyKCZ3OTBwOTEwX3NwaV9kcml2ZXIpOwo+ICt9Cj4gKwo+ICttb2R1bGVfaW5pdCh3OTBw OTEwX3NwaV9pbml0KTsKPiArbW9kdWxlX2V4aXQodzkwcDkxMF9zcGlfZXhpdCk7Cj4gKwo+ICtN T0RVTEVfQVVUSE9SKCJXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+Iik7Cj4gK01P RFVMRV9ERVNDUklQVElPTigidzkwcDkxMCBzcGkgZHJpdmVyISIpOwo+ICtNT0RVTEVfTElDRU5T RSgiR1BMIik7Cj4gK01PRFVMRV9BTElBUygicGxhdGZvcm06dzkwcDkxMC1zcGkiKTsKPiAtLQo+ IDEuNS42LjMKPgoKCgotLSAKbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkxl dCBDcnlzdGFsIFJlcG9ydHMgaGFuZGxlIHRoZSByZXBvcnRpbmcgLSBGcmVlIENyeXN0YWwgUmVw b3J0cyAyMDA4IDMwLURheSAKdHJpYWwuIFNpbXBsaWZ5IHlvdXIgcmVwb3J0IGRlc2lnbiwgaW50 ZWdyYXRpb24gYW5kIGRlcGxveW1lbnQgLSBhbmQgZm9jdXMgb24gCndoYXQgeW91IGRvIGJlc3Qs IGNvcmUgYXBwbGljYXRpb24gY29kaW5nLiBEaXNjb3ZlciB3aGF0J3MgbmV3IHdpdGgKQ3J5c3Rh bCBSZXBvcnRzIG5vdy4gIGh0dHA6Ly9wLnNmLm5ldC9zZnUvYm9iai1qdWx5Cl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnNwaS1kZXZlbC1nZW5lcmFsIG1h aWxpbmcgbGlzdApzcGktZGV2ZWwtZ2VuZXJhbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6 Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vc3BpLWRldmVsLWdlbmVyYWwK