Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759249Ab1CDIxz (ORCPT ); Fri, 4 Mar 2011 03:53:55 -0500 Received: from relay.ihostexchange.net ([66.46.182.56]:17735 "EHLO relay.ihostexchange.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751758Ab1CDIxy (ORCPT ); Fri, 4 Mar 2011 03:53:54 -0500 X-Greylist: delayed 307 seconds by postgrey-1.27 at vger.kernel.org; Fri, 04 Mar 2011 03:53:53 EST From: Dudley Du To: "rubini@ipvvis.unipv.it" , "dmitry.torokhov@gmail.com" , "dmitry.torokhov@gmail.com" , "olofj@google.com" , "micahc@google.com" , Dudley Du CC: "linux-input@vger.kernel.org" , "linux-kernel@vger.kernel.org" Date: Fri, 4 Mar 2011 03:48:21 -0500 Subject: [PATCH] mouse: Add new i2c-based input mouse driver into input subsystem for Cypress i2c trackpad devices. Thread-Topic: [PATCH] mouse: Add new i2c-based input mouse driver into input subsystem for Cypress i2c trackpad devices. Thread-Index: AcvaSOoU0WXgU0AEQxeFlSvm2HyZbQ== Message-ID: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-cr-hashedpuzzle: DYw8 EgDQ KTfe PsVK SpVo YHzO bLeL cfSL mm5d pZ9h sGYT scDn 0PZX 6j7L 6oPn AA4wMw==;6;ZABtAGkAdAByAHkALgB0AG8AcgBvAGsAaABvAHYAQABnAG0AYQBpAGwALgBjAG8AbQA7AGwAaQBuAHUAeAAtAGkAbgBwAHUAdABAAHYAZwBlAHIALgBrAGUAcgBuAGUAbAAuAG8AcgBnADsAbABpAG4AdQB4AC0AawBlAHIAbgBlAGwAQAB2AGcAZQByAC4AawBlAHIAbgBlAGwALgBvAHIAZwA7AG0AaQBjAGEAaABjAEAAZwBvAG8AZwBsAGUALgBjAG8AbQA7AG8AbABvAGYAagBAAGcAbwBvAGcAbABlAC4AYwBvAG0AOwByAHUAYgBpAG4AaQBAAGkAcAB2AHYAaQBzAC4AdQBuAGkAcAB2AC4AaQB0AA==;Sosha1_v1;7;{AB56ADC6-5432-4F60-86AF-7D8702202296};ZAB1AGQAbABAAGMAeQBwAHIAZQBzAHMALgBjAG8AbQA=;Fri, 04 Mar 2011 08:48:21 GMT;WwBQAEEAVABDAEgAXQAgAG0AbwB1AHMAZQA6ACAAQQBkAGQAIABuAGUAdwAgAGkAMgBjAC0AYgBhAHMAZQBkACAAaQBuAHAAdQB0ACAAbQBvAHUAcwBlACAAZAByAGkAdgBlAHIAIABpAG4AdABvACAAaQBuAHAAdQB0ACAAcwB1AGIAcwB5AHMAdABlAG0AIABmAG8AcgAgAEMAeQBwAHIAZQBzAHMAIABpADIAYwAgAHQAcgBhAGMAawBwAGEAZAAgAGQAZQB2AGkAYwBlAHMALgA= x-cr-puzzleid: {AB56ADC6-5432-4F60-86AF-7D8702202296} acceptlanguage: zh-CN, en-US Content-Type: multipart/mixed; boundary="_002_B27AC323FA92C946BA36D2913DDC8E3701FD6F0B1A3BVMBX126ihos_" MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 345021 Lines: 4491 --_002_B27AC323FA92C946BA36D2913DDC8E3701FD6F0B1A3BVMBX126ihos_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGludXgtSW5wdXQgTWFpbnRhaW5lcnMsDQoNClRoaXMgcGF0Y2ggYWRkcyBuZXcgaTJjLWJh c2VkIGlucHV0IG1vdXNlIGRyaXZlciBpbnRvIGlucHV0IHN1YnN5c3RlbSBmb3INCkN5cHJlc3Mg aTJjIHRyYWNrcGFkIGRldmljZXMuIFRocm91Z2ggdGhpcyBuZXcgYWRkZWQgZHJpdmVyLA0KQ3lw cmVzcyBpMmMgdHJhY2twYWQgZGV2aWNlcyB3aWxsIGJlIHN1cHBvcnRlZCBpbiBMaW51eCBiYXNl ZCBzeXN0ZW0NCndoaWNoIGFyZSBkZXZlbG9wZWQgYmFzZWQgb24gQ3lwcmVzcyBzZWxmLWRlc2ln bmVkIFBTT0MgY2hpcHNldC4NClRoZSBmdW5jdGlvbiBvZiB0aGlzIGRyaXZlciByZWFkcyB0cmFj a3BhZCBkYXRhIHVzaW5nIGkyYyBpbnRlcmZhY2VzDQphbmQgcmVwb3J0IGN1cnNvciBtb3Zpbmcg ZGF0YSBhbmQgZ2VzdHVyZSBjb21iaW5lZCBrZXlzIHRvIGlucHV0IHN1YnN5c3RlbS4NCg0KVGhp cyBkcml2ZXIgYWRkcyBvbmUgZHJpdmVyIG1haW4gZmlsZSBjeXByZXNzLmMgaW4gZHJpdmVycy9p bnB1dC9tb3VzZSBkaXJlY3RvcnksDQphbmQgb25lIGhlYWRlciBmaWxlIGN5YXBhLmggaW4gaW5j bHVkZS9saW51eCBkaXJlY3RvcnksDQphbmQgbW9kaWZpZWQgS2NvbmZpZyBhbmQgTWFrZWZpbGUg ZmlsZXMgaW4gZHJpdmVycy9pbnB1dC9tb3VzZSBkaXJlY3RvcnkgdG8gaW5jbHVkZSB0aGlzIGRy aXZlci4NCg0KQXR0YWNoZWQgaXMgdGhlIHBhdGNoIGZpbGUgZm9yIHRoaXMgZHJpdmVyIGFuZCBi ZWxsb3cgaXMgdGhlIGNvbnRlbnQgb2YgdGhpcyBkcml2ZXIuDQoNCg0KRnJvbSBlZDAzNGY2N2Mx MWZhMmRjOTNiNzc3YmExMmE0NzcwYWY4NTY3Y2U0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0K RnJvbTogRHUsIER1ZGxleSA8ZHVkbEBjeXByZXNzLmNvbT4NCkRhdGU6IEZyaSwgNCBNYXIgMjAx MSAxNTowMzo1MSAtMDUwMA0KU3ViamVjdDogW1BBVENIXSBBZGQgbmV3IGkyYy1iYXNlZCBpbnB1 dCBtb3VzZSBkcml2ZXIgZm9yIEN5cHJlc3MgaTJjLWJhc2VkIHRyYWNrcGFkIGRldmljZXMgaW50 byBpbnB1dCBzdWJzeXN0ZW0uDQoNCkNoYW5nZS1JZDogSTEwOGFkMTUwNWYzZDM0YWIyNDY1ODky MWE3NzJlOTM3OTQwYTFiODgNClNpZ25lZC1vZmYtYnk6IER1LCBEdWRsZXkgPGR1ZGxAY3lwcmVz cy5jb20+DQotLS0NCiBkcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcgICAgICAgfCAgIDExICsN CiBkcml2ZXJzL2lucHV0L21vdXNlL01ha2VmaWxlICAgICAgfCAgICAxICsNCiBkcml2ZXJzL2lu cHV0L21vdXNlL2N5cHJlc3NfaTJjLmMgfCAzNDYzICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysNCiBpbmNsdWRlL2xpbnV4L2N5YXBhLmggICAgICAgICAgICAgfCAgIDYwICsN CiA0IGZpbGVzIGNoYW5nZWQsIDM1MzUgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkNCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9pbnB1dC9tb3VzZS9jeXByZXNzX2kyYy5jDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvY3lhcGEuaA0KDQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9pbnB1dC9tb3VzZS9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnDQpp bmRleCBiZjVmZDdmLi44NDVkMDVhIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9L Y29uZmlnDQorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcNCkBAIC0zMjIsNCArMzIy LDE1IEBAIGNvbmZpZyBNT1VTRV9TWU5BUFRJQ1NfSTJDDQogICAgICAgICAgVG8gY29tcGlsZSB0 aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlDQogICAgICAgICAgbW9k dWxlIHdpbGwgYmUgY2FsbGVkIHN5bmFwdGljc19pMmMuDQoNCitjb25maWcgTU9VU0VfQ1lQUkVT U19JMkMNCisgICAgICAgdHJpc3RhdGUgIkN5cHJlc3MgSTJDIFRvdWNocGFkIHN1cHBvcnQiDQor ICAgICAgIGRlcGVuZHMgb24gSTJDDQorICAgICAgIGhlbHANCisgICAgICAgICBUaGlzIGRyaXZl ciBzdXBwb3J0cyBDeXByZXNzIEkyQyB0b3VjaHBhZCBvbiBDaHJvbWUgT1MgcGxhdGZvcm0uDQor DQorICAgICAgICAgU2F5IHkgaGVyZSBpZiB5b3UgaGF2ZSBDaHJvbWUgT1MgdGhhdCBzdXBwb3J0 IEN5cHJlc3MgSTJDIFRvdWNocGFkLg0KKw0KKyAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2 ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQ0KKyAgICAgICAgIG1vZHVsZSB3aWxs IGJlIGNhbGxlZCBjeXByZXNzX2kyYy4NCisNCiBlbmRpZg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv aW5wdXQvbW91c2UvTWFrZWZpbGUgYi9kcml2ZXJzL2lucHV0L21vdXNlL01ha2VmaWxlDQppbmRl eCA1NzBjODRhLi43MDZmMjYxIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtl ZmlsZQ0KKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtlZmlsZQ0KQEAgLTE4LDYgKzE4LDcg QEAgb2JqLSQoQ09ORklHX01PVVNFX1BYQTkzMF9UUktCQUxMKSAgICArPSBweGE5MzBfdHJrYmFs bC5vDQogb2JqLSQoQ09ORklHX01PVVNFX1JJU0NQQykgICAgICAgICAgICAgKz0gcnBjbW91c2Uu bw0KIG9iai0kKENPTkZJR19NT1VTRV9TRVJJQUwpICAgICAgICAgICAgICs9IHNlcm1vdXNlLm8N CiBvYmotJChDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQykgICAgICArPSBzeW5hcHRpY3NfaTJj Lm8NCitvYmotJChDT05GSUdfTU9VU0VfQ1lQUkVTU19JMkMpICAgICAgICAgICAgICAgICs9IGN5 cHJlc3NfaTJjLm8NCiBvYmotJChDT05GSUdfTU9VU0VfVlNYWFhBQSkgICAgICAgICAgICArPSB2 c3h4eGFhLm8NCg0KIHBzbW91c2Utb2JqcyA6PSBwc21vdXNlLWJhc2UubyBzeW5hcHRpY3Mubw0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvY3lwcmVzc19pMmMuYyBiL2RyaXZlcnMv aW5wdXQvbW91c2UvY3lwcmVzc19pMmMuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAw MDAwMDAuLmU3OTQ2OTENCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uv Y3lwcmVzc19pMmMuYw0KQEAgLTAsMCArMSwzNDYzIEBADQorLyoNCisgKiBDeXByZXNzIEFQQSB0 b3VjaHBhZCB3aXRoIEkyQyBpbnRlcmZhY2UNCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAwOSBD b21wdWxhYiwgTHRkLg0KKyAqIER1ZGxleSBEdSA8ZHVkbEBjeXByZXNzLmNvbT4NCisgKg0KKyAq IFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljDQorICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGlu IHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yDQorICogbW9yZSBkZXRhaWxz Lg0KKyAqLw0KKw0KKw0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGlu dXgvaTJjLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbnRl cnJ1cHQuaD4NCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4NCisjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4NCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4NCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPg0KKw0KKyNpbmNsdWRlIDxsaW51eC9jeWFw YS5oPg0KKw0KKw0KKy8qIERlYnVnIG1hY3JvICovDQorI2RlZmluZSBDWUFQQV9EQkcgMA0KKyNp ZiBDWUFQQV9EQkcNCisgICNkZWZpbmUgREJHUFJJTlRLKHgpIHByaW50ayB4DQorICAjZGVmaW5l IERCR19DWUFQQV9SRUFEX0JMT0NLX0RBVEENCisjZWxzZQ0KKyAgI2RlZmluZSBEQkdQUklOVEso eCkNCisjZW5kaWYNCisNCisjZGVmaW5lIENZQVBBX1VTRV9JMkNfUkVHX1dSSVRFX0JMT0NLIDAN CisNCisvKiBDeXByZXNzIEkyQyBBUEEgdHJhY2twYWQgZHJpdmVyIHZlcnNpb24gaXMgZGVmaW5l ZCBhcyBiZWxsb3c6DQorKiogQ1lBUEFfTUFKT1JfVkVSLkNZQVBBX01JTk9SX1ZFUi5DWUFQQV9S RVZJU0lPSU5fVkVSICAuICovDQorI2RlZmluZSBDWUFQQV9NQUpPUl9WRVIgICAgICAgICAgICAg ICAgMA0KKyNkZWZpbmUgQ1lBUEFfTUlOT1JfVkVSICAgICAgICAgICAgICAgIDkNCisjZGVmaW5l IENZQVBBX1JFVklTSU9JTl9WRVIgICAgNA0KKw0KKyNkZWZpbmUgQ1lBUEFfRklMVEVSX0VNUFRZ X0RBVEEgIDB4N0ZGRkZGRkYNCisNCisvKiBtYWNybyBkZWZpbmljYXRpb24gZm9yIGdlc3R1cmVz LiAqLw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qIHwtICAgICAgICAgIGJpdCA3IC0gNSAgICAgICAgIC18 LSAgICAgICAgICAgYml0IDQgLTAgICAgICAgICAtfCAqLw0KKy8qIHwtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAqLw0KKy8qIHwt ICAgICAgICBmaW5nZXIgbnVtYmVyICAgICAgIC18LSAgICAgICAgZ2VzdHVyZSBpZCAgICAgICAg ICAtfCAqLw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKyNkZWZpbmUgR0VTVFVSRV9GSU5HRVJTKHgpICgoKCh4 KSAmIDB4MDcpIDw8IDUpICYgMHhFMCkNCisjZGVmaW5lIEdFU1RVUkVfSU5ERVgoeCkgKCgoeCkg JiAweDFGKSkNCisjZGVmaW5lIEdFU1RVUkVfSURfQ09ERShmaW5nZXIsIGluZGV4KSBcDQorICAg ICAgICAgICAgICAgKEdFU1RVUkVfRklOR0VSUyhmaW5nZXIpIHwgR0VTVFVSRV9JTkRFWChpbmRl eCkpDQorDQorI2RlZmluZSBHRVNUVVJFX05PTkUgICAgICAgICAgICAgICAgICAgMHgwMA0KKy8q IDAtZmluZ2VyIGdlc3R1cmVzLiAqLw0KKyNkZWZpbmUgR0VTVFVSRV9QQUxNX1JFSkVDVElPSU4g ICAgICAgICAgICBHRVNUVVJFX0lEX0NPREUoMCwgMSkNCisvKiAxLWZpbmdlciBnZXN0dXJlcy4g Ki8NCisjZGVmaW5lIEdFU1RVUkVfU0lOR0xFX1RBUCAgICAgICAgICAgICAgICAgR0VTVFVSRV9J RF9DT0RFKDEsIDApDQorI2RlZmluZSBHRVNUVVJFX0RPVUJMRV9UQVAgICAgICAgICAgICAgICAg IEdFU1RVUkVfSURfQ09ERSgxLCAxKQ0KKy8qDQorKiogb25lIGZpbmdlciBjbGljayBhbmQgaG9s ZCBmb3IgbW9yZSB0aGFuIGRlZmluaXRpb2luIHRpbWUsDQorKiogdGhlbiB0byBkbyBzb21ldGhp bmcuDQorKi8NCisjZGVmaW5lIEdFU1RVUkVfVEFQX0FORF9IT0xEICAgICAgIEdFU1RVUkVfSURf Q09ERSgxLCAyKQ0KKyNkZWZpbmUgR0VTVFVSRV9FREdFX01PVElPTiAgICAgICAgICAgICAgICBH RVNUVVJFX0lEX0NPREUoMSwgMykNCisjZGVmaW5lIEdFU1RVUkVfRkxJQ0sgICAgICAgICAgICAg ICAgICAgICAgR0VTVFVSRV9JRF9DT0RFKDEsIDQpDQorLyogR0VTVFVSRV9EUkFHIDogZG91Ymxl IGNsaWNrIGFuZCBob2xkLCB0aGVuIG1vdmUgZm9yIGRyYWcuKi8NCisjZGVmaW5lIEdFU1RVUkVf RFJBRyAgICAgICAgICAgICAgICAgICAgICAgR0VTVFVSRV9JRF9DT0RFKDEsIDUpDQorLyogRGVw ZW5kaW5nIG9uIFBTT0MgdXNlciBtb2R1bGUsIGl0IHdpbGwgZ2l2ZSBmb3VyIGRpZmZlcmVudCBJ RCB3aGVuIHNjcm9sbC4qLw0KKyNkZWZpbmUgR0VTVFVSRV9TQ1JPTExfVVAgICAgICAgICAgICAg ICAgICBHRVNUVVJFX0lEX0NPREUoMSwgNikNCisjZGVmaW5lIEdFU1RVUkVfU0NST0xMX0RPV04g ICAgICAgICAgICAgICAgR0VTVFVSRV9JRF9DT0RFKDEsIDcpDQorI2RlZmluZSBHRVNUVVJFX1ND Uk9MTF9MRUZUICAgICAgICAgICAgICAgIEdFU1RVUkVfSURfQ09ERSgxLCA4KQ0KKyNkZWZpbmUg R0VTVFVSRV9TQ1JPTExfUklHSFQgICAgICAgICAgIEdFU1RVUkVfSURfQ09ERSgxLCA5KQ0KKw0K Ky8qIDItZmluZ2VyIGdlc3R1cmVzICovDQorI2RlZmluZSBHRVNUVVJFXzJGX1pPT01fSU4gICAg ICAgICAgICAgICAgIEdFU1RVUkVfSURfQ09ERSgyLCAwKQ0KKyNkZWZpbmUgR0VTVFVSRV8yRl9a T09NX09VVCAgICAgICAgICAgICAgICBHRVNUVVJFX0lEX0NPREUoMiwgMSkNCisjZGVmaW5lIEdF U1RVUkVfMkZfU0NST0xMX1VQICAgICAgICAgICBHRVNUVVJFX0lEX0NPREUoMiwgMikNCisjZGVm aW5lIEdFU1RVUkVfMkZfU0NST0xMX0RPV04gICAgIEdFU1RVUkVfSURfQ09ERSgyLCAzKQ0KKyNk ZWZpbmUgR0VTVFVSRV8yRl9TQ1JPTExfTEVGVCAgICAgR0VTVFVSRV9JRF9DT0RFKDIsIDQpDQor I2RlZmluZSBHRVNUVVJFXzJGX1NDUk9MTF9SSUdIVCAgICAgICAgICAgIEdFU1RVUkVfSURfQ09E RSgyLCA1KQ0KKyNkZWZpbmUgR0VTVFVSRV8yRl9ST1RBVEUgICAgICAgICAgICAgICAgICBHRVNU VVJFX0lEX0NPREUoMiwgNikNCisjZGVmaW5lIEdFU1RVUkVfMkZfUElOQ0ggICAgICAgICAgICAg ICAgICAgR0VTVFVSRV9JRF9DT0RFKDIsIDcpDQorLyogQWN0aXZhdGVzIHRoZSBSaWdodCBDbGlj ayBhY3Rpb24gKi8NCisjZGVmaW5lIEdFU1RVUkVfMkZfVEFQICAgICAgICAgICAgICAgICAgICAg R0VTVFVSRV9JRF9DT0RFKDIsIDgpDQorLyogU2luZ2xlLUZpbmdlciBjbGljayBhbmQgaG9sZCB3 aGlsZSBhIHNlY29uZCBmaW5nZXIgaXMgbW92aW5nIGZvciBkcmFnZ2luZy4gKi8NCisjZGVmaW5l IEdFU1RVUkVfMkZfRFJBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVNUVVJFX0lEX0NP REUoMiwgOSkNCisjZGVmaW5lIEdFU1RVUkVfMkZfRkxJQ0sgICAgICAgICAgICAgICAgICAgICAg ICAgICBHRVNUVVJFX0lEX0NPREUoMiwgMTApDQorDQorLyogMy1maW5nZXIgZ2VzdHVyZXMgKi8N CisjZGVmaW5lIEdFU1RVUkVfM0ZfRkxJQ0sgICAgICAgICAgICAgICAgICAgR0VTVFVSRV9JRF9D T0RFKDMsIDApDQorDQorLyogNC1maW5nZXIgZ2VzdHVyZXMgKi8NCisjZGVmaW5lIEdFU1RVUkVf NEZfRkxJQ0sgICAgICAgICAgICAgICAgICAgR0VTVFVSRV9JRF9DT0RFKDQsIDApDQorDQorLyog NS1maW5nZXIgZ2VzdHVyZXMgKi8NCisjZGVmaW5lIEdFU1RVUkVfNUZfRkxJQ0sgICAgICAgICAg ICAgICAgICAgR0VTVFVSRV9JRF9DT0RFKDUsIDApDQorDQorLyogc3dpdGggb2YgdGhlIGdlc3R1 cmUsICovDQorI2RlZmluZSBHRVNUVVJFX01VTFRJX1RPVUNIX09ORV9DTElDSyAgIDANCisNCisj ZGVmaW5lIEdFU1RVUkVfREVDT0RFX0ZJTkdFUlMoeCkgICAgICAoKCh4KSA+PiA1KSAmIDB4MDcp DQorI2RlZmluZSBHRVNUVVJFX0RFQ09ERV9JTkRFWCh4KSAgICAgICAgKCh4KSAmIDB4MUYpDQor DQorLyogbWF4IGdlc3R1cmUgaW5kZXggdmFsdWUgZm9yIGVhY2ggZmluZ2VycyB0eXBlIGlzIDMx LiAwfjIxLiovDQorI2RlZmluZSBNQVhfRklOR0VSUyAgICA1DQorDQorDQorLyogcGFyYW1ldGVy IHZhbHVlIGZvciBpbnB1dF9yZXBvcnRfa2V5KEJUTl9UT09MX1dJRFRIKSAqLw0KKyNkZWZpbmUg Q1lBUEFfVE9PTF9XSURUSCA1MA0KKw0KKy8qIFdoZW4gaW4gSVJRIG1vZGUgcmVhZCB0aGUgZGV2 aWNlIGV2ZXJ5IFRIUkVBRF9JUlFfU0xFRVBfU0VDUyAqLw0KKyNkZWZpbmUgQ1lBUEFfVEhSRUFE X0lSUV9TTEVFUF9TRUNTICAgIDINCisjZGVmaW5lIENZQVBBX1RIUkVBRF9JUlFfU0xFRVBfTVNF Q1MgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgKENZQVBBX1RIUkVBRF9JUlFfU0xFRVBfU0VD UyAqIE1TRUNfUEVSX1NFQykNCisNCisvKg0KKyAqIFdoZW4gaW4gUG9sbGluZyBtb2RlIGFuZCBu byBkYXRhIHJlY2VpdmVkIGZvciBDWUFQQV9OT19EQVRBX1RIUkVTIG1zZWNzDQorICogcmVkdWNl IHRoZSBwb2xsaW5nIHJhdGUgdG8gQ1lBUEFfTk9fREFUQV9TTEVFUF9NU0VDUw0KKyAqLw0KKyNk ZWZpbmUgQ1lBUEFfTk9fREFUQV9USFJFUyAgICAgICAgICAgICAgICAgICAgKE1TRUNfUEVSX1NF QykNCisjZGVmaW5lIENZQVBBX05PX0RBVEFfU0xFRVBfTVNFQ1MgICAgICAoTVNFQ19QRVJfU0VD IC8gNCkNCisNCisvKiByZXBvcnQgZGF0YSBzdGFydCByZWcgb2Zmc2V0IGFkZHJlc3MuICovDQor I2RlZmluZSBEQVRBX1JFR19TVEFSVF9PRkZTRVQgIDB4MDAwMA0KKy8qIHJlbGF0aXZlIGRhdGEg cmVwb3J0IGRhdGEgc2l6ZS4gKi8NCisjZGVmaW5lIENZQVBBX1JFTF9SRUdfREFUQV9TSVpFICA1 DQorDQorDQorLyogRGV2aWNlIFNsZWVwIE1vZGVzICovDQorI2RlZmluZSBERVZfUE9XRVJfUkVH ICAweDAwMDkNCisjZGVmaW5lIElOVEVSUlVQVF9NT0RFX01BU0sgIDB4MDENCisjZGVmaW5lIFBX Ul9MRVZFTF9NQVNLICAweDA2DQorI2RlZmluZSBQV1JfQklUU19TSElURiAxDQorI2RlZmluZSBH RVRfUFdSX0xFVkVMKHJlZykgXA0KKyAgICAgICAoKCgodW5zaWduZWQgY2hhcikocmVnKSkmUFdS X0xFVkVMX01BU0spPj5QV1JfQklUU19TSElURikNCisNCisvKiBwcm90b2NvbCBWMS4gKi8NCisj ZGVmaW5lIFJFR19HRVNUVVJFUyAweDBCDQorDQorLyogZGVmaW5pdGlvbiB0byBzdG9yZSBwbGF0 ZnJvbSBkYXRhLiAqLw0KK3N0YXRpYyBzdHJ1Y3QgY3lhcGFfcGxhdGZvcm1fZGF0YSBjeWFwYV9p MmNfcGxhdGZvcm1fZGF0YSA9IHsNCisgICAgICAgLmZsYWcgPSAwLA0KKyAgICAgICAuZ2VuID0g Q1lBUEFfR0VOMiwNCisgICAgICAgLnBvd2VyX3N0YXRlID0gQ1lBUEFfUFdSX0FDVElWRSwNCisg ICAgICAgLnVzZV9hYnNvbHV0ZV9tb2RlID0gdHJ1ZSwNCisgICAgICAgLnVzZV9wb2xsaW5nX21v ZGUgPSBmYWxzZSwNCisgICAgICAgLnBvbGxpbmdfaW50ZXJ2YWxfdGltZV9hY3RpdmUgPSBDWUFQ QV9BQ1RJVkVfUE9MTElOR19JTlRWQUxfVElNRSwNCisgICAgICAgLnBvbGxpbmdfaW50ZXJ2YWxf dGltZV9sb3dwb3dlciA9IENZQVBBX0xPV1BPV0VSX1BPTExJTkdfSU5UVkFMX1RJTUUsDQorICAg ICAgIC5hY3RpdmVfdG91Y2hfdGltZW91dCA9IENZQVBBX0FDVElWRV9UT1VDSF9USU1FT1VULA0K KyAgICAgICAubmFtZSA9IENZQVBBX0kyQ19OQU1FLA0KKyAgICAgICAuaXJxX2dwaW8gPSAtMSwN CisgICAgICAgLnJlcG9ydF9yYXRlID0gQ1lBUEFfUkVQT1JUX1JBVEUsDQorfTsNCisNCisNCisv Kg0KKyoqIEFQQSB0cmFja3BhZCBkZXZpY2Ugc3RhdGVzLg0KKyoqIFVzZWQgaW4gcmVnaXN0ZXIg MHgwMCwgYml0MS0wLCBEZXZpY2VTdGF0dXMgZmllbGQuDQorKi8NCitlbnVtIGN5YXBhX2Rldmlj ZXN0YXRlIHsNCisgICAgICAgQ1lBUEFfREVWX05PUk5BTCA9IDB4MDMsDQorICAgIC8qDQorICAg ICoqIEFmdGVyIHRyYWNrcGFkIGJvb3RlZCwgYW5kIGNhbiByZXBvcnQgZGF0YSwgaXQgc2hvdWxk IHNldCB0aGlzIHZhbHVlLg0KKyAgICAqKiAwdGhlciB2YWx1ZXMgc3RhbmQgZm9yIHRyYWNrcGFk IGRldmljZSBpcyBpbiBhYm5vcm1hbCBzdGF0ZS4NCisgICAgKiogbWF5YmUgbmVlZCB0byBkbyBy ZXNldCBvcGVyYXRpb24gdG8gaXQuDQorICAgICoqIE90aGVyIHZhbHVlcyBhcmUgZGVmaW5lZCBs YXRlciBpZiBuZWVkZWQuDQorICAgICovDQorfTsNCisNCisjZGVmaW5lIENZQVBBX01BWF9UT1VD SFMgKE1BWF9GSU5HRVJTKQ0KKy8qDQorKiogb25seSAxIGdlc3R1cmUgY2FuIGJlIHJlcG9ydGVk IG9uZSB0aW1lIHJpZ2h0IG5vdy4NCisqLw0KKyNkZWZpbmUgQ1lBUEFfT05FX1RJTUVfR0VTVFVS RVMgICgxKQ0KK3N0cnVjdCBjeWFwYV90b3VjaF9nZW4xIHsNCisgICAgICAgdTggcmVsX3h5Ow0K KyAgICAgICB1OCByZWxfeDsNCisgICAgICAgdTggcmVsX3k7DQorfTsNCisNCitzdHJ1Y3QgY3lh cGFfcmVnX2RhdGFfZ2VuMSB7DQorICAgICAgIHU4IHRhcF9tb3Rpb247DQorICAgICAgIHM4IGRl bHRheDsNCisgICAgICAgczggZGVsdGF5Ow0KKyAgICAgICB1OCByZXNlcnZlZDE7DQorICAgICAg IHU4IHJlc2VydmVkMjsNCisNCisgICAgICAgc3RydWN0IGN5YXBhX3RvdWNoX2dlbjEgdG91Y2gx Ow0KKyAgICAgICB1OCB0b3VjaF9maW5nZXJzOw0KKyAgICAgICB1OCBmZWF0dXJlX2NvbmZpZzsN CisgICAgICAgdTggYXZnX3ByZXNzdXJlOyAgLyogYXZlcmFnZSBvZiBhbGwgdG91Y2hlZCBmaW5n ZXJzLiAqLw0KKyAgICAgICB1OCBnZXN0dXJlX3N0YXR1czsNCisgICAgICAgc3RydWN0IGN5YXBh X3RvdWNoX2dlbjEgdG91Y2hzW0NZQVBBX01BWF9UT1VDSFMtMV07DQorfTsNCisNCitzdHJ1Y3Qg Y3lhcGFfdG91Y2hfZ2VuMiB7DQorICAgICAgIHU4IHh5Ow0KKyAgICAgICB1OCB4Ow0KKyAgICAg ICB1OCB5Ow0KKyAgICAgICB1OCBpZDsNCit9Ow0KKw0KK3N0cnVjdCBjeWFwYV9nZXN0dXJlIHsN CisgICAgICAgdTggaWQ7DQorICAgICAgIHU4IHBhcmFtMTsNCisgICAgICAgdTggcGFyYW0yOw0K K307DQorDQorc3RydWN0IGN5YXBhX3JlZ19kYXRhX2dlbjIgew0KKyAgICAgICB1OCBkZXZpY2Vf c3RhdHVzOw0KKyAgICAgICB1OCByZWxhdGl2ZV9mbGFnczsNCisgICAgICAgczggZGVsdGF4Ow0K KyAgICAgICBzOCBkZWx0YXk7DQorICAgICAgIHU4IGF2Z19wcmVzc3VyZTsNCisgICAgICAgdTgg dG91Y2hfZmluZ2VyczsNCisgICAgICAgdTggcmVzZXJ2ZWQxOw0KKyAgICAgICB1OCByZXNlcnZl ZDI7DQorICAgICAgIHN0cnVjdCBjeWFwYV90b3VjaF9nZW4yIHRvdWNoc1tDWUFQQV9NQVhfVE9V Q0hTXTsNCisgICAgICAgdTggZ2VzdHVyZV9jb3VudDsNCisgICAgICAgc3RydWN0IGN5YXBhX2dl c3R1cmUgZ2VzdHVyZVtDWUFQQV9PTkVfVElNRV9HRVNUVVJFU107DQorfTsNCisNCit1bmlvbiBj eWFwYV9yZWdfZGF0YSB7DQorICAgICAgIHN0cnVjdCBjeWFwYV9yZWdfZGF0YV9nZW4xIGdlbjFf ZGF0YTsNCisgICAgICAgc3RydWN0IGN5YXBhX3JlZ19kYXRhX2dlbjIgZ2VuMl9kYXRhOw0KK307 DQorDQorc3RydWN0IGN5YXBhX3RvdWNoIHsNCisgICAgICAgaW50IHg7DQorICAgICAgIGludCB5 Ow0KKyAgICAgICBpbnQgaWQ7DQorfTsNCisNCitzdHJ1Y3QgY3lhcGFfcmVwb3J0X2RhdGEgew0K KyAgICAgICB1OCBidXR0b247DQorICAgICAgIHU4IHJlc2VydmVkMTsNCisgICAgICAgdTggcmVz ZXJ2ZWQyOw0KKyAgICAgICB1OCBhdmdfcHJlc3N1cmU7DQorICAgICAgIGludCByZWxfZGVsdGFY Ow0KKyAgICAgICBpbnQgcmVsX2RlbHRhWTsNCisNCisgICAgICAgaW50IHRvdWNoX2ZpbmdlcnM7 DQorICAgICAgIHN0cnVjdCBjeWFwYV90b3VjaCB0b3VjaHNbQ1lBUEFfTUFYX1RPVUNIU107DQor DQorICAgICAgIC8qIGluIGdlbjEgYW5kIGdlbjIsIG9ubHkgMSBnZXN0dXJlIG9uZSB0aW1lIHN1 cHBvcnRlZC4gKi8NCisgICAgICAgaW50IGdlc3R1cmVzX2NvdW50Ow0KKyAgICAgICBzdHJ1Y3Qg Y3lhcGFfZ2VzdHVyZSBnZXN0dXJlc1tDWUFQQV9PTkVfVElNRV9HRVNUVVJFU107DQorfTsNCisN CitzdHJ1Y3Qgc3BlZWRfcHJlZmVyZW5jZXMgew0KKyAgICAgICBpbnQgZGVmYXVsdF90aHJlc2hv bGQ7ICAgLyogc21hbGwgc2Nyb2xsIHNwZWVkIHRocmVzaG9sZC4gKi8NCisgICAgICAgaW50IG1p ZGRsZV90aHJlc2hvbGQ7DQorICAgICAgIGludCBmYXN0X3RocmVzaG9sZDsNCit9Ow0KKw0KK3N0 cnVjdCBtb3VzZV9iYWxsaXN0aWNfcGFyYW1zIHsNCisgICAgICAgLyoNCisgICAgICAgKiogcGxh dGZyb20gZGlzcGxheSBhc3BlY3QgcmF0aW8gYWRqdXN0bWVudCBwYXJhbWV0ZXJzLg0KKyAgICAg ICAqLw0KKyAgICAgICBpbnQgYWJzX3Jpc2VfeTsNCisgICAgICAgaW50IGFic19ydW5feTsNCisN CisgICAgICAgLyoNCisgICAgICAgKiogQUJTIEZJUiBmaWx0ZXIgYWxnb3JpdGhtIHBhcmFtZXRl cnMuDQorICAgICAgICovDQorICAgICAgIGludCBmaXJfYWJzX2VuYWJsZWQ7DQorDQorICAgICAg IGludCBmaXJfYWJzX2RlcHRoX21heDsNCisgICAgICAgaW50IGZpcl9hYnNfZGVwdGhfc2xld19j b3VudDsNCisNCisgICAgICAgLyogRWNjZW50cmljaXR5IExpbWl0cy4gKi8NCisgICAgICAgaW50 IGZpcl9nZW50bGVfY3VydmVfZWNjZW50cmljaXR5X21heDsNCisgICAgICAgaW50IGZpcl9tb2Rl cmF0ZV9jdXJ2ZV9lY2NlbnRyaWNpdHlfbWF4Ow0KKw0KKyAgICAgICBpbnQgZmlyX3Nsb3dfc3Bl ZWRfbGltaXQ7DQorICAgICAgIGludCBmaXJfbW9kZXJhdGVfc3BlZWRfbGltaXQ7DQorDQorICAg ICAgIGludCBmaXJfZ2VudGxlX2N1cnZlX2RlcHRoOw0KKyAgICAgICBpbnQgZmlyX21vZGVyYXRl X2N1cnZlX2RlcHRoOw0KKyAgICAgICBpbnQgZmlyX3Nsb3dfc3BlZWRfZGVwdGg7DQorICAgICAg IGludCBmaXJfbW9kZXJhdGVfc3BlZWRfZGVwdGg7DQorDQorICAgICAgIC8qDQorICAgICAgICoq IEFCUyBJSVIgZmlsdGVyIGFsZ29yaXRobSBwYXJhbWV0ZXJzLg0KKyAgICAgICAqLw0KKyAgICAg ICBpbnQgaWlyX2Fic19lbmFibGVkOw0KKyAgICAgICBpbnQgaWlyX251bWVyYXRvcjsNCisgICAg ICAgaW50IGlpcl9kZW5vbWluYXRvcjsNCisNCisgICAgICAgLyoNCisgICAgICAgKiogUkVMIG1v dGlvbiBzcGVlZC9hY2NlbGVyYXRpb24gY29udHJvbCBmaWx0ZXIgYWxnb3JpdGhtIHBhcmFtZXRl cnMuDQorICAgICAgICovDQorICAgICAgIGludCByZWxfc3Ryb2tlX2hpc3RvcnlfZGVwdGg7DQor DQorICAgICAgIGludCByZWxfbWVkaXVtX3NwZWVkX3RocmVzaG9sZDsNCisgICAgICAgaW50IHJl bF9mYXN0X3NwZWVkX3RocmVzaG9sZDsNCisgICAgICAgaW50IHJlbF9mbGlja19zcGVlZF90aHJl c2hvbGQ7DQorDQorICAgICAgIGludCByZWxfbW90aW9uX251bWVyYXRvcjsNCisgICAgICAgaW50 IHJlbF9tZWRpdW1fc3BlZWRfbnVtZXJhdG9yOw0KKyAgICAgICBpbnQgcmVsX21vdGlvbl9kZW5v bWluYXRvcjsNCisNCisgICAgICAgaW50IHJlbF9hY2NlbGVyYXRpb25fbnVtZXJhdG9yOw0KKyAg ICAgICBpbnQgcmVsX2FjY2VsZXJhdGlvbl9kZW5vbWluYXRvcjsNCisNCisgICAgICAgLyoNCisg ICAgICAgKiogUkVMIElJUiBmaWx0ZXIgYWxnb3JpdGhtIHBhcmFtZXRlcnMuDQorICAgICAgICov DQorICAgICAgIGludCByZWxfaWlyX2FjY2VsZXJhdGlvbl9udW1lcmF0b3I7DQorICAgICAgIGlu dCByZWxfaWlyX2FjY2VsZXJhdGlvbl9kZW5vbWluYXRvcjsNCisNCisgICAgICAgaW50IHJlbF9t YXhfYWNjZWxlcmF0aW9uX3NwZWVkOw0KK307DQorDQorc3RydWN0IGN5YXBhX3ByZWZlcmVuY2Vz IHsNCisgICAgICAgc3RydWN0IHNwZWVkX3ByZWZlcmVuY2VzIHZzY3JvbGw7DQorICAgICAgIHN0 cnVjdCBzcGVlZF9wcmVmZXJlbmNlcyBoc2Nyb2xsOw0KKyAgICAgICBzdHJ1Y3Qgc3BlZWRfcHJl ZmVyZW5jZXMgem9vbTsNCisNCisgICAgICAgc3RydWN0IG1vdXNlX2JhbGxpc3RpY19wYXJhbXMg bW91c2VfYmFsbGlzdGljOw0KK307DQorDQorZW51bSBmaXJfY3VydmVfbW9kZSB7DQorDQorICAg ICAgIEZJUl9DVVJWRV9TTE9XX1NQRUVEX0xJTkUgPSAwLA0KKyAgICAgICBGSVJfQ1VSVkVfTU9E RVJBVEVfU1BFRURfTElORSA9IDEsDQorICAgICAgIEZJUl9DVVJWRV9GQVNUX1NQRUVEX0xJTkUg PSAyLA0KKyAgICAgICBGSVJfQ1VSVkVfR0VOVExFX0NVUlZFICA9IDMsDQorICAgICAgIEZJUl9D VVJWRV9NT0RFUkFURV9DVVJWRSA9IDQsDQorICAgICAgIEZJUl9DVVJWRV9GVUxMX1NUT1AgPSA1 LA0KKyAgICAgICBGSVJfQ1VSVkVfQ0lSQ0xFID0gNiwNCisgICAgICAgRklSX0NVUlZFX1VOSU5J VElBTElaRUQgPSAweEZGRkZGRkZGDQorfTsNCisNCitlbnVtIHJlbF9zdHJva2Vfc3BlZWQgew0K KyAgICAgICBSRUxfU1RST0tFX1NQRUVEX1NMT1csDQorICAgICAgIFJFTF9TVFJPS0VfU1BFRURf TUVESVVNLA0KKyAgICAgICBSRUxfU1RST0tFX1NQRUVEX0ZBU1QsDQorICAgICAgIFJFTF9TVFJP S0VfU1BFRURfV0FSUA0KK307DQorDQorc3RydWN0IHBvaW50IHsNCisgICAgICAgaW50IHg7DQor ICAgICAgIGludCB5Ow0KK307DQorDQorLyogTUFYX0ZJUl9ERVBUSDoNCisqKiBBIG1hY3JvIGRl ZmluZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBGSVIgRklGTy4gKi8NCisjZGVmaW5l IE1BWF9GSVJfREVQVEggMjANCisvKiBTVFJPS0VfSElTVE9SWV9SRUNTOg0KKyoqIEEgbWFjcm8g d2hpY2ggZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgc3RvcmVkDQorKiogaW4gdGhlIHN0 cm9rZSBoaXN0b3J5IGJ1ZmZlci4gKi8NCisjZGVmaW5lIFJFTF9TVFJPS0VfSElTVE9SWV9SRUNT IDEwDQorc3RydWN0IGN5YXBhX2N1cnNvcl9maWx0ZXJzIHsNCisgICAgICAgZW51bSBmaXJfY3Vy dmVfbW9kZSBmaXJfY3VydmVfdHlwZTsNCisNCisgICAgICAgLyogVGhlIGN1cnNvciBGSVIgZmls dGVyIEZJRk8gZm9yIHRoZSBYIGZpbmdlciB2ZWN0b3IuICovDQorICAgICAgIGludCBmaXJfdmVj dG9yc194W01BWF9GSVJfREVQVEhdOw0KKyAgICAgICAvKiBUaGUgY3Vyc29yIEZJUiBmaWx0ZXIg RklGTyBmb3IgdGhlIFkgZmluZ2VyIHZlY3Rvci4gKi8NCisgICAgICAgaW50IGZpcl92ZWN0b3Jz X3lbTUFYX0ZJUl9ERVBUSF07DQorDQorICAgICAgIC8qIFRoZSByZW1uYW50IGZyb20gdGhlIHBy ZXZpb3VzIFggRklSIGF2ZXJhZ2luZyBjb21wdXRhdGlvbi4NCisgICAgICAgKiogUmUtc2NhbGVk IHdoZW4gRklSIGRlcHRoIGNoYW5nZXMuICovDQorICAgICAgIGludCBmaXJfeF9tb2Q7DQorICAg ICAgIC8qIFRoZSByZW1uYW50IGZyb20gdGhlIHByZXZpb3VzIFkgRklSIGF2ZXJhZ2luZyBjb21w dXRhdGlvbi4NCisgICAgICAgKiogUmUtc2NhbGVkIHdoZW4gRklSIGRlcHRoIGNoYW5nZXMuICov DQorICAgICAgIGludCBmaXJfeV9tb2Q7DQorDQorICAgICAgIC8qIEN1cnJlbnQgZGVwdGggb2Yg dGhlIGN1cnNvciBGSVIgZmlsdGVyJ3MgJ1gnIEZJRk8uICovDQorICAgICAgIGludCBmaXJfYWJz X2RlcHRoX3g7DQorICAgICAgIC8qIEN1cnJlbnQgZGVwdGggb2YgdGhlIGN1cnNvciBGSVIgZmls dGVyJ3MgJ1knIEZJRk8uICovDQorICAgICAgIGludCBmaXJfYWJzX2RlcHRoX3k7DQorDQorICAg ICAgIC8qIFByZXZpb3VzIGRlcHRoIG9mIHRoZSBjdXJzb3IgRklSIGZpbHRlcidzICdYJyBGSUZP Lg0KKyAgICAgICAqKiBVc2VkIHRvIHJlc2NhbGUgbW9kdWxhciByZXNpZHVlIHdoZW4gRklGTyBk ZXB0aCBpcyBkeW5hbWljYWxseQ0KKyAgICAgICAqKiBjaGFuZ2VkLiAqLw0KKyAgICAgICBpbnQg ZmlyX2Fic19wcmV2X2RlcHRoX3g7DQorDQorICAgICAgIC8qIFByZXZpb3VzIGRlcHRoIG9mIHRo ZSBjdXJzb3IgRklSIGZpbHRlcidzICdZJyBGSUZPLg0KKyAgICAgICAqKiBVc2VkIHRvIHJlc2Nh bGUgbW9kdWxhciByZXNpZHVlIHdoZW4gRklGTyBkZXB0aCBpcyBkeW5hbWljYWxseQ0KKyAgICAg ICAqLw0KKyAgICAgICBpbnQgZmlyX2Fic19wcmV2X2RlcHRoX3k7DQorDQorICAgICAgIC8qIENv dW50ZXIgdXNlZCB0byBpbXBsZW1lbnQgdGhlIGN1cnNvciBGSVIgWCB2ZWN0b3IgZmlsdGVyJ3Mg c2xldyByYXRlLg0KKyAgICAgICAqKiBUaGUgRklSIGZpbHRlcidzIHNsZXcgcmF0ZSBkZXRlcm1p bmVzIHRoZSBzcGVlZCBhdCB3aGljaCB0aGUgRklSDQorICAgICAgICoqIGRlcHRoIGluY3JlYXNl cyBvdmVyIHRpbWUsDQorICAgICAgICoqIGxpbWl0ZWQgYnkgY3Vyc29yIHNwZWVkIGFuZCBhcmMg c2V2ZXJpdHkuICovDQorICAgICAgIGludCBmaXJfYWJzX2RlcHRoX3NsZXdfY291bnRlcl94Ow0K Kw0KKyAgICAgICAvKiBDb3VudGVyIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBjdXJzb3IgRklSIFkg dmVjdG9yIGZpbHRlcidzIHNsZXcgcmF0ZS4NCisgICAgICAgKiogVGhlIEZJUiBmaWx0ZXIncyBz bGV3IHJhdGUgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYXQgd2hpY2ggdGhlIEZJUg0KKyAgICAgICAq KiBkZXB0aCBpbmNyZWFzZXMgb3ZlciB0aW1lLA0KKyAgICAgICAqKiBsaW1pdGVkIGJ5IGN1cnNv ciBzcGVlZCBhbmQgYXJjIHNldmVyaXR5LiAqLw0KKyAgICAgICBpbnQgZmlyX2Fic19kZXB0aF9z bGV3X2NvdW50ZXJfeTsNCisNCisgICAgICAgaW50IGZpcl9lZmZlY3RpdmVfbWF4X2RlcHRoOw0K Kw0KKyAgICAgICAvKiBUaGUgY3VycmVudCBzdGF0ZSBmb3Igb25lIGZpbmdlciBJSVIgZmlsdGVy aW5nLCBYIHBvc2l0aW9uLiAqLw0KKyAgICAgICBpbnQgaWlyX3g7DQorDQorICAgICAgIC8qIFRo ZSBjdXJyZW50IHN0YXRlIGZvciBvbmUgZmluZ2VyIElJUiBmaWx0ZXJpbmcsIFkgcG9zaXRpb24u ICovDQorICAgICAgIGludCBpaXJfeTsNCisNCisgICAgICAgLyogVGhlIG1vZHVsYXIgcmVtbmFu dCBvZiB0aGUgcHJldmlvdXMgSUlSIGRpdmlzaW9uIGZvcg0KKyAgICAgICAqKiBvbmUgZmluZ2Vy IFggcG9zaXRpb24gSUlSIGNhbGN1bGF0aW9ucy4gKi8NCisgICAgICAgaW50IGlpcl9tb2RfeDsN CisNCisgICAgICAgLyogVGhlIG1vZHVsYXIgcmVtbmFudCBvZiB0aGUgcHJldmlvdXMgSUlSIGRp dmlzaW9uIGZvcg0KKyAgICAgICAqKiBvbmUgZmluZ2VyIFkgcG9zaXRpb24gSUlSIGNhbGN1bGF0 aW9ucy4gKi8NCisgICAgICAgaW50IGlpcl9tb2RfeTsNCisNCisgICAgICAgc3RydWN0IHBvaW50 IHJlbF9zdHJva2VfaGlzdG9yeVtSRUxfU1RST0tFX0hJU1RPUllfUkVDU107DQorICAgICAgIGlu dCByZWxfc3Ryb2tlX2RlcHRoOw0KKyAgICAgICBpbnQgcmVsX3N0cm9rZV9zcGVlZDsNCisNCisg ICAgICAgLyogVGhlIHJ1bm5pbmcgbW9kdWxhciByZW1haW5kZXIgZnJvbSB0aGUgVmVsb2NpdHkg WCB2ZWN0b3IgY29tcHV0YXRpb24NCisgICAgICAgKiogdGhlIHB1cnBvc2Ugb2Yga2VlcGluZyB0 aGUgcmVzaWR1ZSBiZXR3ZWVuIHJlcG9ydCBwZXJpb2RzIGlzIHRvIGJvdGgNCisgICAgICAgKiog ZW5oYW5jZSBwcmVjaXNpb24gYW5kIHByZXZlbnQgdW5jb250cm9sbGVkICdsb3NpbmVzcycgb2Yg dmVsb2NpdHkuICovDQorICAgICAgIGludCByZWxfcmVzaWR1ZV94Ow0KKw0KKyAgICAgICAvKiBU aGUgcnVubmluZyBtb2R1bGFyIHJlbWFpbmRlciBmcm9tIHRoZSBWZWxvY2l0eSBZIHZlY3RvciBj b21wdXRhdGlvbg0KKyAgICAgICAqKiBUaGUgcHVycG9zZSBvZiBrZWVwaW5nIHRoZSByZXNpZHVl IGJldHdlZW4gcmVwb3J0IHBlcmlvZHMgaXMgdG8gYm90aA0KKyAgICAgICAqKiBlbmhhbmNlIHBy ZWNpc2lvbiBhbmQgcHJldmVudCB1bmNvbnRyb2xsZWQgJ2xvc2luZXNzJyBvZiB2ZWxvY2l0eS4g Ki8NCisgICAgICAgaW50IHJlbF9yZXNpZHVlX3k7DQorDQorICAgICAgIC8qIFRoZSBydW5uaW5n IG1vZHVsYXIgcmVtYWluZGVyIGZyb20gdGhlIGFjY2VsZXJhdGlvbiBYIHZlY3Rvcg0KKyAgICAg ICAqKiBjb21wdXRhdGlvbi4gKi8NCisgICAgICAgaW50IHJlbF9wcmV2X3Jlc2lkdWVfYWNjZWxf eDsNCisNCisgICAgICAgLyogVGhlIHJ1bm5pbmcgbW9kdWxhciByZW1haW5kZXIgZnJvbSB0aGUg YWNjZWxlcmF0aW9uIFkgdmVjdG9yDQorICAgICAgICoqIGNvbXB1dGF0aW9uLiAqLw0KKyAgICAg ICBpbnQgcmVsX3ByZXZfcmVzaWR1ZV9hY2NlbF95Ow0KKw0KKyAgICAgICAvKiBUaGUgcnVubmlu ZyBhY2NlbGVyYXRlZCBjdXJzb3IgbW90aW9uIElJUiBmaWx0ZXIncyBYIHZlY3Rvci4gKi8NCisg ICAgICAgaW50IHJlbF9wcmV2X2FjY2VsX2lpcl94Ow0KKw0KKyAgICAgICAvKiBUaGUgcnVubmlu ZyBhY2NlbGVyYXRlZCBjdXJzb3IgbW90aW9uIElJUiBmaWx0ZXIncyBYIHZlY3RvcidzIG1vZHVs YXINCisgICAgICAgKiogcmVzaWR1ZS4gUHJldmVudHMgbG9zcyAoc2xpcCkgd2hpY2ggd291bGQg b3RoZXJ3aXNlIHJlc3VsdCBmcm9tDQorICAgICAgICoqIHRoZSBJSVIgY29tcHV0YXRpb24uICov DQorICAgICAgIGludCByZWxfcHJldl9hY2NlbF9paXJfbW9kX3g7DQorDQorICAgICAgIC8qIFRo ZSBydW5uaW5nIGFjY2VsZXJhdGVkIGN1cnNvciBtb3Rpb24gSUlSIGZpbHRlcidzIFggdmVjdG9y LiAqLw0KKyAgICAgICBpbnQgcmVsX3ByZXZfYWNjZWxfaWlyX3k7DQorDQorICAgICAgIC8qIFRo ZSBydW5uaW5nIGFjY2VsZXJhdGVkIGN1cnNvciBtb3Rpb24gSUlSIGZpbHRlcidzIFggdmVjdG9y J3MgbW9kdWxhcg0KKyAgICAgICAqKiByZXNpZHVlLiBQcmV2ZW50cyBsb3NzIChzbGlwKSB3aGlj aCB3b3VsZCBvdGhlcndpc2UgcmVzdWx0IGZyb20NCisgICAgICAgKiogdGhlIElJUiBjb21wdXRh dGlvbi4gKi8NCisgICAgICAgaW50IHJlbF9wcmV2X2FjY2VsX2lpcl9tb2RfeTsNCit9Ow0KKw0K Ky8qIFRoZSBtYWluIGRldmljZSBzdHJ1Y3R1cmUgKi8NCitzdHJ1Y3QgY3lhcGFfaTJjIHsNCisg ICAgICAgc3RydWN0IGkyY19jbGllbnQgICAgICAgKmNsaWVudDsNCisgICAgICAgc3RydWN0IGlu cHV0X2RldiAgICAgICAgKmlucHV0Ow0KKyAgICAgICBzdHJ1Y3QgaW5wdXRfZGV2ICAgICAgICAq aW5wdXRfd2hlZWw7DQorICAgICAgIHN0cnVjdCBpbnB1dF9kZXYgICAgICAgICppbnB1dF9rYmQ7 DQorICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcms7DQorICAgICAgIHNwaW5sb2NrX3Qg bG9jazsNCisgICAgICAgaW50IG5vX2RhdGFfY291bnQ7DQorICAgICAgIGludCBzY2FuX21zOw0K KyAgICAgICBpbnQgcmVhZF9wZW5kaW5nOw0KKyAgICAgICBpbnQgb3Blbl9jb3VudDsNCisNCisg ICAgICAgaW50IGlycTsNCisgICAgICAgc3RydWN0IGN5YXBhX3BsYXRmb3JtX2RhdGEgKnBsYXRm b3JtX2RhdGE7DQorICAgICAgIHVuc2lnbmVkIHNob3J0IGRhdGFfYmFzZV9vZmZzZXQ7DQorICAg ICAgIHVuc2lnbmVkIHNob3J0IGNvbnRyb2xfYmFzZV9vZmZzZXQ7DQorICAgICAgIHVuc2lnbmVk IHNob3J0IGNvbW1hbmRfYmFzZV9vZmZzZXQ7DQorICAgICAgIHVuc2lnbmVkIHNob3J0IHF1ZXJ5 X2Jhc2Vfb2Zmc2V0Ow0KKw0KKyAgICAgICBzdHJ1Y3QgY3lhcGFfcHJlZmVyZW5jZXMgcHJlZmVy ZW5jZXM7DQorDQorICAgICAgIGludCB6b29taW5fZGVsdGE7DQorICAgICAgIGludCB6b29tb3V0 X2RlbHRhOw0KKyAgICAgICBpbnQgaHNjcm9sbF9sZWZ0Ow0KKyAgICAgICBpbnQgaHNjcm9sbF9y aWdodDsNCisgICAgICAgaW50IGhzY3JvbGxfY2FuY2VsZWQ7DQorICAgICAgIGludCBkZWx0YV9z Y3JvbGxfdXA7DQorICAgICAgIGludCBkZWx0YV9zY3JvbGxfZG93bjsNCisgICAgICAgaW50IGRl bHRhX3Njcm9sbF9sZWZ0Ow0KKyAgICAgICBpbnQgZGVsdGFfc2Nyb2xsX3JpZ2h0Ow0KKyAgICAg ICBpbnQgem9vbV90cmlnZ2VkOw0KKw0KKyAgICAgICBpbnQgYWJzX3g7DQorICAgICAgIGludCBh YnNfeTsNCisgICAgICAgaW50IHByZXZfYWJzX3g7DQorICAgICAgIGludCBwcmV2X2Fic195Ow0K KyAgICAgICBpbnQgcmVsX3g7DQorICAgICAgIGludCByZWxfeTsNCisgICAgICAgaW50IHByZXZf cmVsX3g7DQorICAgICAgIGludCBwcmV2X3JlbF95Ow0KKyAgICAgICBzdHJ1Y3QgY3lhcGFfY3Vy c29yX2ZpbHRlcnMgY3Vyc29yX2ZpbHRlcnM7DQorICAgICAgIHVuc2lnbmVkIGNoYXIgeHlfdG91 Y2hzX2luY2x1ZGVkX2JpdHM7DQorICAgICAgIHVuc2lnbmVkIGNoYXIgZ2VzdHVyZV8yRl9kcmFn X3N0YXJ0ZWQ7DQorDQorICAgICAgIHVuc2lnbmVkIGxvbmcgY3VyX2FjdGl2ZV9nZXN0dXJlc1tN QVhfRklOR0VSU107DQorICAgICAgIHVuc2lnbmVkIGxvbmcgcHJldl9hY3RpdmVfZ2VzdHVyZXNb TUFYX0ZJTkdFUlNdOw0KKw0KKyAgICAgICBpbnQgcHJldl90b3VjaF9maW5nZXJzOw0KKw0KKyAg ICAgICAvKiByZWFkIGZyb20gcXVlcnkgZGF0YSByZWdpb24uICovDQorICAgICAgIGNoYXIgcHJv ZHVjdF9pZFsxNl07DQorICAgICAgIHVuc2lnbmVkIGNoYXIgY2FwYWJpbGl0eVsxNF07DQorICAg ICAgIHVuc2lnbmVkIGNoYXIgZm1fbWFqX3ZlcjsgIC8qIGZpcm13YXJlIG1ham9yIHZlcnNpb24u ICovDQorICAgICAgIHVuc2lnbmVkIGNoYXIgZm1fbWluX3ZlcjsgIC8qIGZpcm13YXJlIG1pbm9y IHZlcnNpb24uICovDQorICAgICAgIHVuc2lnbmVkIGNoYXIgaHdfbWFqX3ZlcjsgIC8qIGhhcmR3 YXJlIG1ham9yIHZlcnNpb24uICovDQorICAgICAgIHVuc2lnbmVkIGNoYXIgaHdfbWluX3Zlcjsg IC8qIGhhcmR3YXJlIG1pbm9yIHZlcnNpb24uICovDQorICAgICAgIGludCBtYXhfYWJzb2x1dGlv bl94Ow0KKyAgICAgICBpbnQgbWF4X2Fic29sdXRpb25feTsNCisgICAgICAgaW50IHBoeXNpY2Fs X3NpemVfeDsNCisgICAgICAgaW50IHBoeXNpY2FsX3NpemVfeTsNCit9Ow0KKw0KKw0KKyNpZmRl ZiBEQkdfQ1lBUEFfUkVBRF9CTE9DS19EQVRBDQordm9pZCBjeWFwYV9wcmludF9kYXRhX2Jsb2Nr KGNvbnN0IGNoYXIgKmZ1bmMsIHU4IHJlZywgdTggbGVuZ3RoLCB2b2lkICpkYXRhKQ0KK3sNCisg ICAgICAgY2hhciBidWZbNTEyXTsNCisgICAgICAgdW5zaWduZWQgYnVmX2xlbiA9IHNpemVvZihi dWYpOw0KKyAgICAgICBjaGFyICpwID0gYnVmOw0KKyAgICAgICBpbnQgaTsNCisgICAgICAgaW50 IGw7DQorDQorICAgICAgIGwgPSBzbnByaW50ZihwLCBidWZfbGVuLCAicmVnIDB4JTA0eDogIiwg cmVnKTsNCisgICAgICAgYnVmX2xlbiAtPSBsOw0KKyAgICAgICBwICs9IGw7DQorICAgICAgIGZv ciAoaSA9IDA7IGkgPCBsZW5ndGggJiYgYnVmX2xlbjsgaSsrLCBwICs9IGwsIGJ1Zl9sZW4gLT0g bCkNCisgICAgICAgICAgICAgICBsID0gc25wcmludGYocCwgYnVmX2xlbiwgIiUwMnggIiwgKigo Y2hhciAqKWRhdGEgKyBpKSk7DQorICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBkYXRhIGJs b2NrIGxlbmd0aCA9ICVkXG4iLCBmdW5jLCBsZW5ndGgpOw0KKyAgICAgICBwcmludGsoS0VSTl9J TkZPICIlczogJXNcbiIsIGZ1bmMsIGJ1Zik7DQorfQ0KKw0KK3ZvaWQgY3lhcGFfcHJpbnRfcmVw b3J0X2RhdGEoY29uc3QgY2hhciAqZnVuYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGN5YXBhX3JlcG9ydF9kYXRhICpyZXBvcnRfZGF0YSkNCit7DQorICAgICAgIGlu dCBpOw0KKw0KKyAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tXG4iLCBmdW5jKTsNCisgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAi JXM6IHJlcG9ydF9kYXRhLmJ1dHRvbiA9IDB4JTAyeFxuIiwNCisgICAgICAgICAgICAgICAgICAg ICAgIGZ1bmMsIHJlcG9ydF9kYXRhLT5idXR0b24pOw0KKyAgICAgICBwcmludGsoS0VSTl9JTkZP ICIlczogcmVwb3J0X2RhdGEuYXZnX3ByZXNzdXJlID0gJWRcbiIsDQorICAgICAgICAgICAgICAg ICAgICAgICBmdW5jLCByZXBvcnRfZGF0YS0+YXZnX3ByZXNzdXJlKTsNCisgICAgICAgcHJpbnRr KEtFUk5fSU5GTyAiJXM6IHJlcG9ydF9kYXRhLnRvdWNoX2ZpbmdlcnMgPSAlZFxuIiwNCisgICAg ICAgICAgICAgICAgICAgICAgIGZ1bmMsIHJlcG9ydF9kYXRhLT50b3VjaF9maW5nZXJzKTsNCisg ICAgICAgZm9yIChpID0gMDsgaSA8IHJlcG9ydF9kYXRhLT50b3VjaF9maW5nZXJzOyBpKyspIHsN CisgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogcmVwb3J0X2RhdGEudG91Y2hz WyVkXS54ID0gJWRcbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMsIGks IHJlcG9ydF9kYXRhLT50b3VjaHNbaV0ueCk7DQorICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5f SU5GTyAiJXM6IHJlcG9ydF9kYXRhLnRvdWNoc1slZF0ueSA9ICVkXG4iLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmdW5jLCBpLCByZXBvcnRfZGF0YS0+dG91Y2hzW2ldLnkpOw0K KyAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiByZXBvcnRfZGF0YS50b3VjaHNb JWRdLmlkID0gJWRcbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMsIGks IHJlcG9ydF9kYXRhLT50b3VjaHNbaV0uaWQpOw0KKyAgICAgICB9DQorICAgICAgIHByaW50ayhL RVJOX0lORk8gIiVzOiByZXBvcnRfZGF0YS5nZXN0dXJlc19jb3VudCA9ICVkXG4iLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgZnVuYywgcmVwb3J0X2RhdGEtPmdlc3R1cmVzX2NvdW50KTsNCisg ICAgICAgZm9yIChpID0gMDsgaSA8IHJlcG9ydF9kYXRhLT5nZXN0dXJlc19jb3VudDsgaSsrKSB7 DQorICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlcG9ydF9kYXRhLmdlc3R1 cmVzWyVkXS5pZCA9IDB4JTAyeFxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMsIGks IHJlcG9ydF9kYXRhLT5nZXN0dXJlc1tpXS5pZCk7DQorICAgICAgICAgICAgICAgcHJpbnRrKEtF Uk5fSU5GTyAiJXM6IHJlcG9ydF9kYXRhLmdlc3R1cmVzWyVkXS5wYXJhbTEgPSAweCUwMnhcbiIs DQorICAgICAgICAgICAgICAgICAgICAgICBmdW5jLCBpLCByZXBvcnRfZGF0YS0+Z2VzdHVyZXNb aV0ucGFyYW0xKTsNCisgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogcmVwb3J0 X2RhdGEuZ2VzdHVyZXNbJWRdLnBhcmFtMiA9IDB4JTAyeFxuIiwNCisgICAgICAgICAgICAgICAg ICAgICAgIGZ1bmMsIGksIHJlcG9ydF9kYXRhLT5nZXN0dXJlc1tpXS5wYXJhbTIpOw0KKyAgICAg ICB9DQorICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tXG4iLCBmdW5jKTsNCit9DQorDQordm9pZCBjeWFwYV9wcmludF9wYWx0 Zm9ybV9kYXRhKGNvbnN0IGNoYXIgKmZ1bmMsDQorICAgICAgICAgICAgICAgc3RydWN0IGN5YXBh X3BsYXRmb3JtX2RhdGEgKmN5YXBhX2kyY19wbGF0Zm9ybV9kYXRhKQ0KK3sNCisgICAgICAgcHJp bnRrKEtFUk5fSU5GTyAiJXM6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tXG4iLA0KKyAgICAgICAgICAgICAgIGZ1bmMpOw0KKyAgICAgICBwcmludGsoS0VSTl9JTkZP ICIlczogY3lhcGFfaTJjX3BsYXRmb3JtX2RhdGEuZmxhZyA9IDB4JTA4eFxuIiwNCisgICAgICAg ICAgICAgICBmdW5jLCBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0YS0+ZmxhZyk7DQorICAgICAgIHBy aW50ayhLRVJOX0lORk8gIiVzOiBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0YS5nZW4gPSAweCUwMnhc biIsDQorICAgICAgICAgICAgICAgZnVuYywgY3lhcGFfaTJjX3BsYXRmb3JtX2RhdGEtPmdlbik7 DQorICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0YS5w b3dlcl9zdGF0ZSA9IDB4JTAyeFxuIiwNCisgICAgICAgICAgICAgICBmdW5jLCBjeWFwYV9pMmNf cGxhdGZvcm1fZGF0YS0+cG93ZXJfc3RhdGUpOw0KKyAgICAgICBwcmludGsoS0VSTl9JTkZPICIl czogY3lhcGFfaTJjX3BsYXRmb3JtX2RhdGEudXNlX2Fic29sdXRlX21vZGUgPSAlc1xuIiwNCisg ICAgICAgICAgICAgICBmdW5jLA0KKyAgICAgICAgICAgICAgIGN5YXBhX2kyY19wbGF0Zm9ybV9k YXRhLT51c2VfYWJzb2x1dGVfbW9kZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOw0KKyAgICAgICBwcmlu dGsoS0VSTl9JTkZPICIlczogY3lhcGFfaTJjX3BsYXRmb3JtX2RhdGEudXNlX3BvbGxpbmdfbW9k ZSA9ICVzXG4iLA0KKyAgICAgICAgICAgICAgIGZ1bmMsIGN5YXBhX2kyY19wbGF0Zm9ybV9kYXRh LT51c2VfcG9sbGluZ19tb2RlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gInRy dWUiIDogImZhbHNlIik7DQorICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBjeWFwYV9pMmNf cGxhdGZvcm1fZGF0YS4gXA0KKyAgICAgICAgICAgICAgIHBvbGxpbmdfaW50ZXJ2YWxfdGltZV9h Y3RpdmUgPSAlZFxuIiwNCisgICAgICAgICAgICAgICBmdW5jLCBjeWFwYV9pMmNfcGxhdGZvcm1f ZGF0YS0+cG9sbGluZ19pbnRlcnZhbF90aW1lX2FjdGl2ZSk7DQorICAgICAgIHByaW50ayhLRVJO X0lORk8gIiVzOiBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0YSBcDQorICAgICAgICAgICAgICAgLnBv bGxpbmdfaW50ZXJ2YWxfdGltZV9sb3dwb3dlciA9ICVkXG4iLA0KKyAgICAgICAgICAgICAgIGZ1 bmMsIGN5YXBhX2kyY19wbGF0Zm9ybV9kYXRhLT5wb2xsaW5nX2ludGVydmFsX3RpbWVfbG93cG93 ZXIpOw0KKyAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogY3lhcGFfaTJjX3BsYXRmb3JtX2Rh dGEgXA0KKyAgICAgICAgICAgICAgIC5hY3RpdmVfdG91Y2hfdGltZW91dCA9ICVkXG4iLA0KKyAg ICAgICAgICAgICAgIGZ1bmMsIGN5YXBhX2kyY19wbGF0Zm9ybV9kYXRhLT5hY3RpdmVfdG91Y2hf dGltZW91dCk7DQorICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBjeWFwYV9pMmNfcGxhdGZv cm1fZGF0YS5uYW1lID0gJXNcbiIsDQorICAgICAgICAgICAgICAgZnVuYywgY3lhcGFfaTJjX3Bs YXRmb3JtX2RhdGEtPm5hbWUpOw0KKyAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogY3lhcGFf aTJjX3BsYXRmb3JtX2RhdGEuaXJxX2dwaW8gPSAlZFxuIiwNCisgICAgICAgICAgICAgICBmdW5j LCBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0YS0+aXJxX2dwaW8pOw0KKyAgICAgICBwcmludGsoS0VS Tl9JTkZPICIlczogY3lhcGFfaTJjX3BsYXRmb3JtX2RhdGEucmVwb3J0X3JhdGUgPSAlZFxuIiwN CisgICAgICAgICAgICAgICBmdW5jLCBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0YS0+cmVwb3J0X3Jh dGUpOw0KKyAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogY3lhcGFfaTJjX3BsYXRmb3JtX2Rh dGEuaW5pdCA9ICVzJXBcbiIsDQorICAgICAgICAgICAgICAgZnVuYywgY3lhcGFfaTJjX3BsYXRm b3JtX2RhdGEtPmluaXQgPyAiMHgiIDogIiIsDQorICAgICAgICAgICAgICAgY3lhcGFfaTJjX3Bs YXRmb3JtX2RhdGEtPmluaXQpOw0KKyAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogY3lhcGFf aTJjX3BsYXRmb3JtX2RhdGEud2FrZXVwID0gJXMlcFxuIiwNCisgICAgICAgICAgICAgICBmdW5j LCBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0YS0+d2FrZXVwID8gIjB4IiA6ICIiLA0KKyAgICAgICAg ICAgICAgIGN5YXBhX2kyY19wbGF0Zm9ybV9kYXRhLT53YWtldXApOw0KKyAgICAgICBwcmludGso S0VSTl9JTkZPICIlczogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c biIsDQorICAgICAgICAgICAgICAgZnVuYyk7DQorfQ0KKyNlbHNlDQordm9pZCBjeWFwYV9wcmlu dF9kYXRhX2Jsb2NrKGNvbnN0IGNoYXIgKmZ1bmMsIHU4IHJlZywgdTggbGVuZ3RoLCB2b2lkICpk YXRhKSB7fQ0KK3ZvaWQgY3lhcGFfcHJpbnRfcmVwb3J0X2RhdGEoY29uc3QgY2hhciAqZnVuYywN CisgICAgICAgICAgICAgICBzdHJ1Y3QgY3lhcGFfcmVwb3J0X2RhdGEgKnJlcG9ydF9kYXRhKSB7 fQ0KK3ZvaWQgY3lhcGFfcHJpbnRfcGFsdGZvcm1fZGF0YShjb25zdCBjaGFyICpmdW5jLA0KKyAg ICAgICAgICAgICAgIHN0cnVjdCBjeWFwYV9wbGF0Zm9ybV9kYXRhICpjeWFwYV9pMmNfcGxhdGZv cm1fZGF0YSkge30NCisjZW5kaWYNCisNCisNCisvKg0KKyAqIERyaXZlcidzIGluaXRpYWwgZGVz aWduIG1ha2VzIG5vIHJhY2UgY29uZGl0aW9uIHBvc3NpYmxlIG9uIGkyYyBidXMsDQorICogc28g dGhlcmUgaXMgbm8gbmVlZCBpbiBhbnkgbG9ja2luZy4NCisgKiBLZWVwIGl0IGluIG1pbmQsIHdo aWxlIHBsYXlpbmcgd2l0aCB0aGUgY29kZS4NCisgKi8NCitzdGF0aWMgczMyIGN5YXBhX2kyY19y ZWdfcmVhZF9ieXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcpDQorew0KKyAg ICAgICBpbnQgcmV0Ow0KKw0KKyAgICAgICByZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEo Y2xpZW50LCAodTgpcmVnICYgMHhmZik7DQorDQorICAgICAgIHJldHVybiAoKHJldCA8IDApID8g MCA6IHJldCk7DQorfQ0KKw0KK3N0YXRpYyBzMzIgY3lhcGFfaTJjX3JlZ193cml0ZV9ieXRlKHN0 cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcsIHU4IHZhbCkNCit7DQorICAgICAgIGlu dCByZXQ7DQorDQorICAgICAgIHJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50 LCAodTgpcmVnICYgMHhmZiwgdmFsKTsNCisNCisgICAgICAgcmV0dXJuICgocmV0IDwgMCkgPyAw IDogcmV0KTsNCit9DQorDQorc3RhdGljIHMzMiBjeWFwYV9pMmNfcmVnX3JlYWRfYmxvY2soc3Ry dWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZywNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGxlbmd0aCwgdTggKnZhbHVlcykNCit7DQorICAgICAgIGludCByZXR2YWw7 DQorICAgICAgIHU4IGJ1ZlsxXTsNCisNCisgICAgICAgLyoNCisgICAgICAgKiogZGVwZW5kaW5n IG9uIFBTT0MgZWFzeSBJMkMgcmVhZCBvcGVyYXRpb25zLg0KKyAgICAgICAqKiBzdGVwMTogc2V0 IHJlYWQgcG9pbnRlciBvZiBlYXN5IEkyQy4NCisgICAgICAgKiogc3RlcDI6IHJlYWQgZGF0YS4N CisgICAgICAgKi8NCisgICAgICAgLyogc3RlcDE6IHNldCByZWFkIHBvaW50ZXIgb2YgZWFzeSBJ MkMuICovDQorICAgICAgIG1lbXNldChidWYsIDAsIDEpOw0KKyAgICAgICBidWZbMF0gPSAodTgp KCgodTgpcmVnKSAmIDB4ZmYpOw0KKyAgICAgICByZXR2YWwgPSBpMmNfbWFzdGVyX3NlbmQoY2xp ZW50LCBidWYsIDEpOw0KKyAgICAgICBpZiAocmV0dmFsIDwgMCkgew0KKyAgICAgICAgICAgICAg IERCR1BSSU5USygoIiVzOiBpMmNfbWFzdGVyX3NlbmQgZXJyb3IsIHJldHZhbD0lZFxuIiwNCisg ICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCByZXR2YWwpKTsNCisgICAgICAgICAgICAg ICByZXR1cm4gcmV0dmFsOw0KKyAgICAgICB9DQorDQorICAgICAgIC8qIHN0ZXAyOiByZWFkIGRh dGEuICovDQorICAgICAgIHJldHZhbCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIHZhbHVlcywg bGVuZ3RoKTsNCisgICAgICAgaWYgKHJldHZhbCA8IDApIHsNCisgICAgICAgICAgICAgICBEQkdQ UklOVEsoKCIlczogaTJjX21hc3Rlcl9yZWN2IGVycm9yLCByZXR2YWw9JWRcbiIsDQorICAgICAg ICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcmV0dmFsKSk7DQorICAgICAgICAgICAgICAgcmV0 dXJuIHJldHZhbDsNCisgICAgICAgfQ0KKw0KKyAgICAgICAvKiBkZWJ1ZyBtZXNzYWdlICovDQor ICAgICAgIGN5YXBhX3ByaW50X2RhdGFfYmxvY2soX19mdW5jX18sICh1OClyZWcsIHJldHZhbCwg dmFsdWVzKTsNCisNCisgICAgICAgaWYgKHJldHZhbCAhPSBsZW5ndGgpIHsNCisgICAgICAgICAg ICAgICBkZXZfd2FybigmY2xpZW50LT5kZXYsDQorICAgICAgICAgICAgICAgICAgICAgICAiJXM6 IHdhcm5pbmcgSTJDIGJsb2NrIHJlYWQgYnl0ZXMgXA0KKyAgICAgICAgICAgICAgICAgICAgICAg WyVkXSBub3QgZXF1YWwgdG8gcmVxdWlyZWQgYnl0ZXMgWyVkXS5cbiIsDQorICAgICAgICAgICAg ICAgICAgICAgICBfX2Z1bmNfXywgcmV0dmFsLCBsZW5ndGgpOw0KKyAgICAgICB9DQorDQorICAg ICAgIHJldHVybiByZXR2YWw7DQorfQ0KKw0KKyNpZiBDWUFQQV9VU0VfSTJDX1JFR19XUklURV9C TE9DSw0KK3N0YXRpYyBzMzIgY3lhcGFfaTJjX3JlZ193cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2Ns aWVudCAqY2xpZW50LCB1MTYgcmVnLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 OCBsZW5ndGgsIGNvbnN0IHU4ICp2YWx1ZXMpDQorDQorew0KKyAgICAgICBpbnQgcmV0dmFsOw0K KyAgICAgICBpbnQgaTsNCisgICAgICAgdTggYnVmWzI1Nl07DQorDQorICAgICAgIGlmICgobGVu Z3RoKzEpID4gMjU2KSB7DQorICAgICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IGludmFsaWQg d3JpdGUgZGF0YSBsZW5ndGgsIGxlbmd0aD0lZFxuIiwNCisgICAgICAgICAgICAgICAgICAgICAg IF9fZnVuY19fLCBsZW5ndGgpKTsNCisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCisg ICAgICAgfQ0KKw0KKyAgICAgICAvKg0KKyAgICAgICAqKiBkZXBlbmRpbmcgb24gUFNPQyBlYXN5 IEkyQyByZWFkIG9wZXJhdGlvbnMuDQorICAgICAgICoqIHN0ZXAxOiB3cml0ZSBkYXRhIHRvIGVh c3kgSTJDIGluIG9uZSBjb21tYW5kLg0KKyAgICAgICAqLw0KKyAgICAgICAvKiBzdGVwMTogd3Jp dGUgZGF0YSB0byBlYXN5IEkyQyBpbiBvbmUgY29tbWFuZC4gKi8NCisgICAgICAgbWVtc2V0KGJ1 ZiwgMCwgMjU2KTsNCisgICAgICAgYnVmWzBdID0gKHU4KSgoKHU4KXJlZykgJiAweGZmKTsNCisg ICAgICAgLyogbW92ZSBkYXRhIHNob3VkIGJlIHdyaXRlIHRvIEkyQyBzbGF2ZSBkZXZpY2UuICov DQorICAgICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykNCisgICAgICAgICAgICAgICBi dWZbaV0gPSB2YWx1ZXNbaS0xXTsNCisNCisgICAgICAgcmV0dmFsID0gaTJjX21hc3Rlcl9zZW5k KGNsaWVudCwgYnVmLCBsZW5ndGgrMSk7DQorICAgICAgIGlmIChyZXR2YWwgPCAwKSB7DQorICAg ICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IGkyY19tYXN0ZXJfc2VuZCBlcnJvciwgcmV0dmFs PSVkXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHJldHZhbCkpOw0KKyAg ICAgICAgICAgICAgIHJldHVybiByZXR2YWw7DQorICAgICAgIH0NCisNCisgICAgICAgaWYgKHJl dHZhbCAhPSAobGVuZ3RoKzEpKSB7DQorICAgICAgICAgICAgICAgZGV2X3dhcm4oJmNsaWVudC0+ ZGV2LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIiVzOiB3YXJuaW5nIEkyQyBibG9jayB3cml0 ZSBieXRlcyBcDQorICAgICAgICAgICAgICAgICAgICAgICBbJWRdIG5vdCBlcXVhbCB0byByZXF1 aXJlZCBieXRlcyBbJWRdLlxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBy ZXR2YWwsIGxlbmd0aCk7DQorICAgICAgIH0NCisNCisgICAgICAgcmV0dXJuIHJldHZhbDsNCit9 DQorI2VuZGlmDQorDQorI2RlZmluZSBSRUdfT0ZGU0VUX0RBVEFfQkFTRSAgICAgMHgwMDAwDQor I2RlZmluZSBSRUdfT0ZGU0VUX0NPTlRST0xfQkFTRSAgMHgwMDI5DQorI2RlZmluZSBSRUdfT0ZG U0VUX0NPTU1BTkRfQkFTRSAgMHgwMDQ5DQorI2RlZmluZSBSRUdfT0ZGU0VUX1FVRVJZX0JBU0Ug ICAweDAwNEINCitzdGF0aWMgdm9pZCBjeWFwYV9nZXRfcmVnX29mZnNldChzdHJ1Y3QgY3lhcGFf aTJjICp0b3VjaCkNCit7DQorICAgICAgIHRvdWNoLT5kYXRhX2Jhc2Vfb2Zmc2V0ID0gUkVHX09G RlNFVF9EQVRBX0JBU0U7DQorICAgICAgIHRvdWNoLT5jb250cm9sX2Jhc2Vfb2Zmc2V0ID0gUkVH X09GRlNFVF9DT05UUk9MX0JBU0U7DQorICAgICAgIHRvdWNoLT5jb21tYW5kX2Jhc2Vfb2Zmc2V0 ID0gUkVHX09GRlNFVF9DT01NQU5EX0JBU0U7DQorICAgICAgIHRvdWNoLT5xdWVyeV9iYXNlX29m ZnNldCA9IFJFR19PRkZTRVRfUVVFUllfQkFTRTsNCisNCisgICAgICAgLyogdGhpcyBmdW5jdGlv biB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgZGVwZW5kaW5nIGZpcm13YXJlIHN1cHBvcnQuICovDQor fQ0KKw0KK3N0YXRpYyB2b2lkIGN5YXBhX2dldF9xdWVyeV9kYXRhKHN0cnVjdCBjeWFwYV9pMmMg KnRvdWNoKQ0KK3sNCisgICAgICAgdW5zaWduZWQgY2hhciBxdWVyeV9kYXRhWzQwXTsNCisgICAg ICAgaW50IHJldF9yZWFkX3NpemUgPSAwOw0KKyAgICAgICBpbnQgaTsNCisNCisgICAgICAgLyog cXVlcnkgZGF0YSBoYXMgYmVlbiBzdXBwb3J0ZWQgaW4gR0VOMSBwcm90b2NvbC4qLw0KKyAgICAg ICBpZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPmdlbiA9PSBDWUFQQV9HRU4yKSB7DQorICAgICAg ICAgICAgICAgbWVtc2V0KHF1ZXJ5X2RhdGEsIDAsIDQwKTsNCisgICAgICAgICAgICAgICByZXRf cmVhZF9zaXplID0gY3lhcGFfaTJjX3JlZ19yZWFkX2Jsb2NrKHRvdWNoLT5jbGllbnQsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG91Y2gtPnF1ZXJ5X2Jhc2Vfb2Zm c2V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4LA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1OCAqKSZxdWVyeV9kYXRhKTsNCisN CisgICAgICAgICAgICAgICB0b3VjaC0+cHJvZHVjdF9pZFswXSA9IHF1ZXJ5X2RhdGFbMF07DQor ICAgICAgICAgICAgICAgdG91Y2gtPnByb2R1Y3RfaWRbMV0gPSBxdWVyeV9kYXRhWzFdOw0KKyAg ICAgICAgICAgICAgIHRvdWNoLT5wcm9kdWN0X2lkWzJdID0gcXVlcnlfZGF0YVsyXTsNCisgICAg ICAgICAgICAgICB0b3VjaC0+cHJvZHVjdF9pZFszXSA9IHF1ZXJ5X2RhdGFbM107DQorICAgICAg ICAgICAgICAgdG91Y2gtPnByb2R1Y3RfaWRbNF0gPSBxdWVyeV9kYXRhWzRdOw0KKyAgICAgICAg ICAgICAgIHRvdWNoLT5wcm9kdWN0X2lkWzVdID0gJy0nOw0KKyAgICAgICAgICAgICAgIHRvdWNo LT5wcm9kdWN0X2lkWzZdID0gcXVlcnlfZGF0YVs1XTsNCisgICAgICAgICAgICAgICB0b3VjaC0+ cHJvZHVjdF9pZFs3XSA9IHF1ZXJ5X2RhdGFbNl07DQorICAgICAgICAgICAgICAgdG91Y2gtPnBy b2R1Y3RfaWRbOF0gPSBxdWVyeV9kYXRhWzddOw0KKyAgICAgICAgICAgICAgIHRvdWNoLT5wcm9k dWN0X2lkWzldID0gcXVlcnlfZGF0YVs4XTsNCisgICAgICAgICAgICAgICB0b3VjaC0+cHJvZHVj dF9pZFsxMF0gPSBxdWVyeV9kYXRhWzldOw0KKyAgICAgICAgICAgICAgIHRvdWNoLT5wcm9kdWN0 X2lkWzExXSA9IHF1ZXJ5X2RhdGFbMTBdOw0KKyAgICAgICAgICAgICAgIHRvdWNoLT5wcm9kdWN0 X2lkWzEyXSA9ICctJzsNCisgICAgICAgICAgICAgICB0b3VjaC0+cHJvZHVjdF9pZFsxM10gPSBx dWVyeV9kYXRhWzExXTsNCisgICAgICAgICAgICAgICB0b3VjaC0+cHJvZHVjdF9pZFsxNF0gPSBx dWVyeV9kYXRhWzEyXTsNCisgICAgICAgICAgICAgICB0b3VjaC0+cHJvZHVjdF9pZFsxNV0gPSAn XDAnOw0KKw0KKyAgICAgICAgICAgICAgIHRvdWNoLT5mbV9tYWpfdmVyID0gcXVlcnlfZGF0YVsx NV07DQorICAgICAgICAgICAgICAgdG91Y2gtPmZtX21pbl92ZXIgPSBxdWVyeV9kYXRhWzE2XTsN CisgICAgICAgICAgICAgICB0b3VjaC0+aHdfbWFqX3ZlciA9IHF1ZXJ5X2RhdGFbMTddOw0KKyAg ICAgICAgICAgICAgIHRvdWNoLT5od19taW5fdmVyID0gcXVlcnlfZGF0YVsxOF07DQorDQorICAg ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEzOyBpKyspDQorICAgICAgICAgICAgICAgICAg ICAgICB0b3VjaC0+Y2FwYWJpbGl0eVtpXSA9IHF1ZXJ5X2RhdGFbMTkraV07DQorDQorICAgICAg ICAgICAgICAgdG91Y2gtPm1heF9hYnNvbHV0aW9uX3ggPQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgKCgocXVlcnlfZGF0YVszMl0gJiAweEYwKSA8PCA0KSB8IHF1ZXJ5X2RhdGFbMzNdKTsNCisg ICAgICAgICAgICAgICB0b3VjaC0+bWF4X2Fic29sdXRpb25feSA9DQorICAgICAgICAgICAgICAg ICAgICAgICAoKChxdWVyeV9kYXRhWzMyXSAmIDB4MEYpIDw8IDgpIHwgcXVlcnlfZGF0YVszNF0p Ow0KKyAgICAgICAgICAgICAgIGlmICghdG91Y2gtPm1heF9hYnNvbHV0aW9uX3ggfHwgIXRvdWNo LT5tYXhfYWJzb2x1dGlvbl95KSB7DQorICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNt cCh0b3VjaC0+cHJvZHVjdF9pZCwgIkNZVFJBLTAxNDAwMS0wMCIpKSB7DQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRvdWNoLT5tYXhfYWJzb2x1dGlvbl94ID0gMTYwMDsNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG91Y2gtPm1heF9hYnNvbHV0aW9uX3kgPSA5MDA7 DQorICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0b3VjaC0+bWF4X2Fic29sdXRpb25feCA9IDEyMDA7DQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRvdWNoLT5tYXhfYWJzb2x1dGlvbl95ID0gNjAwOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAg ICB0b3VjaC0+cGh5c2ljYWxfc2l6ZV94ID0NCisgICAgICAgICAgICAgICAgICAgICAgICgoKHF1 ZXJ5X2RhdGFbMzVdICYgMHhGMCkgPDwgNCkgfCBxdWVyeV9kYXRhWzM2XSk7DQorICAgICAgICAg ICAgICAgdG91Y2gtPnBoeXNpY2FsX3NpemVfeSA9DQorICAgICAgICAgICAgICAgICAgICAgICAo KChxdWVyeV9kYXRhWzM1XSAmIDB4MEYpIDw8IDgpIHwgcXVlcnlfZGF0YVszN10pOw0KKyAgICAg ICAgICAgICAgIGlmICghdG91Y2gtPnBoeXNpY2FsX3NpemVfeCB8fCAhdG91Y2gtPnBoeXNpY2Fs X3NpemVfeSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgdG91Y2gtPnBoeXNpY2FsX3NpemVf eCA9IDEwNTsNCisgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5waHlzaWNhbF9zaXplX3kg PSA2MDsNCisgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5f SU5GTyAiQ3lwcmVzcyBUcmFja3BhZCBJbmZvcm1hdGlvbjpcbiIpOw0KKyAgICAgICAgICAgICAg IHByaW50ayhLRVJOX0lORk8gIlx0XHRcdFByb2R1Y3Rpb24gSUQ6ICAlc1xuIiwNCisgICAgICAg ICAgICAgICAgICAgICAgIHRvdWNoLT5wcm9kdWN0X2lkKTsNCisgICAgICAgICAgICAgICBwcmlu dGsoS0VSTl9JTkZPICJcdFx0XHRGaXJtd2FyZSB2ZXJzaW9uOiAgJWQuJWRcbiIsDQorICAgICAg ICAgICAgICAgICAgICAgICB0b3VjaC0+Zm1fbWFqX3ZlciwgdG91Y2gtPmZtX21pbl92ZXIpOw0K KyAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIlx0XHRcdEhhcmR3YXJlIHZlcnNpb246 ICAlZC4lZFxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5od19tYWpfdmVyLCB0 b3VjaC0+aHdfbWluX3Zlcik7DQorICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiXHRc dFx0RHJpdmVyIFZlcnNpb246ICAlZC4lZC4lZFxuIiwNCisgICAgICAgICAgICAgICAgICAgICAg IENZQVBBX01BSk9SX1ZFUiwgQ1lBUEFfTUlOT1JfVkVSLCBDWUFQQV9SRVZJU0lPSU5fVkVSKTsN CisgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJcdFx0XHRSZXNvbHV0aW9uIFgsWTog ICAlZCwlZFxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5tYXhfYWJzb2x1dGlv bl94LCB0b3VjaC0+bWF4X2Fic29sdXRpb25feSk7DQorICAgICAgICAgICAgICAgcHJpbnRrKEtF Uk5fSU5GTyAiXHRcdFx0UGh5c2ljYWwgU2l6ZSBYLFk6ICAgJWQsJWRcbiIsDQorICAgICAgICAg ICAgICAgICAgICAgICB0b3VjaC0+cGh5c2ljYWxfc2l6ZV94LCB0b3VjaC0+cGh5c2ljYWxfc2l6 ZV95KTsNCisgICAgICAgfQ0KK30NCisNCitzdGF0aWMgaW50IGN5YXBhX2kyY19yZWNvbmZpZyhz dHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCkNCit7DQorICAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpj bGllbnQgPSB0b3VjaC0+Y2xpZW50Ow0KKyAgICAgICBpbnQgcmVndmFsID0gMDsNCisgICAgICAg aW50IHJldHZhbCA9IDA7DQorDQorICAgICAgIGlmICh0b3VjaC0+cGxhdGZvcm1fZGF0YS0+Z2Vu ID09IENZQVBBX0dFTjEpIHsNCisgICAgICAgICAgICAgICAvKiB0cmFja3BhZCBnZW4xIGZpcm13 YXJlLiAqLw0KKyAgICAgICAgICAgICAgIERCR1BSSU5USygoIiVzOiB0cmFja3BhZCBzdXBwb3J0 IGdlbjEgZmlybXdhcmUuXG4iLCBfX2Z1bmNfXykpOw0KKw0KKyAgICAgICAgICAgICAgIHJlZ3Zh bCA9IGN5YXBhX2kyY19yZWdfcmVhZF9ieXRlKGNsaWVudCwgREVWX1BPV0VSX1JFRyk7DQorICAg ICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IHJlYWQgdHJhY2twYWQgaW50ZXJydXB0IGJpdCA9 IDB4JTAyeFxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1 bmNfXywgcmVndmFsJklOVEVSUlVQVF9NT0RFX01BU0spKTsNCisNCisgICAgICAgICAgICAgICBp ZiAoKHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT51c2VfcG9sbGluZ19tb2RlID09IHRydWUpDQorICAg ICAgICAgICAgICAgICAgICAgICAmJiAoKHJlZ3ZhbCAmIElOVEVSUlVQVF9NT0RFX01BU0spDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IElOVEVSUlVQVF9NT0RFX01BU0spKSB7 DQorICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNldCB0cmFja3BhZCB0byBwb2xsaW5nIG1v ZGUuICovDQorICAgICAgICAgICAgICAgICAgICAgICByZWd2YWwgJj0gKH5JTlRFUlJVUFRfTU9E RV9NQVNLKTsNCisgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGN5YXBhX2kyY19yZWdf d3JpdGVfYnl0ZShjbGllbnQsIERFVl9QT1dFUl9SRUcsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodTgpKHJlZ3ZhbCAmIDB4ZmYpKTsNCisgICAgICAg ICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgREJHUFJJTlRLKCgiJXM6IHNldCB0byBwb2xsaWluZyBtb2RlIGZhaWxlZCxcDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsPSVkLlxuIiwgX19mdW5j X18sIHJldHZhbCkpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKg0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaG91Z2ggZmlybXdhcmUgaGFzIHNldCBpbnRl cnJ1cHQgbW9kZSBiaXQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJ1dCBz aW5jZSBwbGF0ZnJvbSBkb2Vzbid0IHN1cHBvcnQNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogaW50ZXJydXB0IG1vZGUsIHNvIGFsc28gdXNlIHBvbGxpbmcgbW9kZSBoZXJlDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRvIG5vdGhpbmcuDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT51c2VfcG9sbGlu Z19tb2RlID09IGZhbHNlKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgJiYgKChyZWd2YWwgJiBJ TlRFUlJVUFRfTU9ERV9NQVNLKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBJ TlRFUlJVUFRfTU9ERV9NQVNLKSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgLyogcmVzZXQg dHJhY2twYWQgdG8gaW50ZXJydXB0IG1vZGUuICovDQorICAgICAgICAgICAgICAgICAgICAgICBy ZWd2YWwgfD0gSU5URVJSVVBUX01PREVfTUFTSzsNCisgICAgICAgICAgICAgICAgICAgICAgIHJl dHZhbCA9IGN5YXBhX2kyY19yZWdfd3JpdGVfYnl0ZShjbGllbnQsIERFVl9QT1dFUl9SRUcsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTgpKHJlZ3Zh bCAmIDB4ZmYpKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpIHsNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IHNldCB0byBpbnRlcnJ1 cCBtb2RlIGZhaWxlZCwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHZhbD0lZC5cbiIsIF9fZnVuY19fLCByZXR2YWwpKTsNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9wb2xsaW5nX21vZGUgPSB0cnVl Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgIH0NCisNCisgICAg ICAgICAgICAgICBEQkdQUklOVEsoKCIlczogdHJhY2twYWQgaW50ZXJydXB0IGJpdCA9IDB4JTAy eFxuIiwgX19mdW5jX18sDQorICAgICAgICAgICAgICAgICAgICAgICAodTgpY3lhcGFfaTJjX3Jl Z19yZWFkX2J5dGUoY2xpZW50LCBERVZfUE9XRVJfUkVHKSkpOw0KKyAgICAgICB9IGVsc2Ugew0K KyAgICAgICAgICAgICAgIC8qIHRyYWNrcGFkIGdlbjIgZmlybXdhcmUuIGRlZmF1bHQgaXMgaW50 ZXJydXB0IG1vZGUuICovDQorICAgICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IHRyYWNrcGFk IHN1cHBvcnQgZ2VuMiBmaXJtd2FyZS5cbiIsIF9fZnVuY19fKSk7DQorDQorICAgICAgICAgICAg ICAgY3lhcGFfZ2V0X3JlZ19vZmZzZXQodG91Y2gpOw0KKyAgICAgICAgICAgICAgIGN5YXBhX2dl dF9xdWVyeV9kYXRhKHRvdWNoKTsNCisgICAgICAgfQ0KKw0KKyAgICAgICBEQkdQUklOVEsoKCIl czogdXNlICVzIG1vZGUuXG4iLCBfX2Z1bmNfXywNCisgICAgICAgICAgICAgICAgICAgICAgICgo dG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9wb2xsaW5nX21vZGUgPT0gdHJ1ZSkNCisgICAgICAg ICAgICAgICAgICAgICAgID8gInBvbGxpbmciIDogImludGVycnVwdCIpKSk7DQorICAgICAgIHJl dHVybiByZXR2YWw7DQorfQ0KKw0KK3N0YXRpYyBpbnQgY3lhcGFfaTJjX3Jlc2V0X2NvbmZpZyhz dHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCkNCit7DQorICAgICAgIGludCByZXQgPSAwOw0KKw0KKyAg ICAgICBEQkdQUklOVEsoKCIlczogLi4uXG4iLCBfX2Z1bmNfXykpOw0KKw0KKyAgICAgICByZXR1 cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IGN5YXBhX3ZlcmlmeV9kYXRhX2RldmljZShzdHJ1 Y3QgY3lhcGFfaTJjICp0b3VjaCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5p b24gY3lhcGFfcmVnX2RhdGEgKnJlZ19kYXRhKQ0KK3sNCisgICAgICAgc3RydWN0IGN5YXBhX3Jl Z19kYXRhX2dlbjEgKmRhdGFfZ2VuMSA9IE5VTEw7DQorICAgICAgIHN0cnVjdCBjeWFwYV9yZWdf ZGF0YV9nZW4yICpkYXRhX2dlbjIgPSBOVUxMOw0KKw0KKyAgICAgICBpZiAodG91Y2gtPnBsYXRm b3JtX2RhdGEtPmdlbiA9PSBDWUFQQV9HRU4xKSB7DQorICAgICAgICAgICAgICAgZGF0YV9nZW4x ID0gJnJlZ19kYXRhLT5nZW4xX2RhdGE7DQorICAgICAgICAgICAgICAgaWYgKChkYXRhX2dlbjEt PnRhcF9tb3Rpb24gJiAweDA4KSAhPSAweDA4KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAv KiBpbnZhbGlkIGRhdGEuICovDQorICAgICAgICAgICAgICAgICAgICAgICBEQkdQUklOVEsoKCIl czogaW52YWxpZCBkYXRhIHJlZyBhZGRyZXNzIDB4MDAsICBcDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJpdDMgaXMgbm90IHNldC5cbiIsIF9fZnVuY19fKSk7DQorICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCisgICAgICAgICAgICAgICB9DQorICAgICAg IH0gZWxzZSB7DQorICAgICAgICAgICAgICAgZGF0YV9nZW4yID0gJnJlZ19kYXRhLT5nZW4yX2Rh dGE7DQorICAgICAgICAgICAgICAgaWYgKChkYXRhX2dlbjItPmRldmljZV9zdGF0dXMgJiAweDgw KSAhPSAweDgwKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnZhbGlkIGRhdGEuICov DQorICAgICAgICAgICAgICAgICAgICAgICBEQkdQUklOVEsoKCIlczogaW52YWxpZCBkYXRhIHJl ZyBhZGRyZXNzIDB4MDAsICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdDcg aXMgbm90IHNldC5cbiIsIF9fZnVuY19fKSk7DQorICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLUVJTlZBTDsNCisgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgaWYgKChk YXRhX2dlbjItPmRldmljZV9zdGF0dXMgJiAweDAzKSAhPSBDWUFQQV9ERVZfTk9STkFMKSB7DQor ICAgICAgICAgICAgICAgICAgICAgICBEQkdQUklOVEsoKCIlczogaW52YWxpZCBkZXZpY2Ugc3Rh dHVzID0gMHglMDJ4LCAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0IGZv ciBkZXZpY2UgcmVhZHkuXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1 bmNfXywgKGRhdGFfZ2VuMi0+ZGV2aWNlX3N0YXR1cyAmIDB4MDMpKSk7DQorICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gLUVCVVNZOw0KKyAgICAgICAgICAgICAgIH0NCisgICAgICAgfQ0K Kw0KKyAgICAgICByZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIGN5YXBhX2Nh bGN1bGF0ZV9hYnNfeHkoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN5YXBhX3JlcG9ydF9kYXRhICpyZXBvcnRf ZGF0YSkNCit7DQorICAgICAgIGludCBpOw0KKyAgICAgICBpbnQgc3VtX3ggPSAwLCBzdW1feSA9 IDA7DQorDQorICAgICAgIC8qIGludmFsaWQgaW5wdXQgZGF0YS4gKi8NCisgICAgICAgaWYgKCF0 b3VjaC0+eHlfdG91Y2hzX2luY2x1ZGVkX2JpdHMgfHwgIXJlcG9ydF9kYXRhLT50b3VjaF9maW5n ZXJzKSB7DQorICAgICAgICAgICAgICAgdG91Y2gtPnByZXZfYWJzX3ggPSAtMTsNCisgICAgICAg ICAgICAgICB0b3VjaC0+cHJldl9hYnNfeSA9IC0xOw0KKyAgICAgICAgICAgICAgIHJldHVybjsN CisgICAgICAgfQ0KKw0KKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgQ1lBUEFfTUFYX1RPVUNIUzsg aSsrKSB7DQorICAgICAgICAgICAgICAgaWYgKHRvdWNoLT54eV90b3VjaHNfaW5jbHVkZWRfYml0 cyAmICgweDAxIDw8IGkpKSB7DQorICAgICAgICAgICAgICAgICAgICAgICBzdW1feCArPSByZXBv cnRfZGF0YS0+dG91Y2hzW2ldLng7DQorICAgICAgICAgICAgICAgICAgICAgICBzdW1feSArPSBy ZXBvcnRfZGF0YS0+dG91Y2hzW2ldLnk7DQorICAgICAgICAgICAgICAgfQ0KKyAgICAgICB9DQor DQorICAgICAgIHRvdWNoLT5hYnNfeCA9IHN1bV94IC8gcmVwb3J0X2RhdGEtPnRvdWNoX2Zpbmdl cnM7DQorICAgICAgIHRvdWNoLT5hYnNfeSA9IHN1bV95IC8gcmVwb3J0X2RhdGEtPnRvdWNoX2Zp bmdlcnM7DQorICAgICAgIC8qIHgsIHkgZGlyZWN0b3J5IG9mIEN5cHJlc3MgdHJhY2twYWQgaXMg aW4gbmVnYXRpdmUgZGlyZWN0aW9uIG9mIHNjcmVlbg0KKyAgICAgICAqKiBmb3Igc29tZSBwbGF0 Zm9ybSBpdCBtYXliZSBkaWZmZXJlbnQuICovDQorICAgICAgIC8qKioNCisgICAgICAgdG91Y2gt PmFic194ID0gdG91Y2gtPnBsYXRmb3JtX2RhdGEtPm1heF90b3VjaHBhZF94IC0gdG91Y2gtPmFi c194Ow0KKyAgICAgICB0b3VjaC0+YWJzX3kgPSB0b3VjaC0+cGxhdGZvcm1fZGF0YS0+bWF4X3Rv dWNocGFkX3kgLSB0b3VjaC0+YWJzX3k7DQorICAgICAgICoqKi8NCisNCisgICAgICAgLyogdXNl IHNpbXBsZSBmaWx0ciB0byBtYWtlIGN1cnNvciBtb3ZlIHNtb290aGVyLiAqLw0KKyAgICAgICBp ZiAodG91Y2gtPnByZXZfYWJzX3ggIT0gLTEpIHsNCisgICAgICAgICAgICAgICB0b3VjaC0+YWJz X3ggPSAodG91Y2gtPmFic194ICogMyArIHRvdWNoLT5wcmV2X2Fic194KSA+PiAyOw0KKyAgICAg ICAgICAgICAgIHRvdWNoLT5hYnNfeSA9ICh0b3VjaC0+YWJzX3kgKiAzICsgdG91Y2gtPnByZXZf YWJzX3kpID4+IDI7DQorICAgICAgIH0NCisNCisgICAgICAgdG91Y2gtPnByZXZfYWJzX3ggPSB0 b3VjaC0+YWJzX3g7DQorICAgICAgIHRvdWNoLT5wcmV2X2Fic195ID0gdG91Y2gtPmFic195Ow0K K30NCisNCitzdGF0aWMgaW5saW5lIGludCBjeWFwYV9zcXJ0KGludCBkZWx0YV94LCBpbnQgZGVs dGFfeSkNCit7DQorICAgICAgIGludCBYazAgPSAwOw0KKyAgICAgICBpbnQgWGsxOw0KKyAgICAg ICBpbnQgbXVsdGk7DQorDQorICAgICAgIG11bHRpID0gWGsxID0gZGVsdGFfeCpkZWx0YV94ICsg ZGVsdGFfeSpkZWx0YV95Ow0KKw0KKyAgICAgICB3aGlsZSAoYWJzKFhrMCAtIFhrMSkgPiAxKSB7 DQorICAgICAgICAgICAgICAgWGswID0gWGsxOw0KKyAgICAgICAgICAgICAgIFhrMSA9IChYazAg KyAobXVsdGkgLyBYazApKSAvIDI7DQorICAgICAgIH0NCisNCisgICAgICAgcmV0dXJuIFhrMTsN Cit9DQorDQorc3RhdGljIHZvaWQgY3lhcGFfcGFyc2VfZ2VuMV9kYXRhKHN0cnVjdCBjeWFwYV9p MmMgKnRvdWNoLA0KKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN5YXBhX3JlZ19kYXRh X2dlbjEgKnJlZ19kYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN5YXBhX3Jl cG9ydF9kYXRhICpyZXBvcnRfZGF0YSkNCit7DQorICAgICAgIGludCBpOw0KKyAgICAgICBpbnQg Z2VzdHVyZV9yZXBvcnRfaW5kZXggPSAwOw0KKyAgICAgICBpbnQgZ2VzdHVyZV9maW5nZXJzID0g MDsNCisgICAgICAgaW50IGdlc3R1cmVfaW5kZXggPSAwOw0KKw0KKyAgICAgICAvKiBwYXJzZSBn ZXN0dXJlcyBhbmQgYnV0dG9uIGRhdGEgKi8NCisgICAgICAgcmVwb3J0X2RhdGEtPmJ1dHRvbiA9 IHJlZ19kYXRhLT50YXBfbW90aW9uICYgMHgwMTsNCisNCisgICAgICAgLyogZ2V0IHJlbGF0aXZl IGRlbHRhIFggYW5kIGRlbHRhIFkuICovDQorICAgICAgIHJlcG9ydF9kYXRhLT5yZWxfZGVsdGFY ID0gcmVnX2RhdGEtPmRlbHRheDsNCisgICAgICAgLyogVGhlIFkgZGlyZWN0b3J5IG9mIHRyYWNr cGFkIGlzIHRoZSBvcHBzaXRlIG9mIFNjcmVlbi4gKi8NCisgICAgICAgcmVwb3J0X2RhdGEtPnJl bF9kZWx0YVkgPSAtcmVnX2RhdGEtPmRlbHRheTsNCisNCisgICAgICAgaWYgKHJlZ19kYXRhLT50 YXBfbW90aW9uICYgMHgwMikgew0KKyAgICAgICAgICAgICAgIHJlcG9ydF9kYXRhLT5nZXN0dXJl c1tnZXN0dXJlX3JlcG9ydF9pbmRleCsrXS5pZA0KKyAgICAgICAgICAgICAgICAgICAgICAgPSBH RVNUVVJFX1NJTkdMRV9UQVA7DQorDQorICAgICAgICAgICAgICAgZ2VzdHVyZV9maW5nZXJzID0g R0VTVFVSRV9ERUNPREVfRklOR0VSUyhHRVNUVVJFX1NJTkdMRV9UQVApOw0KKyAgICAgICAgICAg ICAgIGdlc3R1cmVfaW5kZXggPSBHRVNUVVJFX0RFQ09ERV9JTkRFWChHRVNUVVJFX1NJTkdMRV9U QVApOw0KKyAgICAgICAgICAgICAgIHRvdWNoLT5jdXJfYWN0aXZlX2dlc3R1cmVzW2dlc3R1cmVf ZmluZ2Vyc10NCisgICAgICAgICAgICAgICAgICAgICAgIHw9ICgxVUwgPDwgZ2VzdHVyZV9pbmRl eCk7DQorICAgICAgIH0NCisNCisgICAgICAgaWYgKHJlZ19kYXRhLT50YXBfbW90aW9uICYgMHgw NCkgew0KKyAgICAgICAgICAgICAgIHJlcG9ydF9kYXRhLT5nZXN0dXJlc1tnZXN0dXJlX3JlcG9y dF9pbmRleCsrXS5pZA0KKyAgICAgICAgICAgICAgICAgICAgICAgPSBHRVNUVVJFX0RPVUJMRV9U QVA7DQorDQorICAgICAgICAgICAgICAgZ2VzdHVyZV9maW5nZXJzID0gR0VTVFVSRV9ERUNPREVf RklOR0VSUyhHRVNUVVJFX0RPVUJMRV9UQVApOw0KKyAgICAgICAgICAgICAgIGdlc3R1cmVfaW5k ZXggPSBHRVNUVVJFX0RFQ09ERV9JTkRFWChHRVNUVVJFX0RPVUJMRV9UQVApOw0KKyAgICAgICAg ICAgICAgIHRvdWNoLT5jdXJfYWN0aXZlX2dlc3R1cmVzW2dlc3R1cmVfZmluZ2Vyc10NCisgICAg ICAgICAgICAgICAgICAgICAgIHw9ICgxVUwgPDwgZ2VzdHVyZV9pbmRleCk7DQorICAgICAgIH0N CisNCisgICAgICAgcmVwb3J0X2RhdGEtPmdlc3R1cmVzX2NvdW50ID0gZ2VzdHVyZV9yZXBvcnRf aW5kZXg7DQorDQorICAgICAgIC8qIHBhc2UgZmluZ2VycyB0b3VjaCBkYXRhICovDQorICAgICAg IHJlcG9ydF9kYXRhLT50b3VjaF9maW5nZXJzDQorICAgICAgICAgICAgICAgPSAoKHJlZ19kYXRh LT50b3VjaF9maW5nZXJzID4gQ1lBUEFfTUFYX1RPVUNIUykgPw0KKyAgICAgICAgICAgICAgICAg ICAgICAgKENZQVBBX01BWF9UT1VDSFMpIDogKHJlZ19kYXRhLT50b3VjaF9maW5nZXJzKSk7DQor ICAgICAgIHJlcG9ydF9kYXRhLT5hdmdfcHJlc3N1cmUgPSByZWdfZGF0YS0+YXZnX3ByZXNzdXJl Ow0KKyAgICAgICByZXBvcnRfZGF0YS0+dG91Y2hzWzBdLnggPQ0KKyAgICAgICAgICAgICAgICgo cmVnX2RhdGEtPnRvdWNoMS5yZWxfeHkgJiAweEYwKSA8PCA0KQ0KKyAgICAgICAgICAgICAgICAg ICAgICAgfCByZWdfZGF0YS0+dG91Y2gxLnJlbF94Ow0KKyAgICAgICByZXBvcnRfZGF0YS0+dG91 Y2hzWzBdLnkgPQ0KKyAgICAgICAgICAgICAgICgocmVnX2RhdGEtPnRvdWNoMS5yZWxfeHkgJiAw eDBGKSA8PCA4KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgfCByZWdfZGF0YS0+dG91Y2gxLnJl bF95Ow0KKyAgICAgICByZXBvcnRfZGF0YS0+dG91Y2hzWzBdLmlkID0gMDsNCisNCisgICAgICAg Zm9yIChpID0gMDsgaSA8IChDWUFQQV9NQVhfVE9VQ0hTLTEpOyBpKyspIHsNCisgICAgICAgICAg ICAgICByZXBvcnRfZGF0YS0+dG91Y2hzW2krMV0ueCA9DQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgocmVnX2RhdGEtPnRvdWNoc1tpXS5yZWxfeHkgJiAweEYwKSA8PCA0KQ0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlZ19kYXRhLT50b3VjaHNbaV0ucmVsX3g7 DQorICAgICAgICAgICAgICAgcmVwb3J0X2RhdGEtPnRvdWNoc1tpKzFdLnkgPQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKHJlZ19kYXRhLT50b3VjaHNbaV0ucmVsX3h5ICYgMHgw RikgPDwgOCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZWdfZGF0YS0+dG91 Y2hzW2ldLnJlbF95Ow0KKyAgICAgICAgICAgICAgIHJlcG9ydF9kYXRhLT50b3VjaHNbaSsxXS5p ZCA9IGkrMTsNCisgICAgICAgfQ0KKw0KKyAgICAgICBjeWFwYV9wcmludF9yZXBvcnRfZGF0YShf X2Z1bmNfXywgcmVwb3J0X2RhdGEpOw0KK30NCisNCitzdGF0aWMgdm9pZCBjeWFwYV9wYXJzZV9n ZW4yX2RhdGEoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gsDQorICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgY3lhcGFfcmVnX2RhdGFfZ2VuMiAqcmVnX2RhdGEsDQorICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgY3lhcGFfcmVwb3J0X2RhdGEgKnJlcG9ydF9kYXRhKQ0KK3sNCisgICAg ICAgaW50IGk7DQorICAgICAgIGludCBnZXN0dXJlX2ZpbmdlcnMgPSAwOw0KKyAgICAgICBpbnQg Z2VzdHVyZV9pbmRleCA9IDA7DQorDQorICAgICAgIC8qIGJpdDItbWlkZGxlIGJ1dHRvbjsgYml0 MS1yaWdodCBidXR0b247IGJpdDAtbGVmdCBidXR0b20uICovDQorICAgICAgIHJlcG9ydF9kYXRh LT5idXR0b24gPSByZWdfZGF0YS0+cmVsYXRpdmVfZmxhZ3MgJiAweDA3Ow0KKw0KKyAgICAgICAv KiBnZXQgcmVsYXRpdmUgZGVsdGEgWCBhbmQgZGVsdGEgWS4gKi8NCisgICAgICAgcmVwb3J0X2Rh dGEtPnJlbF9kZWx0YVggPSByZWdfZGF0YS0+ZGVsdGF4Ow0KKyAgICAgICAvKiBUaGUgWSBkaXJl Y3Rvcnkgb2YgdHJhY2twYWQgaXMgdGhlIG9wcHNpdGUgb2YgU2NyZWVuLiAqLw0KKyAgICAgICBy ZXBvcnRfZGF0YS0+cmVsX2RlbHRhWSA9IC1yZWdfZGF0YS0+ZGVsdGF5Ow0KKw0KKyAgICAgICAv KiBjb3B5IGZpbmdlcnMgdG91Y2ggZGF0YSAqLw0KKyAgICAgICByZXBvcnRfZGF0YS0+YXZnX3By ZXNzdXJlID0gcmVnX2RhdGEtPmF2Z19wcmVzc3VyZTsNCisgICAgICAgcmVwb3J0X2RhdGEtPnRv dWNoX2ZpbmdlcnMNCisgICAgICAgICAgICAgICA9ICgocmVnX2RhdGEtPnRvdWNoX2ZpbmdlcnMg PiBDWUFQQV9NQVhfVE9VQ0hTKSA/DQorICAgICAgICAgICAgICAgICAgICAgICAoQ1lBUEFfTUFY X1RPVUNIUykgOiAocmVnX2RhdGEtPnRvdWNoX2ZpbmdlcnMpKTsNCisgICAgICAgZm9yIChpID0g MDsgaSA8IHJlcG9ydF9kYXRhLT50b3VjaF9maW5nZXJzOyBpKyspIHsNCisgICAgICAgICAgICAg ICByZXBvcnRfZGF0YS0+dG91Y2hzW2ldLnggPQ0KKyAgICAgICAgICAgICAgICAgICAgICAgKChy ZWdfZGF0YS0+dG91Y2hzW2ldLnh5ICYgMHhGMCkgPDwgNCkNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCByZWdfZGF0YS0+dG91Y2hzW2ldLng7DQorICAgICAgICAgICAgICAgcmVw b3J0X2RhdGEtPnRvdWNoc1tpXS55ID0NCisgICAgICAgICAgICAgICAgICAgICAgICgocmVnX2Rh dGEtPnRvdWNoc1tpXS54eSAmIDB4MEYpIDw8IDgpDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgcmVnX2RhdGEtPnRvdWNoc1tpXS55Ow0KKyAgICAgICAgICAgICAgIHJlcG9ydF9k YXRhLT50b3VjaHNbaV0uaWQgPSByZWdfZGF0YS0+dG91Y2hzW2ldLmlkOw0KKyAgICAgICB9DQor DQorICAgICAgIC8qIHBhcnNlIGdlc3R1cmVzICovDQorICAgICAgIHJlcG9ydF9kYXRhLT5nZXN0 dXJlc19jb3VudCA9DQorICAgICAgICAgICAgICAgKCgocmVnX2RhdGEtPmdlc3R1cmVfY291bnQp ID4gQ1lBUEFfT05FX1RJTUVfR0VTVFVSRVMpID8NCisgICAgICAgICAgICAgICAgICAgICAgIENZ QVBBX09ORV9USU1FX0dFU1RVUkVTIDogcmVnX2RhdGEtPmdlc3R1cmVfY291bnQpOw0KKyAgICAg ICBmb3IgKGkgPSAwOyBpIDwgcmVwb3J0X2RhdGEtPmdlc3R1cmVzX2NvdW50OyBpKyspIHsNCisg ICAgICAgICAgICAgICByZXBvcnRfZGF0YS0+Z2VzdHVyZXNbaV0uaWQgPSByZWdfZGF0YS0+Z2Vz dHVyZVtpXS5pZDsNCisgICAgICAgICAgICAgICByZXBvcnRfZGF0YS0+Z2VzdHVyZXNbaV0ucGFy YW0xID0gcmVnX2RhdGEtPmdlc3R1cmVbaV0ucGFyYW0xOw0KKyAgICAgICAgICAgICAgIHJlcG9y dF9kYXRhLT5nZXN0dXJlc1tpXS5wYXJhbTIgPSByZWdfZGF0YS0+Z2VzdHVyZVtpXS5wYXJhbTI7 DQorDQorICAgICAgICAgICAgICAgZ2VzdHVyZV9maW5nZXJzDQorICAgICAgICAgICAgICAgICAg ICAgICA9IEdFU1RVUkVfREVDT0RFX0ZJTkdFUlMocmVwb3J0X2RhdGEtPmdlc3R1cmVzW2ldLmlk KTsNCisgICAgICAgICAgICAgICBnZXN0dXJlX2luZGV4DQorICAgICAgICAgICAgICAgICAgICAg ICA9IEdFU1RVUkVfREVDT0RFX0lOREVYKHJlcG9ydF9kYXRhLT5nZXN0dXJlc1tpXS5pZCk7DQor ICAgICAgICAgICAgICAgdG91Y2gtPmN1cl9hY3RpdmVfZ2VzdHVyZXNbZ2VzdHVyZV9maW5nZXJz XQ0KKyAgICAgICAgICAgICAgICAgICAgICAgfD0gKDFVTCA8PCBnZXN0dXJlX2luZGV4KTsNCisg ICAgICAgfQ0KKw0KKyAgICAgICBjeWFwYV9wcmludF9yZXBvcnRfZGF0YShfX2Z1bmNfXywgcmVw b3J0X2RhdGEpOw0KK30NCisNCit2b2lkIGN5YXBhX3NldF9wcmVmZXJlbmNlcyhzdHJ1Y3QgY3lh cGFfaTJjICp0b3VjaCkNCit7DQorICAgICAgIHN0cnVjdCBjeWFwYV9wcmVmZXJlbmNlcyAqcHJl ZmVyZW5jZXMgPSAmdG91Y2gtPnByZWZlcmVuY2VzOw0KKw0KKyAgICAgICAvKiBzZXQgZGVmYXVs dCBzZXR0aW5nIGZvciBoc2Nyb2xsLiAqLw0KKyAgICAgICBwcmVmZXJlbmNlcy0+dnNjcm9sbC5k ZWZhdWx0X3RocmVzaG9sZCA9IDQ7DQorICAgICAgIHByZWZlcmVuY2VzLT52c2Nyb2xsLm1pZGRs ZV90aHJlc2hvbGQgPSA4Ow0KKyAgICAgICBwcmVmZXJlbmNlcy0+dnNjcm9sbC5mYXN0X3RocmVz aG9sZCA9IDE2Ow0KKw0KKyAgICAgICAvKiBzZXQgZGVmYXVsdCBzZXR0aW5nIGZvciB2c2Nyb2xs LiAqLw0KKyAgICAgICBwcmVmZXJlbmNlcy0+aHNjcm9sbC5kZWZhdWx0X3RocmVzaG9sZCA9IDQ7 DQorICAgICAgIHByZWZlcmVuY2VzLT5oc2Nyb2xsLm1pZGRsZV90aHJlc2hvbGQgPSA4Ow0KKyAg ICAgICBwcmVmZXJlbmNlcy0+aHNjcm9sbC5mYXN0X3RocmVzaG9sZCA9IDE2Ow0KKw0KKyAgICAg ICAvKiBzZXQgZGVmYXVsdCBzZXR0aW5nIGZvciB2c2Nyb2xsLiAqLw0KKyAgICAgICBwcmVmZXJl bmNlcy0+em9vbS5kZWZhdWx0X3RocmVzaG9sZCA9IDg7DQorICAgICAgIHByZWZlcmVuY2VzLT56 b29tLm1pZGRsZV90aHJlc2hvbGQgPSAxNjsNCisgICAgICAgcHJlZmVyZW5jZXMtPnpvb20uZmFz dF90aHJlc2hvbGQgPSAzMjsNCisNCisgICAgICAgLyogc2V0IGRlZmF1bHQgc2V0dGluZyBmb3Ig cGxhdGZvcm0gZGlzcGxheSBhc3BlY3QgcmF0aW8gYWRqdXN0bWVudC4gKi8NCisgICAgICAgcHJl ZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5hYnNfcmlzZV95ID0gMTY7DQorICAgICAgIHByZWZl cmVuY2VzLT5tb3VzZV9iYWxsaXN0aWMuYWJzX3J1bl95ID0gMTQ7DQorDQorICAgICAgIC8qIHNl dCBkZWZhdWx0IHNldHRpbmcgZm9yIEFCUyBGSVIgZmlsdGVyIHBhcmFtZXRlcnMuICovDQorICAg ICAgIHByZWZlcmVuY2VzLT5tb3VzZV9iYWxsaXN0aWMuZmlyX2Fic19lbmFibGVkID0gMTsNCisN CisgICAgICAgcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5maXJfYWJzX2RlcHRoX3NsZXdf Y291bnQgPSA1Ow0KKyAgICAgICBwcmVmZXJlbmNlcy0+bW91c2VfYmFsbGlzdGljLmZpcl9nZW50 bGVfY3VydmVfZWNjZW50cmljaXR5X21heCA9IDI7DQorICAgICAgIHByZWZlcmVuY2VzLT5tb3Vz ZV9iYWxsaXN0aWMuZmlyX21vZGVyYXRlX2N1cnZlX2VjY2VudHJpY2l0eV9tYXggPSAzOw0KKw0K KyAgICAgICBwcmVmZXJlbmNlcy0+bW91c2VfYmFsbGlzdGljLmZpcl9zbG93X3NwZWVkX2xpbWl0 ID0gNDsNCisgICAgICAgcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5maXJfbW9kZXJhdGVf c3BlZWRfbGltaXQgPSA3Ow0KKw0KKyAgICAgICBwcmVmZXJlbmNlcy0+bW91c2VfYmFsbGlzdGlj LmZpcl9hYnNfZGVwdGhfbWF4ID0gIDc7DQorICAgICAgIHByZWZlcmVuY2VzLT5tb3VzZV9iYWxs aXN0aWMuZmlyX3Nsb3dfc3BlZWRfZGVwdGggPSA3Ow0KKyAgICAgICBwcmVmZXJlbmNlcy0+bW91 c2VfYmFsbGlzdGljLmZpcl9tb2RlcmF0ZV9zcGVlZF9kZXB0aCA9IDc7DQorICAgICAgIHByZWZl cmVuY2VzLT5tb3VzZV9iYWxsaXN0aWMuZmlyX2dlbnRsZV9jdXJ2ZV9kZXB0aCA9IDU7DQorICAg ICAgIHByZWZlcmVuY2VzLT5tb3VzZV9iYWxsaXN0aWMuZmlyX21vZGVyYXRlX2N1cnZlX2RlcHRo ID0gNjsNCisNCisgICAgICAgLyogc2V0IGRlZmF1bHQgc2V0dGluZyBmb3IgQUJTIElJUiBmaWx0 ZXIgcGFyYW1ldGVycy4gKi8NCisgICAgICAgcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5p aXJfYWJzX2VuYWJsZWQgPSAxOw0KKyAgICAgICBwcmVmZXJlbmNlcy0+bW91c2VfYmFsbGlzdGlj Lmlpcl9udW1lcmF0b3IgPSAxOw0KKyAgICAgICBwcmVmZXJlbmNlcy0+bW91c2VfYmFsbGlzdGlj Lmlpcl9kZW5vbWluYXRvciA9IDI7DQorDQorICAgICAgIC8qIHNldCBkZWZhdWx0IHNldHRpbmcg Zm9yIFJFTCBzcGVlZC9hY2NlbGVyYXRpb24gZmlsdGVyIHBhcmFtZXRlcnMuICovDQorICAgICAg IHByZWZlcmVuY2VzLT5tb3VzZV9iYWxsaXN0aWMucmVsX3N0cm9rZV9oaXN0b3J5X2RlcHRoID0g NDsNCisgICAgICAgcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5yZWxfbWVkaXVtX3NwZWVk X3RocmVzaG9sZCA9IDc7DQorICAgICAgIHByZWZlcmVuY2VzLT5tb3VzZV9iYWxsaXN0aWMucmVs X2Zhc3Rfc3BlZWRfdGhyZXNob2xkID0gMTA7DQorICAgICAgIHByZWZlcmVuY2VzLT5tb3VzZV9i YWxsaXN0aWMucmVsX2ZsaWNrX3NwZWVkX3RocmVzaG9sZCA9IDgwOw0KKyAgICAgICBwcmVmZXJl bmNlcy0+bW91c2VfYmFsbGlzdGljLnJlbF9tb3Rpb25fbnVtZXJhdG9yID0gODsNCisgICAgICAg cHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5yZWxfbWVkaXVtX3NwZWVkX251bWVyYXRvciA9 IDc7DQorICAgICAgIHByZWZlcmVuY2VzLT5tb3VzZV9iYWxsaXN0aWMucmVsX21vdGlvbl9kZW5v bWluYXRvciA9IDEyOw0KKyAgICAgICBwcmVmZXJlbmNlcy0+bW91c2VfYmFsbGlzdGljLnJlbF9h Y2NlbGVyYXRpb25fbnVtZXJhdG9yID0gMTY7DQorICAgICAgIHByZWZlcmVuY2VzLT5tb3VzZV9i YWxsaXN0aWMucmVsX2FjY2VsZXJhdGlvbl9kZW5vbWluYXRvciA9IDEwMDsNCisNCisgICAgICAg Lyogc2V0IGRlZmF1bHQgc2V0dGluZyBmb3IgUkVMIElJUiBmaWx0ZXIgcGFyYW1ldGVycy4gKi8N CisgICAgICAgcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5yZWxfaWlyX2FjY2VsZXJhdGlv bl9udW1lcmF0b3IgPSAxOw0KKyAgICAgICBwcmVmZXJlbmNlcy0+bW91c2VfYmFsbGlzdGljLnJl bF9paXJfYWNjZWxlcmF0aW9uX2Rlbm9taW5hdG9yID0gODsNCisgICAgICAgcHJlZmVyZW5jZXMt Pm1vdXNlX2JhbGxpc3RpYy5yZWxfbWF4X2FjY2VsZXJhdGlvbl9zcGVlZCA9IDkwMDsNCit9DQor DQordm9pZCBjeWFwYV9yZXNldF9jdXJzb3JfZmlsdGVyc19kYXRhKHN0cnVjdCBjeWFwYV9pMmMg KnRvdWNoKQ0KK3sNCisgICAgICAgaW50IGk7DQorICAgICAgIHN0cnVjdCBjeWFwYV9jdXJzb3Jf ZmlsdGVycyAqZmlsdGVyID0gJnRvdWNoLT5jdXJzb3JfZmlsdGVyczsNCisNCisgICAgICAgLyog cmVzZXQgcHJldmlvdXMgbW90aW9uIGRhdGEuICovDQorICAgICAgIHRvdWNoLT5wcmV2X2Fic194 ID0gLTE7DQorICAgICAgIHRvdWNoLT5wcmV2X2Fic195ID0gLTE7DQorICAgICAgIHRvdWNoLT5w cmV2X3JlbF94ID0gMDsNCisgICAgICAgdG91Y2gtPnByZXZfcmVsX3kgPSAwOw0KKw0KKyAgICAg ICAvKiByZXNldCBkYXRhIHVzZWQgaW4gRklSIGZpbHRlciB0byBBQlMgZGF0YS4gKi8NCisgICAg ICAgZmlsdGVyLT5maXJfY3VydmVfdHlwZSA9IEZJUl9DVVJWRV9VTklOSVRJQUxJWkVEOw0KKyAg ICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0ZJUl9ERVBUSDsgaSsrKSB7DQorICAgICAgICAgICAg ICAgZmlsdGVyLT5maXJfdmVjdG9yc194W2ldID0gMDsNCisgICAgICAgICAgICAgICBmaWx0ZXIt PmZpcl92ZWN0b3JzX3lbaV0gPSAwOw0KKyAgICAgICB9DQorICAgICAgIGZpbHRlci0+ZmlyX3hf bW9kID0gMDsNCisgICAgICAgZmlsdGVyLT5maXJfeV9tb2QgPSAwOw0KKyAgICAgICBmaWx0ZXIt PmZpcl9hYnNfZGVwdGhfeCA9IDA7DQorICAgICAgIGZpbHRlci0+ZmlyX2Fic19kZXB0aF95ID0g MDsNCisgICAgICAgZmlsdGVyLT5maXJfYWJzX3ByZXZfZGVwdGhfeCA9IC0xOw0KKyAgICAgICBm aWx0ZXItPmZpcl9hYnNfcHJldl9kZXB0aF95ID0gLTE7DQorICAgICAgIGZpbHRlci0+ZmlyX2Fi c19kZXB0aF9zbGV3X2NvdW50ZXJfeCA9IDE7DQorICAgICAgIGZpbHRlci0+ZmlyX2Fic19kZXB0 aF9zbGV3X2NvdW50ZXJfeSA9IDE7DQorDQorICAgICAgIC8qIHJlc2V0IGRhdGEgdXNlZCBpbiBJ SVIgZmlsdGVyIHRvIEFCUyBkYXRhLiAqLw0KKyAgICAgICBmaWx0ZXItPmlpcl94ID0gMHhGRkZG RkZGRjsNCisgICAgICAgZmlsdGVyLT5paXJfeSA9IDB4RkZGRkZGRkY7DQorICAgICAgIGZpbHRl ci0+aWlyX21vZF94ID0gMDsNCisgICAgICAgZmlsdGVyLT5paXJfbW9kX3kgPSAwOw0KKw0KKyAg ICAgICAvKiByZXNldCBkYXRhIHVzZWQgaW4gY29tcGx1dGluZyByZWxhdGl2ZSBtb3ZlbWVudCBz cGVlZCBjYXRlZ29yeS4gKi8NCisgICAgICAgZmlsdGVyLT5yZWxfc3Ryb2tlX2RlcHRoID0gMDsN CisgICAgICAgZmlsdGVyLT5yZWxfc3Ryb2tlX3NwZWVkID0gUkVMX1NUUk9LRV9TUEVFRF9GQVNU Ow0KKw0KKyAgICAgICAvKiByZXNldCBkYXRhIHVzZWQgaW4gcmVsYXRpdmUgc3BlZWQvYWNjZWxl cmF0aW9uIGNvbnRyb2wuICovDQorICAgICAgIGZpbHRlci0+cmVsX3Jlc2lkdWVfeCA9IDA7DQor ICAgICAgIGZpbHRlci0+cmVsX3Jlc2lkdWVfeSA9IDA7DQorICAgICAgIGZpbHRlci0+cmVsX3By ZXZfcmVzaWR1ZV9hY2NlbF94ID0gMDsNCisgICAgICAgZmlsdGVyLT5yZWxfcHJldl9yZXNpZHVl X2FjY2VsX3kgPSAwOw0KKw0KKyAgICAgICAvKiByZXNldCBkYXRhIHVzZWQgaW4gcmVsYXRpdmUg SUlSIGZpbHRlci4gKi8NCisgICAgICAgZmlsdGVyLT5yZWxfcHJldl9hY2NlbF9paXJfeCA9IENZ QVBBX0ZJTFRFUl9FTVBUWV9EQVRBOw0KKyAgICAgICBmaWx0ZXItPnJlbF9wcmV2X2FjY2VsX2lp cl95ID0gQ1lBUEFfRklMVEVSX0VNUFRZX0RBVEE7DQorICAgICAgIGZpbHRlci0+cmVsX3ByZXZf YWNjZWxfaWlyX21vZF94ID0gMDsNCisgICAgICAgZmlsdGVyLT5yZWxfcHJldl9hY2NlbF9paXJf bW9kX3kgPSAwOw0KK30NCisNCisvKkNvbnZlcnRzIG1vZHVsYXIgcmVzaWR1ZXMgdG8gbmV3IHNj YWxlLg0KKyoqIFRoaXMgZW5hYmxlcyByZXNpZHVlcyB0byBwZXJzaXN0IGFjcm9zcyBpbnRlcmF0 aW9ucyB3aGVyZSB2YXJpb3VzIGRpdmlzb3JzDQorKiogd2hpY2ggYXJlIHVzZWQgYnkgZGF0YSBm aWx0ZXJzIGFyZSBtb2RpZmllZC4NCisqLw0KK2lubGluZSBpbnQgY3lhcGFfZmlyX3Jlc2NhbGVf bW9kdWx1cyhpbnQgbW9kX2luLCBpbnQgb2xkX3NjYWxlLCBpbnQgbmV3X3NjYWxlKQ0KK3sNCisg ICAgICAgaW50IHRlbXA7DQorDQorICAgICAgIGlmIChvbGRfc2NhbGUgPD0gMSkNCisgICAgICAg ICAgICAgICByZXR1cm4gbW9kX2luOw0KKw0KKyAgICAgICBpZiAobmV3X3NjYWxlIDw9IG9sZF9z Y2FsZSkNCisgICAgICAgICAgICAgICByZXR1cm4gbW9kX2luOw0KKw0KKyAgICAgICB0ZW1wID0g bW9kX2luICogbmV3X3NjYWxlOw0KKyAgICAgICB0ZW1wID0gdGVtcCAvIG9sZF9zY2FsZTsNCisN CisgICAgICAgcmV0dXJuIHRlbXA7DQorfQ0KKw0KKy8qIERldGVybWluZXMgdGhlIGVjZW50cmlj aXR5LCBhIHByaW1pdGl2ZSBtZWFzdXJlIG9mIHRoZSBkZWdyZWUgb2YgY3VydmF0dXJlLA0KKyoq IHdoaWNoIGlzIHVzZWQgdG8gc2VsZWN0IEZJUiBjaGFyYWN0ZXJpc3RpY3MuDQorKi8NCitpbnQg Y3lhcGFfZmlyX2dldF9jdXJ2ZV90eXBlKHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoKQ0KK3sNCisg ICAgICAgaW50IGk7DQorICAgICAgIGludCBjdXJ2ZV90eXBlOw0KKyAgICAgICBpbnQgY3VyX3Nw ZWVkOw0KKyAgICAgICBpbnQgbWF4X3NwZWVkLCBtaW5fc3BlZWQ7DQorICAgICAgIGludCBtYXhf c3BlZWRfeCwgbWF4X3NwZWVkX3k7DQorICAgICAgIGludCBlY2NlbnRyaWNpdHlfeCwgZWNjZW50 cmljaXR5X3k7DQorICAgICAgIGludCB6ZXJvX2NvdW50X3ggPSAwOw0KKyAgICAgICBpbnQgemVy b19jb3VudF95ID0gMDsNCisgICAgICAgc3RydWN0IGN5YXBhX2N1cnNvcl9maWx0ZXJzICpmaWx0 ZXIgPSAmdG91Y2gtPmN1cnNvcl9maWx0ZXJzOw0KKyAgICAgICBzdHJ1Y3QgbW91c2VfYmFsbGlz dGljX3BhcmFtcyAqbW91c2VfYmFsbGlzdGljDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgID0gJnRvdWNoLT5wcmVmZXJlbmNlcy5tb3VzZV9iYWxsaXN0aWM7DQorDQorICAgICAgIGlm IChmaWx0ZXItPmZpcl9jdXJ2ZV90eXBlID09IEZJUl9DVVJWRV9VTklOSVRJQUxJWkVEKSB7DQor ICAgICAgICAgICAgICAgaWYgKChmaWx0ZXItPmZpcl9hYnNfZGVwdGhfeCA8IDIpDQorICAgICAg ICAgICAgICAgICAgICAgICB8fCAoZmlsdGVyLT5maXJfYWJzX2RlcHRoX3kgPCAyKSkgew0KKyAg ICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLT5maXJfY3VydmVfdHlwZSA9IEZJUl9DVVJWRV9N T0RFUkFURV9TUEVFRF9MSU5FOw0KKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZJUl9D VVJWRV9NT0RFUkFURV9TUEVFRF9MSU5FOw0KKyAgICAgICAgICAgICAgIH0NCisNCisgICAgICAg ICAgICAgICByZXR1cm4gZmlsdGVyLT5maXJfY3VydmVfdHlwZTsNCisgICAgICAgfQ0KKw0KKyAg ICAgICAvKiBmaW5kIG1heCBzcGVlZCBpbiBYIGRpcmVjdGlvbi4gKi8NCisgICAgICAgbWF4X3Nw ZWVkID0gLTEwMDAwMDsNCisgICAgICAgbWluX3NwZWVkID0gMTAwMDAwOw0KKyAgICAgICBmb3Ig KGkgPSAwOyBpIDwgKGZpbHRlci0+ZmlyX2Fic19kZXB0aF94IC0gMSk7IGkrKykgew0KKyAgICAg ICAgICAgICAgIGN1cl9zcGVlZCA9IGZpbHRlci0+ZmlyX3ZlY3RvcnNfeFtpXQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtIGZpbHRlci0+ZmlyX3ZlY3RvcnNfeFtpKzFdOw0KKw0K KyAgICAgICAgICAgICAgIGlmIChjdXJfc3BlZWQgPCBtaW5fc3BlZWQpDQorICAgICAgICAgICAg ICAgICAgICAgICBtaW5fc3BlZWQgPSBjdXJfc3BlZWQ7DQorDQorICAgICAgICAgICAgICAgaWYg KGN1cl9zcGVlZCA+IG1heF9zcGVlZCkNCisgICAgICAgICAgICAgICAgICAgICAgIG1heF9zcGVl ZCA9IGN1cl9zcGVlZDsNCisNCisgICAgICAgICAgICAgICAvKiBmaW5kIHRoZSBjb3VudCBvZiBw cmV2aW91cyBkYXRhIHBhY2thZ2VzDQorICAgICAgICAgICAgICAgKiogdGhhdCBYIGRpcmVjdGlv biBrZWVwcyBub3QgbW92aW5nLiAqLw0KKyAgICAgICAgICAgICAgIGlmICgobWluX3NwZWVkID09 IDApICYmIChtYXhfc3BlZWQgPT0gMCkpDQorICAgICAgICAgICAgICAgICAgICAgICB6ZXJvX2Nv dW50X3ggPSBpOw0KKyAgICAgICB9DQorDQorICAgICAgIGlmIChpID4gMCkNCisgICAgICAgICAg ICAgICBlY2NlbnRyaWNpdHlfeCA9IChtYXhfc3BlZWQgLSBtaW5fc3BlZWQpIC8gaTsNCisgICAg ICAgZWxzZQ0KKyAgICAgICAgICAgICAgIGVjY2VudHJpY2l0eV94ID0gMDsNCisNCisgICAgICAg bWF4X3NwZWVkX3ggPSBtYXhfc3BlZWQ7DQorDQorICAgICAgIC8qIGZpbmQgbWF4IHNwZWVkIGlu IFkgZGlyZWN0aW9uLiAqLw0KKyAgICAgICBtYXhfc3BlZWQgPSAtMTAwMDAwOw0KKyAgICAgICBt aW5fc3BlZWQgPSAxMDAwMDA7DQorICAgICAgIGZvciAoaSA9IDA7IGkgPCAoZmlsdGVyLT5maXJf YWJzX2RlcHRoX3kgLSAxKTsgaSsrKSB7DQorICAgICAgICAgICAgICAgY3VyX3NwZWVkID0gZmls dGVyLT5maXJfdmVjdG9yc195W2ldDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0g ZmlsdGVyLT5maXJfdmVjdG9yc195W2krMV07DQorDQorICAgICAgICAgICAgICAgaWYgKGN1cl9z cGVlZCA8IG1pbl9zcGVlZCkNCisgICAgICAgICAgICAgICAgICAgICAgIG1pbl9zcGVlZCA9IGN1 cl9zcGVlZDsNCisNCisgICAgICAgICAgICAgICBpZiAoY3VyX3NwZWVkID4gbWF4X3NwZWVkKQ0K KyAgICAgICAgICAgICAgICAgICAgICAgbWF4X3NwZWVkID0gY3VyX3NwZWVkOw0KKw0KKyAgICAg ICAgICAgICAgIC8qIGZpbmQgdGhlIGNvdW50IG9mIHByZXZpb3VzIGRhdGEgcGFja2FnZXMNCisg ICAgICAgICAgICAgICAqKiB0aGF0IFkgZGlyZWN0aW9uIGtlZXBzIG5vdCBtb3ZpbmcuICovDQor ICAgICAgICAgICAgICAgaWYgKChtaW5fc3BlZWQgPT0gMCkgJiYgKG1heF9zcGVlZCA9PSAwKSkN CisgICAgICAgICAgICAgICAgICAgICAgIHplcm9fY291bnRfeSA9IGk7DQorICAgICAgIH0NCisN CisgICAgICAgaWYgKGkgPiAwKQ0KKyAgICAgICAgICAgICAgIGVjY2VudHJpY2l0eV95ID0gKG1h eF9zcGVlZCAtIG1pbl9zcGVlZCkgLyBpOw0KKyAgICAgICBlbHNlDQorICAgICAgICAgICAgICAg ZWNjZW50cmljaXR5X3kgPSAwOw0KKw0KKyAgICAgICBtYXhfc3BlZWRfeSA9IG1heF9zcGVlZDsN CisNCisgICAgICAgLyogQWZ0ZXIgcHJldmlvdXMgMyBvciBtb3JlIGRhdGEgcGFja2FnZXMgcmVw b3J0cywNCisgICAgICAgKiogZmluZ2VyIG1vdmVtZW50IHN0aWxsIG5vdCBkZXRlY3RlZC4gKi8N CisgICAgICAgaWYgKCh6ZXJvX2NvdW50X3ggPiAyKSAmJiAoemVyb19jb3VudF95ID4gMikpIHsN CisgICAgICAgICAgICAgICBmaWx0ZXItPmZpcl9jdXJ2ZV90eXBlID0gRklSX0NVUlZFX0ZVTExf U1RPUDsNCisgICAgICAgICAgICAgICByZXR1cm4gRklSX0NVUlZFX0ZVTExfU1RPUDsNCisgICAg ICAgfQ0KKw0KKyAgICAgICAvKiBjYWxjdWxhdGUgY29tYmluZWQgc3BlZWQgdmVjdG9ycy4gKi8N CisgICAgICAgY3VyX3NwZWVkID0gYWJzKG1heF9zcGVlZF94KSArIGFicyhtYXhfc3BlZWRfeSk7 DQorDQorICAgICAgIC8qIHNvcnQgY3VydmUgbGluZSB0eXBlLiAqLw0KKyAgICAgICBpZiAoY3Vy X3NwZWVkIDwgbW91c2VfYmFsbGlzdGljLT5maXJfc2xvd19zcGVlZF9saW1pdCkNCisgICAgICAg ICAgICAgICBjdXJ2ZV90eXBlID0gRklSX0NVUlZFX1NMT1dfU1BFRURfTElORTsNCisgICAgICAg ZWxzZSBpZiAoY3VyX3NwZWVkIDwgbW91c2VfYmFsbGlzdGljLT5maXJfbW9kZXJhdGVfc3BlZWRf bGltaXQpDQorICAgICAgICAgICAgICAgY3VydmVfdHlwZSA9IEZJUl9DVVJWRV9NT0RFUkFURV9T UEVFRF9MSU5FOw0KKyAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgY3VydmVfdHlwZSA9IEZJ Ul9DVVJWRV9GQVNUX1NQRUVEX0xJTkU7DQorDQorICAgICAgIC8qIHNvcnQgZmFzdCBzcGVlZCBj dXJ2ZSB0eXBlIG11Y2ggbW9yZSBkZXRhaWwNCisgICAgICAgKiogYmFzZWQgb24gZWNjZW50cmlj aXR5IHggYW5kIHkgdmFsdWUuICovDQorICAgICAgIGlmIChjdXJ2ZV90eXBlID09IEZJUl9DVVJW RV9GQVNUX1NQRUVEX0xJTkUpIHsNCisgICAgICAgICAgICAgICBpZiAoKGVjY2VudHJpY2l0eV94 ID09IDEpICYmIChlY2NlbnRyaWNpdHlfeSA9PSAxKSkgew0KKyAgICAgICAgICAgICAgICAgICAg ICAgY3VydmVfdHlwZSA9IEZJUl9DVVJWRV9HRU5UTEVfQ1VSVkU7DQorICAgICAgICAgICAgICAg fSBlbHNlIGlmICgoZWNjZW50cmljaXR5X3gNCisgICAgICAgICAgICAgICAgICAgICAgID09IG1v dXNlX2JhbGxpc3RpYy0+ZmlyX2dlbnRsZV9jdXJ2ZV9lY2NlbnRyaWNpdHlfbWF4KQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoZWNjZW50cmljaXR5X3kgPT0gMSkpIHsNCisg ICAgICAgICAgICAgICAgICAgICAgIGN1cnZlX3R5cGUgPSBGSVJfQ1VSVkVfR0VOVExFX0NVUlZF Ow0KKyAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGVjY2VudHJpY2l0eV94ID09IDEpDQorICAg ICAgICAgICAgICAgICAgICAgICAmJiAoZWNjZW50cmljaXR5X3kgPT0NCisgICAgICAgICAgICAg ICAgICAgICAgIG1vdXNlX2JhbGxpc3RpYy0+ZmlyX2dlbnRsZV9jdXJ2ZV9lY2NlbnRyaWNpdHlf bWF4KSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgY3VydmVfdHlwZSA9IEZJUl9DVVJWRV9H RU5UTEVfQ1VSVkU7DQorICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZWNjZW50cmljaXR5X3gN CisgICAgICAgICAgICAgICAgICAgICAgID4gbW91c2VfYmFsbGlzdGljLT5maXJfZ2VudGxlX2N1 cnZlX2VjY2VudHJpY2l0eV9tYXgpDQorICAgICAgICAgICAgICAgICAgICAgICAmJiAoZWNjZW50 cmljaXR5X3kNCisgICAgICAgICAgICAgICAgICAgICAgID4gbW91c2VfYmFsbGlzdGljLT5maXJf Z2VudGxlX2N1cnZlX2VjY2VudHJpY2l0eV9tYXgpKSB7DQorICAgICAgICAgICAgICAgICAgICAg ICBjdXJ2ZV90eXBlID0gRklSX0NVUlZFX01PREVSQVRFX0NVUlZFOw0KKyAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoKGVjY2VudHJpY2l0eV94DQorICAgICAgICAgICAgICAgICAgICAgICA+PSBt b3VzZV9iYWxsaXN0aWMtPmZpcl9tb2RlcmF0ZV9jdXJ2ZV9lY2NlbnRyaWNpdHlfbWF4KQ0KKyAg ICAgICAgICAgICAgICAgICAgICAgfHwgKGVjY2VudHJpY2l0eV95ID49DQorICAgICAgICAgICAg ICAgICAgICAgICBtb3VzZV9iYWxsaXN0aWMtPmZpcl9tb2RlcmF0ZV9jdXJ2ZV9lY2NlbnRyaWNp dHlfbWF4KSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgY3VydmVfdHlwZSA9IEZJUl9DVVJW RV9NT0RFUkFURV9DVVJWRTsNCisgICAgICAgICAgICAgICB9DQorICAgICAgIH0NCisNCisgICAg ICAgZmlsdGVyLT5maXJfY3VydmVfdHlwZSA9IGN1cnZlX3R5cGU7DQorDQorICAgICAgIHJldHVy biBjdXJ2ZV90eXBlOw0KK30NCisNCisvKiBPYnRhaW4gdGhlIEZJUiBjdXJ2ZSB0eXBlIGFuZCBv YnRhaW4gdGhlIEZJUiBmaWx0ZXIgZGVwdGguDQorKiogRmlsdGVyIGRlcHRoIGlzIGEgdHVuaW5n IHBhcmFtZXRlci4NCisqLw0KK2ludCBjeWFwYV9maXJfcmVzZXRfZmlmb19kZXB0aChzdHJ1Y3Qg Y3lhcGFfaTJjICp0b3VjaCkNCit7DQorICAgICAgIGludCBjdXJ2ZV90eXBlOw0KKyAgICAgICBp bnQgZmlyX2RlcHRoOw0KKyAgICAgICBzdHJ1Y3QgY3lhcGFfY3Vyc29yX2ZpbHRlcnMgKmZpbHRl ciA9ICZ0b3VjaC0+Y3Vyc29yX2ZpbHRlcnM7DQorICAgICAgIHN0cnVjdCBtb3VzZV9iYWxsaXN0 aWNfcGFyYW1zICptb3VzZV9iYWxsaXN0aWMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPSAmdG91Y2gtPnByZWZlcmVuY2VzLm1vdXNlX2JhbGxpc3RpYzsNCisNCisgICAgICAgY3Vy dmVfdHlwZSA9IGN5YXBhX2Zpcl9nZXRfY3VydmVfdHlwZSh0b3VjaCk7DQorDQorICAgICAgIHN3 aXRjaCAoY3VydmVfdHlwZSkgew0KKyAgICAgICBjYXNlIEZJUl9DVVJWRV9TTE9XX1NQRUVEX0xJ TkU6DQorICAgICAgICAgICAgICAgZmlyX2RlcHRoID0gbW91c2VfYmFsbGlzdGljLT5maXJfc2xv d19zcGVlZF9kZXB0aDsNCisgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgY2FzZSBGSVJf Q1VSVkVfTU9ERVJBVEVfU1BFRURfTElORToNCisgICAgICAgICAgICAgICBmaXJfZGVwdGggPSBt b3VzZV9iYWxsaXN0aWMtPmZpcl9tb2RlcmF0ZV9zcGVlZF9kZXB0aDsNCisgICAgICAgICAgICAg ICBicmVhazsNCisgICAgICAgY2FzZSBGSVJfQ1VSVkVfRkFTVF9TUEVFRF9MSU5FOg0KKyAgICAg ICAgICAgICAgIGZpcl9kZXB0aCA9IG1vdXNlX2JhbGxpc3RpYy0+ZmlyX2dlbnRsZV9jdXJ2ZV9k ZXB0aDsNCisgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgY2FzZSBGSVJfQ1VSVkVfR0VO VExFX0NVUlZFOg0KKyAgICAgICAgICAgICAgIGZpcl9kZXB0aCA9IG1vdXNlX2JhbGxpc3RpYy0+ ZmlyX2dlbnRsZV9jdXJ2ZV9kZXB0aDsNCisgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAg Y2FzZSBGSVJfQ1VSVkVfTU9ERVJBVEVfQ1VSVkU6DQorICAgICAgICAgICAgICAgZmlyX2RlcHRo ID0gbW91c2VfYmFsbGlzdGljLT5maXJfbW9kZXJhdGVfY3VydmVfZGVwdGg7DQorICAgICAgICAg ICAgICAgYnJlYWs7DQorICAgICAgIGNhc2UgRklSX0NVUlZFX0ZVTExfU1RPUDoNCisgICAgICAg ICAgICAgICBmaXJfZGVwdGggPSAyOw0KKyAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICBj YXNlIEZJUl9DVVJWRV9DSVJDTEU6DQorICAgICAgICAgICAgICAgZmlyX2RlcHRoID0gMDsNCisg ICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICBm aXJfZGVwdGggPSBtb3VzZV9iYWxsaXN0aWMtPmZpcl9zbG93X3NwZWVkX2RlcHRoOw0KKyAgICAg ICAgICAgICAgIGJyZWFrOw0KKyAgICAgICB9DQorDQorICAgICAgIC8qIGF2b2lkIGludmFsaWQg cGFyYW1ldGVyIHNldHRpbmcuICovDQorICAgICAgIGlmIChmaXJfZGVwdGggPiBtb3VzZV9iYWxs aXN0aWMtPmZpcl9hYnNfZGVwdGhfbWF4KQ0KKyAgICAgICAgICAgICAgIGZpcl9kZXB0aCA9IG1v dXNlX2JhbGxpc3RpYy0+ZmlyX2Fic19kZXB0aF9tYXg7DQorDQorICAgICAgIGZpbHRlci0+Zmly X2VmZmVjdGl2ZV9tYXhfZGVwdGggPSBmaXJfZGVwdGg7DQorDQorICAgICAgIHJldHVybiBmaXJf ZGVwdGg7DQorfQ0KKw0KK3N0YXRpYyBpbnQgY3lhcGFfZmlsdGVyX2Zpcl9hYnNfeChzdHJ1Y3Qg Y3lhcGFfaTJjICp0b3VjaCkNCit7DQorICAgICAgIGludCBpOw0KKyAgICAgICBpbnQgc3VtX3gs IGF2ZXJhZ2VfeDsNCisgICAgICAgaW50IGVmZmVjdGl2ZV9tYXhfZGVwdGg7DQorICAgICAgIHN0 cnVjdCBjeWFwYV9jdXJzb3JfZmlsdGVycyAqZmlsdGVyID0gJnRvdWNoLT5jdXJzb3JfZmlsdGVy czsNCisgICAgICAgc3RydWN0IG1vdXNlX2JhbGxpc3RpY19wYXJhbXMgKm1vdXNlX2JhbGxpc3Rp Yw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZ0b3VjaC0+cHJlZmVyZW5jZXMu bW91c2VfYmFsbGlzdGljOw0KKw0KKyAgICAgICBlZmZlY3RpdmVfbWF4X2RlcHRoID0gZmlsdGVy LT5maXJfZWZmZWN0aXZlX21heF9kZXB0aDsNCisNCisgICAgICAgLyogc2V0IHNsb3cgc3BlZWQg RklSIGRlcHRoLiAqLw0KKyAgICAgICBpZiAoKGVmZmVjdGl2ZV9tYXhfZGVwdGggPCBmaWx0ZXIt PmZpcl9hYnNfZGVwdGhfeCkNCisgICAgICAgICAgICAgICAgICAgICAgICYmIChlZmZlY3RpdmVf bWF4X2RlcHRoIDwgMikpIHsNCisgICAgICAgICAgICAgICBmaWx0ZXItPmZpcl9hYnNfZGVwdGhf eCA9IGVmZmVjdGl2ZV9tYXhfZGVwdGg7DQorICAgICAgICAgICAgICAgZmlsdGVyLT5maXJfYWJz X2RlcHRoX3NsZXdfY291bnRlcl94ID0gMDsNCisgICAgICAgfQ0KKw0KKyAgICAgICBpZiAoZWZm ZWN0aXZlX21heF9kZXB0aCA+IGZpbHRlci0+ZmlyX2Fic19kZXB0aF94KSB7DQorICAgICAgICAg ICAgICAgLyogY291bnQgZGVwdGggY2hhbmdlIHNsZXcgdmFsdWUsIGlmIGxlc3Mgb3IgZXF1YWwg dG8gMCwNCisgICAgICAgICAgICAgICAqKiBtYWtlIGRlcHRoIGNoYW5nZWQgYW5kIHJlc2V0IHNs ZXcgdmFsdWUgZm9yIG5leHQgdGltZS4gKi8NCisgICAgICAgICAgICAgICBmaWx0ZXItPmZpcl9h YnNfZGVwdGhfc2xld19jb3VudGVyX3gtLTsNCisgICAgICAgICAgICAgICBpZiAoZmlsdGVyLT5m aXJfYWJzX2RlcHRoX3NsZXdfY291bnRlcl94IDw9IDApIHsNCisgICAgICAgICAgICAgICAgICAg ICAgIGZpbHRlci0+ZmlyX2Fic19kZXB0aF9zbGV3X2NvdW50ZXJfeA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA9IG1vdXNlX2JhbGxpc3RpYy0+ZmlyX2Fic19kZXB0aF9zbGV3X2Nv dW50Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLT5maXJfYWJzX2RlcHRoX3grKzsN CisgICAgICAgICAgICAgICB9DQorICAgICAgIH0NCisNCisgICAgICAgaWYgKGVmZmVjdGl2ZV9t YXhfZGVwdGggPCBmaWx0ZXItPmZpcl9hYnNfZGVwdGhfeCkgew0KKyAgICAgICAgICAgICAgIC8q IGNvdW50IGRlcHRoIGNoYW5nZSBzbGV3IHZhbHVlLCBpZiBsZXNzIG9yIGVxdWFsIHRvIDAsDQor ICAgICAgICAgICAgICAgKiogbWFrZSBkZXB0aCBjaGFuZ2VkIGFuZCByZXNldCBzbGV3IHZhbHVl IGZvciBuZXh0IHRpbWUuICovDQorICAgICAgICAgICAgICAgZmlsdGVyLT5maXJfYWJzX2RlcHRo X3NsZXdfY291bnRlcl94LS07DQorICAgICAgICAgICAgICAgaWYgKGZpbHRlci0+ZmlyX2Fic19k ZXB0aF9zbGV3X2NvdW50ZXJfeCA8PSAwKSB7DQorICAgICAgICAgICAgICAgICAgICAgICBmaWx0 ZXItPmZpcl9hYnNfZGVwdGhfc2xld19jb3VudGVyX3gNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgPSBtb3VzZV9iYWxsaXN0aWMtPmZpcl9hYnNfZGVwdGhfc2xld19jb3VudDsNCisg ICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci0+ZmlyX2Fic19kZXB0aF94LS07DQorICAgICAg ICAgICAgICAgfQ0KKyAgICAgICB9DQorDQorICAgICAgIC8qIGluc2VydCBuZXcgWCBkYXRhLiAq Lw0KKyAgICAgICBmb3IgKGkgPSBtb3VzZV9iYWxsaXN0aWMtPmZpcl9hYnNfZGVwdGhfbWF4LTE7 IGkgPiAwOyBpLS0pDQorICAgICAgICAgICAgICAgZmlsdGVyLT5maXJfdmVjdG9yc194W2ldID0g ZmlsdGVyLT5maXJfdmVjdG9yc194W2ktMV07DQorICAgICAgIGZpbHRlci0+ZmlyX3ZlY3RvcnNf eFswXSA9IHRvdWNoLT5hYnNfeDsNCisNCisgICAgICAgLyogY2FsY3VsYXRlIGFuZCBhcHBseSBB QlMgRklSIGZpbHRlciBhbGdvcml0aG0gdG8gWCBkYXRhLiAqLw0KKyAgICAgICBmb3IgKGkgPSAw OyBpIDwgZmlsdGVyLT5maXJfYWJzX2RlcHRoX3g7IGkrKykNCisgICAgICAgICAgICAgICBzdW1f eCArPSBmaWx0ZXItPmZpcl92ZWN0b3JzX3hbaV07DQorDQorICAgICAgIGlmIChmaWx0ZXItPmZp cl9hYnNfZGVwdGhfeCA+IDEpIHsNCisgICAgICAgICAgICAgICAvKiByZXNjYWxlIG1vZHVsdXMg YmFzZWQgb24gQUJTIEZJUiBkZXB0aC4gKi8NCisgICAgICAgICAgICAgICBmaWx0ZXItPmZpcl94 X21vZCA9IGN5YXBhX2Zpcl9yZXNjYWxlX21vZHVsdXMoZmlsdGVyLT5maXJfeF9tb2QsDQorICAg ICAgICAgICAgICAgICAgICAgICBmaWx0ZXItPmZpcl9hYnNfcHJldl9kZXB0aF94LCBmaWx0ZXIt PmZpcl9hYnNfZGVwdGhfeCk7DQorICAgICAgICAgICAgICAgYXZlcmFnZV94ID0gKHN1bV94ICsg ZmlsdGVyLT5maXJfeF9tb2QpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gZmls dGVyLT5maXJfYWJzX2RlcHRoX3g7DQorICAgICAgICAgICAgICAgZmlsdGVyLT5maXJfeF9tb2Qg PSAoc3VtX3ggKyBmaWx0ZXItPmZpcl94X21vZCkNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAlIGZpbHRlci0+ZmlyX2Fic19kZXB0aF94Ow0KKyAgICAgICB9IGVsc2Ug ew0KKyAgICAgICAgICAgICAgIGF2ZXJhZ2VfeCA9IHRvdWNoLT5hYnNfeDsNCisgICAgICAgICAg ICAgICBmaWx0ZXItPmZpcl94X21vZCA9IDA7DQorICAgICAgIH0NCisNCisgICAgICAgLyogc3Rv cmUgY3VycmVudCBBQlMgRklSIGRlcHRoLiovDQorICAgICAgIGZpbHRlci0+ZmlyX2Fic19wcmV2 X2RlcHRoX3ggPSBmaWx0ZXItPmZpcl9hYnNfZGVwdGhfeDsNCisNCisgICAgICAgcmV0dXJuIGF2 ZXJhZ2VfeDsNCit9DQorDQorc3RhdGljIGludCBjeWFwYV9maWx0ZXJfZmlyX2Fic195KHN0cnVj dCBjeWFwYV9pMmMgKnRvdWNoKQ0KK3sNCisgICAgICAgaW50IGk7DQorICAgICAgIGludCBzdW1f eSwgYXZlcmFnZV95Ow0KKyAgICAgICBpbnQgZWZmZWN0aXZlX21heF9kZXB0aDsNCisgICAgICAg c3RydWN0IGN5YXBhX2N1cnNvcl9maWx0ZXJzICpmaWx0ZXIgPSAmdG91Y2gtPmN1cnNvcl9maWx0 ZXJzOw0KKyAgICAgICBzdHJ1Y3QgbW91c2VfYmFsbGlzdGljX3BhcmFtcyAqbW91c2VfYmFsbGlz dGljDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJnRvdWNoLT5wcmVmZXJlbmNl cy5tb3VzZV9iYWxsaXN0aWM7DQorDQorICAgICAgIGVmZmVjdGl2ZV9tYXhfZGVwdGggPSBmaWx0 ZXItPmZpcl9lZmZlY3RpdmVfbWF4X2RlcHRoOw0KKw0KKyAgICAgICAvKiBzZXQgc2xvdyBzcGVl ZCBGSVIgZGVwdGguICovDQorICAgICAgIGlmICgoZWZmZWN0aXZlX21heF9kZXB0aCA8IGZpbHRl ci0+ZmlyX2Fic19kZXB0aF95KQ0KKyAgICAgICAgICAgICAgICYmIChlZmZlY3RpdmVfbWF4X2Rl cHRoIDwgMikpIHsNCisgICAgICAgICAgICAgICBmaWx0ZXItPmZpcl9hYnNfZGVwdGhfeSA9IGVm ZmVjdGl2ZV9tYXhfZGVwdGg7DQorICAgICAgICAgICAgICAgZmlsdGVyLT5maXJfYWJzX2RlcHRo X3NsZXdfY291bnRlcl95ID0gMDsNCisgICAgICAgfQ0KKw0KKyAgICAgICBpZiAoZWZmZWN0aXZl X21heF9kZXB0aCA+IGZpbHRlci0+ZmlyX2Fic19kZXB0aF95KSB7DQorICAgICAgICAgICAgICAg LyogY291bnQgZGVwdGggY2hhbmdlIHNsZXcgdmFsdWUsIGlmIGxlc3Mgb3IgZXF1YWwgdG8gMCwN CisgICAgICAgICAgICAgICAqKiBtYWtlIGRlcHRoIGNoYW5nZWQgYW5kIHJlc2V0IHNsZXcgdmFs dWUgZm9yIG5leHQgdGltZS4gKi8NCisgICAgICAgICAgICAgICBmaWx0ZXItPmZpcl9hYnNfZGVw dGhfc2xld19jb3VudGVyX3ktLTsNCisgICAgICAgICAgICAgICBpZiAoZmlsdGVyLT5maXJfYWJz X2RlcHRoX3NsZXdfY291bnRlcl95IDw9IDApIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGZp bHRlci0+ZmlyX2Fic19kZXB0aF9zbGV3X2NvdW50ZXJfeQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA9IG1vdXNlX2JhbGxpc3RpYy0+ZmlyX2Fic19kZXB0aF9zbGV3X2NvdW50Ow0K KyAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLT5maXJfYWJzX2RlcHRoX3krKzsNCisgICAg ICAgICAgICAgICB9DQorICAgICAgIH0NCisNCisgICAgICAgaWYgKGVmZmVjdGl2ZV9tYXhfZGVw dGggPCBmaWx0ZXItPmZpcl9hYnNfZGVwdGhfeSkgew0KKyAgICAgICAgICAgICAgIC8qIGNvdW50 IGRlcHRoIGNoYW5nZSBzbGV3IHZhbHVlLCBpZiBsZXNzIG9yIGVxdWFsIHRvIDAsDQorICAgICAg ICAgICAgICAgKiogbWFrZSBkZXB0aCBjaGFuZ2VkIGFuZCByZXNldCBzbGV3IHZhbHVlIGZvciBu ZXh0IHRpbWUuICovDQorICAgICAgICAgICAgICAgZmlsdGVyLT5maXJfYWJzX2RlcHRoX3NsZXdf Y291bnRlcl95LS07DQorICAgICAgICAgICAgICAgaWYgKGZpbHRlci0+ZmlyX2Fic19kZXB0aF9z bGV3X2NvdW50ZXJfeSA8PSAwKSB7DQorICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXItPmZp cl9hYnNfZGVwdGhfc2xld19jb3VudGVyX3kNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPSBtb3VzZV9iYWxsaXN0aWMtPmZpcl9hYnNfZGVwdGhfc2xld19jb3VudDsNCisgICAgICAg ICAgICAgICAgICAgICAgIGZpbHRlci0+ZmlyX2Fic19kZXB0aF95LS07DQorICAgICAgICAgICAg ICAgfQ0KKyAgICAgICB9DQorDQorICAgICAgIC8qIGluc2VydCBuZXcgWSBkYXRhLiAqLw0KKyAg ICAgICBmb3IgKGkgPSBtb3VzZV9iYWxsaXN0aWMtPmZpcl9hYnNfZGVwdGhfbWF4LTE7IGkgPiAw OyBpLS0pDQorICAgICAgICAgICAgICAgZmlsdGVyLT5maXJfdmVjdG9yc195W2ldID0gZmlsdGVy LT5maXJfdmVjdG9yc195W2ktMV07DQorICAgICAgIGZpbHRlci0+ZmlyX3ZlY3RvcnNfeVswXSA9 IHRvdWNoLT5hYnNfeTsNCisNCisgICAgICAgLyogY2FsY3VsYXRlIGFuZCBhcHBseSBBQlMgRklS IGZpbHRlciBhbGdvcml0aG0gdG8gWSBkYXRhLiAqLw0KKyAgICAgICBmb3IgKGkgPSAwOyBpIDwg ZmlsdGVyLT5maXJfYWJzX2RlcHRoX3k7IGkrKykNCisgICAgICAgICAgICAgICBzdW1feSArPSBm aWx0ZXItPmZpcl92ZWN0b3JzX3lbaV07DQorDQorICAgICAgIGlmIChmaWx0ZXItPmZpcl9hYnNf ZGVwdGhfeSA+IDEpIHsNCisgICAgICAgICAgICAgICAvKiByZXNjYWxlIG1vZHVsdXMgYmFzZWQg b24gQUJTIEZJUiBkZXB0aC4gKi8NCisgICAgICAgICAgICAgICBmaWx0ZXItPmZpcl95X21vZCA9 IGN5YXBhX2Zpcl9yZXNjYWxlX21vZHVsdXMoZmlsdGVyLT5maXJfeV9tb2QsDQorICAgICAgICAg ICAgICAgICAgICAgICBmaWx0ZXItPmZpcl9hYnNfcHJldl9kZXB0aF95LCBmaWx0ZXItPmZpcl9h YnNfZGVwdGhfeSk7DQorICAgICAgICAgICAgICAgYXZlcmFnZV95ID0gKHN1bV95ICsgZmlsdGVy LT5maXJfeV9tb2QpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gZmlsdGVyLT5m aXJfYWJzX2RlcHRoX3k7DQorICAgICAgICAgICAgICAgZmlsdGVyLT5maXJfeV9tb2QgPSAoc3Vt X3kgKyBmaWx0ZXItPmZpcl95X21vZCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JSBmaWx0ZXItPmZpcl9hYnNfZGVwdGhfeTsNCisgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAg ICAgICBhdmVyYWdlX3kgPSB0b3VjaC0+YWJzX3k7DQorICAgICAgICAgICAgICAgZmlsdGVyLT5m aXJfeV9tb2QgPSAwOw0KKyAgICAgICB9DQorDQorICAgICAgIC8qIHN0b3JlIGN1cnJlbnQgQUJT IEZJUiBkZXB0aC4qLw0KKyAgICAgICBmaWx0ZXItPmZpcl9hYnNfcHJldl9kZXB0aF95ID0gZmls dGVyLT5maXJfYWJzX2RlcHRoX3k7DQorDQorICAgICAgIHJldHVybiBhdmVyYWdlX3k7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgY3lhcGFfZmlsdGVyX2lpcl9hYnMoc3RydWN0IGN5YXBhX2kyYyAqdG91 Y2gsDQorICAgICAgICAgICAgICAgaW50ICpwcmV2X2lpciwNCisgICAgICAgICAgICAgICBpbnQg KnByZXZfaWlyX21vZCwNCisgICAgICAgICAgICAgICBpbnQgcG9zLA0KKyAgICAgICAgICAgICAg IGludCBudW1lcmF0b3IsDQorICAgICAgICAgICAgICAgaW50IGRlbm9taW5hdG9yKQ0KK3sNCisg ICAgICAgaW50IG9sZF9paXI7DQorICAgICAgIGludCBuZXdfaWlyOw0KKyAgICAgICBpbnQgaWly X21vZF9wcmV2Ow0KKyAgICAgICBpbnQgaWlyX21vZF9uZXh0Ow0KKw0KKyAgICAgICBpZiAoKnBy ZXZfaWlyID09IDB4RkZGRkZGRkYpIHsNCisgICAgICAgICAgICAgICAqcHJldl9paXIgPSBwb3M7 DQorICAgICAgICAgICAgICAgKnByZXZfaWlyX21vZCA9IDA7DQorICAgICAgICAgICAgICAgcmV0 dXJuIHBvczsNCisgICAgICAgfQ0KKw0KKyAgICAgICBpZiAoKG51bWVyYXRvciA9PSAxKSAmJiAo ZGVub21pbmF0b3IgPT0gMSkpIHsNCisgICAgICAgICAgICAgICAqcHJldl9paXIgPSBwb3M7DQor ICAgICAgICAgICAgICAgKnByZXZfaWlyX21vZCA9IDA7DQorICAgICAgICAgICAgICAgcmV0dXJu IHBvczsNCisgICAgICAgfQ0KKw0KKyAgICAgICBpZiAoKG51bWVyYXRvciA+IGRlbm9taW5hdG9y KSB8fCAoZGVub21pbmF0b3IgPD0gMCkpIHsNCisgICAgICAgICAgICAgICAqcHJldl9paXIgPSBw b3M7DQorICAgICAgICAgICAgICAgKnByZXZfaWlyX21vZCA9IDA7DQorICAgICAgICAgICAgICAg cmV0dXJuIHBvczsNCisgICAgICAgfQ0KKw0KKyAgICAgICBvbGRfaWlyID0gKnByZXZfaWlyOw0K KyAgICAgICBpaXJfbW9kX3ByZXYgPSAqcHJldl9paXJfbW9kOw0KKw0KKyAgICAgICAvKiBjYWxj dWxhdGUgYW5kIGFwcGx5IElJUiBmaWx0ZXIgdG8gQUJTIHBvc3Rpb24gdmFsdWUgJ3BvcycuICov DQorICAgICAgIG5ld19paXIgPSBvbGRfaWlyICogbnVtZXJhdG9yOw0KKyAgICAgICBwb3MgPSBw b3MgKiAoZGVub21pbmF0b3IgLSBudW1lcmF0b3IpOw0KKyAgICAgICBuZXdfaWlyID0gbmV3X2lp ciArIHBvcyArIGlpcl9tb2RfcHJldjsNCisgICAgICAgaWlyX21vZF9uZXh0ID0gbmV3X2lpciAl IGRlbm9taW5hdG9yOw0KKyAgICAgICBuZXdfaWlyID0gbmV3X2lpciAvIGRlbm9taW5hdG9yOw0K Kw0KKyAgICAgICAvKiBzdG9yZSBjdXJyZW50IElJUiB2YWx1ZSBhbmQgSUlSIG1vZGUgdmFsdWUN CisgICAgICAgKiogZm9yIG5leHQgdGltZSBjYWxjdWxhdGluZy4qLw0KKyAgICAgICAqcHJldl9p aXIgPSBuZXdfaWlyOw0KKyAgICAgICAqcHJldl9paXJfbW9kID0gaWlyX21vZF9uZXh0Ow0KKw0K KyAgICAgICByZXR1cm4gbmV3X2lpcjsNCit9DQorDQoraW5saW5lIGludCBjeWFwYV9jb21wdXRl X3JlbF9tb3Rpb24oaW50IGFic19wb3MsIGludCBwcmV2X2Fic19wb3MpDQorew0KKyAgICAgICBp ZiAocHJldl9hYnNfcG9zID09IC0xKQ0KKyAgICAgICAgICAgICAgIHJldHVybiAwOw0KKw0KKyAg ICAgICByZXR1cm4gYWJzX3BvcyAtIHByZXZfYWJzX3BvczsNCit9DQorDQorc3RhdGljIGludCBj eWFwYV9yZWxfZ2V0X2FjY2VsX3N0b2tlX3R5cGUoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gsDQor ICAgICAgICAgICAgICAgaW50IGRlbHRhX3gsDQorICAgICAgICAgICAgICAgaW50IGRlbHRhX3kp DQorew0KKyAgICAgICBpbnQgaTsNCisgICAgICAgaW50IHJlbF9zdHJva2Vfc3BlZWQ7DQorICAg ICAgIGludCBzcGVlZF94LCBzcGVlZF95Ow0KKyAgICAgICBpbnQgbWF4X3NwZWVkX3gsIG1heF9z cGVlZF95Ow0KKyAgICAgICBzdHJ1Y3QgY3lhcGFfY3Vyc29yX2ZpbHRlcnMgKmZpbHRlciA9ICZ0 b3VjaC0+Y3Vyc29yX2ZpbHRlcnM7DQorICAgICAgIHN0cnVjdCBtb3VzZV9iYWxsaXN0aWNfcGFy YW1zICptb3VzZV9iYWxsaXN0aWMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAm dG91Y2gtPnByZWZlcmVuY2VzLm1vdXNlX2JhbGxpc3RpYzsNCisNCisgICAgICAgLyogdmVyaWZ5 IG1vdXNlIGJhbGxpc3RpYyBzZXR0aW5nIGZvciBzdHJva2UgaGlzdG9yeSBkZXB0aCwNCisgICAg ICAgKiogdXBkYXRlIGl0IGlmIGludmxpYWQuICovDQorICAgICAgIGlmIChtb3VzZV9iYWxsaXN0 aWMtPnJlbF9zdHJva2VfaGlzdG9yeV9kZXB0aA0KKyAgICAgICAgICAgICAgICAgICAgICAgPiAo UkVMX1NUUk9LRV9ISVNUT1JZX1JFQ1MtMSkpIHsNCisgICAgICAgICAgICAgICBtb3VzZV9iYWxs aXN0aWMtPnJlbF9zdHJva2VfaGlzdG9yeV9kZXB0aA0KKyAgICAgICAgICAgICAgICAgICAgICAg PSBSRUxfU1RST0tFX0hJU1RPUllfUkVDUyAtIDE7DQorICAgICAgIH0NCisNCisgICAgICAgZm9y IChpID0gbW91c2VfYmFsbGlzdGljLT5yZWxfc3Ryb2tlX2hpc3RvcnlfZGVwdGgtMTsgaSA+IDA7 IGktLSkgew0KKyAgICAgICAgICAgICAgIGZpbHRlci0+cmVsX3N0cm9rZV9oaXN0b3J5W2ldLngN CisgICAgICAgICAgICAgICAgICAgICAgID0gZmlsdGVyLT5yZWxfc3Ryb2tlX2hpc3RvcnlbaS0x XS54Ow0KKyAgICAgICAgICAgICAgIGZpbHRlci0+cmVsX3N0cm9rZV9oaXN0b3J5W2ldLnkNCisg ICAgICAgICAgICAgICAgICAgICAgID0gZmlsdGVyLT5yZWxfc3Ryb2tlX2hpc3RvcnlbaS0xXS55 Ow0KKyAgICAgICB9DQorICAgICAgIGZpbHRlci0+cmVsX3N0cm9rZV9oaXN0b3J5WzBdLnggPSBh YnMoZGVsdGFfeCk7DQorICAgICAgIGZpbHRlci0+cmVsX3N0cm9rZV9oaXN0b3J5WzBdLnkgPSBh YnMoZGVsdGFfeSk7DQorDQorICAgICAgIC8qIHVwYXRlIHN0b3JrZSBkZXB0aC4gKi8NCisgICAg ICAgaWYgKGZpbHRlci0+cmVsX3N0cm9rZV9kZXB0aA0KKyAgICAgICAgICAgICAgIDwgbW91c2Vf YmFsbGlzdGljLT5yZWxfc3Ryb2tlX2hpc3RvcnlfZGVwdGgpIHsNCisgICAgICAgICAgICAgICBm aWx0ZXItPnJlbF9zdHJva2VfZGVwdGgrKzsNCisgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAg ICAgICBmaWx0ZXItPnJlbF9zdHJva2VfZGVwdGgNCisgICAgICAgICAgICAgICAgICAgICAgID0g bW91c2VfYmFsbGlzdGljLT5yZWxfc3Ryb2tlX2hpc3RvcnlfZGVwdGg7DQorICAgICAgIH0NCisN CisgICAgICAgLyogZmluZCBtYXggc3BlZWQgaW4gc3Ryb2tlIGhpc3RvcnkuICovDQorICAgICAg IG1heF9zcGVlZF94ID0gbWF4X3NwZWVkX3kgPSAtMTAwMDAwOw0KKyAgICAgICBmb3IgKGkgPSAw OyBpIDwgZmlsdGVyLT5yZWxfc3Ryb2tlX2RlcHRoOyBpKyspIHsNCisgICAgICAgICAgICAgICBz cGVlZF94ID0gZmlsdGVyLT5yZWxfc3Ryb2tlX2hpc3RvcnlbaV0ueDsNCisgICAgICAgICAgICAg ICBzcGVlZF95ID0gZmlsdGVyLT5yZWxfc3Ryb2tlX2hpc3RvcnlbaV0ueTsNCisNCisgICAgICAg ICAgICAgICBpZiAoc3BlZWRfeCA+IG1heF9zcGVlZF94KQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgbWF4X3NwZWVkX3ggPSBzcGVlZF94Ow0KKw0KKyAgICAgICAgICAgICAgIGlmIChzcGVlZF95 ID4gbWF4X3NwZWVkX3kpDQorICAgICAgICAgICAgICAgICAgICAgICBtYXhfc3BlZWRfeSA9IHNw ZWVkX3k7DQorICAgICAgIH0NCisNCisgICAgICAgaWYgKG1heF9zcGVlZF95ID4gbWF4X3NwZWVk X3gpDQorICAgICAgICAgICAgICAgbWF4X3NwZWVkX3ggPSBtYXhfc3BlZWRfeTsNCisNCisgICAg ICAgLyogc29ydCBzdG9ya2Ugc3BlZWQgcmFuZ2UgYmFzZWQgb24gbWF4IHN0cm9rZSBoaXN0b3J5 IHNwZWVkLiAqLw0KKyAgICAgICBpZiAobWF4X3NwZWVkX3ggPCBtb3VzZV9iYWxsaXN0aWMtPnJl bF9tZWRpdW1fc3BlZWRfdGhyZXNob2xkKSB7DQorICAgICAgICAgICAgICAgcmVsX3N0cm9rZV9z cGVlZCA9IFJFTF9TVFJPS0VfU1BFRURfU0xPVzsNCisgICAgICAgfSBlbHNlIGlmIChtYXhfc3Bl ZWRfeCA+IG1vdXNlX2JhbGxpc3RpYy0+cmVsX2Zhc3Rfc3BlZWRfdGhyZXNob2xkKSB7DQorICAg ICAgICAgICAgICAgaWYgKG1heF9zcGVlZF94IDwgbW91c2VfYmFsbGlzdGljLT5yZWxfZmxpY2tf c3BlZWRfdGhyZXNob2xkKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgcmVsX3N0cm9rZV9zcGVl ZCA9IFJFTF9TVFJPS0VfU1BFRURfRkFTVDsNCisgICAgICAgICAgICAgICBlbHNlDQorICAgICAg ICAgICAgICAgICAgICAgICByZWxfc3Ryb2tlX3NwZWVkID0gUkVMX1NUUk9LRV9TUEVFRF9XQVJQ Ow0KKyAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgIHJlbF9zdHJva2Vfc3BlZWQgPSBS RUxfU1RST0tFX1NQRUVEX01FRElVTTsNCisgICAgICAgfQ0KKw0KKyAgICAgICByZXR1cm4gcmVs X3N0cm9rZV9zcGVlZDsNCit9DQorDQoraW50IGN5YXBhX2ZpbHRlcl9paXJfcmVsKHN0cnVjdCBj eWFwYV9pMmMgKnRvdWNoLA0KKyAgICAgICAgICAgICAgIGludCByZWxfYWNjZWxfcG9zLA0KKyAg ICAgICAgICAgICAgIGludCAqcmVsX3ByZXZfYWNjZWxfcG9zLA0KKyAgICAgICAgICAgICAgIGlu dCAqcmVsX3ByZXZfYWNjZWxfaWlyX21vZCkNCit7DQorICAgICAgIGludCBvbGRfaWlyOw0KKyAg ICAgICBpbnQgbmV3X2lpcjsNCisgICAgICAgaW50IGlpcl9tb2RfcHJldjsNCisgICAgICAgaW50 IGlpcl9tb2RfbmV4dDsNCisgICAgICAgaW50IGlpcl9udW1lcmF0b3IsIGlpcl9kZW5vbWluYXRv cjsNCisgICAgICAgc3RydWN0IG1vdXNlX2JhbGxpc3RpY19wYXJhbXMgKm1vdXNlX2JhbGxpc3Rp Yw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZ0b3VjaC0+cHJlZmVyZW5jZXMu bW91c2VfYmFsbGlzdGljOw0KKw0KKyAgICAgICBpaXJfbnVtZXJhdG9yID0gbW91c2VfYmFsbGlz dGljLT5yZWxfaWlyX2FjY2VsZXJhdGlvbl9udW1lcmF0b3I7DQorICAgICAgIGlpcl9kZW5vbWlu YXRvciA9IG1vdXNlX2JhbGxpc3RpYy0+cmVsX2lpcl9hY2NlbGVyYXRpb25fZGVub21pbmF0b3I7 DQorDQorICAgICAgIG9sZF9paXIgPSAqcmVsX3ByZXZfYWNjZWxfcG9zOw0KKyAgICAgICBpaXJf bW9kX3ByZXYgPSAqcmVsX3ByZXZfYWNjZWxfaWlyX21vZDsNCisNCisgICAgICAgaWYgKChpaXJf ZGVub21pbmF0b3IgPiAwKSAmJiAoaWlyX2Rlbm9taW5hdG9yICE9IGlpcl9udW1lcmF0b3IpKSB7 DQorICAgICAgICAgICAgICAgaWYgKG9sZF9paXIgPT0gQ1lBUEFfRklMVEVSX0VNUFRZX0RBVEEp IHsNCisgICAgICAgICAgICAgICAgICAgICAgIG9sZF9paXIgPSByZWxfYWNjZWxfcG9zOw0KKyAg ICAgICAgICAgICAgICAgICAgICAgaWlyX21vZF9wcmV2ID0gMDsNCisgICAgICAgICAgICAgICB9 DQorDQorICAgICAgICAgICAgICAgb2xkX2lpciAqPSBpaXJfbnVtZXJhdG9yOw0KKyAgICAgICAg ICAgICAgIG5ld19paXIgPSByZWxfYWNjZWxfcG9zICogKGlpcl9kZW5vbWluYXRvciAtIGlpcl9u dW1lcmF0b3IpOw0KKyAgICAgICAgICAgICAgIG5ld19paXIgPSBuZXdfaWlyICsgb2xkX2lpciAr IGlpcl9tb2RfcHJldjsNCisgICAgICAgICAgICAgICBpaXJfbW9kX25leHQgPSBuZXdfaWlyICUg aWlyX2Rlbm9taW5hdG9yOw0KKyAgICAgICAgICAgICAgIG5ld19paXIgPSBuZXdfaWlyIC8gaWly X2Rlbm9taW5hdG9yOw0KKw0KKyAgICAgICAgICAgICAgICpyZWxfcHJldl9hY2NlbF9wb3MgPSBu ZXdfaWlyOw0KKyAgICAgICAgICAgICAgICpyZWxfcHJldl9hY2NlbF9paXJfbW9kID0gaWlyX21v ZF9uZXh0Ow0KKyAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICpyZWxfcHJldl9hY2Nl bF9wb3MgPSBuZXdfaWlyID0gcmVsX2FjY2VsX3BvczsNCisgICAgICAgICAgICAgICAqcmVsX3By ZXZfYWNjZWxfaWlyX21vZCA9IDA7DQorICAgICAgIH0NCisNCisgICAgICAgcmV0dXJuIG5ld19p aXI7DQorfQ0KKw0KKy8qIEFkanVzdHMgdGhlIFkgZGF0YSBhcyByZXBvcnRlZCBieSB0aGUgdHJh Y2twYWQgRlcgdG8gbWVldCB0aGUgc2hhcGUNCisqKiBvZiB0aGUgdXNlcidzIHNjcmVlbi4gVGhp cyBpcyB1c2VmdWwgdG8gbWVldCBzb21lIGN1c3RvbWVyIHRlc3QNCisqKiByZXF1aXJlbWVudHMs IHdoZXJlIGEgZGlhZ29uYWwgc3Ryb2tlIG9uIHRoZSBUUCBpcyBzdXBwb3NlZCB0bw0KKyoqIGNh dXNlIGEgbGlrZS1hbmdsZWQgZGlhZ2luYWwgc3Ryb2tlIG9uIHRoZSBQQyBkaXNwbGF5IGRldmlj ZS4NCisqLw0KK2lubGluZSBpbnQgY3lhcGFfZmlsdGVyX3BsYXRmb3JtX2Rpc3BsYXlfYXNwZWN0 X3JhdGlvX2FkanVzdCgNCisgICAgICAgICAgICAgICBzdHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCwN CisgICAgICAgICAgICAgICBpbnQgYWJzX3kpDQorew0KKyAgICAgICBzdHJ1Y3QgbW91c2VfYmFs bGlzdGljX3BhcmFtcyAqbW91c2VfYmFsbGlzdGljDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID0gJnRvdWNoLT5wcmVmZXJlbmNlcy5tb3VzZV9iYWxsaXN0aWM7DQorDQorICAgICAg IGFic195ICo9IG1vdXNlX2JhbGxpc3RpYy0+YWJzX3Jpc2VfeTsNCisgICAgICAgaWYgKChtb3Vz ZV9iYWxsaXN0aWMtPmFic19ydW5feSA+IDEpDQorICAgICAgICAgICAgICAgJiYgKG1vdXNlX2Jh bGxpc3RpYy0+YWJzX3J1bl95IDwgMTAwMDApKSB7DQorICAgICAgICAgICAgICAgYWJzX3kgPSBh YnNfeSAvIG1vdXNlX2JhbGxpc3RpYy0+YWJzX3J1bl95Ow0KKyAgICAgICB9DQorDQorICAgICAg IHJldHVybiBhYnNfeTsNCit9DQorDQorc3RhdGljIHZvaWQgY3lhcGFfZmlsdGVyX2N1cnNvcl9t b3ZlbWVudChzdHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCwNCisgICAgICAgICAgICAgICBzdHJ1Y3Qg Y3lhcGFfcmVwb3J0X2RhdGEgKnJlcG9ydF9kYXRhKQ0KK3sNCisgICAgICAgaW50IGFic194LCBh YnNfeTsNCisgICAgICAgaW50IGRlbHRhX3gsIGRlbHRhX3k7DQorICAgICAgIGludCBzcGVlZF9u dW1lcmF0b3IsIHNwZWVkX2Rlbm9taW5hdG9yOw0KKyAgICAgICBpbnQgYWNjZWxlcmF0aW9uX3Zl Y3Rvcl9hbXBsaXR1ZGUgPSAxOw0KKyAgICAgICBpbnQgYWNjZWxlcmF0aW9uX2Rlbm9taW5hdG9y Ow0KKyAgICAgICBpbnQgZGVsdGFfYWNjZWxlcmF0aW9uX3ggPSAwOw0KKyAgICAgICBpbnQgZGVs dGFfYWNjZWxlcmF0aW9uX3kgPSAwOw0KKyAgICAgICBzdHJ1Y3QgY3lhcGFfY3Vyc29yX2ZpbHRl cnMgKmZpbHRlciA9ICZ0b3VjaC0+Y3Vyc29yX2ZpbHRlcnM7DQorICAgICAgIHN0cnVjdCBtb3Vz ZV9iYWxsaXN0aWNfcGFyYW1zICptb3VzZV9iYWxsaXN0aWMNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPSAmdG91Y2gtPnByZWZlcmVuY2VzLm1vdXNlX2JhbGxpc3RpYzsNCisNCisg ICAgICAgLyoNCisgICAgICAgKiogMS4gSW5wdXQgQUJTIHJhdyBkYXRhLg0KKyAgICAgICAqLw0K KyAgICAgICB0b3VjaC0+YWJzX3ggPSBhYnNfeCA9IHJlcG9ydF9kYXRhLT50b3VjaHNbMF0ueDsN CisgICAgICAgdG91Y2gtPmFic195ID0gYWJzX3kgPSByZXBvcnRfZGF0YS0+dG91Y2hzWzBdLnk7 DQorDQorICAgICAgIC8qIGFkanVzdCBZIGRhdGEgYXMgcmVwb3J0ZWQgYnkgZmlyd2FyZSB0byBt ZWV0IHRoZQ0KKyAgICAgICAqKiBzaGFwZSBvZiB0aGUgdXNyZSdzIHNjcmVlbiBmaXJzdGx5LiAq Lw0KKyAgICAgICB0b3VjaC0+YWJzX3kgPSBjeWFwYV9maWx0ZXJfcGxhdGZvcm1fZGlzcGxheV9h c3BlY3RfcmF0aW9fYWRqdXN0KHRvdWNoLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRvdWNoLT5hYnNfeSk7DQorDQorICAgICAgIC8qDQorICAgICAgICoqIDIuIEFw cGx5IEZJUiBmaWx0ZXIgdG8gQUJTIHJhdyBkYXRhLg0KKyAgICAgICAqLw0KKyAgICAgICBpZiAo bW91c2VfYmFsbGlzdGljLT5maXJfYWJzX2VuYWJsZWQpIHsNCisgICAgICAgICAgICAgICBjeWFw YV9maXJfcmVzZXRfZmlmb19kZXB0aCh0b3VjaCk7DQorICAgICAgICAgICAgICAgYWJzX3ggPSBj eWFwYV9maWx0ZXJfZmlyX2Fic194KHRvdWNoKTsNCisgICAgICAgICAgICAgICBhYnNfeSA9IGN5 YXBhX2ZpbHRlcl9maXJfYWJzX3kodG91Y2gpOw0KKyAgICAgICB9DQorDQorICAgICAgIC8qDQor ICAgICAgICoqIDMuIEFwcGx5IElJUiBmaWx0ZXIgdG8gRklSIGZpbHRlcmVkIEFCUyBkYXRhLg0K KyAgICAgICAqLw0KKyAgICAgICBpZiAobW91c2VfYmFsbGlzdGljLT5paXJfYWJzX2VuYWJsZWQp IHsNCisgICAgICAgICAgICAgICBhYnNfeCA9IGN5YXBhX2ZpbHRlcl9paXJfYWJzKHRvdWNoLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWx0ZXItPmlpcl94LA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWx0ZXItPmlpcl9tb2Rf eCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfeCwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZV9iYWxsaXN0aWMtPmlpcl9u dW1lcmF0b3IsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2Vf YmFsbGlzdGljLT5paXJfZGVub21pbmF0b3IpOw0KKyAgICAgICAgICAgICAgIGFic195ID0gY3lh cGFfZmlsdGVyX2lpcl9hYnModG91Y2gsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmZpbHRlci0+aWlyX3ksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmZpbHRlci0+aWlyX21vZF95LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFic195LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1vdXNlX2JhbGxpc3RpYy0+aWlyX251bWVyYXRvciwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtb3VzZV9iYWxsaXN0aWMtPmlpcl9kZW5vbWluYXRvcik7DQor ICAgICAgICAgICAgICAgdG91Y2gtPmFic194ID0gYWJzX3g7DQorICAgICAgICAgICAgICAgdG91 Y2gtPmFic195ID0gYWJzX3k7DQorICAgICAgIH0NCisNCisgICAgICAgLyoNCisgICAgICAgKiog NC4gQ2FsY3VsYXRlIGRlbHRhIG1vdmVtZW50IHZhbHVlLg0KKyAgICAgICAqLw0KKyAgICAgICBk ZWx0YV94ID0gY3lhcGFfY29tcHV0ZV9yZWxfbW90aW9uKHRvdWNoLT5hYnNfeCwgdG91Y2gtPnBy ZXZfYWJzX3gpOw0KKyAgICAgICBkZWx0YV95ID0gY3lhcGFfY29tcHV0ZV9yZWxfbW90aW9uKHRv dWNoLT5hYnNfeSwgdG91Y2gtPnByZXZfYWJzX3kpOw0KKyAgICAgICB0b3VjaC0+cHJldl9hYnNf eCA9IHRvdWNoLT5hYnNfeDsNCisgICAgICAgdG91Y2gtPnByZXZfYWJzX3kgPSB0b3VjaC0+YWJz X3k7DQorDQorICAgICAgIC8qDQorICAgICAgICoqIDUuIEFwcGx5IHNwZWVkL2FjY2VsZXJhdGlv biBjb250cm9sLg0KKyAgICAgICAqLw0KKyAgICAgICAvKiBPYnRhaW4gcmVsYXRpdmUgbW92ZW1l bnQgc3BlZWQgY2F0ZWdvcnkNCisgICAgICAgKiogZm9yIHVzZSBpbiBjb21wdXRpbmcgc3BlZWQg Y29lZmZpY2llbnRzLiAqLw0KKyAgICAgICBmaWx0ZXItPnJlbF9zdHJva2Vfc3BlZWQNCisgICAg ICAgICAgICAgICA9IGN5YXBhX3JlbF9nZXRfYWNjZWxfc3Rva2VfdHlwZSh0b3VjaCwgZGVsdGFf eCwgZGVsdGFfeSk7DQorDQorICAgICAgIC8qIENvbXB1dGUgQWNjZWxlcmF0aW9uIENvbXBvbmVu dC4gKi8NCisgICAgICAgaWYgKCh0b3VjaC0+cHJldl9yZWxfeCA9PSBDWUFQQV9GSUxURVJfRU1Q VFlfREFUQSkNCisgICAgICAgICAgICAgICB8fCAodG91Y2gtPnByZXZfcmVsX3kgPT0gQ1lBUEFf RklMVEVSX0VNUFRZX0RBVEEpKSB7DQorICAgICAgICAgICAgICAgLyogZGVib3VuY2UgYmVmb3Jl IHN0YXJ0IGZpbHRlci4qLw0KKyAgICAgICAgICAgICAgIHRvdWNoLT5wcmV2X3JlbF94ID0gZGVs dGFfeDsNCisgICAgICAgICAgICAgICB0b3VjaC0+cHJldl9yZWxfeSA9IGRlbHRhX3k7DQorICAg ICAgICAgICAgICAgZmlsdGVyLT5yZWxfcmVzaWR1ZV94ID0gMDsNCisgICAgICAgICAgICAgICBm aWx0ZXItPnJlbF9yZXNpZHVlX3kgPSAwOw0KKyAgICAgICAgICAgICAgIGZpbHRlci0+cmVsX3By ZXZfYWNjZWxfaWlyX3ggPSBDWUFQQV9GSUxURVJfRU1QVFlfREFUQTsNCisgICAgICAgICAgICAg ICBmaWx0ZXItPnJlbF9wcmV2X2FjY2VsX2lpcl95ID0gQ1lBUEFfRklMVEVSX0VNUFRZX0RBVEE7 DQorICAgICAgICAgICAgICAgZmlsdGVyLT5yZWxfcHJldl9hY2NlbF9paXJfbW9kX3ggPSAwOw0K KyAgICAgICAgICAgICAgIGZpbHRlci0+cmVsX3ByZXZfYWNjZWxfaWlyX21vZF95ID0gMDsNCisg ICAgICAgICAgICAgICBmaWx0ZXItPnJlbF9wcmV2X3Jlc2lkdWVfYWNjZWxfeCA9IDA7DQorICAg ICAgICAgICAgICAgZmlsdGVyLT5yZWxfcHJldl9yZXNpZHVlX2FjY2VsX3kgPSAwOw0KKw0KKyAg ICAgICAgICAgICAgIHRvdWNoLT5yZWxfeCA9IGRlbHRhX3g7DQorICAgICAgICAgICAgICAgdG91 Y2gtPnJlbF95ID0gZGVsdGFfeTsNCisgICAgICAgICAgICAgICByZXBvcnRfZGF0YS0+cmVsX2Rl bHRhWCA9IGRlbHRhX3g7DQorICAgICAgICAgICAgICAgcmVwb3J0X2RhdGEtPnJlbF9kZWx0YVkg PSBkZWx0YV95Ow0KKw0KKyAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgfQ0KKw0KKyAg ICAgICAvKiBzb3J0IHNwZWVkIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuICovDQorICAgICAg IGlmIChmaWx0ZXItPnJlbF9zdHJva2Vfc3BlZWQgPT0gUkVMX1NUUk9LRV9TUEVFRF9TTE9XKSB7 DQorICAgICAgICAgICAgICAgc3BlZWRfbnVtZXJhdG9yID0gbW91c2VfYmFsbGlzdGljLT5yZWxf bW90aW9uX251bWVyYXRvcjsNCisgICAgICAgICAgICAgICBzcGVlZF9kZW5vbWluYXRvciA9IG1v dXNlX2JhbGxpc3RpYy0+cmVsX21vdGlvbl9kZW5vbWluYXRvcjsNCisgICAgICAgfSBlbHNlIHsN CisgICAgICAgICAgICAgICBzcGVlZF9udW1lcmF0b3IgPSBtb3VzZV9iYWxsaXN0aWMtPnJlbF9t ZWRpdW1fc3BlZWRfbnVtZXJhdG9yOw0KKyAgICAgICAgICAgICAgIHNwZWVkX2Rlbm9taW5hdG9y ID0gbW91c2VfYmFsbGlzdGljLT5yZWxfbW90aW9uX2Rlbm9taW5hdG9yOw0KKyAgICAgICB9DQor DQorICAgICAgIC8qIGFwcGx5IHNwZWVkL2FjY2VsZXJhdGlvbiBjb250cm9sLiAqLw0KKyAgICAg ICBkZWx0YV94ICo9IHNwZWVkX251bWVyYXRvcjsNCisgICAgICAgZGVsdGFfeSAqPSBzcGVlZF9u dW1lcmF0b3I7DQorDQorICAgICAgIGlmIChzcGVlZF9kZW5vbWluYXRvciA+IDEpIHsNCisgICAg ICAgICAgICAgICBkZWx0YV94ICs9IGZpbHRlci0+cmVsX3Jlc2lkdWVfeDsNCisgICAgICAgICAg ICAgICBmaWx0ZXItPnJlbF9yZXNpZHVlX3ggPSBkZWx0YV94ICUgc3BlZWRfZGVub21pbmF0b3I7 DQorICAgICAgICAgICAgICAgZGVsdGFfeCAvPSBzcGVlZF9kZW5vbWluYXRvcjsNCisNCisgICAg ICAgICAgICAgICBkZWx0YV95ICs9IGZpbHRlci0+cmVsX3Jlc2lkdWVfeTsNCisgICAgICAgICAg ICAgICBmaWx0ZXItPnJlbF9yZXNpZHVlX3kgPSBkZWx0YV95ICUgc3BlZWRfZGVub21pbmF0b3I7 DQorICAgICAgICAgICAgICAgZGVsdGFfeSAvPSBzcGVlZF9kZW5vbWluYXRvcjsNCisgICAgICAg fQ0KKw0KKyAgICAgICBpZiAoZmlsdGVyLT5yZWxfc3Ryb2tlX3NwZWVkID49IFJFTF9TVFJPS0Vf U1BFRURfRkFTVCkgew0KKyAgICAgICAgICAgICAgIGFjY2VsZXJhdGlvbl92ZWN0b3JfYW1wbGl0 dWRlID0gMTA7DQorICAgICAgICAgICAgICAgYWNjZWxlcmF0aW9uX3ZlY3Rvcl9hbXBsaXR1ZGUN CisgICAgICAgICAgICAgICAgICAgICAgICo9IG1vdXNlX2JhbGxpc3RpYy0+cmVsX2FjY2VsZXJh dGlvbl9udW1lcmF0b3I7DQorICAgICAgICAgICAgICAgYWNjZWxlcmF0aW9uX2Rlbm9taW5hdG9y DQorICAgICAgICAgICAgICAgICAgICAgICA9IG1vdXNlX2JhbGxpc3RpYy0+cmVsX2FjY2VsZXJh dGlvbl9kZW5vbWluYXRvcjsNCisNCisgICAgICAgICAgICAgICB0b3VjaC0+cHJldl9yZWxfeCA9 IGRlbHRhX3g7DQorICAgICAgICAgICAgICAgdG91Y2gtPnByZXZfcmVsX3kgPSBkZWx0YV95Ow0K Kw0KKyAgICAgICAgICAgICAgIGRlbHRhX2FjY2VsZXJhdGlvbl94ID0gZGVsdGFfeCAqIGFjY2Vs ZXJhdGlvbl92ZWN0b3JfYW1wbGl0dWRlOw0KKyAgICAgICAgICAgICAgIGRlbHRhX2FjY2VsZXJh dGlvbl95ID0gZGVsdGFfeSAqIGFjY2VsZXJhdGlvbl92ZWN0b3JfYW1wbGl0dWRlOw0KKw0KKyAg ICAgICAgICAgICAgIGlmIChhY2NlbGVyYXRpb25fZGVub21pbmF0b3IgPiAxKSB7DQorICAgICAg ICAgICAgICAgICAgICAgICBkZWx0YV9hY2NlbGVyYXRpb25feA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArPSBmaWx0ZXItPnJlbF9wcmV2X3Jlc2lkdWVfYWNjZWxfeDsNCisgICAg ICAgICAgICAgICAgICAgICAgIGZpbHRlci0+cmVsX3ByZXZfcmVzaWR1ZV9hY2NlbF94ID0gZGVs dGFfYWNjZWxlcmF0aW9uX3gNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAlIGFjY2VsZXJhdGlvbl9kZW5vbWluYXRvcjsNCisgICAgICAgICAgICAgICAgICAgICAgIGRl bHRhX2FjY2VsZXJhdGlvbl94IC89IGFjY2VsZXJhdGlvbl9kZW5vbWluYXRvcjsNCisNCisgICAg ICAgICAgICAgICAgICAgICAgIGRlbHRhX2FjY2VsZXJhdGlvbl95DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICs9IGZpbHRlci0+cmVsX3ByZXZfcmVzaWR1ZV9hY2NlbF95Ow0KKyAg ICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLT5yZWxfcHJldl9yZXNpZHVlX2FjY2VsX3kgPSBk ZWx0YV9hY2NlbGVyYXRpb25feQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICUgYWNjZWxlcmF0aW9uX2Rlbm9taW5hdG9yOw0KKyAgICAgICAgICAgICAgICAgICAgICAg ZGVsdGFfYWNjZWxlcmF0aW9uX3kgLz0gYWNjZWxlcmF0aW9uX2Rlbm9taW5hdG9yOw0KKyAgICAg ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICBkZWx0YV94ID0gZGVsdGFfYWNjZWxlcmF0 aW9uX3g7DQorICAgICAgICAgICAgICAgZGVsdGFfeSA9IGRlbHRhX2FjY2VsZXJhdGlvbl95Ow0K KyAgICAgICB9DQorDQorICAgICAgIC8qDQorICAgICAgICoqIDYuIEFwcGx5IElJUiBmaWx0ZXIg dG8gcmVsYXRpdmUgZGF0YS4NCisgICAgICAgKi8NCisgICAgICAgZGVsdGFfeCA9IGN5YXBhX2Zp bHRlcl9paXJfcmVsKHRvdWNoLCBkZWx0YV94LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZmaWx0ZXItPnJlbF9wcmV2X2FjY2VsX2lpcl94LA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWx0ZXItPnJlbF9wcmV2X2FjY2VsX2lpcl9t b2RfeCk7DQorICAgICAgIGRlbHRhX3kgPSBjeWFwYV9maWx0ZXJfaWlyX3JlbCh0b3VjaCwgZGVs dGFfeSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsdGVyLT5y ZWxfcHJldl9hY2NlbF9paXJfeSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZmlsdGVyLT5yZWxfcHJldl9hY2NlbF9paXJfbW9kX3kpOw0KKw0KKyAgICAgICBpZiAo ZGVsdGFfeCA+IG1vdXNlX2JhbGxpc3RpYy0+cmVsX21heF9hY2NlbGVyYXRpb25fc3BlZWQpDQor ICAgICAgICAgICAgICAgZGVsdGFfeCA9IG1vdXNlX2JhbGxpc3RpYy0+cmVsX21heF9hY2NlbGVy YXRpb25fc3BlZWQ7DQorICAgICAgIGVsc2UgaWYgKGRlbHRhX3ggPCAtbW91c2VfYmFsbGlzdGlj LT5yZWxfbWF4X2FjY2VsZXJhdGlvbl9zcGVlZCkNCisgICAgICAgICAgICAgICBkZWx0YV94ID0g LW1vdXNlX2JhbGxpc3RpYy0+cmVsX21heF9hY2NlbGVyYXRpb25fc3BlZWQ7DQorDQorICAgICAg IGlmIChkZWx0YV95ID4gbW91c2VfYmFsbGlzdGljLT5yZWxfbWF4X2FjY2VsZXJhdGlvbl9zcGVl ZCkNCisgICAgICAgICAgICAgICBkZWx0YV95ID0gbW91c2VfYmFsbGlzdGljLT5yZWxfbWF4X2Fj Y2VsZXJhdGlvbl9zcGVlZDsNCisgICAgICAgZWxzZSBpZiAoZGVsdGFfeSA8IC1tb3VzZV9iYWxs aXN0aWMtPnJlbF9tYXhfYWNjZWxlcmF0aW9uX3NwZWVkKQ0KKyAgICAgICAgICAgICAgIGRlbHRh X3kgPSAtbW91c2VfYmFsbGlzdGljLT5yZWxfbWF4X2FjY2VsZXJhdGlvbl9zcGVlZDsNCisNCisg ICAgICAgdG91Y2gtPnJlbF94ID0gZGVsdGFfeDsNCisgICAgICAgdG91Y2gtPnJlbF95ID0gZGVs dGFfeTsNCisgICAgICAgcmVwb3J0X2RhdGEtPnJlbF9kZWx0YVggPSBkZWx0YV94Ow0KKyAgICAg ICByZXBvcnRfZGF0YS0+cmVsX2RlbHRhWSA9IGRlbHRhX3k7DQorDQorICAgICAgIHJldHVybjsN Cit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIGN5YXBhX3JlcG9ydF9maW5nZXJzKHN0cnVjdCBp bnB1dF9kZXYgKmlucHV0LCBpbnQgZmluZ2VycykNCit7DQorICAgICAgIGlmIChmaW5nZXJzKSB7 DQorICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfRklOR0VS LCAoZmluZ2VycyA9PSAxKSk7DQorICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1 dCwgQlROX1RPT0xfRE9VQkxFVEFQLCAoZmluZ2VycyA9PSAyKSk7DQorICAgICAgICAgICAgICAg aW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfVFJJUExFVEFQLCAoZmluZ2VycyA9PSAz KSk7DQorICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfUVVB RFRBUCwgKGZpbmdlcnMgPiAzKSk7DQorICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAg aW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfRklOR0VSLCAwKTsNCisgICAgICAgICAg ICAgICBpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9PTF9ET1VCTEVUQVAsIDApOw0KKyAg ICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX1RSSVBMRVRBUCwg MCk7DQorICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfUVVB RFRBUCwgMCk7DQorICAgICAgIH0NCit9DQorDQorc3RhdGljIHZvaWQgY3lhcGFfcHJvY2Vzc19w cmV2X2dlc3R1cmVfcmVwb3J0KHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjeWFwYV9yZXBvcnRfZGF0YSAqcmVw b3J0X2RhdGEpDQorew0KKyAgICAgICBpbnQgaSwgajsNCisgICAgICAgdW5zaWduZWQgbG9uZyBn ZXN0dXJlX2RpZmY7DQorICAgICAgIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gdG91Y2gtPmlu cHV0Ow0KKyAgICAgICBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9rYmQgPSB0b3VjaC0+aW5wdXRf a2JkOw0KKw0KKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0ZJTkdFUlM7IGkrKykgew0KKyAg ICAgICAgICAgICAgIC8qIGdldCBhbGwgZGlmZmVuZW50IGdlc3R1cmVzIGluIHByZXYgYW5kIGN1 ci4gKi8NCisgICAgICAgICAgICAgICBnZXN0dXJlX2RpZmYNCisgICAgICAgICAgICAgICAgICAg ICAgID0gdG91Y2gtPnByZXZfYWN0aXZlX2dlc3R1cmVzW2ldDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF4gdG91Y2gtPmN1cl9hY3RpdmVfZ2VzdHVyZXNbaV07DQorICAgICAgICAg ICAgICAgLyogZ2V0IGFsbCBwcmV2IGdlc3R1cmVzIHRoYXQgaGFzIGJlZW4gY2FuY2VsZWQgaW4g Y3VyLiAqLw0KKyAgICAgICAgICAgICAgIGdlc3R1cmVfZGlmZiA9IGdlc3R1cmVfZGlmZiAmIHRv dWNoLT5wcmV2X2FjdGl2ZV9nZXN0dXJlc1tpXTsNCisgICAgICAgICAgICAgICBpZiAoZ2VzdHVy ZV9kaWZmKSB7DQorICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgKHNpemVv Zih1bnNpZ25lZCBsb25nKSo4KTsgaisrKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGNhbmNlbCBwcmV2aW91cyBleGlzdHMgZ2VzdHVyZS4gKi8NCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKChnZXN0dXJlX2RpZmYgPj4gaikgJiAxVUwpIHsNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKEdFU1RVUkVfSURfQ09E RShpLCBqKSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug R0VTVFVSRV9QQUxNX1JFSkVDVElPSU46DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIEdFU1RVUkVfU0lOR0xFX1RBUDoNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgR0VTVFVSRV9ET1VCTEVfVEFQOg0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHRVNUVVJFX1RBUF9BTkRfSE9MRDoNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR0VTVFVSRV9FREdFX01PVElP TjoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR0VTVFVSRV9E UkFHOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG91 Y2gtPnByZXZfYWJzX3ggPSAtMTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRvdWNoLT5wcmV2X2Fic195ID0gLTE7DQorDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT51c2VfYWJzb2x1dGVfbW9kZSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KGlucHV0LA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJU Tl9UT1VDSCwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9hYnMoaW5wdXQsDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJTX1BSRVNTVVJF LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDApOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjeWFwYV9yZXBvcnRfZmluZ2VycygNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgMCk7DQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu cHV0X3JlcG9ydF9rZXkoaW5wdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlROX0xFRlQsIDApOw0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9zeW5jKGlu cHV0KTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N CisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5YXBh X3Jlc2V0X2N1cnNvcl9maWx0ZXJzX2RhdGEoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoKTsNCisNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR0VTVFVSRV8yRl9aT09NX0lOOg0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG91Y2gtPnpvb21pbl9kZWx0 YSA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 b3VjaC0+em9vbV90cmlnZ2VkID0gMDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXRfa2JkLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfTEVGVENUUkws IDEpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5w dXRfc3luYyhpbnB1dF9rYmQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dF9rYmQsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9MRUZUQ1RSTCwgMCk7 DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9z eW5jKGlucHV0X2tiZCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YXNlIEdFU1RVUkVfMkZfWk9PTV9PVVQ6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0b3VjaC0+em9vbW91dF9kZWx0YSA9IDA7DQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+em9vbV90cmlnZ2VkID0g MDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0 X3JlcG9ydF9rZXkoaW5wdXRfa2JkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBLRVlfTEVGVENUUkwsIDEpOw0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfc3luYyhpbnB1dF9rYmQpOw0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfcmVw b3J0X2tleShpbnB1dF9rYmQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEtFWV9MRUZUQ1RSTCwgMCk7DQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9zeW5jKGlucHV0X2tiZCk7DQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdFU1RVUkVfU0NST0xMX1VQ Og0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR0VTVFVSRV8y Rl9TQ1JPTExfVVA6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0b3VjaC0+ZGVsdGFfc2Nyb2xsX3VwID0gMDsNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgR0VTVFVSRV9TQ1JPTExfRE9XTjoNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdFU1RVUkVfMkZfU0NST0xMX0RPV046DQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+ZGVs dGFfc2Nyb2xsX2Rvd24gPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSBHRVNUVVJFX1NDUk9MTF9MRUZUOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgR0VTVFVSRV8yRl9TQ1JPTExfTEVGVDoNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXRf a2JkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBLRVlfTEVGVFNISUZULCAxKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlucHV0X3N5bmMoaW5wdXRfa2JkKTsNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXRfa2Jk LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBLRVlfTEVGVFNISUZULCAwKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlucHV0X3N5bmMoaW5wdXRfa2JkKTsNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5oc2Nyb2xsX2NhbmNlbGVkID0gMTsN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5o c2Nyb2xsX2xlZnQgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG91Y2gtPmRlbHRhX3Njcm9sbF9sZWZ0ID0gMDsNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR0VTVFVSRV9TQ1JPTExfUklHSFQ6DQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHRVNUVVJFXzJGX1NDUk9MTF9S SUdIVDoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu cHV0X3JlcG9ydF9rZXkoaW5wdXRfa2JkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfTEVGVFNISUZULCAxKTsNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3N5bmMoaW5wdXRfa2Jk KTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0 X3JlcG9ydF9rZXkoaW5wdXRfa2JkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBLRVlfTEVGVFNISUZULCAwKTsNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3N5bmMoaW5wdXRfa2JkKTsN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5o c2Nyb2xsX2NhbmNlbGVkID0gMTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRvdWNoLT5oc2Nyb2xsX3JpZ2h0ID0gMDsNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5kZWx0YV9zY3JvbGxfcmlnaHQg PSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHRVNUVVJF XzJGX1JPVEFURToNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug R0VTVFVSRV8yRl9QSU5DSDoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgR0VTVFVSRV8yRl9UQVA6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIEdFU1RVUkVfMkZfRFJBRzoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICh0b3VjaC0+cGxhdGZvcm1fZGF0YQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPnVzZV9hYnNvbHV0 ZV9tb2RlKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXQsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlROX1RPVUNILCAwKTsN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5wdXRfcmVwb3J0X2FicyhpbnB1dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQlNfUFJFU1NVUkUsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7 DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlucHV0X3JlcG9ydF9rZXkoaW5wdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlROX0xFRlQsIDApOw0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWFwYV9yZXBv cnRfZmluZ2VycygNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnB1dCwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3N5bmMoaW5wdXQpOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG91Y2gtPmdlc3R1cmVfMkZf ZHJhZ19zdGFydGVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID0gMDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRvdWNoLT5wcmV2X2Fic194ID0gLTE7DQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+cHJldl9hYnNfeSA9IC0xOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHRVNUVVJFX0ZMSUNLOg0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR0VTVFVSRV8yRl9GTElD SzoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdFU1RVUkVf M0ZfRkxJQ0s6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBH RVNUVVJFXzRGX0ZMSUNLOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgR0VTVFVSRV81Rl9GTElDSzoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAg ICAgIH0NCisgICAgICAgICAgICAgICB9DQorICAgICAgIH0NCit9DQorDQorc3RhdGljIHZvaWQg Y3lhcGFfZ2VzdHVyZV9yZXBvcnQoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjeWFwYV9yZXBvcnRfZGF0YSAqcmVwb3J0X2Rh dGEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjeWFwYV9nZXN0dXJl ICpnZXN0dXJlKQ0KK3sNCisgICAgICAgc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSB0b3VjaC0+ aW5wdXQ7DQorICAgICAgIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X3doZWVsID0gdG91Y2gtPmlu cHV0X3doZWVsOw0KKyAgICAgICBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9rYmQgPSB0b3VjaC0+ aW5wdXRfa2JkOw0KKyAgICAgICBpbnQgZGVsdGEgPSAwOw0KKyAgICAgICBzdHJ1Y3QgY3lhcGFf cHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gJnRvdWNoLT5wcmVmZXJlbmNlczsNCisgICAgICAg aW50IHRocmVzaG9sZCA9IDA7DQorICAgICAgIGludCB2YWx1ZSA9IDA7DQorDQorICAgICAgIHN3 aXRjaCAoZ2VzdHVyZS0+aWQpIHsNCisgICAgICAgY2FzZSBHRVNUVVJFX1BBTE1fUkVKRUNUSU9J TjoNCisgICAgICAgICAgICAgICAvKiB3aGVuIHBhbG0gcmVqZWN0aW9uIGdlc3R1cmUgaXMgdHJp Z2dlZCwgZG8gbm90IG1vdmUgY3Vyc29yDQorICAgICAgICAgICAgICAgKiogIGFueSBtb3JlLCBq dXN0IG9wZXJhdGlvbiBhcyBubyBmaW5nZXIgdG91Y2hlZCBvbiB0cmFja3BhZC4NCisgICAgICAg ICAgICAgICAqLw0KKyAgICAgICAgICAgICAgIGlmICh0b3VjaC0+cGxhdGZvcm1fZGF0YS0+dXNl X2Fic29sdXRlX21vZGUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9r ZXkoaW5wdXQsIEJUTl9UT1VDSCwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9y ZXBvcnRfYWJzKGlucHV0LCBBQlNfUFJFU1NVUkUsIDApOw0KKyAgICAgICAgICAgICAgICAgICAg ICAgaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1RPT0xfV0lEVEgsIDApOw0KKyAgICAgICAg ICAgICAgICAgICAgICAgY3lhcGFfcmVwb3J0X2ZpbmdlcnMoaW5wdXQsIDApOw0KKyAgICAgICAg ICAgICAgIH0NCisNCisgICAgICAgICAgICAgICB0b3VjaC0+cHJldl9hYnNfeCA9IC0xOw0KKyAg ICAgICAgICAgICAgIHRvdWNoLT5wcmV2X2Fic195ID0gLTE7DQorDQorICAgICAgICAgICAgICAg aW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX0xFRlQsIHJlcG9ydF9kYXRhLT5idXR0b24gJiAw eDAxKTsNCisgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fUklHSFQs IHJlcG9ydF9kYXRhLT5idXR0b24gJiAweDAyKTsNCisgICAgICAgICAgICAgICBpbnB1dF9yZXBv cnRfa2V5KGlucHV0LCBCVE5fTUlERExFLCByZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgwNCk7DQor DQorICAgICAgICAgICAgICAgaW5wdXRfc3luYyhpbnB1dCk7DQorDQorICAgICAgICAgICAgICAg REJHUFJJTlRLKCgiJXM6IHJlcG9ydCBwYWxtIHJlamVjdGlvblxuIiwgX19mdW5jX18pKTsNCisg ICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgY2FzZSBHRVNUVVJFX1NJTkdMRV9UQVA6DQor ICAgICAgICAgICAgICAgaWYgKHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT51c2VfYWJzb2x1dGVfbW9k ZSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlRO X1RPVUNILCAwKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9hYnMoaW5w dXQsIEFCU19QUkVTU1VSRSwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBv cnRfa2V5KGlucHV0LCBCVE5fTEVGVCwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1 dF9zeW5jKGlucHV0KTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgIC8qIGluIGFic29sdXRl IG1vZGUgdXNlIGN5YXBhX3JlcG9ydF9maW5nZXJzKGlucHV0LCBOKQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgKiogdG8gdHJpZ2dlciBjbGljay4NCisgICAgICAgICAgICAgICAgICAgICAgICoq IHdoZW4gTiBjaGFuZ2UgZnJvbSBzbWFsbCB0byBsYXJnZSwNCisgICAgICAgICAgICAgICAgICAg ICAgICoqIGNsaWVjayB3aXRoIGJlIHRyaWdnZWQuKi8NCisgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOw0KKyAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICBpbnB1dF9yZXBv cnRfa2V5KGlucHV0LCBCVE5fTEVGVCwgMSk7DQorICAgICAgICAgICAgICAgaW5wdXRfc3luYyhp bnB1dCk7DQorDQorICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX0xF RlQsIDApOw0KKyAgICAgICAgICAgICAgIGlucHV0X3N5bmMoaW5wdXQpOw0KKw0KKyAgICAgICAg ICAgICAgIERCR1BSSU5USygoIiVzOiByZXBvcnQgc2luZ2xlIHRhcFxuIiwgX19mdW5jX18pKTsN CisgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgY2FzZSBHRVNUVVJFX0RPVUJMRV9UQVA6 DQorICAgICAgICAgICAgICAgaWYgKHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT51c2VfYWJzb2x1dGVf bW9kZSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwg QlROX1RPVUNILCAwKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9hYnMo aW5wdXQsIEFCU19QUkVTU1VSRSwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9y ZXBvcnRfa2V5KGlucHV0LCBCVE5fTEVGVCwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICBp bnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fUklHSFQsIDApOw0KKyAgICAgICAgICAgICAgICAg ICAgICAgaW5wdXRfc3luYyhpbnB1dCk7DQorICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAg ICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULCAxKTsNCisgICAgICAgICAg ICAgICBpbnB1dF9zeW5jKGlucHV0KTsNCisNCisgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRf a2V5KGlucHV0LCBCVE5fTEVGVCwgMCk7DQorICAgICAgICAgICAgICAgaW5wdXRfc3luYyhpbnB1 dCk7DQorDQorICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX0xFRlQs IDEpOw0KKyAgICAgICAgICAgICAgIGlucHV0X3N5bmMoaW5wdXQpOw0KKw0KKyAgICAgICAgICAg ICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULCAwKTsNCisgICAgICAgICAgICAg ICBpbnB1dF9zeW5jKGlucHV0KTsNCisNCisgICAgICAgICAgICAgICBEQkdQUklOVEsoKCIlczog cmVwb3J0IGRvdWJsZSB0YXBcbiIsIF9fZnVuY19fKSk7DQorICAgICAgICAgICAgICAgYnJlYWs7 DQorICAgICAgIGNhc2UgR0VTVFVSRV9UQVBfQU5EX0hPTEQ6DQorICAgICAgICAgICAgICAgLyog b25lIGZpbmdlciBjbGljayBhbmQgaG9sZCBmb3IgbW9yZSB0aGFuIGRlZmluaXRpb2luIHRpbWUs DQorICAgICAgICAgICAgICAgKiogdGhlbiB0byBkbyBzb21ldGhpbmcuICovDQorICAgICAgICAg ICAgICAgREJHUFJJTlRLKCgiJXM6IG5vIGdlc3R1cmUgZm9yIFRhcCBhbmQgaG9sZCB5ZXQuXG4i LCBfX2Z1bmNfXykpOw0KKyAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICBjYXNlIEdFU1RV UkVfRURHRV9NT1RJT046DQorICAgICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IG5vIGdlc3R1 cmUgZm9yIGVkZ2UgbW90aW9uIHlldC5cbiIsIF9fZnVuY19fKSk7DQorICAgICAgICAgICAgICAg YnJlYWs7DQorICAgICAgIGNhc2UgR0VTVFVSRV9EUkFHOg0KKyAgICAgICAgICAgICAgIC8qIDEt ZmluZ2VyIGRyYWcuIDEtZmluZ2VyIGRvdWJsZSBjbGljayBhbmQgaG9sZCwNCisgICAgICAgICAg ICAgICAqKiB0aGVuIG1vdmUgdGhlIGZpbmdlci4gKi8NCisgICAgICAgICAgICAgICBpZiAodG91 Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9hYnNvbHV0ZV9tb2RlKSB7DQorICAgICAgICAgICAgICAg ICAgICAgICB0b3VjaC0+eHlfdG91Y2hzX2luY2x1ZGVkX2JpdHMgPSAweDAxOw0KKyAgICAgICAg ICAgICAgICAgICAgICAgY3lhcGFfY2FsY3VsYXRlX2Fic194eSh0b3VjaCwgcmVwb3J0X2RhdGEp Ow0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlRO X1RPVUNILCAxKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9hYnMoaW5w dXQsIEFCU19YLCB0b3VjaC0+YWJzX3gpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRf cmVwb3J0X2FicyhpbnB1dCwgQUJTX1ksIHRvdWNoLT5hYnNfeSk7DQorICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfUFJFU1NVUkUsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydF9kYXRhLT5hdmdfcHJlc3N1cmUpOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgY3lhcGFfcmVwb3J0X2ZpbmdlcnMoaW5wdXQsIDEpOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX0xFRlQsIDEpOw0K KyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfc3luYyhpbnB1dCk7DQorICAgICAgICAgICAg ICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGN5YXBhX2ZpbHRlcl9jdXJzb3Jf bW92ZW1lbnQodG91Y2gsIHJlcG9ydF9kYXRhKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAg IGlucHV0X3JlcG9ydF9yZWwoaW5wdXQsIFJFTF9YLCByZXBvcnRfZGF0YS0+cmVsX2RlbHRhWCk7 DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfcmVsKGlucHV0LCBSRUxfWSwg cmVwb3J0X2RhdGEtPnJlbF9kZWx0YVkpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRf cmVwb3J0X2tleShpbnB1dCwgQlROX0xFRlQsIDEpOw0KKyAgICAgICAgICAgICAgICAgICAgICAg aW5wdXRfc3luYyhpbnB1dCk7DQorICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAg IERCR1BSSU5USygoIiVzOiAxIGZpbmdlciBkcmFnLlxuIiwgX19mdW5jX18pKTsNCisgICAgICAg ICAgICAgICBicmVhazsNCisgICAgICAgY2FzZSBHRVNUVVJFXzJGX1pPT01fSU46DQorICAgICAg ICAgICAgICAgZGVsdGEgPSBnZXN0dXJlLT5wYXJhbTI7DQorICAgICAgICAgICAgICAgLyogbm8g em9vbSBkZWx0YS4gKi8NCisgICAgICAgICAgICAgICBpZiAoZGVsdGEgPD0gMCkNCisgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgIHRvdWNoLT56b29taW5fZGVs dGEgKz0gZGVsdGE7DQorDQorICAgICAgICAgICAgICAgaWYgKHRvdWNoLT56b29tX3RyaWdnZWQg PT0gMCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dF9r YmQsIEtFWV9MRUZUQ1RSTCwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9zeW5j KGlucHV0X2tiZCk7DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KGlu cHV0X2tiZCwgS0VZX0xFRlRDVFJMLCAxKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0 X3N5bmMoaW5wdXRfa2JkKTsNCisgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT56b29tX3Ry aWdnZWQgPSAxOw0KKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAg ICAgICBpZiAodG91Y2gtPnpvb21pbl9kZWx0YQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA8PSBwcmVmZXJlbmNlcy0+em9vbS5kZWZhdWx0X3RocmVzaG9sZCkgew0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSAwOw0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2YWx1ZSA9IDE7DQorICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKHRvdWNoLT56b29taW5fZGVsdGENCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PiBwcmVmZXJlbmNlcy0+em9vbS5mYXN0X3RocmVzaG9sZCkgew0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aHJlc2hvbGQgPSAyOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2YWx1ZSA9IHRvdWNoLT56b29taW5fZGVsdGENCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvIHByZWZlcmVuY2VzLT56b29tLmZhc3RfdGhyZXNob2xkOw0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+em9vbWluX2RlbHRhDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJT0gcHJlZmVyZW5jZXMtPnpvb20uZmFz dF90aHJlc2hvbGQ7DQorICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSAxOw0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2YWx1ZSA9IDE7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRvdWNoLT56b29taW5fZGVsdGEgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0K KyAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRocmVzaG9sZCA+IDApIHsNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X3JlbChpbnB1dF93aGVlbCwgUkVM X1dIRUVMLCB2YWx1ZSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3N5 bmMoaW5wdXRfd2hlZWwpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hv bGQtLTsNCisgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICB9DQorDQor ICAgICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IDJGIHpvb20gaW4uXG4iLCBfX2Z1bmNfXykp Ow0KKyAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICBjYXNlIEdFU1RVUkVfMkZfWk9PTV9P VVQ6DQorICAgICAgICAgICAgICAgZGVsdGEgPSBnZXN0dXJlLT5wYXJhbTI7DQorICAgICAgICAg ICAgICAgLyogbm8gem9vbSBkZWx0YS4gKi8NCisgICAgICAgICAgICAgICBpZiAoZGVsdGEgPD0g MCkNCisgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgIHRvdWNo LT56b29tb3V0X2RlbHRhICs9IGRlbHRhOw0KKw0KKyAgICAgICAgICAgICAgIGlmICh0b3VjaC0+ em9vbV90cmlnZ2VkID09IDApIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9y dF9rZXkoaW5wdXRfa2JkLCBLRVlfTEVGVENUUkwsIDApOw0KKyAgICAgICAgICAgICAgICAgICAg ICAgaW5wdXRfc3luYyhpbnB1dF9rYmQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRf cmVwb3J0X2tleShpbnB1dF9rYmQsIEtFWV9MRUZUQ1RSTCwgMSk7DQorICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9zeW5jKGlucHV0X2tiZCk7DQorICAgICAgICAgICAgICAgICAgICAgICB0 b3VjaC0+em9vbV90cmlnZ2VkID0gMTsNCisgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAg ICAgICAgICAgICAgICAgICAgdmFsdWUgPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYg KHRvdWNoLT56b29tb3V0X2RlbHRhDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw9 IHByZWZlcmVuY2VzLT56b29tLmRlZmF1bHRfdGhyZXNob2xkKSB7DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZhbHVlID0gMTsNCisgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG91 Y2gtPnpvb21vdXRfZGVsdGENCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiBwcmVm ZXJlbmNlcy0+em9vbS5mYXN0X3RocmVzaG9sZCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aHJlc2hvbGQgPSAyOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 YWx1ZSA9IHRvdWNoLT56b29tb3V0X2RlbHRhDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyBwcmVmZXJlbmNlcy0+em9vbS5mYXN0X3RocmVzaG9sZDsNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG91Y2gtPnpvb21vdXRfZGVsdGENCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlPSBwcmVmZXJlbmNlcy0+em9vbS5mYXN0X3Ro cmVzaG9sZDsNCisgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IDE7DQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlID0gMTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG91 Y2gtPnpvb21vdXRfZGVsdGEgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAg ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRocmVzaG9sZCA+IDApIHsNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X3JlbChpbnB1dF93aGVlbCwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTF9XSEVFTCwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC12YWx1ZSk7DQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3N5bmMoaW5wdXRfd2hlZWwpOw0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQtLTsNCisgICAgICAgICAg ICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgREJH UFJJTlRLKCgiJXM6IDJGIHpvb20gb3V0LlxuIiwgX19mdW5jX18pKTsNCisgICAgICAgICAgICAg ICBicmVhazsNCisgICAgICAgY2FzZSBHRVNUVVJFX1NDUk9MTF9VUDoNCisgICAgICAgY2FzZSBH RVNUVVJFXzJGX1NDUk9MTF9VUDoNCisgICAgICAgICAgICAgICBpZiAodG91Y2gtPmhzY3JvbGxf Y2FuY2VsZWQpIHsNCisgICAgICAgICAgICAgICAgICAgICAgIC8qIGF2b2lkIFZTY3JvbGwgbWlz cyB0cmlnZ2VkIGFzIEhTY3JvbGwuICovDQorICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+ aHNjcm9sbF9jYW5jZWxlZCA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBv cnRfa2V5KGlucHV0X2tiZCwgS0VZX0xFRlRTSElGVCwgMCk7DQorICAgICAgICAgICAgICAgICAg ICAgICBpbnB1dF9zeW5jKGlucHV0X2tiZCk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsNCisgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgZGVsdGEgPSBnZXN0 dXJlLT5wYXJhbTI7DQorICAgICAgICAgICAgICAgdGhyZXNob2xkID0gcHJlZmVyZW5jZXMtPnZz Y3JvbGwuZGVmYXVsdF90aHJlc2hvbGQ7DQorICAgICAgICAgICAgICAgdmFsdWUgPSAxOw0KKyAg ICAgICAgICAgICAgIHRvdWNoLT5kZWx0YV9zY3JvbGxfdXAgKz0gZGVsdGE7DQorDQorICAgICAg ICAgICAgICAgaWYgKHRvdWNoLT5kZWx0YV9zY3JvbGxfdXAgPD0gMCkgew0KKyAgICAgICAgICAg ICAgICAgICAgICAgLyogbm8gc2Nyb2xsIG1vdmUsIGl0J3Mgbm90IG5lZWQgdG8gcmVwb3J0LiAq Lw0KKyAgICAgICAgICAgICAgICAgICAgICAgdG91Y2gtPmRlbHRhX3Njcm9sbF91cCA9IDA7DQor ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICB9DQorDQorICAg ICAgICAgICAgICAgaWYgKHRvdWNoLT5kZWx0YV9zY3JvbGxfdXAgPCB0aHJlc2hvbGQpIHsNCisg ICAgICAgICAgICAgICAgICAgICAgIC8qIGtlZXAgc21hbGwgbW92ZW1lbnQgYWxzbyBjYW4gd29y ay4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9yZWwoaW5wdXRfd2hl ZWwsIFJFTF9XSEVFTCwgdmFsdWUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfc3lu YyhpbnB1dF93aGVlbCk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+ZGVsdGFf c2Nyb2xsX3VwID0gMDsNCisgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAg ICAgICAgIH0NCisNCisgICAgICAgICAgICAgICBpZiAodG91Y2gtPmRlbHRhX3Njcm9sbF91cA0K KyAgICAgICAgICAgICAgICAgICAgICAgPiBwcmVmZXJlbmNlcy0+dnNjcm9sbC5mYXN0X3RocmVz aG9sZCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgLyogZmFzdCBzY3JvbGwsIHJlc2V0IHRo cmVzaG9sZCB2YWx1ZS4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IDE7 DQorICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDE2Ow0KKyAgICAgICAgICAgICAgIH0g ZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgICAvKiBtaWRkbGUgc2Nyb2xsIHNwZWVkLiAq Lw0KKyAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkID0gMjsNCisgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlID0gMjsNCisgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAg ICAgd2hpbGUgKHRvdWNoLT5kZWx0YV9zY3JvbGxfdXAgPj0gdGhyZXNob2xkKSB7DQorICAgICAg ICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfcmVsKGlucHV0X3doZWVsLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTF9XSEVFTCwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSoyL3RocmVzaG9sZCk7DQorICAgICAgICAg ICAgICAgICAgICAgICBpbnB1dF9zeW5jKGlucHV0X3doZWVsKTsNCisNCisgICAgICAgICAgICAg ICAgICAgICAgIHRvdWNoLT5kZWx0YV9zY3JvbGxfdXAgLT0gdGhyZXNob2xkKnZhbHVlOw0KKyAg ICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICBEQkdQUklOVEsoKCIlczogc2Nyb2xs IHVwLCBmaW5nZXJzPSVkXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHJl cG9ydF9kYXRhLT50b3VjaF9maW5nZXJzKSk7DQorICAgICAgICAgICAgICAgYnJlYWs7DQorICAg ICAgIGNhc2UgR0VTVFVSRV9TQ1JPTExfRE9XTjoNCisgICAgICAgY2FzZSBHRVNUVVJFXzJGX1ND Uk9MTF9ET1dOOg0KKyAgICAgICAgICAgICAgIGlmICh0b3VjaC0+aHNjcm9sbF9jYW5jZWxlZCkg ew0KKyAgICAgICAgICAgICAgICAgICAgICAgLyogYXZvaWQgVlNjcm9sbCBtaXNzIHRyaWdnZWQg YXMgSFNjcm9sbC4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5oc2Nyb2xsX2Nh bmNlbGVkID0gMDsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5w dXRfa2JkLCBLRVlfTEVGVFNISUZULCAwKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0 X3N5bmMoaW5wdXRfa2JkKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAg ICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICBkZWx0YSA9IGdlc3R1cmUtPnBhcmFt MjsNCisgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSBwcmVmZXJlbmNlcy0+dnNjcm9sbC5kZWZh dWx0X3RocmVzaG9sZDsNCisgICAgICAgICAgICAgICB2YWx1ZSA9IDE7DQorICAgICAgICAgICAg ICAgdG91Y2gtPmRlbHRhX3Njcm9sbF9kb3duICs9IGRlbHRhOw0KKw0KKyAgICAgICAgICAgICAg IGlmICh0b3VjaC0+ZGVsdGFfc2Nyb2xsX2Rvd24gPD0gMCkgew0KKyAgICAgICAgICAgICAgICAg ICAgICAgLyogbm8gc2Nyb2xsIG1vdmUsIGl0J3Mgbm90IG5lZWQgdG8gcmVwb3J0LiAqLw0KKyAg ICAgICAgICAgICAgICAgICAgICAgdG91Y2gtPmRlbHRhX3Njcm9sbF9kb3duID0gMDsNCisgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgIH0NCisNCisgICAgICAg ICAgICAgICBpZiAodG91Y2gtPmRlbHRhX3Njcm9sbF9kb3duIDwgdGhyZXNob2xkKSB7DQorICAg ICAgICAgICAgICAgICAgICAgICAvKiBrZWVwIHNtYWxsIG1vdmVtZW50IGFsc28gY2FuIHdvcmsu ICovDQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfcmVsKGlucHV0X3doZWVs LCBSRUxfV0hFRUwsIC12YWx1ZSk7DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9zeW5j KGlucHV0X3doZWVsKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5kZWx0YV9z Y3JvbGxfZG93biA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAg ICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgaWYgKHRvdWNoLT5kZWx0YV9zY3JvbGxfZG93 bg0KKyAgICAgICAgICAgICAgICAgICAgICAgPiBwcmVmZXJlbmNlcy0+dnNjcm9sbC5mYXN0X3Ro cmVzaG9sZCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgLyogZmFzdCBzY3JvbGwsIHJlc2V0 IHRocmVzaG9sZCB2YWx1ZS4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9 IDE7DQorICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDE2Ow0KKyAgICAgICAgICAgICAg IH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgICAvKiBtaWRkbGUgc2Nyb2xsIHNwZWVk LiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkID0gMjsNCisgICAgICAgICAg ICAgICAgICAgICAgIHZhbHVlID0gMjsNCisgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAg ICAgICAgd2hpbGUgKHRvdWNoLT5kZWx0YV9zY3JvbGxfZG93biA+PSB0aHJlc2hvbGQpIHsNCisg ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9yZWwoaW5wdXRfd2hlZWwsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMX1dIRUVMLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC12YWx1ZSoyL3RocmVzaG9sZCk7DQorICAg ICAgICAgICAgICAgICAgICAgICBpbnB1dF9zeW5jKGlucHV0X3doZWVsKTsNCisNCisgICAgICAg ICAgICAgICAgICAgICAgIHRvdWNoLT5kZWx0YV9zY3JvbGxfZG93biAtPSB0aHJlc2hvbGQqdmFs dWU7DQorICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgIERCR1BSSU5USygoIiVz OiBzY3JvbGwgZG93biwgZmluZ2VyPSVkXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZnVuY19fLCByZXBvcnRfZGF0YS0+dG91Y2hfZmluZ2VycykpOw0KKyAg ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICBjYXNlIEdFU1RVUkVfU0NST0xMX0xFRlQ6DQor ICAgICAgIGNhc2UgR0VTVFVSRV8yRl9TQ1JPTExfTEVGVDoNCisgICAgICAgICAgICAgICBkZWx0 YSA9IGdlc3R1cmUtPnBhcmFtMjsNCisgICAgICAgICAgICAgICBpZiAoMCA9PSB0b3VjaC0+aHNj cm9sbF9sZWZ0KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAvKiB0byByZXBvcnQgbGVmdCBz aGlmdCBmaXJzdGx5IGlub3JkZXIgdG8gYXZvaWQgbWlzcw0KKyAgICAgICAgICAgICAgICAgICAg ICAgKiogdHJpZyB2c2Nyb2xsLiBiZWNhdXNlLCBmb3IgMC45LjEwMSBjaHJvbWl1bSBvcywNCisg ICAgICAgICAgICAgICAgICAgICAgICoqIGl0IHNlZW1zIHRoYXQgd2hlbiBsZWZ0IHNoaWZ0IGlz IHByZXNzZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAqKiB0aGVuIHNjcm9sbCBzb29uLCB0 aGUgY29tYmluZWQgZ2VzdHVyZSB3b24ndA0KKyAgICAgICAgICAgICAgICAgICAgICAgKiogdGFr ZSBlZmZlY3Qgc29vbiwgaXQgd2lsbCBoYXZlIHNvbWUgZGVsYXkuDQorICAgICAgICAgICAgICAg ICAgICAgICAqKiBTbyBhZGQgYSBkZWJvdW5jZSB0byBhdm9pZCB0aGlzIGlzc3VlLg0KKyAgICAg ICAgICAgICAgICAgICAgICAgKi8NCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9y dF9rZXkoaW5wdXRfa2JkLCBLRVlfTEVGVFNISUZULCAwKTsNCisgICAgICAgICAgICAgICAgICAg ICAgIGlucHV0X3N5bmMoaW5wdXRfa2JkKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0 X3JlcG9ydF9rZXkoaW5wdXRfa2JkLCBLRVlfTEVGVFNISUZULCAxKTsNCisgICAgICAgICAgICAg ICAgICAgICAgIGlucHV0X3N5bmMoaW5wdXRfa2JkKTsNCisgICAgICAgICAgICAgICAgICAgICAg IHRvdWNoLT5oc2Nyb2xsX2xlZnQgPSBkZWx0YTsNCisgICAgICAgICAgICAgICB9IGVsc2Ugew0K KyAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkID0gcHJlZmVyZW5jZXMtPmhzY3JvbGwu ZGVmYXVsdF90aHJlc2hvbGQ7DQorICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDE7DQor ICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+ZGVsdGFfc2Nyb2xsX2xlZnQgKz0gZGVsdGE7 DQorDQorICAgICAgICAgICAgICAgICAgICAgICBpZiAodG91Y2gtPmRlbHRhX3Njcm9sbF9sZWZ0 IDw9IDApIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gc2Nyb2xsIG1v dmUsIGl0J3Mgbm90IG5lZWQgdG8gcmVwb3J0LiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0b3VjaC0+ZGVsdGFfc2Nyb2xsX2xlZnQgPSAwOw0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAg ICAgICAgICAgICAgICAgICAgIGlmICh0b3VjaC0+ZGVsdGFfc2Nyb2xsX2xlZnQgPCB0aHJlc2hv bGQpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoga2VlcCBzbWFsbCBtb3Zl bWVudCBhbHNvIGNhbiB3b3JrLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnB1dF9yZXBvcnRfcmVsKGlucHV0X3doZWVsLCBSRUxfV0hFRUwsIHZhbHVlKTsNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfc3luYyhpbnB1dF93aGVlbCk7DQorDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5kZWx0YV9zY3JvbGxfbGVmdCA9IDA7 DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAg ICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvdWNoLT5kZWx0YV9z Y3JvbGxfbGVmdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IHByZWZlcmVuY2Vz LT5oc2Nyb2xsLmZhc3RfdGhyZXNob2xkKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGZhc3Qgc2Nyb2xsLCByZXNldCB0aHJlc2hvbGQgdmFsdWUuICovDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IDE7DQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZhbHVlID0gMTY7DQorICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug ew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtaWRkbGUgc2Nyb2xsIHNwZWVk LiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSAyOw0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDI7DQorICAgICAgICAgICAgICAg ICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG91Y2gtPmRlbHRh X3Njcm9sbF9sZWZ0ID49IHRocmVzaG9sZCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnB1dF9yZXBvcnRfcmVsKGlucHV0X3doZWVsLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMX1dIRUVMLA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUqMi90aHJlc2hvbGQpOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9zeW5jKGlucHV0X3doZWVsKTsNCisNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG91Y2gtPmRlbHRhX3Njcm9sbF9sZWZ0IC09 IHRocmVzaG9sZCp2YWx1ZTsNCisgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAg ICAgICB9DQorDQorICAgICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IHNjcm9sbCBsZWZ0LCBm aW5nZXI9JWRcbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19m dW5jX18sIHJlcG9ydF9kYXRhLT50b3VjaF9maW5nZXJzKSk7DQorICAgICAgICAgICAgICAgYnJl YWs7DQorICAgICAgIGNhc2UgR0VTVFVSRV9TQ1JPTExfUklHSFQ6DQorICAgICAgIGNhc2UgR0VT VFVSRV8yRl9TQ1JPTExfUklHSFQ6DQorICAgICAgICAgICAgICAgZGVsdGEgPSBnZXN0dXJlLT5w YXJhbTI7DQorICAgICAgICAgICAgICAgaWYgKDAgPT0gdG91Y2gtPmhzY3JvbGxfcmlnaHQpIHsN CisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXRfa2JkLCBLRVlf TEVGVFNISUZULCAwKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3N5bmMoaW5wdXRf a2JkKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXRfa2Jk LCBLRVlfTEVGVFNISUZULCAxKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3N5bmMo aW5wdXRfa2JkKTsNCisgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5oc2Nyb2xsX3JpZ2h0 ID0gZGVsdGE7DQorICAgICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAg ICAgIHRocmVzaG9sZCA9IHByZWZlcmVuY2VzLT5oc2Nyb2xsLmRlZmF1bHRfdGhyZXNob2xkOw0K KyAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAxOw0KKyAgICAgICAgICAgICAgICAgICAg ICAgdG91Y2gtPmRlbHRhX3Njcm9sbF9yaWdodCArPSBkZWx0YTsNCisNCisgICAgICAgICAgICAg ICAgICAgICAgIGlmICh0b3VjaC0+ZGVsdGFfc2Nyb2xsX3JpZ2h0IDw9IDApIHsNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gc2Nyb2xsIG1vdmUsIGl0J3Mgbm90IG5lZWQg dG8gcmVwb3J0LiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+ZGVs dGFfc2Nyb2xsX3JpZ2h0ID0gMDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7DQorICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICAg ICBpZiAodG91Y2gtPmRlbHRhX3Njcm9sbF9yaWdodCA8IHRocmVzaG9sZCkgew0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBrZWVwIHNtYWxsIG1vdmVtZW50IGFsc28gY2FuIHdv cmsuICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9yZWwo aW5wdXRfd2hlZWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSRUxfV0hFRUwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtdmFsdWUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9z eW5jKGlucHV0X3doZWVsKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG91 Y2gtPmRlbHRhX3Njcm9sbF9yaWdodCA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHRvdWNoLT5kZWx0YV9zY3JvbGxfcmlnaHQNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgPiBwcmVmZXJlbmNlcy0+aHNjcm9sbC5mYXN0X3RocmVzaG9sZCkgew0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmYXN0IHNjcm9sbCwgcmVzZXQgdGhy ZXNob2xkIHZhbHVlLiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hv bGQgPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDE2Ow0KKyAg ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogbWlkZGxlIHNjcm9sbCBzcGVlZC4gKi8NCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhyZXNob2xkID0gMjsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmFsdWUgPSAyOw0KKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAg ICAgICAgICAgd2hpbGUgKHRvdWNoLT5kZWx0YV9zY3JvbGxfcmlnaHQgPj0gdGhyZXNob2xkKSB7 DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9yZWwoaW5wdXRf d2hlZWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS RUxfV0hFRUwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtdmFsdWUqMi90aHJlc2hvbGQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnB1dF9zeW5jKGlucHV0X3doZWVsKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdG91Y2gtPmRlbHRhX3Njcm9sbF9yaWdodCAtPSB0aHJlc2hvbGQqdmFsdWU7DQorICAgICAg ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAg IERCR1BSSU5USygoIiVzOiBzY3JvbGwgcmlnaHQsIGZpbmdlcj0lZFxuIiwNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcmVwb3J0X2RhdGEtPnRvdWNo X2ZpbmdlcnMpKTsNCisgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgY2FzZSBHRVNUVVJF XzJGX1JPVEFURToNCisgICAgICAgICAgICAgICBEQkdQUklOVEsoKCIlczogMiBmaW5nZXIgcm90 YXRlLlxuIiwgX19mdW5jX18pKTsNCisgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgY2Fz ZSBHRVNUVVJFXzJGX1BJTkNIOg0KKyAgICAgICAgICAgICAgIERCR1BSSU5USygoIiVzOiAyIGZp bmdlciBwaW5jaC5cbiIsIF9fZnVuY19fKSk7DQorICAgICAgICAgICAgICAgYnJlYWs7DQorICAg ICAgIGNhc2UgR0VTVFVSRV8yRl9UQVA6DQorICAgICAgICAgICAgICAgLyogMi1maW5nZXIgdGFw LCBhY3RpdmUgbGlrZSByaWdodCBidXR0b24gcHJlc3MgYW5kIHJlbGFzZS4gKi8NCisgICAgICAg ICAgICAgICBpZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9hYnNvbHV0ZV9tb2RlKSB7DQor ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gs IDApOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJT X1BSRVNTVVJFLCAwKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXko aW5wdXQsIEJUTl9MRUZULCAwKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9y dF9rZXkoaW5wdXQsIEJUTl9SSUdIVCwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1 dF9zeW5jKGlucHV0KTsNCisgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgaW5w dXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1JJR0hULCAxKTsNCisgICAgICAgICAgICAgICBpbnB1 dF9zeW5jKGlucHV0KTsNCisNCisgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KGlucHV0 LCBCVE5fUklHSFQsIDApOw0KKyAgICAgICAgICAgICAgIGlucHV0X3N5bmMoaW5wdXQpOw0KKw0K KyAgICAgICAgICAgICAgIERCR1BSSU5USygoIiVzOiByZXBvcnQgMiBmaW5nZXJzIHRhcCwgXA0K KyAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlIGxpa2UgcmlnaHQgYnV0dG9uLlxuIiwgICBf X2Z1bmNfXykpOw0KKyAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICBjYXNlIEdFU1RVUkVf MkZfRFJBRzoNCisgICAgICAgICAgICAgICAvKiBmaXJzdCBmaW5nZXIgY2xpY2sgYW5kIGhvbGQs DQorICAgICAgICAgICAgICAgKiogYW5kIHNlY29uZCBmaW5nZXIgbW92aW5nIGZvciBkcmFnZ2lu Zy4gKi8NCisgICAgICAgICAgICAgICBpZiAodG91Y2gtPmdlc3R1cmVfMkZfZHJhZ19zdGFydGVk ID09IDApIHsNCisgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT54eV90b3VjaHNfaW5jbHVk ZWRfYml0cyA9IDB4MDE7DQorICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+cHJldl9hYnNf eCA9IC0xOw0KKyAgICAgICAgICAgICAgICAgICAgICAgdG91Y2gtPnByZXZfYWJzX3kgPSAtMTsN CisgICAgICAgICAgICAgICAgICAgICAgIGN5YXBhX2NhbGN1bGF0ZV9hYnNfeHkodG91Y2gsIHJl cG9ydF9kYXRhKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0bHksIG1vdmUg bW92ZSBjdXJzb3IgdG8gdGhlIHRhcmdldCBmb3IgZHJhZy4gKi8NCisgICAgICAgICAgICAgICAg ICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgMSk7DQorICAgICAgICAg ICAgICAgICAgICAgICBpZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9hYnNvbHV0ZV9tb2Rl KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9hYnMoaW5w dXQsIEFCU19YLCB0b3VjaC0+YWJzX3gpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfWSwgdG91Y2gtPmFic195KTsNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFCU19QUkVTU1VSRSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydF9kYXRh LT5hdmdfcHJlc3N1cmUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWFwYV9y ZXBvcnRfZmluZ2VycyhpbnB1dCwgMSk7DQorICAgICAgICAgICAgICAgICAgICAgICB9DQorICAg ICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fTEVGVCwgMCk7 DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fUklH SFQsIDApOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfc3luYyhpbnB1dCk7DQorDQor ICAgICAgICAgICAgICAgICAgICAgICAvKiBzZWNvbmQsIHN0b3AgY3Vyc29yIG9uIHRoZSB0YXJn ZXQgZm9yIGRyYWcuICovDQorICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+cHJldl9hYnNf eCA9IC0xOw0KKyAgICAgICAgICAgICAgICAgICAgICAgdG91Y2gtPnByZXZfYWJzX3kgPSAtMTsN CisgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b3VjaC0+cGxhdGZvcm1fZGF0YS0+dXNlX2Fi c29sdXRlX21vZGUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfcmVw b3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAwKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1BSRVNTVVJFLCAwKTsNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfc3luYyhpbnB1dCk7DQorICAgICAgICAgICAg ICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlyZCwgc2VsZWN0 IHRoZSB0YXJnZXQgZm9yIGRyYWcuICovDQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9y ZXBvcnRfa2V5KGlucHV0LCBCVE5fTEVGVCwgMSk7DQorICAgICAgICAgICAgICAgICAgICAgICBp bnB1dF9zeW5jKGlucHV0KTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgIC8qIGdvIHRvIHN0 ZXAgZm91ci4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5nZXN0dXJlXzJGX2Ry YWdfc3RhcnRlZCA9IDE7DQorICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgIC8q IGZvdXJ0aCwgbW92ZSBjdXJzb3IgZm9yIGRyYWdnaW5nLiAqLw0KKyAgICAgICAgICAgICAgIHRv dWNoLT54eV90b3VjaHNfaW5jbHVkZWRfYml0cyA9IDB4MDI7DQorICAgICAgICAgICAgICAgY3lh cGFfY2FsY3VsYXRlX2Fic194eSh0b3VjaCwgcmVwb3J0X2RhdGEpOw0KKw0KKyAgICAgICAgICAg ICAgIGlmICh0b3VjaC0+cGxhdGZvcm1fZGF0YS0+dXNlX2Fic29sdXRlX21vZGUpIHsNCisgICAg ICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgMSk7 DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfWCwg dG91Y2gtPmFic194KTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9hYnMo aW5wdXQsIEFCU19ZLCB0b3VjaC0+YWJzX3kpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaW5w dXRfcmVwb3J0X2FicyhpbnB1dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBQlNfUFJFU1NVUkUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVwb3J0X2RhdGEtPmF2Z19wcmVzc3VyZSk7DQorICAgICAgICAgICAgICAgICAgICAgICBj eWFwYV9yZXBvcnRfZmluZ2VycyhpbnB1dCwgMSk7DQorICAgICAgICAgICAgICAgfSBlbHNlIHsN CisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9yZWwoaW5wdXQsIFJFTF9YLCBy ZXBvcnRfZGF0YS0+cmVsX2RlbHRhWCk7DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9y ZXBvcnRfcmVsKGlucHV0LCBSRUxfWSwgcmVwb3J0X2RhdGEtPnJlbF9kZWx0YVkpOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgaW5wdXRfc3luYyhpbnB1dCk7DQorICAgICAgICAgICAgICAgfQ0K KyAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULCAxKTsNCisg ICAgICAgICAgICAgICBpbnB1dF9zeW5jKGlucHV0KTsNCisNCisgICAgICAgICAgICAgICBEQkdQ UklOVEsoKCIlczogcmVwb3J0IDIgZmluZ2VycyBkcmFnXG4iLCBfX2Z1bmNfXykpOw0KKyAgICAg ICAgICAgICAgIGJyZWFrOw0KKyAgICAgICBjYXNlIEdFU1RVUkVfRkxJQ0s6DQorICAgICAgIGNh c2UgR0VTVFVSRV8yRl9GTElDSzoNCisgICAgICAgY2FzZSBHRVNUVVJFXzNGX0ZMSUNLOg0KKyAg ICAgICBjYXNlIEdFU1RVUkVfNEZfRkxJQ0s6DQorICAgICAgIGNhc2UgR0VTVFVSRV81Rl9GTElD SzoNCisgICAgICAgICAgICAgICB0b3VjaC0+eHlfdG91Y2hzX2luY2x1ZGVkX2JpdHMgPSByZXBv cnRfZGF0YS0+dG91Y2hfZmluZ2VyczsNCisgICAgICAgICAgICAgICBEQkdQUklOVEsoKCIlczog bm8gZmxpY2sgZ2VzdHVyZSBzdXBwb3J0ZWQgeWV0LCAsIGZpbmdlcj0lZFxuIiwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcmVwb3J0X2RhdGEtPnRv dWNoX2ZpbmdlcnMpKTsNCisgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgZGVmYXVsdDoN CisgICAgICAgICAgICAgICBEQkdQUklOVEsoKCIlczogZGVmYXVsdCwgdW5rbm93biBnZXN0dXJl IGZvciByZXBvcnRpbmcuXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZnVuY19fKSk7DQorICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgIH0NCit9DQor DQorc3RhdGljIGludCBjeWFwYV9yZWxfaW5wdXRfcmVwb3J0X2RhdGEoc3RydWN0IGN5YXBhX2ky YyAqdG91Y2gsDQorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3lhcGFfcmVwb3J0X2Rh dGEgKnJlcG9ydF9kYXRhKQ0KK3sNCisgICAgICAgaW50IGk7DQorICAgICAgIHN0cnVjdCBpbnB1 dF9kZXYgKmlucHV0ID0gdG91Y2gtPmlucHV0Ow0KKw0KKyAgICAgICAvKiBzdGVwIDE6IHByb2Nl c3MgZ2VzdHVyZXMgZmlyc3RseSBpZiB0cmlnZ2VkLiAqLw0KKyAgICAgICBjeWFwYV9wcm9jZXNz X3ByZXZfZ2VzdHVyZV9yZXBvcnQodG91Y2gsIHJlcG9ydF9kYXRhKTsNCisgICAgICAgaWYgKHJl cG9ydF9kYXRhLT5nZXN0dXJlc19jb3VudCA+IDApIHsNCisgICAgICAgICAgICAgICBEQkdQUklO VEsoKCIlczogZG8gZ2VzdHVyZSByZXBvcnQsIGdlc3R1cmVzX2NvdW50ID0gJWRcbiIsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCByZXBvcnRfZGF0YS0+Z2VzdHVy ZXNfY291bnQpKTsNCisgICAgICAgICAgICAgICAvKiBnZXN0dXJlIHRyaWdnZWQgKi8NCisgICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVwb3J0X2RhdGEtPmdlc3R1cmVzX2NvdW50OyBp KyspIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGN5YXBhX2dlc3R1cmVfcmVwb3J0KHRvdWNo LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydF9kYXRhLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXBvcnRfZGF0YS0+Z2Vz dHVyZXNbaV0pOw0KKyAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAvKiB3aGVu IGdlc3R1cmVzIGFyZSB0cmlnZ2VkLCBjdXJzb3Igc2hvdWxkIG5vdCBtb3ZlLiAqLw0KKyAgICAg ICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgIC8qIHdoZW4gbXVsdGktZmluZ2VycyB0b3VjaGVk LCBjdXJzb3VyIHNob3VsZCBhbHNvIG5vdCBtb3ZlLiAqLw0KKyAgICAgICAgICAgICAgIGlmIChy ZXBvcnRfZGF0YS0+dG91Y2hfZmluZ2VycyA9PSAxKSB7DQorICAgICAgICAgICAgICAgICAgICAg ICAvKiBhcHBseSBjdXJzb3IgbW92ZW1lbnQgZmlsdGVycyB0bw0KKyAgICAgICAgICAgICAgICAg ICAgICAgKiogaW1wcm92ZSBjdXJzb3IgcGVyZm9ybWFuY2UuICovDQorICAgICAgICAgICAgICAg ICAgICAgICBjeWFwYV9maWx0ZXJfY3Vyc29yX21vdmVtZW50KHRvdWNoLCByZXBvcnRfZGF0YSk7 DQorDQorICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXBvcnQgdGhlIGRlbHRhcyAqLw0KKyAg ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X3JlbChpbnB1dCwgUkVMX1gsIHJlcG9y dF9kYXRhLT5yZWxfZGVsdGFYKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9y dF9yZWwoaW5wdXQsIFJFTF9ZLCByZXBvcnRfZGF0YS0+cmVsX2RlbHRhWSk7DQorICAgICAgICAg ICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGN5YXBhX3Jlc2V0X2N1cnNv cl9maWx0ZXJzX2RhdGEodG91Y2gpOw0KKyAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAg ICAgICAvKiBSZXBvcnQgdGhlIGJ1dHRvbiBldmVudCAqLw0KKyAgICAgICAgICAgICAgIGlucHV0 X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAocmVwb3J0X2RhdGEtPmJ1dHRvbiAmIDB4MDEpKTsNCisgICAgICAgICAgICAgICBpbnB1 dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fUklHSFQsDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChyZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgwMikpOw0KKyAgICAgICAgICAgICAgIGlu cHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9NSURETEUsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChyZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgwNCkpOw0KKyAgICAgICAgICAgICAg IGlucHV0X3N5bmMoaW5wdXQpOw0KKyAgICAgICB9DQorDQorICAgICAgIERCR1BSSU5USygoIiVz OiBkZWx0YXggPSAlZFxuIiwgX19mdW5jX18sIHJlcG9ydF9kYXRhLT5yZWxfZGVsdGFYKSk7DQor ICAgICAgIERCR1BSSU5USygoIiVzOiBkZWx0YXkgPSAlZFxuIiwgX19mdW5jX18sIHJlcG9ydF9k YXRhLT5yZWxfZGVsdGFZKSk7DQorICAgICAgIERCR1BSSU5USygoIiVzOiBsZWZ0X2J0biA9ICVk XG4iLA0KKyAgICAgICAgICAgICAgIF9fZnVuY19fLCByZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgw MSkpOw0KKyAgICAgICBEQkdQUklOVEsoKCIlczogcmlnaHRfYnRuID0gJWRcbiIsDQorICAgICAg ICAgICAgICAgX19mdW5jX18sIHJlcG9ydF9kYXRhLT5idXR0b24gJiAweDAyKSk7DQorICAgICAg IERCR1BSSU5USygoIiVzOiBtaWRkbGVfYnRuID0gJWRcbiIsDQorICAgICAgICAgICAgICAgX19m dW5jX18sIHJlcG9ydF9kYXRhLT5idXR0b24gJiAweDA0KSk7DQorDQorICAgICAgIC8qIHN0b3Jl IGN1cnJlbnQgYWN0aXZlIGdlc3R1cmVzIGFycmF5IGludG8NCisgICAgICAgKiogcHJldiBhY3Rp dmUgZ2VzdHVyZSBhcnJheS4gKi8NCisgICAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9GSU5HRVJT OyBpKyspDQorICAgICAgICAgICAgICAgdG91Y2gtPnByZXZfYWN0aXZlX2dlc3R1cmVzW2ldID0g dG91Y2gtPmN1cl9hY3RpdmVfZ2VzdHVyZXNbaV07DQorICAgICAgIHRvdWNoLT5wcmV2X3RvdWNo X2ZpbmdlcnMgPSByZXBvcnRfZGF0YS0+dG91Y2hfZmluZ2VyczsNCisNCisgICAgICAgcmV0dXJu IHJlcG9ydF9kYXRhLT5nZXN0dXJlc19jb3VudCB8IHJlcG9ydF9kYXRhLT5yZWxfZGVsdGFYDQor ICAgICAgICAgICAgICAgICAgICAgICB8cmVwb3J0X2RhdGEtPnJlbF9kZWx0YVkgfCByZXBvcnRf ZGF0YS0+YnV0dG9uOw0KK30NCisNCitzdGF0aWMgaW50IGN5YXBhX2Fic19pbnB1dF9yZXBvcnRf ZGF0YShzdHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCwNCisgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBjeWFwYV9yZXBvcnRfZGF0YSAqcmVwb3J0X2RhdGEpDQorew0KKyAgICAgICBpbnQgaTsN CisgICAgICAgaW50IGhhdmVfZGF0YSA9IDA7DQorICAgICAgIHN0cnVjdCBpbnB1dF9kZXYgKmlu cHV0ID0gdG91Y2gtPmlucHV0Ow0KKw0KKyAgICAgICBEQkdQUklOVEsoKCIlczogLi4uXG4iLCBf X2Z1bmNfXykpOw0KKw0KKyAgICAgICBjeWFwYV9wcm9jZXNzX3ByZXZfZ2VzdHVyZV9yZXBvcnQo dG91Y2gsIHJlcG9ydF9kYXRhKTsNCisgICAgICAgaWYgKHJlcG9ydF9kYXRhLT5nZXN0dXJlc19j b3VudCA+IDApIHsNCisgICAgICAgICAgICAgICBEQkdQUklOVEsoKCIlczogZG8gZ2VzdHVyZSBy ZXBvcnQsIGdlc3R1cmVzX2NvdW50ID0gJWRcbiIsDQorICAgICAgICAgICAgICAgICAgICAgICBf X2Z1bmNfXywgcmVwb3J0X2RhdGEtPmdlc3R1cmVzX2NvdW50KSk7DQorICAgICAgICAgICAgICAg LyogZ2VzdHVyZSB0cmlnZ2VkICovDQorICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJl cG9ydF9kYXRhLT5nZXN0dXJlc19jb3VudDsgaSsrKSB7DQorICAgICAgICAgICAgICAgICAgICAg ICBjeWFwYV9nZXN0dXJlX3JlcG9ydCh0b3VjaCwgcmVwb3J0X2RhdGEsDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZyZXBvcnRfZGF0YS0+Z2VzdHVyZXNbaV0pOw0KKyAgICAgICAg ICAgICAgIH0NCisgICAgICAgfSBlbHNlIGlmIChyZXBvcnRfZGF0YS0+dG91Y2hfZmluZ2Vycykg ew0KKyAgICAgICAgICAgICAgIC8qIG5vIGdlc3R1cmUgdHJpZ2dlZCwgcmVwb3J0IHRvdWNocyBt b3ZlIGRhdGEuICovDQorICAgICAgICAgICAgICAgaWYgKHJlcG9ydF9kYXRhLT50b3VjaF9maW5n ZXJzID4gMSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IG1vcmUg dGhlbiAxIGZpbmdlciB0b3VjaCwgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dG91Y2hfZmluZ2VycyA9ICVkXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Z1bmNfXywgcmVwb3J0X2RhdGEtPnRvdWNoX2ZpbmdlcnMpKTsNCisgICAgICAgICAgICAgICAg ICAgICAgIC8qDQorICAgICAgICAgICAgICAgICAgICAgICAqKiB0d28gYW5kIG11Y2ggbW9yZSBm aW5nZXIgb24gdHJhY2twYWQgYXJlIHVzZWQgZm9yDQorICAgICAgICAgICAgICAgICAgICAgICAq KiBnZXN0dXJlIG9ubHksIHNvIGV2ZW4gbm8gZ2VzdHVyZSBhcmUgdHJpZ2dlZCwNCisgICAgICAg ICAgICAgICAgICAgICAgICoqIGRvIG5vdCBtYWtlIGN1cnNvciBtb3ZlIGFsc28uDQorICAgICAg ICAgICAgICAgICAgICAgICAqKiBIZXJlLCBtdXN0IGtlZXAgb24gcmVwb3J0IGZpbmdlciB0b3Vj aGVkLCBvdGhlcndpc2UsDQorICAgICAgICAgICAgICAgICAgICAgICAqKiAgd2hlbiBtdWx0aS1m aW5nZXIgdG91Y2ggbm90IGluIHNhbWUgdGltZSB3aWxsDQorICAgICAgICAgICAgICAgICAgICAg ICAqKiB0cmlpZ2VkIGNsaWtjLg0KKyAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgICAg ICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgMSk7DQor ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfUFJFU1NV UkUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0X2RhdGEt PmF2Z19wcmVzc3VyZSk7DQorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfYWJz KGlucHV0LCBBQlNfVE9PTF9XSURUSCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDWUFQQV9UT09MX1dJRFRIKTsNCisgICAgICAgICAgICAgICAgICAgICAgICNpZiBH RVNUVVJFX01VTFRJX1RPVUNIX09ORV9DTElDSw0KKyAgICAgICAgICAgICAgICAgICAgICAgY3lh cGFfcmVwb3J0X2ZpbmdlcnMoaW5wdXQsIHJlcG9ydF9kYXRhLT50b3VjaF9maW5nZXJzKTsNCisg ICAgICAgICAgICAgICAgICAgICAgICNlbHNlDQorICAgICAgICAgICAgICAgICAgICAgICBjeWFw YV9yZXBvcnRfZmluZ2VycyhpbnB1dCwgMSk7DQorICAgICAgICAgICAgICAgICAgICAgICAjZW5k aWYNCisNCisgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5wcmV2X2Fic194ID0gLTE7DQor ICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+cHJldl9hYnNfeSA9IC0xOw0KKw0KKyAgICAg ICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX0xFRlQsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0X2RhdGEtPmJ1dHRvbiAm IDB4MDEpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwg QlROX1JJR0hULA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9y dF9kYXRhLT5idXR0b24gJiAweDAyKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3Jl cG9ydF9rZXkoaW5wdXQsIEJUTl9NSURETEUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVwb3J0X2RhdGEtPmJ1dHRvbiAmIDB4MDQpOw0KKw0KKyAgICAgICAgICAg ICAgICAgICAgICAgaW5wdXRfc3luYyhpbnB1dCk7DQorICAgICAgICAgICAgICAgfSBlbHNlIHsN CisgICAgICAgICAgICAgICAgICAgICAgIERCR1BSSU5USygoIiVzOiAxIGZpbmdlciB0b3VjaCwg bWFrZSBjdXJzb3IgbW92ZVxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19m dW5jX18pKTsNCisgICAgICAgICAgICAgICAgICAgICAgIC8qIGF2b2lkIGN1cnNvciBqdW1wLCB3 aGVuIHRvdWNoZWQgZmluZ2VyIGNoYW5nZWQNCisgICAgICAgICAgICAgICAgICAgICAgICoqIGZy b20gbXVsdGktdG91Y2ggdG8gb25lIGZpbmdlciB0b3VjaC4gKi8NCisgICAgICAgICAgICAgICAg ICAgICAgIGlmICh0b3VjaC0+cHJldl90b3VjaF9maW5nZXJzID4gMSkgew0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBjaGVhdCBzeXN0ZW0gb3IgYXBwbGljYXRpb24gdGhhdCBu byBmaW5nZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiogaGFzIHRvdWNoZWQg dG8gbWF5IHRoZW0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiogbG9jayB0aGUg Y3Vyc29yIHdoZW4gbGF0ZXIgb25seSBvbmUgZmluZ2VyDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICoqIHRvdWNoZWQgb24gdHJhY2twYWQuICovDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgMCk7DQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19Q UkVTU1VSRSwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9y dF9hYnMoaW5wdXQsIEFCU19UT09MX1dJRFRILCAwKTsNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3lhcGFfcmVwb3J0X2ZpbmdlcnMoaW5wdXQsIDApOw0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0b3VjaC0+cHJldl9hYnNfeCA9IC0xOw0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0b3VjaC0+cHJldl9hYnNfeSA9IC0xOw0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fTEVGVCwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRfZGF0YS0+YnV0dG9uICYg MHgwMSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXko aW5wdXQsIEJUTl9SSUdIVCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgwMik7DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9NSURETEUsDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0X2RhdGEtPmJ1dHRvbiAmIDB4MDQpOw0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9zeW5jKGlucHV0KTsNCisgICAg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIG9ubHkgMSBmaW5nZXIgY2FuIG1ha2UgY3Vyc29yIG1vdmUuICovDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT54eV90b3VjaHNfaW5jbHVkZWRfYml0cyA9IDB4 MDE7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5YXBhX2NhbGN1bGF0ZV9hYnNf eHkodG91Y2gsIHJlcG9ydF9kYXRhKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAxKTsNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1gsIHRvdWNoLT5h YnNfeCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9hYnMo aW5wdXQsIEFCU19ZLCB0b3VjaC0+YWJzX3kpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnB1dF9yZXBvcnRfYWJzKGlucHV0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQUJTX1BSRVNTVVJFLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0X2RhdGEtPmF2Z19wcmVzc3VyZSk7DQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFC U19UT09MX1dJRFRILA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ1lBUEFfVE9PTF9XSURUSCk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGN5YXBhX3JlcG9ydF9maW5nZXJzKGlucHV0LA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0X2RhdGEtPnRvdWNoX2ZpbmdlcnMpOw0KKw0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBC VE5fTEVGVCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlcG9ydF9kYXRhLT5idXR0b24gJiAweDAxKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1JJR0hULA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0X2RhdGEtPmJ1dHRvbiAmIDB4 MDIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KGlu cHV0LCBCVE5fTUlERExFLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVwb3J0X2RhdGEtPmJ1dHRvbiAmIDB4MDQpOw0KKw0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnB1dF9zeW5jKGlucHV0KTsNCisgICAgICAgICAgICAgICAgICAg ICAgIH0NCisgICAgICAgICAgICAgICB9DQorICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAg ICAgLyoNCisgICAgICAgICAgICAgICAqKiAxLiB0d28gb3IgbW9yZSBmaW5nZXJzIG9uIHRyYWNr cGFkIGFyZSB1c2VkIGZvciBnZXN0dXJlIG9ubHksDQorICAgICAgICAgICAgICAgKiogc28gZXZl biBubyBnZXN0dXJlIGFyZSB0cmlnZ2VkLCBkbyBub3QgbWFrZSBjdXJzb3IgbW92ZSBhbHNvLg0K KyAgICAgICAgICAgICAgICoqIDIuIG5vIGdlc3R1cmUgYW5kIG5vIHRvdWNoIG9uIHRyYWNrcGFk Lg0KKyAgICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IG5v IGZpbmdlciB0b3VjaC5cbiIsIF9fZnVuY19fKSk7DQorDQorICAgICAgICAgICAgICAgaW5wdXRf cmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAwKTsNCisgICAgICAgICAgICAgICBpbnB1dF9y ZXBvcnRfYWJzKGlucHV0LCBBQlNfUFJFU1NVUkUsIDApOw0KKyAgICAgICAgICAgICAgIGlucHV0 X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19UT09MX1dJRFRILCAwKTsNCisgICAgICAgICAgICAgICBj eWFwYV9yZXBvcnRfZmluZ2VycyhpbnB1dCwgMCk7DQorDQorICAgICAgICAgICAgICAgdG91Y2gt PnByZXZfYWJzX3ggPSAtMTsNCisgICAgICAgICAgICAgICB0b3VjaC0+cHJldl9hYnNfeSA9IC0x Ow0KKw0KKyAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULCBy ZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgwMSk7DQorICAgICAgICAgICAgICAgaW5wdXRfcmVwb3J0 X2tleShpbnB1dCwgQlROX1JJR0hULCByZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgwMik7DQorICAg ICAgICAgICAgICAgaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX01JRERMRSwgcmVwb3J0X2Rh dGEtPmJ1dHRvbiAmIDB4MDQpOw0KKw0KKyAgICAgICAgICAgICAgIGlucHV0X3N5bmMoaW5wdXQp Ow0KKyAgICAgICB9DQorDQorICAgICAgIC8qIHN0b3JlIGN1cnJlbnQgYWN0aXZlIGdlc3R1cmVz IGFycmF5IGludG8NCisgICAgICAgKiogcHJldiBhY3RpdmUgZ2VzdHVyZSBhcnJheS4gKi8NCisg ICAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9GSU5HRVJTOyBpKyspDQorICAgICAgICAgICAgICAg dG91Y2gtPnByZXZfYWN0aXZlX2dlc3R1cmVzW2ldID0gdG91Y2gtPmN1cl9hY3RpdmVfZ2VzdHVy ZXNbaV07DQorICAgICAgIHRvdWNoLT5wcmV2X3RvdWNoX2ZpbmdlcnMgPSByZXBvcnRfZGF0YS0+ dG91Y2hfZmluZ2VyczsNCisNCisgICAgICAgaGF2ZV9kYXRhID0gKHJlcG9ydF9kYXRhLT5nZXN0 dXJlc19jb3VudCArDQorICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRfZGF0YS0+dG91Y2hf ZmluZ2VycyArIHJlcG9ydF9kYXRhLT5idXR0b24pOw0KKw0KKyAgICAgICBEQkdQUklOVEsoKCIl czogZ2VzdHVyZSBjb3VudCA9ICVkLCB0b3VjaCBmaW5nZXIgPSVkLCAgXA0KKyAgICAgICAgICAg ICAgIGJ1dHRvbiA9IDB4JTAyeFxuIiwgX19mdW5jX18sIHJlcG9ydF9kYXRhLT5nZXN0dXJlc19j b3VudCwNCisgICAgICAgICAgICAgICByZXBvcnRfZGF0YS0+dG91Y2hfZmluZ2VycywgcmVwb3J0 X2RhdGEtPmJ1dHRvbikpOw0KKyAgICAgICByZXR1cm4gaGF2ZV9kYXRhOw0KK30NCisNCitzdGF0 aWMgYm9vbCBjeWFwYV9pMmNfZ2V0X2lucHV0KHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoKQ0KK3sN CisgICAgICAgaW50IGk7DQorICAgICAgIGludCByZXRfcmVhZF9zaXplID0gLTE7DQorICAgICAg IGludCByZWFkX2xlbmd0aCA9IDA7DQorICAgICAgIHVuaW9uIGN5YXBhX3JlZ19kYXRhIHJlZ19k YXRhOw0KKyAgICAgICBzdHJ1Y3QgY3lhcGFfcmVnX2RhdGFfZ2VuMSAqZ2VuMV9kYXRhOw0KKyAg ICAgICBzdHJ1Y3QgY3lhcGFfcmVnX2RhdGFfZ2VuMiAqZ2VuMl9kYXRhOw0KKyAgICAgICBzdHJ1 Y3QgY3lhcGFfcmVwb3J0X2RhdGEgcmVwb3J0X2RhdGE7DQorDQorICAgICAgIERCR1BSSU5USygo IiVzOiBzdGFydCAuLi5cbiIsIF9fZnVuY19fKSk7DQorDQorICAgICAgIG1lbXNldCgmcmVnX2Rh dGEsIDAsIHNpemVvZih1bmlvbiBjeWFwYV9yZWdfZGF0YSkpOw0KKw0KKyAgICAgICAvKiByZWFk IHJlZ2lzdGVyIGRhdGEgZnJvbSB0cmFja3BhZC4gKi8NCisgICAgICAgZ2VuMV9kYXRhID0gJnJl Z19kYXRhLmdlbjFfZGF0YTsNCisgICAgICAgZ2VuMl9kYXRhID0gJnJlZ19kYXRhLmdlbjJfZGF0 YTsNCisgICAgICAgcmVhZF9sZW5ndGggPSBDWUFQQV9SRUxfUkVHX0RBVEFfU0laRTsNCisgICAg ICAgaWYgKHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT5nZW4gPT0gQ1lBUEFfR0VOMSkNCisgICAgICAg ICAgICAgICByZWFkX2xlbmd0aCA9IChpbnQpc2l6ZW9mKHN0cnVjdCBjeWFwYV9yZWdfZGF0YV9n ZW4xKTsNCisgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgIHJlYWRfbGVuZ3RoID0gKGludClz aXplb2Yoc3RydWN0IGN5YXBhX3JlZ19kYXRhX2dlbjIpOw0KKyAgICAgICBEQkdQUklOVEsoKCIl czogcmVhZCBnZW4lZCBkYXRhLCByZWFkIGxlbmd0aD0lZFxuIiwgX19mdW5jX18sDQorICAgICAg ICAgICAgICAgICAgICAgICAoKHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT5nZW4gPT0gQ1lBUEFfR0VO MSkgPyAxIDogMiksDQorICAgICAgICAgICAgICAgICAgICAgICByZWFkX2xlbmd0aCkpOw0KKyAg ICAgICByZXRfcmVhZF9zaXplID0gY3lhcGFfaTJjX3JlZ19yZWFkX2Jsb2NrKHRvdWNoLT5jbGll bnQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFUQV9SRUdfU1RB UlRfT0ZGU0VULA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRf bGVuZ3RoLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1OCAqKSZy ZWdfZGF0YSk7DQorICAgICAgIGlmIChyZXRfcmVhZF9zaXplIDwgMCkgew0KKyAgICAgICAgICAg ICAgIERCR1BSSU5USygoIiVzOiBJMkMgcmVhZCBkYXRhIGZyb20gdHJhY2twYWQgZXJyb3IgPSAl ZFxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywg cmV0X3JlYWRfc2l6ZSkpOw0KKyAgICAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICB9DQor DQorICAgICAgIGlmIChjeWFwYV92ZXJpZnlfZGF0YV9kZXZpY2UodG91Y2gsICZyZWdfZGF0YSkp IHsNCisgICAgICAgICAgICAgICBEQkdQUklOVEsoKCIlczogdmVyaWZ5IGRhdGEgZGV2aWNlIGZh aWxlZCwgIFwNCisgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQgZGF0YSwgc2tpcC5cbiIs IF9fZnVuY19fKSk7DQorICAgICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgIH0NCisNCisg ICAgICAgLyogcHJvY2VzcyBhbmQgcGFyc2UgcmF3IGRhdGEgdGhhdCByZWFkIGZyb20gVHJhY2tw YWQuICovDQorICAgICAgIG1lbXNldCgmcmVwb3J0X2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgY3lh cGFfcmVwb3J0X2RhdGEpKTsNCisgICAgICAgdG91Y2gtPnh5X3RvdWNoc19pbmNsdWRlZF9iaXRz ID0gMDsNCisgICAgICAgLyogaW5pdGlhbGl6ZSBjdXJyZW50IGFjdGl2ZSBnZXN0dXJlcyBhcnJh eS4gKi8NCisgICAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9GSU5HRVJTOyBpKyspDQorICAgICAg ICAgICAgICAgdG91Y2gtPmN1cl9hY3RpdmVfZ2VzdHVyZXNbaV0gPSAwOw0KKw0KKyAgICAgICBp ZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPmdlbiA9PSBDWUFQQV9HRU4xKQ0KKyAgICAgICAgICAg ICAgIGN5YXBhX3BhcnNlX2dlbjFfZGF0YSh0b3VjaCwgZ2VuMV9kYXRhLCAmcmVwb3J0X2RhdGEp Ow0KKyAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgY3lhcGFfcGFyc2VfZ2VuMl9kYXRhKHRv dWNoLCBnZW4yX2RhdGEsICZyZXBvcnRfZGF0YSk7DQorDQorICAgICAgIC8qIHJlcG9ydCBkYXRh IHRvIGlucHV0IHN1YnN5c3RlbS4gKi8NCisgICAgICAgaWYgKHRvdWNoLT5wbGF0Zm9ybV9kYXRh LT51c2VfYWJzb2x1dGVfbW9kZSA9PSBmYWxzZSkNCisgICAgICAgICAgICAgICByZXR1cm4gY3lh cGFfcmVsX2lucHV0X3JlcG9ydF9kYXRhKHRvdWNoLCAmcmVwb3J0X2RhdGEpOw0KKyAgICAgICBl bHNlDQorICAgICAgICAgICAgICAgcmV0dXJuIGN5YXBhX2Fic19pbnB1dF9yZXBvcnRfZGF0YSh0 b3VjaCwgJnJlcG9ydF9kYXRhKTsNCit9DQorDQorc3RhdGljIHZvaWQgY3lhcGFfaTJjX3Jlc2No ZWR1bGVfd29yayhzdHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCwNCisgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIGRlbGF5KQ0KK3sNCisgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisg ICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnRvdWNoLT5sb2NrLCBmbGFncyk7DQorDQorICAgICAg IC8qDQorICAgICAgICAqIElmIHdvcmsgaXMgYWxyZWFkeSBzY2hlZHVsZWQgdGhlbiBzdWJzZXF1 ZW50IHNjaGVkdWxlcyB3aWxsIG5vdA0KKyAgICAgICAgKiBjaGFuZ2UgdGhlIHNjaGVkdWxlZCB0 aW1lIHRoYXQncyB3aHkgd2UgaGF2ZSB0byBjYW5jZWwgaXQgZmlyc3QuDQorICAgICAgICAqLw0K KyAgICAgICBfX2NhbmNlbF9kZWxheWVkX3dvcmsoJnRvdWNoLT5kd29yayk7DQorICAgICAgIHNj aGVkdWxlX2RlbGF5ZWRfd29yaygmdG91Y2gtPmR3b3JrLCBkZWxheSk7DQorDQorICAgICAgIHNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnRvdWNoLT5sb2NrLCBmbGFncyk7DQorfQ0KKw0KK3N0YXRp YyBpcnFyZXR1cm5fdCBjeWFwYV9pMmNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkNCit7DQor ICAgICAgIHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoID0gZGV2X2lkOw0KKw0KKyAgICAgICBEQkdQ UklOVEsoKCIlczogdHJhY2twYWQgaW50ZXJydXB0IGNhcHR1cmVkLiAgXA0KKyAgICAgICAgICAg ICAgIHJlcG9ydF9yYXRlPSVkOyByZWFkX3BlbmRpbmc9JWRcbiIsDQorICAgICAgICAgICAgICAg X19mdW5jX18sIHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT5yZXBvcnRfcmF0ZSwNCisgICAgICAgICAg ICAgICB0b3VjaC0+cmVhZF9wZW5kaW5nKSk7DQorDQorICAgICAgIGlmICh0b3VjaC0+cGxhdGZv cm1fZGF0YS0+cmVwb3J0X3JhdGUgPT0gMCkgew0KKyAgICAgICAgICAgICAgIC8qDQorICAgICAg ICAgICAgICAgKiogbm8gbGltaXRhdGlvaW4gZm9yIGRhdGEgcmVwb3J0aW5nLg0KKyAgICAgICAg ICAgICAgICoqIHRoZSByZXBvcnQgcmF0ZSBkZXBlbmRpbmcgb24gdHJhY2twYWQgbWF4IHJlcG9y dCByYXRlLg0KKyAgICAgICAgICAgICAgICoqIHRoaXMgaXMgdGhlIGRlZmF1bHQgcmVwb3J0IG1v ZGUuDQorICAgICAgICAgICAgICAgKi8NCisgICAgICAgICAgICAgICBjeWFwYV9pMmNfcmVzY2hl ZHVsZV93b3JrKHRvdWNoLCAwKTsNCisgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAv Kg0KKyAgICAgICAgICAgICAgICoqIHdoZW4gdXNlIGxpbWl0ZWQgcmVwb3J0IHJhdGUsIHNvbWUg aW1wb3J0YW50IGRhdGEgcGFja2FnZXMNCisgICAgICAgICAgICAgICAqKiBtYXkgYmUgbG9zdC4g U3VjaCBhcyBhIHRhcCBvciBkb3VibGUgdGFwIGdlc3R1cmUgbWF5IGJlIGxvc3QuDQorICAgICAg ICAgICAgICAgKiogU28gZmlybXdhcmUgbmVlZCB0byBrZWVwIHRoaXMgZGF0YSB1bnRpbCB0aGVy ZSBkYXRhIGlzIHJlYWQuDQorICAgICAgICAgICAgICAgKi8NCisgICAgICAgICAgICAgICBpZiAo IXRvdWNoLT5yZWFkX3BlbmRpbmcpIHsNCisgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5y ZWFkX3BlbmRpbmcgPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgICAgY3lhcGFfaTJjX3Jlc2No ZWR1bGVfd29yayh0b3VjaCwgdG91Y2gtPnNjYW5fbXMpOw0KKyAgICAgICAgICAgICAgIH0NCisg ICAgICAgfQ0KKw0KKyAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7DQorfQ0KKw0KKy8qIENvbnRy b2wgdGhlIERldmljZSBwb2xsaW5nIHJhdGUgLyBXb3JrIEhhbmRsZXIgc2xlZXAgdGltZSAqLw0K K3N0YXRpYyB1bnNpZ25lZCBsb25nIGN5YXBhX2kyY19hZGp1c3RfZGVsYXkoc3RydWN0IGN5YXBh X2kyYyAqdG91Y2gsDQorICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhdmVfZGF0YSkNCit7 DQorICAgICAgIHVuc2lnbmVkIGxvbmcgZGVsYXksIG5vZGF0YV9jb3VudF90aHJlczsNCisNCisg ICAgICAgaWYgKHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT51c2VfcG9sbGluZ19tb2RlKSB7DQorICAg ICAgICAgICAgICAgZGVsYXkgPSB0b3VjaC0+cGxhdGZvcm1fZGF0YS0+cG9sbGluZ19pbnRlcnZh bF90aW1lX2FjdGl2ZTsNCisgICAgICAgICAgICAgICBpZiAoaGF2ZV9kYXRhKSB7DQorICAgICAg ICAgICAgICAgICAgICAgICB0b3VjaC0+bm9fZGF0YV9jb3VudCA9IDA7DQorICAgICAgICAgICAg ICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgIG5vZGF0YV9jb3VudF90aHJlcw0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IENZQVBBX05PX0RBVEFfVEhSRVMgLyB0 b3VjaC0+c2Nhbl9tczsNCisgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b3VjaC0+bm9fZGF0 YV9jb3VudCA8IG5vZGF0YV9jb3VudF90aHJlcykNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdG91Y2gtPm5vX2RhdGFfY291bnQrKzsNCisgICAgICAgICAgICAgICAgICAgICAgIGVs c2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgPSBDWUFQQV9OT19EQVRB X1NMRUVQX01TRUNTOw0KKyAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICByZXR1cm4g bXNlY3NfdG9famlmZmllcyhkZWxheSk7DQorICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAg ICAgZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKENZQVBBX1RIUkVBRF9JUlFfU0xFRVBfTVNFQ1Mp Ow0KKyAgICAgICAgICAgICAgIHJldHVybiByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKGRlbGF5KTsN CisgICAgICAgfQ0KK30NCisNCisvKiBXb3JrIEhhbmRsZXIgKi8NCitzdGF0aWMgdm9pZCBjeWFw YV9pMmNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorICAgICAg IGJvb2wgaGF2ZV9kYXRhOw0KKyAgICAgICBzdHJ1Y3QgY3lhcGFfaTJjICp0b3VjaA0KKyAgICAg ICAgICAgICAgID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeWFwYV9pMmMsIGR3b3JrLndv cmspOw0KKyAgICAgICB1bnNpZ25lZCBsb25nIGRlbGF5Ow0KKw0KKyAgICAgICBEQkdQUklOVEso KCIlczogc3RhcnQgLi4uXG4iLCBfX2Z1bmNfXykpOw0KKw0KKyAgICAgICBoYXZlX2RhdGEgPSBj eWFwYV9pMmNfZ2V0X2lucHV0KHRvdWNoKTsNCisNCisgICAgICAgLyoNCisgICAgICAgICogV2hp bGUgaW50ZXJydXB0IGRyaXZlbiwgdGhlcmUgaXMgbm8gcmVhbCBuZWVkIHRvIHBvbGwgdGhlIGRl dmljZS4NCisgICAgICAgICogQnV0IHRvdWNocGFkcyBhcmUgdmVyeSBzZW5zaXRpdmUsIHNvIHRo ZXJlIGNvdWxkIGJlIGVycm9ycw0KKyAgICAgICAgKiByZWxhdGVkIHRvIHBoeXNpY2FsIGVudmly b25tZW50IGFuZCB0aGUgYXR0ZW50aW9uIGxpbmUgaXNuJ3QNCisgICAgICAgICogbmVjY2VzYXJp bHkgYXNzZXJ0ZWQuIEluIHN1Y2ggY2FzZSB3ZSBjYW4gbG9zZSB0aGUgdG91Y2hwYWQuDQorICAg ICAgICAqIFdlIHBvbGwgdGhlIGRldmljZSBvbmNlIGluIENZQVBBX1RIUkVBRF9JUlFfU0xFRVBf U0VDUyBhbmQNCisgICAgICAgICogaWYgZXJyb3IgaXMgZGV0ZWN0ZWQsIHdlIHRyeSB0byByZXNl dCBhbmQgcmVjb25maWd1cmUgdGhlIHRvdWNocGFkLg0KKyAgICAgICAgKi8NCisgICAgICAgZGVs YXkgPSBjeWFwYV9pMmNfYWRqdXN0X2RlbGF5KHRvdWNoLCBoYXZlX2RhdGEpOw0KKyAgICAgICAv KiBpZiBuZWVkcyBmaXhlZCBpbnRlcnZhbCB0aW1lIHRyYWNrcGFkIHNjYW4sIG9wZW4gaXQuDQor ICAgICAgIGN5YXBhX2kyY19yZXNjaGVkdWxlX3dvcmsodG91Y2gsIGRlbGF5KTsNCisgICAgICAg Ki8NCisNCisgICAgICAgdG91Y2gtPnJlYWRfcGVuZGluZyA9IDA7DQorDQorICAgICAgIERCR1BS SU5USygoIiVzOiBkb25lIC4uLlxuIiwgX19mdW5jX18pKTsNCit9DQorDQorc3RhdGljIGludCBj eWFwYV9pMmNfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkNCit7DQorICAgICAgIHN0cnVj dCBjeWFwYV9pMmMgKnRvdWNoID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXQpOw0KKyAgICAgICBp bnQgcmV0dmFsOw0KKw0KKyAgICAgICBpZiAoMCA9PSB0b3VjaC0+b3Blbl9jb3VudCkgew0KKyAg ICAgICAgICAgICAgIC8qIFNpbmNlIGlucHV0X2RldiBtb3VzZSwgd2hlZWwsIGFuZCBrYmQgd2ls bCBhbGwgdXNlIHNhbWUgb3Blbg0KKyAgICAgICAgICAgICAgICoqIGFuZCBjbG9zZSByb3V0aW5l cy4gQnV0IGluZGVlZCwgcmVzZXQgY29uZmlnIHRvIHRyYWNrcGFkDQorICAgICAgICAgICAgICAg Kiogb25jZSBpcyBlbm91Z2h0LFNvIHdoZW4gdHJhY2twYWQgaXMgb3BlbiBmb3IgdGhlIGZpcnN0 IHRpbWUsDQorICAgICAgICAgICAgICAgKiogcmVzZXQgaXQuIGZvciBvdGhlciB0aW1lIG5vdCBk byBpdC4NCisgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgIHJldHZhbCA9IGN5YXBh X2kyY19yZXNldF9jb25maWcodG91Y2gpOw0KKyAgICAgICAgICAgICAgIGlmIChyZXR2YWwpIHsN CisgICAgICAgICAgICAgICAgICAgICAgIERCR1BSSU5USygoIiVzOiBmYWlsZWQgdG8gcmVzZXQg aTJjIHRyYWNrcGFkLiAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9 ICVkXG4iLCBfX2Z1bmNfXywgcmV0dmFsKSk7DQorICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gcmV0dmFsOw0KKyAgICAgICAgICAgICAgIH0NCisgICAgICAgfQ0KKyAgICAgICB0b3VjaC0+ b3Blbl9jb3VudCsrOw0KKw0KKyAgICAgICBpZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9w b2xsaW5nX21vZGUpIHsNCisgICAgICAgICAgICAgICAvKg0KKyAgICAgICAgICAgICAgICoqIGZv ciB0aGUgZmlyc3RseSB0aW1lLCBpdCBpcyBzZXQgdG8gQ1lBUEFfTk9fREFUQV9TTEVFUF9NU0VD UywNCisgICAgICAgICAgICAgICAqKiB3aGVuIGRhdGEgaXMgcmVhZCBmcm9tIHRyYWNrcGFkLCB0 aGUgcmVhZCBzcGVlZCB3aWxsDQorICAgICAgICAgICAgICAgKiogYmUgcHVsbCB1cC4NCisgICAg ICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgIGN5YXBhX2kyY19yZXNjaGVkdWxlX3dvcmso dG91Y2gsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZWNzX3RvX2ppZmZpZXMo Q1lBUEFfTk9fREFUQV9TTEVFUF9NU0VDUykpOw0KKyAgICAgICB9DQorDQorICAgICAgIERCR1BS SU5USygoIiVzOiB0b3VjaC0+b3Blbl9jb3VudCA9ICVkIC4uLlxuIiwNCisgICAgICAgICAgICAg ICAgICAgICAgIF9fZnVuY19fLCB0b3VjaC0+b3Blbl9jb3VudCkpOw0KKw0KKyAgICAgICByZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgY3lhcGFfaTJjX2Nsb3NlKHN0cnVjdCBpbnB1dF9k ZXYgKmlucHV0KQ0KK3sNCisgICAgICAgc3RydWN0IGN5YXBhX2kyYyAqdG91Y2ggPSBpbnB1dF9n ZXRfZHJ2ZGF0YShpbnB1dCk7DQorDQorICAgICAgIHRvdWNoLT5vcGVuX2NvdW50LS07DQorDQor ICAgICAgIGlmICgwID09IHRvdWNoLT5vcGVuX2NvdW50KSB7DQorICAgICAgICAgICAgICAgLyog U2luY2UgaW5wdXRfZGV2IG1vdXNlLCB3aGVlbCwgYW5kIGtiZCB3aWxsIGFsbCB1c2Ugc2FtZSBv cGVuDQorICAgICAgICAgICAgICAgKiogYW5kIGNsb3NlIHJvdXRpbmVzLg0KKyAgICAgICAgICAg ICAgICoqIHNvIHdoZW4gYWxsIG1vdXNlLCB3aGVlbCBhbmQga2JkIGlucHV0X2RldiBpcyBjbG9z ZWQsDQorICAgICAgICAgICAgICAgKiogdGhlbiBjYW5jZWwgdGhlIGRlbGF5ZWQgd29yayByb3V0 aW5lLg0KKyAgICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgY2FuY2VsX2RlbGF5ZWRf d29ya19zeW5jKCZ0b3VjaC0+ZHdvcmspOw0KKyAgICAgICB9DQorDQorICAgICAgIERCR1BSSU5U SygoIiVzOiB0b3VjaC0+b3Blbl9jb3VudD0lZFxuIiwgX19mdW5jX18sIHRvdWNoLT5vcGVuX2Nv dW50KSk7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgY3lhcGFfaTJjICpjeWFwYV9pMmNfdG91Y2hf Y3JlYXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQorew0KKyAgICAgICBzdHJ1Y3QgY3lh cGFfaTJjICp0b3VjaDsNCisNCisgICAgICAgdG91Y2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qg Y3lhcGFfaTJjKSwgR0ZQX0tFUk5FTCk7DQorICAgICAgIGlmICghdG91Y2gpDQorICAgICAgICAg ICAgICAgcmV0dXJuIE5VTEw7DQorDQorICAgICAgIERCR1BSSU5USygoIiVzOiBjbGllbnQ9MHgl cCwgYWxsb2NhdGUgbWVtb3J5IGZvciB0b3VjaCBzdWNjZXNzZnVsbHkuXG4iLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBjbGllbnQpKTsNCisNCisg ICAgICAgdG91Y2gtPnBsYXRmb3JtX2RhdGEgPSAmY3lhcGFfaTJjX3BsYXRmb3JtX2RhdGE7DQor ICAgICAgIGlmIChjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhKSB7DQorICAgICAgICAgICAgICAg REJHUFJJTlRLKCgiJXM6IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEgaXMgc2V0LCBjb3B5IGl0 LlxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXykp Ow0KKyAgICAgICAgICAgICAgICp0b3VjaC0+cGxhdGZvcm1fZGF0YQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgPSAqKHN0cnVjdCBjeWFwYV9wbGF0Zm9ybV9kYXRhICopDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7DQorICAgICAgIH0N CisNCisgICAgICAgY3lhcGFfcHJpbnRfcGFsdGZvcm1fZGF0YShfX2Z1bmNfXywgdG91Y2gtPnBs YXRmb3JtX2RhdGEpOw0KKw0KKyAgICAgICBpZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9w b2xsaW5nX21vZGUgJiYNCisgICAgICAgICAgICAgICAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPnJl cG9ydF9yYXRlID09IDApKSB7DQorICAgICAgICAgICAgICAgLyogd2hlbiB1c2VyIG1pc3Mgc2V0 dGluZyBwbGF0Zm9ybSBkYXRhLA0KKyAgICAgICAgICAgICAgICoqIGVuc3VyZSB0aGF0IHN5c3Rl bSBpcyByb2J1c3QuDQorICAgICAgICAgICAgICAgKiogbm8gZGl2aWQgemVybyBlcnJvci4gKi8N CisgICAgICAgICAgICAgICB0b3VjaC0+cGxhdGZvcm1fZGF0YS0+cmVwb3J0X3JhdGUNCisgICAg ICAgICAgICAgICAgICAgICAgID0gQ1lBUEFfUE9MTElOR19SRVBPUlRSQVRFX0RFRkFVTFQ7DQor ICAgICAgIH0NCisgICAgICAgdG91Y2gtPnNjYW5fbXMgPSB0b3VjaC0+cGxhdGZvcm1fZGF0YS0+ cmVwb3J0X3JhdGUNCisgICAgICAgICAgICAgICA/ICgxMDAwIC8gdG91Y2gtPnBsYXRmb3JtX2Rh dGEtPnJlcG9ydF9yYXRlKSA6IDA7DQorICAgICAgIHRvdWNoLT5vcGVuX2NvdW50ID0gMDsNCisg ICAgICAgdG91Y2gtPnByZXZfYWJzX3ggPSAtMTsNCisgICAgICAgdG91Y2gtPnByZXZfYWJzX3kg PSAtMTsNCisgICAgICAgdG91Y2gtPmNsaWVudCA9IGNsaWVudDsNCisgICAgICAgdG91Y2gtPnpv b21pbl9kZWx0YSA9IDA7DQorICAgICAgIHRvdWNoLT56b29tb3V0X2RlbHRhID0gMDsNCisgICAg ICAgdG91Y2gtPmhzY3JvbGxfbGVmdCA9IDA7DQorICAgICAgIHRvdWNoLT5oc2Nyb2xsX3JpZ2h0 ID0gMDsNCisgICAgICAgdG91Y2gtPnByZXZfdG91Y2hfZmluZ2VycyA9IDA7DQorDQorICAgICAg IGN5YXBhX3NldF9wcmVmZXJlbmNlcyh0b3VjaCk7DQorICAgICAgIGN5YXBhX3Jlc2V0X2N1cnNv cl9maWx0ZXJzX2RhdGEodG91Y2gpOw0KKw0KKyAgICAgICBJTklUX0RFTEFZRURfV09SSygmdG91 Y2gtPmR3b3JrLCBjeWFwYV9pMmNfd29ya19oYW5kbGVyKTsNCisgICAgICAgc3Bpbl9sb2NrX2lu aXQoJnRvdWNoLT5sb2NrKTsNCisNCisgICAgICAgcmV0dXJuIHRvdWNoOw0KK30NCisNCitzdGF0 aWMgaW50IGN5YXBhX2NyZWF0ZV9pbnB1dF9kZXZfbW91c2Uoc3RydWN0IGN5YXBhX2kyYyAqdG91 Y2gpDQorew0KKyAgICAgICBpbnQgcmV0dmFsID0gMDsNCisgICAgICAgc3RydWN0IGlucHV0X2Rl diAqaW5wdXQgPSBOVUxMOw0KKw0KKyAgICAgICBpbnB1dCA9IHRvdWNoLT5pbnB1dCA9IGlucHV0 X2FsbG9jYXRlX2RldmljZSgpOw0KKyAgICAgICBpZiAoIXRvdWNoLT5pbnB1dCkgew0KKyAgICAg ICAgICAgICAgIGRldl9lcnIoJnRvdWNoLT5jbGllbnQtPmRldiwNCisgICAgICAgICAgICAgICAg ICAgICAgICAiJXM6IEFsbG9jYXRlIG1lbW9yeSBmb3IgSW5wdXQgZGV2aWNlIGZhaWxlZDogJWRc biIsDQorICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcmV0dmFsKTsNCisgICAgICAg ICAgICAgICByZXR1cm4gLUVOT01FTTsNCisgICAgICAgfQ0KKw0KKyAgICAgICBpbnB1dC0+bmFt ZSA9ICJjeWFwYV9pMmNfdHJhY2twYWQiOw0KKyAgICAgICBpbnB1dC0+cGh5cyA9IHRvdWNoLT5j bGllbnQtPmFkYXB0ZXItPm5hbWU7DQorICAgICAgIGlucHV0LT5pZC5idXN0eXBlID0gQlVTX0ky QzsNCisgICAgICAgaW5wdXQtPmlkLnZlcnNpb24gPSAxOw0KKyAgICAgICBpbnB1dC0+ZGV2LnBh cmVudCA9ICZ0b3VjaC0+Y2xpZW50LT5kZXY7DQorDQorICAgICAgIGlucHV0LT5vcGVuID0gY3lh cGFfaTJjX29wZW47DQorICAgICAgIGlucHV0LT5jbG9zZSA9IGN5YXBhX2kyY19jbG9zZTsNCisg ICAgICAgaW5wdXRfc2V0X2RydmRhdGEoaW5wdXQsIHRvdWNoKTsNCisNCisgICAgICAgaWYgKHRv dWNoLT5wbGF0Zm9ybV9kYXRhLT51c2VfYWJzb2x1dGVfbW9kZSkgew0KKyAgICAgICAgICAgICAg IC8qIGFic29sdXRpb24gZGF0YSByZXBvcnQgbW9kZS4gKi8NCisgICAgICAgICAgICAgICBfX3Nl dF9iaXQoRVZfQUJTLCBpbnB1dC0+ZXZiaXQpOw0KKyAgICAgICAgICAgICAgIF9fc2V0X2JpdChF Vl9LRVksIGlucHV0LT5ldmJpdCk7DQorDQorICAgICAgICAgICAgICAgaW5wdXRfc2V0X2Fic19w YXJhbXMoaW5wdXQsIEFCU19YLCAwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdG91Y2gtPm1heF9hYnNvbHV0aW9uX3gsIDAsIDApOw0KKyAgICAgICAg ICAgICAgIGlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfWSwgMCwNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5tYXhfYWJzb2x1dGlv bl95LCAwLCAwKTsNCisgICAgICAgICAgICAgICBpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwg QUJTX1BSRVNTVVJFLCAwLCAyNTUsIDAsIDApOw0KKyAgICAgICAgICAgICAgIGlucHV0X3NldF9h YnNfcGFyYW1zKGlucHV0LCBBQlNfVE9PTF9XSURUSCwgMCwgMjU1LCAwLCAwKTsNCisNCisgICAg ICAgICAgICAgICBfX3NldF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KTsNCisgICAgICAg ICAgICAgICBfX3NldF9iaXQoQlROX1RPT0xfRklOR0VSLCBpbnB1dC0+a2V5Yml0KTsNCisgICAg ICAgICAgICAgICBfX3NldF9iaXQoQlROX1RPT0xfRE9VQkxFVEFQLCBpbnB1dC0+a2V5Yml0KTsN CisgICAgICAgICAgICAgICBfX3NldF9iaXQoQlROX1RPT0xfVFJJUExFVEFQLCBpbnB1dC0+a2V5 Yml0KTsNCisgICAgICAgICAgICAgICBfX3NldF9iaXQoQlROX1RPT0xfUVVBRFRBUCwgaW5wdXQt PmtleWJpdCk7DQorDQorICAgICAgICAgICAgICAgX19zZXRfYml0KEJUTl9MRUZULCBpbnB1dC0+ a2V5Yml0KTsNCisgICAgICAgICAgICAgICBfX3NldF9iaXQoQlROX1JJR0hULCBpbnB1dC0+a2V5 Yml0KTsNCisgICAgICAgICAgICAgICBfX3NldF9iaXQoQlROX01JRERMRSwgaW5wdXQtPmtleWJp dCk7DQorDQorICAgICAgICAgICAgICAgX19jbGVhcl9iaXQoRVZfUkVMLCBpbnB1dC0+ZXZiaXQp Ow0KKyAgICAgICAgICAgICAgIF9fY2xlYXJfYml0KFJFTF9YLCBpbnB1dC0+cmVsYml0KTsNCisg ICAgICAgICAgICAgICBfX2NsZWFyX2JpdChSRUxfWSwgaW5wdXQtPnJlbGJpdCk7DQorICAgICAg ICAgICAgICAgX19jbGVhcl9iaXQoQlROX1RSSUdHRVIsIGlucHV0LT5rZXliaXQpOw0KKw0KKyAg ICAgICAgICAgICAgIGlucHV0X2Fic19zZXRfcmVzKGlucHV0LA0KKyAgICAgICAgICAgICAgICAg ICAgICAgQUJTX1gsDQorICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+bWF4X2Fic29sdXRp b25feC90b3VjaC0+cGh5c2ljYWxfc2l6ZV94KTsNCisgICAgICAgICAgICAgICBpbnB1dF9hYnNf c2V0X3JlcyhpbnB1dCwNCisgICAgICAgICAgICAgICAgICAgICAgIEFCU19ZLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgdG91Y2gtPm1heF9hYnNvbHV0aW9uX3kvdG91Y2gtPnBoeXNpY2FsX3Np emVfeSk7DQorDQorICAgICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IFVzZSBhYnNvbHV0ZSBk YXRhIHJlcG9ydGluZyBtb2RlLlxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19f KSk7DQorICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgLyogcmVsYXRpdmUgZGF0YSBy ZXBvcnRpbmcgbW9kZS4gKi8NCisgICAgICAgICAgICAgICBfX3NldF9iaXQoRVZfUkVMLCBpbnB1 dC0+ZXZiaXQpOw0KKyAgICAgICAgICAgICAgIF9fc2V0X2JpdChSRUxfWCwgaW5wdXQtPnJlbGJp dCk7DQorICAgICAgICAgICAgICAgX19zZXRfYml0KFJFTF9ZLCBpbnB1dC0+cmVsYml0KTsNCisN CisgICAgICAgICAgICAgICBfX3NldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOw0KKyAgICAg ICAgICAgICAgIF9fc2V0X2JpdChCVE5fTEVGVCwgaW5wdXQtPmtleWJpdCk7DQorICAgICAgICAg ICAgICAgX19zZXRfYml0KEJUTl9SSUdIVCwgaW5wdXQtPmtleWJpdCk7DQorICAgICAgICAgICAg ICAgX19zZXRfYml0KEJUTl9NSURETEUsIGlucHV0LT5rZXliaXQpOw0KKw0KKyAgICAgICAgICAg ICAgIF9fY2xlYXJfYml0KEVWX0FCUywgaW5wdXQtPmV2Yml0KTsNCisNCisgICAgICAgICAgICAg ICBEQkdQUklOVEsoKCIlczogVXNlIHJlbGF0aXZlIGRhdGEgcmVwb3J0aW5nIG1vZGUuXG4iLA0K KyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18pKTsNCisgICAgICAgfQ0KKw0KKyAgICAg ICAvKiBSZWdpc3RlciB0aGUgZGV2aWNlIGluIGlucHV0IHN1YnN5c3RlbSAqLw0KKyAgICAgICBy ZXR2YWwgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodG91Y2gtPmlucHV0KTsNCisgICAgICAgaWYg KHJldHZhbCkgew0KKyAgICAgICAgICAgICAgIGRldl9lcnIoJnRvdWNoLT5jbGllbnQtPmRldiwN CisgICAgICAgICAgICAgICAgICAgICAgICIlczogSW5wdXQgZGV2aWNlIHJlZ2lzdGVyIGZhaWxl ZDogJWRcbiIsDQorICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcmV0dmFsKTsNCisN CisgICAgICAgICAgICAgICBpbnB1dF9mcmVlX2RldmljZShpbnB1dCk7DQorICAgICAgICAgICAg ICAgcmV0dXJuIHJldHZhbDsNCisgICAgICAgfQ0KKw0KKyAgICAgICByZXR1cm4gMDsNCit9DQor DQorc3RhdGljIGludCBjeWFwYV9jcmVhdGVfaW5wdXRfZGV2X3doZWVsKHN0cnVjdCBjeWFwYV9p MmMgKnRvdWNoKQ0KK3sNCisgICAgICAgaW50IHJldHZhbCA9IDA7DQorICAgICAgIHN0cnVjdCBp bnB1dF9kZXYgKmlucHV0X3doZWVsID0gTlVMTDsNCisNCisgICAgICAgaW5wdXRfd2hlZWwgPSB0 b3VjaC0+aW5wdXRfd2hlZWwgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsNCisgICAgICAgaWYg KCF0b3VjaC0+aW5wdXRfd2hlZWwpIHsNCisgICAgICAgICAgICAgICBkZXZfZXJyKCZ0b3VjaC0+ Y2xpZW50LT5kZXYsDQorICAgICAgICAgICAgICAgICAgICAgICAiJXM6IEFsbG9jYXRlIG1lbW9y eSBmb3IgSW5wdXQgZGV2aWNlIGZhaWxlZDogJWRcbiIsDQorICAgICAgICAgICAgICAgICAgICAg ICBfX2Z1bmNfXywgcmV0dmFsKTsNCisgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCisg ICAgICAgfQ0KKw0KKyAgICAgICBpbnB1dF93aGVlbC0+bmFtZSA9ICJjeWFwYV9pMmNfd2hlZWwi Ow0KKyAgICAgICBpbnB1dF93aGVlbC0+cGh5cyA9IHRvdWNoLT5jbGllbnQtPmFkYXB0ZXItPm5h bWU7DQorICAgICAgIGlucHV0X3doZWVsLT5pZC5idXN0eXBlID0gQlVTX0kyQzsNCisgICAgICAg aW5wdXRfd2hlZWwtPmlkLnZlcnNpb24gPSAxOw0KKyAgICAgICBpbnB1dF93aGVlbC0+ZGV2LnBh cmVudCA9ICZ0b3VjaC0+Y2xpZW50LT5kZXY7DQorICAgICAgIGlucHV0X3doZWVsLT5vcGVuID0g Y3lhcGFfaTJjX29wZW47DQorICAgICAgIGlucHV0X3doZWVsLT5jbG9zZSA9IGN5YXBhX2kyY19j bG9zZTsNCisgICAgICAgaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfd2hlZWwsIHRvdWNoKTsNCisN CisgICAgICAgX19zZXRfYml0KEVWX0tFWSwgaW5wdXRfd2hlZWwtPmV2Yml0KTsNCisgICAgICAg X19zZXRfYml0KEVWX1JFTCwgaW5wdXRfd2hlZWwtPmV2Yml0KTsNCisgICAgICAgX19zZXRfYml0 KFJFTF9XSEVFTCwgaW5wdXRfd2hlZWwtPnJlbGJpdCk7DQorDQorICAgICAgIHJldHZhbCA9IGlu cHV0X3JlZ2lzdGVyX2RldmljZSh0b3VjaC0+aW5wdXRfd2hlZWwpOw0KKyAgICAgICBpZiAocmV0 dmFsKSB7DQorICAgICAgICAgICAgICAgZGV2X2VycigmdG91Y2gtPmNsaWVudC0+ZGV2LA0KKyAg ICAgICAgICAgICAgICAgICAgICAgIiVzOiBJbnB1dCBkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkOiAl ZFxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCByZXR2YWwpOw0KKw0KKyAg ICAgICAgICAgICAgIGlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X3doZWVsKTsNCisgICAgICAgICAg ICAgICByZXR1cm4gcmV0dmFsOw0KKyAgICAgICB9DQorDQorICAgICAgIHJldHVybiAwOw0KK30N CisNCisjZGVmaW5lIE1BWF9OUl9TQ0FOQ09ERVMgIDEyOA0KKw0KK3N0YXRpYyB1bnNpZ25lZCBj aGFyIGN5YXBhX3ZpcnR1YWxfa2V5Y29kZVtNQVhfTlJfU0NBTkNPREVTXSA9IHsNCisvKiBCZWxs b3cga2V5cyBhcmUgc3VwcG9ydGVkLg0KK0tFWV9FTlRFUiAgICAgICAyOA0KK0tFWV9MRUZUQ1RS TCAgICAyOQ0KK0tFWV9MRUZUU0hJRlQgICA0Mg0KK0tFWV9SSUdIVFNISUZUICA1NA0KK0tFWV9M RUZUQUxUICAgICA1Ng0KK0tFWV9LUE1JTlVTICAgICA3NA0KK0tFWV9LUFBMVVMgICAgICA3OA0K K0tFWV9SSUdIVENUUkwgICA5Nw0KK0tFWV9SSUdIVEFMVCAgICAxMDANCitLRVlfSE9NRSAgICAg ICAgMTAyDQorS0VZX1VQICAgICAgICAgIDEwMw0KK0tFWV9QQUdFVVAgICAgICAxMDQNCitLRVlf TEVGVCAgICAgICAgMTA1DQorS0VZX1JJR0hUICAgICAgIDEwNg0KK0tFWV9FTkQgICAgICAgICAx MDcNCitLRVlfRE9XTiAgICAgICAgMTA4DQorS0VZX1BBR0VET1dOICAgIDEwOQ0KKyovDQorICAg ICAgIDI4LCAgMjksICA0MiwgIDU0LCAgNTYsICA3NCwgIDc4LCAgOTcsIDEwMCwNCisgICAgICAg MTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDkNCit9Ow0KKw0KK3N0YXRpYyBp bnQgY3lhcGFfY3JlYXRlX2lucHV0X2Rldl9rYmQoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gpDQor ew0KKyAgICAgICBpbnQgcmV0dmFsID0gMDsNCisgICAgICAgaW50IGk7DQorICAgICAgIHN0cnVj dCBpbnB1dF9kZXYgKmlucHV0X2tiZCA9IE5VTEw7DQorDQorICAgICAgIGlucHV0X2tiZCA9IHRv dWNoLT5pbnB1dF9rYmQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsNCisgICAgICAgaWYgKCF0 b3VjaC0+aW5wdXRfa2JkKSB7DQorICAgICAgICAgICAgICAgZGV2X2VycigmdG91Y2gtPmNsaWVu dC0+ZGV2LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBBbGxvY2F0ZSBtZW1vcnkgZm9y IElucHV0IGRldmljZSBmYWlsZWQ6ICVkXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgX19m dW5jX18sIHJldHZhbCk7DQorICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQorICAgICAg IH0NCisNCisgICAgICAgaW5wdXRfa2JkLT5uYW1lID0gImN5YXBhX2kyY192aXJ0dWFsX2tiZCI7 DQorICAgICAgIGlucHV0X2tiZC0+cGh5cyA9IHRvdWNoLT5jbGllbnQtPmFkYXB0ZXItPm5hbWU7 DQorICAgICAgIGlucHV0X2tiZC0+aWQuYnVzdHlwZSA9IEJVU19JMkM7DQorICAgICAgIGlucHV0 X2tiZC0+aWQudmVyc2lvbiA9IDE7DQorICAgICAgIGlucHV0X2tiZC0+ZGV2LnBhcmVudCA9ICZ0 b3VjaC0+Y2xpZW50LT5kZXY7DQorICAgICAgIGlucHV0X2tiZC0+b3BlbiA9IGN5YXBhX2kyY19v cGVuOw0KKyAgICAgICBpbnB1dF9rYmQtPmNsb3NlID0gY3lhcGFfaTJjX2Nsb3NlOw0KKyAgICAg ICBpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9rYmQsIHRvdWNoKTsNCisNCisgICAgICAgaW5wdXRf a2JkLT5rZXljb2RlID0gJmN5YXBhX3ZpcnR1YWxfa2V5Y29kZTsNCisgICAgICAgaW5wdXRfa2Jk LT5rZXljb2Rlc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBjaGFyKTsNCisgICAgICAgaW5wdXRfa2Jk LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShjeWFwYV92aXJ0dWFsX2tleWNvZGUpOw0KKw0KKyAg ICAgICBfX3NldF9iaXQoRVZfS0VZLCBpbnB1dF9rYmQtPmV2Yml0KTsNCisgICAgICAgX19zZXRf Yml0KEVWX1JFUCwgaW5wdXRfa2JkLT5ldmJpdCk7DQorDQorICAgICAgIGZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGN5YXBhX3ZpcnR1YWxfa2V5Y29kZSk7IGkrKykNCisgICAgICAgICAgICAg ICBfX3NldF9iaXQoY3lhcGFfdmlydHVhbF9rZXljb2RlW2ldLCBpbnB1dF9rYmQtPmtleWJpdCk7 DQorICAgICAgIF9fY2xlYXJfYml0KEtFWV9SRVNFUlZFRCwgaW5wdXRfa2JkLT5rZXliaXQpOw0K Kw0KKyAgICAgICByZXR2YWwgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodG91Y2gtPmlucHV0X2ti ZCk7DQorICAgICAgIGlmIChyZXR2YWwpIHsNCisgICAgICAgICAgICAgICBkZXZfZXJyKCZ0b3Vj aC0+Y2xpZW50LT5kZXYsDQorICAgICAgICAgICAgICAgICAgICAgICAiJXM6IElucHV0IGRldmlj ZSByZWdpc3RlciBmYWlsZWQ6ICVkXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5j X18sIHJldHZhbCk7DQorDQorICAgICAgICAgICAgICAgaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRf a2JkKTsNCisgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOw0KKyAgICAgICB9DQorDQorICAg ICAgIHJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjeWFwYV9pMmNfcHJv YmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGV2X2lkKQ0KK3sNCisgICAgICAgaW50 IHJldHZhbCA9IDA7DQorICAgICAgIHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoOw0KKw0KKyAgICAg ICBEQkdQUklOVEsoKCIlczogc3RhcnQgLi4uXG4iLCBfX2Z1bmNfXykpOw0KKyAgICAgICB0b3Vj aCA9IGN5YXBhX2kyY190b3VjaF9jcmVhdGUoY2xpZW50KTsNCisgICAgICAgaWYgKCF0b3VjaCkN CisgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCisNCisgICAgICAgLyogZG8gcGxhdGZy b20gaW5pdGlhbGl6ZSBmaXJzdGx5LiAqLw0KKyAgICAgICBpZiAodG91Y2gtPnBsYXRmb3JtX2Rh dGEtPmluaXQpDQorICAgICAgICAgICAgICAgcmV0dmFsID0gdG91Y2gtPnBsYXRmb3JtX2RhdGEt PmluaXQoKTsNCisgICAgICAgaWYgKHJldHZhbCkNCisgICAgICAgICAgICAgICBnb3RvIGVycl9t ZW1fZnJlZTsNCisNCisgICAgICAgLyogc2V0IGlycSBudW1iZXIgaWYgbm90IHVzaW5nIHBvbGxp bmcgbW9kZS4gKi8NCisgICAgICAgaWYgKHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT51c2VfcG9sbGlu Z19tb2RlID09IHRydWUpIHsNCisgICAgICAgICAgICAgICB0b3VjaC0+aXJxID0gLTE7DQorICAg ICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgaWYgKHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT5p cnFfZ3BpbyA9PSAtMSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsaWVudC0+aXJx KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5pcnEgPSBjbGllbnQt PmlycTsNCisgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGlycSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgc3lzdGVtLiAq Lw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3VjaC0+cGxhdGZvcm1fZGF0YS0+ dXNlX3BvbGxpbmdfbW9kZSA9IHRydWU7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRvdWNoLT5pcnEgPSAtMTsNCisgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAg ICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgICAgdG91Y2gtPmlycQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdwaW9fdG9faXJxKHRvdWNoLT5wbGF0Zm9ybV9k YXRhLT5pcnFfZ3Bpbyk7DQorICAgICAgICAgICAgICAgfQ0KKyAgICAgICB9DQorICAgICAgIERC R1BSSU5USygoIiVzOiBpcnE9JWQsIGNsaWVudC0+aXJxPSVkXG4iLA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgdG91Y2gtPmlycSwgY2xpZW50LT5pcnEpKTsNCisN CisgICAgICAgaWYgKHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT51c2VfcG9sbGluZ19tb2RlID09IGZh bHNlKSB7DQorICAgICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IHJlcXVlc3QgaW50ZXJydXB0 IHJpcS5cbiIsIF9fZnVuY19fKSk7DQorDQorICAgICAgICAgICAgICAgc2V0X2lycV90eXBlKHRv dWNoLT5pcnEsIElSUUZfVFJJR0dFUl9GQUxMSU5HKTsNCisgICAgICAgICAgICAgICByZXR2YWwg PSByZXF1ZXN0X2lycSh0b3VjaC0+aXJxLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGN5YXBhX2kyY19pcnEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDWUFQ QV9JMkNfTkFNRSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Vj aCk7DQorICAgICAgICAgICAgICAgaWYgKHJldHZhbCkgew0KKyAgICAgICAgICAgICAgICAgICAg ICAgZGV2X3dhcm4oJnRvdWNoLT5jbGllbnQtPmRldiwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiJXM6IElSUSByZXF1ZXN0IGZhaWxlZDogXA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICVkLCBmYWxsaW5nIGJhY2sgdG8gcG9sbGluZyBt b2RlLlxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNf XywgcmV0dmFsKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoLT5wbGF0Zm9ybV9k YXRhLT51c2VfcG9sbGluZ19tb2RlID0gdHJ1ZTsNCisgICAgICAgICAgICAgICB9DQorICAgICAg IH0NCisNCisgICAgICAgLyogcmVjb25maWcgdHJhY2twYWQgZGVwZW5kaW5nIG9uIHBsYXRmcm9t IHNldHRpbmcuICovDQorICAgICAgIC8qIFNob3VsZCBkaXNhYmxlIGludGVycnVwdCB0byBwcm90 ZWN0IHRoaXMgcG9sbGluZyByZWFkIG9wZXJhdGlvbi4NCisgICAgICAgKiogT2h0ZXJ3aXNlLCB0 aGlzIEkyQyByZWFkIHdpbGwgYmUgaW50ZXJydXB0IGJ5IG90aGVyIHJlYWRpbmcsDQorICAgICAg ICoqIGFuZCBmYWlsZWQuICovDQorICAgICAgIGRpc2FibGVfaXJxKHRvdWNoLT5pcnEpOw0KKyAg ICAgICBjeWFwYV9pMmNfcmVjb25maWcodG91Y2gpOw0KKyAgICAgICBlbmFibGVfaXJxKHRvdWNo LT5pcnEpOw0KKw0KKyAgICAgICAvKiBjcmVhdGUgYW4gaW5wdXRfZGV2IGluc3RhbmNlIGZvciB2 aXJ0dWFsIG1vdXNlIHRyYWNrcGFkLiAqLw0KKyAgICAgICByZXR2YWwgPSBjeWFwYV9jcmVhdGVf aW5wdXRfZGV2X21vdXNlKHRvdWNoKTsNCisgICAgICAgaWYgKHJldHZhbCkgew0KKyAgICAgICAg ICAgICAgIERCR1BSSU5USygoIiVzOiBjcmVhdGUgbW91c2UgaW5wdXRfZGV2IGluc3RhbmNlIGZp bGVkLlxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNf XykpOw0KKyAgICAgICAgICAgICAgIGdvdG8gZXJyX21lbV9mcmVlOw0KKyAgICAgICB9DQorDQor ICAgICAgIC8qIGNyZWF0ZSBhbiBpbnB1dF9kZXYgaW5zdGFuY2VzIGZvciB2aXJ0dWFsIHdoZWVs IGRldmljZQ0KKyAgICAgICAqKiBhbmQgdmlydHVhbCBrZXlib2FyZCBkZXZpY2UuICovDQorICAg ICAgIHJldHZhbCA9IGN5YXBhX2NyZWF0ZV9pbnB1dF9kZXZfd2hlZWwodG91Y2gpOw0KKyAgICAg ICBpZiAocmV0dmFsKSB7DQorICAgICAgICAgICAgICAgREJHUFJJTlRLKCgiJXM6IGNyZWF0ZSBp bnB1dF9kZXYgaW5zdGFuY2UgZm9yIHdoZWVsIGZpbGVkLlxuIiwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXykpOw0KKyAgICAgICAgICAgICAgIGdvdG8g ZXJyX21lbV9mcmVlOw0KKyAgICAgICB9DQorDQorICAgICAgIHJldHZhbCA9IGN5YXBhX2NyZWF0 ZV9pbnB1dF9kZXZfa2JkKHRvdWNoKTsNCisgICAgICAgaWYgKHJldHZhbCkgew0KKyAgICAgICAg ICAgICAgIERCR1BSSU5USygoIiVzOiBjcmVhdGUga2V5Ym9hZCBpbnB1dF9kZXYgaW5zdGFuY2Ug ZmlsZWQuXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVu Y19fKSk7DQorICAgICAgICAgICAgICAgZ290byBlcnJfbWVtX2ZyZWU7DQorICAgICAgIH0NCisN CisgICAgICAgaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdG91Y2gpOw0KKw0KKyAgICAgICBE QkdQUklOVEsoKCIlczogRG9uZSBzdWNjZXNzZnVsbHkuXG4iLCBfX2Z1bmNfXykpOw0KKw0KKyAg ICAgICByZXR1cm4gMDsNCisNCitlcnJfbWVtX2ZyZWU6DQorICAgICAgIC8qIHJlbGVhc2UgcHJl dmlvdXMgYWxsb2NhdGVkIGlucHV0X2RldiBpbnN0YW5jZXMuICovDQorICAgICAgIGlmICh0b3Vj aC0+aW5wdXQpIHsNCisgICAgICAgICAgICAgICBpbnB1dF9mcmVlX2RldmljZSh0b3VjaC0+aW5w dXQpOw0KKyAgICAgICAgICAgICAgIHRvdWNoLT5pbnB1dCA9IE5VTEw7DQorICAgICAgIH0NCisN CisgICAgICAgaWYgKHRvdWNoLT5pbnB1dF93aGVlbCkgew0KKyAgICAgICAgICAgICAgIGlucHV0 X2ZyZWVfZGV2aWNlKHRvdWNoLT5pbnB1dF93aGVlbCk7DQorICAgICAgICAgICAgICAgdG91Y2gt PmlucHV0X3doZWVsID0gTlVMTDsNCisgICAgICAgfQ0KKw0KKyAgICAgICBpZiAodG91Y2gtPmlu cHV0X2tiZCkgew0KKyAgICAgICAgICAgICAgIGlucHV0X2ZyZWVfZGV2aWNlKHRvdWNoLT5pbnB1 dF9rYmQpOw0KKyAgICAgICAgICAgICAgIHRvdWNoLT5pbnB1dF9rYmQgPSBOVUxMOw0KKyAgICAg ICB9DQorDQorICAgICAgIGtmcmVlKHRvdWNoKTsNCisNCisgICAgICAgREJHUFJJTlRLKCgiJXM6 IGV4aXN0IHdpdGggZXJyb3IgJWQuXG4iLCBfX2Z1bmNfXywgcmV0dmFsKSk7DQorICAgICAgIHJl dHVybiByZXR2YWw7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19kZXZleGl0IGN5YXBhX2kyY19yZW1v dmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkNCit7DQorICAgICAgIHN0cnVjdCBjeWFwYV9p MmMgKnRvdWNoID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQorDQorICAgICAgIGlmICgh dG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9wb2xsaW5nX21vZGUpDQorICAgICAgICAgICAgICAg ZnJlZV9pcnEoY2xpZW50LT5pcnEsIHRvdWNoKTsNCisNCisgICAgICAgaWYgKHRvdWNoLT5pbnB1 dCkNCisgICAgICAgICAgICAgICBpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh0b3VjaC0+aW5wdXQp Ow0KKyAgICAgICBpZiAodG91Y2gtPmlucHV0X3doZWVsKQ0KKyAgICAgICAgICAgICAgIGlucHV0 X3VucmVnaXN0ZXJfZGV2aWNlKHRvdWNoLT5pbnB1dCk7DQorICAgICAgIGlmICh0b3VjaC0+aW5w dXRfa2JkKQ0KKyAgICAgICAgICAgICAgIGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHRvdWNoLT5p bnB1dCk7DQorICAgICAgIGtmcmVlKHRvdWNoKTsNCisNCisgICAgICAgREJHUFJJTlRLKCgiJXM6 IC4uLlxuIiwgX19mdW5jX18pKTsNCisNCisgICAgICAgcmV0dXJuIDA7DQorfQ0KKw0KKyNpZmRl ZiBDT05GSUdfUE0NCitzdGF0aWMgaW50IGN5YXBhX2kyY19zdXNwZW5kKHN0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQsIHBtX21lc3NhZ2VfdCBtZXNnKQ0KK3sNCisgICAgICAgc3RydWN0IGN5YXBh X2kyYyAqdG91Y2ggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCisNCisgICAgICAgREJH UFJJTlRLKCgiJXM6IC4uLlxuIiwgX19mdW5jX18pKTsNCisgICAgICAgY2FuY2VsX2RlbGF5ZWRf d29ya19zeW5jKCZ0b3VjaC0+ZHdvcmspOw0KKw0KKyAgICAgICByZXR1cm4gMDsNCit9DQorDQor c3RhdGljIGludCBjeWFwYV9pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQor ew0KKyAgICAgICBpbnQgcmV0Ow0KKyAgICAgICBzdHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCA9IGky Y19nZXRfY2xpZW50ZGF0YShjbGllbnQpOw0KKw0KKyAgICAgICByZXQgPSBjeWFwYV9pMmNfcmVz ZXRfY29uZmlnKHRvdWNoKTsNCisgICAgICAgREJHUFJJTlRLKCgiJXM6IC4uLlxuIiwgX19mdW5j X18pKTsNCisgICAgICAgaWYgKHJldCkNCisgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KKw0K KyAgICAgICBjeWFwYV9pMmNfcmVzY2hlZHVsZV93b3JrKHRvdWNoLA0KKyAgICAgICAgICAgICAg ICAgICAgICAgbXNlY3NfdG9famlmZmllcyhDWUFQQV9OT19EQVRBX1NMRUVQX01TRUNTKSk7DQor DQorICAgICAgIHJldHVybiAwOw0KK30NCisjZWxzZQ0KKyNkZWZpbmUgY3lhcGFfaTJjX3N1c3Bl bmQgICAgICBOVUxMDQorI2RlZmluZSBjeWFwYV9pMmNfcmVzdW1lICAgICAgIE5VTEwNCisjZW5k aWYNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgY3lwcmVzc19pMmNfaWRf dGFibGVbXSA9IHsNCisgICAgICAgeyBDWUFQQV9JMkNfTkFNRSwgMCB9LA0KKyAgICAgICB7IH0s DQorfTsNCitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgY3lwcmVzc19pMmNfaWRfdGFibGUpOw0K Kw0KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjeXByZXNzX2kyY19kcml2ZXIgPSB7DQorICAg ICAgIC5kcml2ZXIgPSB7DQorICAgICAgICAgICAgICAgLm5hbWUgICA9IENZQVBBX0kyQ19OQU1F LA0KKyAgICAgICAgICAgICAgIC5vd25lciAgPSBUSElTX01PRFVMRSwNCisgICAgICAgfSwNCisN CisgICAgICAgLnByb2JlICAgICAgICAgID0gY3lhcGFfaTJjX3Byb2JlLA0KKyAgICAgICAucmVt b3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChjeWFwYV9pMmNfcmVtb3ZlKSwNCisNCisgICAgICAg LnN1c3BlbmQgICAgICAgID0gY3lhcGFfaTJjX3N1c3BlbmQsDQorICAgICAgIC5yZXN1bWUgICAg ICAgICA9IGN5YXBhX2kyY19yZXN1bWUsDQorICAgICAgIC5pZF90YWJsZSAgICAgICA9IGN5cHJl c3NfaTJjX2lkX3RhYmxlLA0KK307DQorDQorc3RhdGljIGludCBfX2luaXQgY3lhcGFfaTJjX2lu aXQodm9pZCkNCit7DQorICAgICAgIERCR1BSSU5USygoIiVzOiBzdGFydCAuLi5cbiIsIF9fZnVu Y19fKSk7DQorICAgICAgIHJldHVybiBpMmNfYWRkX2RyaXZlcigmY3lwcmVzc19pMmNfZHJpdmVy KTsNCit9DQorDQorc3RhdGljIHZvaWQgX19leGl0IGN5YXBhX2kyY19leGl0KHZvaWQpDQorew0K KyAgICAgICBEQkdQUklOVEsoKCIlczogZXhpdCAuLi5cbiIsIF9fZnVuY19fKSk7DQorICAgICAg IGkyY19kZWxfZHJpdmVyKCZjeXByZXNzX2kyY19kcml2ZXIpOw0KK30NCisNCittb2R1bGVfaW5p dChjeWFwYV9pMmNfaW5pdCk7DQorbW9kdWxlX2V4aXQoY3lhcGFfaTJjX2V4aXQpOw0KKw0KK01P RFVMRV9ERVNDUklQVElPTigiQ3lwcmVzcyBJMkMgVHJhY2twYWQgRHJpdmVyIik7DQorTU9EVUxF X0FVVEhPUigiRHVkbGV5IER1IDxkdWRsQGN5cHJlc3MuY29tPiIpOw0KK01PRFVMRV9MSUNFTlNF KCJHUEwiKTsNCisNCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2N5YXBhLmggYi9pbmNsdWRl L2xpbnV4L2N5YXBhLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi44ODhm YWIwDQotLS0gL2Rldi9udWxsDQorKysgYi9pbmNsdWRlL2xpbnV4L2N5YXBhLmgNCkBAIC0wLDAg KzEsNjAgQEANCisjaWZuZGVmIENZQVBBX0gNCisjZGVmaW5lIENZQVBBX0gNCisNCisNCisjZGVm aW5lIENZQVBBX0kyQ19OQU1FICAiY3lwcmVzc19pMmNfYXBhIg0KKw0KKy8qIEFjdGl2ZSBwb3dl ciBzdGF0ZSBzY2FubmluZy9wcm9jZXNzaW5nIHJlZnJlc2ggaW50ZXJ2YWwgdGltZS4gdW5pdDog bXMuICovDQorI2RlZmluZSBDWUFQQV9BQ1RJVkVfUE9MTElOR19JTlRWQUxfVElNRSAgMHgwMA0K Ky8qIExvdyBwb3dlciBzdGF0ZSBzY2FubmluZy9wcm9jZXNzaW5nIHJlZnJlc2ggaW50ZXJ2YWwg dGltZS4gdW5pdDogbXMuICovDQorI2RlZmluZSBDWUFQQV9MT1dQT1dFUl9QT0xMSU5HX0lOVFZB TF9USU1FIDB4MTANCisvKiBUb3VjaCB0aW1lb3V0IGZvciBhY3RpdmUgcG93ZXIgc3RhdGUuIHVu aXQ6IG1zLiAqLw0KKyNkZWZpbmUgQ1lBUEFfQUNUSVZFX1RPVUNIX1RJTUVPVVQgIDB4RkYNCisN CisvKiBNYXggcmVwb3J0IHJhdGUgbGltaXRlZCBmb3IgQ3lwcmVzcyBUcmFja3BhZC4gKi8NCisj ZGVmaW5lIENZQVBBX05PX0xJTUlURURfUkVQT1JUX1JBVEUgIDANCisjZGVmaW5lIENZQVBBX1JF UE9SVF9SQVRFICAoQ1lBUEFfTk9fTElNSVRFRF9SRVBPUlRfUkFURSkNCisjZGVmaW5lIENZQVBB X1BPTExJTkdfUkVQT1JUUkFURV9ERUZBVUxUIDEyNQ0KKw0KKw0KKy8qIEFQQSB0cmFja3BhZCBm aXJtd2FyZSBnZW5lcmF0aW9uICovDQorZW51bSBjeWFwYV9nZW4gew0KKyAgICAgICBDWUFQQV9H RU4xID0gMHgwMSwNCisgICAgICAgQ1lBUEFfR0VOMiA9IDB4MDIsDQorfTsNCisNCisvKg0KKyoq IEFQQSB0cmFja3BhZCBwb3dlciBzdGF0ZXMuDQorKiogVXNlZCBpbiByZWdpc3RlciAweDAwLCBi aXQzLTIsIFBvd2VyTW9kZSBmaWVsZC4NCisqLw0KK2VudW0gY3lhcGFfcG93ZXJzdGF0ZSB7DQor ICAgICAgIENZQVBBX1BXUl9BQ1RJVkUgPSAweDAxLA0KKyAgICAgICBDWUFQQV9QV1JfTElHSFRf U0xFRVAgPSAweDAyLA0KKyAgICAgICBDWUFQQV9QV1JfTUVESVVNX1NMRUVQID0gMHgwMywNCisg ICAgICAgQ1lBUEFfUFdSX0RFRVBfU0xFRVAgPSAweDA0LA0KK307DQorDQorc3RydWN0IGN5YXBh X3BsYXRmb3JtX2RhdGEgew0KKyAgICAgICB1MzIgZmxhZzsgICAvKiByZXNlcnZlZCBmb3IgZnV0 dXJlIHVzZS4gKi8NCisgICAgICAgZW51bSBjeWFwYV9nZW4gZ2VuOyAgLyogdHJhY2twYWQgZmly bXdhcmUgZ2VuZXJhdGlvbi4gKi8NCisgICAgICAgZW51bSBjeWFwYV9wb3dlcnN0YXRlIHBvd2Vy X3N0YXRlOw0KKw0KKyAgICAgICAvKiB1c2UgYWJzb2x1dGUgZGF0YSByZXBvcnQgb3IgcmVsYXRp dmUgZGF0YSByZXBvcnQuICovDQorICAgICAgIHVuc2lnbmVkIHVzZV9hYnNvbHV0ZV9tb2RlOjE7 DQorICAgICAgIC8qIHVzZSBwb2xsaW5nIG1vZGUgb3IgaW50ZXJydXB0IG1vZGUuICovDQorICAg ICAgIHVuc2lnbmVkIHVzZV9wb2xsaW5nX21vZGU6MTsNCisgICAgICAgLyogYWN0aXZlIG1vZGUs IHBvbGxpbmcgcmVmcmVzaCBpbnRlcnZhbDsgbXMgKi8NCisgICAgICAgdTggcG9sbGluZ19pbnRl cnZhbF90aW1lX2FjdGl2ZTsNCisgICAgICAgLyogbG93IHBvd2VyIG1vZGUsIHBvbGxpbmcgcmVm cmVzaCBpbnRlcnZhbDsgbXMgKi8NCisgICAgICAgdTggcG9sbGluZ19pbnRlcnZhbF90aW1lX2xv d3Bvd2VyOw0KKyAgICAgICB1OCBhY3RpdmVfdG91Y2hfdGltZW91dDsgIC8qIGFjdGl2ZSB0b3Vj aCB0aW1lb3V0OyBtcyAqLw0KKyAgICAgICBjaGFyICpuYW1lOyAgLyogZGV2aWNlIG5hbWUgb2Yg Q3lwcmVzcyBJMkMgdHJhY2twYWQuICovDQorICAgICAgIC8qIHRoZSBncGlvIGlkIHVzZWQgZm9y IGludGVycnVwdCB0byBub3RpZnkgaG9zdCBkYXRhIGlzIHJlYWR5LiAqLw0KKyAgICAgICBzMTYg aXJxX2dwaW87DQorICAgICAgIHUzMiByZXBvcnRfcmF0ZTsgIC8qIG1heCBsaW1pdGF0aW9uIG9m IGRhdGEgcmVwb3J0IHJhdGUuICovDQorDQorICAgICAgIGludCAoKndha2V1cCkodm9pZCk7DQor ICAgICAgIGludCAoKmluaXQpKHZvaWQpOw0KK307DQorDQorI2VuZGlmICAvKiAjaWZuZGVmIENZ QVBBX0ggKi8NCi0tDQoxLjcuMC40DQoNCkJlc3QgV2lzaGVzLA0KRHVkbGV5IER1DQo4Ni0yMS02 MTY0ODk1MA0KDQoNCg== --_002_B27AC323FA92C946BA36D2913DDC8E3701FD6F0B1A3BVMBX126ihos_ Content-Type: application/octet-stream; name="0001-Add-new-i2c-based-input-mouse-driver-for-Cypress-i2c.patch" Content-Description: 0001-Add-new-i2c-based-input-mouse-driver-for-Cypress-i2c.patch Content-Disposition: attachment; filename="0001-Add-new-i2c-based-input-mouse-driver-for-Cypress-i2c.patch"; size=106755; creation-date="Fri, 04 Mar 2011 08:05:35 GMT"; modification-date="Fri, 04 Mar 2011 20:05:00 GMT" Content-Transfer-Encoding: base64 RnJvbSBlZDAzNGY2N2MxMWZhMmRjOTNiNzc3YmExMmE0NzcwYWY4NTY3Y2U0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEdSwgRHVkbGV5IDxkdWRsQGN5cHJlc3MuY29tPgpEYXRlOiBG cmksIDQgTWFyIDIwMTEgMTU6MDM6NTEgLTA1MDAKU3ViamVjdDogW1BBVENIXSBBZGQgbmV3IGky Yy1iYXNlZCBpbnB1dCBtb3VzZSBkcml2ZXIgZm9yIEN5cHJlc3MgaTJjLWJhc2VkIHRyYWNrcGFk IGRldmljZXMgaW50byBpbnB1dCBzdWJzeXN0ZW0uCgpDaGFuZ2UtSWQ6IEkxMDhhZDE1MDVmM2Qz NGFiMjQ2NTg5MjFhNzcyZTkzNzk0MGExYjg4ClNpZ25lZC1vZmYtYnk6IER1LCBEdWRsZXkgPGR1 ZGxAY3lwcmVzcy5jb20+Ci0tLQogZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnICAgICAgIHwg ICAxMSArCiBkcml2ZXJzL2lucHV0L21vdXNlL01ha2VmaWxlICAgICAgfCAgICAxICsKIGRyaXZl cnMvaW5wdXQvbW91c2UvY3lwcmVzc19pMmMuYyB8IDM0NjMgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC9jeWFwYS5oICAgICAgICAgICAgIHwgICA2 MCArCiA0IGZpbGVzIGNoYW5nZWQsIDM1MzUgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2lucHV0L21vdXNlL2N5cHJlc3NfaTJjLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L2N5YXBhLmgKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2lucHV0L21vdXNlL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKaW5k ZXggYmY1ZmQ3Zi4uODQ1ZDA1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29u ZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwpAQCAtMzIyLDQgKzMyMiwxNSBA QCBjb25maWcgTU9VU0VfU1lOQVBUSUNTX0kyQwogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBh cyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQg c3luYXB0aWNzX2kyYy4KIAorY29uZmlnIE1PVVNFX0NZUFJFU1NfSTJDCisJdHJpc3RhdGUgIkN5 cHJlc3MgSTJDIFRvdWNocGFkIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBU aGlzIGRyaXZlciBzdXBwb3J0cyBDeXByZXNzIEkyQyB0b3VjaHBhZCBvbiBDaHJvbWUgT1MgcGxh dGZvcm0uCisKKwkgIFNheSB5IGhlcmUgaWYgeW91IGhhdmUgQ2hyb21lIE9TIHRoYXQgc3VwcG9y dCBDeXByZXNzIEkyQyBUb3VjaHBhZC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBh IG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3lw cmVzc19pMmMuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL01ha2Vm aWxlIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtlZmlsZQppbmRleCA1NzBjODRhLi43MDZmMjYx IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMv aW5wdXQvbW91c2UvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDcgQEAgb2JqLSQoQ09ORklHX01PVVNF X1BYQTkzMF9UUktCQUxMKQkrPSBweGE5MzBfdHJrYmFsbC5vCiBvYmotJChDT05GSUdfTU9VU0Vf UklTQ1BDKQkJKz0gcnBjbW91c2Uubwogb2JqLSQoQ09ORklHX01PVVNFX1NFUklBTCkJCSs9IHNl cm1vdXNlLm8KIG9iai0kKENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDKQkrPSBzeW5hcHRpY3Nf aTJjLm8KK29iai0kKENPTkZJR19NT1VTRV9DWVBSRVNTX0kyQykJCSs9IGN5cHJlc3NfaTJjLm8K IG9iai0kKENPTkZJR19NT1VTRV9WU1hYWEFBKQkJKz0gdnN4eHhhYS5vCiAKIHBzbW91c2Utb2Jq cyA6PSBwc21vdXNlLWJhc2UubyBzeW5hcHRpY3MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1 dC9tb3VzZS9jeXByZXNzX2kyYy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9jeXByZXNzX2kyYy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTQ2OTEKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2N5cHJlc3NfaTJjLmMKQEAgLTAsMCArMSwzNDYz IEBACisvKgorICogQ3lwcmVzcyBBUEEgdG91Y2hwYWQgd2l0aCBJMkMgaW50ZXJmYWNlCisgKgor ICogQ29weXJpZ2h0IChDKSAyMDA5IENvbXB1bGFiLCBMdGQuCisgKiBEdWRsZXkgRHUgPGR1ZGxA Y3lwcmVzcy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUg dGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZv cgorICogbW9yZSBkZXRhaWxzLgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgor I2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUg PGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxs aW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bGludXgv Y3lhcGEuaD4KKworCisvKiBEZWJ1ZyBtYWNybyAqLworI2RlZmluZSBDWUFQQV9EQkcgMAorI2lm IENZQVBBX0RCRworICAjZGVmaW5lIERCR1BSSU5USyh4KSBwcmludGsgeAorICAjZGVmaW5lIERC R19DWUFQQV9SRUFEX0JMT0NLX0RBVEEKKyNlbHNlCisgICNkZWZpbmUgREJHUFJJTlRLKHgpCisj ZW5kaWYKKworI2RlZmluZSBDWUFQQV9VU0VfSTJDX1JFR19XUklURV9CTE9DSyAwCisKKy8qIEN5 cHJlc3MgSTJDIEFQQSB0cmFja3BhZCBkcml2ZXIgdmVyc2lvbiBpcyBkZWZpbmVkIGFzIGJlbGxv dzoKKyoqIENZQVBBX01BSk9SX1ZFUi5DWUFQQV9NSU5PUl9WRVIuQ1lBUEFfUkVWSVNJT0lOX1ZF UiAgLiAqLworI2RlZmluZSBDWUFQQV9NQUpPUl9WRVIJCTAKKyNkZWZpbmUgQ1lBUEFfTUlOT1Jf VkVSCQk5CisjZGVmaW5lIENZQVBBX1JFVklTSU9JTl9WRVIJNAorCisjZGVmaW5lIENZQVBBX0ZJ TFRFUl9FTVBUWV9EQVRBICAweDdGRkZGRkZGCisKKy8qIG1hY3JvIGRlZmluaWNhdGlvbiBmb3Ig Z2VzdHVyZXMuICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHwtICAgICAgICAgIGJpdCA3IC0gNSAgICAg ICAgIC18LSAgICAgICAgICAgYml0IDQgLTAgICAgICAgICAtfCAqLworLyogfC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8ICovCisv KiB8LSAgICAgICAgZmluZ2VyIG51bWJlciAgICAgICAtfC0gICAgICAgIGdlc3R1cmUgaWQgICAg ICAgICAgLXwgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHRVNUVVJFX0ZJTkdFUlMoeCkgKCgo KHgpICYgMHgwNykgPDwgNSkgJiAweEUwKQorI2RlZmluZSBHRVNUVVJFX0lOREVYKHgpICgoKHgp ICYgMHgxRikpCisjZGVmaW5lIEdFU1RVUkVfSURfQ09ERShmaW5nZXIsIGluZGV4KSBcCisJCShH RVNUVVJFX0ZJTkdFUlMoZmluZ2VyKSB8IEdFU1RVUkVfSU5ERVgoaW5kZXgpKQorCisjZGVmaW5l IEdFU1RVUkVfTk9ORQkJCTB4MDAKKy8qIDAtZmluZ2VyIGdlc3R1cmVzLiAqLworI2RlZmluZSBH RVNUVVJFX1BBTE1fUkVKRUNUSU9JTgkgICAgR0VTVFVSRV9JRF9DT0RFKDAsIDEpCisvKiAxLWZp bmdlciBnZXN0dXJlcy4gKi8KKyNkZWZpbmUgR0VTVFVSRV9TSU5HTEVfVEFQCQkgICAgR0VTVFVS RV9JRF9DT0RFKDEsIDApCisjZGVmaW5lIEdFU1RVUkVfRE9VQkxFX1RBUAkJICAgIEdFU1RVUkVf SURfQ09ERSgxLCAxKQorLyoKKyoqIG9uZSBmaW5nZXIgY2xpY2sgYW5kIGhvbGQgZm9yIG1vcmUg dGhhbiBkZWZpbml0aW9pbiB0aW1lLAorKiogdGhlbiB0byBkbyBzb21ldGhpbmcuCisqLworI2Rl ZmluZSBHRVNUVVJFX1RBUF9BTkRfSE9MRAkgICAgR0VTVFVSRV9JRF9DT0RFKDEsIDIpCisjZGVm aW5lIEdFU1RVUkVfRURHRV9NT1RJT04JCSAgICBHRVNUVVJFX0lEX0NPREUoMSwgMykKKyNkZWZp bmUgR0VTVFVSRV9GTElDSwkJCSAgICBHRVNUVVJFX0lEX0NPREUoMSwgNCkKKy8qIEdFU1RVUkVf RFJBRyA6IGRvdWJsZSBjbGljayBhbmQgaG9sZCwgdGhlbiBtb3ZlIGZvciBkcmFnLiovCisjZGVm aW5lIEdFU1RVUkVfRFJBRwkJCSAgICBHRVNUVVJFX0lEX0NPREUoMSwgNSkKKy8qIERlcGVuZGlu ZyBvbiBQU09DIHVzZXIgbW9kdWxlLCBpdCB3aWxsIGdpdmUgZm91ciBkaWZmZXJlbnQgSUQgd2hl biBzY3JvbGwuKi8KKyNkZWZpbmUgR0VTVFVSRV9TQ1JPTExfVVAJCSAgICBHRVNUVVJFX0lEX0NP REUoMSwgNikKKyNkZWZpbmUgR0VTVFVSRV9TQ1JPTExfRE9XTgkJICAgIEdFU1RVUkVfSURfQ09E RSgxLCA3KQorI2RlZmluZSBHRVNUVVJFX1NDUk9MTF9MRUZUCQkgICAgR0VTVFVSRV9JRF9DT0RF KDEsIDgpCisjZGVmaW5lIEdFU1RVUkVfU0NST0xMX1JJR0hUCQlHRVNUVVJFX0lEX0NPREUoMSwg OSkKKworLyogMi1maW5nZXIgZ2VzdHVyZXMgKi8KKyNkZWZpbmUgR0VTVFVSRV8yRl9aT09NX0lO CQkgICAgR0VTVFVSRV9JRF9DT0RFKDIsIDApCisjZGVmaW5lIEdFU1RVUkVfMkZfWk9PTV9PVVQJ CSAgICBHRVNUVVJFX0lEX0NPREUoMiwgMSkKKyNkZWZpbmUgR0VTVFVSRV8yRl9TQ1JPTExfVVAJ CUdFU1RVUkVfSURfQ09ERSgyLCAyKQorI2RlZmluZSBHRVNUVVJFXzJGX1NDUk9MTF9ET1dOCSAg ICBHRVNUVVJFX0lEX0NPREUoMiwgMykKKyNkZWZpbmUgR0VTVFVSRV8yRl9TQ1JPTExfTEVGVAkg ICAgR0VTVFVSRV9JRF9DT0RFKDIsIDQpCisjZGVmaW5lIEdFU1RVUkVfMkZfU0NST0xMX1JJR0hU CSAgICBHRVNUVVJFX0lEX0NPREUoMiwgNSkKKyNkZWZpbmUgR0VTVFVSRV8yRl9ST1RBVEUJCSAg ICBHRVNUVVJFX0lEX0NPREUoMiwgNikKKyNkZWZpbmUgR0VTVFVSRV8yRl9QSU5DSAkJICAgIEdF U1RVUkVfSURfQ09ERSgyLCA3KQorLyogQWN0aXZhdGVzIHRoZSBSaWdodCBDbGljayBhY3Rpb24g Ki8KKyNkZWZpbmUgR0VTVFVSRV8yRl9UQVAJCQkgICAgR0VTVFVSRV9JRF9DT0RFKDIsIDgpCisv KiBTaW5nbGUtRmluZ2VyIGNsaWNrIGFuZCBob2xkIHdoaWxlIGEgc2Vjb25kIGZpbmdlciBpcyBt b3ZpbmcgZm9yIGRyYWdnaW5nLiAqLworI2RlZmluZSBHRVNUVVJFXzJGX0RSQUcJCQkgICAgR0VT VFVSRV9JRF9DT0RFKDIsIDkpCisjZGVmaW5lIEdFU1RVUkVfMkZfRkxJQ0sJCQkgICAgR0VTVFVS RV9JRF9DT0RFKDIsIDEwKQorCisvKiAzLWZpbmdlciBnZXN0dXJlcyAqLworI2RlZmluZSBHRVNU VVJFXzNGX0ZMSUNLCQkgICAgR0VTVFVSRV9JRF9DT0RFKDMsIDApCisKKy8qIDQtZmluZ2VyIGdl c3R1cmVzICovCisjZGVmaW5lIEdFU1RVUkVfNEZfRkxJQ0sJCSAgICBHRVNUVVJFX0lEX0NPREUo NCwgMCkKKworLyogNS1maW5nZXIgZ2VzdHVyZXMgKi8KKyNkZWZpbmUgR0VTVFVSRV81Rl9GTElD SwkJICAgIEdFU1RVUkVfSURfQ09ERSg1LCAwKQorCisvKiBzd2l0aCBvZiB0aGUgZ2VzdHVyZSwg Ki8KKyNkZWZpbmUgR0VTVFVSRV9NVUxUSV9UT1VDSF9PTkVfQ0xJQ0sgICAwCisKKyNkZWZpbmUg R0VTVFVSRV9ERUNPREVfRklOR0VSUyh4KQkoKCh4KSA+PiA1KSAmIDB4MDcpCisjZGVmaW5lIEdF U1RVUkVfREVDT0RFX0lOREVYKHgpCSgoeCkgJiAweDFGKQorCisvKiBtYXggZ2VzdHVyZSBpbmRl eCB2YWx1ZSBmb3IgZWFjaCBmaW5nZXJzIHR5cGUgaXMgMzEuIDB+MjEuKi8KKyNkZWZpbmUgTUFY X0ZJTkdFUlMJNQorCisKKy8qIHBhcmFtZXRlciB2YWx1ZSBmb3IgaW5wdXRfcmVwb3J0X2tleShC VE5fVE9PTF9XSURUSCkgKi8KKyNkZWZpbmUgQ1lBUEFfVE9PTF9XSURUSCA1MAorCisvKiBXaGVu IGluIElSUSBtb2RlIHJlYWQgdGhlIGRldmljZSBldmVyeSBUSFJFQURfSVJRX1NMRUVQX1NFQ1Mg Ki8KKyNkZWZpbmUgQ1lBUEFfVEhSRUFEX0lSUV9TTEVFUF9TRUNTCTIKKyNkZWZpbmUgQ1lBUEFf VEhSRUFEX0lSUV9TTEVFUF9NU0VDUyBcCisJCQkoQ1lBUEFfVEhSRUFEX0lSUV9TTEVFUF9TRUNT ICogTVNFQ19QRVJfU0VDKQorCisvKgorICogV2hlbiBpbiBQb2xsaW5nIG1vZGUgYW5kIG5vIGRh dGEgcmVjZWl2ZWQgZm9yIENZQVBBX05PX0RBVEFfVEhSRVMgbXNlY3MKKyAqIHJlZHVjZSB0aGUg cG9sbGluZyByYXRlIHRvIENZQVBBX05PX0RBVEFfU0xFRVBfTVNFQ1MKKyAqLworI2RlZmluZSBD WUFQQV9OT19EQVRBX1RIUkVTCQkJKE1TRUNfUEVSX1NFQykKKyNkZWZpbmUgQ1lBUEFfTk9fREFU QV9TTEVFUF9NU0VDUwkoTVNFQ19QRVJfU0VDIC8gNCkKKworLyogcmVwb3J0IGRhdGEgc3RhcnQg cmVnIG9mZnNldCBhZGRyZXNzLiAqLworI2RlZmluZSBEQVRBX1JFR19TVEFSVF9PRkZTRVQgIDB4 MDAwMAorLyogcmVsYXRpdmUgZGF0YSByZXBvcnQgZGF0YSBzaXplLiAqLworI2RlZmluZSBDWUFQ QV9SRUxfUkVHX0RBVEFfU0laRSAgNQorCisKKy8qIERldmljZSBTbGVlcCBNb2RlcyAqLworI2Rl ZmluZSBERVZfUE9XRVJfUkVHICAweDAwMDkKKyNkZWZpbmUgSU5URVJSVVBUX01PREVfTUFTSyAg MHgwMQorI2RlZmluZSBQV1JfTEVWRUxfTUFTSyAgMHgwNgorI2RlZmluZSBQV1JfQklUU19TSElU RiAxCisjZGVmaW5lIEdFVF9QV1JfTEVWRUwocmVnKSBcCisJKCgoKHVuc2lnbmVkIGNoYXIpKHJl ZykpJlBXUl9MRVZFTF9NQVNLKT4+UFdSX0JJVFNfU0hJVEYpCisKKy8qIHByb3RvY29sIFYxLiAq LworI2RlZmluZSBSRUdfR0VTVFVSRVMgMHgwQgorCisvKiBkZWZpbml0aW9uIHRvIHN0b3JlIHBs YXRmcm9tIGRhdGEuICovCitzdGF0aWMgc3RydWN0IGN5YXBhX3BsYXRmb3JtX2RhdGEgY3lhcGFf aTJjX3BsYXRmb3JtX2RhdGEgPSB7CisJLmZsYWcgPSAwLAorCS5nZW4gPSBDWUFQQV9HRU4yLAor CS5wb3dlcl9zdGF0ZSA9IENZQVBBX1BXUl9BQ1RJVkUsCisJLnVzZV9hYnNvbHV0ZV9tb2RlID0g dHJ1ZSwKKwkudXNlX3BvbGxpbmdfbW9kZSA9IGZhbHNlLAorCS5wb2xsaW5nX2ludGVydmFsX3Rp bWVfYWN0aXZlID0gQ1lBUEFfQUNUSVZFX1BPTExJTkdfSU5UVkFMX1RJTUUsCisJLnBvbGxpbmdf aW50ZXJ2YWxfdGltZV9sb3dwb3dlciA9IENZQVBBX0xPV1BPV0VSX1BPTExJTkdfSU5UVkFMX1RJ TUUsCisJLmFjdGl2ZV90b3VjaF90aW1lb3V0ID0gQ1lBUEFfQUNUSVZFX1RPVUNIX1RJTUVPVVQs CisJLm5hbWUgPSBDWUFQQV9JMkNfTkFNRSwKKwkuaXJxX2dwaW8gPSAtMSwKKwkucmVwb3J0X3Jh dGUgPSBDWUFQQV9SRVBPUlRfUkFURSwKK307CisKKworLyoKKyoqIEFQQSB0cmFja3BhZCBkZXZp Y2Ugc3RhdGVzLgorKiogVXNlZCBpbiByZWdpc3RlciAweDAwLCBiaXQxLTAsIERldmljZVN0YXR1 cyBmaWVsZC4KKyovCitlbnVtIGN5YXBhX2RldmljZXN0YXRlIHsKKwlDWUFQQV9ERVZfTk9STkFM ID0gMHgwMywKKyAgICAvKgorICAgICoqIEFmdGVyIHRyYWNrcGFkIGJvb3RlZCwgYW5kIGNhbiBy ZXBvcnQgZGF0YSwgaXQgc2hvdWxkIHNldCB0aGlzIHZhbHVlLgorICAgICoqIDB0aGVyIHZhbHVl cyBzdGFuZCBmb3IgdHJhY2twYWQgZGV2aWNlIGlzIGluIGFibm9ybWFsIHN0YXRlLgorICAgICoq IG1heWJlIG5lZWQgdG8gZG8gcmVzZXQgb3BlcmF0aW9uIHRvIGl0LgorICAgICoqIE90aGVyIHZh bHVlcyBhcmUgZGVmaW5lZCBsYXRlciBpZiBuZWVkZWQuCisgICAgKi8KK307CisKKyNkZWZpbmUg Q1lBUEFfTUFYX1RPVUNIUyAoTUFYX0ZJTkdFUlMpCisvKgorKiogb25seSAxIGdlc3R1cmUgY2Fu IGJlIHJlcG9ydGVkIG9uZSB0aW1lIHJpZ2h0IG5vdy4KKyovCisjZGVmaW5lIENZQVBBX09ORV9U SU1FX0dFU1RVUkVTICAoMSkKK3N0cnVjdCBjeWFwYV90b3VjaF9nZW4xIHsKKwl1OCByZWxfeHk7 CisJdTggcmVsX3g7CisJdTggcmVsX3k7Cit9OworCitzdHJ1Y3QgY3lhcGFfcmVnX2RhdGFfZ2Vu MSB7CisJdTggdGFwX21vdGlvbjsKKwlzOCBkZWx0YXg7CisJczggZGVsdGF5OworCXU4IHJlc2Vy dmVkMTsKKwl1OCByZXNlcnZlZDI7CisKKwlzdHJ1Y3QgY3lhcGFfdG91Y2hfZ2VuMSB0b3VjaDE7 CisJdTggdG91Y2hfZmluZ2VyczsKKwl1OCBmZWF0dXJlX2NvbmZpZzsKKwl1OCBhdmdfcHJlc3N1 cmU7ICAvKiBhdmVyYWdlIG9mIGFsbCB0b3VjaGVkIGZpbmdlcnMuICovCisJdTggZ2VzdHVyZV9z dGF0dXM7CisJc3RydWN0IGN5YXBhX3RvdWNoX2dlbjEgdG91Y2hzW0NZQVBBX01BWF9UT1VDSFMt MV07Cit9OworCitzdHJ1Y3QgY3lhcGFfdG91Y2hfZ2VuMiB7CisJdTggeHk7CisJdTggeDsKKwl1 OCB5OworCXU4IGlkOworfTsKKworc3RydWN0IGN5YXBhX2dlc3R1cmUgeworCXU4IGlkOworCXU4 IHBhcmFtMTsKKwl1OCBwYXJhbTI7Cit9OworCitzdHJ1Y3QgY3lhcGFfcmVnX2RhdGFfZ2VuMiB7 CisJdTggZGV2aWNlX3N0YXR1czsKKwl1OCByZWxhdGl2ZV9mbGFnczsKKwlzOCBkZWx0YXg7CisJ czggZGVsdGF5OworCXU4IGF2Z19wcmVzc3VyZTsKKwl1OCB0b3VjaF9maW5nZXJzOworCXU4IHJl c2VydmVkMTsKKwl1OCByZXNlcnZlZDI7CisJc3RydWN0IGN5YXBhX3RvdWNoX2dlbjIgdG91Y2hz W0NZQVBBX01BWF9UT1VDSFNdOworCXU4IGdlc3R1cmVfY291bnQ7CisJc3RydWN0IGN5YXBhX2dl c3R1cmUgZ2VzdHVyZVtDWUFQQV9PTkVfVElNRV9HRVNUVVJFU107Cit9OworCit1bmlvbiBjeWFw YV9yZWdfZGF0YSB7CisJc3RydWN0IGN5YXBhX3JlZ19kYXRhX2dlbjEgZ2VuMV9kYXRhOworCXN0 cnVjdCBjeWFwYV9yZWdfZGF0YV9nZW4yIGdlbjJfZGF0YTsKK307CisKK3N0cnVjdCBjeWFwYV90 b3VjaCB7CisJaW50IHg7CisJaW50IHk7CisJaW50IGlkOworfTsKKworc3RydWN0IGN5YXBhX3Jl cG9ydF9kYXRhIHsKKwl1OCBidXR0b247CisJdTggcmVzZXJ2ZWQxOworCXU4IHJlc2VydmVkMjsK Kwl1OCBhdmdfcHJlc3N1cmU7CisJaW50IHJlbF9kZWx0YVg7CisJaW50IHJlbF9kZWx0YVk7CisK KwlpbnQgdG91Y2hfZmluZ2VyczsKKwlzdHJ1Y3QgY3lhcGFfdG91Y2ggdG91Y2hzW0NZQVBBX01B WF9UT1VDSFNdOworCisJLyogaW4gZ2VuMSBhbmQgZ2VuMiwgb25seSAxIGdlc3R1cmUgb25lIHRp bWUgc3VwcG9ydGVkLiAqLworCWludCBnZXN0dXJlc19jb3VudDsKKwlzdHJ1Y3QgY3lhcGFfZ2Vz dHVyZSBnZXN0dXJlc1tDWUFQQV9PTkVfVElNRV9HRVNUVVJFU107Cit9OworCitzdHJ1Y3Qgc3Bl ZWRfcHJlZmVyZW5jZXMgeworCWludCBkZWZhdWx0X3RocmVzaG9sZDsgICAvKiBzbWFsbCBzY3Jv bGwgc3BlZWQgdGhyZXNob2xkLiAqLworCWludCBtaWRkbGVfdGhyZXNob2xkOworCWludCBmYXN0 X3RocmVzaG9sZDsKK307CisKK3N0cnVjdCBtb3VzZV9iYWxsaXN0aWNfcGFyYW1zIHsKKwkvKgor CSoqIHBsYXRmcm9tIGRpc3BsYXkgYXNwZWN0IHJhdGlvIGFkanVzdG1lbnQgcGFyYW1ldGVycy4K KwkqLworCWludCBhYnNfcmlzZV95OworCWludCBhYnNfcnVuX3k7CisKKwkvKgorCSoqIEFCUyBG SVIgZmlsdGVyIGFsZ29yaXRobSBwYXJhbWV0ZXJzLgorCSovCisJaW50IGZpcl9hYnNfZW5hYmxl ZDsKKworCWludCBmaXJfYWJzX2RlcHRoX21heDsKKwlpbnQgZmlyX2Fic19kZXB0aF9zbGV3X2Nv dW50OworCisJLyogRWNjZW50cmljaXR5IExpbWl0cy4gKi8KKwlpbnQgZmlyX2dlbnRsZV9jdXJ2 ZV9lY2NlbnRyaWNpdHlfbWF4OworCWludCBmaXJfbW9kZXJhdGVfY3VydmVfZWNjZW50cmljaXR5 X21heDsKKworCWludCBmaXJfc2xvd19zcGVlZF9saW1pdDsKKwlpbnQgZmlyX21vZGVyYXRlX3Nw ZWVkX2xpbWl0OworCisJaW50IGZpcl9nZW50bGVfY3VydmVfZGVwdGg7CisJaW50IGZpcl9tb2Rl cmF0ZV9jdXJ2ZV9kZXB0aDsKKwlpbnQgZmlyX3Nsb3dfc3BlZWRfZGVwdGg7CisJaW50IGZpcl9t b2RlcmF0ZV9zcGVlZF9kZXB0aDsKKworCS8qCisJKiogQUJTIElJUiBmaWx0ZXIgYWxnb3JpdGht IHBhcmFtZXRlcnMuCisJKi8KKwlpbnQgaWlyX2Fic19lbmFibGVkOworCWludCBpaXJfbnVtZXJh dG9yOworCWludCBpaXJfZGVub21pbmF0b3I7CisKKwkvKgorCSoqIFJFTCBtb3Rpb24gc3BlZWQv YWNjZWxlcmF0aW9uIGNvbnRyb2wgZmlsdGVyIGFsZ29yaXRobSBwYXJhbWV0ZXJzLgorCSovCisJ aW50IHJlbF9zdHJva2VfaGlzdG9yeV9kZXB0aDsKKworCWludCByZWxfbWVkaXVtX3NwZWVkX3Ro cmVzaG9sZDsKKwlpbnQgcmVsX2Zhc3Rfc3BlZWRfdGhyZXNob2xkOworCWludCByZWxfZmxpY2tf c3BlZWRfdGhyZXNob2xkOworCisJaW50IHJlbF9tb3Rpb25fbnVtZXJhdG9yOworCWludCByZWxf bWVkaXVtX3NwZWVkX251bWVyYXRvcjsKKwlpbnQgcmVsX21vdGlvbl9kZW5vbWluYXRvcjsKKwor CWludCByZWxfYWNjZWxlcmF0aW9uX251bWVyYXRvcjsKKwlpbnQgcmVsX2FjY2VsZXJhdGlvbl9k ZW5vbWluYXRvcjsKKworCS8qCisJKiogUkVMIElJUiBmaWx0ZXIgYWxnb3JpdGhtIHBhcmFtZXRl cnMuCisJKi8KKwlpbnQgcmVsX2lpcl9hY2NlbGVyYXRpb25fbnVtZXJhdG9yOworCWludCByZWxf aWlyX2FjY2VsZXJhdGlvbl9kZW5vbWluYXRvcjsKKworCWludCByZWxfbWF4X2FjY2VsZXJhdGlv bl9zcGVlZDsKK307CisKK3N0cnVjdCBjeWFwYV9wcmVmZXJlbmNlcyB7CisJc3RydWN0IHNwZWVk X3ByZWZlcmVuY2VzIHZzY3JvbGw7CisJc3RydWN0IHNwZWVkX3ByZWZlcmVuY2VzIGhzY3JvbGw7 CisJc3RydWN0IHNwZWVkX3ByZWZlcmVuY2VzIHpvb207CisKKwlzdHJ1Y3QgbW91c2VfYmFsbGlz dGljX3BhcmFtcyBtb3VzZV9iYWxsaXN0aWM7Cit9OworCitlbnVtIGZpcl9jdXJ2ZV9tb2RlIHsK KworCUZJUl9DVVJWRV9TTE9XX1NQRUVEX0xJTkUgPSAwLAorCUZJUl9DVVJWRV9NT0RFUkFURV9T UEVFRF9MSU5FID0gMSwKKwlGSVJfQ1VSVkVfRkFTVF9TUEVFRF9MSU5FID0gMiwKKwlGSVJfQ1VS VkVfR0VOVExFX0NVUlZFICA9IDMsCisJRklSX0NVUlZFX01PREVSQVRFX0NVUlZFID0gNCwKKwlG SVJfQ1VSVkVfRlVMTF9TVE9QID0gNSwKKwlGSVJfQ1VSVkVfQ0lSQ0xFID0gNiwKKwlGSVJfQ1VS VkVfVU5JTklUSUFMSVpFRCA9IDB4RkZGRkZGRkYKK307CisKK2VudW0gcmVsX3N0cm9rZV9zcGVl ZCB7CisJUkVMX1NUUk9LRV9TUEVFRF9TTE9XLAorCVJFTF9TVFJPS0VfU1BFRURfTUVESVVNLAor CVJFTF9TVFJPS0VfU1BFRURfRkFTVCwKKwlSRUxfU1RST0tFX1NQRUVEX1dBUlAKK307CisKK3N0 cnVjdCBwb2ludCB7CisJaW50IHg7CisJaW50IHk7Cit9OworCisvKiBNQVhfRklSX0RFUFRIOgor KiogQSBtYWNybyBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgRklSIEZJRk8u ICovCisjZGVmaW5lIE1BWF9GSVJfREVQVEggMjAKKy8qIFNUUk9LRV9ISVNUT1JZX1JFQ1M6Cisq KiBBIG1hY3JvIHdoaWNoIGRlZmluZXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHN0b3JlZAorKiog aW4gdGhlIHN0cm9rZSBoaXN0b3J5IGJ1ZmZlci4gKi8KKyNkZWZpbmUgUkVMX1NUUk9LRV9ISVNU T1JZX1JFQ1MgMTAKK3N0cnVjdCBjeWFwYV9jdXJzb3JfZmlsdGVycyB7CisJZW51bSBmaXJfY3Vy dmVfbW9kZSBmaXJfY3VydmVfdHlwZTsKKworCS8qIFRoZSBjdXJzb3IgRklSIGZpbHRlciBGSUZP IGZvciB0aGUgWCBmaW5nZXIgdmVjdG9yLiAqLworCWludCBmaXJfdmVjdG9yc194W01BWF9GSVJf REVQVEhdOworCS8qIFRoZSBjdXJzb3IgRklSIGZpbHRlciBGSUZPIGZvciB0aGUgWSBmaW5nZXIg dmVjdG9yLiAqLworCWludCBmaXJfdmVjdG9yc195W01BWF9GSVJfREVQVEhdOworCisJLyogVGhl IHJlbW5hbnQgZnJvbSB0aGUgcHJldmlvdXMgWCBGSVIgYXZlcmFnaW5nIGNvbXB1dGF0aW9uLgor CSoqIFJlLXNjYWxlZCB3aGVuIEZJUiBkZXB0aCBjaGFuZ2VzLiAqLworCWludCBmaXJfeF9tb2Q7 CisJLyogVGhlIHJlbW5hbnQgZnJvbSB0aGUgcHJldmlvdXMgWSBGSVIgYXZlcmFnaW5nIGNvbXB1 dGF0aW9uLgorCSoqIFJlLXNjYWxlZCB3aGVuIEZJUiBkZXB0aCBjaGFuZ2VzLiAqLworCWludCBm aXJfeV9tb2Q7CisKKwkvKiBDdXJyZW50IGRlcHRoIG9mIHRoZSBjdXJzb3IgRklSIGZpbHRlcidz ICdYJyBGSUZPLiAqLworCWludCBmaXJfYWJzX2RlcHRoX3g7CisJLyogQ3VycmVudCBkZXB0aCBv ZiB0aGUgY3Vyc29yIEZJUiBmaWx0ZXIncyAnWScgRklGTy4gKi8KKwlpbnQgZmlyX2Fic19kZXB0 aF95OworCisJLyogUHJldmlvdXMgZGVwdGggb2YgdGhlIGN1cnNvciBGSVIgZmlsdGVyJ3MgJ1gn IEZJRk8uCisJKiogVXNlZCB0byByZXNjYWxlIG1vZHVsYXIgcmVzaWR1ZSB3aGVuIEZJRk8gZGVw dGggaXMgZHluYW1pY2FsbHkKKwkqKiBjaGFuZ2VkLiAqLworCWludCBmaXJfYWJzX3ByZXZfZGVw dGhfeDsKKworCS8qIFByZXZpb3VzIGRlcHRoIG9mIHRoZSBjdXJzb3IgRklSIGZpbHRlcidzICdZ JyBGSUZPLgorCSoqIFVzZWQgdG8gcmVzY2FsZSBtb2R1bGFyIHJlc2lkdWUgd2hlbiBGSUZPIGRl cHRoIGlzIGR5bmFtaWNhbGx5CisJKi8KKwlpbnQgZmlyX2Fic19wcmV2X2RlcHRoX3k7CisKKwkv KiBDb3VudGVyIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBjdXJzb3IgRklSIFggdmVjdG9yIGZpbHRl cidzIHNsZXcgcmF0ZS4KKwkqKiBUaGUgRklSIGZpbHRlcidzIHNsZXcgcmF0ZSBkZXRlcm1pbmVz IHRoZSBzcGVlZCBhdCB3aGljaCB0aGUgRklSCisJKiogZGVwdGggaW5jcmVhc2VzIG92ZXIgdGlt ZSwKKwkqKiBsaW1pdGVkIGJ5IGN1cnNvciBzcGVlZCBhbmQgYXJjIHNldmVyaXR5LiAqLworCWlu dCBmaXJfYWJzX2RlcHRoX3NsZXdfY291bnRlcl94OworCisJLyogQ291bnRlciB1c2VkIHRvIGlt cGxlbWVudCB0aGUgY3Vyc29yIEZJUiBZIHZlY3RvciBmaWx0ZXIncyBzbGV3IHJhdGUuCisJKiog VGhlIEZJUiBmaWx0ZXIncyBzbGV3IHJhdGUgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYXQgd2hpY2gg dGhlIEZJUgorCSoqIGRlcHRoIGluY3JlYXNlcyBvdmVyIHRpbWUsCisJKiogbGltaXRlZCBieSBj dXJzb3Igc3BlZWQgYW5kIGFyYyBzZXZlcml0eS4gKi8KKwlpbnQgZmlyX2Fic19kZXB0aF9zbGV3 X2NvdW50ZXJfeTsKKworCWludCBmaXJfZWZmZWN0aXZlX21heF9kZXB0aDsKKworCS8qIFRoZSBj dXJyZW50IHN0YXRlIGZvciBvbmUgZmluZ2VyIElJUiBmaWx0ZXJpbmcsIFggcG9zaXRpb24uICov CisJaW50IGlpcl94OworCisJLyogVGhlIGN1cnJlbnQgc3RhdGUgZm9yIG9uZSBmaW5nZXIgSUlS IGZpbHRlcmluZywgWSBwb3NpdGlvbi4gKi8KKwlpbnQgaWlyX3k7CisKKwkvKiBUaGUgbW9kdWxh ciByZW1uYW50IG9mIHRoZSBwcmV2aW91cyBJSVIgZGl2aXNpb24gZm9yCisJKiogb25lIGZpbmdl ciBYIHBvc2l0aW9uIElJUiBjYWxjdWxhdGlvbnMuICovCisJaW50IGlpcl9tb2RfeDsKKworCS8q IFRoZSBtb2R1bGFyIHJlbW5hbnQgb2YgdGhlIHByZXZpb3VzIElJUiBkaXZpc2lvbiBmb3IKKwkq KiBvbmUgZmluZ2VyIFkgcG9zaXRpb24gSUlSIGNhbGN1bGF0aW9ucy4gKi8KKwlpbnQgaWlyX21v ZF95OworCisJc3RydWN0IHBvaW50IHJlbF9zdHJva2VfaGlzdG9yeVtSRUxfU1RST0tFX0hJU1RP UllfUkVDU107CisJaW50IHJlbF9zdHJva2VfZGVwdGg7CisJaW50IHJlbF9zdHJva2Vfc3BlZWQ7 CisKKwkvKiBUaGUgcnVubmluZyBtb2R1bGFyIHJlbWFpbmRlciBmcm9tIHRoZSBWZWxvY2l0eSBY IHZlY3RvciBjb21wdXRhdGlvbgorCSoqIHRoZSBwdXJwb3NlIG9mIGtlZXBpbmcgdGhlIHJlc2lk dWUgYmV0d2VlbiByZXBvcnQgcGVyaW9kcyBpcyB0byBib3RoCisJKiogZW5oYW5jZSBwcmVjaXNp b24gYW5kIHByZXZlbnQgdW5jb250cm9sbGVkICdsb3NpbmVzcycgb2YgdmVsb2NpdHkuICovCisJ aW50IHJlbF9yZXNpZHVlX3g7CisKKwkvKiBUaGUgcnVubmluZyBtb2R1bGFyIHJlbWFpbmRlciBm cm9tIHRoZSBWZWxvY2l0eSBZIHZlY3RvciBjb21wdXRhdGlvbgorCSoqIFRoZSBwdXJwb3NlIG9m IGtlZXBpbmcgdGhlIHJlc2lkdWUgYmV0d2VlbiByZXBvcnQgcGVyaW9kcyBpcyB0byBib3RoCisJ KiogZW5oYW5jZSBwcmVjaXNpb24gYW5kIHByZXZlbnQgdW5jb250cm9sbGVkICdsb3NpbmVzcycg b2YgdmVsb2NpdHkuICovCisJaW50IHJlbF9yZXNpZHVlX3k7CisKKwkvKiBUaGUgcnVubmluZyBt b2R1bGFyIHJlbWFpbmRlciBmcm9tIHRoZSBhY2NlbGVyYXRpb24gWCB2ZWN0b3IKKwkqKiBjb21w dXRhdGlvbi4gKi8KKwlpbnQgcmVsX3ByZXZfcmVzaWR1ZV9hY2NlbF94OworCisJLyogVGhlIHJ1 bm5pbmcgbW9kdWxhciByZW1haW5kZXIgZnJvbSB0aGUgYWNjZWxlcmF0aW9uIFkgdmVjdG9yCisJ KiogY29tcHV0YXRpb24uICovCisJaW50IHJlbF9wcmV2X3Jlc2lkdWVfYWNjZWxfeTsKKworCS8q IFRoZSBydW5uaW5nIGFjY2VsZXJhdGVkIGN1cnNvciBtb3Rpb24gSUlSIGZpbHRlcidzIFggdmVj dG9yLiAqLworCWludCByZWxfcHJldl9hY2NlbF9paXJfeDsKKworCS8qIFRoZSBydW5uaW5nIGFj Y2VsZXJhdGVkIGN1cnNvciBtb3Rpb24gSUlSIGZpbHRlcidzIFggdmVjdG9yJ3MgbW9kdWxhcgor CSoqIHJlc2lkdWUuIFByZXZlbnRzIGxvc3MgKHNsaXApIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBy ZXN1bHQgZnJvbQorCSoqIHRoZSBJSVIgY29tcHV0YXRpb24uICovCisJaW50IHJlbF9wcmV2X2Fj Y2VsX2lpcl9tb2RfeDsKKworCS8qIFRoZSBydW5uaW5nIGFjY2VsZXJhdGVkIGN1cnNvciBtb3Rp b24gSUlSIGZpbHRlcidzIFggdmVjdG9yLiAqLworCWludCByZWxfcHJldl9hY2NlbF9paXJfeTsK KworCS8qIFRoZSBydW5uaW5nIGFjY2VsZXJhdGVkIGN1cnNvciBtb3Rpb24gSUlSIGZpbHRlcidz IFggdmVjdG9yJ3MgbW9kdWxhcgorCSoqIHJlc2lkdWUuIFByZXZlbnRzIGxvc3MgKHNsaXApIHdo aWNoIHdvdWxkIG90aGVyd2lzZSByZXN1bHQgZnJvbQorCSoqIHRoZSBJSVIgY29tcHV0YXRpb24u ICovCisJaW50IHJlbF9wcmV2X2FjY2VsX2lpcl9tb2RfeTsKK307CisKKy8qIFRoZSBtYWluIGRl dmljZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBjeWFwYV9pMmMgeworCXN0cnVjdCBpMmNfY2xpZW50 CSpjbGllbnQ7CisJc3RydWN0IGlucHV0X2RldgkqaW5wdXQ7CisJc3RydWN0IGlucHV0X2Rldgkq aW5wdXRfd2hlZWw7CisJc3RydWN0IGlucHV0X2RldgkqaW5wdXRfa2JkOworCXN0cnVjdCBkZWxh eWVkX3dvcmsgZHdvcms7CisJc3BpbmxvY2tfdCBsb2NrOworCWludCBub19kYXRhX2NvdW50Owor CWludCBzY2FuX21zOworCWludCByZWFkX3BlbmRpbmc7CisJaW50IG9wZW5fY291bnQ7CisKKwlp bnQgaXJxOworCXN0cnVjdCBjeWFwYV9wbGF0Zm9ybV9kYXRhICpwbGF0Zm9ybV9kYXRhOworCXVu c2lnbmVkIHNob3J0IGRhdGFfYmFzZV9vZmZzZXQ7CisJdW5zaWduZWQgc2hvcnQgY29udHJvbF9i YXNlX29mZnNldDsKKwl1bnNpZ25lZCBzaG9ydCBjb21tYW5kX2Jhc2Vfb2Zmc2V0OworCXVuc2ln bmVkIHNob3J0IHF1ZXJ5X2Jhc2Vfb2Zmc2V0OworCisJc3RydWN0IGN5YXBhX3ByZWZlcmVuY2Vz IHByZWZlcmVuY2VzOworCisJaW50IHpvb21pbl9kZWx0YTsKKwlpbnQgem9vbW91dF9kZWx0YTsK KwlpbnQgaHNjcm9sbF9sZWZ0OworCWludCBoc2Nyb2xsX3JpZ2h0OworCWludCBoc2Nyb2xsX2Nh bmNlbGVkOworCWludCBkZWx0YV9zY3JvbGxfdXA7CisJaW50IGRlbHRhX3Njcm9sbF9kb3duOwor CWludCBkZWx0YV9zY3JvbGxfbGVmdDsKKwlpbnQgZGVsdGFfc2Nyb2xsX3JpZ2h0OworCWludCB6 b29tX3RyaWdnZWQ7CisKKwlpbnQgYWJzX3g7CisJaW50IGFic195OworCWludCBwcmV2X2Fic194 OworCWludCBwcmV2X2Fic195OworCWludCByZWxfeDsKKwlpbnQgcmVsX3k7CisJaW50IHByZXZf cmVsX3g7CisJaW50IHByZXZfcmVsX3k7CisJc3RydWN0IGN5YXBhX2N1cnNvcl9maWx0ZXJzIGN1 cnNvcl9maWx0ZXJzOworCXVuc2lnbmVkIGNoYXIgeHlfdG91Y2hzX2luY2x1ZGVkX2JpdHM7CisJ dW5zaWduZWQgY2hhciBnZXN0dXJlXzJGX2RyYWdfc3RhcnRlZDsKKworCXVuc2lnbmVkIGxvbmcg Y3VyX2FjdGl2ZV9nZXN0dXJlc1tNQVhfRklOR0VSU107CisJdW5zaWduZWQgbG9uZyBwcmV2X2Fj dGl2ZV9nZXN0dXJlc1tNQVhfRklOR0VSU107CisKKwlpbnQgcHJldl90b3VjaF9maW5nZXJzOwor CisJLyogcmVhZCBmcm9tIHF1ZXJ5IGRhdGEgcmVnaW9uLiAqLworCWNoYXIgcHJvZHVjdF9pZFsx Nl07CisJdW5zaWduZWQgY2hhciBjYXBhYmlsaXR5WzE0XTsKKwl1bnNpZ25lZCBjaGFyIGZtX21h al92ZXI7ICAvKiBmaXJtd2FyZSBtYWpvciB2ZXJzaW9uLiAqLworCXVuc2lnbmVkIGNoYXIgZm1f bWluX3ZlcjsgIC8qIGZpcm13YXJlIG1pbm9yIHZlcnNpb24uICovCisJdW5zaWduZWQgY2hhciBo d19tYWpfdmVyOyAgLyogaGFyZHdhcmUgbWFqb3IgdmVyc2lvbi4gKi8KKwl1bnNpZ25lZCBjaGFy IGh3X21pbl92ZXI7ICAvKiBoYXJkd2FyZSBtaW5vciB2ZXJzaW9uLiAqLworCWludCBtYXhfYWJz b2x1dGlvbl94OworCWludCBtYXhfYWJzb2x1dGlvbl95OworCWludCBwaHlzaWNhbF9zaXplX3g7 CisJaW50IHBoeXNpY2FsX3NpemVfeTsKK307CisKKworI2lmZGVmIERCR19DWUFQQV9SRUFEX0JM T0NLX0RBVEEKK3ZvaWQgY3lhcGFfcHJpbnRfZGF0YV9ibG9jayhjb25zdCBjaGFyICpmdW5jLCB1 OCByZWcsIHU4IGxlbmd0aCwgdm9pZCAqZGF0YSkKK3sKKwljaGFyIGJ1Zls1MTJdOworCXVuc2ln bmVkIGJ1Zl9sZW4gPSBzaXplb2YoYnVmKTsKKwljaGFyICpwID0gYnVmOworCWludCBpOworCWlu dCBsOworCisJbCA9IHNucHJpbnRmKHAsIGJ1Zl9sZW4sICJyZWcgMHglMDR4OiAiLCByZWcpOwor CWJ1Zl9sZW4gLT0gbDsKKwlwICs9IGw7CisJZm9yIChpID0gMDsgaSA8IGxlbmd0aCAmJiBidWZf bGVuOyBpKyssIHAgKz0gbCwgYnVmX2xlbiAtPSBsKQorCQlsID0gc25wcmludGYocCwgYnVmX2xl biwgIiUwMnggIiwgKigoY2hhciAqKWRhdGEgKyBpKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6 IGRhdGEgYmxvY2sgbGVuZ3RoID0gJWRcbiIsIGZ1bmMsIGxlbmd0aCk7CisJcHJpbnRrKEtFUk5f SU5GTyAiJXM6ICVzXG4iLCBmdW5jLCBidWYpOworfQorCit2b2lkIGN5YXBhX3ByaW50X3JlcG9y dF9kYXRhKGNvbnN0IGNoYXIgKmZ1bmMsCisJCQkJc3RydWN0IGN5YXBhX3JlcG9ydF9kYXRhICpy ZXBvcnRfZGF0YSkKK3sKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsIGZ1bmMpOworCXByaW50ayhLRVJOX0lO Rk8gIiVzOiByZXBvcnRfZGF0YS5idXR0b24gPSAweCUwMnhcbiIsCisJCQlmdW5jLCByZXBvcnRf ZGF0YS0+YnV0dG9uKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogcmVwb3J0X2RhdGEuYXZnX3By ZXNzdXJlID0gJWRcbiIsCisJCQlmdW5jLCByZXBvcnRfZGF0YS0+YXZnX3ByZXNzdXJlKTsKKwlw cmludGsoS0VSTl9JTkZPICIlczogcmVwb3J0X2RhdGEudG91Y2hfZmluZ2VycyA9ICVkXG4iLAor CQkJZnVuYywgcmVwb3J0X2RhdGEtPnRvdWNoX2ZpbmdlcnMpOworCWZvciAoaSA9IDA7IGkgPCBy ZXBvcnRfZGF0YS0+dG91Y2hfZmluZ2VyczsgaSsrKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVz OiByZXBvcnRfZGF0YS50b3VjaHNbJWRdLnggPSAlZFxuIiwKKwkJCQlmdW5jLCBpLCByZXBvcnRf ZGF0YS0+dG91Y2hzW2ldLngpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVwb3J0X2RhdGEu dG91Y2hzWyVkXS55ID0gJWRcbiIsCisJCQkJZnVuYywgaSwgcmVwb3J0X2RhdGEtPnRvdWNoc1tp XS55KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlcG9ydF9kYXRhLnRvdWNoc1slZF0uaWQg PSAlZFxuIiwKKwkJCQlmdW5jLCBpLCByZXBvcnRfZGF0YS0+dG91Y2hzW2ldLmlkKTsKKwl9CisJ cHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlcG9ydF9kYXRhLmdlc3R1cmVzX2NvdW50ID0gJWRcbiIs CisJCQlmdW5jLCByZXBvcnRfZGF0YS0+Z2VzdHVyZXNfY291bnQpOworCWZvciAoaSA9IDA7IGkg PCByZXBvcnRfZGF0YS0+Z2VzdHVyZXNfY291bnQ7IGkrKykgeworCQlwcmludGsoS0VSTl9JTkZP ICIlczogcmVwb3J0X2RhdGEuZ2VzdHVyZXNbJWRdLmlkID0gMHglMDJ4XG4iLAorCQkJZnVuYywg aSwgcmVwb3J0X2RhdGEtPmdlc3R1cmVzW2ldLmlkKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6 IHJlcG9ydF9kYXRhLmdlc3R1cmVzWyVkXS5wYXJhbTEgPSAweCUwMnhcbiIsCisJCQlmdW5jLCBp LCByZXBvcnRfZGF0YS0+Z2VzdHVyZXNbaV0ucGFyYW0xKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAi JXM6IHJlcG9ydF9kYXRhLmdlc3R1cmVzWyVkXS5wYXJhbTIgPSAweCUwMnhcbiIsCisJCQlmdW5j LCBpLCByZXBvcnRfZGF0YS0+Z2VzdHVyZXNbaV0ucGFyYW0yKTsKKwl9CisJcHJpbnRrKEtFUk5f SU5GTyAiJXM6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsIGZ1bmMp OworfQorCit2b2lkIGN5YXBhX3ByaW50X3BhbHRmb3JtX2RhdGEoY29uc3QgY2hhciAqZnVuYywK KwkJc3RydWN0IGN5YXBhX3BsYXRmb3JtX2RhdGEgKmN5YXBhX2kyY19wbGF0Zm9ybV9kYXRhKQor eworCXByaW50ayhLRVJOX0lORk8gIiVzOiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLVxuIiwKKwkJZnVuYyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGN5YXBhX2ky Y19wbGF0Zm9ybV9kYXRhLmZsYWcgPSAweCUwOHhcbiIsCisJCWZ1bmMsIGN5YXBhX2kyY19wbGF0 Zm9ybV9kYXRhLT5mbGFnKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogY3lhcGFfaTJjX3BsYXRm b3JtX2RhdGEuZ2VuID0gMHglMDJ4XG4iLAorCQlmdW5jLCBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0 YS0+Z2VuKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogY3lhcGFfaTJjX3BsYXRmb3JtX2RhdGEu cG93ZXJfc3RhdGUgPSAweCUwMnhcbiIsCisJCWZ1bmMsIGN5YXBhX2kyY19wbGF0Zm9ybV9kYXRh LT5wb3dlcl9zdGF0ZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGN5YXBhX2kyY19wbGF0Zm9y bV9kYXRhLnVzZV9hYnNvbHV0ZV9tb2RlID0gJXNcbiIsCisJCWZ1bmMsCisJCWN5YXBhX2kyY19w bGF0Zm9ybV9kYXRhLT51c2VfYWJzb2x1dGVfbW9kZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCXBy aW50ayhLRVJOX0lORk8gIiVzOiBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0YS51c2VfcG9sbGluZ19t b2RlID0gJXNcbiIsCisJCWZ1bmMsIGN5YXBhX2kyY19wbGF0Zm9ybV9kYXRhLT51c2VfcG9sbGlu Z19tb2RlCisJCQkJPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczog Y3lhcGFfaTJjX3BsYXRmb3JtX2RhdGEuIFwKKwkJcG9sbGluZ19pbnRlcnZhbF90aW1lX2FjdGl2 ZSA9ICVkXG4iLAorCQlmdW5jLCBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0YS0+cG9sbGluZ19pbnRl cnZhbF90aW1lX2FjdGl2ZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGN5YXBhX2kyY19wbGF0 Zm9ybV9kYXRhIFwKKwkJLnBvbGxpbmdfaW50ZXJ2YWxfdGltZV9sb3dwb3dlciA9ICVkXG4iLAor CQlmdW5jLCBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0YS0+cG9sbGluZ19pbnRlcnZhbF90aW1lX2xv d3Bvd2VyKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogY3lhcGFfaTJjX3BsYXRmb3JtX2RhdGEg XAorCQkuYWN0aXZlX3RvdWNoX3RpbWVvdXQgPSAlZFxuIiwKKwkJZnVuYywgY3lhcGFfaTJjX3Bs YXRmb3JtX2RhdGEtPmFjdGl2ZV90b3VjaF90aW1lb3V0KTsKKwlwcmludGsoS0VSTl9JTkZPICIl czogY3lhcGFfaTJjX3BsYXRmb3JtX2RhdGEubmFtZSA9ICVzXG4iLAorCQlmdW5jLCBjeWFwYV9p MmNfcGxhdGZvcm1fZGF0YS0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGN5YXBhX2ky Y19wbGF0Zm9ybV9kYXRhLmlycV9ncGlvID0gJWRcbiIsCisJCWZ1bmMsIGN5YXBhX2kyY19wbGF0 Zm9ybV9kYXRhLT5pcnFfZ3Bpbyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGN5YXBhX2kyY19w bGF0Zm9ybV9kYXRhLnJlcG9ydF9yYXRlID0gJWRcbiIsCisJCWZ1bmMsIGN5YXBhX2kyY19wbGF0 Zm9ybV9kYXRhLT5yZXBvcnRfcmF0ZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGN5YXBhX2ky Y19wbGF0Zm9ybV9kYXRhLmluaXQgPSAlcyVwXG4iLAorCQlmdW5jLCBjeWFwYV9pMmNfcGxhdGZv cm1fZGF0YS0+aW5pdCA/ICIweCIgOiAiIiwKKwkJY3lhcGFfaTJjX3BsYXRmb3JtX2RhdGEtPmlu aXQpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0YS53YWtl dXAgPSAlcyVwXG4iLAorCQlmdW5jLCBjeWFwYV9pMmNfcGxhdGZvcm1fZGF0YS0+d2FrZXVwID8g IjB4IiA6ICIiLAorCQljeWFwYV9pMmNfcGxhdGZvcm1fZGF0YS0+d2FrZXVwKTsKKwlwcmludGso S0VSTl9JTkZPICIlczogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c biIsCisJCWZ1bmMpOworfQorI2Vsc2UKK3ZvaWQgY3lhcGFfcHJpbnRfZGF0YV9ibG9jayhjb25z dCBjaGFyICpmdW5jLCB1OCByZWcsIHU4IGxlbmd0aCwgdm9pZCAqZGF0YSkge30KK3ZvaWQgY3lh cGFfcHJpbnRfcmVwb3J0X2RhdGEoY29uc3QgY2hhciAqZnVuYywKKwkJc3RydWN0IGN5YXBhX3Jl cG9ydF9kYXRhICpyZXBvcnRfZGF0YSkge30KK3ZvaWQgY3lhcGFfcHJpbnRfcGFsdGZvcm1fZGF0 YShjb25zdCBjaGFyICpmdW5jLAorCQlzdHJ1Y3QgY3lhcGFfcGxhdGZvcm1fZGF0YSAqY3lhcGFf aTJjX3BsYXRmb3JtX2RhdGEpIHt9CisjZW5kaWYKKworCisvKgorICogRHJpdmVyJ3MgaW5pdGlh bCBkZXNpZ24gbWFrZXMgbm8gcmFjZSBjb25kaXRpb24gcG9zc2libGUgb24gaTJjIGJ1cywKKyAq IHNvIHRoZXJlIGlzIG5vIG5lZWQgaW4gYW55IGxvY2tpbmcuCisgKiBLZWVwIGl0IGluIG1pbmQs IHdoaWxlIHBsYXlpbmcgd2l0aCB0aGUgY29kZS4KKyAqLworc3RhdGljIHMzMiBjeWFwYV9pMmNf cmVnX3JlYWRfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgcmVnKQoreworCWlu dCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAodTgpcmVn ICYgMHhmZik7CisKKwlyZXR1cm4gKChyZXQgPCAwKSA/IDAgOiByZXQpOworfQorCitzdGF0aWMg czMyIGN5YXBhX2kyY19yZWdfd3JpdGVfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1 MTYgcmVnLCB1OCB2YWwpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9i eXRlX2RhdGEoY2xpZW50LCAodTgpcmVnICYgMHhmZiwgdmFsKTsKKworCXJldHVybiAoKHJldCA8 IDApID8gMCA6IHJldCk7Cit9CisKK3N0YXRpYyBzMzIgY3lhcGFfaTJjX3JlZ19yZWFkX2Jsb2Nr KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcsCisJCQkJaW50IGxlbmd0aCwgdTgg KnZhbHVlcykKK3sKKwlpbnQgcmV0dmFsOworCXU4IGJ1ZlsxXTsKKworCS8qCisJKiogZGVwZW5k aW5nIG9uIFBTT0MgZWFzeSBJMkMgcmVhZCBvcGVyYXRpb25zLgorCSoqIHN0ZXAxOiBzZXQgcmVh ZCBwb2ludGVyIG9mIGVhc3kgSTJDLgorCSoqIHN0ZXAyOiByZWFkIGRhdGEuCisJKi8KKwkvKiBz dGVwMTogc2V0IHJlYWQgcG9pbnRlciBvZiBlYXN5IEkyQy4gKi8KKwltZW1zZXQoYnVmLCAwLCAx KTsKKwlidWZbMF0gPSAodTgpKCgodTgpcmVnKSAmIDB4ZmYpOworCXJldHZhbCA9IGkyY19tYXN0 ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJREJHUFJJTlRL KCgiJXM6IGkyY19tYXN0ZXJfc2VuZCBlcnJvciwgcmV0dmFsPSVkXG4iLAorCQkJX19mdW5jX18s IHJldHZhbCkpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIHN0ZXAyOiByZWFkIGRhdGEu ICovCisJcmV0dmFsID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgdmFsdWVzLCBsZW5ndGgpOwor CWlmIChyZXR2YWwgPCAwKSB7CisJCURCR1BSSU5USygoIiVzOiBpMmNfbWFzdGVyX3JlY3YgZXJy b3IsIHJldHZhbD0lZFxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwpKTsKKwkJcmV0dXJuIHJldHZh bDsKKwl9CisKKwkvKiBkZWJ1ZyBtZXNzYWdlICovCisJY3lhcGFfcHJpbnRfZGF0YV9ibG9jayhf X2Z1bmNfXywgKHU4KXJlZywgcmV0dmFsLCB2YWx1ZXMpOworCisJaWYgKHJldHZhbCAhPSBsZW5n dGgpIHsKKwkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LAorCQkJIiVzOiB3YXJuaW5nIEkyQyBibG9j ayByZWFkIGJ5dGVzIFwKKwkJCVslZF0gbm90IGVxdWFsIHRvIHJlcXVpcmVkIGJ5dGVzIFslZF0u XG4iLAorCQkJX19mdW5jX18sIHJldHZhbCwgbGVuZ3RoKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFs OworfQorCisjaWYgQ1lBUEFfVVNFX0kyQ19SRUdfV1JJVEVfQkxPQ0sKK3N0YXRpYyBzMzIgY3lh cGFfaTJjX3JlZ193cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgcmVn LAorCQkJCXU4IGxlbmd0aCwgY29uc3QgdTggKnZhbHVlcykKKworeworCWludCByZXR2YWw7CisJ aW50IGk7CisJdTggYnVmWzI1Nl07CisKKwlpZiAoKGxlbmd0aCsxKSA+IDI1NikgeworCQlEQkdQ UklOVEsoKCIlczogaW52YWxpZCB3cml0ZSBkYXRhIGxlbmd0aCwgbGVuZ3RoPSVkXG4iLAorCQkJ X19mdW5jX18sIGxlbmd0aCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSoqIGRl cGVuZGluZyBvbiBQU09DIGVhc3kgSTJDIHJlYWQgb3BlcmF0aW9ucy4KKwkqKiBzdGVwMTogd3Jp dGUgZGF0YSB0byBlYXN5IEkyQyBpbiBvbmUgY29tbWFuZC4KKwkqLworCS8qIHN0ZXAxOiB3cml0 ZSBkYXRhIHRvIGVhc3kgSTJDIGluIG9uZSBjb21tYW5kLiAqLworCW1lbXNldChidWYsIDAsIDI1 Nik7CisJYnVmWzBdID0gKHU4KSgoKHU4KXJlZykgJiAweGZmKTsKKwkvKiBtb3ZlIGRhdGEgc2hv dWQgYmUgd3JpdGUgdG8gSTJDIHNsYXZlIGRldmljZS4gKi8KKwlmb3IgKGkgPSAxOyBpIDwgbGVu Z3RoOyBpKyspCisJCWJ1ZltpXSA9IHZhbHVlc1tpLTFdOworCisJcmV0dmFsID0gaTJjX21hc3Rl cl9zZW5kKGNsaWVudCwgYnVmLCBsZW5ndGgrMSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJREJH UFJJTlRLKCgiJXM6IGkyY19tYXN0ZXJfc2VuZCBlcnJvciwgcmV0dmFsPSVkXG4iLAorCQkJX19m dW5jX18sIHJldHZhbCkpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmIChyZXR2YWwgIT0g KGxlbmd0aCsxKSkgeworCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCisJCQkiJXM6IHdhcm5pbmcg STJDIGJsb2NrIHdyaXRlIGJ5dGVzIFwKKwkJCVslZF0gbm90IGVxdWFsIHRvIHJlcXVpcmVkIGJ5 dGVzIFslZF0uXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCwgbGVuZ3RoKTsKKwl9CisKKwlyZXR1 cm4gcmV0dmFsOworfQorI2VuZGlmCisKKyNkZWZpbmUgUkVHX09GRlNFVF9EQVRBX0JBU0UgICAg IDB4MDAwMAorI2RlZmluZSBSRUdfT0ZGU0VUX0NPTlRST0xfQkFTRSAgMHgwMDI5CisjZGVmaW5l IFJFR19PRkZTRVRfQ09NTUFORF9CQVNFICAweDAwNDkKKyNkZWZpbmUgUkVHX09GRlNFVF9RVUVS WV9CQVNFICAgMHgwMDRCCitzdGF0aWMgdm9pZCBjeWFwYV9nZXRfcmVnX29mZnNldChzdHJ1Y3Qg Y3lhcGFfaTJjICp0b3VjaCkKK3sKKwl0b3VjaC0+ZGF0YV9iYXNlX29mZnNldCA9IFJFR19PRkZT RVRfREFUQV9CQVNFOworCXRvdWNoLT5jb250cm9sX2Jhc2Vfb2Zmc2V0ID0gUkVHX09GRlNFVF9D T05UUk9MX0JBU0U7CisJdG91Y2gtPmNvbW1hbmRfYmFzZV9vZmZzZXQgPSBSRUdfT0ZGU0VUX0NP TU1BTkRfQkFTRTsKKwl0b3VjaC0+cXVlcnlfYmFzZV9vZmZzZXQgPSBSRUdfT0ZGU0VUX1FVRVJZ X0JBU0U7CisKKwkvKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBkZXBlbmRp bmcgZmlybXdhcmUgc3VwcG9ydC4gKi8KK30KKworc3RhdGljIHZvaWQgY3lhcGFfZ2V0X3F1ZXJ5 X2RhdGEoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gpCit7CisJdW5zaWduZWQgY2hhciBxdWVyeV9k YXRhWzQwXTsKKwlpbnQgcmV0X3JlYWRfc2l6ZSA9IDA7CisJaW50IGk7CisKKwkvKiBxdWVyeSBk YXRhIGhhcyBiZWVuIHN1cHBvcnRlZCBpbiBHRU4xIHByb3RvY29sLiovCisJaWYgKHRvdWNoLT5w bGF0Zm9ybV9kYXRhLT5nZW4gPT0gQ1lBUEFfR0VOMikgeworCQltZW1zZXQocXVlcnlfZGF0YSwg MCwgNDApOworCQlyZXRfcmVhZF9zaXplID0gY3lhcGFfaTJjX3JlZ19yZWFkX2Jsb2NrKHRvdWNo LT5jbGllbnQsCisJCQkJCXRvdWNoLT5xdWVyeV9iYXNlX29mZnNldCwKKwkJCQkJMzgsCisJCQkJ CSh1OCAqKSZxdWVyeV9kYXRhKTsKKworCQl0b3VjaC0+cHJvZHVjdF9pZFswXSA9IHF1ZXJ5X2Rh dGFbMF07CisJCXRvdWNoLT5wcm9kdWN0X2lkWzFdID0gcXVlcnlfZGF0YVsxXTsKKwkJdG91Y2gt PnByb2R1Y3RfaWRbMl0gPSBxdWVyeV9kYXRhWzJdOworCQl0b3VjaC0+cHJvZHVjdF9pZFszXSA9 IHF1ZXJ5X2RhdGFbM107CisJCXRvdWNoLT5wcm9kdWN0X2lkWzRdID0gcXVlcnlfZGF0YVs0XTsK KwkJdG91Y2gtPnByb2R1Y3RfaWRbNV0gPSAnLSc7CisJCXRvdWNoLT5wcm9kdWN0X2lkWzZdID0g cXVlcnlfZGF0YVs1XTsKKwkJdG91Y2gtPnByb2R1Y3RfaWRbN10gPSBxdWVyeV9kYXRhWzZdOwor CQl0b3VjaC0+cHJvZHVjdF9pZFs4XSA9IHF1ZXJ5X2RhdGFbN107CisJCXRvdWNoLT5wcm9kdWN0 X2lkWzldID0gcXVlcnlfZGF0YVs4XTsKKwkJdG91Y2gtPnByb2R1Y3RfaWRbMTBdID0gcXVlcnlf ZGF0YVs5XTsKKwkJdG91Y2gtPnByb2R1Y3RfaWRbMTFdID0gcXVlcnlfZGF0YVsxMF07CisJCXRv dWNoLT5wcm9kdWN0X2lkWzEyXSA9ICctJzsKKwkJdG91Y2gtPnByb2R1Y3RfaWRbMTNdID0gcXVl cnlfZGF0YVsxMV07CisJCXRvdWNoLT5wcm9kdWN0X2lkWzE0XSA9IHF1ZXJ5X2RhdGFbMTJdOwor CQl0b3VjaC0+cHJvZHVjdF9pZFsxNV0gPSAnXDAnOworCisJCXRvdWNoLT5mbV9tYWpfdmVyID0g cXVlcnlfZGF0YVsxNV07CisJCXRvdWNoLT5mbV9taW5fdmVyID0gcXVlcnlfZGF0YVsxNl07CisJ CXRvdWNoLT5od19tYWpfdmVyID0gcXVlcnlfZGF0YVsxN107CisJCXRvdWNoLT5od19taW5fdmVy ID0gcXVlcnlfZGF0YVsxOF07CisKKwkJZm9yIChpID0gMDsgaSA8IDEzOyBpKyspCisJCQl0b3Vj aC0+Y2FwYWJpbGl0eVtpXSA9IHF1ZXJ5X2RhdGFbMTkraV07CisKKwkJdG91Y2gtPm1heF9hYnNv bHV0aW9uX3ggPQorCQkJKCgocXVlcnlfZGF0YVszMl0gJiAweEYwKSA8PCA0KSB8IHF1ZXJ5X2Rh dGFbMzNdKTsKKwkJdG91Y2gtPm1heF9hYnNvbHV0aW9uX3kgPQorCQkJKCgocXVlcnlfZGF0YVsz Ml0gJiAweDBGKSA8PCA4KSB8IHF1ZXJ5X2RhdGFbMzRdKTsKKwkJaWYgKCF0b3VjaC0+bWF4X2Fi c29sdXRpb25feCB8fCAhdG91Y2gtPm1heF9hYnNvbHV0aW9uX3kpIHsKKwkJCWlmICghc3RyY21w KHRvdWNoLT5wcm9kdWN0X2lkLCAiQ1lUUkEtMDE0MDAxLTAwIikpIHsKKwkJCQl0b3VjaC0+bWF4 X2Fic29sdXRpb25feCA9IDE2MDA7CisJCQkJdG91Y2gtPm1heF9hYnNvbHV0aW9uX3kgPSA5MDA7 CisJCQl9IGVsc2UgeworCQkJCXRvdWNoLT5tYXhfYWJzb2x1dGlvbl94ID0gMTIwMDsKKwkJCQl0 b3VjaC0+bWF4X2Fic29sdXRpb25feSA9IDYwMDsKKwkJCX0KKwkJfQorCisJCXRvdWNoLT5waHlz aWNhbF9zaXplX3ggPQorCQkJKCgocXVlcnlfZGF0YVszNV0gJiAweEYwKSA8PCA0KSB8IHF1ZXJ5 X2RhdGFbMzZdKTsKKwkJdG91Y2gtPnBoeXNpY2FsX3NpemVfeSA9CisJCQkoKChxdWVyeV9kYXRh WzM1XSAmIDB4MEYpIDw8IDgpIHwgcXVlcnlfZGF0YVszN10pOworCQlpZiAoIXRvdWNoLT5waHlz aWNhbF9zaXplX3ggfHwgIXRvdWNoLT5waHlzaWNhbF9zaXplX3kpIHsKKwkJCXRvdWNoLT5waHlz aWNhbF9zaXplX3ggPSAxMDU7CisJCQl0b3VjaC0+cGh5c2ljYWxfc2l6ZV95ID0gNjA7CisJCX0K KworCQlwcmludGsoS0VSTl9JTkZPICJDeXByZXNzIFRyYWNrcGFkIEluZm9ybWF0aW9uOlxuIik7 CisJCXByaW50ayhLRVJOX0lORk8gIlx0XHRcdFByb2R1Y3Rpb24gSUQ6ICAlc1xuIiwKKwkJCXRv dWNoLT5wcm9kdWN0X2lkKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiXHRcdFx0RmlybXdhcmUgdmVy c2lvbjogICVkLiVkXG4iLAorCQkJdG91Y2gtPmZtX21hal92ZXIsIHRvdWNoLT5mbV9taW5fdmVy KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiXHRcdFx0SGFyZHdhcmUgdmVyc2lvbjogICVkLiVkXG4i LAorCQkJdG91Y2gtPmh3X21hal92ZXIsIHRvdWNoLT5od19taW5fdmVyKTsKKwkJcHJpbnRrKEtF Uk5fSU5GTyAiXHRcdFx0RHJpdmVyIFZlcnNpb246ICAlZC4lZC4lZFxuIiwKKwkJCUNZQVBBX01B Sk9SX1ZFUiwgQ1lBUEFfTUlOT1JfVkVSLCBDWUFQQV9SRVZJU0lPSU5fVkVSKTsKKwkJcHJpbnRr KEtFUk5fSU5GTyAiXHRcdFx0UmVzb2x1dGlvbiBYLFk6ICAgJWQsJWRcbiIsCisJCQl0b3VjaC0+ bWF4X2Fic29sdXRpb25feCwgdG91Y2gtPm1heF9hYnNvbHV0aW9uX3kpOworCQlwcmludGsoS0VS Tl9JTkZPICJcdFx0XHRQaHlzaWNhbCBTaXplIFgsWTogICAlZCwlZFxuIiwKKwkJCXRvdWNoLT5w aHlzaWNhbF9zaXplX3gsIHRvdWNoLT5waHlzaWNhbF9zaXplX3kpOworCX0KK30KKworc3RhdGlj IGludCBjeWFwYV9pMmNfcmVjb25maWcoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gpCit7CisJc3Ry dWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvdWNoLT5jbGllbnQ7CisJaW50IHJlZ3ZhbCA9IDA7 CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPmdlbiA9PSBD WUFQQV9HRU4xKSB7CisJCS8qIHRyYWNrcGFkIGdlbjEgZmlybXdhcmUuICovCisJCURCR1BSSU5U SygoIiVzOiB0cmFja3BhZCBzdXBwb3J0IGdlbjEgZmlybXdhcmUuXG4iLCBfX2Z1bmNfXykpOwor CisJCXJlZ3ZhbCA9IGN5YXBhX2kyY19yZWdfcmVhZF9ieXRlKGNsaWVudCwgREVWX1BPV0VSX1JF Ryk7CisJCURCR1BSSU5USygoIiVzOiByZWFkIHRyYWNrcGFkIGludGVycnVwdCBiaXQgPSAweCUw MnhcbiIsCisJCQkJCV9fZnVuY19fLCByZWd2YWwmSU5URVJSVVBUX01PREVfTUFTSykpOworCisJ CWlmICgodG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9wb2xsaW5nX21vZGUgPT0gdHJ1ZSkKKwkJ CSYmICgocmVndmFsICYgSU5URVJSVVBUX01PREVfTUFTSykKKwkJCQk9PSBJTlRFUlJVUFRfTU9E RV9NQVNLKSkgeworCQkJLyogcmVzZXQgdHJhY2twYWQgdG8gcG9sbGluZyBtb2RlLiAqLworCQkJ cmVndmFsICY9ICh+SU5URVJSVVBUX01PREVfTUFTSyk7CisJCQlyZXR2YWwgPSBjeWFwYV9pMmNf cmVnX3dyaXRlX2J5dGUoY2xpZW50LCBERVZfUE9XRVJfUkVHLAorCQkJCQkJKHU4KShyZWd2YWwg JiAweGZmKSk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJREJHUFJJTlRLKCgiJXM6IHNldCB0byBw b2xsaWluZyBtb2RlIGZhaWxlZCxcCisJCQkJCXJldHZhbD0lZC5cbiIsIF9fZnVuY19fLCByZXR2 YWwpKTsKKwkJCQkvKgorCQkJCSAqIFRob3VnaCBmaXJtd2FyZSBoYXMgc2V0IGludGVycnVwdCBt b2RlIGJpdC4KKwkJCQkgKiBidXQgc2luY2UgcGxhdGZyb20gZG9lc24ndCBzdXBwb3J0CisJCQkJ ICogaW50ZXJydXB0IG1vZGUsIHNvIGFsc28gdXNlIHBvbGxpbmcgbW9kZSBoZXJlCisJCQkJICog ZG8gbm90aGluZy4KKwkJCQkgKi8KKwkJCX0KKwkJfSBlbHNlIGlmICgodG91Y2gtPnBsYXRmb3Jt X2RhdGEtPnVzZV9wb2xsaW5nX21vZGUgPT0gZmFsc2UpCisJCQkmJiAoKHJlZ3ZhbCAmIElOVEVS UlVQVF9NT0RFX01BU0spCisJCQkJIT0gSU5URVJSVVBUX01PREVfTUFTSykpIHsKKwkJCS8qIHJl c2V0IHRyYWNrcGFkIHRvIGludGVycnVwdCBtb2RlLiAqLworCQkJcmVndmFsIHw9IElOVEVSUlVQ VF9NT0RFX01BU0s7CisJCQlyZXR2YWwgPSBjeWFwYV9pMmNfcmVnX3dyaXRlX2J5dGUoY2xpZW50 LCBERVZfUE9XRVJfUkVHLAorCQkJCQkJKHU4KShyZWd2YWwgJiAweGZmKSk7CisJCQlpZiAocmV0 dmFsKSB7CisJCQkJREJHUFJJTlRLKCgiJXM6IHNldCB0byBpbnRlcnJ1cCBtb2RlIGZhaWxlZCwg XAorCQkJCQlyZXR2YWw9JWQuXG4iLCBfX2Z1bmNfXywgcmV0dmFsKSk7CisJCQkJdG91Y2gtPnBs YXRmb3JtX2RhdGEtPnVzZV9wb2xsaW5nX21vZGUgPSB0cnVlOworCQkJfQorCQl9CisKKwkJREJH UFJJTlRLKCgiJXM6IHRyYWNrcGFkIGludGVycnVwdCBiaXQgPSAweCUwMnhcbiIsIF9fZnVuY19f LAorCQkJKHU4KWN5YXBhX2kyY19yZWdfcmVhZF9ieXRlKGNsaWVudCwgREVWX1BPV0VSX1JFRykp KTsKKwl9IGVsc2UgeworCQkvKiB0cmFja3BhZCBnZW4yIGZpcm13YXJlLiBkZWZhdWx0IGlzIGlu dGVycnVwdCBtb2RlLiAqLworCQlEQkdQUklOVEsoKCIlczogdHJhY2twYWQgc3VwcG9ydCBnZW4y IGZpcm13YXJlLlxuIiwgX19mdW5jX18pKTsKKworCQljeWFwYV9nZXRfcmVnX29mZnNldCh0b3Vj aCk7CisJCWN5YXBhX2dldF9xdWVyeV9kYXRhKHRvdWNoKTsKKwl9CisKKwlEQkdQUklOVEsoKCIl czogdXNlICVzIG1vZGUuXG4iLCBfX2Z1bmNfXywKKwkJCSgodG91Y2gtPnBsYXRmb3JtX2RhdGEt PnVzZV9wb2xsaW5nX21vZGUgPT0gdHJ1ZSkKKwkJCT8gInBvbGxpbmciIDogImludGVycnVwdCIp KSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBjeWFwYV9pMmNfcmVzZXRfY29u ZmlnKHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoKQoreworCWludCByZXQgPSAwOworCisJREJHUFJJ TlRLKCgiJXM6IC4uLlxuIiwgX19mdW5jX18pKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgY3lhcGFfdmVyaWZ5X2RhdGFfZGV2aWNlKHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoLAor CQkJCXVuaW9uIGN5YXBhX3JlZ19kYXRhICpyZWdfZGF0YSkKK3sKKwlzdHJ1Y3QgY3lhcGFfcmVn X2RhdGFfZ2VuMSAqZGF0YV9nZW4xID0gTlVMTDsKKwlzdHJ1Y3QgY3lhcGFfcmVnX2RhdGFfZ2Vu MiAqZGF0YV9nZW4yID0gTlVMTDsKKworCWlmICh0b3VjaC0+cGxhdGZvcm1fZGF0YS0+Z2VuID09 IENZQVBBX0dFTjEpIHsKKwkJZGF0YV9nZW4xID0gJnJlZ19kYXRhLT5nZW4xX2RhdGE7CisJCWlm ICgoZGF0YV9nZW4xLT50YXBfbW90aW9uICYgMHgwOCkgIT0gMHgwOCkgeworCQkJLyogaW52YWxp ZCBkYXRhLiAqLworCQkJREJHUFJJTlRLKCgiJXM6IGludmFsaWQgZGF0YSByZWcgYWRkcmVzcyAw eDAwLCAgXAorCQkJCWJpdDMgaXMgbm90IHNldC5cbiIsIF9fZnVuY19fKSk7CisJCQlyZXR1cm4g LUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCWRhdGFfZ2VuMiA9ICZyZWdfZGF0YS0+Z2VuMl9k YXRhOworCQlpZiAoKGRhdGFfZ2VuMi0+ZGV2aWNlX3N0YXR1cyAmIDB4ODApICE9IDB4ODApIHsK KwkJCS8qIGludmFsaWQgZGF0YS4gKi8KKwkJCURCR1BSSU5USygoIiVzOiBpbnZhbGlkIGRhdGEg cmVnIGFkZHJlc3MgMHgwMCwgIFwKKwkJCQliaXQ3IGlzIG5vdCBzZXQuXG4iLCBfX2Z1bmNfXykp OworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoKGRhdGFfZ2VuMi0+ZGV2aWNlX3N0 YXR1cyAmIDB4MDMpICE9IENZQVBBX0RFVl9OT1JOQUwpIHsKKwkJCURCR1BSSU5USygoIiVzOiBp bnZhbGlkIGRldmljZSBzdGF0dXMgPSAweCUwMngsICBcCisJCQkJd2FpdCBmb3IgZGV2aWNlIHJl YWR5LlxuIiwKKwkJCQlfX2Z1bmNfXywgKGRhdGFfZ2VuMi0+ZGV2aWNlX3N0YXR1cyAmIDB4MDMp KSk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBjeWFwYV9jYWxjdWxhdGVfYWJzX3h5KHN0cnVjdCBjeWFwYV9pMmMgKnRv dWNoLAorCQkJCQlzdHJ1Y3QgY3lhcGFfcmVwb3J0X2RhdGEgKnJlcG9ydF9kYXRhKQoreworCWlu dCBpOworCWludCBzdW1feCA9IDAsIHN1bV95ID0gMDsKKworCS8qIGludmFsaWQgaW5wdXQgZGF0 YS4gKi8KKwlpZiAoIXRvdWNoLT54eV90b3VjaHNfaW5jbHVkZWRfYml0cyB8fCAhcmVwb3J0X2Rh dGEtPnRvdWNoX2ZpbmdlcnMpIHsKKwkJdG91Y2gtPnByZXZfYWJzX3ggPSAtMTsKKwkJdG91Y2gt PnByZXZfYWJzX3kgPSAtMTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBDWUFQ QV9NQVhfVE9VQ0hTOyBpKyspIHsKKwkJaWYgKHRvdWNoLT54eV90b3VjaHNfaW5jbHVkZWRfYml0 cyAmICgweDAxIDw8IGkpKSB7CisJCQlzdW1feCArPSByZXBvcnRfZGF0YS0+dG91Y2hzW2ldLng7 CisJCQlzdW1feSArPSByZXBvcnRfZGF0YS0+dG91Y2hzW2ldLnk7CisJCX0KKwl9CisKKwl0b3Vj aC0+YWJzX3ggPSBzdW1feCAvIHJlcG9ydF9kYXRhLT50b3VjaF9maW5nZXJzOworCXRvdWNoLT5h YnNfeSA9IHN1bV95IC8gcmVwb3J0X2RhdGEtPnRvdWNoX2ZpbmdlcnM7CisJLyogeCwgeSBkaXJl Y3Rvcnkgb2YgQ3lwcmVzcyB0cmFja3BhZCBpcyBpbiBuZWdhdGl2ZSBkaXJlY3Rpb24gb2Ygc2Ny ZWVuCisJKiogZm9yIHNvbWUgcGxhdGZvcm0gaXQgbWF5YmUgZGlmZmVyZW50LiAqLworCS8qKioK Kwl0b3VjaC0+YWJzX3ggPSB0b3VjaC0+cGxhdGZvcm1fZGF0YS0+bWF4X3RvdWNocGFkX3ggLSB0 b3VjaC0+YWJzX3g7CisJdG91Y2gtPmFic195ID0gdG91Y2gtPnBsYXRmb3JtX2RhdGEtPm1heF90 b3VjaHBhZF95IC0gdG91Y2gtPmFic195OworCSoqKi8KKworCS8qIHVzZSBzaW1wbGUgZmlsdHIg dG8gbWFrZSBjdXJzb3IgbW92ZSBzbW9vdGhlci4gKi8KKwlpZiAodG91Y2gtPnByZXZfYWJzX3gg IT0gLTEpIHsKKwkJdG91Y2gtPmFic194ID0gKHRvdWNoLT5hYnNfeCAqIDMgKyB0b3VjaC0+cHJl dl9hYnNfeCkgPj4gMjsKKwkJdG91Y2gtPmFic195ID0gKHRvdWNoLT5hYnNfeSAqIDMgKyB0b3Vj aC0+cHJldl9hYnNfeSkgPj4gMjsKKwl9CisKKwl0b3VjaC0+cHJldl9hYnNfeCA9IHRvdWNoLT5h YnNfeDsKKwl0b3VjaC0+cHJldl9hYnNfeSA9IHRvdWNoLT5hYnNfeTsKK30KKworc3RhdGljIGlu bGluZSBpbnQgY3lhcGFfc3FydChpbnQgZGVsdGFfeCwgaW50IGRlbHRhX3kpCit7CisJaW50IFhr MCA9IDA7CisJaW50IFhrMTsKKwlpbnQgbXVsdGk7CisKKwltdWx0aSA9IFhrMSA9IGRlbHRhX3gq ZGVsdGFfeCArIGRlbHRhX3kqZGVsdGFfeTsKKworCXdoaWxlIChhYnMoWGswIC0gWGsxKSA+IDEp IHsKKwkJWGswID0gWGsxOworCQlYazEgPSAoWGswICsgKG11bHRpIC8gWGswKSkgLyAyOworCX0K KworCXJldHVybiBYazE7Cit9CisKK3N0YXRpYyB2b2lkIGN5YXBhX3BhcnNlX2dlbjFfZGF0YShz dHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCwKKwkJCXN0cnVjdCBjeWFwYV9yZWdfZGF0YV9nZW4xICpy ZWdfZGF0YSwKKwkJCXN0cnVjdCBjeWFwYV9yZXBvcnRfZGF0YSAqcmVwb3J0X2RhdGEpCit7CisJ aW50IGk7CisJaW50IGdlc3R1cmVfcmVwb3J0X2luZGV4ID0gMDsKKwlpbnQgZ2VzdHVyZV9maW5n ZXJzID0gMDsKKwlpbnQgZ2VzdHVyZV9pbmRleCA9IDA7CisKKwkvKiBwYXJzZSBnZXN0dXJlcyBh bmQgYnV0dG9uIGRhdGEgKi8KKwlyZXBvcnRfZGF0YS0+YnV0dG9uID0gcmVnX2RhdGEtPnRhcF9t b3Rpb24gJiAweDAxOworCisJLyogZ2V0IHJlbGF0aXZlIGRlbHRhIFggYW5kIGRlbHRhIFkuICov CisJcmVwb3J0X2RhdGEtPnJlbF9kZWx0YVggPSByZWdfZGF0YS0+ZGVsdGF4OworCS8qIFRoZSBZ IGRpcmVjdG9yeSBvZiB0cmFja3BhZCBpcyB0aGUgb3Bwc2l0ZSBvZiBTY3JlZW4uICovCisJcmVw b3J0X2RhdGEtPnJlbF9kZWx0YVkgPSAtcmVnX2RhdGEtPmRlbHRheTsKKworCWlmIChyZWdfZGF0 YS0+dGFwX21vdGlvbiAmIDB4MDIpIHsKKwkJcmVwb3J0X2RhdGEtPmdlc3R1cmVzW2dlc3R1cmVf cmVwb3J0X2luZGV4KytdLmlkCisJCQk9IEdFU1RVUkVfU0lOR0xFX1RBUDsKKworCQlnZXN0dXJl X2ZpbmdlcnMgPSBHRVNUVVJFX0RFQ09ERV9GSU5HRVJTKEdFU1RVUkVfU0lOR0xFX1RBUCk7CisJ CWdlc3R1cmVfaW5kZXggPSBHRVNUVVJFX0RFQ09ERV9JTkRFWChHRVNUVVJFX1NJTkdMRV9UQVAp OworCQl0b3VjaC0+Y3VyX2FjdGl2ZV9nZXN0dXJlc1tnZXN0dXJlX2ZpbmdlcnNdCisJCQl8PSAo MVVMIDw8IGdlc3R1cmVfaW5kZXgpOworCX0KKworCWlmIChyZWdfZGF0YS0+dGFwX21vdGlvbiAm IDB4MDQpIHsKKwkJcmVwb3J0X2RhdGEtPmdlc3R1cmVzW2dlc3R1cmVfcmVwb3J0X2luZGV4Kytd LmlkCisJCQk9IEdFU1RVUkVfRE9VQkxFX1RBUDsKKworCQlnZXN0dXJlX2ZpbmdlcnMgPSBHRVNU VVJFX0RFQ09ERV9GSU5HRVJTKEdFU1RVUkVfRE9VQkxFX1RBUCk7CisJCWdlc3R1cmVfaW5kZXgg PSBHRVNUVVJFX0RFQ09ERV9JTkRFWChHRVNUVVJFX0RPVUJMRV9UQVApOworCQl0b3VjaC0+Y3Vy X2FjdGl2ZV9nZXN0dXJlc1tnZXN0dXJlX2ZpbmdlcnNdCisJCQl8PSAoMVVMIDw8IGdlc3R1cmVf aW5kZXgpOworCX0KKworCXJlcG9ydF9kYXRhLT5nZXN0dXJlc19jb3VudCA9IGdlc3R1cmVfcmVw b3J0X2luZGV4OworCisJLyogcGFzZSBmaW5nZXJzIHRvdWNoIGRhdGEgKi8KKwlyZXBvcnRfZGF0 YS0+dG91Y2hfZmluZ2VycworCQk9ICgocmVnX2RhdGEtPnRvdWNoX2ZpbmdlcnMgPiBDWUFQQV9N QVhfVE9VQ0hTKSA/CisJCQkoQ1lBUEFfTUFYX1RPVUNIUykgOiAocmVnX2RhdGEtPnRvdWNoX2Zp bmdlcnMpKTsKKwlyZXBvcnRfZGF0YS0+YXZnX3ByZXNzdXJlID0gcmVnX2RhdGEtPmF2Z19wcmVz c3VyZTsKKwlyZXBvcnRfZGF0YS0+dG91Y2hzWzBdLnggPQorCQkoKHJlZ19kYXRhLT50b3VjaDEu cmVsX3h5ICYgMHhGMCkgPDwgNCkKKwkJCXwgcmVnX2RhdGEtPnRvdWNoMS5yZWxfeDsKKwlyZXBv cnRfZGF0YS0+dG91Y2hzWzBdLnkgPQorCQkoKHJlZ19kYXRhLT50b3VjaDEucmVsX3h5ICYgMHgw RikgPDwgOCkKKwkJCXwgcmVnX2RhdGEtPnRvdWNoMS5yZWxfeTsKKwlyZXBvcnRfZGF0YS0+dG91 Y2hzWzBdLmlkID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAoQ1lBUEFfTUFYX1RPVUNIUy0xKTsg aSsrKSB7CisJCXJlcG9ydF9kYXRhLT50b3VjaHNbaSsxXS54ID0KKwkJCQkoKHJlZ19kYXRhLT50 b3VjaHNbaV0ucmVsX3h5ICYgMHhGMCkgPDwgNCkKKwkJCQl8IHJlZ19kYXRhLT50b3VjaHNbaV0u cmVsX3g7CisJCXJlcG9ydF9kYXRhLT50b3VjaHNbaSsxXS55ID0KKwkJCQkoKHJlZ19kYXRhLT50 b3VjaHNbaV0ucmVsX3h5ICYgMHgwRikgPDwgOCkKKwkJCQl8IHJlZ19kYXRhLT50b3VjaHNbaV0u cmVsX3k7CisJCXJlcG9ydF9kYXRhLT50b3VjaHNbaSsxXS5pZCA9IGkrMTsKKwl9CisKKwljeWFw YV9wcmludF9yZXBvcnRfZGF0YShfX2Z1bmNfXywgcmVwb3J0X2RhdGEpOworfQorCitzdGF0aWMg dm9pZCBjeWFwYV9wYXJzZV9nZW4yX2RhdGEoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gsCisJCQlz dHJ1Y3QgY3lhcGFfcmVnX2RhdGFfZ2VuMiAqcmVnX2RhdGEsCisJCQlzdHJ1Y3QgY3lhcGFfcmVw b3J0X2RhdGEgKnJlcG9ydF9kYXRhKQoreworCWludCBpOworCWludCBnZXN0dXJlX2ZpbmdlcnMg PSAwOworCWludCBnZXN0dXJlX2luZGV4ID0gMDsKKworCS8qIGJpdDItbWlkZGxlIGJ1dHRvbjsg Yml0MS1yaWdodCBidXR0b247IGJpdDAtbGVmdCBidXR0b20uICovCisJcmVwb3J0X2RhdGEtPmJ1 dHRvbiA9IHJlZ19kYXRhLT5yZWxhdGl2ZV9mbGFncyAmIDB4MDc7CisKKwkvKiBnZXQgcmVsYXRp dmUgZGVsdGEgWCBhbmQgZGVsdGEgWS4gKi8KKwlyZXBvcnRfZGF0YS0+cmVsX2RlbHRhWCA9IHJl Z19kYXRhLT5kZWx0YXg7CisJLyogVGhlIFkgZGlyZWN0b3J5IG9mIHRyYWNrcGFkIGlzIHRoZSBv cHBzaXRlIG9mIFNjcmVlbi4gKi8KKwlyZXBvcnRfZGF0YS0+cmVsX2RlbHRhWSA9IC1yZWdfZGF0 YS0+ZGVsdGF5OworCisJLyogY29weSBmaW5nZXJzIHRvdWNoIGRhdGEgKi8KKwlyZXBvcnRfZGF0 YS0+YXZnX3ByZXNzdXJlID0gcmVnX2RhdGEtPmF2Z19wcmVzc3VyZTsKKwlyZXBvcnRfZGF0YS0+ dG91Y2hfZmluZ2VycworCQk9ICgocmVnX2RhdGEtPnRvdWNoX2ZpbmdlcnMgPiBDWUFQQV9NQVhf VE9VQ0hTKSA/CisJCQkoQ1lBUEFfTUFYX1RPVUNIUykgOiAocmVnX2RhdGEtPnRvdWNoX2Zpbmdl cnMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVwb3J0X2RhdGEtPnRvdWNoX2ZpbmdlcnM7IGkrKykg eworCQlyZXBvcnRfZGF0YS0+dG91Y2hzW2ldLnggPQorCQkJKChyZWdfZGF0YS0+dG91Y2hzW2ld Lnh5ICYgMHhGMCkgPDwgNCkKKwkJCQl8IHJlZ19kYXRhLT50b3VjaHNbaV0ueDsKKwkJcmVwb3J0 X2RhdGEtPnRvdWNoc1tpXS55ID0KKwkJCSgocmVnX2RhdGEtPnRvdWNoc1tpXS54eSAmIDB4MEYp IDw8IDgpCisJCQkJfCByZWdfZGF0YS0+dG91Y2hzW2ldLnk7CisJCXJlcG9ydF9kYXRhLT50b3Vj aHNbaV0uaWQgPSByZWdfZGF0YS0+dG91Y2hzW2ldLmlkOworCX0KKworCS8qIHBhcnNlIGdlc3R1 cmVzICovCisJcmVwb3J0X2RhdGEtPmdlc3R1cmVzX2NvdW50ID0KKwkJKCgocmVnX2RhdGEtPmdl c3R1cmVfY291bnQpID4gQ1lBUEFfT05FX1RJTUVfR0VTVFVSRVMpID8KKwkJCUNZQVBBX09ORV9U SU1FX0dFU1RVUkVTIDogcmVnX2RhdGEtPmdlc3R1cmVfY291bnQpOworCWZvciAoaSA9IDA7IGkg PCByZXBvcnRfZGF0YS0+Z2VzdHVyZXNfY291bnQ7IGkrKykgeworCQlyZXBvcnRfZGF0YS0+Z2Vz dHVyZXNbaV0uaWQgPSByZWdfZGF0YS0+Z2VzdHVyZVtpXS5pZDsKKwkJcmVwb3J0X2RhdGEtPmdl c3R1cmVzW2ldLnBhcmFtMSA9IHJlZ19kYXRhLT5nZXN0dXJlW2ldLnBhcmFtMTsKKwkJcmVwb3J0 X2RhdGEtPmdlc3R1cmVzW2ldLnBhcmFtMiA9IHJlZ19kYXRhLT5nZXN0dXJlW2ldLnBhcmFtMjsK KworCQlnZXN0dXJlX2ZpbmdlcnMKKwkJCT0gR0VTVFVSRV9ERUNPREVfRklOR0VSUyhyZXBvcnRf ZGF0YS0+Z2VzdHVyZXNbaV0uaWQpOworCQlnZXN0dXJlX2luZGV4CisJCQk9IEdFU1RVUkVfREVD T0RFX0lOREVYKHJlcG9ydF9kYXRhLT5nZXN0dXJlc1tpXS5pZCk7CisJCXRvdWNoLT5jdXJfYWN0 aXZlX2dlc3R1cmVzW2dlc3R1cmVfZmluZ2Vyc10KKwkJCXw9ICgxVUwgPDwgZ2VzdHVyZV9pbmRl eCk7CisJfQorCisJY3lhcGFfcHJpbnRfcmVwb3J0X2RhdGEoX19mdW5jX18sIHJlcG9ydF9kYXRh KTsKK30KKwordm9pZCBjeWFwYV9zZXRfcHJlZmVyZW5jZXMoc3RydWN0IGN5YXBhX2kyYyAqdG91 Y2gpCit7CisJc3RydWN0IGN5YXBhX3ByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9ICZ0b3VjaC0+ cHJlZmVyZW5jZXM7CisKKwkvKiBzZXQgZGVmYXVsdCBzZXR0aW5nIGZvciBoc2Nyb2xsLiAqLwor CXByZWZlcmVuY2VzLT52c2Nyb2xsLmRlZmF1bHRfdGhyZXNob2xkID0gNDsKKwlwcmVmZXJlbmNl cy0+dnNjcm9sbC5taWRkbGVfdGhyZXNob2xkID0gODsKKwlwcmVmZXJlbmNlcy0+dnNjcm9sbC5m YXN0X3RocmVzaG9sZCA9IDE2OworCisJLyogc2V0IGRlZmF1bHQgc2V0dGluZyBmb3IgdnNjcm9s bC4gKi8KKwlwcmVmZXJlbmNlcy0+aHNjcm9sbC5kZWZhdWx0X3RocmVzaG9sZCA9IDQ7CisJcHJl ZmVyZW5jZXMtPmhzY3JvbGwubWlkZGxlX3RocmVzaG9sZCA9IDg7CisJcHJlZmVyZW5jZXMtPmhz Y3JvbGwuZmFzdF90aHJlc2hvbGQgPSAxNjsKKworCS8qIHNldCBkZWZhdWx0IHNldHRpbmcgZm9y IHZzY3JvbGwuICovCisJcHJlZmVyZW5jZXMtPnpvb20uZGVmYXVsdF90aHJlc2hvbGQgPSA4Owor CXByZWZlcmVuY2VzLT56b29tLm1pZGRsZV90aHJlc2hvbGQgPSAxNjsKKwlwcmVmZXJlbmNlcy0+ em9vbS5mYXN0X3RocmVzaG9sZCA9IDMyOworCisJLyogc2V0IGRlZmF1bHQgc2V0dGluZyBmb3Ig cGxhdGZvcm0gZGlzcGxheSBhc3BlY3QgcmF0aW8gYWRqdXN0bWVudC4gKi8KKwlwcmVmZXJlbmNl cy0+bW91c2VfYmFsbGlzdGljLmFic19yaXNlX3kgPSAxNjsKKwlwcmVmZXJlbmNlcy0+bW91c2Vf YmFsbGlzdGljLmFic19ydW5feSA9IDE0OworCisJLyogc2V0IGRlZmF1bHQgc2V0dGluZyBmb3Ig QUJTIEZJUiBmaWx0ZXIgcGFyYW1ldGVycy4gKi8KKwlwcmVmZXJlbmNlcy0+bW91c2VfYmFsbGlz dGljLmZpcl9hYnNfZW5hYmxlZCA9IDE7CisKKwlwcmVmZXJlbmNlcy0+bW91c2VfYmFsbGlzdGlj LmZpcl9hYnNfZGVwdGhfc2xld19jb3VudCA9IDU7CisJcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxp c3RpYy5maXJfZ2VudGxlX2N1cnZlX2VjY2VudHJpY2l0eV9tYXggPSAyOworCXByZWZlcmVuY2Vz LT5tb3VzZV9iYWxsaXN0aWMuZmlyX21vZGVyYXRlX2N1cnZlX2VjY2VudHJpY2l0eV9tYXggPSAz OworCisJcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5maXJfc2xvd19zcGVlZF9saW1pdCA9 IDQ7CisJcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5maXJfbW9kZXJhdGVfc3BlZWRfbGlt aXQgPSA3OworCisJcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5maXJfYWJzX2RlcHRoX21h eCA9ICA3OworCXByZWZlcmVuY2VzLT5tb3VzZV9iYWxsaXN0aWMuZmlyX3Nsb3dfc3BlZWRfZGVw dGggPSA3OworCXByZWZlcmVuY2VzLT5tb3VzZV9iYWxsaXN0aWMuZmlyX21vZGVyYXRlX3NwZWVk X2RlcHRoID0gNzsKKwlwcmVmZXJlbmNlcy0+bW91c2VfYmFsbGlzdGljLmZpcl9nZW50bGVfY3Vy dmVfZGVwdGggPSA1OworCXByZWZlcmVuY2VzLT5tb3VzZV9iYWxsaXN0aWMuZmlyX21vZGVyYXRl X2N1cnZlX2RlcHRoID0gNjsKKworCS8qIHNldCBkZWZhdWx0IHNldHRpbmcgZm9yIEFCUyBJSVIg ZmlsdGVyIHBhcmFtZXRlcnMuICovCisJcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5paXJf YWJzX2VuYWJsZWQgPSAxOworCXByZWZlcmVuY2VzLT5tb3VzZV9iYWxsaXN0aWMuaWlyX251bWVy YXRvciA9IDE7CisJcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5paXJfZGVub21pbmF0b3Ig PSAyOworCisJLyogc2V0IGRlZmF1bHQgc2V0dGluZyBmb3IgUkVMIHNwZWVkL2FjY2VsZXJhdGlv biBmaWx0ZXIgcGFyYW1ldGVycy4gKi8KKwlwcmVmZXJlbmNlcy0+bW91c2VfYmFsbGlzdGljLnJl bF9zdHJva2VfaGlzdG9yeV9kZXB0aCA9IDQ7CisJcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3Rp Yy5yZWxfbWVkaXVtX3NwZWVkX3RocmVzaG9sZCA9IDc7CisJcHJlZmVyZW5jZXMtPm1vdXNlX2Jh bGxpc3RpYy5yZWxfZmFzdF9zcGVlZF90aHJlc2hvbGQgPSAxMDsKKwlwcmVmZXJlbmNlcy0+bW91 c2VfYmFsbGlzdGljLnJlbF9mbGlja19zcGVlZF90aHJlc2hvbGQgPSA4MDsKKwlwcmVmZXJlbmNl cy0+bW91c2VfYmFsbGlzdGljLnJlbF9tb3Rpb25fbnVtZXJhdG9yID0gODsKKwlwcmVmZXJlbmNl cy0+bW91c2VfYmFsbGlzdGljLnJlbF9tZWRpdW1fc3BlZWRfbnVtZXJhdG9yID0gNzsKKwlwcmVm ZXJlbmNlcy0+bW91c2VfYmFsbGlzdGljLnJlbF9tb3Rpb25fZGVub21pbmF0b3IgPSAxMjsKKwlw cmVmZXJlbmNlcy0+bW91c2VfYmFsbGlzdGljLnJlbF9hY2NlbGVyYXRpb25fbnVtZXJhdG9yID0g MTY7CisJcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3RpYy5yZWxfYWNjZWxlcmF0aW9uX2Rlbm9t aW5hdG9yID0gMTAwOworCisJLyogc2V0IGRlZmF1bHQgc2V0dGluZyBmb3IgUkVMIElJUiBmaWx0 ZXIgcGFyYW1ldGVycy4gKi8KKwlwcmVmZXJlbmNlcy0+bW91c2VfYmFsbGlzdGljLnJlbF9paXJf YWNjZWxlcmF0aW9uX251bWVyYXRvciA9IDE7CisJcHJlZmVyZW5jZXMtPm1vdXNlX2JhbGxpc3Rp Yy5yZWxfaWlyX2FjY2VsZXJhdGlvbl9kZW5vbWluYXRvciA9IDg7CisJcHJlZmVyZW5jZXMtPm1v dXNlX2JhbGxpc3RpYy5yZWxfbWF4X2FjY2VsZXJhdGlvbl9zcGVlZCA9IDkwMDsKK30KKwordm9p ZCBjeWFwYV9yZXNldF9jdXJzb3JfZmlsdGVyc19kYXRhKHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNo KQoreworCWludCBpOworCXN0cnVjdCBjeWFwYV9jdXJzb3JfZmlsdGVycyAqZmlsdGVyID0gJnRv dWNoLT5jdXJzb3JfZmlsdGVyczsKKworCS8qIHJlc2V0IHByZXZpb3VzIG1vdGlvbiBkYXRhLiAq LworCXRvdWNoLT5wcmV2X2Fic194ID0gLTE7CisJdG91Y2gtPnByZXZfYWJzX3kgPSAtMTsKKwl0 b3VjaC0+cHJldl9yZWxfeCA9IDA7CisJdG91Y2gtPnByZXZfcmVsX3kgPSAwOworCisJLyogcmVz ZXQgZGF0YSB1c2VkIGluIEZJUiBmaWx0ZXIgdG8gQUJTIGRhdGEuICovCisJZmlsdGVyLT5maXJf Y3VydmVfdHlwZSA9IEZJUl9DVVJWRV9VTklOSVRJQUxJWkVEOworCWZvciAoaSA9IDA7IGkgPCBN QVhfRklSX0RFUFRIOyBpKyspIHsKKwkJZmlsdGVyLT5maXJfdmVjdG9yc194W2ldID0gMDsKKwkJ ZmlsdGVyLT5maXJfdmVjdG9yc195W2ldID0gMDsKKwl9CisJZmlsdGVyLT5maXJfeF9tb2QgPSAw OworCWZpbHRlci0+ZmlyX3lfbW9kID0gMDsKKwlmaWx0ZXItPmZpcl9hYnNfZGVwdGhfeCA9IDA7 CisJZmlsdGVyLT5maXJfYWJzX2RlcHRoX3kgPSAwOworCWZpbHRlci0+ZmlyX2Fic19wcmV2X2Rl cHRoX3ggPSAtMTsKKwlmaWx0ZXItPmZpcl9hYnNfcHJldl9kZXB0aF95ID0gLTE7CisJZmlsdGVy LT5maXJfYWJzX2RlcHRoX3NsZXdfY291bnRlcl94ID0gMTsKKwlmaWx0ZXItPmZpcl9hYnNfZGVw dGhfc2xld19jb3VudGVyX3kgPSAxOworCisJLyogcmVzZXQgZGF0YSB1c2VkIGluIElJUiBmaWx0 ZXIgdG8gQUJTIGRhdGEuICovCisJZmlsdGVyLT5paXJfeCA9IDB4RkZGRkZGRkY7CisJZmlsdGVy LT5paXJfeSA9IDB4RkZGRkZGRkY7CisJZmlsdGVyLT5paXJfbW9kX3ggPSAwOworCWZpbHRlci0+ aWlyX21vZF95ID0gMDsKKworCS8qIHJlc2V0IGRhdGEgdXNlZCBpbiBjb21wbHV0aW5nIHJlbGF0 aXZlIG1vdmVtZW50IHNwZWVkIGNhdGVnb3J5LiAqLworCWZpbHRlci0+cmVsX3N0cm9rZV9kZXB0 aCA9IDA7CisJZmlsdGVyLT5yZWxfc3Ryb2tlX3NwZWVkID0gUkVMX1NUUk9LRV9TUEVFRF9GQVNU OworCisJLyogcmVzZXQgZGF0YSB1c2VkIGluIHJlbGF0aXZlIHNwZWVkL2FjY2VsZXJhdGlvbiBj b250cm9sLiAqLworCWZpbHRlci0+cmVsX3Jlc2lkdWVfeCA9IDA7CisJZmlsdGVyLT5yZWxfcmVz aWR1ZV95ID0gMDsKKwlmaWx0ZXItPnJlbF9wcmV2X3Jlc2lkdWVfYWNjZWxfeCA9IDA7CisJZmls dGVyLT5yZWxfcHJldl9yZXNpZHVlX2FjY2VsX3kgPSAwOworCisJLyogcmVzZXQgZGF0YSB1c2Vk IGluIHJlbGF0aXZlIElJUiBmaWx0ZXIuICovCisJZmlsdGVyLT5yZWxfcHJldl9hY2NlbF9paXJf eCA9IENZQVBBX0ZJTFRFUl9FTVBUWV9EQVRBOworCWZpbHRlci0+cmVsX3ByZXZfYWNjZWxfaWly X3kgPSBDWUFQQV9GSUxURVJfRU1QVFlfREFUQTsKKwlmaWx0ZXItPnJlbF9wcmV2X2FjY2VsX2lp cl9tb2RfeCA9IDA7CisJZmlsdGVyLT5yZWxfcHJldl9hY2NlbF9paXJfbW9kX3kgPSAwOworfQor CisvKkNvbnZlcnRzIG1vZHVsYXIgcmVzaWR1ZXMgdG8gbmV3IHNjYWxlLgorKiogVGhpcyBlbmFi bGVzIHJlc2lkdWVzIHRvIHBlcnNpc3QgYWNyb3NzIGludGVyYXRpb25zIHdoZXJlIHZhcmlvdXMg ZGl2aXNvcnMKKyoqIHdoaWNoIGFyZSB1c2VkIGJ5IGRhdGEgZmlsdGVycyBhcmUgbW9kaWZpZWQu CisqLworaW5saW5lIGludCBjeWFwYV9maXJfcmVzY2FsZV9tb2R1bHVzKGludCBtb2RfaW4sIGlu dCBvbGRfc2NhbGUsIGludCBuZXdfc2NhbGUpCit7CisJaW50IHRlbXA7CisKKwlpZiAob2xkX3Nj YWxlIDw9IDEpCisJCXJldHVybiBtb2RfaW47CisKKwlpZiAobmV3X3NjYWxlIDw9IG9sZF9zY2Fs ZSkKKwkJcmV0dXJuIG1vZF9pbjsKKworCXRlbXAgPSBtb2RfaW4gKiBuZXdfc2NhbGU7CisJdGVt cCA9IHRlbXAgLyBvbGRfc2NhbGU7CisKKwlyZXR1cm4gdGVtcDsKK30KKworLyogRGV0ZXJtaW5l cyB0aGUgZWNlbnRyaWNpdHksIGEgcHJpbWl0aXZlIG1lYXN1cmUgb2YgdGhlIGRlZ3JlZSBvZiBj dXJ2YXR1cmUsCisqKiB3aGljaCBpcyB1c2VkIHRvIHNlbGVjdCBGSVIgY2hhcmFjdGVyaXN0aWNz LgorKi8KK2ludCBjeWFwYV9maXJfZ2V0X2N1cnZlX3R5cGUoc3RydWN0IGN5YXBhX2kyYyAqdG91 Y2gpCit7CisJaW50IGk7CisJaW50IGN1cnZlX3R5cGU7CisJaW50IGN1cl9zcGVlZDsKKwlpbnQg bWF4X3NwZWVkLCBtaW5fc3BlZWQ7CisJaW50IG1heF9zcGVlZF94LCBtYXhfc3BlZWRfeTsKKwlp bnQgZWNjZW50cmljaXR5X3gsIGVjY2VudHJpY2l0eV95OworCWludCB6ZXJvX2NvdW50X3ggPSAw OworCWludCB6ZXJvX2NvdW50X3kgPSAwOworCXN0cnVjdCBjeWFwYV9jdXJzb3JfZmlsdGVycyAq ZmlsdGVyID0gJnRvdWNoLT5jdXJzb3JfZmlsdGVyczsKKwlzdHJ1Y3QgbW91c2VfYmFsbGlzdGlj X3BhcmFtcyAqbW91c2VfYmFsbGlzdGljCisJCQkJPSAmdG91Y2gtPnByZWZlcmVuY2VzLm1vdXNl X2JhbGxpc3RpYzsKKworCWlmIChmaWx0ZXItPmZpcl9jdXJ2ZV90eXBlID09IEZJUl9DVVJWRV9V TklOSVRJQUxJWkVEKSB7CisJCWlmICgoZmlsdGVyLT5maXJfYWJzX2RlcHRoX3ggPCAyKQorCQkJ fHwgKGZpbHRlci0+ZmlyX2Fic19kZXB0aF95IDwgMikpIHsKKwkJCWZpbHRlci0+ZmlyX2N1cnZl X3R5cGUgPSBGSVJfQ1VSVkVfTU9ERVJBVEVfU1BFRURfTElORTsKKwkJCXJldHVybiBGSVJfQ1VS VkVfTU9ERVJBVEVfU1BFRURfTElORTsKKwkJfQorCisJCXJldHVybiBmaWx0ZXItPmZpcl9jdXJ2 ZV90eXBlOworCX0KKworCS8qIGZpbmQgbWF4IHNwZWVkIGluIFggZGlyZWN0aW9uLiAqLworCW1h eF9zcGVlZCA9IC0xMDAwMDA7CisJbWluX3NwZWVkID0gMTAwMDAwOworCWZvciAoaSA9IDA7IGkg PCAoZmlsdGVyLT5maXJfYWJzX2RlcHRoX3ggLSAxKTsgaSsrKSB7CisJCWN1cl9zcGVlZCA9IGZp bHRlci0+ZmlyX3ZlY3RvcnNfeFtpXQorCQkJCS0gZmlsdGVyLT5maXJfdmVjdG9yc194W2krMV07 CisKKwkJaWYgKGN1cl9zcGVlZCA8IG1pbl9zcGVlZCkKKwkJCW1pbl9zcGVlZCA9IGN1cl9zcGVl ZDsKKworCQlpZiAoY3VyX3NwZWVkID4gbWF4X3NwZWVkKQorCQkJbWF4X3NwZWVkID0gY3VyX3Nw ZWVkOworCisJCS8qIGZpbmQgdGhlIGNvdW50IG9mIHByZXZpb3VzIGRhdGEgcGFja2FnZXMKKwkJ KiogdGhhdCBYIGRpcmVjdGlvbiBrZWVwcyBub3QgbW92aW5nLiAqLworCQlpZiAoKG1pbl9zcGVl ZCA9PSAwKSAmJiAobWF4X3NwZWVkID09IDApKQorCQkJemVyb19jb3VudF94ID0gaTsKKwl9CisK KwlpZiAoaSA+IDApCisJCWVjY2VudHJpY2l0eV94ID0gKG1heF9zcGVlZCAtIG1pbl9zcGVlZCkg LyBpOworCWVsc2UKKwkJZWNjZW50cmljaXR5X3ggPSAwOworCisJbWF4X3NwZWVkX3ggPSBtYXhf c3BlZWQ7CisKKwkvKiBmaW5kIG1heCBzcGVlZCBpbiBZIGRpcmVjdGlvbi4gKi8KKwltYXhfc3Bl ZWQgPSAtMTAwMDAwOworCW1pbl9zcGVlZCA9IDEwMDAwMDsKKwlmb3IgKGkgPSAwOyBpIDwgKGZp bHRlci0+ZmlyX2Fic19kZXB0aF95IC0gMSk7IGkrKykgeworCQljdXJfc3BlZWQgPSBmaWx0ZXIt PmZpcl92ZWN0b3JzX3lbaV0KKwkJCQktIGZpbHRlci0+ZmlyX3ZlY3RvcnNfeVtpKzFdOworCisJ CWlmIChjdXJfc3BlZWQgPCBtaW5fc3BlZWQpCisJCQltaW5fc3BlZWQgPSBjdXJfc3BlZWQ7CisK KwkJaWYgKGN1cl9zcGVlZCA+IG1heF9zcGVlZCkKKwkJCW1heF9zcGVlZCA9IGN1cl9zcGVlZDsK KworCQkvKiBmaW5kIHRoZSBjb3VudCBvZiBwcmV2aW91cyBkYXRhIHBhY2thZ2VzCisJCSoqIHRo YXQgWSBkaXJlY3Rpb24ga2VlcHMgbm90IG1vdmluZy4gKi8KKwkJaWYgKChtaW5fc3BlZWQgPT0g MCkgJiYgKG1heF9zcGVlZCA9PSAwKSkKKwkJCXplcm9fY291bnRfeSA9IGk7CisJfQorCisJaWYg KGkgPiAwKQorCQllY2NlbnRyaWNpdHlfeSA9IChtYXhfc3BlZWQgLSBtaW5fc3BlZWQpIC8gaTsK KwllbHNlCisJCWVjY2VudHJpY2l0eV95ID0gMDsKKworCW1heF9zcGVlZF95ID0gbWF4X3NwZWVk OworCisJLyogQWZ0ZXIgcHJldmlvdXMgMyBvciBtb3JlIGRhdGEgcGFja2FnZXMgcmVwb3J0cywK KwkqKiBmaW5nZXIgbW92ZW1lbnQgc3RpbGwgbm90IGRldGVjdGVkLiAqLworCWlmICgoemVyb19j b3VudF94ID4gMikgJiYgKHplcm9fY291bnRfeSA+IDIpKSB7CisJCWZpbHRlci0+ZmlyX2N1cnZl X3R5cGUgPSBGSVJfQ1VSVkVfRlVMTF9TVE9QOworCQlyZXR1cm4gRklSX0NVUlZFX0ZVTExfU1RP UDsKKwl9CisKKwkvKiBjYWxjdWxhdGUgY29tYmluZWQgc3BlZWQgdmVjdG9ycy4gKi8KKwljdXJf c3BlZWQgPSBhYnMobWF4X3NwZWVkX3gpICsgYWJzKG1heF9zcGVlZF95KTsKKworCS8qIHNvcnQg Y3VydmUgbGluZSB0eXBlLiAqLworCWlmIChjdXJfc3BlZWQgPCBtb3VzZV9iYWxsaXN0aWMtPmZp cl9zbG93X3NwZWVkX2xpbWl0KQorCQljdXJ2ZV90eXBlID0gRklSX0NVUlZFX1NMT1dfU1BFRURf TElORTsKKwllbHNlIGlmIChjdXJfc3BlZWQgPCBtb3VzZV9iYWxsaXN0aWMtPmZpcl9tb2RlcmF0 ZV9zcGVlZF9saW1pdCkKKwkJY3VydmVfdHlwZSA9IEZJUl9DVVJWRV9NT0RFUkFURV9TUEVFRF9M SU5FOworCWVsc2UKKwkJY3VydmVfdHlwZSA9IEZJUl9DVVJWRV9GQVNUX1NQRUVEX0xJTkU7CisK KwkvKiBzb3J0IGZhc3Qgc3BlZWQgY3VydmUgdHlwZSBtdWNoIG1vcmUgZGV0YWlsCisJKiogYmFz ZWQgb24gZWNjZW50cmljaXR5IHggYW5kIHkgdmFsdWUuICovCisJaWYgKGN1cnZlX3R5cGUgPT0g RklSX0NVUlZFX0ZBU1RfU1BFRURfTElORSkgeworCQlpZiAoKGVjY2VudHJpY2l0eV94ID09IDEp ICYmIChlY2NlbnRyaWNpdHlfeSA9PSAxKSkgeworCQkJY3VydmVfdHlwZSA9IEZJUl9DVVJWRV9H RU5UTEVfQ1VSVkU7CisJCX0gZWxzZSBpZiAoKGVjY2VudHJpY2l0eV94CisJCQk9PSBtb3VzZV9i YWxsaXN0aWMtPmZpcl9nZW50bGVfY3VydmVfZWNjZW50cmljaXR5X21heCkKKwkJCQkmJiAoZWNj ZW50cmljaXR5X3kgPT0gMSkpIHsKKwkJCWN1cnZlX3R5cGUgPSBGSVJfQ1VSVkVfR0VOVExFX0NV UlZFOworCQl9IGVsc2UgaWYgKChlY2NlbnRyaWNpdHlfeCA9PSAxKQorCQkJJiYgKGVjY2VudHJp Y2l0eV95ID09CisJCQltb3VzZV9iYWxsaXN0aWMtPmZpcl9nZW50bGVfY3VydmVfZWNjZW50cmlj aXR5X21heCkpIHsKKwkJCWN1cnZlX3R5cGUgPSBGSVJfQ1VSVkVfR0VOVExFX0NVUlZFOworCQl9 IGVsc2UgaWYgKChlY2NlbnRyaWNpdHlfeAorCQkJPiBtb3VzZV9iYWxsaXN0aWMtPmZpcl9nZW50 bGVfY3VydmVfZWNjZW50cmljaXR5X21heCkKKwkJCSYmIChlY2NlbnRyaWNpdHlfeQorCQkJPiBt b3VzZV9iYWxsaXN0aWMtPmZpcl9nZW50bGVfY3VydmVfZWNjZW50cmljaXR5X21heCkpIHsKKwkJ CWN1cnZlX3R5cGUgPSBGSVJfQ1VSVkVfTU9ERVJBVEVfQ1VSVkU7CisJCX0gZWxzZSBpZiAoKGVj Y2VudHJpY2l0eV94CisJCQk+PSBtb3VzZV9iYWxsaXN0aWMtPmZpcl9tb2RlcmF0ZV9jdXJ2ZV9l Y2NlbnRyaWNpdHlfbWF4KQorCQkJfHwgKGVjY2VudHJpY2l0eV95ID49CisJCQltb3VzZV9iYWxs aXN0aWMtPmZpcl9tb2RlcmF0ZV9jdXJ2ZV9lY2NlbnRyaWNpdHlfbWF4KSkgeworCQkJY3VydmVf dHlwZSA9IEZJUl9DVVJWRV9NT0RFUkFURV9DVVJWRTsKKwkJfQorCX0KKworCWZpbHRlci0+Zmly X2N1cnZlX3R5cGUgPSBjdXJ2ZV90eXBlOworCisJcmV0dXJuIGN1cnZlX3R5cGU7Cit9CisKKy8q IE9idGFpbiB0aGUgRklSIGN1cnZlIHR5cGUgYW5kIG9idGFpbiB0aGUgRklSIGZpbHRlciBkZXB0 aC4KKyoqIEZpbHRlciBkZXB0aCBpcyBhIHR1bmluZyBwYXJhbWV0ZXIuCisqLworaW50IGN5YXBh X2Zpcl9yZXNldF9maWZvX2RlcHRoKHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoKQoreworCWludCBj dXJ2ZV90eXBlOworCWludCBmaXJfZGVwdGg7CisJc3RydWN0IGN5YXBhX2N1cnNvcl9maWx0ZXJz ICpmaWx0ZXIgPSAmdG91Y2gtPmN1cnNvcl9maWx0ZXJzOworCXN0cnVjdCBtb3VzZV9iYWxsaXN0 aWNfcGFyYW1zICptb3VzZV9iYWxsaXN0aWMKKwkJCQk9ICZ0b3VjaC0+cHJlZmVyZW5jZXMubW91 c2VfYmFsbGlzdGljOworCisJY3VydmVfdHlwZSA9IGN5YXBhX2Zpcl9nZXRfY3VydmVfdHlwZSh0 b3VjaCk7CisKKwlzd2l0Y2ggKGN1cnZlX3R5cGUpIHsKKwljYXNlIEZJUl9DVVJWRV9TTE9XX1NQ RUVEX0xJTkU6CisJCWZpcl9kZXB0aCA9IG1vdXNlX2JhbGxpc3RpYy0+ZmlyX3Nsb3dfc3BlZWRf ZGVwdGg7CisJCWJyZWFrOworCWNhc2UgRklSX0NVUlZFX01PREVSQVRFX1NQRUVEX0xJTkU6CisJ CWZpcl9kZXB0aCA9IG1vdXNlX2JhbGxpc3RpYy0+ZmlyX21vZGVyYXRlX3NwZWVkX2RlcHRoOwor CQlicmVhazsKKwljYXNlIEZJUl9DVVJWRV9GQVNUX1NQRUVEX0xJTkU6CisJCWZpcl9kZXB0aCA9 IG1vdXNlX2JhbGxpc3RpYy0+ZmlyX2dlbnRsZV9jdXJ2ZV9kZXB0aDsKKwkJYnJlYWs7CisJY2Fz ZSBGSVJfQ1VSVkVfR0VOVExFX0NVUlZFOgorCQlmaXJfZGVwdGggPSBtb3VzZV9iYWxsaXN0aWMt PmZpcl9nZW50bGVfY3VydmVfZGVwdGg7CisJCWJyZWFrOworCWNhc2UgRklSX0NVUlZFX01PREVS QVRFX0NVUlZFOgorCQlmaXJfZGVwdGggPSBtb3VzZV9iYWxsaXN0aWMtPmZpcl9tb2RlcmF0ZV9j dXJ2ZV9kZXB0aDsKKwkJYnJlYWs7CisJY2FzZSBGSVJfQ1VSVkVfRlVMTF9TVE9QOgorCQlmaXJf ZGVwdGggPSAyOworCQlicmVhazsKKwljYXNlIEZJUl9DVVJWRV9DSVJDTEU6CisJCWZpcl9kZXB0 aCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZpcl9kZXB0aCA9IG1vdXNlX2JhbGxpc3Rp Yy0+ZmlyX3Nsb3dfc3BlZWRfZGVwdGg7CisJCWJyZWFrOworCX0KKworCS8qIGF2b2lkIGludmFs aWQgcGFyYW1ldGVyIHNldHRpbmcuICovCisJaWYgKGZpcl9kZXB0aCA+IG1vdXNlX2JhbGxpc3Rp Yy0+ZmlyX2Fic19kZXB0aF9tYXgpCisJCWZpcl9kZXB0aCA9IG1vdXNlX2JhbGxpc3RpYy0+Zmly X2Fic19kZXB0aF9tYXg7CisKKwlmaWx0ZXItPmZpcl9lZmZlY3RpdmVfbWF4X2RlcHRoID0gZmly X2RlcHRoOworCisJcmV0dXJuIGZpcl9kZXB0aDsKK30KKworc3RhdGljIGludCBjeWFwYV9maWx0 ZXJfZmlyX2Fic194KHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoKQoreworCWludCBpOworCWludCBz dW1feCwgYXZlcmFnZV94OworCWludCBlZmZlY3RpdmVfbWF4X2RlcHRoOworCXN0cnVjdCBjeWFw YV9jdXJzb3JfZmlsdGVycyAqZmlsdGVyID0gJnRvdWNoLT5jdXJzb3JfZmlsdGVyczsKKwlzdHJ1 Y3QgbW91c2VfYmFsbGlzdGljX3BhcmFtcyAqbW91c2VfYmFsbGlzdGljCisJCQkJPSAmdG91Y2gt PnByZWZlcmVuY2VzLm1vdXNlX2JhbGxpc3RpYzsKKworCWVmZmVjdGl2ZV9tYXhfZGVwdGggPSBm aWx0ZXItPmZpcl9lZmZlY3RpdmVfbWF4X2RlcHRoOworCisJLyogc2V0IHNsb3cgc3BlZWQgRklS IGRlcHRoLiAqLworCWlmICgoZWZmZWN0aXZlX21heF9kZXB0aCA8IGZpbHRlci0+ZmlyX2Fic19k ZXB0aF94KQorCQkJJiYgKGVmZmVjdGl2ZV9tYXhfZGVwdGggPCAyKSkgeworCQlmaWx0ZXItPmZp cl9hYnNfZGVwdGhfeCA9IGVmZmVjdGl2ZV9tYXhfZGVwdGg7CisJCWZpbHRlci0+ZmlyX2Fic19k ZXB0aF9zbGV3X2NvdW50ZXJfeCA9IDA7CisJfQorCisJaWYgKGVmZmVjdGl2ZV9tYXhfZGVwdGgg PiBmaWx0ZXItPmZpcl9hYnNfZGVwdGhfeCkgeworCQkvKiBjb3VudCBkZXB0aCBjaGFuZ2Ugc2xl dyB2YWx1ZSwgaWYgbGVzcyBvciBlcXVhbCB0byAwLAorCQkqKiBtYWtlIGRlcHRoIGNoYW5nZWQg YW5kIHJlc2V0IHNsZXcgdmFsdWUgZm9yIG5leHQgdGltZS4gKi8KKwkJZmlsdGVyLT5maXJfYWJz X2RlcHRoX3NsZXdfY291bnRlcl94LS07CisJCWlmIChmaWx0ZXItPmZpcl9hYnNfZGVwdGhfc2xl d19jb3VudGVyX3ggPD0gMCkgeworCQkJZmlsdGVyLT5maXJfYWJzX2RlcHRoX3NsZXdfY291bnRl cl94CisJCQkJPSBtb3VzZV9iYWxsaXN0aWMtPmZpcl9hYnNfZGVwdGhfc2xld19jb3VudDsKKwkJ CWZpbHRlci0+ZmlyX2Fic19kZXB0aF94Kys7CisJCX0KKwl9CisKKwlpZiAoZWZmZWN0aXZlX21h eF9kZXB0aCA8IGZpbHRlci0+ZmlyX2Fic19kZXB0aF94KSB7CisJCS8qIGNvdW50IGRlcHRoIGNo YW5nZSBzbGV3IHZhbHVlLCBpZiBsZXNzIG9yIGVxdWFsIHRvIDAsCisJCSoqIG1ha2UgZGVwdGgg Y2hhbmdlZCBhbmQgcmVzZXQgc2xldyB2YWx1ZSBmb3IgbmV4dCB0aW1lLiAqLworCQlmaWx0ZXIt PmZpcl9hYnNfZGVwdGhfc2xld19jb3VudGVyX3gtLTsKKwkJaWYgKGZpbHRlci0+ZmlyX2Fic19k ZXB0aF9zbGV3X2NvdW50ZXJfeCA8PSAwKSB7CisJCQlmaWx0ZXItPmZpcl9hYnNfZGVwdGhfc2xl d19jb3VudGVyX3gKKwkJCQk9IG1vdXNlX2JhbGxpc3RpYy0+ZmlyX2Fic19kZXB0aF9zbGV3X2Nv dW50OworCQkJZmlsdGVyLT5maXJfYWJzX2RlcHRoX3gtLTsKKwkJfQorCX0KKworCS8qIGluc2Vy dCBuZXcgWCBkYXRhLiAqLworCWZvciAoaSA9IG1vdXNlX2JhbGxpc3RpYy0+ZmlyX2Fic19kZXB0 aF9tYXgtMTsgaSA+IDA7IGktLSkKKwkJZmlsdGVyLT5maXJfdmVjdG9yc194W2ldID0gZmlsdGVy LT5maXJfdmVjdG9yc194W2ktMV07CisJZmlsdGVyLT5maXJfdmVjdG9yc194WzBdID0gdG91Y2gt PmFic194OworCisJLyogY2FsY3VsYXRlIGFuZCBhcHBseSBBQlMgRklSIGZpbHRlciBhbGdvcml0 aG0gdG8gWCBkYXRhLiAqLworCWZvciAoaSA9IDA7IGkgPCBmaWx0ZXItPmZpcl9hYnNfZGVwdGhf eDsgaSsrKQorCQlzdW1feCArPSBmaWx0ZXItPmZpcl92ZWN0b3JzX3hbaV07CisKKwlpZiAoZmls dGVyLT5maXJfYWJzX2RlcHRoX3ggPiAxKSB7CisJCS8qIHJlc2NhbGUgbW9kdWx1cyBiYXNlZCBv biBBQlMgRklSIGRlcHRoLiAqLworCQlmaWx0ZXItPmZpcl94X21vZCA9IGN5YXBhX2Zpcl9yZXNj YWxlX21vZHVsdXMoZmlsdGVyLT5maXJfeF9tb2QsCisJCQlmaWx0ZXItPmZpcl9hYnNfcHJldl9k ZXB0aF94LCBmaWx0ZXItPmZpcl9hYnNfZGVwdGhfeCk7CisJCWF2ZXJhZ2VfeCA9IChzdW1feCAr IGZpbHRlci0+ZmlyX3hfbW9kKQorCQkJCS8gZmlsdGVyLT5maXJfYWJzX2RlcHRoX3g7CisJCWZp bHRlci0+ZmlyX3hfbW9kID0gKHN1bV94ICsgZmlsdGVyLT5maXJfeF9tb2QpCisJCQkJCSUgZmls dGVyLT5maXJfYWJzX2RlcHRoX3g7CisJfSBlbHNlIHsKKwkJYXZlcmFnZV94ID0gdG91Y2gtPmFi c194OworCQlmaWx0ZXItPmZpcl94X21vZCA9IDA7CisJfQorCisJLyogc3RvcmUgY3VycmVudCBB QlMgRklSIGRlcHRoLiovCisJZmlsdGVyLT5maXJfYWJzX3ByZXZfZGVwdGhfeCA9IGZpbHRlci0+ ZmlyX2Fic19kZXB0aF94OworCisJcmV0dXJuIGF2ZXJhZ2VfeDsKK30KKworc3RhdGljIGludCBj eWFwYV9maWx0ZXJfZmlyX2Fic195KHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoKQoreworCWludCBp OworCWludCBzdW1feSwgYXZlcmFnZV95OworCWludCBlZmZlY3RpdmVfbWF4X2RlcHRoOworCXN0 cnVjdCBjeWFwYV9jdXJzb3JfZmlsdGVycyAqZmlsdGVyID0gJnRvdWNoLT5jdXJzb3JfZmlsdGVy czsKKwlzdHJ1Y3QgbW91c2VfYmFsbGlzdGljX3BhcmFtcyAqbW91c2VfYmFsbGlzdGljCisJCQkJ PSAmdG91Y2gtPnByZWZlcmVuY2VzLm1vdXNlX2JhbGxpc3RpYzsKKworCWVmZmVjdGl2ZV9tYXhf ZGVwdGggPSBmaWx0ZXItPmZpcl9lZmZlY3RpdmVfbWF4X2RlcHRoOworCisJLyogc2V0IHNsb3cg c3BlZWQgRklSIGRlcHRoLiAqLworCWlmICgoZWZmZWN0aXZlX21heF9kZXB0aCA8IGZpbHRlci0+ ZmlyX2Fic19kZXB0aF95KQorCQkmJiAoZWZmZWN0aXZlX21heF9kZXB0aCA8IDIpKSB7CisJCWZp bHRlci0+ZmlyX2Fic19kZXB0aF95ID0gZWZmZWN0aXZlX21heF9kZXB0aDsKKwkJZmlsdGVyLT5m aXJfYWJzX2RlcHRoX3NsZXdfY291bnRlcl95ID0gMDsKKwl9CisKKwlpZiAoZWZmZWN0aXZlX21h eF9kZXB0aCA+IGZpbHRlci0+ZmlyX2Fic19kZXB0aF95KSB7CisJCS8qIGNvdW50IGRlcHRoIGNo YW5nZSBzbGV3IHZhbHVlLCBpZiBsZXNzIG9yIGVxdWFsIHRvIDAsCisJCSoqIG1ha2UgZGVwdGgg Y2hhbmdlZCBhbmQgcmVzZXQgc2xldyB2YWx1ZSBmb3IgbmV4dCB0aW1lLiAqLworCQlmaWx0ZXIt PmZpcl9hYnNfZGVwdGhfc2xld19jb3VudGVyX3ktLTsKKwkJaWYgKGZpbHRlci0+ZmlyX2Fic19k ZXB0aF9zbGV3X2NvdW50ZXJfeSA8PSAwKSB7CisJCQlmaWx0ZXItPmZpcl9hYnNfZGVwdGhfc2xl d19jb3VudGVyX3kKKwkJCQk9IG1vdXNlX2JhbGxpc3RpYy0+ZmlyX2Fic19kZXB0aF9zbGV3X2Nv dW50OworCQkJZmlsdGVyLT5maXJfYWJzX2RlcHRoX3krKzsKKwkJfQorCX0KKworCWlmIChlZmZl Y3RpdmVfbWF4X2RlcHRoIDwgZmlsdGVyLT5maXJfYWJzX2RlcHRoX3kpIHsKKwkJLyogY291bnQg ZGVwdGggY2hhbmdlIHNsZXcgdmFsdWUsIGlmIGxlc3Mgb3IgZXF1YWwgdG8gMCwKKwkJKiogbWFr ZSBkZXB0aCBjaGFuZ2VkIGFuZCByZXNldCBzbGV3IHZhbHVlIGZvciBuZXh0IHRpbWUuICovCisJ CWZpbHRlci0+ZmlyX2Fic19kZXB0aF9zbGV3X2NvdW50ZXJfeS0tOworCQlpZiAoZmlsdGVyLT5m aXJfYWJzX2RlcHRoX3NsZXdfY291bnRlcl95IDw9IDApIHsKKwkJCWZpbHRlci0+ZmlyX2Fic19k ZXB0aF9zbGV3X2NvdW50ZXJfeQorCQkJCT0gbW91c2VfYmFsbGlzdGljLT5maXJfYWJzX2RlcHRo X3NsZXdfY291bnQ7CisJCQlmaWx0ZXItPmZpcl9hYnNfZGVwdGhfeS0tOworCQl9CisJfQorCisJ LyogaW5zZXJ0IG5ldyBZIGRhdGEuICovCisJZm9yIChpID0gbW91c2VfYmFsbGlzdGljLT5maXJf YWJzX2RlcHRoX21heC0xOyBpID4gMDsgaS0tKQorCQlmaWx0ZXItPmZpcl92ZWN0b3JzX3lbaV0g PSBmaWx0ZXItPmZpcl92ZWN0b3JzX3lbaS0xXTsKKwlmaWx0ZXItPmZpcl92ZWN0b3JzX3lbMF0g PSB0b3VjaC0+YWJzX3k7CisKKwkvKiBjYWxjdWxhdGUgYW5kIGFwcGx5IEFCUyBGSVIgZmlsdGVy IGFsZ29yaXRobSB0byBZIGRhdGEuICovCisJZm9yIChpID0gMDsgaSA8IGZpbHRlci0+ZmlyX2Fi c19kZXB0aF95OyBpKyspCisJCXN1bV95ICs9IGZpbHRlci0+ZmlyX3ZlY3RvcnNfeVtpXTsKKwor CWlmIChmaWx0ZXItPmZpcl9hYnNfZGVwdGhfeSA+IDEpIHsKKwkJLyogcmVzY2FsZSBtb2R1bHVz IGJhc2VkIG9uIEFCUyBGSVIgZGVwdGguICovCisJCWZpbHRlci0+ZmlyX3lfbW9kID0gY3lhcGFf ZmlyX3Jlc2NhbGVfbW9kdWx1cyhmaWx0ZXItPmZpcl95X21vZCwKKwkJCWZpbHRlci0+ZmlyX2Fi c19wcmV2X2RlcHRoX3ksIGZpbHRlci0+ZmlyX2Fic19kZXB0aF95KTsKKwkJYXZlcmFnZV95ID0g KHN1bV95ICsgZmlsdGVyLT5maXJfeV9tb2QpCisJCQkJLyBmaWx0ZXItPmZpcl9hYnNfZGVwdGhf eTsKKwkJZmlsdGVyLT5maXJfeV9tb2QgPSAoc3VtX3kgKyBmaWx0ZXItPmZpcl95X21vZCkKKwkJ CQklIGZpbHRlci0+ZmlyX2Fic19kZXB0aF95OworCX0gZWxzZSB7CisJCWF2ZXJhZ2VfeSA9IHRv dWNoLT5hYnNfeTsKKwkJZmlsdGVyLT5maXJfeV9tb2QgPSAwOworCX0KKworCS8qIHN0b3JlIGN1 cnJlbnQgQUJTIEZJUiBkZXB0aC4qLworCWZpbHRlci0+ZmlyX2Fic19wcmV2X2RlcHRoX3kgPSBm aWx0ZXItPmZpcl9hYnNfZGVwdGhfeTsKKworCXJldHVybiBhdmVyYWdlX3k7Cit9CisKK3N0YXRp YyBpbnQgY3lhcGFfZmlsdGVyX2lpcl9hYnMoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gsCisJCWlu dCAqcHJldl9paXIsCisJCWludCAqcHJldl9paXJfbW9kLAorCQlpbnQgcG9zLAorCQlpbnQgbnVt ZXJhdG9yLAorCQlpbnQgZGVub21pbmF0b3IpCit7CisJaW50IG9sZF9paXI7CisJaW50IG5ld19p aXI7CisJaW50IGlpcl9tb2RfcHJldjsKKwlpbnQgaWlyX21vZF9uZXh0OworCisJaWYgKCpwcmV2 X2lpciA9PSAweEZGRkZGRkZGKSB7CisJCSpwcmV2X2lpciA9IHBvczsKKwkJKnByZXZfaWlyX21v ZCA9IDA7CisJCXJldHVybiBwb3M7CisJfQorCisJaWYgKChudW1lcmF0b3IgPT0gMSkgJiYgKGRl bm9taW5hdG9yID09IDEpKSB7CisJCSpwcmV2X2lpciA9IHBvczsKKwkJKnByZXZfaWlyX21vZCA9 IDA7CisJCXJldHVybiBwb3M7CisJfQorCisJaWYgKChudW1lcmF0b3IgPiBkZW5vbWluYXRvcikg fHwgKGRlbm9taW5hdG9yIDw9IDApKSB7CisJCSpwcmV2X2lpciA9IHBvczsKKwkJKnByZXZfaWly X21vZCA9IDA7CisJCXJldHVybiBwb3M7CisJfQorCisJb2xkX2lpciA9ICpwcmV2X2lpcjsKKwlp aXJfbW9kX3ByZXYgPSAqcHJldl9paXJfbW9kOworCisJLyogY2FsY3VsYXRlIGFuZCBhcHBseSBJ SVIgZmlsdGVyIHRvIEFCUyBwb3N0aW9uIHZhbHVlICdwb3MnLiAqLworCW5ld19paXIgPSBvbGRf aWlyICogbnVtZXJhdG9yOworCXBvcyA9IHBvcyAqIChkZW5vbWluYXRvciAtIG51bWVyYXRvcik7 CisJbmV3X2lpciA9IG5ld19paXIgKyBwb3MgKyBpaXJfbW9kX3ByZXY7CisJaWlyX21vZF9uZXh0 ID0gbmV3X2lpciAlIGRlbm9taW5hdG9yOworCW5ld19paXIgPSBuZXdfaWlyIC8gZGVub21pbmF0 b3I7CisKKwkvKiBzdG9yZSBjdXJyZW50IElJUiB2YWx1ZSBhbmQgSUlSIG1vZGUgdmFsdWUKKwkq KiBmb3IgbmV4dCB0aW1lIGNhbGN1bGF0aW5nLiovCisJKnByZXZfaWlyID0gbmV3X2lpcjsKKwkq cHJldl9paXJfbW9kID0gaWlyX21vZF9uZXh0OworCisJcmV0dXJuIG5ld19paXI7Cit9CisKK2lu bGluZSBpbnQgY3lhcGFfY29tcHV0ZV9yZWxfbW90aW9uKGludCBhYnNfcG9zLCBpbnQgcHJldl9h YnNfcG9zKQoreworCWlmIChwcmV2X2Fic19wb3MgPT0gLTEpCisJCXJldHVybiAwOworCisJcmV0 dXJuIGFic19wb3MgLSBwcmV2X2Fic19wb3M7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfcmVsX2dl dF9hY2NlbF9zdG9rZV90eXBlKHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoLAorCQlpbnQgZGVsdGFf eCwKKwkJaW50IGRlbHRhX3kpCit7CisJaW50IGk7CisJaW50IHJlbF9zdHJva2Vfc3BlZWQ7CisJ aW50IHNwZWVkX3gsIHNwZWVkX3k7CisJaW50IG1heF9zcGVlZF94LCBtYXhfc3BlZWRfeTsKKwlz dHJ1Y3QgY3lhcGFfY3Vyc29yX2ZpbHRlcnMgKmZpbHRlciA9ICZ0b3VjaC0+Y3Vyc29yX2ZpbHRl cnM7CisJc3RydWN0IG1vdXNlX2JhbGxpc3RpY19wYXJhbXMgKm1vdXNlX2JhbGxpc3RpYworCQkJ CT0gJnRvdWNoLT5wcmVmZXJlbmNlcy5tb3VzZV9iYWxsaXN0aWM7CisKKwkvKiB2ZXJpZnkgbW91 c2UgYmFsbGlzdGljIHNldHRpbmcgZm9yIHN0cm9rZSBoaXN0b3J5IGRlcHRoLAorCSoqIHVwZGF0 ZSBpdCBpZiBpbnZsaWFkLiAqLworCWlmIChtb3VzZV9iYWxsaXN0aWMtPnJlbF9zdHJva2VfaGlz dG9yeV9kZXB0aAorCQkJPiAoUkVMX1NUUk9LRV9ISVNUT1JZX1JFQ1MtMSkpIHsKKwkJbW91c2Vf YmFsbGlzdGljLT5yZWxfc3Ryb2tlX2hpc3RvcnlfZGVwdGgKKwkJCT0gUkVMX1NUUk9LRV9ISVNU T1JZX1JFQ1MgLSAxOworCX0KKworCWZvciAoaSA9IG1vdXNlX2JhbGxpc3RpYy0+cmVsX3N0cm9r ZV9oaXN0b3J5X2RlcHRoLTE7IGkgPiAwOyBpLS0pIHsKKwkJZmlsdGVyLT5yZWxfc3Ryb2tlX2hp c3RvcnlbaV0ueAorCQkJPSBmaWx0ZXItPnJlbF9zdHJva2VfaGlzdG9yeVtpLTFdLng7CisJCWZp bHRlci0+cmVsX3N0cm9rZV9oaXN0b3J5W2ldLnkKKwkJCT0gZmlsdGVyLT5yZWxfc3Ryb2tlX2hp c3RvcnlbaS0xXS55OworCX0KKwlmaWx0ZXItPnJlbF9zdHJva2VfaGlzdG9yeVswXS54ID0gYWJz KGRlbHRhX3gpOworCWZpbHRlci0+cmVsX3N0cm9rZV9oaXN0b3J5WzBdLnkgPSBhYnMoZGVsdGFf eSk7CisKKwkvKiB1cGF0ZSBzdG9ya2UgZGVwdGguICovCisJaWYgKGZpbHRlci0+cmVsX3N0cm9r ZV9kZXB0aAorCQk8IG1vdXNlX2JhbGxpc3RpYy0+cmVsX3N0cm9rZV9oaXN0b3J5X2RlcHRoKSB7 CisJCWZpbHRlci0+cmVsX3N0cm9rZV9kZXB0aCsrOworCX0gZWxzZSB7CisJCWZpbHRlci0+cmVs X3N0cm9rZV9kZXB0aAorCQkJPSBtb3VzZV9iYWxsaXN0aWMtPnJlbF9zdHJva2VfaGlzdG9yeV9k ZXB0aDsKKwl9CisKKwkvKiBmaW5kIG1heCBzcGVlZCBpbiBzdHJva2UgaGlzdG9yeS4gKi8KKwlt YXhfc3BlZWRfeCA9IG1heF9zcGVlZF95ID0gLTEwMDAwMDsKKwlmb3IgKGkgPSAwOyBpIDwgZmls dGVyLT5yZWxfc3Ryb2tlX2RlcHRoOyBpKyspIHsKKwkJc3BlZWRfeCA9IGZpbHRlci0+cmVsX3N0 cm9rZV9oaXN0b3J5W2ldLng7CisJCXNwZWVkX3kgPSBmaWx0ZXItPnJlbF9zdHJva2VfaGlzdG9y eVtpXS55OworCisJCWlmIChzcGVlZF94ID4gbWF4X3NwZWVkX3gpCisJCQltYXhfc3BlZWRfeCA9 IHNwZWVkX3g7CisKKwkJaWYgKHNwZWVkX3kgPiBtYXhfc3BlZWRfeSkKKwkJCW1heF9zcGVlZF95 ID0gc3BlZWRfeTsKKwl9CisKKwlpZiAobWF4X3NwZWVkX3kgPiBtYXhfc3BlZWRfeCkKKwkJbWF4 X3NwZWVkX3ggPSBtYXhfc3BlZWRfeTsKKworCS8qIHNvcnQgc3RvcmtlIHNwZWVkIHJhbmdlIGJh c2VkIG9uIG1heCBzdHJva2UgaGlzdG9yeSBzcGVlZC4gKi8KKwlpZiAobWF4X3NwZWVkX3ggPCBt b3VzZV9iYWxsaXN0aWMtPnJlbF9tZWRpdW1fc3BlZWRfdGhyZXNob2xkKSB7CisJCXJlbF9zdHJv a2Vfc3BlZWQgPSBSRUxfU1RST0tFX1NQRUVEX1NMT1c7CisJfSBlbHNlIGlmIChtYXhfc3BlZWRf eCA+IG1vdXNlX2JhbGxpc3RpYy0+cmVsX2Zhc3Rfc3BlZWRfdGhyZXNob2xkKSB7CisJCWlmICht YXhfc3BlZWRfeCA8IG1vdXNlX2JhbGxpc3RpYy0+cmVsX2ZsaWNrX3NwZWVkX3RocmVzaG9sZCkK KwkJCXJlbF9zdHJva2Vfc3BlZWQgPSBSRUxfU1RST0tFX1NQRUVEX0ZBU1Q7CisJCWVsc2UKKwkJ CXJlbF9zdHJva2Vfc3BlZWQgPSBSRUxfU1RST0tFX1NQRUVEX1dBUlA7CisJfSBlbHNlIHsKKwkJ cmVsX3N0cm9rZV9zcGVlZCA9IFJFTF9TVFJPS0VfU1BFRURfTUVESVVNOworCX0KKworCXJldHVy biByZWxfc3Ryb2tlX3NwZWVkOworfQorCitpbnQgY3lhcGFfZmlsdGVyX2lpcl9yZWwoc3RydWN0 IGN5YXBhX2kyYyAqdG91Y2gsCisJCWludCByZWxfYWNjZWxfcG9zLAorCQlpbnQgKnJlbF9wcmV2 X2FjY2VsX3BvcywKKwkJaW50ICpyZWxfcHJldl9hY2NlbF9paXJfbW9kKQoreworCWludCBvbGRf aWlyOworCWludCBuZXdfaWlyOworCWludCBpaXJfbW9kX3ByZXY7CisJaW50IGlpcl9tb2RfbmV4 dDsKKwlpbnQgaWlyX251bWVyYXRvciwgaWlyX2Rlbm9taW5hdG9yOworCXN0cnVjdCBtb3VzZV9i YWxsaXN0aWNfcGFyYW1zICptb3VzZV9iYWxsaXN0aWMKKwkJCQk9ICZ0b3VjaC0+cHJlZmVyZW5j ZXMubW91c2VfYmFsbGlzdGljOworCisJaWlyX251bWVyYXRvciA9IG1vdXNlX2JhbGxpc3RpYy0+ cmVsX2lpcl9hY2NlbGVyYXRpb25fbnVtZXJhdG9yOworCWlpcl9kZW5vbWluYXRvciA9IG1vdXNl X2JhbGxpc3RpYy0+cmVsX2lpcl9hY2NlbGVyYXRpb25fZGVub21pbmF0b3I7CisKKwlvbGRfaWly ID0gKnJlbF9wcmV2X2FjY2VsX3BvczsKKwlpaXJfbW9kX3ByZXYgPSAqcmVsX3ByZXZfYWNjZWxf aWlyX21vZDsKKworCWlmICgoaWlyX2Rlbm9taW5hdG9yID4gMCkgJiYgKGlpcl9kZW5vbWluYXRv ciAhPSBpaXJfbnVtZXJhdG9yKSkgeworCQlpZiAob2xkX2lpciA9PSBDWUFQQV9GSUxURVJfRU1Q VFlfREFUQSkgeworCQkJb2xkX2lpciA9IHJlbF9hY2NlbF9wb3M7CisJCQlpaXJfbW9kX3ByZXYg PSAwOworCQl9CisKKwkJb2xkX2lpciAqPSBpaXJfbnVtZXJhdG9yOworCQluZXdfaWlyID0gcmVs X2FjY2VsX3BvcyAqIChpaXJfZGVub21pbmF0b3IgLSBpaXJfbnVtZXJhdG9yKTsKKwkJbmV3X2lp ciA9IG5ld19paXIgKyBvbGRfaWlyICsgaWlyX21vZF9wcmV2OworCQlpaXJfbW9kX25leHQgPSBu ZXdfaWlyICUgaWlyX2Rlbm9taW5hdG9yOworCQluZXdfaWlyID0gbmV3X2lpciAvIGlpcl9kZW5v bWluYXRvcjsKKworCQkqcmVsX3ByZXZfYWNjZWxfcG9zID0gbmV3X2lpcjsKKwkJKnJlbF9wcmV2 X2FjY2VsX2lpcl9tb2QgPSBpaXJfbW9kX25leHQ7CisJfSBlbHNlIHsKKwkJKnJlbF9wcmV2X2Fj Y2VsX3BvcyA9IG5ld19paXIgPSByZWxfYWNjZWxfcG9zOworCQkqcmVsX3ByZXZfYWNjZWxfaWly X21vZCA9IDA7CisJfQorCisJcmV0dXJuIG5ld19paXI7Cit9CisKKy8qIEFkanVzdHMgdGhlIFkg ZGF0YSBhcyByZXBvcnRlZCBieSB0aGUgdHJhY2twYWQgRlcgdG8gbWVldCB0aGUgc2hhcGUKKyoq IG9mIHRoZSB1c2VyJ3Mgc2NyZWVuLiBUaGlzIGlzIHVzZWZ1bCB0byBtZWV0IHNvbWUgY3VzdG9t ZXIgdGVzdAorKiogcmVxdWlyZW1lbnRzLCB3aGVyZSBhIGRpYWdvbmFsIHN0cm9rZSBvbiB0aGUg VFAgaXMgc3VwcG9zZWQgdG8KKyoqIGNhdXNlIGEgbGlrZS1hbmdsZWQgZGlhZ2luYWwgc3Ryb2tl IG9uIHRoZSBQQyBkaXNwbGF5IGRldmljZS4KKyovCitpbmxpbmUgaW50IGN5YXBhX2ZpbHRlcl9w bGF0Zm9ybV9kaXNwbGF5X2FzcGVjdF9yYXRpb19hZGp1c3QoCisJCXN0cnVjdCBjeWFwYV9pMmMg KnRvdWNoLAorCQlpbnQgYWJzX3kpCit7CisJc3RydWN0IG1vdXNlX2JhbGxpc3RpY19wYXJhbXMg Km1vdXNlX2JhbGxpc3RpYworCQkJCT0gJnRvdWNoLT5wcmVmZXJlbmNlcy5tb3VzZV9iYWxsaXN0 aWM7CisKKwlhYnNfeSAqPSBtb3VzZV9iYWxsaXN0aWMtPmFic19yaXNlX3k7CisJaWYgKChtb3Vz ZV9iYWxsaXN0aWMtPmFic19ydW5feSA+IDEpCisJCSYmIChtb3VzZV9iYWxsaXN0aWMtPmFic19y dW5feSA8IDEwMDAwKSkgeworCQlhYnNfeSA9IGFic195IC8gbW91c2VfYmFsbGlzdGljLT5hYnNf cnVuX3k7CisJfQorCisJcmV0dXJuIGFic195OworfQorCitzdGF0aWMgdm9pZCBjeWFwYV9maWx0 ZXJfY3Vyc29yX21vdmVtZW50KHN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoLAorCQlzdHJ1Y3QgY3lh cGFfcmVwb3J0X2RhdGEgKnJlcG9ydF9kYXRhKQoreworCWludCBhYnNfeCwgYWJzX3k7CisJaW50 IGRlbHRhX3gsIGRlbHRhX3k7CisJaW50IHNwZWVkX251bWVyYXRvciwgc3BlZWRfZGVub21pbmF0 b3I7CisJaW50IGFjY2VsZXJhdGlvbl92ZWN0b3JfYW1wbGl0dWRlID0gMTsKKwlpbnQgYWNjZWxl cmF0aW9uX2Rlbm9taW5hdG9yOworCWludCBkZWx0YV9hY2NlbGVyYXRpb25feCA9IDA7CisJaW50 IGRlbHRhX2FjY2VsZXJhdGlvbl95ID0gMDsKKwlzdHJ1Y3QgY3lhcGFfY3Vyc29yX2ZpbHRlcnMg KmZpbHRlciA9ICZ0b3VjaC0+Y3Vyc29yX2ZpbHRlcnM7CisJc3RydWN0IG1vdXNlX2JhbGxpc3Rp Y19wYXJhbXMgKm1vdXNlX2JhbGxpc3RpYworCQkJCT0gJnRvdWNoLT5wcmVmZXJlbmNlcy5tb3Vz ZV9iYWxsaXN0aWM7CisKKwkvKgorCSoqIDEuIElucHV0IEFCUyByYXcgZGF0YS4KKwkqLworCXRv dWNoLT5hYnNfeCA9IGFic194ID0gcmVwb3J0X2RhdGEtPnRvdWNoc1swXS54OworCXRvdWNoLT5h YnNfeSA9IGFic195ID0gcmVwb3J0X2RhdGEtPnRvdWNoc1swXS55OworCisJLyogYWRqdXN0IFkg ZGF0YSBhcyByZXBvcnRlZCBieSBmaXJ3YXJlIHRvIG1lZXQgdGhlCisJKiogc2hhcGUgb2YgdGhl IHVzcmUncyBzY3JlZW4gZmlyc3RseS4gKi8KKwl0b3VjaC0+YWJzX3kgPSBjeWFwYV9maWx0ZXJf cGxhdGZvcm1fZGlzcGxheV9hc3BlY3RfcmF0aW9fYWRqdXN0KHRvdWNoLAorCQkJCQl0b3VjaC0+ YWJzX3kpOworCisJLyoKKwkqKiAyLiBBcHBseSBGSVIgZmlsdGVyIHRvIEFCUyByYXcgZGF0YS4K KwkqLworCWlmIChtb3VzZV9iYWxsaXN0aWMtPmZpcl9hYnNfZW5hYmxlZCkgeworCQljeWFwYV9m aXJfcmVzZXRfZmlmb19kZXB0aCh0b3VjaCk7CisJCWFic194ID0gY3lhcGFfZmlsdGVyX2Zpcl9h YnNfeCh0b3VjaCk7CisJCWFic195ID0gY3lhcGFfZmlsdGVyX2Zpcl9hYnNfeSh0b3VjaCk7CisJ fQorCisJLyoKKwkqKiAzLiBBcHBseSBJSVIgZmlsdGVyIHRvIEZJUiBmaWx0ZXJlZCBBQlMgZGF0 YS4KKwkqLworCWlmIChtb3VzZV9iYWxsaXN0aWMtPmlpcl9hYnNfZW5hYmxlZCkgeworCQlhYnNf eCA9IGN5YXBhX2ZpbHRlcl9paXJfYWJzKHRvdWNoLAorCQkJCQkmZmlsdGVyLT5paXJfeCwKKwkJ CQkJJmZpbHRlci0+aWlyX21vZF94LAorCQkJCQlhYnNfeCwKKwkJCQkJbW91c2VfYmFsbGlzdGlj LT5paXJfbnVtZXJhdG9yLAorCQkJCQltb3VzZV9iYWxsaXN0aWMtPmlpcl9kZW5vbWluYXRvcik7 CisJCWFic195ID0gY3lhcGFfZmlsdGVyX2lpcl9hYnModG91Y2gsCisJCQkJCSZmaWx0ZXItPmlp cl95LAorCQkJCQkmZmlsdGVyLT5paXJfbW9kX3ksCisJCQkJCWFic195LAorCQkJCQltb3VzZV9i YWxsaXN0aWMtPmlpcl9udW1lcmF0b3IsCisJCQkJCW1vdXNlX2JhbGxpc3RpYy0+aWlyX2Rlbm9t aW5hdG9yKTsKKwkJdG91Y2gtPmFic194ID0gYWJzX3g7CisJCXRvdWNoLT5hYnNfeSA9IGFic195 OworCX0KKworCS8qCisJKiogNC4gQ2FsY3VsYXRlIGRlbHRhIG1vdmVtZW50IHZhbHVlLgorCSov CisJZGVsdGFfeCA9IGN5YXBhX2NvbXB1dGVfcmVsX21vdGlvbih0b3VjaC0+YWJzX3gsIHRvdWNo LT5wcmV2X2Fic194KTsKKwlkZWx0YV95ID0gY3lhcGFfY29tcHV0ZV9yZWxfbW90aW9uKHRvdWNo LT5hYnNfeSwgdG91Y2gtPnByZXZfYWJzX3kpOworCXRvdWNoLT5wcmV2X2Fic194ID0gdG91Y2gt PmFic194OworCXRvdWNoLT5wcmV2X2Fic195ID0gdG91Y2gtPmFic195OworCisJLyoKKwkqKiA1 LiBBcHBseSBzcGVlZC9hY2NlbGVyYXRpb24gY29udHJvbC4KKwkqLworCS8qIE9idGFpbiByZWxh dGl2ZSBtb3ZlbWVudCBzcGVlZCBjYXRlZ29yeQorCSoqIGZvciB1c2UgaW4gY29tcHV0aW5nIHNw ZWVkIGNvZWZmaWNpZW50cy4gKi8KKwlmaWx0ZXItPnJlbF9zdHJva2Vfc3BlZWQKKwkJPSBjeWFw YV9yZWxfZ2V0X2FjY2VsX3N0b2tlX3R5cGUodG91Y2gsIGRlbHRhX3gsIGRlbHRhX3kpOworCisJ LyogQ29tcHV0ZSBBY2NlbGVyYXRpb24gQ29tcG9uZW50LiAqLworCWlmICgodG91Y2gtPnByZXZf cmVsX3ggPT0gQ1lBUEFfRklMVEVSX0VNUFRZX0RBVEEpCisJCXx8ICh0b3VjaC0+cHJldl9yZWxf eSA9PSBDWUFQQV9GSUxURVJfRU1QVFlfREFUQSkpIHsKKwkJLyogZGVib3VuY2UgYmVmb3JlIHN0 YXJ0IGZpbHRlci4qLworCQl0b3VjaC0+cHJldl9yZWxfeCA9IGRlbHRhX3g7CisJCXRvdWNoLT5w cmV2X3JlbF95ID0gZGVsdGFfeTsKKwkJZmlsdGVyLT5yZWxfcmVzaWR1ZV94ID0gMDsKKwkJZmls dGVyLT5yZWxfcmVzaWR1ZV95ID0gMDsKKwkJZmlsdGVyLT5yZWxfcHJldl9hY2NlbF9paXJfeCA9 IENZQVBBX0ZJTFRFUl9FTVBUWV9EQVRBOworCQlmaWx0ZXItPnJlbF9wcmV2X2FjY2VsX2lpcl95 ID0gQ1lBUEFfRklMVEVSX0VNUFRZX0RBVEE7CisJCWZpbHRlci0+cmVsX3ByZXZfYWNjZWxfaWly X21vZF94ID0gMDsKKwkJZmlsdGVyLT5yZWxfcHJldl9hY2NlbF9paXJfbW9kX3kgPSAwOworCQlm aWx0ZXItPnJlbF9wcmV2X3Jlc2lkdWVfYWNjZWxfeCA9IDA7CisJCWZpbHRlci0+cmVsX3ByZXZf cmVzaWR1ZV9hY2NlbF95ID0gMDsKKworCQl0b3VjaC0+cmVsX3ggPSBkZWx0YV94OworCQl0b3Vj aC0+cmVsX3kgPSBkZWx0YV95OworCQlyZXBvcnRfZGF0YS0+cmVsX2RlbHRhWCA9IGRlbHRhX3g7 CisJCXJlcG9ydF9kYXRhLT5yZWxfZGVsdGFZID0gZGVsdGFfeTsKKworCQlyZXR1cm47CisJfQor CisJLyogc29ydCBzcGVlZCBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yLiAqLworCWlmIChmaWx0 ZXItPnJlbF9zdHJva2Vfc3BlZWQgPT0gUkVMX1NUUk9LRV9TUEVFRF9TTE9XKSB7CisJCXNwZWVk X251bWVyYXRvciA9IG1vdXNlX2JhbGxpc3RpYy0+cmVsX21vdGlvbl9udW1lcmF0b3I7CisJCXNw ZWVkX2Rlbm9taW5hdG9yID0gbW91c2VfYmFsbGlzdGljLT5yZWxfbW90aW9uX2Rlbm9taW5hdG9y OworCX0gZWxzZSB7CisJCXNwZWVkX251bWVyYXRvciA9IG1vdXNlX2JhbGxpc3RpYy0+cmVsX21l ZGl1bV9zcGVlZF9udW1lcmF0b3I7CisJCXNwZWVkX2Rlbm9taW5hdG9yID0gbW91c2VfYmFsbGlz dGljLT5yZWxfbW90aW9uX2Rlbm9taW5hdG9yOworCX0KKworCS8qIGFwcGx5IHNwZWVkL2FjY2Vs ZXJhdGlvbiBjb250cm9sLiAqLworCWRlbHRhX3ggKj0gc3BlZWRfbnVtZXJhdG9yOworCWRlbHRh X3kgKj0gc3BlZWRfbnVtZXJhdG9yOworCisJaWYgKHNwZWVkX2Rlbm9taW5hdG9yID4gMSkgewor CQlkZWx0YV94ICs9IGZpbHRlci0+cmVsX3Jlc2lkdWVfeDsKKwkJZmlsdGVyLT5yZWxfcmVzaWR1 ZV94ID0gZGVsdGFfeCAlIHNwZWVkX2Rlbm9taW5hdG9yOworCQlkZWx0YV94IC89IHNwZWVkX2Rl bm9taW5hdG9yOworCisJCWRlbHRhX3kgKz0gZmlsdGVyLT5yZWxfcmVzaWR1ZV95OworCQlmaWx0 ZXItPnJlbF9yZXNpZHVlX3kgPSBkZWx0YV95ICUgc3BlZWRfZGVub21pbmF0b3I7CisJCWRlbHRh X3kgLz0gc3BlZWRfZGVub21pbmF0b3I7CisJfQorCisJaWYgKGZpbHRlci0+cmVsX3N0cm9rZV9z cGVlZCA+PSBSRUxfU1RST0tFX1NQRUVEX0ZBU1QpIHsKKwkJYWNjZWxlcmF0aW9uX3ZlY3Rvcl9h bXBsaXR1ZGUgPSAxMDsKKwkJYWNjZWxlcmF0aW9uX3ZlY3Rvcl9hbXBsaXR1ZGUKKwkJCSo9IG1v dXNlX2JhbGxpc3RpYy0+cmVsX2FjY2VsZXJhdGlvbl9udW1lcmF0b3I7CisJCWFjY2VsZXJhdGlv bl9kZW5vbWluYXRvcgorCQkJPSBtb3VzZV9iYWxsaXN0aWMtPnJlbF9hY2NlbGVyYXRpb25fZGVu b21pbmF0b3I7CisKKwkJdG91Y2gtPnByZXZfcmVsX3ggPSBkZWx0YV94OworCQl0b3VjaC0+cHJl dl9yZWxfeSA9IGRlbHRhX3k7CisKKwkJZGVsdGFfYWNjZWxlcmF0aW9uX3ggPSBkZWx0YV94ICog YWNjZWxlcmF0aW9uX3ZlY3Rvcl9hbXBsaXR1ZGU7CisJCWRlbHRhX2FjY2VsZXJhdGlvbl95ID0g ZGVsdGFfeSAqIGFjY2VsZXJhdGlvbl92ZWN0b3JfYW1wbGl0dWRlOworCisJCWlmIChhY2NlbGVy YXRpb25fZGVub21pbmF0b3IgPiAxKSB7CisJCQlkZWx0YV9hY2NlbGVyYXRpb25feAorCQkJCSs9 IGZpbHRlci0+cmVsX3ByZXZfcmVzaWR1ZV9hY2NlbF94OworCQkJZmlsdGVyLT5yZWxfcHJldl9y ZXNpZHVlX2FjY2VsX3ggPSBkZWx0YV9hY2NlbGVyYXRpb25feAorCQkJCQklIGFjY2VsZXJhdGlv bl9kZW5vbWluYXRvcjsKKwkJCWRlbHRhX2FjY2VsZXJhdGlvbl94IC89IGFjY2VsZXJhdGlvbl9k ZW5vbWluYXRvcjsKKworCQkJZGVsdGFfYWNjZWxlcmF0aW9uX3kKKwkJCQkrPSBmaWx0ZXItPnJl bF9wcmV2X3Jlc2lkdWVfYWNjZWxfeTsKKwkJCWZpbHRlci0+cmVsX3ByZXZfcmVzaWR1ZV9hY2Nl bF95ID0gZGVsdGFfYWNjZWxlcmF0aW9uX3kKKwkJCQkJJSBhY2NlbGVyYXRpb25fZGVub21pbmF0 b3I7CisJCQlkZWx0YV9hY2NlbGVyYXRpb25feSAvPSBhY2NlbGVyYXRpb25fZGVub21pbmF0b3I7 CisJCX0KKworCQlkZWx0YV94ID0gZGVsdGFfYWNjZWxlcmF0aW9uX3g7CisJCWRlbHRhX3kgPSBk ZWx0YV9hY2NlbGVyYXRpb25feTsKKwl9CisKKwkvKgorCSoqIDYuIEFwcGx5IElJUiBmaWx0ZXIg dG8gcmVsYXRpdmUgZGF0YS4KKwkqLworCWRlbHRhX3ggPSBjeWFwYV9maWx0ZXJfaWlyX3JlbCh0 b3VjaCwgZGVsdGFfeCwKKwkJCQkJJmZpbHRlci0+cmVsX3ByZXZfYWNjZWxfaWlyX3gsCisJCQkJ CSZmaWx0ZXItPnJlbF9wcmV2X2FjY2VsX2lpcl9tb2RfeCk7CisJZGVsdGFfeSA9IGN5YXBhX2Zp bHRlcl9paXJfcmVsKHRvdWNoLCBkZWx0YV95LAorCQkJCQkmZmlsdGVyLT5yZWxfcHJldl9hY2Nl bF9paXJfeSwKKwkJCQkJJmZpbHRlci0+cmVsX3ByZXZfYWNjZWxfaWlyX21vZF95KTsKKworCWlm IChkZWx0YV94ID4gbW91c2VfYmFsbGlzdGljLT5yZWxfbWF4X2FjY2VsZXJhdGlvbl9zcGVlZCkK KwkJZGVsdGFfeCA9IG1vdXNlX2JhbGxpc3RpYy0+cmVsX21heF9hY2NlbGVyYXRpb25fc3BlZWQ7 CisJZWxzZSBpZiAoZGVsdGFfeCA8IC1tb3VzZV9iYWxsaXN0aWMtPnJlbF9tYXhfYWNjZWxlcmF0 aW9uX3NwZWVkKQorCQlkZWx0YV94ID0gLW1vdXNlX2JhbGxpc3RpYy0+cmVsX21heF9hY2NlbGVy YXRpb25fc3BlZWQ7CisKKwlpZiAoZGVsdGFfeSA+IG1vdXNlX2JhbGxpc3RpYy0+cmVsX21heF9h Y2NlbGVyYXRpb25fc3BlZWQpCisJCWRlbHRhX3kgPSBtb3VzZV9iYWxsaXN0aWMtPnJlbF9tYXhf YWNjZWxlcmF0aW9uX3NwZWVkOworCWVsc2UgaWYgKGRlbHRhX3kgPCAtbW91c2VfYmFsbGlzdGlj LT5yZWxfbWF4X2FjY2VsZXJhdGlvbl9zcGVlZCkKKwkJZGVsdGFfeSA9IC1tb3VzZV9iYWxsaXN0 aWMtPnJlbF9tYXhfYWNjZWxlcmF0aW9uX3NwZWVkOworCisJdG91Y2gtPnJlbF94ID0gZGVsdGFf eDsKKwl0b3VjaC0+cmVsX3kgPSBkZWx0YV95OworCXJlcG9ydF9kYXRhLT5yZWxfZGVsdGFYID0g ZGVsdGFfeDsKKwlyZXBvcnRfZGF0YS0+cmVsX2RlbHRhWSA9IGRlbHRhX3k7CisKKwlyZXR1cm47 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjeWFwYV9yZXBvcnRfZmluZ2VycyhzdHJ1Y3QgaW5w dXRfZGV2ICppbnB1dCwgaW50IGZpbmdlcnMpCit7CisJaWYgKGZpbmdlcnMpIHsKKwkJaW5wdXRf cmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfRklOR0VSLCAoZmluZ2VycyA9PSAxKSk7CisJCWlu cHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwgKGZpbmdlcnMgPT0gMikp OworCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9PTF9UUklQTEVUQVAsIChmaW5nZXJz ID09IDMpKTsKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfUVVBRFRBUCwgKGZp bmdlcnMgPiAzKSk7CisJfSBlbHNlIHsKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RP T0xfRklOR0VSLCAwKTsKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfRE9VQkxF VEFQLCAwKTsKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfVFJJUExFVEFQLCAw KTsKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfUVVBRFRBUCwgMCk7CisJfQor fQorCitzdGF0aWMgdm9pZCBjeWFwYV9wcm9jZXNzX3ByZXZfZ2VzdHVyZV9yZXBvcnQoc3RydWN0 IGN5YXBhX2kyYyAqdG91Y2gsCisJCQkJCXN0cnVjdCBjeWFwYV9yZXBvcnRfZGF0YSAqcmVwb3J0 X2RhdGEpCit7CisJaW50IGksIGo7CisJdW5zaWduZWQgbG9uZyBnZXN0dXJlX2RpZmY7CisJc3Ry dWN0IGlucHV0X2RldiAqaW5wdXQgPSB0b3VjaC0+aW5wdXQ7CisJc3RydWN0IGlucHV0X2RldiAq aW5wdXRfa2JkID0gdG91Y2gtPmlucHV0X2tiZDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfRklO R0VSUzsgaSsrKSB7CisJCS8qIGdldCBhbGwgZGlmZmVuZW50IGdlc3R1cmVzIGluIHByZXYgYW5k IGN1ci4gKi8KKwkJZ2VzdHVyZV9kaWZmCisJCQk9IHRvdWNoLT5wcmV2X2FjdGl2ZV9nZXN0dXJl c1tpXQorCQkJCV4gdG91Y2gtPmN1cl9hY3RpdmVfZ2VzdHVyZXNbaV07CisJCS8qIGdldCBhbGwg cHJldiBnZXN0dXJlcyB0aGF0IGhhcyBiZWVuIGNhbmNlbGVkIGluIGN1ci4gKi8KKwkJZ2VzdHVy ZV9kaWZmID0gZ2VzdHVyZV9kaWZmICYgdG91Y2gtPnByZXZfYWN0aXZlX2dlc3R1cmVzW2ldOwor CQlpZiAoZ2VzdHVyZV9kaWZmKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgKHNpemVvZih1bnNpZ25l ZCBsb25nKSo4KTsgaisrKSB7CisJCQkJLyogY2FuY2VsIHByZXZpb3VzIGV4aXN0cyBnZXN0dXJl LiAqLworCQkJCWlmICgoZ2VzdHVyZV9kaWZmID4+IGopICYgMVVMKSB7CisJCQkJCXN3aXRjaCAo R0VTVFVSRV9JRF9DT0RFKGksIGopKSB7CisJCQkJCWNhc2UgR0VTVFVSRV9QQUxNX1JFSkVDVElP SU46CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBHRVNUVVJFX1NJTkdMRV9UQVA6CisJCQkJCQli cmVhazsKKwkJCQkJY2FzZSBHRVNUVVJFX0RPVUJMRV9UQVA6CisJCQkJCQlicmVhazsKKwkJCQkJ Y2FzZSBHRVNUVVJFX1RBUF9BTkRfSE9MRDoKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEdFU1RV UkVfRURHRV9NT1RJT046CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBHRVNUVVJFX0RSQUc6CisJ CQkJCQl0b3VjaC0+cHJldl9hYnNfeCA9IC0xOworCQkJCQkJdG91Y2gtPnByZXZfYWJzX3kgPSAt MTsKKworCQkJCQkJaWYgKHRvdWNoLT5wbGF0Zm9ybV9kYXRhCisJCQkJCQkJLT51c2VfYWJzb2x1 dGVfbW9kZSkgeworCQkJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQkJCUJUTl9U T1VDSCwgMCk7CisJCQkJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwKKwkJCQkJCQkJQUJTX1BS RVNTVVJFLAorCQkJCQkJCQkwKTsKKwkJCQkJCQljeWFwYV9yZXBvcnRfZmluZ2VycygKKwkJCQkJ CQkJaW5wdXQsIDApOworCQkJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQkJCUJU Tl9MRUZULCAwKTsKKwkJCQkJCQlpbnB1dF9zeW5jKGlucHV0KTsKKwkJCQkJCX0KKworCQkJCQkJ Y3lhcGFfcmVzZXRfY3Vyc29yX2ZpbHRlcnNfZGF0YSgKKwkJCQkJCQl0b3VjaCk7CisKKwkJCQkJ CWJyZWFrOworCQkJCQljYXNlIEdFU1RVUkVfMkZfWk9PTV9JTjoKKwkJCQkJCXRvdWNoLT56b29t aW5fZGVsdGEgPSAwOworCQkJCQkJdG91Y2gtPnpvb21fdHJpZ2dlZCA9IDA7CisJCQkJCQlpbnB1 dF9yZXBvcnRfa2V5KGlucHV0X2tiZCwKKwkJCQkJCQlLRVlfTEVGVENUUkwsIDEpOworCQkJCQkJ aW5wdXRfc3luYyhpbnB1dF9rYmQpOworCQkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dF9rYmQs CisJCQkJCQkJS0VZX0xFRlRDVFJMLCAwKTsKKwkJCQkJCWlucHV0X3N5bmMoaW5wdXRfa2JkKTsK KwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEdFU1RVUkVfMkZfWk9PTV9PVVQ6CisJCQkJCQl0b3Vj aC0+em9vbW91dF9kZWx0YSA9IDA7CisJCQkJCQl0b3VjaC0+em9vbV90cmlnZ2VkID0gMDsKKwkJ CQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfa2JkLAorCQkJCQkJCUtFWV9MRUZUQ1RSTCwgMSk7 CisJCQkJCQlpbnB1dF9zeW5jKGlucHV0X2tiZCk7CisJCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlu cHV0X2tiZCwKKwkJCQkJCQlLRVlfTEVGVENUUkwsIDApOworCQkJCQkJaW5wdXRfc3luYyhpbnB1 dF9rYmQpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgR0VTVFVSRV9TQ1JPTExfVVA6CisJCQkJ CWNhc2UgR0VTVFVSRV8yRl9TQ1JPTExfVVA6CisJCQkJCQl0b3VjaC0+ZGVsdGFfc2Nyb2xsX3Vw ID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEdFU1RVUkVfU0NST0xMX0RPV046CisJCQkJ CWNhc2UgR0VTVFVSRV8yRl9TQ1JPTExfRE9XTjoKKwkJCQkJCXRvdWNoLT5kZWx0YV9zY3JvbGxf ZG93biA9IDA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBHRVNUVVJFX1NDUk9MTF9MRUZUOgor CQkJCQljYXNlIEdFU1RVUkVfMkZfU0NST0xMX0xFRlQ6CisJCQkJCQlpbnB1dF9yZXBvcnRfa2V5 KGlucHV0X2tiZCwKKwkJCQkJCQlLRVlfTEVGVFNISUZULCAxKTsKKwkJCQkJCWlucHV0X3N5bmMo aW5wdXRfa2JkKTsKKwkJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfa2JkLAorCQkJCQkJCUtF WV9MRUZUU0hJRlQsIDApOworCQkJCQkJaW5wdXRfc3luYyhpbnB1dF9rYmQpOworCQkJCQkJdG91 Y2gtPmhzY3JvbGxfY2FuY2VsZWQgPSAxOworCQkJCQkJdG91Y2gtPmhzY3JvbGxfbGVmdCA9IDA7 CisJCQkJCQl0b3VjaC0+ZGVsdGFfc2Nyb2xsX2xlZnQgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJ CWNhc2UgR0VTVFVSRV9TQ1JPTExfUklHSFQ6CisJCQkJCWNhc2UgR0VTVFVSRV8yRl9TQ1JPTExf UklHSFQ6CisJCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2tiZCwKKwkJCQkJCQlLRVlfTEVG VFNISUZULCAxKTsKKwkJCQkJCWlucHV0X3N5bmMoaW5wdXRfa2JkKTsKKwkJCQkJCWlucHV0X3Jl cG9ydF9rZXkoaW5wdXRfa2JkLAorCQkJCQkJCUtFWV9MRUZUU0hJRlQsIDApOworCQkJCQkJaW5w dXRfc3luYyhpbnB1dF9rYmQpOworCQkJCQkJdG91Y2gtPmhzY3JvbGxfY2FuY2VsZWQgPSAxOwor CQkJCQkJdG91Y2gtPmhzY3JvbGxfcmlnaHQgPSAwOworCQkJCQkJdG91Y2gtPmRlbHRhX3Njcm9s bF9yaWdodCA9IDA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBHRVNUVVJFXzJGX1JPVEFURToK KwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEdFU1RVUkVfMkZfUElOQ0g6CisJCQkJCQlicmVhazsK KwkJCQkJY2FzZSBHRVNUVVJFXzJGX1RBUDoKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEdFU1RV UkVfMkZfRFJBRzoKKwkJCQkJCWlmICh0b3VjaC0+cGxhdGZvcm1fZGF0YQorCQkJCQkJCS0+dXNl X2Fic29sdXRlX21vZGUpIHsKKwkJCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAorCQkJCQkJ CQlCVE5fVE9VQ0gsIDApOworCQkJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsCisJCQkJCQkJ CUFCU19QUkVTU1VSRSwKKwkJCQkJCQkJMCk7CisJCQkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1 dCwKKwkJCQkJCQkJQlROX0xFRlQsIDApOworCQkJCQkJCWN5YXBhX3JlcG9ydF9maW5nZXJzKAor CQkJCQkJCQlpbnB1dCwgMCk7CisJCQkJCQkJaW5wdXRfc3luYyhpbnB1dCk7CisJCQkJCQl9CisK KwkJCQkJCXRvdWNoLT5nZXN0dXJlXzJGX2RyYWdfc3RhcnRlZAorCQkJCQkJCT0gMDsKKwkJCQkJ CXRvdWNoLT5wcmV2X2Fic194ID0gLTE7CisJCQkJCQl0b3VjaC0+cHJldl9hYnNfeSA9IC0xOwor CQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgR0VTVFVSRV9GTElDSzoKKwkJCQkJY2FzZSBHRVNUVVJF XzJGX0ZMSUNLOgorCQkJCQljYXNlIEdFU1RVUkVfM0ZfRkxJQ0s6CisJCQkJCWNhc2UgR0VTVFVS RV80Rl9GTElDSzoKKwkJCQkJY2FzZSBHRVNUVVJFXzVGX0ZMSUNLOgorCQkJCQkJYnJlYWs7CisJ CQkJCWRlZmF1bHQ6CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0K K30KKworc3RhdGljIHZvaWQgY3lhcGFfZ2VzdHVyZV9yZXBvcnQoc3RydWN0IGN5YXBhX2kyYyAq dG91Y2gsCisJCQkJc3RydWN0IGN5YXBhX3JlcG9ydF9kYXRhICpyZXBvcnRfZGF0YSwKKwkJCQlz dHJ1Y3QgY3lhcGFfZ2VzdHVyZSAqZ2VzdHVyZSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1 dCA9IHRvdWNoLT5pbnB1dDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF93aGVlbCA9IHRvdWNo LT5pbnB1dF93aGVlbDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9rYmQgPSB0b3VjaC0+aW5w dXRfa2JkOworCWludCBkZWx0YSA9IDA7CisJc3RydWN0IGN5YXBhX3ByZWZlcmVuY2VzICpwcmVm ZXJlbmNlcyA9ICZ0b3VjaC0+cHJlZmVyZW5jZXM7CisJaW50IHRocmVzaG9sZCA9IDA7CisJaW50 IHZhbHVlID0gMDsKKworCXN3aXRjaCAoZ2VzdHVyZS0+aWQpIHsKKwljYXNlIEdFU1RVUkVfUEFM TV9SRUpFQ1RJT0lOOgorCQkvKiB3aGVuIHBhbG0gcmVqZWN0aW9uIGdlc3R1cmUgaXMgdHJpZ2dl ZCwgZG8gbm90IG1vdmUgY3Vyc29yCisJCSoqICBhbnkgbW9yZSwganVzdCBvcGVyYXRpb24gYXMg bm8gZmluZ2VyIHRvdWNoZWQgb24gdHJhY2twYWQuCisJCSovCisJCWlmICh0b3VjaC0+cGxhdGZv cm1fZGF0YS0+dXNlX2Fic29sdXRlX21vZGUpIHsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQs IEJUTl9UT1VDSCwgMCk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfUFJFU1NVUkUs IDApOworCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1RPT0xfV0lEVEgsIDApOworCQkJ Y3lhcGFfcmVwb3J0X2ZpbmdlcnMoaW5wdXQsIDApOworCQl9CisKKwkJdG91Y2gtPnByZXZfYWJz X3ggPSAtMTsKKwkJdG91Y2gtPnByZXZfYWJzX3kgPSAtMTsKKworCQlpbnB1dF9yZXBvcnRfa2V5 KGlucHV0LCBCVE5fTEVGVCwgcmVwb3J0X2RhdGEtPmJ1dHRvbiAmIDB4MDEpOworCQlpbnB1dF9y ZXBvcnRfa2V5KGlucHV0LCBCVE5fUklHSFQsIHJlcG9ydF9kYXRhLT5idXR0b24gJiAweDAyKTsK KwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX01JRERMRSwgcmVwb3J0X2RhdGEtPmJ1dHRv biAmIDB4MDQpOworCisJCWlucHV0X3N5bmMoaW5wdXQpOworCisJCURCR1BSSU5USygoIiVzOiBy ZXBvcnQgcGFsbSByZWplY3Rpb25cbiIsIF9fZnVuY19fKSk7CisJCWJyZWFrOworCWNhc2UgR0VT VFVSRV9TSU5HTEVfVEFQOgorCQlpZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9hYnNvbHV0 ZV9tb2RlKSB7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIDApOworCQkJ aW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1BSRVNTVVJFLCAwKTsKKwkJCWlucHV0X3JlcG9y dF9rZXkoaW5wdXQsIEJUTl9MRUZULCAwKTsKKwkJCWlucHV0X3N5bmMoaW5wdXQpOworCisJCQkv KiBpbiBhYnNvbHV0ZSBtb2RlIHVzZSBjeWFwYV9yZXBvcnRfZmluZ2VycyhpbnB1dCwgTikKKwkJ CSoqIHRvIHRyaWdnZXIgY2xpY2suCisJCQkqKiB3aGVuIE4gY2hhbmdlIGZyb20gc21hbGwgdG8g bGFyZ2UsCisJCQkqKiBjbGllY2sgd2l0aCBiZSB0cmlnZ2VkLiovCisJCQlicmVhazsKKwkJfQor CisJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULCAxKTsKKwkJaW5wdXRfc3luYyhp bnB1dCk7CisKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX0xFRlQsIDApOworCQlpbnB1 dF9zeW5jKGlucHV0KTsKKworCQlEQkdQUklOVEsoKCIlczogcmVwb3J0IHNpbmdsZSB0YXBcbiIs IF9fZnVuY19fKSk7CisJCWJyZWFrOworCWNhc2UgR0VTVFVSRV9ET1VCTEVfVEFQOgorCQlpZiAo dG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9hYnNvbHV0ZV9tb2RlKSB7CisJCQlpbnB1dF9yZXBv cnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIDApOworCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwg QUJTX1BSRVNTVVJFLCAwKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULCAw KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9SSUdIVCwgMCk7CisJCQlpbnB1dF9z eW5jKGlucHV0KTsKKwkJfQorCisJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULCAx KTsKKwkJaW5wdXRfc3luYyhpbnB1dCk7CisKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlRO X0xFRlQsIDApOworCQlpbnB1dF9zeW5jKGlucHV0KTsKKworCQlpbnB1dF9yZXBvcnRfa2V5KGlu cHV0LCBCVE5fTEVGVCwgMSk7CisJCWlucHV0X3N5bmMoaW5wdXQpOworCisJCWlucHV0X3JlcG9y dF9rZXkoaW5wdXQsIEJUTl9MRUZULCAwKTsKKwkJaW5wdXRfc3luYyhpbnB1dCk7CisKKwkJREJH UFJJTlRLKCgiJXM6IHJlcG9ydCBkb3VibGUgdGFwXG4iLCBfX2Z1bmNfXykpOworCQlicmVhazsK KwljYXNlIEdFU1RVUkVfVEFQX0FORF9IT0xEOgorCQkvKiBvbmUgZmluZ2VyIGNsaWNrIGFuZCBo b2xkIGZvciBtb3JlIHRoYW4gZGVmaW5pdGlvaW4gdGltZSwKKwkJKiogdGhlbiB0byBkbyBzb21l dGhpbmcuICovCisJCURCR1BSSU5USygoIiVzOiBubyBnZXN0dXJlIGZvciBUYXAgYW5kIGhvbGQg eWV0LlxuIiwgX19mdW5jX18pKTsKKwkJYnJlYWs7CisJY2FzZSBHRVNUVVJFX0VER0VfTU9USU9O OgorCQlEQkdQUklOVEsoKCIlczogbm8gZ2VzdHVyZSBmb3IgZWRnZSBtb3Rpb24geWV0LlxuIiwg X19mdW5jX18pKTsKKwkJYnJlYWs7CisJY2FzZSBHRVNUVVJFX0RSQUc6CisJCS8qIDEtZmluZ2Vy IGRyYWcuIDEtZmluZ2VyIGRvdWJsZSBjbGljayBhbmQgaG9sZCwKKwkJKiogdGhlbiBtb3ZlIHRo ZSBmaW5nZXIuICovCisJCWlmICh0b3VjaC0+cGxhdGZvcm1fZGF0YS0+dXNlX2Fic29sdXRlX21v ZGUpIHsKKwkJCXRvdWNoLT54eV90b3VjaHNfaW5jbHVkZWRfYml0cyA9IDB4MDE7CisJCQljeWFw YV9jYWxjdWxhdGVfYWJzX3h5KHRvdWNoLCByZXBvcnRfZGF0YSk7CisKKwkJCWlucHV0X3JlcG9y dF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgMSk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBB QlNfWCwgdG91Y2gtPmFic194KTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19ZLCB0 b3VjaC0+YWJzX3kpOworCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1BSRVNTVVJFLAor CQkJCXJlcG9ydF9kYXRhLT5hdmdfcHJlc3N1cmUpOworCQkJY3lhcGFfcmVwb3J0X2ZpbmdlcnMo aW5wdXQsIDEpOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX0xFRlQsIDEpOworCQkJ aW5wdXRfc3luYyhpbnB1dCk7CisJCX0gZWxzZSB7CisJCQljeWFwYV9maWx0ZXJfY3Vyc29yX21v dmVtZW50KHRvdWNoLCByZXBvcnRfZGF0YSk7CisKKwkJCWlucHV0X3JlcG9ydF9yZWwoaW5wdXQs IFJFTF9YLCByZXBvcnRfZGF0YS0+cmVsX2RlbHRhWCk7CisJCQlpbnB1dF9yZXBvcnRfcmVsKGlu cHV0LCBSRUxfWSwgcmVwb3J0X2RhdGEtPnJlbF9kZWx0YVkpOworCQkJaW5wdXRfcmVwb3J0X2tl eShpbnB1dCwgQlROX0xFRlQsIDEpOworCQkJaW5wdXRfc3luYyhpbnB1dCk7CisJCX0KKworCQlE QkdQUklOVEsoKCIlczogMSBmaW5nZXIgZHJhZy5cbiIsIF9fZnVuY19fKSk7CisJCWJyZWFrOwor CWNhc2UgR0VTVFVSRV8yRl9aT09NX0lOOgorCQlkZWx0YSA9IGdlc3R1cmUtPnBhcmFtMjsKKwkJ Lyogbm8gem9vbSBkZWx0YS4gKi8KKwkJaWYgKGRlbHRhIDw9IDApCisJCQlicmVhazsKKwkJdG91 Y2gtPnpvb21pbl9kZWx0YSArPSBkZWx0YTsKKworCQlpZiAodG91Y2gtPnpvb21fdHJpZ2dlZCA9 PSAwKSB7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2tiZCwgS0VZX0xFRlRDVFJMLCAwKTsK KwkJCWlucHV0X3N5bmMoaW5wdXRfa2JkKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfa2Jk LCBLRVlfTEVGVENUUkwsIDEpOworCQkJaW5wdXRfc3luYyhpbnB1dF9rYmQpOworCQkJdG91Y2gt Pnpvb21fdHJpZ2dlZCA9IDE7CisJCX0gZWxzZSB7CisJCQlpZiAodG91Y2gtPnpvb21pbl9kZWx0 YQorCQkJCTw9IHByZWZlcmVuY2VzLT56b29tLmRlZmF1bHRfdGhyZXNob2xkKSB7CisJCQkJdGhy ZXNob2xkID0gMDsKKwkJCQl2YWx1ZSA9IDE7CisJCQl9IGVsc2UgaWYgKHRvdWNoLT56b29taW5f ZGVsdGEKKwkJCQk+IHByZWZlcmVuY2VzLT56b29tLmZhc3RfdGhyZXNob2xkKSB7CisJCQkJdGhy ZXNob2xkID0gMjsKKwkJCQl2YWx1ZSA9IHRvdWNoLT56b29taW5fZGVsdGEKKwkJCQkJLyBwcmVm ZXJlbmNlcy0+em9vbS5mYXN0X3RocmVzaG9sZDsKKwkJCQl0b3VjaC0+em9vbWluX2RlbHRhCisJ CQkJCSU9IHByZWZlcmVuY2VzLT56b29tLmZhc3RfdGhyZXNob2xkOworCQkJfSBlbHNlIHsKKwkJ CQl0aHJlc2hvbGQgPSAxOworCQkJCXZhbHVlID0gMTsKKwkJCQl0b3VjaC0+em9vbWluX2RlbHRh ID0gMDsKKwkJCX0KKworCQkJd2hpbGUgKHRocmVzaG9sZCA+IDApIHsKKwkJCQlpbnB1dF9yZXBv cnRfcmVsKGlucHV0X3doZWVsLCBSRUxfV0hFRUwsIHZhbHVlKTsKKwkJCQlpbnB1dF9zeW5jKGlu cHV0X3doZWVsKTsKKwkJCQl0aHJlc2hvbGQtLTsKKwkJCX0KKwkJfQorCisJCURCR1BSSU5USygo IiVzOiAyRiB6b29tIGluLlxuIiwgX19mdW5jX18pKTsKKwkJYnJlYWs7CisJY2FzZSBHRVNUVVJF XzJGX1pPT01fT1VUOgorCQlkZWx0YSA9IGdlc3R1cmUtPnBhcmFtMjsKKwkJLyogbm8gem9vbSBk ZWx0YS4gKi8KKwkJaWYgKGRlbHRhIDw9IDApCisJCQlicmVhazsKKwkJdG91Y2gtPnpvb21vdXRf ZGVsdGEgKz0gZGVsdGE7CisKKwkJaWYgKHRvdWNoLT56b29tX3RyaWdnZWQgPT0gMCkgeworCQkJ aW5wdXRfcmVwb3J0X2tleShpbnB1dF9rYmQsIEtFWV9MRUZUQ1RSTCwgMCk7CisJCQlpbnB1dF9z eW5jKGlucHV0X2tiZCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2tiZCwgS0VZX0xFRlRD VFJMLCAxKTsKKwkJCWlucHV0X3N5bmMoaW5wdXRfa2JkKTsKKwkJCXRvdWNoLT56b29tX3RyaWdn ZWQgPSAxOworCQl9IGVsc2UgeworCQkJdmFsdWUgPSAxOworCQkJaWYgKHRvdWNoLT56b29tb3V0 X2RlbHRhCisJCQkJPD0gcHJlZmVyZW5jZXMtPnpvb20uZGVmYXVsdF90aHJlc2hvbGQpIHsKKwkJ CQl0aHJlc2hvbGQgPSAwOworCQkJCXZhbHVlID0gMTsKKwkJCX0gZWxzZSBpZiAodG91Y2gtPnpv b21vdXRfZGVsdGEKKwkJCQk+IHByZWZlcmVuY2VzLT56b29tLmZhc3RfdGhyZXNob2xkKSB7CisJ CQkJdGhyZXNob2xkID0gMjsKKwkJCQl2YWx1ZSA9IHRvdWNoLT56b29tb3V0X2RlbHRhCisJCQkJ CS8gcHJlZmVyZW5jZXMtPnpvb20uZmFzdF90aHJlc2hvbGQ7CisJCQkJdG91Y2gtPnpvb21vdXRf ZGVsdGEKKwkJCQkJJT0gcHJlZmVyZW5jZXMtPnpvb20uZmFzdF90aHJlc2hvbGQ7CisJCQl9IGVs c2UgeworCQkJCXRocmVzaG9sZCA9IDE7CisJCQkJdmFsdWUgPSAxOworCQkJCXRvdWNoLT56b29t b3V0X2RlbHRhID0gMDsKKwkJCX0KKworCQkJd2hpbGUgKHRocmVzaG9sZCA+IDApIHsKKwkJCQlp bnB1dF9yZXBvcnRfcmVsKGlucHV0X3doZWVsLAorCQkJCQkJUkVMX1dIRUVMLAorCQkJCQkJLXZh bHVlKTsKKwkJCQlpbnB1dF9zeW5jKGlucHV0X3doZWVsKTsKKwkJCQl0aHJlc2hvbGQtLTsKKwkJ CX0KKwkJfQorCisJCURCR1BSSU5USygoIiVzOiAyRiB6b29tIG91dC5cbiIsIF9fZnVuY19fKSk7 CisJCWJyZWFrOworCWNhc2UgR0VTVFVSRV9TQ1JPTExfVVA6CisJY2FzZSBHRVNUVVJFXzJGX1ND Uk9MTF9VUDoKKwkJaWYgKHRvdWNoLT5oc2Nyb2xsX2NhbmNlbGVkKSB7CisJCQkvKiBhdm9pZCBW U2Nyb2xsIG1pc3MgdHJpZ2dlZCBhcyBIU2Nyb2xsLiAqLworCQkJdG91Y2gtPmhzY3JvbGxfY2Fu Y2VsZWQgPSAwOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dF9rYmQsIEtFWV9MRUZUU0hJRlQs IDApOworCQkJaW5wdXRfc3luYyhpbnB1dF9rYmQpOworCisJCQlicmVhazsKKwkJfQorCisJCWRl bHRhID0gZ2VzdHVyZS0+cGFyYW0yOworCQl0aHJlc2hvbGQgPSBwcmVmZXJlbmNlcy0+dnNjcm9s bC5kZWZhdWx0X3RocmVzaG9sZDsKKwkJdmFsdWUgPSAxOworCQl0b3VjaC0+ZGVsdGFfc2Nyb2xs X3VwICs9IGRlbHRhOworCisJCWlmICh0b3VjaC0+ZGVsdGFfc2Nyb2xsX3VwIDw9IDApIHsKKwkJ CS8qIG5vIHNjcm9sbCBtb3ZlLCBpdCdzIG5vdCBuZWVkIHRvIHJlcG9ydC4gKi8KKwkJCXRvdWNo LT5kZWx0YV9zY3JvbGxfdXAgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAodG91Y2gtPmRl bHRhX3Njcm9sbF91cCA8IHRocmVzaG9sZCkgeworCQkJLyoga2VlcCBzbWFsbCBtb3ZlbWVudCBh bHNvIGNhbiB3b3JrLiAqLworCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dF93aGVlbCwgUkVMX1dI RUVMLCB2YWx1ZSk7CisJCQlpbnB1dF9zeW5jKGlucHV0X3doZWVsKTsKKworCQkJdG91Y2gtPmRl bHRhX3Njcm9sbF91cCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh0b3VjaC0+ZGVsdGFf c2Nyb2xsX3VwCisJCQk+IHByZWZlcmVuY2VzLT52c2Nyb2xsLmZhc3RfdGhyZXNob2xkKSB7CisJ CQkvKiBmYXN0IHNjcm9sbCwgcmVzZXQgdGhyZXNob2xkIHZhbHVlLiAqLworCQkJdGhyZXNob2xk ID0gMTsKKwkJCXZhbHVlID0gMTY7CisJCX0gZWxzZSB7CisJCQkvKiBtaWRkbGUgc2Nyb2xsIHNw ZWVkLiAqLworCQkJdGhyZXNob2xkID0gMjsKKwkJCXZhbHVlID0gMjsKKwkJfQorCisJCXdoaWxl ICh0b3VjaC0+ZGVsdGFfc2Nyb2xsX3VwID49IHRocmVzaG9sZCkgeworCQkJaW5wdXRfcmVwb3J0 X3JlbChpbnB1dF93aGVlbCwKKwkJCQkJUkVMX1dIRUVMLAorCQkJCQl2YWx1ZSoyL3RocmVzaG9s ZCk7CisJCQlpbnB1dF9zeW5jKGlucHV0X3doZWVsKTsKKworCQkJdG91Y2gtPmRlbHRhX3Njcm9s bF91cCAtPSB0aHJlc2hvbGQqdmFsdWU7CisJCX0KKworCQlEQkdQUklOVEsoKCIlczogc2Nyb2xs IHVwLCBmaW5nZXJzPSVkXG4iLAorCQkJX19mdW5jX18sIHJlcG9ydF9kYXRhLT50b3VjaF9maW5n ZXJzKSk7CisJCWJyZWFrOworCWNhc2UgR0VTVFVSRV9TQ1JPTExfRE9XTjoKKwljYXNlIEdFU1RV UkVfMkZfU0NST0xMX0RPV046CisJCWlmICh0b3VjaC0+aHNjcm9sbF9jYW5jZWxlZCkgeworCQkJ LyogYXZvaWQgVlNjcm9sbCBtaXNzIHRyaWdnZWQgYXMgSFNjcm9sbC4gKi8KKwkJCXRvdWNoLT5o c2Nyb2xsX2NhbmNlbGVkID0gMDsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfa2JkLCBLRVlf TEVGVFNISUZULCAwKTsKKwkJCWlucHV0X3N5bmMoaW5wdXRfa2JkKTsKKworCQkJYnJlYWs7CisJ CX0KKworCQlkZWx0YSA9IGdlc3R1cmUtPnBhcmFtMjsKKwkJdGhyZXNob2xkID0gcHJlZmVyZW5j ZXMtPnZzY3JvbGwuZGVmYXVsdF90aHJlc2hvbGQ7CisJCXZhbHVlID0gMTsKKwkJdG91Y2gtPmRl bHRhX3Njcm9sbF9kb3duICs9IGRlbHRhOworCisJCWlmICh0b3VjaC0+ZGVsdGFfc2Nyb2xsX2Rv d24gPD0gMCkgeworCQkJLyogbm8gc2Nyb2xsIG1vdmUsIGl0J3Mgbm90IG5lZWQgdG8gcmVwb3J0 LiAqLworCQkJdG91Y2gtPmRlbHRhX3Njcm9sbF9kb3duID0gMDsKKwkJCWJyZWFrOworCQl9CisK KwkJaWYgKHRvdWNoLT5kZWx0YV9zY3JvbGxfZG93biA8IHRocmVzaG9sZCkgeworCQkJLyoga2Vl cCBzbWFsbCBtb3ZlbWVudCBhbHNvIGNhbiB3b3JrLiAqLworCQkJaW5wdXRfcmVwb3J0X3JlbChp bnB1dF93aGVlbCwgUkVMX1dIRUVMLCAtdmFsdWUpOworCQkJaW5wdXRfc3luYyhpbnB1dF93aGVl bCk7CisKKwkJCXRvdWNoLT5kZWx0YV9zY3JvbGxfZG93biA9IDA7CisJCQlicmVhazsKKwkJfQor CisJCWlmICh0b3VjaC0+ZGVsdGFfc2Nyb2xsX2Rvd24KKwkJCT4gcHJlZmVyZW5jZXMtPnZzY3Jv bGwuZmFzdF90aHJlc2hvbGQpIHsKKwkJCS8qIGZhc3Qgc2Nyb2xsLCByZXNldCB0aHJlc2hvbGQg dmFsdWUuICovCisJCQl0aHJlc2hvbGQgPSAxOworCQkJdmFsdWUgPSAxNjsKKwkJfSBlbHNlIHsK KwkJCS8qIG1pZGRsZSBzY3JvbGwgc3BlZWQuICovCisJCQl0aHJlc2hvbGQgPSAyOworCQkJdmFs dWUgPSAyOworCQl9CisKKwkJd2hpbGUgKHRvdWNoLT5kZWx0YV9zY3JvbGxfZG93biA+PSB0aHJl c2hvbGQpIHsKKwkJCWlucHV0X3JlcG9ydF9yZWwoaW5wdXRfd2hlZWwsCisJCQkJCVJFTF9XSEVF TCwKKwkJCQkJLXZhbHVlKjIvdGhyZXNob2xkKTsKKwkJCWlucHV0X3N5bmMoaW5wdXRfd2hlZWwp OworCisJCQl0b3VjaC0+ZGVsdGFfc2Nyb2xsX2Rvd24gLT0gdGhyZXNob2xkKnZhbHVlOworCQl9 CisKKwkJREJHUFJJTlRLKCgiJXM6IHNjcm9sbCBkb3duLCBmaW5nZXI9JWRcbiIsCisJCQkJCV9f ZnVuY19fLCByZXBvcnRfZGF0YS0+dG91Y2hfZmluZ2VycykpOworCQlicmVhazsKKwljYXNlIEdF U1RVUkVfU0NST0xMX0xFRlQ6CisJY2FzZSBHRVNUVVJFXzJGX1NDUk9MTF9MRUZUOgorCQlkZWx0 YSA9IGdlc3R1cmUtPnBhcmFtMjsKKwkJaWYgKDAgPT0gdG91Y2gtPmhzY3JvbGxfbGVmdCkgewor CQkJLyogdG8gcmVwb3J0IGxlZnQgc2hpZnQgZmlyc3RseSBpbm9yZGVyIHRvIGF2b2lkIG1pc3MK KwkJCSoqIHRyaWcgdnNjcm9sbC4gYmVjYXVzZSwgZm9yIDAuOS4xMDEgY2hyb21pdW0gb3MsCisJ CQkqKiBpdCBzZWVtcyB0aGF0IHdoZW4gbGVmdCBzaGlmdCBpcyBwcmVzc2VkLAorCQkJKiogdGhl biBzY3JvbGwgc29vbiwgdGhlIGNvbWJpbmVkIGdlc3R1cmUgd29uJ3QKKwkJCSoqIHRha2UgZWZm ZWN0IHNvb24sIGl0IHdpbGwgaGF2ZSBzb21lIGRlbGF5LgorCQkJKiogU28gYWRkIGEgZGVib3Vu Y2UgdG8gYXZvaWQgdGhpcyBpc3N1ZS4KKwkJCSovCisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0 X2tiZCwgS0VZX0xFRlRTSElGVCwgMCk7CisJCQlpbnB1dF9zeW5jKGlucHV0X2tiZCk7CisJCQlp bnB1dF9yZXBvcnRfa2V5KGlucHV0X2tiZCwgS0VZX0xFRlRTSElGVCwgMSk7CisJCQlpbnB1dF9z eW5jKGlucHV0X2tiZCk7CisJCQl0b3VjaC0+aHNjcm9sbF9sZWZ0ID0gZGVsdGE7CisJCX0gZWxz ZSB7CisJCQl0aHJlc2hvbGQgPSBwcmVmZXJlbmNlcy0+aHNjcm9sbC5kZWZhdWx0X3RocmVzaG9s ZDsKKwkJCXZhbHVlID0gMTsKKwkJCXRvdWNoLT5kZWx0YV9zY3JvbGxfbGVmdCArPSBkZWx0YTsK KworCQkJaWYgKHRvdWNoLT5kZWx0YV9zY3JvbGxfbGVmdCA8PSAwKSB7CisJCQkJLyogbm8gc2Ny b2xsIG1vdmUsIGl0J3Mgbm90IG5lZWQgdG8gcmVwb3J0LiAqLworCQkJCXRvdWNoLT5kZWx0YV9z Y3JvbGxfbGVmdCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICh0b3VjaC0+ZGVsdGFf c2Nyb2xsX2xlZnQgPCB0aHJlc2hvbGQpIHsKKwkJCQkvKiBrZWVwIHNtYWxsIG1vdmVtZW50IGFs c28gY2FuIHdvcmsuICovCisJCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dF93aGVlbCwgUkVMX1dI RUVMLCB2YWx1ZSk7CisJCQkJaW5wdXRfc3luYyhpbnB1dF93aGVlbCk7CisKKwkJCQl0b3VjaC0+ ZGVsdGFfc2Nyb2xsX2xlZnQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAodG91Y2gt PmRlbHRhX3Njcm9sbF9sZWZ0CisJCQkJPiBwcmVmZXJlbmNlcy0+aHNjcm9sbC5mYXN0X3RocmVz aG9sZCkgeworCQkJCS8qIGZhc3Qgc2Nyb2xsLCByZXNldCB0aHJlc2hvbGQgdmFsdWUuICovCisJ CQkJdGhyZXNob2xkID0gMTsKKwkJCQl2YWx1ZSA9IDE2OworCQkJfSBlbHNlIHsKKwkJCQkvKiBt aWRkbGUgc2Nyb2xsIHNwZWVkLiAqLworCQkJCXRocmVzaG9sZCA9IDI7CisJCQkJdmFsdWUgPSAy OworCQkJfQorCisJCQl3aGlsZSAodG91Y2gtPmRlbHRhX3Njcm9sbF9sZWZ0ID49IHRocmVzaG9s ZCkgeworCQkJCWlucHV0X3JlcG9ydF9yZWwoaW5wdXRfd2hlZWwsCisJCQkJCQlSRUxfV0hFRUws CisJCQkJCQl2YWx1ZSoyL3RocmVzaG9sZCk7CisJCQkJaW5wdXRfc3luYyhpbnB1dF93aGVlbCk7 CisKKwkJCQl0b3VjaC0+ZGVsdGFfc2Nyb2xsX2xlZnQgLT0gdGhyZXNob2xkKnZhbHVlOworCQkJ fQorCQl9CisKKwkJREJHUFJJTlRLKCgiJXM6IHNjcm9sbCBsZWZ0LCBmaW5nZXI9JWRcbiIsCisJ CQkJCV9fZnVuY19fLCByZXBvcnRfZGF0YS0+dG91Y2hfZmluZ2VycykpOworCQlicmVhazsKKwlj YXNlIEdFU1RVUkVfU0NST0xMX1JJR0hUOgorCWNhc2UgR0VTVFVSRV8yRl9TQ1JPTExfUklHSFQ6 CisJCWRlbHRhID0gZ2VzdHVyZS0+cGFyYW0yOworCQlpZiAoMCA9PSB0b3VjaC0+aHNjcm9sbF9y aWdodCkgeworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dF9rYmQsIEtFWV9MRUZUU0hJRlQsIDAp OworCQkJaW5wdXRfc3luYyhpbnB1dF9rYmQpOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dF9r YmQsIEtFWV9MRUZUU0hJRlQsIDEpOworCQkJaW5wdXRfc3luYyhpbnB1dF9rYmQpOworCQkJdG91 Y2gtPmhzY3JvbGxfcmlnaHQgPSBkZWx0YTsKKwkJfSBlbHNlIHsKKwkJCXRocmVzaG9sZCA9IHBy ZWZlcmVuY2VzLT5oc2Nyb2xsLmRlZmF1bHRfdGhyZXNob2xkOworCQkJdmFsdWUgPSAxOworCQkJ dG91Y2gtPmRlbHRhX3Njcm9sbF9yaWdodCArPSBkZWx0YTsKKworCQkJaWYgKHRvdWNoLT5kZWx0 YV9zY3JvbGxfcmlnaHQgPD0gMCkgeworCQkJCS8qIG5vIHNjcm9sbCBtb3ZlLCBpdCdzIG5vdCBu ZWVkIHRvIHJlcG9ydC4gKi8KKwkJCQl0b3VjaC0+ZGVsdGFfc2Nyb2xsX3JpZ2h0ID0gMDsKKwkJ CQlicmVhazsKKwkJCX0KKworCQkJaWYgKHRvdWNoLT5kZWx0YV9zY3JvbGxfcmlnaHQgPCB0aHJl c2hvbGQpIHsKKwkJCQkvKiBrZWVwIHNtYWxsIG1vdmVtZW50IGFsc28gY2FuIHdvcmsuICovCisJ CQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dF93aGVlbCwKKwkJCQkJCVJFTF9XSEVFTCwKKwkJCQkJ CS12YWx1ZSk7CisJCQkJaW5wdXRfc3luYyhpbnB1dF93aGVlbCk7CisKKwkJCQl0b3VjaC0+ZGVs dGFfc2Nyb2xsX3JpZ2h0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHRvdWNoLT5k ZWx0YV9zY3JvbGxfcmlnaHQKKwkJCQk+IHByZWZlcmVuY2VzLT5oc2Nyb2xsLmZhc3RfdGhyZXNo b2xkKSB7CisJCQkJLyogZmFzdCBzY3JvbGwsIHJlc2V0IHRocmVzaG9sZCB2YWx1ZS4gKi8KKwkJ CQl0aHJlc2hvbGQgPSAxOworCQkJCXZhbHVlID0gMTY7CisJCQl9IGVsc2UgeworCQkJCS8qIG1p ZGRsZSBzY3JvbGwgc3BlZWQuICovCisJCQkJdGhyZXNob2xkID0gMjsKKwkJCQl2YWx1ZSA9IDI7 CisJCQl9CisKKwkJCXdoaWxlICh0b3VjaC0+ZGVsdGFfc2Nyb2xsX3JpZ2h0ID49IHRocmVzaG9s ZCkgeworCQkJCWlucHV0X3JlcG9ydF9yZWwoaW5wdXRfd2hlZWwsCisJCQkJCQlSRUxfV0hFRUws CisJCQkJCQktdmFsdWUqMi90aHJlc2hvbGQpOworCQkJCWlucHV0X3N5bmMoaW5wdXRfd2hlZWwp OworCisJCQkJdG91Y2gtPmRlbHRhX3Njcm9sbF9yaWdodCAtPSB0aHJlc2hvbGQqdmFsdWU7CisJ CQl9CisJCX0KKworCQlEQkdQUklOVEsoKCIlczogc2Nyb2xsIHJpZ2h0LCBmaW5nZXI9JWRcbiIs CisJCQkJCV9fZnVuY19fLCByZXBvcnRfZGF0YS0+dG91Y2hfZmluZ2VycykpOworCQlicmVhazsK KwljYXNlIEdFU1RVUkVfMkZfUk9UQVRFOgorCQlEQkdQUklOVEsoKCIlczogMiBmaW5nZXIgcm90 YXRlLlxuIiwgX19mdW5jX18pKTsKKwkJYnJlYWs7CisJY2FzZSBHRVNUVVJFXzJGX1BJTkNIOgor CQlEQkdQUklOVEsoKCIlczogMiBmaW5nZXIgcGluY2guXG4iLCBfX2Z1bmNfXykpOworCQlicmVh azsKKwljYXNlIEdFU1RVUkVfMkZfVEFQOgorCQkvKiAyLWZpbmdlciB0YXAsIGFjdGl2ZSBsaWtl IHJpZ2h0IGJ1dHRvbiBwcmVzcyBhbmQgcmVsYXNlLiAqLworCQlpZiAodG91Y2gtPnBsYXRmb3Jt X2RhdGEtPnVzZV9hYnNvbHV0ZV9tb2RlKSB7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBC VE5fVE9VQ0gsIDApOworCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1BSRVNTVVJFLCAw KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULCAwKTsKKwkJCWlucHV0X3Jl cG9ydF9rZXkoaW5wdXQsIEJUTl9SSUdIVCwgMCk7CisJCQlpbnB1dF9zeW5jKGlucHV0KTsKKwkJ fQorCisJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9SSUdIVCwgMSk7CisJCWlucHV0X3N5 bmMoaW5wdXQpOworCisJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9SSUdIVCwgMCk7CisJ CWlucHV0X3N5bmMoaW5wdXQpOworCisJCURCR1BSSU5USygoIiVzOiByZXBvcnQgMiBmaW5nZXJz IHRhcCwgXAorCQkJYWN0aXZlIGxpa2UgcmlnaHQgYnV0dG9uLlxuIiwJX19mdW5jX18pKTsKKwkJ YnJlYWs7CisJY2FzZSBHRVNUVVJFXzJGX0RSQUc6CisJCS8qIGZpcnN0IGZpbmdlciBjbGljayBh bmQgaG9sZCwKKwkJKiogYW5kIHNlY29uZCBmaW5nZXIgbW92aW5nIGZvciBkcmFnZ2luZy4gKi8K KwkJaWYgKHRvdWNoLT5nZXN0dXJlXzJGX2RyYWdfc3RhcnRlZCA9PSAwKSB7CisJCQl0b3VjaC0+ eHlfdG91Y2hzX2luY2x1ZGVkX2JpdHMgPSAweDAxOworCQkJdG91Y2gtPnByZXZfYWJzX3ggPSAt MTsKKwkJCXRvdWNoLT5wcmV2X2Fic195ID0gLTE7CisJCQljeWFwYV9jYWxjdWxhdGVfYWJzX3h5 KHRvdWNoLCByZXBvcnRfZGF0YSk7CisKKwkJCS8qIGZpcnN0bHksIG1vdmUgbW92ZSBjdXJzb3Ig dG8gdGhlIHRhcmdldCBmb3IgZHJhZy4gKi8KKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJU Tl9UT1VDSCwgMSk7CisJCQlpZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9hYnNvbHV0ZV9t b2RlKSB7CisJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1gsIHRvdWNoLT5hYnNfeCk7 CisJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1ksIHRvdWNoLT5hYnNfeSk7CisJCQkJ aW5wdXRfcmVwb3J0X2FicyhpbnB1dCwKKwkJCQkJCUFCU19QUkVTU1VSRSwKKwkJCQkJCXJlcG9y dF9kYXRhLT5hdmdfcHJlc3N1cmUpOworCQkJCWN5YXBhX3JlcG9ydF9maW5nZXJzKGlucHV0LCAx KTsKKwkJCX0KKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULCAwKTsKKwkJCWlu cHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9SSUdIVCwgMCk7CisJCQlpbnB1dF9zeW5jKGlucHV0 KTsKKworCQkJLyogc2Vjb25kLCBzdG9wIGN1cnNvciBvbiB0aGUgdGFyZ2V0IGZvciBkcmFnLiAq LworCQkJdG91Y2gtPnByZXZfYWJzX3ggPSAtMTsKKwkJCXRvdWNoLT5wcmV2X2Fic195ID0gLTE7 CisJCQlpZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9hYnNvbHV0ZV9tb2RlKSB7CisJCQkJ aW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAwKTsKKwkJCQlpbnB1dF9yZXBvcnRf YWJzKGlucHV0LCBBQlNfUFJFU1NVUkUsIDApOworCQkJCWlucHV0X3N5bmMoaW5wdXQpOworCQkJ fQorCisJCQkvKiB0aGlyZCwgc2VsZWN0IHRoZSB0YXJnZXQgZm9yIGRyYWcuICovCisJCQlpbnB1 dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fTEVGVCwgMSk7CisJCQlpbnB1dF9zeW5jKGlucHV0KTsK KworCQkJLyogZ28gdG8gc3RlcCBmb3VyLiAqLworCQkJdG91Y2gtPmdlc3R1cmVfMkZfZHJhZ19z dGFydGVkID0gMTsKKwkJfQorCisJCS8qIGZvdXJ0aCwgbW92ZSBjdXJzb3IgZm9yIGRyYWdnaW5n LiAqLworCQl0b3VjaC0+eHlfdG91Y2hzX2luY2x1ZGVkX2JpdHMgPSAweDAyOworCQljeWFwYV9j YWxjdWxhdGVfYWJzX3h5KHRvdWNoLCByZXBvcnRfZGF0YSk7CisKKwkJaWYgKHRvdWNoLT5wbGF0 Zm9ybV9kYXRhLT51c2VfYWJzb2x1dGVfbW9kZSkgeworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1 dCwgQlROX1RPVUNILCAxKTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19YLCB0b3Vj aC0+YWJzX3gpOworCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1ksIHRvdWNoLT5hYnNf eSk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LAorCQkJCQlBQlNfUFJFU1NVUkUsCisJCQkJ CXJlcG9ydF9kYXRhLT5hdmdfcHJlc3N1cmUpOworCQkJY3lhcGFfcmVwb3J0X2ZpbmdlcnMoaW5w dXQsIDEpOworCQl9IGVsc2UgeworCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dCwgUkVMX1gsIHJl cG9ydF9kYXRhLT5yZWxfZGVsdGFYKTsKKwkJCWlucHV0X3JlcG9ydF9yZWwoaW5wdXQsIFJFTF9Z LCByZXBvcnRfZGF0YS0+cmVsX2RlbHRhWSk7CisJCQlpbnB1dF9zeW5jKGlucHV0KTsKKwkJfQor CQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fTEVGVCwgMSk7CisJCWlucHV0X3N5bmMoaW5w dXQpOworCisJCURCR1BSSU5USygoIiVzOiByZXBvcnQgMiBmaW5nZXJzIGRyYWdcbiIsIF9fZnVu Y19fKSk7CisJCWJyZWFrOworCWNhc2UgR0VTVFVSRV9GTElDSzoKKwljYXNlIEdFU1RVUkVfMkZf RkxJQ0s6CisJY2FzZSBHRVNUVVJFXzNGX0ZMSUNLOgorCWNhc2UgR0VTVFVSRV80Rl9GTElDSzoK KwljYXNlIEdFU1RVUkVfNUZfRkxJQ0s6CisJCXRvdWNoLT54eV90b3VjaHNfaW5jbHVkZWRfYml0 cyA9IHJlcG9ydF9kYXRhLT50b3VjaF9maW5nZXJzOworCQlEQkdQUklOVEsoKCIlczogbm8gZmxp Y2sgZ2VzdHVyZSBzdXBwb3J0ZWQgeWV0LCAsIGZpbmdlcj0lZFxuIiwKKwkJCQkJX19mdW5jX18s IHJlcG9ydF9kYXRhLT50b3VjaF9maW5nZXJzKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURC R1BSSU5USygoIiVzOiBkZWZhdWx0LCB1bmtub3duIGdlc3R1cmUgZm9yIHJlcG9ydGluZy5cbiIs CisJCQkJCV9fZnVuY19fKSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBjeWFwYV9y ZWxfaW5wdXRfcmVwb3J0X2RhdGEoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gsCisJCQlzdHJ1Y3Qg Y3lhcGFfcmVwb3J0X2RhdGEgKnJlcG9ydF9kYXRhKQoreworCWludCBpOworCXN0cnVjdCBpbnB1 dF9kZXYgKmlucHV0ID0gdG91Y2gtPmlucHV0OworCisJLyogc3RlcCAxOiBwcm9jZXNzIGdlc3R1 cmVzIGZpcnN0bHkgaWYgdHJpZ2dlZC4gKi8KKwljeWFwYV9wcm9jZXNzX3ByZXZfZ2VzdHVyZV9y ZXBvcnQodG91Y2gsIHJlcG9ydF9kYXRhKTsKKwlpZiAocmVwb3J0X2RhdGEtPmdlc3R1cmVzX2Nv dW50ID4gMCkgeworCQlEQkdQUklOVEsoKCIlczogZG8gZ2VzdHVyZSByZXBvcnQsIGdlc3R1cmVz X2NvdW50ID0gJWRcbiIsCisJCQkJX19mdW5jX18sIHJlcG9ydF9kYXRhLT5nZXN0dXJlc19jb3Vu dCkpOworCQkvKiBnZXN0dXJlIHRyaWdnZWQgKi8KKwkJZm9yIChpID0gMDsgaSA8IHJlcG9ydF9k YXRhLT5nZXN0dXJlc19jb3VudDsgaSsrKSB7CisJCQljeWFwYV9nZXN0dXJlX3JlcG9ydCh0b3Vj aCwKKwkJCQkJcmVwb3J0X2RhdGEsCisJCQkJCSZyZXBvcnRfZGF0YS0+Z2VzdHVyZXNbaV0pOwor CQl9CisKKwkJLyogd2hlbiBnZXN0dXJlcyBhcmUgdHJpZ2dlZCwgY3Vyc29yIHNob3VsZCBub3Qg bW92ZS4gKi8KKwl9IGVsc2UgeworCQkvKiB3aGVuIG11bHRpLWZpbmdlcnMgdG91Y2hlZCwgY3Vy c291ciBzaG91bGQgYWxzbyBub3QgbW92ZS4gKi8KKwkJaWYgKHJlcG9ydF9kYXRhLT50b3VjaF9m aW5nZXJzID09IDEpIHsKKwkJCS8qIGFwcGx5IGN1cnNvciBtb3ZlbWVudCBmaWx0ZXJzIHRvCisJ CQkqKiBpbXByb3ZlIGN1cnNvciBwZXJmb3JtYW5jZS4gKi8KKwkJCWN5YXBhX2ZpbHRlcl9jdXJz b3JfbW92ZW1lbnQodG91Y2gsIHJlcG9ydF9kYXRhKTsKKworCQkJLyogUmVwb3J0IHRoZSBkZWx0 YXMgKi8KKwkJCWlucHV0X3JlcG9ydF9yZWwoaW5wdXQsIFJFTF9YLCByZXBvcnRfZGF0YS0+cmVs X2RlbHRhWCk7CisJCQlpbnB1dF9yZXBvcnRfcmVsKGlucHV0LCBSRUxfWSwgcmVwb3J0X2RhdGEt PnJlbF9kZWx0YVkpOworCQl9IGVsc2UgeworCQkJY3lhcGFfcmVzZXRfY3Vyc29yX2ZpbHRlcnNf ZGF0YSh0b3VjaCk7CisJCX0KKworCQkvKiBSZXBvcnQgdGhlIGJ1dHRvbiBldmVudCAqLworCQlp bnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fTEVGVCwKKwkJCQkocmVwb3J0X2RhdGEtPmJ1dHRv biAmIDB4MDEpKTsKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1JJR0hULAorCQkJCShy ZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgwMikpOworCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBC VE5fTUlERExFLAorCQkJCShyZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgwNCkpOworCQlpbnB1dF9z eW5jKGlucHV0KTsKKwl9CisKKwlEQkdQUklOVEsoKCIlczogZGVsdGF4ID0gJWRcbiIsIF9fZnVu Y19fLCByZXBvcnRfZGF0YS0+cmVsX2RlbHRhWCkpOworCURCR1BSSU5USygoIiVzOiBkZWx0YXkg PSAlZFxuIiwgX19mdW5jX18sIHJlcG9ydF9kYXRhLT5yZWxfZGVsdGFZKSk7CisJREJHUFJJTlRL KCgiJXM6IGxlZnRfYnRuID0gJWRcbiIsCisJCV9fZnVuY19fLCByZXBvcnRfZGF0YS0+YnV0dG9u ICYgMHgwMSkpOworCURCR1BSSU5USygoIiVzOiByaWdodF9idG4gPSAlZFxuIiwKKwkJX19mdW5j X18sIHJlcG9ydF9kYXRhLT5idXR0b24gJiAweDAyKSk7CisJREJHUFJJTlRLKCgiJXM6IG1pZGRs ZV9idG4gPSAlZFxuIiwKKwkJX19mdW5jX18sIHJlcG9ydF9kYXRhLT5idXR0b24gJiAweDA0KSk7 CisKKwkvKiBzdG9yZSBjdXJyZW50IGFjdGl2ZSBnZXN0dXJlcyBhcnJheSBpbnRvCisJKiogcHJl diBhY3RpdmUgZ2VzdHVyZSBhcnJheS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZJTkdFUlM7 IGkrKykKKwkJdG91Y2gtPnByZXZfYWN0aXZlX2dlc3R1cmVzW2ldID0gdG91Y2gtPmN1cl9hY3Rp dmVfZ2VzdHVyZXNbaV07CisJdG91Y2gtPnByZXZfdG91Y2hfZmluZ2VycyA9IHJlcG9ydF9kYXRh LT50b3VjaF9maW5nZXJzOworCisJcmV0dXJuIHJlcG9ydF9kYXRhLT5nZXN0dXJlc19jb3VudCB8 IHJlcG9ydF9kYXRhLT5yZWxfZGVsdGFYCisJCQl8cmVwb3J0X2RhdGEtPnJlbF9kZWx0YVkgfCBy ZXBvcnRfZGF0YS0+YnV0dG9uOworfQorCitzdGF0aWMgaW50IGN5YXBhX2Fic19pbnB1dF9yZXBv cnRfZGF0YShzdHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCwKKwkJCXN0cnVjdCBjeWFwYV9yZXBvcnRf ZGF0YSAqcmVwb3J0X2RhdGEpCit7CisJaW50IGk7CisJaW50IGhhdmVfZGF0YSA9IDA7CisJc3Ry dWN0IGlucHV0X2RldiAqaW5wdXQgPSB0b3VjaC0+aW5wdXQ7CisKKwlEQkdQUklOVEsoKCIlczog Li4uXG4iLCBfX2Z1bmNfXykpOworCisJY3lhcGFfcHJvY2Vzc19wcmV2X2dlc3R1cmVfcmVwb3J0 KHRvdWNoLCByZXBvcnRfZGF0YSk7CisJaWYgKHJlcG9ydF9kYXRhLT5nZXN0dXJlc19jb3VudCA+ IDApIHsKKwkJREJHUFJJTlRLKCgiJXM6IGRvIGdlc3R1cmUgcmVwb3J0LCBnZXN0dXJlc19jb3Vu dCA9ICVkXG4iLAorCQkJX19mdW5jX18sIHJlcG9ydF9kYXRhLT5nZXN0dXJlc19jb3VudCkpOwor CQkvKiBnZXN0dXJlIHRyaWdnZWQgKi8KKwkJZm9yIChpID0gMDsgaSA8IHJlcG9ydF9kYXRhLT5n ZXN0dXJlc19jb3VudDsgaSsrKSB7CisJCQljeWFwYV9nZXN0dXJlX3JlcG9ydCh0b3VjaCwgcmVw b3J0X2RhdGEsCisJCQkJJnJlcG9ydF9kYXRhLT5nZXN0dXJlc1tpXSk7CisJCX0KKwl9IGVsc2Ug aWYgKHJlcG9ydF9kYXRhLT50b3VjaF9maW5nZXJzKSB7CisJCS8qIG5vIGdlc3R1cmUgdHJpZ2dl ZCwgcmVwb3J0IHRvdWNocyBtb3ZlIGRhdGEuICovCisJCWlmIChyZXBvcnRfZGF0YS0+dG91Y2hf ZmluZ2VycyA+IDEpIHsKKwkJCURCR1BSSU5USygoIiVzOiBtb3JlIHRoZW4gMSBmaW5nZXIgdG91 Y2gsICBcCisJCQkJdG91Y2hfZmluZ2VycyA9ICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXBvcnRf ZGF0YS0+dG91Y2hfZmluZ2VycykpOworCQkJLyoKKwkJCSoqIHR3byBhbmQgbXVjaCBtb3JlIGZp bmdlciBvbiB0cmFja3BhZCBhcmUgdXNlZCBmb3IKKwkJCSoqIGdlc3R1cmUgb25seSwgc28gZXZl biBubyBnZXN0dXJlIGFyZSB0cmlnZ2VkLAorCQkJKiogZG8gbm90IG1ha2UgY3Vyc29yIG1vdmUg YWxzby4KKwkJCSoqIEhlcmUsIG11c3Qga2VlcCBvbiByZXBvcnQgZmluZ2VyIHRvdWNoZWQsIG90 aGVyd2lzZSwKKwkJCSoqICB3aGVuIG11bHRpLWZpbmdlciB0b3VjaCBub3QgaW4gc2FtZSB0aW1l IHdpbGwKKwkJCSoqIHRyaWlnZWQgY2xpa2MuCisJCQkqLworCQkJaW5wdXRfcmVwb3J0X2tleShp bnB1dCwgQlROX1RPVUNILCAxKTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19QUkVT U1VSRSwKKwkJCQkJcmVwb3J0X2RhdGEtPmF2Z19wcmVzc3VyZSk7CisJCQlpbnB1dF9yZXBvcnRf YWJzKGlucHV0LCBBQlNfVE9PTF9XSURUSCwKKwkJCQkJQ1lBUEFfVE9PTF9XSURUSCk7CisJCQkj aWYgR0VTVFVSRV9NVUxUSV9UT1VDSF9PTkVfQ0xJQ0sKKwkJCWN5YXBhX3JlcG9ydF9maW5nZXJz KGlucHV0LCByZXBvcnRfZGF0YS0+dG91Y2hfZmluZ2Vycyk7CisJCQkjZWxzZQorCQkJY3lhcGFf cmVwb3J0X2ZpbmdlcnMoaW5wdXQsIDEpOworCQkJI2VuZGlmCisKKwkJCXRvdWNoLT5wcmV2X2Fi c194ID0gLTE7CisJCQl0b3VjaC0+cHJldl9hYnNfeSA9IC0xOworCisJCQlpbnB1dF9yZXBvcnRf a2V5KGlucHV0LCBCVE5fTEVGVCwKKwkJCQkJcmVwb3J0X2RhdGEtPmJ1dHRvbiAmIDB4MDEpOwor CQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1JJR0hULAorCQkJCQlyZXBvcnRfZGF0YS0+ YnV0dG9uICYgMHgwMik7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fTUlERExFLAor CQkJCQlyZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgwNCk7CisKKwkJCWlucHV0X3N5bmMoaW5wdXQp OworCQl9IGVsc2UgeworCQkJREJHUFJJTlRLKCgiJXM6IDEgZmluZ2VyIHRvdWNoLCBtYWtlIGN1 cnNvciBtb3ZlXG4iLAorCQkJCV9fZnVuY19fKSk7CisJCQkvKiBhdm9pZCBjdXJzb3IganVtcCwg d2hlbiB0b3VjaGVkIGZpbmdlciBjaGFuZ2VkCisJCQkqKiBmcm9tIG11bHRpLXRvdWNoIHRvIG9u ZSBmaW5nZXIgdG91Y2guICovCisJCQlpZiAodG91Y2gtPnByZXZfdG91Y2hfZmluZ2VycyA+IDEp IHsKKwkJCQkvKiBjaGVhdCBzeXN0ZW0gb3IgYXBwbGljYXRpb24gdGhhdCBubyBmaW5nZXIKKwkJ CQkqKiBoYXMgdG91Y2hlZCB0byBtYXkgdGhlbQorCQkJCSoqIGxvY2sgdGhlIGN1cnNvciB3aGVu IGxhdGVyIG9ubHkgb25lIGZpbmdlcgorCQkJCSoqIHRvdWNoZWQgb24gdHJhY2twYWQuICovCisJ CQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAwKTsKKwkJCQlpbnB1dF9yZXBv cnRfYWJzKGlucHV0LCBBQlNfUFJFU1NVUkUsIDApOworCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5w dXQsIEFCU19UT09MX1dJRFRILCAwKTsKKwkJCQljeWFwYV9yZXBvcnRfZmluZ2VycyhpbnB1dCwg MCk7CisJCQkJdG91Y2gtPnByZXZfYWJzX3ggPSAtMTsKKwkJCQl0b3VjaC0+cHJldl9hYnNfeSA9 IC0xOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULAorCQkJCQlyZXBvcnRf ZGF0YS0+YnV0dG9uICYgMHgwMSk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1JJ R0hULAorCQkJCQlyZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgwMik7CisJCQkJaW5wdXRfcmVwb3J0 X2tleShpbnB1dCwgQlROX01JRERMRSwKKwkJCQkJcmVwb3J0X2RhdGEtPmJ1dHRvbiAmIDB4MDQp OworCQkJCWlucHV0X3N5bmMoaW5wdXQpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBvbmx5IDEgZmlu Z2VyIGNhbiBtYWtlIGN1cnNvciBtb3ZlLiAqLworCQkJCXRvdWNoLT54eV90b3VjaHNfaW5jbHVk ZWRfYml0cyA9IDB4MDE7CisJCQkJY3lhcGFfY2FsY3VsYXRlX2Fic194eSh0b3VjaCwgcmVwb3J0 X2RhdGEpOworCisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAxKTsKKwkJ CQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfWCwgdG91Y2gtPmFic194KTsKKwkJCQlpbnB1 dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfWSwgdG91Y2gtPmFic195KTsKKwkJCQlpbnB1dF9yZXBv cnRfYWJzKGlucHV0LAorCQkJCQkJQUJTX1BSRVNTVVJFLAorCQkJCQkJcmVwb3J0X2RhdGEtPmF2 Z19wcmVzc3VyZSk7CisJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1RPT0xfV0lEVEgs CisJCQkJCQlDWUFQQV9UT09MX1dJRFRIKTsKKworCQkJCWN5YXBhX3JlcG9ydF9maW5nZXJzKGlu cHV0LAorCQkJCQkJcmVwb3J0X2RhdGEtPnRvdWNoX2ZpbmdlcnMpOworCisJCQkJaW5wdXRfcmVw b3J0X2tleShpbnB1dCwgQlROX0xFRlQsCisJCQkJCQlyZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgw MSk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1JJR0hULAorCQkJCQkJcmVwb3J0 X2RhdGEtPmJ1dHRvbiAmIDB4MDIpOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9N SURETEUsCisJCQkJCQlyZXBvcnRfZGF0YS0+YnV0dG9uICYgMHgwNCk7CisKKwkJCQlpbnB1dF9z eW5jKGlucHV0KTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSoqIDEuIHR3byBvciBt b3JlIGZpbmdlcnMgb24gdHJhY2twYWQgYXJlIHVzZWQgZm9yIGdlc3R1cmUgb25seSwKKwkJKiog c28gZXZlbiBubyBnZXN0dXJlIGFyZSB0cmlnZ2VkLCBkbyBub3QgbWFrZSBjdXJzb3IgbW92ZSBh bHNvLgorCQkqKiAyLiBubyBnZXN0dXJlIGFuZCBubyB0b3VjaCBvbiB0cmFja3BhZC4KKwkJKi8K KwkJREJHUFJJTlRLKCgiJXM6IG5vIGZpbmdlciB0b3VjaC5cbiIsIF9fZnVuY19fKSk7CisKKwkJ aW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAwKTsKKwkJaW5wdXRfcmVwb3J0X2Fi cyhpbnB1dCwgQUJTX1BSRVNTVVJFLCAwKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJT X1RPT0xfV0lEVEgsIDApOworCQljeWFwYV9yZXBvcnRfZmluZ2VycyhpbnB1dCwgMCk7CisKKwkJ dG91Y2gtPnByZXZfYWJzX3ggPSAtMTsKKwkJdG91Y2gtPnByZXZfYWJzX3kgPSAtMTsKKworCQlp bnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fTEVGVCwgcmVwb3J0X2RhdGEtPmJ1dHRvbiAmIDB4 MDEpOworCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fUklHSFQsIHJlcG9ydF9kYXRhLT5i dXR0b24gJiAweDAyKTsKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX01JRERMRSwgcmVw b3J0X2RhdGEtPmJ1dHRvbiAmIDB4MDQpOworCisJCWlucHV0X3N5bmMoaW5wdXQpOworCX0KKwor CS8qIHN0b3JlIGN1cnJlbnQgYWN0aXZlIGdlc3R1cmVzIGFycmF5IGludG8KKwkqKiBwcmV2IGFj dGl2ZSBnZXN0dXJlIGFycmF5LiAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfRklOR0VSUzsgaSsr KQorCQl0b3VjaC0+cHJldl9hY3RpdmVfZ2VzdHVyZXNbaV0gPSB0b3VjaC0+Y3VyX2FjdGl2ZV9n ZXN0dXJlc1tpXTsKKwl0b3VjaC0+cHJldl90b3VjaF9maW5nZXJzID0gcmVwb3J0X2RhdGEtPnRv dWNoX2ZpbmdlcnM7CisKKwloYXZlX2RhdGEgPSAocmVwb3J0X2RhdGEtPmdlc3R1cmVzX2NvdW50 ICsKKwkJCXJlcG9ydF9kYXRhLT50b3VjaF9maW5nZXJzICsgcmVwb3J0X2RhdGEtPmJ1dHRvbik7 CisKKwlEQkdQUklOVEsoKCIlczogZ2VzdHVyZSBjb3VudCA9ICVkLCB0b3VjaCBmaW5nZXIgPSVk LCAgXAorCQlidXR0b24gPSAweCUwMnhcbiIsIF9fZnVuY19fLCByZXBvcnRfZGF0YS0+Z2VzdHVy ZXNfY291bnQsCisJCXJlcG9ydF9kYXRhLT50b3VjaF9maW5nZXJzLCByZXBvcnRfZGF0YS0+YnV0 dG9uKSk7CisJcmV0dXJuIGhhdmVfZGF0YTsKK30KKworc3RhdGljIGJvb2wgY3lhcGFfaTJjX2dl dF9pbnB1dChzdHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0X3Jl YWRfc2l6ZSA9IC0xOworCWludCByZWFkX2xlbmd0aCA9IDA7CisJdW5pb24gY3lhcGFfcmVnX2Rh dGEgcmVnX2RhdGE7CisJc3RydWN0IGN5YXBhX3JlZ19kYXRhX2dlbjEgKmdlbjFfZGF0YTsKKwlz dHJ1Y3QgY3lhcGFfcmVnX2RhdGFfZ2VuMiAqZ2VuMl9kYXRhOworCXN0cnVjdCBjeWFwYV9yZXBv cnRfZGF0YSByZXBvcnRfZGF0YTsKKworCURCR1BSSU5USygoIiVzOiBzdGFydCAuLi5cbiIsIF9f ZnVuY19fKSk7CisKKwltZW1zZXQoJnJlZ19kYXRhLCAwLCBzaXplb2YodW5pb24gY3lhcGFfcmVn X2RhdGEpKTsKKworCS8qIHJlYWQgcmVnaXN0ZXIgZGF0YSBmcm9tIHRyYWNrcGFkLiAqLworCWdl bjFfZGF0YSA9ICZyZWdfZGF0YS5nZW4xX2RhdGE7CisJZ2VuMl9kYXRhID0gJnJlZ19kYXRhLmdl bjJfZGF0YTsKKwlyZWFkX2xlbmd0aCA9IENZQVBBX1JFTF9SRUdfREFUQV9TSVpFOworCWlmICh0 b3VjaC0+cGxhdGZvcm1fZGF0YS0+Z2VuID09IENZQVBBX0dFTjEpCisJCXJlYWRfbGVuZ3RoID0g KGludClzaXplb2Yoc3RydWN0IGN5YXBhX3JlZ19kYXRhX2dlbjEpOworCWVsc2UKKwkJcmVhZF9s ZW5ndGggPSAoaW50KXNpemVvZihzdHJ1Y3QgY3lhcGFfcmVnX2RhdGFfZ2VuMik7CisJREJHUFJJ TlRLKCgiJXM6IHJlYWQgZ2VuJWQgZGF0YSwgcmVhZCBsZW5ndGg9JWRcbiIsIF9fZnVuY19fLAor CQkJKCh0b3VjaC0+cGxhdGZvcm1fZGF0YS0+Z2VuID09IENZQVBBX0dFTjEpID8gMSA6IDIpLAor CQkJcmVhZF9sZW5ndGgpKTsKKwlyZXRfcmVhZF9zaXplID0gY3lhcGFfaTJjX3JlZ19yZWFkX2Js b2NrKHRvdWNoLT5jbGllbnQsCisJCQkJCURBVEFfUkVHX1NUQVJUX09GRlNFVCwKKwkJCQkJcmVh ZF9sZW5ndGgsCisJCQkJCSh1OCAqKSZyZWdfZGF0YSk7CisJaWYgKHJldF9yZWFkX3NpemUgPCAw KSB7CisJCURCR1BSSU5USygoIiVzOiBJMkMgcmVhZCBkYXRhIGZyb20gdHJhY2twYWQgZXJyb3Ig PSAlZFxuIiwKKwkJCQkJX19mdW5jX18sIHJldF9yZWFkX3NpemUpKTsKKwkJcmV0dXJuIDA7CisJ fQorCisJaWYgKGN5YXBhX3ZlcmlmeV9kYXRhX2RldmljZSh0b3VjaCwgJnJlZ19kYXRhKSkgewor CQlEQkdQUklOVEsoKCIlczogdmVyaWZ5IGRhdGEgZGV2aWNlIGZhaWxlZCwgIFwKKwkJCWludmFs aWQgZGF0YSwgc2tpcC5cbiIsIF9fZnVuY19fKSk7CisJCXJldHVybiAwOworCX0KKworCS8qIHBy b2Nlc3MgYW5kIHBhcnNlIHJhdyBkYXRhIHRoYXQgcmVhZCBmcm9tIFRyYWNrcGFkLiAqLworCW1l bXNldCgmcmVwb3J0X2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgY3lhcGFfcmVwb3J0X2RhdGEpKTsK Kwl0b3VjaC0+eHlfdG91Y2hzX2luY2x1ZGVkX2JpdHMgPSAwOworCS8qIGluaXRpYWxpemUgY3Vy cmVudCBhY3RpdmUgZ2VzdHVyZXMgYXJyYXkuICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9GSU5H RVJTOyBpKyspCisJCXRvdWNoLT5jdXJfYWN0aXZlX2dlc3R1cmVzW2ldID0gMDsKKworCWlmICh0 b3VjaC0+cGxhdGZvcm1fZGF0YS0+Z2VuID09IENZQVBBX0dFTjEpCisJCWN5YXBhX3BhcnNlX2dl bjFfZGF0YSh0b3VjaCwgZ2VuMV9kYXRhLCAmcmVwb3J0X2RhdGEpOworCWVsc2UKKwkJY3lhcGFf cGFyc2VfZ2VuMl9kYXRhKHRvdWNoLCBnZW4yX2RhdGEsICZyZXBvcnRfZGF0YSk7CisKKwkvKiBy ZXBvcnQgZGF0YSB0byBpbnB1dCBzdWJzeXN0ZW0uICovCisJaWYgKHRvdWNoLT5wbGF0Zm9ybV9k YXRhLT51c2VfYWJzb2x1dGVfbW9kZSA9PSBmYWxzZSkKKwkJcmV0dXJuIGN5YXBhX3JlbF9pbnB1 dF9yZXBvcnRfZGF0YSh0b3VjaCwgJnJlcG9ydF9kYXRhKTsKKwllbHNlCisJCXJldHVybiBjeWFw YV9hYnNfaW5wdXRfcmVwb3J0X2RhdGEodG91Y2gsICZyZXBvcnRfZGF0YSk7Cit9CisKK3N0YXRp YyB2b2lkIGN5YXBhX2kyY19yZXNjaGVkdWxlX3dvcmsoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gs CisJCXVuc2lnbmVkIGxvbmcgZGVsYXkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNw aW5fbG9ja19pcnFzYXZlKCZ0b3VjaC0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBJZiB3b3Jr IGlzIGFscmVhZHkgc2NoZWR1bGVkIHRoZW4gc3Vic2VxdWVudCBzY2hlZHVsZXMgd2lsbCBub3QK KwkgKiBjaGFuZ2UgdGhlIHNjaGVkdWxlZCB0aW1lIHRoYXQncyB3aHkgd2UgaGF2ZSB0byBjYW5j ZWwgaXQgZmlyc3QuCisJICovCisJX19jYW5jZWxfZGVsYXllZF93b3JrKCZ0b3VjaC0+ZHdvcmsp OworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdG91Y2gtPmR3b3JrLCBkZWxheSk7CisKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZ0b3VjaC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaXJx cmV0dXJuX3QgY3lhcGFfaTJjX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0 IGN5YXBhX2kyYyAqdG91Y2ggPSBkZXZfaWQ7CisKKwlEQkdQUklOVEsoKCIlczogdHJhY2twYWQg aW50ZXJydXB0IGNhcHR1cmVkLiAgXAorCQlyZXBvcnRfcmF0ZT0lZDsgcmVhZF9wZW5kaW5nPSVk XG4iLAorCQlfX2Z1bmNfXywgdG91Y2gtPnBsYXRmb3JtX2RhdGEtPnJlcG9ydF9yYXRlLAorCQl0 b3VjaC0+cmVhZF9wZW5kaW5nKSk7CisKKwlpZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPnJlcG9y dF9yYXRlID09IDApIHsKKwkJLyoKKwkJKiogbm8gbGltaXRhdGlvaW4gZm9yIGRhdGEgcmVwb3J0 aW5nLgorCQkqKiB0aGUgcmVwb3J0IHJhdGUgZGVwZW5kaW5nIG9uIHRyYWNrcGFkIG1heCByZXBv cnQgcmF0ZS4KKwkJKiogdGhpcyBpcyB0aGUgZGVmYXVsdCByZXBvcnQgbW9kZS4KKwkJKi8KKwkJ Y3lhcGFfaTJjX3Jlc2NoZWR1bGVfd29yayh0b3VjaCwgMCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJ Kiogd2hlbiB1c2UgbGltaXRlZCByZXBvcnQgcmF0ZSwgc29tZSBpbXBvcnRhbnQgZGF0YSBwYWNr YWdlcworCQkqKiBtYXkgYmUgbG9zdC4gU3VjaCBhcyBhIHRhcCBvciBkb3VibGUgdGFwIGdlc3R1 cmUgbWF5IGJlIGxvc3QuCisJCSoqIFNvIGZpcm13YXJlIG5lZWQgdG8ga2VlcCB0aGlzIGRhdGEg dW50aWwgdGhlcmUgZGF0YSBpcyByZWFkLgorCQkqLworCQlpZiAoIXRvdWNoLT5yZWFkX3BlbmRp bmcpIHsKKwkJCXRvdWNoLT5yZWFkX3BlbmRpbmcgPSAxOworCQkJY3lhcGFfaTJjX3Jlc2NoZWR1 bGVfd29yayh0b3VjaCwgdG91Y2gtPnNjYW5fbXMpOworCQl9CisJfQorCisJcmV0dXJuIElSUV9I QU5ETEVEOworfQorCisvKiBDb250cm9sIHRoZSBEZXZpY2UgcG9sbGluZyByYXRlIC8gV29yayBI YW5kbGVyIHNsZWVwIHRpbWUgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGN5YXBhX2kyY19hZGp1 c3RfZGVsYXkoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gsCisJCQlib29sIGhhdmVfZGF0YSkKK3sK Kwl1bnNpZ25lZCBsb25nIGRlbGF5LCBub2RhdGFfY291bnRfdGhyZXM7CisKKwlpZiAodG91Y2gt PnBsYXRmb3JtX2RhdGEtPnVzZV9wb2xsaW5nX21vZGUpIHsKKwkJZGVsYXkgPSB0b3VjaC0+cGxh dGZvcm1fZGF0YS0+cG9sbGluZ19pbnRlcnZhbF90aW1lX2FjdGl2ZTsKKwkJaWYgKGhhdmVfZGF0 YSkgeworCQkJdG91Y2gtPm5vX2RhdGFfY291bnQgPSAwOworCQl9IGVsc2UgeworCQkJbm9kYXRh X2NvdW50X3RocmVzCisJCQkJPSBDWUFQQV9OT19EQVRBX1RIUkVTIC8gdG91Y2gtPnNjYW5fbXM7 CisJCQlpZiAodG91Y2gtPm5vX2RhdGFfY291bnQgPCBub2RhdGFfY291bnRfdGhyZXMpCisJCQkJ dG91Y2gtPm5vX2RhdGFfY291bnQrKzsKKwkJCWVsc2UKKwkJCQlkZWxheSA9IENZQVBBX05PX0RB VEFfU0xFRVBfTVNFQ1M7CisJCX0KKwkJcmV0dXJuIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXkpOwor CX0gZWxzZSB7CisJCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhDWUFQQV9USFJFQURfSVJRX1NM RUVQX01TRUNTKTsKKwkJcmV0dXJuIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoZGVsYXkpOworCX0K K30KKworLyogV29yayBIYW5kbGVyICovCitzdGF0aWMgdm9pZCBjeWFwYV9pMmNfd29ya19oYW5k bGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlib29sIGhhdmVfZGF0YTsKKwlzdHJ1 Y3QgY3lhcGFfaTJjICp0b3VjaAorCQk9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3lhcGFf aTJjLCBkd29yay53b3JrKTsKKwl1bnNpZ25lZCBsb25nIGRlbGF5OworCisJREJHUFJJTlRLKCgi JXM6IHN0YXJ0IC4uLlxuIiwgX19mdW5jX18pKTsKKworCWhhdmVfZGF0YSA9IGN5YXBhX2kyY19n ZXRfaW5wdXQodG91Y2gpOworCisJLyoKKwkgKiBXaGlsZSBpbnRlcnJ1cHQgZHJpdmVuLCB0aGVy ZSBpcyBubyByZWFsIG5lZWQgdG8gcG9sbCB0aGUgZGV2aWNlLgorCSAqIEJ1dCB0b3VjaHBhZHMg YXJlIHZlcnkgc2Vuc2l0aXZlLCBzbyB0aGVyZSBjb3VsZCBiZSBlcnJvcnMKKwkgKiByZWxhdGVk IHRvIHBoeXNpY2FsIGVudmlyb25tZW50IGFuZCB0aGUgYXR0ZW50aW9uIGxpbmUgaXNuJ3QKKwkg KiBuZWNjZXNhcmlseSBhc3NlcnRlZC4gSW4gc3VjaCBjYXNlIHdlIGNhbiBsb3NlIHRoZSB0b3Vj aHBhZC4KKwkgKiBXZSBwb2xsIHRoZSBkZXZpY2Ugb25jZSBpbiBDWUFQQV9USFJFQURfSVJRX1NM RUVQX1NFQ1MgYW5kCisJICogaWYgZXJyb3IgaXMgZGV0ZWN0ZWQsIHdlIHRyeSB0byByZXNldCBh bmQgcmVjb25maWd1cmUgdGhlIHRvdWNocGFkLgorCSAqLworCWRlbGF5ID0gY3lhcGFfaTJjX2Fk anVzdF9kZWxheSh0b3VjaCwgaGF2ZV9kYXRhKTsKKwkvKiBpZiBuZWVkcyBmaXhlZCBpbnRlcnZh bCB0aW1lIHRyYWNrcGFkIHNjYW4sIG9wZW4gaXQuCisJY3lhcGFfaTJjX3Jlc2NoZWR1bGVfd29y ayh0b3VjaCwgZGVsYXkpOworCSovCisKKwl0b3VjaC0+cmVhZF9wZW5kaW5nID0gMDsKKworCURC R1BSSU5USygoIiVzOiBkb25lIC4uLlxuIiwgX19mdW5jX18pKTsKK30KKworc3RhdGljIGludCBj eWFwYV9pMmNfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgY3lhcGFf aTJjICp0b3VjaCA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKKwlpbnQgcmV0dmFsOworCisJ aWYgKDAgPT0gdG91Y2gtPm9wZW5fY291bnQpIHsKKwkJLyogU2luY2UgaW5wdXRfZGV2IG1vdXNl LCB3aGVlbCwgYW5kIGtiZCB3aWxsIGFsbCB1c2Ugc2FtZSBvcGVuCisJCSoqIGFuZCBjbG9zZSBy b3V0aW5lcy4gQnV0IGluZGVlZCwgcmVzZXQgY29uZmlnIHRvIHRyYWNrcGFkCisJCSoqIG9uY2Ug aXMgZW5vdWdodCxTbyB3aGVuIHRyYWNrcGFkIGlzIG9wZW4gZm9yIHRoZSBmaXJzdCB0aW1lLAor CQkqKiByZXNldCBpdC4gZm9yIG90aGVyIHRpbWUgbm90IGRvIGl0LgorCQkqLworCQlyZXR2YWwg PSBjeWFwYV9pMmNfcmVzZXRfY29uZmlnKHRvdWNoKTsKKwkJaWYgKHJldHZhbCkgeworCQkJREJH UFJJTlRLKCgiJXM6IGZhaWxlZCB0byByZXNldCBpMmMgdHJhY2twYWQuICBcCisJCQkJZXJyb3Ig PSAlZFxuIiwgX19mdW5jX18sIHJldHZhbCkpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0K Kwl0b3VjaC0+b3Blbl9jb3VudCsrOworCisJaWYgKHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT51c2Vf cG9sbGluZ19tb2RlKSB7CisJCS8qCisJCSoqIGZvciB0aGUgZmlyc3RseSB0aW1lLCBpdCBpcyBz ZXQgdG8gQ1lBUEFfTk9fREFUQV9TTEVFUF9NU0VDUywKKwkJKiogd2hlbiBkYXRhIGlzIHJlYWQg ZnJvbSB0cmFja3BhZCwgdGhlIHJlYWQgc3BlZWQgd2lsbAorCQkqKiBiZSBwdWxsIHVwLgorCQkq LworCQljeWFwYV9pMmNfcmVzY2hlZHVsZV93b3JrKHRvdWNoLAorCQkJCW1zZWNzX3RvX2ppZmZp ZXMoQ1lBUEFfTk9fREFUQV9TTEVFUF9NU0VDUykpOworCX0KKworCURCR1BSSU5USygoIiVzOiB0 b3VjaC0+b3Blbl9jb3VudCA9ICVkIC4uLlxuIiwKKwkJCV9fZnVuY19fLCB0b3VjaC0+b3Blbl9j b3VudCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGN5YXBhX2kyY19jbG9zZShz dHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCA9IGlu cHV0X2dldF9kcnZkYXRhKGlucHV0KTsKKworCXRvdWNoLT5vcGVuX2NvdW50LS07CisKKwlpZiAo MCA9PSB0b3VjaC0+b3Blbl9jb3VudCkgeworCQkvKiBTaW5jZSBpbnB1dF9kZXYgbW91c2UsIHdo ZWVsLCBhbmQga2JkIHdpbGwgYWxsIHVzZSBzYW1lIG9wZW4KKwkJKiogYW5kIGNsb3NlIHJvdXRp bmVzLgorCQkqKiBzbyB3aGVuIGFsbCBtb3VzZSwgd2hlZWwgYW5kIGtiZCBpbnB1dF9kZXYgaXMg Y2xvc2VkLAorCQkqKiB0aGVuIGNhbmNlbCB0aGUgZGVsYXllZCB3b3JrIHJvdXRpbmUuCisJCSov CisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdG91Y2gtPmR3b3JrKTsKKwl9CisKKwlEQkdQ UklOVEsoKCIlczogdG91Y2gtPm9wZW5fY291bnQ9JWRcbiIsIF9fZnVuY19fLCB0b3VjaC0+b3Bl bl9jb3VudCkpOworfQorCitzdGF0aWMgc3RydWN0IGN5YXBhX2kyYyAqY3lhcGFfaTJjX3RvdWNo X2NyZWF0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBjeWFwYV9pMmMg KnRvdWNoOworCisJdG91Y2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3lhcGFfaTJjKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCF0b3VjaCkKKwkJcmV0dXJuIE5VTEw7CisKKwlEQkdQUklOVEsoKCIl czogY2xpZW50PTB4JXAsIGFsbG9jYXRlIG1lbW9yeSBmb3IgdG91Y2ggc3VjY2Vzc2Z1bGx5Llxu IiwKKwkJCQkJX19mdW5jX18sIGNsaWVudCkpOworCisJdG91Y2gtPnBsYXRmb3JtX2RhdGEgPSAm Y3lhcGFfaTJjX3BsYXRmb3JtX2RhdGE7CisJaWYgKGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEp IHsKKwkJREJHUFJJTlRLKCgiJXM6IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEgaXMgc2V0LCBj b3B5IGl0LlxuIiwKKwkJCQkJX19mdW5jX18pKTsKKwkJKnRvdWNoLT5wbGF0Zm9ybV9kYXRhCisJ CQk9ICooc3RydWN0IGN5YXBhX3BsYXRmb3JtX2RhdGEgKikKKwkJCQljbGllbnQtPmRldi5wbGF0 Zm9ybV9kYXRhOworCX0KKworCWN5YXBhX3ByaW50X3BhbHRmb3JtX2RhdGEoX19mdW5jX18sIHRv dWNoLT5wbGF0Zm9ybV9kYXRhKTsKKworCWlmICh0b3VjaC0+cGxhdGZvcm1fZGF0YS0+dXNlX3Bv bGxpbmdfbW9kZSAmJgorCQkodG91Y2gtPnBsYXRmb3JtX2RhdGEtPnJlcG9ydF9yYXRlID09IDAp KSB7CisJCS8qIHdoZW4gdXNlciBtaXNzIHNldHRpbmcgcGxhdGZvcm0gZGF0YSwKKwkJKiogZW5z dXJlIHRoYXQgc3lzdGVtIGlzIHJvYnVzdC4KKwkJKiogbm8gZGl2aWQgemVybyBlcnJvci4gKi8K KwkJdG91Y2gtPnBsYXRmb3JtX2RhdGEtPnJlcG9ydF9yYXRlCisJCQk9IENZQVBBX1BPTExJTkdf UkVQT1JUUkFURV9ERUZBVUxUOworCX0KKwl0b3VjaC0+c2Nhbl9tcyA9IHRvdWNoLT5wbGF0Zm9y bV9kYXRhLT5yZXBvcnRfcmF0ZQorCQk/ICgxMDAwCS8gdG91Y2gtPnBsYXRmb3JtX2RhdGEtPnJl cG9ydF9yYXRlKSA6IDA7CisJdG91Y2gtPm9wZW5fY291bnQgPSAwOworCXRvdWNoLT5wcmV2X2Fi c194ID0gLTE7CisJdG91Y2gtPnByZXZfYWJzX3kgPSAtMTsKKwl0b3VjaC0+Y2xpZW50ID0gY2xp ZW50OworCXRvdWNoLT56b29taW5fZGVsdGEgPSAwOworCXRvdWNoLT56b29tb3V0X2RlbHRhID0g MDsKKwl0b3VjaC0+aHNjcm9sbF9sZWZ0ID0gMDsKKwl0b3VjaC0+aHNjcm9sbF9yaWdodCA9IDA7 CisJdG91Y2gtPnByZXZfdG91Y2hfZmluZ2VycyA9IDA7CisKKwljeWFwYV9zZXRfcHJlZmVyZW5j ZXModG91Y2gpOworCWN5YXBhX3Jlc2V0X2N1cnNvcl9maWx0ZXJzX2RhdGEodG91Y2gpOworCisJ SU5JVF9ERUxBWUVEX1dPUksoJnRvdWNoLT5kd29yaywgY3lhcGFfaTJjX3dvcmtfaGFuZGxlcik7 CisJc3Bpbl9sb2NrX2luaXQoJnRvdWNoLT5sb2NrKTsKKworCXJldHVybiB0b3VjaDsKK30KKwor c3RhdGljIGludCBjeWFwYV9jcmVhdGVfaW5wdXRfZGV2X21vdXNlKHN0cnVjdCBjeWFwYV9pMmMg KnRvdWNoKQoreworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0g TlVMTDsKKworCWlucHV0ID0gdG91Y2gtPmlucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7 CisJaWYgKCF0b3VjaC0+aW5wdXQpIHsKKwkJZGV2X2VycigmdG91Y2gtPmNsaWVudC0+ZGV2LAor CQkJICIlczogQWxsb2NhdGUgbWVtb3J5IGZvciBJbnB1dCBkZXZpY2UgZmFpbGVkOiAlZFxuIiwK KwkJCV9fZnVuY19fLCByZXR2YWwpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpbnB1dC0+ bmFtZSA9ICJjeWFwYV9pMmNfdHJhY2twYWQiOworCWlucHV0LT5waHlzID0gdG91Y2gtPmNsaWVu dC0+YWRhcHRlci0+bmFtZTsKKwlpbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19JMkM7CisJaW5wdXQt PmlkLnZlcnNpb24gPSAxOworCWlucHV0LT5kZXYucGFyZW50ID0gJnRvdWNoLT5jbGllbnQtPmRl djsKKworCWlucHV0LT5vcGVuID0gY3lhcGFfaTJjX29wZW47CisJaW5wdXQtPmNsb3NlID0gY3lh cGFfaTJjX2Nsb3NlOworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0LCB0b3VjaCk7CisKKwlpZiAo dG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9hYnNvbHV0ZV9tb2RlKSB7CisJCS8qIGFic29sdXRp b24gZGF0YSByZXBvcnQgbW9kZS4gKi8KKwkJX19zZXRfYml0KEVWX0FCUywgaW5wdXQtPmV2Yml0 KTsKKwkJX19zZXRfYml0KEVWX0tFWSwgaW5wdXQtPmV2Yml0KTsKKworCQlpbnB1dF9zZXRfYWJz X3BhcmFtcyhpbnB1dCwgQUJTX1gsIDAsCisJCQkJCQl0b3VjaC0+bWF4X2Fic29sdXRpb25feCwg MCwgMCk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfWSwgMCwKKwkJCQkJCXRv dWNoLT5tYXhfYWJzb2x1dGlvbl95LCAwLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5w dXQsIEFCU19QUkVTU1VSRSwgMCwgMjU1LCAwLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMo aW5wdXQsIEFCU19UT09MX1dJRFRILCAwLCAyNTUsIDAsIDApOworCisJCV9fc2V0X2JpdChCVE5f VE9VQ0gsIGlucHV0LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX1RPT0xfRklOR0VSLCBpbnB1 dC0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9UT09MX0RPVUJMRVRBUCwgaW5wdXQtPmtleWJp dCk7CisJCV9fc2V0X2JpdChCVE5fVE9PTF9UUklQTEVUQVAsIGlucHV0LT5rZXliaXQpOworCQlf X3NldF9iaXQoQlROX1RPT0xfUVVBRFRBUCwgaW5wdXQtPmtleWJpdCk7CisKKwkJX19zZXRfYml0 KEJUTl9MRUZULCBpbnB1dC0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9SSUdIVCwgaW5wdXQt PmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fTUlERExFLCBpbnB1dC0+a2V5Yml0KTsKKworCQlf X2NsZWFyX2JpdChFVl9SRUwsIGlucHV0LT5ldmJpdCk7CisJCV9fY2xlYXJfYml0KFJFTF9YLCBp bnB1dC0+cmVsYml0KTsKKwkJX19jbGVhcl9iaXQoUkVMX1ksIGlucHV0LT5yZWxiaXQpOworCQlf X2NsZWFyX2JpdChCVE5fVFJJR0dFUiwgaW5wdXQtPmtleWJpdCk7CisKKwkJaW5wdXRfYWJzX3Nl dF9yZXMoaW5wdXQsCisJCQlBQlNfWCwKKwkJCXRvdWNoLT5tYXhfYWJzb2x1dGlvbl94L3RvdWNo LT5waHlzaWNhbF9zaXplX3gpOworCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dCwKKwkJCUFCU19Z LAorCQkJdG91Y2gtPm1heF9hYnNvbHV0aW9uX3kvdG91Y2gtPnBoeXNpY2FsX3NpemVfeSk7CisK KwkJREJHUFJJTlRLKCgiJXM6IFVzZSBhYnNvbHV0ZSBkYXRhIHJlcG9ydGluZyBtb2RlLlxuIiwK KwkJCV9fZnVuY19fKSk7CisJfSBlbHNlIHsKKwkJLyogcmVsYXRpdmUgZGF0YSByZXBvcnRpbmcg bW9kZS4gKi8KKwkJX19zZXRfYml0KEVWX1JFTCwgaW5wdXQtPmV2Yml0KTsKKwkJX19zZXRfYml0 KFJFTF9YLCBpbnB1dC0+cmVsYml0KTsKKwkJX19zZXRfYml0KFJFTF9ZLCBpbnB1dC0+cmVsYml0 KTsKKworCQlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOworCQlfX3NldF9iaXQoQlRO X0xFRlQsIGlucHV0LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX1JJR0hULCBpbnB1dC0+a2V5 Yml0KTsKKwkJX19zZXRfYml0KEJUTl9NSURETEUsIGlucHV0LT5rZXliaXQpOworCisJCV9fY2xl YXJfYml0KEVWX0FCUywgaW5wdXQtPmV2Yml0KTsKKworCQlEQkdQUklOVEsoKCIlczogVXNlIHJl bGF0aXZlIGRhdGEgcmVwb3J0aW5nIG1vZGUuXG4iLAorCQkJX19mdW5jX18pKTsKKwl9CisKKwkv KiBSZWdpc3RlciB0aGUgZGV2aWNlIGluIGlucHV0IHN1YnN5c3RlbSAqLworCXJldHZhbCA9IGlu cHV0X3JlZ2lzdGVyX2RldmljZSh0b3VjaC0+aW5wdXQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2 X2VycigmdG91Y2gtPmNsaWVudC0+ZGV2LAorCQkJIiVzOiBJbnB1dCBkZXZpY2UgcmVnaXN0ZXIg ZmFpbGVkOiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwpOworCisJCWlucHV0X2ZyZWVfZGV2 aWNlKGlucHV0KTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBjeWFwYV9jcmVhdGVfaW5wdXRfZGV2X3doZWVsKHN0cnVjdCBjeWFwYV9pMmMgKnRv dWNoKQoreworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X3doZWVs ID0gTlVMTDsKKworCWlucHV0X3doZWVsID0gdG91Y2gtPmlucHV0X3doZWVsID0gaW5wdXRfYWxs b2NhdGVfZGV2aWNlKCk7CisJaWYgKCF0b3VjaC0+aW5wdXRfd2hlZWwpIHsKKwkJZGV2X2Vycigm dG91Y2gtPmNsaWVudC0+ZGV2LAorCQkJIiVzOiBBbGxvY2F0ZSBtZW1vcnkgZm9yIElucHV0IGRl dmljZSBmYWlsZWQ6ICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCk7CisJCXJldHVybiAtRU5P TUVNOworCX0KKworCWlucHV0X3doZWVsLT5uYW1lID0gImN5YXBhX2kyY193aGVlbCI7CisJaW5w dXRfd2hlZWwtPnBoeXMgPSB0b3VjaC0+Y2xpZW50LT5hZGFwdGVyLT5uYW1lOworCWlucHV0X3do ZWVsLT5pZC5idXN0eXBlID0gQlVTX0kyQzsKKwlpbnB1dF93aGVlbC0+aWQudmVyc2lvbiA9IDE7 CisJaW5wdXRfd2hlZWwtPmRldi5wYXJlbnQgPSAmdG91Y2gtPmNsaWVudC0+ZGV2OworCWlucHV0 X3doZWVsLT5vcGVuID0gY3lhcGFfaTJjX29wZW47CisJaW5wdXRfd2hlZWwtPmNsb3NlID0gY3lh cGFfaTJjX2Nsb3NlOworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X3doZWVsLCB0b3VjaCk7CisK KwlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dF93aGVlbC0+ZXZiaXQpOworCV9fc2V0X2JpdChFVl9S RUwsIGlucHV0X3doZWVsLT5ldmJpdCk7CisJX19zZXRfYml0KFJFTF9XSEVFTCwgaW5wdXRfd2hl ZWwtPnJlbGJpdCk7CisKKwlyZXR2YWwgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodG91Y2gtPmlu cHV0X3doZWVsKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJnRvdWNoLT5jbGllbnQtPmRl diwKKwkJCSIlczogSW5wdXQgZGV2aWNlIHJlZ2lzdGVyIGZhaWxlZDogJWRcbiIsCisJCQlfX2Z1 bmNfXywgcmV0dmFsKTsKKworCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF93aGVlbCk7CisJCXJl dHVybiByZXR2YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTUFYX05SX1NDQU5D T0RFUyAgMTI4CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGN5YXBhX3ZpcnR1YWxfa2V5Y29kZVtN QVhfTlJfU0NBTkNPREVTXSA9IHsKKy8qIEJlbGxvdyBrZXlzIGFyZSBzdXBwb3J0ZWQuCitLRVlf RU5URVIgICAgICAgMjgKK0tFWV9MRUZUQ1RSTCAgICAyOQorS0VZX0xFRlRTSElGVCAgIDQyCitL RVlfUklHSFRTSElGVCAgNTQKK0tFWV9MRUZUQUxUICAgICA1NgorS0VZX0tQTUlOVVMgICAgIDc0 CitLRVlfS1BQTFVTICAgICAgNzgKK0tFWV9SSUdIVENUUkwgICA5NworS0VZX1JJR0hUQUxUICAg IDEwMAorS0VZX0hPTUUgICAgICAgIDEwMgorS0VZX1VQICAgICAgICAgIDEwMworS0VZX1BBR0VV UCAgICAgIDEwNAorS0VZX0xFRlQgICAgICAgIDEwNQorS0VZX1JJR0hUICAgICAgIDEwNgorS0VZ X0VORCAgICAgICAgIDEwNworS0VZX0RPV04gICAgICAgIDEwOAorS0VZX1BBR0VET1dOICAgIDEw OQorKi8KKwkyOCwgIDI5LCAgNDIsICA1NCwgIDU2LCAgNzQsICA3OCwgIDk3LCAxMDAsCisJMTAy LCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDkKK307CisKK3N0YXRpYyBpbnQgY3lh cGFfY3JlYXRlX2lucHV0X2Rldl9rYmQoc3RydWN0IGN5YXBhX2kyYyAqdG91Y2gpCit7CisJaW50 IHJldHZhbCA9IDA7CisJaW50IGk7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfa2JkID0gTlVM TDsKKworCWlucHV0X2tiZCA9IHRvdWNoLT5pbnB1dF9rYmQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZp Y2UoKTsKKwlpZiAoIXRvdWNoLT5pbnB1dF9rYmQpIHsKKwkJZGV2X2VycigmdG91Y2gtPmNsaWVu dC0+ZGV2LAorCQkJIiVzOiBBbGxvY2F0ZSBtZW1vcnkgZm9yIElucHV0IGRldmljZSBmYWlsZWQ6 ICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwor CWlucHV0X2tiZC0+bmFtZSA9ICJjeWFwYV9pMmNfdmlydHVhbF9rYmQiOworCWlucHV0X2tiZC0+ cGh5cyA9IHRvdWNoLT5jbGllbnQtPmFkYXB0ZXItPm5hbWU7CisJaW5wdXRfa2JkLT5pZC5idXN0 eXBlID0gQlVTX0kyQzsKKwlpbnB1dF9rYmQtPmlkLnZlcnNpb24gPSAxOworCWlucHV0X2tiZC0+ ZGV2LnBhcmVudCA9ICZ0b3VjaC0+Y2xpZW50LT5kZXY7CisJaW5wdXRfa2JkLT5vcGVuID0gY3lh cGFfaTJjX29wZW47CisJaW5wdXRfa2JkLT5jbG9zZSA9IGN5YXBhX2kyY19jbG9zZTsKKwlpbnB1 dF9zZXRfZHJ2ZGF0YShpbnB1dF9rYmQsIHRvdWNoKTsKKworCWlucHV0X2tiZC0+a2V5Y29kZSA9 ICZjeWFwYV92aXJ0dWFsX2tleWNvZGU7CisJaW5wdXRfa2JkLT5rZXljb2Rlc2l6ZSA9IHNpemVv Zih1bnNpZ25lZCBjaGFyKTsKKwlpbnB1dF9rYmQtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGN5 YXBhX3ZpcnR1YWxfa2V5Y29kZSk7CisKKwlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dF9rYmQtPmV2 Yml0KTsKKwlfX3NldF9iaXQoRVZfUkVQLCBpbnB1dF9rYmQtPmV2Yml0KTsKKworCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGN5YXBhX3ZpcnR1YWxfa2V5Y29kZSk7IGkrKykKKwkJX19zZXRf Yml0KGN5YXBhX3ZpcnR1YWxfa2V5Y29kZVtpXSwgaW5wdXRfa2JkLT5rZXliaXQpOworCV9fY2xl YXJfYml0KEtFWV9SRVNFUlZFRCwgaW5wdXRfa2JkLT5rZXliaXQpOworCisJcmV0dmFsID0gaW5w dXRfcmVnaXN0ZXJfZGV2aWNlKHRvdWNoLT5pbnB1dF9rYmQpOworCWlmIChyZXR2YWwpIHsKKwkJ ZGV2X2VycigmdG91Y2gtPmNsaWVudC0+ZGV2LAorCQkJIiVzOiBJbnB1dCBkZXZpY2UgcmVnaXN0 ZXIgZmFpbGVkOiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwpOworCisJCWlucHV0X2ZyZWVf ZGV2aWNlKGlucHV0X2tiZCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGN5YXBhX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpkZXZfaWQp Cit7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IGN5YXBhX2kyYyAqdG91Y2g7CisKKwlEQkdQ UklOVEsoKCIlczogc3RhcnQgLi4uXG4iLCBfX2Z1bmNfXykpOworCXRvdWNoID0gY3lhcGFfaTJj X3RvdWNoX2NyZWF0ZShjbGllbnQpOworCWlmICghdG91Y2gpCisJCXJldHVybiAtRU5PTUVNOwor CisJLyogZG8gcGxhdGZyb20gaW5pdGlhbGl6ZSBmaXJzdGx5LiAqLworCWlmICh0b3VjaC0+cGxh dGZvcm1fZGF0YS0+aW5pdCkKKwkJcmV0dmFsID0gdG91Y2gtPnBsYXRmb3JtX2RhdGEtPmluaXQo KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9tZW1fZnJlZTsKKworCS8qIHNldCBpcnEgbnVt YmVyIGlmIG5vdCB1c2luZyBwb2xsaW5nIG1vZGUuICovCisJaWYgKHRvdWNoLT5wbGF0Zm9ybV9k YXRhLT51c2VfcG9sbGluZ19tb2RlID09IHRydWUpIHsKKwkJdG91Y2gtPmlycSA9IC0xOworCX0g ZWxzZSB7CisJCWlmICh0b3VjaC0+cGxhdGZvcm1fZGF0YS0+aXJxX2dwaW8gPT0gLTEpIHsKKwkJ CWlmIChjbGllbnQtPmlycSkgeworCQkJCXRvdWNoLT5pcnEgPSBjbGllbnQtPmlycTsKKwkJCX0g ZWxzZSB7CisJCQkJLyogaXJxIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBieSBzeXN0ZW0uICovCisJ CQkJdG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9wb2xsaW5nX21vZGUgPSB0cnVlOworCQkJCXRv dWNoLT5pcnEgPSAtMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXRvdWNoLT5pcnEKKwkJCQk9IGdw aW9fdG9faXJxKHRvdWNoLT5wbGF0Zm9ybV9kYXRhLT5pcnFfZ3Bpbyk7CisJCX0KKwl9CisJREJH UFJJTlRLKCgiJXM6IGlycT0lZCwgY2xpZW50LT5pcnE9JWRcbiIsCisJCQkJX19mdW5jX18sIHRv dWNoLT5pcnEsIGNsaWVudC0+aXJxKSk7CisKKwlpZiAodG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVz ZV9wb2xsaW5nX21vZGUgPT0gZmFsc2UpIHsKKwkJREJHUFJJTlRLKCgiJXM6IHJlcXVlc3QgaW50 ZXJydXB0IHJpcS5cbiIsIF9fZnVuY19fKSk7CisKKwkJc2V0X2lycV90eXBlKHRvdWNoLT5pcnEs IElSUUZfVFJJR0dFUl9GQUxMSU5HKTsKKwkJcmV0dmFsID0gcmVxdWVzdF9pcnEodG91Y2gtPmly cSwKKwkJCQkJY3lhcGFfaTJjX2lycSwKKwkJCQkJMCwKKwkJCQkJQ1lBUEFfSTJDX05BTUUsCisJ CQkJCXRvdWNoKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZGV2X3dhcm4oJnRvdWNoLT5jbGllbnQt PmRldiwKKwkJCQkJIiVzOiBJUlEgcmVxdWVzdCBmYWlsZWQ6IFwKKwkJCQkJJWQsIGZhbGxpbmcg YmFjayB0byBwb2xsaW5nIG1vZGUuXG4iLAorCQkJCQlfX2Z1bmNfXywgcmV0dmFsKTsKKworCQkJ dG91Y2gtPnBsYXRmb3JtX2RhdGEtPnVzZV9wb2xsaW5nX21vZGUgPSB0cnVlOworCQl9CisJfQor CisJLyogcmVjb25maWcgdHJhY2twYWQgZGVwZW5kaW5nIG9uIHBsYXRmcm9tIHNldHRpbmcuICov CisJLyogU2hvdWxkIGRpc2FibGUgaW50ZXJydXB0IHRvIHByb3RlY3QgdGhpcyBwb2xsaW5nIHJl YWQgb3BlcmF0aW9uLgorCSoqIE9odGVyd2lzZSwgdGhpcyBJMkMgcmVhZCB3aWxsIGJlIGludGVy cnVwdCBieSBvdGhlciByZWFkaW5nLAorCSoqIGFuZCBmYWlsZWQuICovCisJZGlzYWJsZV9pcnEo dG91Y2gtPmlycSk7CisJY3lhcGFfaTJjX3JlY29uZmlnKHRvdWNoKTsKKwllbmFibGVfaXJxKHRv dWNoLT5pcnEpOworCisJLyogY3JlYXRlIGFuIGlucHV0X2RldiBpbnN0YW5jZSBmb3IgdmlydHVh bCBtb3VzZSB0cmFja3BhZC4gKi8KKwlyZXR2YWwgPSBjeWFwYV9jcmVhdGVfaW5wdXRfZGV2X21v dXNlKHRvdWNoKTsKKwlpZiAocmV0dmFsKSB7CisJCURCR1BSSU5USygoIiVzOiBjcmVhdGUgbW91 c2UgaW5wdXRfZGV2IGluc3RhbmNlIGZpbGVkLlxuIiwKKwkJCQkJX19mdW5jX18pKTsKKwkJZ290 byBlcnJfbWVtX2ZyZWU7CisJfQorCisJLyogY3JlYXRlIGFuIGlucHV0X2RldiBpbnN0YW5jZXMg Zm9yIHZpcnR1YWwgd2hlZWwgZGV2aWNlCisJKiogYW5kIHZpcnR1YWwga2V5Ym9hcmQgZGV2aWNl LiAqLworCXJldHZhbCA9IGN5YXBhX2NyZWF0ZV9pbnB1dF9kZXZfd2hlZWwodG91Y2gpOworCWlm IChyZXR2YWwpIHsKKwkJREJHUFJJTlRLKCgiJXM6IGNyZWF0ZSBpbnB1dF9kZXYgaW5zdGFuY2Ug Zm9yIHdoZWVsIGZpbGVkLlxuIiwKKwkJCQkJX19mdW5jX18pKTsKKwkJZ290byBlcnJfbWVtX2Zy ZWU7CisJfQorCisJcmV0dmFsID0gY3lhcGFfY3JlYXRlX2lucHV0X2Rldl9rYmQodG91Y2gpOwor CWlmIChyZXR2YWwpIHsKKwkJREJHUFJJTlRLKCgiJXM6IGNyZWF0ZSBrZXlib2FkIGlucHV0X2Rl diBpbnN0YW5jZSBmaWxlZC5cbiIsCisJCQkJCV9fZnVuY19fKSk7CisJCWdvdG8gZXJyX21lbV9m cmVlOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHRvdWNoKTsKKworCURCR1BS SU5USygoIiVzOiBEb25lIHN1Y2Nlc3NmdWxseS5cbiIsIF9fZnVuY19fKSk7CisKKwlyZXR1cm4g MDsKKworZXJyX21lbV9mcmVlOgorCS8qIHJlbGVhc2UgcHJldmlvdXMgYWxsb2NhdGVkIGlucHV0 X2RldiBpbnN0YW5jZXMuICovCisJaWYgKHRvdWNoLT5pbnB1dCkgeworCQlpbnB1dF9mcmVlX2Rl dmljZSh0b3VjaC0+aW5wdXQpOworCQl0b3VjaC0+aW5wdXQgPSBOVUxMOworCX0KKworCWlmICh0 b3VjaC0+aW5wdXRfd2hlZWwpIHsKKwkJaW5wdXRfZnJlZV9kZXZpY2UodG91Y2gtPmlucHV0X3do ZWVsKTsKKwkJdG91Y2gtPmlucHV0X3doZWVsID0gTlVMTDsKKwl9CisKKwlpZiAodG91Y2gtPmlu cHV0X2tiZCkgeworCQlpbnB1dF9mcmVlX2RldmljZSh0b3VjaC0+aW5wdXRfa2JkKTsKKwkJdG91 Y2gtPmlucHV0X2tiZCA9IE5VTEw7CisJfQorCisJa2ZyZWUodG91Y2gpOworCisJREJHUFJJTlRL KCgiJXM6IGV4aXN0IHdpdGggZXJyb3IgJWQuXG4iLCBfX2Z1bmNfXywgcmV0dmFsKSk7CisJcmV0 dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgY3lhcGFfaTJjX3JlbW92ZShz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBjeWFwYV9pMmMgKnRvdWNoID0g aTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoIXRvdWNoLT5wbGF0Zm9ybV9kYXRh LT51c2VfcG9sbGluZ19tb2RlKQorCQlmcmVlX2lycShjbGllbnQtPmlycSwgdG91Y2gpOworCisJ aWYgKHRvdWNoLT5pbnB1dCkKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodG91Y2gtPmlucHV0 KTsKKwlpZiAodG91Y2gtPmlucHV0X3doZWVsKQorCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh0 b3VjaC0+aW5wdXQpOworCWlmICh0b3VjaC0+aW5wdXRfa2JkKQorCQlpbnB1dF91bnJlZ2lzdGVy X2RldmljZSh0b3VjaC0+aW5wdXQpOworCWtmcmVlKHRvdWNoKTsKKworCURCR1BSSU5USygoIiVz OiAuLi5cbiIsIF9fZnVuY19fKSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19Q TQorc3RhdGljIGludCBjeWFwYV9pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50 LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCA9IGkyY19n ZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJREJHUFJJTlRLKCgiJXM6IC4uLlxuIiwgX19mdW5j X18pKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnRvdWNoLT5kd29yayk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBjeWFwYV9pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY3lhcGFfaTJjICp0b3VjaCA9IGkyY19n ZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJcmV0ID0gY3lhcGFfaTJjX3Jlc2V0X2NvbmZpZyh0 b3VjaCk7CisJREJHUFJJTlRLKCgiJXM6IC4uLlxuIiwgX19mdW5jX18pKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJY3lhcGFfaTJjX3Jlc2NoZWR1bGVfd29yayh0b3VjaCwKKwkJCW1z ZWNzX3RvX2ppZmZpZXMoQ1lBUEFfTk9fREFUQV9TTEVFUF9NU0VDUykpOworCisJcmV0dXJuIDA7 Cit9CisjZWxzZQorI2RlZmluZSBjeWFwYV9pMmNfc3VzcGVuZAlOVUxMCisjZGVmaW5lIGN5YXBh X2kyY19yZXN1bWUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2Rldmlj ZV9pZCBjeXByZXNzX2kyY19pZF90YWJsZVtdID0geworCXsgQ1lBUEFfSTJDX05BTUUsIDAgfSwK Kwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGN5cHJlc3NfaTJjX2lkX3RhYmxl KTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGN5cHJlc3NfaTJjX2RyaXZlciA9IHsKKwku ZHJpdmVyID0geworCQkubmFtZQk9IENZQVBBX0kyQ19OQU1FLAorCQkub3duZXIJPSBUSElTX01P RFVMRSwKKwl9LAorCisJLnByb2JlCQk9IGN5YXBhX2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9f ZGV2ZXhpdF9wKGN5YXBhX2kyY19yZW1vdmUpLAorCisJLnN1c3BlbmQJPSBjeWFwYV9pMmNfc3Vz cGVuZCwKKwkucmVzdW1lCQk9IGN5YXBhX2kyY19yZXN1bWUsCisJLmlkX3RhYmxlCT0gY3lwcmVz c19pMmNfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjeWFwYV9pMmNfaW5pdCh2 b2lkKQoreworCURCR1BSSU5USygoIiVzOiBzdGFydCAuLi5cbiIsIF9fZnVuY19fKSk7CisJcmV0 dXJuIGkyY19hZGRfZHJpdmVyKCZjeXByZXNzX2kyY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9p ZCBfX2V4aXQgY3lhcGFfaTJjX2V4aXQodm9pZCkKK3sKKwlEQkdQUklOVEsoKCIlczogZXhpdCAu Li5cbiIsIF9fZnVuY19fKSk7CisJaTJjX2RlbF9kcml2ZXIoJmN5cHJlc3NfaTJjX2RyaXZlcik7 Cit9CisKK21vZHVsZV9pbml0KGN5YXBhX2kyY19pbml0KTsKK21vZHVsZV9leGl0KGN5YXBhX2ky Y19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJDeXByZXNzIEkyQyBUcmFja3BhZCBEcml2 ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkR1ZGxleSBEdSA8ZHVkbEBjeXByZXNzLmNvbT4iKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jeWFwYS5o IGIvaW5jbHVkZS9saW51eC9jeWFwYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjg4OGZhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2N5YXBhLmgKQEAg LTAsMCArMSw2MCBAQAorI2lmbmRlZiBDWUFQQV9ICisjZGVmaW5lIENZQVBBX0gKKworCisjZGVm aW5lIENZQVBBX0kyQ19OQU1FICAiY3lwcmVzc19pMmNfYXBhIgorCisvKiBBY3RpdmUgcG93ZXIg c3RhdGUgc2Nhbm5pbmcvcHJvY2Vzc2luZyByZWZyZXNoIGludGVydmFsIHRpbWUuIHVuaXQ6IG1z LiAqLworI2RlZmluZSBDWUFQQV9BQ1RJVkVfUE9MTElOR19JTlRWQUxfVElNRSAgMHgwMAorLyog TG93IHBvd2VyIHN0YXRlIHNjYW5uaW5nL3Byb2Nlc3NpbmcgcmVmcmVzaCBpbnRlcnZhbCB0aW1l LiB1bml0OiBtcy4gKi8KKyNkZWZpbmUgQ1lBUEFfTE9XUE9XRVJfUE9MTElOR19JTlRWQUxfVElN RSAweDEwCisvKiBUb3VjaCB0aW1lb3V0IGZvciBhY3RpdmUgcG93ZXIgc3RhdGUuIHVuaXQ6IG1z LiAqLworI2RlZmluZSBDWUFQQV9BQ1RJVkVfVE9VQ0hfVElNRU9VVCAgMHhGRgorCisvKiBNYXgg cmVwb3J0IHJhdGUgbGltaXRlZCBmb3IgQ3lwcmVzcyBUcmFja3BhZC4gKi8KKyNkZWZpbmUgQ1lB UEFfTk9fTElNSVRFRF9SRVBPUlRfUkFURSAgMAorI2RlZmluZSBDWUFQQV9SRVBPUlRfUkFURSAg KENZQVBBX05PX0xJTUlURURfUkVQT1JUX1JBVEUpCisjZGVmaW5lIENZQVBBX1BPTExJTkdfUkVQ T1JUUkFURV9ERUZBVUxUIDEyNQorCisKKy8qIEFQQSB0cmFja3BhZCBmaXJtd2FyZSBnZW5lcmF0 aW9uICovCitlbnVtIGN5YXBhX2dlbiB7CisJQ1lBUEFfR0VOMSA9IDB4MDEsCisJQ1lBUEFfR0VO MiA9IDB4MDIsCit9OworCisvKgorKiogQVBBIHRyYWNrcGFkIHBvd2VyIHN0YXRlcy4KKyoqIFVz ZWQgaW4gcmVnaXN0ZXIgMHgwMCwgYml0My0yLCBQb3dlck1vZGUgZmllbGQuCisqLworZW51bSBj eWFwYV9wb3dlcnN0YXRlIHsKKwlDWUFQQV9QV1JfQUNUSVZFID0gMHgwMSwKKwlDWUFQQV9QV1Jf TElHSFRfU0xFRVAgPSAweDAyLAorCUNZQVBBX1BXUl9NRURJVU1fU0xFRVAgPSAweDAzLAorCUNZ QVBBX1BXUl9ERUVQX1NMRUVQID0gMHgwNCwKK307CisKK3N0cnVjdCBjeWFwYV9wbGF0Zm9ybV9k YXRhIHsKKwl1MzIgZmxhZzsgICAvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gKi8KKwllbnVt IGN5YXBhX2dlbiBnZW47ICAvKiB0cmFja3BhZCBmaXJtd2FyZSBnZW5lcmF0aW9uLiAqLworCWVu dW0gY3lhcGFfcG93ZXJzdGF0ZSBwb3dlcl9zdGF0ZTsKKworCS8qIHVzZSBhYnNvbHV0ZSBkYXRh IHJlcG9ydCBvciByZWxhdGl2ZSBkYXRhIHJlcG9ydC4gKi8KKwl1bnNpZ25lZCB1c2VfYWJzb2x1 dGVfbW9kZToxOworCS8qIHVzZSBwb2xsaW5nIG1vZGUgb3IgaW50ZXJydXB0IG1vZGUuICovCisJ dW5zaWduZWQgdXNlX3BvbGxpbmdfbW9kZToxOworCS8qIGFjdGl2ZSBtb2RlLCBwb2xsaW5nIHJl ZnJlc2ggaW50ZXJ2YWw7IG1zICovCisJdTggcG9sbGluZ19pbnRlcnZhbF90aW1lX2FjdGl2ZTsK KwkvKiBsb3cgcG93ZXIgbW9kZSwgcG9sbGluZyByZWZyZXNoIGludGVydmFsOyBtcyAqLworCXU4 IHBvbGxpbmdfaW50ZXJ2YWxfdGltZV9sb3dwb3dlcjsKKwl1OCBhY3RpdmVfdG91Y2hfdGltZW91 dDsgIC8qIGFjdGl2ZSB0b3VjaCB0aW1lb3V0OyBtcyAqLworCWNoYXIgKm5hbWU7ICAvKiBkZXZp Y2UgbmFtZSBvZiBDeXByZXNzIEkyQyB0cmFja3BhZC4gKi8KKwkvKiB0aGUgZ3BpbyBpZCB1c2Vk IGZvciBpbnRlcnJ1cHQgdG8gbm90aWZ5IGhvc3QgZGF0YSBpcyByZWFkeS4gKi8KKwlzMTYgaXJx X2dwaW87CisJdTMyIHJlcG9ydF9yYXRlOyAgLyogbWF4IGxpbWl0YXRpb24gb2YgZGF0YSByZXBv cnQgcmF0ZS4gKi8KKworCWludCAoKndha2V1cCkodm9pZCk7CisJaW50ICgqaW5pdCkodm9pZCk7 Cit9OworCisjZW5kaWYgIC8qICNpZm5kZWYgQ1lBUEFfSCAqLwotLSAKMS43LjAuNAoK --_002_B27AC323FA92C946BA36D2913DDC8E3701FD6F0B1A3BVMBX126ihos_-- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/