Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 10 May 2004 07:50:17 -0700 (PDT)
From:      Jianqin Qu <jqu@its.brooklyn.cuny.edu>
To:        freebsd-i386@FreeBSD.org
Subject:   Re: i386/64656: Bugs with Ethernet driver "bfe"[patch] 
Message-ID:  <200405101450.i4AEoHq2070831@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR i386/64656; it has been noted by GNATS.

From: Jianqin Qu <jqu@its.brooklyn.cuny.edu>
To: freebsd-gnats-submit@freebsd.org
Cc:  
Subject: Re: i386/64656: Bugs with Ethernet driver "bfe"[patch] 
Date: Mon, 10 May 2004 10:44:16 -0400 (EDT)

   This message is in MIME format.  The first part should be readable text,
   while the remaining parts are likely unreadable without MIME-aware tools.
   Send mail to mime@docserver.cac.washington.edu for more info.
 
 ---559023410-851401618-1084200166=:27340
 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
 Content-ID: <Pine.GSO.4.58.0405101043181.27383@atrium67.its.brooklyn.cuny.edu>
 
 Sorry, the wrong files were ataached to last message. The correct
 files for patches are attached to this message.
 
 Jianqin
 ---559023410-851401618-1084200166=:27340
 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="bfe521.patch"
 Content-Transfer-Encoding: BASE64
 Content-ID: <Pine.GSO.4.58.0405101042460.27340@atrium67.its.brooklyn.cuny.edu>
 Content-Description: 
 Content-Disposition: ATTACHMENT; FILENAME="bfe521.patch"
 
 LS0tIC91c3Ivc3JjL3N5cy9kZXYvYmZlL2lmX2JmZS5jCVNhdCBOb3YgMTUg
 MDM6MDA6MzAgMjAwMw0KKysrIGlmX2JmZS5jCVR1ZSBNYXkgIDYgMTU6Mjc6
 MjcgMjAwMw0KQEAgLTczMyw3ICs3MzMsMTIgQEANCiAJCURFTEFZKDEwMCk7
 DQogCX0NCiANCi0JQkZFX09SKHNjLCBCRkVfTUFDX0NUUkwsIEJGRV9DVFJM
 X0NSQzMyX0VOQUIpOw0KKwkvKiBFbmFibGUgQ1JDMzIgZ2VuZXJhdGlvbiBh
 bmQgc2V0IHByb3BlciBMRUQgbW9kZXMgKi8NCisJQkZFX09SKHNjLCBCRkVf
 TUFDX0NUUkwsIEJGRV9DVFJMX0NSQzMyX0VOQUIgfCBCRkVfQ1RSTF9MRUQp
 Ow0KKw0KKwkvKiBSZXNldC9DbGVhciBwb3dlcmRvd24gYml0ICAqLw0KKwlC
 RkVfQU5EKHNjLCBCRkVfTUFDX0NUUkwsIH5CRkVfQ1RSTF9QRE9XTik7DQor
 DQogCUNTUl9XUklURV80KHNjLCBCRkVfUkNWX0xBWlksICgoMSA8PCBCRkVf
 TEFaWV9GQ19TSElGVCkgJiANCiAJCQkJQkZFX0xBWllfRkNfTUFTSykpOw0K
 IA0KQEAgLTgzNSw3ICs4NDAsNyBAQA0KIAkJCSgoKHVfaW50MzJfdCkgZGF0
 YVsxXSkpKTsNCiAJQ1NSX1dSSVRFXzQoc2MsIEJGRV9DQU1fREFUQV9ISSwg
 dmFsKTsNCiAJQ1NSX1dSSVRFXzQoc2MsIEJGRV9DQU1fQ1RSTCwgKEJGRV9D
 QU1fV1JJVEUgfA0KLQkJCQkoaW5kZXggPDwgQkZFX0NBTV9JTkRFWF9TSElG
 VCkpKTsNCisJCQkJKCh1X2ludDMyX3QpIGluZGV4IDw8IEJGRV9DQU1fSU5E
 RVhfU0hJRlQpKSk7DQogCWJmZV93YWl0X2JpdChzYywgQkZFX0NBTV9DVFJM
 LCBCRkVfQ0FNX0JVU1ksIDEwMDAwLCAxKTsNCiB9DQogDQo=
 
 ---559023410-851401618-1084200166=:27340
 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="if_bfe.c"
 Content-Transfer-Encoding: BASE64
 Content-ID: <Pine.GSO.4.58.0405101042461.27340@atrium67.its.brooklyn.cuny.edu>
 Content-Description: 
 Content-Disposition: ATTACHMENT; FILENAME="if_bfe.c"
 
 LyoNCiAqIENvcHlyaWdodCAoYykgMjAwMyBTdHVhcnQgV2Fsc2g8c3R1QGlw
 bmcub3JnLnVrPg0KICogYW5kIER1bmNhbiBCYXJjbGF5PGRtbGJAZG1sYi5v
 cmc+DQogKi8NCg0KLyoNCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
 c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICog
 bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
 IGZvbGxvd2luZyBjb25kaXRpb25zDQogKiBhcmUgbWV0Og0KICogMS4gUmVk
 aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
 Ym92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
 bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAqIDIu
 IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
 ZSB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgICBub3RpY2UsIHRoaXMgbGlz
 dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
 aW4gdGhlDQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
 cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICoNCiAq
 IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
 Q09OVFJJQlVUT1JTICdBUyBJUycgQU5EDQogKiBBTlkgRVhQUkVTUyBPUiBJ
 TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
 IFRPLCBUSEUNCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
 SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQog
 KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
 T1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KICogRk9SIEFOWSBESVJF
 Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
 IE9SIENPTlNFUVVFTlRJQUwNCiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
 IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
 T0RTDQogKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
 T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikNCiAqIEhPV0VWRVIg
 Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
 UiBJTiBDT05UUkFDVCwgU1RSSUNUDQogKiBMSUFCSUxJVFksIE9SIFRPUlQg
 KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
 TiBBTlkgV0FZDQogKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
 LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQogKiBT
 VUNIIERBTUFHRS4NCiAqLw0KDQoNCiNpbmNsdWRlIDxzeXMvY2RlZnMuaD4N
 Cl9fRkJTRElEKCIkRnJlZUJTRDogc3JjL3N5cy9kZXYvYmZlL2lmX2JmZS5j
 LHYgMS40IDIwMDMvMTEvMTQgMTk6MDA6MzAgc2FtIEV4cCAkIik7DQoNCiNp
 bmNsdWRlIDxzeXMvcGFyYW0uaD4NCiNpbmNsdWRlIDxzeXMvc3lzdG0uaD4N
 CiNpbmNsdWRlIDxzeXMvc29ja2lvLmg+DQojaW5jbHVkZSA8c3lzL21idWYu
 aD4NCiNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+DQojaW5jbHVkZSA8c3lzL2tl
 cm5lbC5oPg0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNpbmNsdWRlIDxz
 eXMvcXVldWUuaD4NCg0KI2luY2x1ZGUgPG5ldC9pZi5oPg0KI2luY2x1ZGUg
 PG5ldC9pZl9hcnAuaD4NCiNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4NCiNp
 bmNsdWRlIDxuZXQvaWZfZGwuaD4NCiNpbmNsdWRlIDxuZXQvaWZfbWVkaWEu
 aD4NCg0KI2luY2x1ZGUgPG5ldC9icGYuaD4NCg0KI2luY2x1ZGUgPG5ldC9p
 Zl90eXBlcy5oPg0KI2luY2x1ZGUgPG5ldC9pZl92bGFuX3Zhci5oPg0KDQoj
 aW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPg0KI2luY2x1ZGUgPG5ldGlu
 ZXQvaW4uaD4NCiNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+DQoNCiNpbmNsdWRl
 IDxtYWNoaW5lL2Nsb2NrLmg+ICAgICAgLyogZm9yIERFTEFZICovDQojaW5j
 bHVkZSA8bWFjaGluZS9idXNfbWVtaW8uaD4NCiNpbmNsdWRlIDxtYWNoaW5l
 L2J1cy5oPg0KI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4NCiNpbmNs
 dWRlIDxzeXMvYnVzLmg+DQojaW5jbHVkZSA8c3lzL3JtYW4uaD4NCg0KI2lu
 Y2x1ZGUgPGRldi9taWkvbWlpLmg+DQojaW5jbHVkZSA8ZGV2L21paS9taWl2
 YXIuaD4NCiNpbmNsdWRlICJtaWlkZXZzLmgiDQoNCiNpbmNsdWRlIDxkZXYv
 cGNpL3BjaXJlZy5oPg0KI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFyLmg+DQoN
 CiNpbmNsdWRlIDxkZXYvYmZlL2lmX2JmZXJlZy5oPg0KDQpNT0RVTEVfREVQ
 RU5EKGJmZSwgcGNpLCAxLCAxLCAxKTsNCk1PRFVMRV9ERVBFTkQoYmZlLCBl
 dGhlciwgMSwgMSwgMSk7DQpNT0RVTEVfREVQRU5EKGJmZSwgbWlpYnVzLCAx
 LCAxLCAxKTsNCg0KLyogImNvbnRyb2xsZXIgbWlpYnVzMCIgcmVxdWlyZWQu
 ICBTZWUgR0VORVJJQyBpZiB5b3UgZ2V0IGVycm9ycyBoZXJlLiAqLw0KI2lu
 Y2x1ZGUgIm1paWJ1c19pZi5oIg0KDQojZGVmaW5lIEJGRV9ERVZERVNDX01B
 WAkJNjQJLyogTWF4aW11bSBkZXZpY2UgZGVzY3JpcHRpb24gbGVuZ3RoICov
 DQoNCnN0YXRpYyBzdHJ1Y3QgYmZlX3R5cGUgYmZlX2RldnNbXSA9IHsNCgl7
 IEJDT01fVkVORE9SSUQsIEJDT01fREVWSUNFSURfQkNNNDQwMSwNCgkJIkJy
 b2FkY29tIEJDTTQ0MDEgRmFzdCBFdGhlcm5ldCIgfSwNCgkJeyAwLCAwLCBO
 VUxMIH0NCn07DQoNCnN0YXRpYyBpbnQgIGJmZV9wcm9iZQkJCQkoZGV2aWNl
 X3QpOw0Kc3RhdGljIGludCAgYmZlX2F0dGFjaAkJCQkoZGV2aWNlX3QpOw0K
 c3RhdGljIGludCAgYmZlX2RldGFjaAkJCQkoZGV2aWNlX3QpOw0Kc3RhdGlj
 IHZvaWQgYmZlX3JlbGVhc2VfcmVzb3VyY2VzCShzdHJ1Y3QgYmZlX3NvZnRj
 ICopOw0Kc3RhdGljIHZvaWQgYmZlX2ludHIJCQkJKHZvaWQgKik7DQpzdGF0
 aWMgdm9pZCBiZmVfc3RhcnQJCQkJKHN0cnVjdCBpZm5ldCAqKTsNCnN0YXRp
 YyBpbnQgIGJmZV9pb2N0bAkJCQkoc3RydWN0IGlmbmV0ICosIHVfbG9uZywg
 Y2FkZHJfdCk7DQpzdGF0aWMgdm9pZCBiZmVfaW5pdAkJCQkodm9pZCAqKTsN
 CnN0YXRpYyB2b2lkIGJmZV9zdG9wCQkJCShzdHJ1Y3QgYmZlX3NvZnRjICop
 Ow0Kc3RhdGljIHZvaWQgYmZlX3dhdGNoZG9nCQkJKHN0cnVjdCBpZm5ldCAq
 KTsNCnN0YXRpYyB2b2lkIGJmZV9zaHV0ZG93bgkJCShkZXZpY2VfdCk7DQpz
 dGF0aWMgdm9pZCBiZmVfdGljawkJCQkodm9pZCAqKTsNCnN0YXRpYyB2b2lk
 IGJmZV90eGVvZgkJCQkoc3RydWN0IGJmZV9zb2Z0YyAqKTsNCnN0YXRpYyB2
 b2lkIGJmZV9yeGVvZgkJCQkoc3RydWN0IGJmZV9zb2Z0YyAqKTsNCnN0YXRp
 YyB2b2lkIGJmZV9zZXRfcnhfbW9kZQkJCShzdHJ1Y3QgYmZlX3NvZnRjICop
 Ow0Kc3RhdGljIGludCAgYmZlX2xpc3RfcnhfaW5pdAkJKHN0cnVjdCBiZmVf
 c29mdGMgKik7DQpzdGF0aWMgaW50ICBiZmVfbGlzdF9uZXdidWYJCQkoc3Ry
 dWN0IGJmZV9zb2Z0YyAqLCBpbnQsIHN0cnVjdCBtYnVmKik7DQpzdGF0aWMg
 dm9pZCBiZmVfcnhfcmluZ19mcmVlCQkoc3RydWN0IGJmZV9zb2Z0YyAqKTsN
 Cg0Kc3RhdGljIHZvaWQgYmZlX3BjaV9zZXR1cAkJCShzdHJ1Y3QgYmZlX3Nv
 ZnRjICosIHVfaW50MzJfdCk7DQpzdGF0aWMgaW50ICBiZmVfaWZtZWRpYV91
 cGQJCQkoc3RydWN0IGlmbmV0ICopOw0Kc3RhdGljIHZvaWQgYmZlX2lmbWVk
 aWFfc3RzCQkJKHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgaWZtZWRpYXJlcSAq
 KTsNCnN0YXRpYyBpbnQgIGJmZV9taWlidXNfcmVhZHJlZwkJKGRldmljZV90
 LCBpbnQsIGludCk7DQpzdGF0aWMgaW50ICBiZmVfbWlpYnVzX3dyaXRlcmVn
 CQkoZGV2aWNlX3QsIGludCwgaW50LCBpbnQpOw0Kc3RhdGljIHZvaWQgYmZl
 X21paWJ1c19zdGF0Y2hnCQkoZGV2aWNlX3QpOw0Kc3RhdGljIGludCAgYmZl
 X3dhaXRfYml0CQkJKHN0cnVjdCBiZmVfc29mdGMgKiwgdV9pbnQzMl90LCB1
 X2ludDMyX3QsIA0KCQl1X2xvbmcsIGNvbnN0IGludCk7DQpzdGF0aWMgdm9p
 ZCBiZmVfZ2V0X2NvbmZpZwkJCShzdHJ1Y3QgYmZlX3NvZnRjICpzYyk7DQpz
 dGF0aWMgdm9pZCBiZmVfcmVhZF9lZXByb20JCQkoc3RydWN0IGJmZV9zb2Z0
 YyAqLCB1X2ludDhfdCAqKTsNCnN0YXRpYyB2b2lkIGJmZV9zdGF0c191cGRh
 dGUJCShzdHJ1Y3QgYmZlX3NvZnRjICopOw0Kc3RhdGljIHZvaWQgYmZlX2Ns
 ZWFyX3N0YXRzCQkJKHN0cnVjdCBiZmVfc29mdGMgKik7DQpzdGF0aWMgaW50
 ICBiZmVfcmVhZHBoeQkJCQkoc3RydWN0IGJmZV9zb2Z0YyAqLCB1X2ludDMy
 X3QsIHVfaW50MzJfdCopOw0Kc3RhdGljIGludCAgYmZlX3dyaXRlcGh5CQkJ
 KHN0cnVjdCBiZmVfc29mdGMgKiwgdV9pbnQzMl90LCB1X2ludDMyX3QpOw0K
 c3RhdGljIGludCAgYmZlX3Jlc2V0cGh5CQkJKHN0cnVjdCBiZmVfc29mdGMg
 Kik7DQpzdGF0aWMgaW50ICBiZmVfc2V0dXBwaHkJCQkoc3RydWN0IGJmZV9z
 b2Z0YyAqKTsNCnN0YXRpYyB2b2lkIGJmZV9jaGlwX3Jlc2V0CQkJKHN0cnVj
 dCBiZmVfc29mdGMgKik7DQpzdGF0aWMgdm9pZCBiZmVfY2hpcF9oYWx0CQkJ
 KHN0cnVjdCBiZmVfc29mdGMgKik7DQpzdGF0aWMgdm9pZCBiZmVfY29yZV9y
 ZXNldAkJCShzdHJ1Y3QgYmZlX3NvZnRjICopOw0Kc3RhdGljIHZvaWQgYmZl
 X2NvcmVfZGlzYWJsZQkJKHN0cnVjdCBiZmVfc29mdGMgKik7DQpzdGF0aWMg
 aW50ICBiZmVfZG1hX2FsbG9jCQkJKGRldmljZV90KTsNCnN0YXRpYyB2b2lk
 IGJmZV9kbWFfbWFwX2Rlc2MJCSh2b2lkICosIGJ1c19kbWFfc2VnbWVudF90
 ICosIGludCwgaW50KTsNCnN0YXRpYyB2b2lkIGJmZV9kbWFfbWFwCQkJCSh2
 b2lkICosIGJ1c19kbWFfc2VnbWVudF90ICosIGludCwgaW50KTsNCnN0YXRp
 YyB2b2lkIGJmZV9jYW1fd3JpdGUJCQkoc3RydWN0IGJmZV9zb2Z0YyAqLCB1
 X2NoYXIgKiwgaW50KTsNCg0Kc3RhdGljIGRldmljZV9tZXRob2RfdCBiZmVf
 bWV0aG9kc1tdID0gew0KCS8qIERldmljZSBpbnRlcmZhY2UgKi8NCglERVZN
 RVRIT0QoZGV2aWNlX3Byb2JlLAkJYmZlX3Byb2JlKSwNCglERVZNRVRIT0Qo
 ZGV2aWNlX2F0dGFjaCwJYmZlX2F0dGFjaCksDQoJREVWTUVUSE9EKGRldmlj
 ZV9kZXRhY2gsCWJmZV9kZXRhY2gpLA0KCURFVk1FVEhPRChkZXZpY2Vfc2h1
 dGRvd24sCWJmZV9zaHV0ZG93biksDQoNCgkvKiBidXMgaW50ZXJmYWNlICov
 DQoJREVWTUVUSE9EKGJ1c19wcmludF9jaGlsZCwJYnVzX2dlbmVyaWNfcHJp
 bnRfY2hpbGQpLA0KCURFVk1FVEhPRChidXNfZHJpdmVyX2FkZGVkLAlidXNf
 Z2VuZXJpY19kcml2ZXJfYWRkZWQpLA0KDQoJLyogTUlJIGludGVyZmFjZSAq
 Lw0KCURFVk1FVEhPRChtaWlidXNfcmVhZHJlZywJYmZlX21paWJ1c19yZWFk
 cmVnKSwNCglERVZNRVRIT0QobWlpYnVzX3dyaXRlcmVnLAliZmVfbWlpYnVz
 X3dyaXRlcmVnKSwNCglERVZNRVRIT0QobWlpYnVzX3N0YXRjaGcsCWJmZV9t
 aWlidXNfc3RhdGNoZyksDQoNCgl7IDAsIDAgfQ0KfTsNCg0Kc3RhdGljIGRy
 aXZlcl90IGJmZV9kcml2ZXIgPSB7DQoJImJmZSIsDQoJYmZlX21ldGhvZHMs
 DQoJc2l6ZW9mKHN0cnVjdCBiZmVfc29mdGMpDQp9Ow0KDQpzdGF0aWMgZGV2
 Y2xhc3NfdCBiZmVfZGV2Y2xhc3M7DQoNCkRSSVZFUl9NT0RVTEUoYmZlLCBw
 Y2ksIGJmZV9kcml2ZXIsIGJmZV9kZXZjbGFzcywgMCwgMCk7DQpEUklWRVJf
 TU9EVUxFKG1paWJ1cywgYmZlLCBtaWlidXNfZHJpdmVyLCBtaWlidXNfZGV2
 Y2xhc3MsIDAsIDApOw0KDQovKg0KICogUHJvYmUgZm9yIGEgQnJvYWRjb20g
 NDQwMSBjaGlwLiANCiAqLw0Kc3RhdGljIGludA0KYmZlX3Byb2JlKGRldmlj
 ZV90IGRldikNCnsNCglzdHJ1Y3QgYmZlX3R5cGUgKnQ7DQoJc3RydWN0IGJm
 ZV9zb2Z0YyAqc2M7DQoNCgl0ID0gYmZlX2RldnM7DQoNCglzYyA9IGRldmlj
 ZV9nZXRfc29mdGMoZGV2KTsNCgliemVybyhzYywgc2l6ZW9mKHN0cnVjdCBi
 ZmVfc29mdGMpKTsNCglzYy0+YmZlX3VuaXQgPSBkZXZpY2VfZ2V0X3VuaXQo
 ZGV2KTsNCglzYy0+YmZlX2RldiA9IGRldjsNCg0KCXdoaWxlKHQtPmJmZV9u
 YW1lICE9IE5VTEwpIHsNCgkJaWYgKChwY2lfZ2V0X3ZlbmRvcihkZXYpID09
 IHQtPmJmZV92aWQpICYmDQoJCQkJKHBjaV9nZXRfZGV2aWNlKGRldikgPT0g
 dC0+YmZlX2RpZCkpIHsNCgkJCWRldmljZV9zZXRfZGVzY19jb3B5KGRldiwg
 dC0+YmZlX25hbWUpOw0KCQkJcmV0dXJuKDApOw0KCQl9DQoJCXQrKzsNCgl9
 DQoNCglyZXR1cm4oRU5YSU8pOw0KfQ0KDQpzdGF0aWMgaW50DQpiZmVfZG1h
 X2FsbG9jKGRldmljZV90IGRldikNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpz
 YzsNCglpbnQgZXJyb3IsIGk7DQoNCglzYyA9IGRldmljZV9nZXRfc29mdGMo
 ZGV2KTsNCg0KCS8qIHBhcmVudCB0YWcgKi8NCgllcnJvciA9IGJ1c19kbWFf
 dGFnX2NyZWF0ZShOVUxMLCAgLyogcGFyZW50ICovDQoJCQlQQUdFX1NJWkUs
 IDAsICAgICAgICAgICAgIC8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8NCgkJ
 CUJVU19TUEFDRV9NQVhBRERSLCAgICAgICAgLyogbG93YWRkciAqLyAgICAg
 IA0KCQkJQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsICAvKiBoaWdoYWRkciAq
 Lw0KCQkJTlVMTCwgTlVMTCwgICAgICAgICAgICAgICAvKiBmaWx0ZXIsIGZp
 bHRlcmFyZyAqLw0KCQkJTUFYQlNJWkUsICAgICAgICAgICAgICAgICAvKiBt
 YXhzaXplICovDQoJCQlCVVNfU1BBQ0VfVU5SRVNUUklDVEVELCAgIC8qIG51
 bSBvZiBzZWdtZW50cyAqLw0KCQkJQlVTX1NQQUNFX01BWFNJWkVfMzJCSVQs
 ICAvKiBtYXggc2VnbWVudCBzaXplICovDQoJCQlCVVNfRE1BX0FMTE9DTk9X
 LCAgICAgICAgIC8qIGZsYWdzICovDQoJCQlOVUxMLCBOVUxMLCAgICAgICAg
 ICAgICAgIC8qIGxvY2tmdW5jLCBsb2NrYXJnICovDQoJCQkmc2MtPmJmZV9w
 YXJlbnRfdGFnKTsNCg0KCS8qIHRhZyBmb3IgVFggcmluZyAqLw0KCWVycm9y
 ID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5iZmVfcGFyZW50X3RhZywgQkZF
 X1RYX0xJU1RfU0laRSwgDQoJCQlCRkVfVFhfTElTVF9TSVpFLCBCVVNfU1BB
 Q0VfTUFYQUREUiwgIEJVU19TUEFDRV9NQVhBRERSLCANCgkJCU5VTEwsIE5V
 TEwsIEJGRV9UWF9MSVNUX1NJWkUsIDEsICBCVVNfU1BBQ0VfTUFYU0laRV8z
 MkJJVCwNCgkJCTAsIE5VTEwsIE5VTEwsICZzYy0+YmZlX3R4X3RhZyk7DQoN
 CglpZiAoZXJyb3IpIHsNCgkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBu
 b3QgYWxsb2NhdGUgZG1hIHRhZ1xuIik7DQoJCXJldHVybihFTk9NRU0pOw0K
 CX0NCg0KCS8qIHRhZyBmb3IgUlggcmluZyAqLw0KCWVycm9yID0gYnVzX2Rt
 YV90YWdfY3JlYXRlKHNjLT5iZmVfcGFyZW50X3RhZywgQkZFX1JYX0xJU1Rf
 U0laRSwgDQoJCQlCRkVfUlhfTElTVF9TSVpFLCBCVVNfU1BBQ0VfTUFYQURE
 UiwgQlVTX1NQQUNFX01BWEFERFIsIA0KCQkJTlVMTCwgTlVMTCwgQkZFX1JY
 X0xJU1RfU0laRSwgMSwgQlVTX1NQQUNFX01BWFNJWkVfMzJCSVQsIA0KCQkJ
 MCwgTlVMTCwgTlVMTCwgJnNjLT5iZmVfcnhfdGFnKTsNCg0KCWlmIChlcnJv
 cikgew0KCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBhbGxvY2F0
 ZSBkbWEgdGFnXG4iKTsNCgkJcmV0dXJuKEVOT01FTSk7DQoJfQ0KDQoJLyog
 dGFnIGZvciBtYnVmcyAqLw0KCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRl
 KHNjLT5iZmVfcGFyZW50X3RhZywgRVRIRVJfQUxJR04sIDAsDQoJCQlCVVNf
 U1BBQ0VfTUFYQUREUiwgQlVTX1NQQUNFX01BWEFERFIsIE5VTEwsIE5VTEws
 IE1DTEJZVEVTLCANCgkJCTEsIEJVU19TUEFDRV9NQVhTSVpFXzMyQklULCAw
 LCBOVUxMLCBOVUxMLCAmc2MtPmJmZV90YWcpOw0KDQoJaWYgKGVycm9yKSB7
 DQoJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIGRt
 YSB0YWdcbiIpOw0KCQlyZXR1cm4oRU5PTUVNKTsNCgl9DQoNCgkvKiBwcmUg
 YWxsb2NhdGUgZG1hbWFwcyBmb3IgUlggbGlzdCAqLw0KCWZvciAoaSA9IDA7
 IGkgPCBCRkVfUlhfTElTVF9DTlQ7IGkrKykgew0KCQllcnJvciA9IGJ1c19k
 bWFtYXBfY3JlYXRlKHNjLT5iZmVfdGFnLCAwLCAmc2MtPmJmZV9yeF9yaW5n
 W2ldLmJmZV9tYXApOw0KCQlpZiAoZXJyb3IpIHsNCgkJCWRldmljZV9wcmlu
 dGYoZGV2LCAiY2Fubm90IGNyZWF0ZSBETUEgbWFwIGZvciBSWFxuIik7DQoJ
 CQlyZXR1cm4oRU5PTUVNKTsNCgkJfQ0KCX0NCg0KCS8qIHByZSBhbGxvY2F0
 ZSBkbWFtYXBzIGZvciBUWCBsaXN0ICovDQoJZm9yIChpID0gMDsgaSA8IEJG
 RV9UWF9MSVNUX0NOVDsgaSsrKSB7DQoJCWVycm9yID0gYnVzX2RtYW1hcF9j
 cmVhdGUoc2MtPmJmZV90YWcsIDAsICZzYy0+YmZlX3R4X3JpbmdbaV0uYmZl
 X21hcCk7DQoJCWlmIChlcnJvcikgew0KCQkJZGV2aWNlX3ByaW50ZihkZXYs
 ICJjYW5ub3QgY3JlYXRlIERNQSBtYXAgZm9yIFRYXG4iKTsNCgkJCXJldHVy
 bihFTk9NRU0pOw0KCQl9DQoJfQ0KDQoJLyogQWxsb2MgZG1hIGZvciByeCBy
 aW5nICovDQoJZXJyb3IgPSBidXNfZG1hbWVtX2FsbG9jKHNjLT5iZmVfcnhf
 dGFnLCAodm9pZCAqKSZzYy0+YmZlX3J4X2xpc3QsDQoJCQlCVVNfRE1BX05P
 V0FJVCwgJnNjLT5iZmVfcnhfbWFwKTsNCg0KCWlmKGVycm9yKQ0KCQlyZXR1
 cm4oRU5PTUVNKTsNCg0KCWJ6ZXJvKHNjLT5iZmVfcnhfbGlzdCwgQkZFX1JY
 X0xJU1RfU0laRSk7DQoJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQoc2MtPmJm
 ZV9yeF90YWcsIHNjLT5iZmVfcnhfbWFwLA0KCQkJc2MtPmJmZV9yeF9saXN0
 LCBzaXplb2Yoc3RydWN0IGJmZV9kZXNjKSwNCgkJCWJmZV9kbWFfbWFwLCAm
 c2MtPmJmZV9yeF9kbWEsIDApOw0KDQoJaWYoZXJyb3IpDQoJCXJldHVybihF
 Tk9NRU0pOw0KDQoJYnVzX2RtYW1hcF9zeW5jKHNjLT5iZmVfcnhfdGFnLCBz
 Yy0+YmZlX3J4X21hcCwgQlVTX0RNQVNZTkNfUFJFUkVBRCk7DQoNCgllcnJv
 ciA9IGJ1c19kbWFtZW1fYWxsb2Moc2MtPmJmZV90eF90YWcsICh2b2lkICop
 JnNjLT5iZmVfdHhfbGlzdCwgDQoJCQlCVVNfRE1BX05PV0FJVCwgJnNjLT5i
 ZmVfdHhfbWFwKTsNCglpZiAoZXJyb3IpIA0KCQlyZXR1cm4oRU5PTUVNKTsN
 Cg0KDQoJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQoc2MtPmJmZV90eF90YWcs
 IHNjLT5iZmVfdHhfbWFwLCANCgkJCXNjLT5iZmVfdHhfbGlzdCwgc2l6ZW9m
 KHN0cnVjdCBiZmVfZGVzYyksIA0KCQkJYmZlX2RtYV9tYXAsICZzYy0+YmZl
 X3R4X2RtYSwgMCk7DQoJaWYoZXJyb3IpDQoJCXJldHVybihFTk9NRU0pOw0K
 DQoJYnplcm8oc2MtPmJmZV90eF9saXN0LCBCRkVfVFhfTElTVF9TSVpFKTsN
 CglidXNfZG1hbWFwX3N5bmMoc2MtPmJmZV90eF90YWcsIHNjLT5iZmVfdHhf
 bWFwLCBCVVNfRE1BU1lOQ19QUkVSRUFEKTsNCg0KCXJldHVybigwKTsNCn0N
 Cg0Kc3RhdGljIGludA0KYmZlX2F0dGFjaChkZXZpY2VfdCBkZXYpDQp7DQoJ
 c3RydWN0IGlmbmV0ICppZnA7DQoJc3RydWN0IGJmZV9zb2Z0YyAqc2M7DQoJ
 aW50IHVuaXQsIGVycm9yID0gMCwgcmlkOw0KDQoJc2MgPSBkZXZpY2VfZ2V0
 X3NvZnRjKGRldik7DQoJbXR4X2luaXQoJnNjLT5iZmVfbXR4LCBkZXZpY2Vf
 Z2V0X25hbWV1bml0KGRldiksIE1UWF9ORVRXT1JLX0xPQ0ssDQoJCQlNVFhf
 REVGIHwgTVRYX1JFQ1VSU0UpOw0KDQoJdW5pdCA9IGRldmljZV9nZXRfdW5p
 dChkZXYpOw0KCXNjLT5iZmVfZGV2ID0gZGV2Ow0KCXNjLT5iZmVfdW5pdCA9
 IHVuaXQ7DQoNCgkvKg0KCSAqIEhhbmRsZSBwb3dlciBtYW5hZ2VtZW50IG5v
 bnNlbnNlLg0KCSAqLw0KCWlmIChwY2lfZ2V0X3Bvd2Vyc3RhdGUoZGV2KSAh
 PSBQQ0lfUE9XRVJTVEFURV9EMCkgew0KCQl1X2ludDMyX3QgbWVtYmFzZSwg
 aXJxOw0KDQoJCS8qIFNhdmUgaW1wb3J0YW50IFBDSSBjb25maWcgZGF0YS4g
 Ki8NCgkJbWVtYmFzZSA9IHBjaV9yZWFkX2NvbmZpZyhkZXYsIEJGRV9QQ0lf
 TUVNTE8sIDQpOw0KCQlpcnEgPSBwY2lfcmVhZF9jb25maWcoZGV2LCBCRkVf
 UENJX0lOVExJTkUsIDQpOw0KDQoJCS8qIFJlc2V0IHRoZSBwb3dlciBzdGF0
 ZS4gKi8NCgkJcHJpbnRmKCJiZmUlZDogY2hpcCBpcyBpcyBpbiBEJWQgcG93
 ZXIgbW9kZSAtLSBzZXR0aW5nIHRvIEQwXG4iLCANCgkJCQlzYy0+YmZlX3Vu
 aXQsIHBjaV9nZXRfcG93ZXJzdGF0ZShkZXYpKTsNCg0KCQlwY2lfc2V0X3Bv
 d2Vyc3RhdGUoZGV2LCBQQ0lfUE9XRVJTVEFURV9EMCk7DQoNCgkJLyogUmVz
 dG9yZSBQQ0kgY29uZmlnIGRhdGEuICovDQoJCXBjaV93cml0ZV9jb25maWco
 ZGV2LCBCRkVfUENJX01FTUxPLCBtZW1iYXNlLCA0KTsNCgkJcGNpX3dyaXRl
 X2NvbmZpZyhkZXYsIEJGRV9QQ0lfSU5UTElORSwgaXJxLCA0KTsNCgl9DQoN
 CgkvKg0KCSAqIE1hcCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMuDQoJICov
 DQoJcGNpX2VuYWJsZV9idXNtYXN0ZXIoZGV2KTsNCg0KCXJpZCA9IEJGRV9Q
 Q0lfTUVNTE87DQoJc2MtPmJmZV9yZXMgPSBidXNfYWxsb2NfcmVzb3VyY2Uo
 ZGV2LCBTWVNfUkVTX01FTU9SWSwgJnJpZCwgMCwgfjAsIDEsIA0KCQkJUkZf
 QUNUSVZFKTsNCglpZiAoc2MtPmJmZV9yZXMgPT0gTlVMTCkgew0KCQlwcmlu
 dGYgKCJiZmUlZDogY291bGRuJ3QgbWFwIG1lbW9yeVxuIiwgdW5pdCk7DQoJ
 CWVycm9yID0gRU5YSU87DQoJCWdvdG8gZmFpbDsNCgl9DQoNCglzYy0+YmZl
 X2J0YWcgPSBybWFuX2dldF9idXN0YWcoc2MtPmJmZV9yZXMpOw0KCXNjLT5i
 ZmVfYmhhbmRsZSA9IHJtYW5fZ2V0X2J1c2hhbmRsZShzYy0+YmZlX3Jlcyk7
 DQoJc2MtPmJmZV92aGFuZGxlID0gKHZtX29mZnNldF90KXJtYW5fZ2V0X3Zp
 cnR1YWwoc2MtPmJmZV9yZXMpOw0KDQoJLyogQWxsb2NhdGUgaW50ZXJydXB0
 ICovDQoJcmlkID0gMDsNCg0KCXNjLT5iZmVfaXJxID0gYnVzX2FsbG9jX3Jl
 c291cmNlKGRldiwgU1lTX1JFU19JUlEsICZyaWQsIDAsIH4wLCAxLA0KCQkJ
 UkZfU0hBUkVBQkxFIHwgUkZfQUNUSVZFKTsNCglpZiAoc2MtPmJmZV9pcnEg
 PT0gTlVMTCkgew0KCQlwcmludGYoImJmZSVkOiBjb3VsZG4ndCBtYXAgaW50
 ZXJydXB0XG4iLCB1bml0KTsNCgkJZXJyb3IgPSBFTlhJTzsNCgkJZ290byBm
 YWlsOw0KCX0NCg0KCWlmIChiZmVfZG1hX2FsbG9jKGRldikpIHsNCgkJcHJp
 bnRmKCJiZmUlZDogZmFpbGVkIHRvIGFsbG9jYXRlIERNQSByZXNvdXJjZXNc
 biIsIHNjLT5iZmVfdW5pdCk7DQoJCWJmZV9yZWxlYXNlX3Jlc291cmNlcyhz
 Yyk7DQoJCWVycm9yID0gRU5YSU87DQoJCWdvdG8gZmFpbDsNCgl9DQoNCgkv
 KiBTZXQgdXAgaWZuZXQgc3RydWN0dXJlICovDQoJaWZwID0gJnNjLT5hcnBj
 b20uYWNfaWY7DQoJaWZwLT5pZl9zb2Z0YyA9IHNjOw0KCWlmX2luaXRuYW1l
 KGlmcCwgZGV2aWNlX2dldF9uYW1lKGRldiksIGRldmljZV9nZXRfdW5pdChk
 ZXYpKTsNCglpZnAtPmlmX2ZsYWdzID0gSUZGX0JST0FEQ0FTVCB8IElGRl9T
 SU1QTEVYIHwgSUZGX01VTFRJQ0FTVDsNCglpZnAtPmlmX2lvY3RsID0gYmZl
 X2lvY3RsOw0KCWlmcC0+aWZfb3V0cHV0ID0gZXRoZXJfb3V0cHV0Ow0KCWlm
 cC0+aWZfc3RhcnQgPSBiZmVfc3RhcnQ7DQoJaWZwLT5pZl93YXRjaGRvZyA9
 IGJmZV93YXRjaGRvZzsNCglpZnAtPmlmX2luaXQgPSBiZmVfaW5pdDsNCglp
 ZnAtPmlmX210dSA9IEVUSEVSTVRVOw0KCWlmcC0+aWZfYmF1ZHJhdGUgPSAx
 MDAwMDAwMDsNCglpZnAtPmlmX3NuZC5pZnFfbWF4bGVuID0gQkZFX1RYX1FM
 RU47DQoNCgliZmVfZ2V0X2NvbmZpZyhzYyk7DQoNCglwcmludGYoImJmZSVk
 OiBFdGhlcm5ldCBhZGRyZXNzOiAlNkRcbiIsIHVuaXQsIHNjLT5hcnBjb20u
 YWNfZW5hZGRyLCAiOiIpOw0KDQoJLyogUmVzZXQgdGhlIGNoaXAgYW5kIHR1
 cm4gb24gdGhlIFBIWSAqLw0KCWJmZV9jaGlwX3Jlc2V0KHNjKTsNCg0KCWlm
 IChtaWlfcGh5X3Byb2JlKGRldiwgJnNjLT5iZmVfbWlpYnVzLA0KCQkJCWJm
 ZV9pZm1lZGlhX3VwZCwgYmZlX2lmbWVkaWFfc3RzKSkgew0KCQlwcmludGYo
 ImJmZSVkOiBNSUkgd2l0aG91dCBhbnkgUEhZIVxuIiwgc2MtPmJmZV91bml0
 KTsNCgkJZXJyb3IgPSBFTlhJTzsNCgkJZ290byBmYWlsOw0KCX0NCg0KCWV0
 aGVyX2lmYXR0YWNoKGlmcCwgc2MtPmFycGNvbS5hY19lbmFkZHIpOw0KCWNh
 bGxvdXRfaGFuZGxlX2luaXQoJnNjLT5iZmVfc3RhdF9jaCk7DQoNCgkvKg0K
 CSAqIEhvb2sgaW50ZXJydXB0IGxhc3QgdG8gYXZvaWQgaGF2aW5nIHRvIGxv
 Y2sgc29mdGMNCgkgKi8NCgllcnJvciA9IGJ1c19zZXR1cF9pbnRyKGRldiwg
 c2MtPmJmZV9pcnEsIElOVFJfVFlQRV9ORVQsDQoJCQliZmVfaW50ciwgc2Ms
 ICZzYy0+YmZlX2ludHJoYW5kKTsNCg0KCWlmIChlcnJvcikgew0KCQliZmVf
 cmVsZWFzZV9yZXNvdXJjZXMoc2MpOw0KCQlwcmludGYoImJmZSVkOiBjb3Vs
 ZG4ndCBzZXQgdXAgaXJxXG4iLCB1bml0KTsNCgkJZ290byBmYWlsOw0KCX0N
 CmZhaWw6DQoJaWYoZXJyb3IpDQoJCWJmZV9yZWxlYXNlX3Jlc291cmNlcyhz
 Yyk7DQoJcmV0dXJuKGVycm9yKTsNCn0NCg0Kc3RhdGljIGludA0KYmZlX2Rl
 dGFjaChkZXZpY2VfdCBkZXYpDQp7DQoJc3RydWN0IGJmZV9zb2Z0YyAqc2M7
 DQoJc3RydWN0IGlmbmV0ICppZnA7DQoNCglzYyA9IGRldmljZV9nZXRfc29m
 dGMoZGV2KTsNCg0KCUtBU1NFUlQobXR4X2luaXRpYWxpemVkKCZzYy0+YmZl
 X210eCksICgiYmZlIG11dGV4IG5vdCBpbml0aWFsaXplZCIpKTsNCglCRkVf
 TE9DSyhzY3ApOw0KDQoJaWZwID0gJnNjLT5hcnBjb20uYWNfaWY7DQoNCglp
 ZiAoZGV2aWNlX2lzX2F0dGFjaGVkKGRldikpIHsNCgkJYmZlX3N0b3Aoc2Mp
 Ow0KCQlldGhlcl9pZmRldGFjaChpZnApOw0KCX0NCg0KCWJmZV9jaGlwX3Jl
 c2V0KHNjKTsNCg0KCWJ1c19nZW5lcmljX2RldGFjaChkZXYpOw0KCWlmKHNj
 LT5iZmVfbWlpYnVzICE9IE5VTEwpDQoJCWRldmljZV9kZWxldGVfY2hpbGQo
 ZGV2LCBzYy0+YmZlX21paWJ1cyk7DQoNCgliZmVfcmVsZWFzZV9yZXNvdXJj
 ZXMoc2MpOw0KCUJGRV9VTkxPQ0soc2MpOw0KCW10eF9kZXN0cm95KCZzYy0+
 YmZlX210eCk7DQoNCglyZXR1cm4oMCk7DQp9DQoNCi8qDQogKiBTdG9wIGFs
 bCBjaGlwIEkvTyBzbyB0aGF0IHRoZSBrZXJuZWwncyBwcm9iZSByb3V0aW5l
 cyBkb24ndA0KICogZ2V0IGNvbmZ1c2VkIGJ5IGVycmFudCBETUFzIHdoZW4g
 cmVib290aW5nLg0KICovDQpzdGF0aWMgdm9pZA0KYmZlX3NodXRkb3duKGRl
 dmljZV90IGRldikNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpzYzsNCg0KCXNj
 ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOw0KCUJGRV9MT0NLKHNjKTsNCgli
 ZmVfc3RvcChzYyk7IA0KDQoJQkZFX1VOTE9DSyhzYyk7DQoJcmV0dXJuOw0K
 fQ0KDQpzdGF0aWMgaW50DQpiZmVfbWlpYnVzX3JlYWRyZWcoZGV2aWNlX3Qg
 ZGV2LCBpbnQgcGh5LCBpbnQgcmVnKQ0Kew0KCXN0cnVjdCBiZmVfc29mdGMg
 KnNjOw0KCXVfaW50MzJfdCByZXQ7DQoNCglzYyA9IGRldmljZV9nZXRfc29m
 dGMoZGV2KTsNCglpZihwaHkgIT0gc2MtPmJmZV9waHlhZGRyKQ0KCQlyZXR1
 cm4oMCk7DQoJYmZlX3JlYWRwaHkoc2MsIHJlZywgJnJldCk7DQoNCglyZXR1
 cm4ocmV0KTsNCn0NCg0Kc3RhdGljIGludA0KYmZlX21paWJ1c193cml0ZXJl
 ZyhkZXZpY2VfdCBkZXYsIGludCBwaHksIGludCByZWcsIGludCB2YWwpDQp7
 DQoJc3RydWN0IGJmZV9zb2Z0YyAqc2M7DQoNCglzYyA9IGRldmljZV9nZXRf
 c29mdGMoZGV2KTsNCglpZihwaHkgIT0gc2MtPmJmZV9waHlhZGRyKQ0KCQly
 ZXR1cm4oMCk7DQoJYmZlX3dyaXRlcGh5KHNjLCByZWcsIHZhbCk7IA0KDQoJ
 cmV0dXJuKDApOw0KfQ0KDQpzdGF0aWMgdm9pZA0KYmZlX21paWJ1c19zdGF0
 Y2hnKGRldmljZV90IGRldikNCnsNCglyZXR1cm47DQp9DQoNCnN0YXRpYyB2
 b2lkDQpiZmVfdHhfcmluZ19mcmVlKHN0cnVjdCBiZmVfc29mdGMgKnNjKQ0K
 ew0KICAgIGludCBpOw0KICAgIA0KICAgIGZvcihpID0gMDsgaSA8IEJGRV9U
 WF9MSVNUX0NOVDsgaSsrKSB7DQogICAgICAgIGlmKHNjLT5iZmVfdHhfcmlu
 Z1tpXS5iZmVfbWJ1ZiAhPSBOVUxMKSB7DQogICAgICAgICAgICBtX2ZyZWVt
 KHNjLT5iZmVfdHhfcmluZ1tpXS5iZmVfbWJ1Zik7DQogICAgICAgICAgICBz
 Yy0+YmZlX3R4X3JpbmdbaV0uYmZlX21idWYgPSBOVUxMOw0KICAgICAgICAg
 ICAgYnVzX2RtYW1hcF91bmxvYWQoc2MtPmJmZV90YWcsDQogICAgICAgICAg
 ICAgICAgICAgIHNjLT5iZmVfdHhfcmluZ1tpXS5iZmVfbWFwKTsNCiAgICAg
 ICAgICAgIGJ1c19kbWFtYXBfZGVzdHJveShzYy0+YmZlX3RhZywNCiAgICAg
 ICAgICAgICAgICAgICAgc2MtPmJmZV90eF9yaW5nW2ldLmJmZV9tYXApOw0K
 ICAgICAgICB9DQogICAgfQ0KICAgIGJ6ZXJvKHNjLT5iZmVfdHhfbGlzdCwg
 QkZFX1RYX0xJU1RfU0laRSk7DQogICAgYnVzX2RtYW1hcF9zeW5jKHNjLT5i
 ZmVfdHhfdGFnLCBzYy0+YmZlX3R4X21hcCwgQlVTX0RNQVNZTkNfUFJFUkVB
 RCk7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfcnhfcmluZ19mcmVlKHN0cnVj
 dCBiZmVfc29mdGMgKnNjKQ0Kew0KCWludCBpOw0KDQoJZm9yIChpID0gMDsg
 aSA8IEJGRV9SWF9MSVNUX0NOVDsgaSsrKSB7DQoJCWlmIChzYy0+YmZlX3J4
 X3JpbmdbaV0uYmZlX21idWYgIT0gTlVMTCkgew0KCQkJbV9mcmVlbShzYy0+
 YmZlX3J4X3JpbmdbaV0uYmZlX21idWYpOw0KCQkJc2MtPmJmZV9yeF9yaW5n
 W2ldLmJmZV9tYnVmID0gTlVMTDsNCgkJCWJ1c19kbWFtYXBfdW5sb2FkKHNj
 LT5iZmVfdGFnLA0KCQkJCQlzYy0+YmZlX3J4X3JpbmdbaV0uYmZlX21hcCk7
 DQoJCQlidXNfZG1hbWFwX2Rlc3Ryb3koc2MtPmJmZV90YWcsDQoJCQkJCXNj
 LT5iZmVfcnhfcmluZ1tpXS5iZmVfbWFwKTsNCgkJfQ0KCX0NCgliemVybyhz
 Yy0+YmZlX3J4X2xpc3QsIEJGRV9SWF9MSVNUX1NJWkUpOw0KCWJ1c19kbWFt
 YXBfc3luYyhzYy0+YmZlX3J4X3RhZywgc2MtPmJmZV9yeF9tYXAsIEJVU19E
 TUFTWU5DX1BSRVJFQUQpOw0KfQ0KDQoNCnN0YXRpYyBpbnQgDQpiZmVfbGlz
 dF9yeF9pbml0KHN0cnVjdCBiZmVfc29mdGMgKnNjKQ0Kew0KCWludCBpOw0K
 DQoJZm9yKGkgPSAwOyBpIDwgQkZFX1JYX0xJU1RfQ05UOyBpKyspIHsNCgkJ
 aWYoYmZlX2xpc3RfbmV3YnVmKHNjLCBpLCBOVUxMKSA9PSBFTk9CVUZTKSAN
 CgkJCXJldHVybiBFTk9CVUZTOw0KCX0NCg0KCWJ1c19kbWFtYXBfc3luYyhz
 Yy0+YmZlX3J4X3RhZywgc2MtPmJmZV9yeF9tYXAsIEJVU19ETUFTWU5DX1BS
 RVJFQUQpOw0KCUNTUl9XUklURV80KHNjLCBCRkVfRE1BUlhfUFRSLCAoaSAq
 IHNpemVvZihzdHJ1Y3QgYmZlX2Rlc2MpKSk7DQoNCglzYy0+YmZlX3J4X2Nv
 bnMgPSAwOw0KDQoJcmV0dXJuKDApOw0KfQ0KDQpzdGF0aWMgaW50DQpiZmVf
 bGlzdF9uZXdidWYoc3RydWN0IGJmZV9zb2Z0YyAqc2MsIGludCBjLCBzdHJ1
 Y3QgbWJ1ZiAqbSkNCnsNCglzdHJ1Y3QgYmZlX3J4aGVhZGVyICpyeF9oZWFk
 ZXI7DQoJc3RydWN0IGJmZV9kZXNjICpkOw0KCXN0cnVjdCBiZmVfZGF0YSAq
 cjsNCgl1X2ludDMyX3QgY3RybDsNCg0KCWlmICgoYyA8IDApIHx8IChjID49
 IEJGRV9SWF9MSVNUX0NOVCkpDQoJCXJldHVybihFSU5WQUwpOw0KDQoJaWYo
 bSA9PSBOVUxMKSB7DQoJCW0gPSBtX2dldGNsKE1fRE9OVFdBSVQsIE1UX0RB
 VEEsIE1fUEtUSERSKTsNCgkJaWYobSA9PSBOVUxMKQ0KCQkJcmV0dXJuKEVO
 T0JVRlMpOw0KCQltLT5tX2xlbiA9IG0tPm1fcGt0aGRyLmxlbiA9IE1DTEJZ
 VEVTOw0KCX0NCgllbHNlDQoJCW0tPm1fZGF0YSA9IG0tPm1fZXh0LmV4dF9i
 dWY7DQoNCglyeF9oZWFkZXIgPSBtdG9kKG0sIHN0cnVjdCBiZmVfcnhoZWFk
 ZXIgKik7DQoJcnhfaGVhZGVyLT5sZW4gPSAwOw0KCXJ4X2hlYWRlci0+Zmxh
 Z3MgPSAwOw0KDQoJLyogTWFwIHRoZSBtYnVmIGludG8gRE1BICovDQoJc2Mt
 PmJmZV9yeF9jbnQgPSBjOw0KCWQgPSAmc2MtPmJmZV9yeF9saXN0W2NdOw0K
 CXIgPSAmc2MtPmJmZV9yeF9yaW5nW2NdOw0KCWJ1c19kbWFtYXBfbG9hZChz
 Yy0+YmZlX3RhZywgci0+YmZlX21hcCwgbXRvZChtLCB2b2lkICopLCANCgkJ
 CU1DTEJZVEVTLCBiZmVfZG1hX21hcF9kZXNjLCBkLCAwKTsNCglidXNfZG1h
 bWFwX3N5bmMoc2MtPmJmZV90YWcsIHItPmJmZV9tYXAsIEJVU19ETUFTWU5D
 X1BSRVdSSVRFKTsNCg0KCWN0cmwgPSBFVEhFUl9NQVhfTEVOICsgMzI7DQoN
 CglpZihjID09IEJGRV9SWF9MSVNUX0NOVCAtIDEpDQoJCWN0cmwgfD0gQkZF
 X0RFU0NfRU9UOw0KDQoJZC0+YmZlX2N0cmwgPSBjdHJsOw0KCXItPmJmZV9t
 YnVmID0gbTsNCglidXNfZG1hbWFwX3N5bmMoc2MtPmJmZV9yeF90YWcsIHNj
 LT5iZmVfcnhfbWFwLCBCVVNfRE1BU1lOQ19QUkVSRUFEKTsNCglyZXR1cm4o
 MCk7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfZ2V0X2NvbmZpZyhzdHJ1Y3Qg
 YmZlX3NvZnRjICpzYykNCnsNCgl1X2ludDhfdCBlZXByb21bMTI4XTsNCg0K
 CWJmZV9yZWFkX2VlcHJvbShzYywgZWVwcm9tKTsNCg0KCXNjLT5hcnBjb20u
 YWNfZW5hZGRyWzBdID0gZWVwcm9tWzc5XTsNCglzYy0+YXJwY29tLmFjX2Vu
 YWRkclsxXSA9IGVlcHJvbVs3OF07DQoJc2MtPmFycGNvbS5hY19lbmFkZHJb
 Ml0gPSBlZXByb21bODFdOw0KCXNjLT5hcnBjb20uYWNfZW5hZGRyWzNdID0g
 ZWVwcm9tWzgwXTsNCglzYy0+YXJwY29tLmFjX2VuYWRkcls0XSA9IGVlcHJv
 bVs4M107DQoJc2MtPmFycGNvbS5hY19lbmFkZHJbNV0gPSBlZXByb21bODJd
 Ow0KDQoJc2MtPmJmZV9waHlhZGRyID0gZWVwcm9tWzkwXSAmIDB4MWY7DQoJ
 c2MtPmJmZV9tZGNfcG9ydCA9IChlZXByb21bOTBdID4+IDE0KSAmIDB4MTsN
 Cg0KCXNjLT5iZmVfY29yZV91bml0ID0gMDsgDQoJc2MtPmJmZV9kbWFfb2Zm
 c2V0ID0gQkZFX1BDSV9ETUE7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfcGNp
 X3NldHVwKHN0cnVjdCBiZmVfc29mdGMgKnNjLCB1X2ludDMyX3QgY29yZXMp
 DQp7DQoJdV9pbnQzMl90IGJhcl9vcmlnLCBwY2lfcmV2LCB2YWw7DQoNCgli
 YXJfb3JpZyA9IHBjaV9yZWFkX2NvbmZpZyhzYy0+YmZlX2RldiwgQkZFX0JB
 UjBfV0lOLCA0KTsNCglwY2lfd3JpdGVfY29uZmlnKHNjLT5iZmVfZGV2LCBC
 RkVfQkFSMF9XSU4sIEJGRV9SRUdfUENJLCA0KTsNCglwY2lfcmV2ID0gQ1NS
 X1JFQURfNChzYywgQkZFX1NCSURISUdIKSAmIEJGRV9SQ19NQVNLOw0KDQoJ
 dmFsID0gQ1NSX1JFQURfNChzYywgQkZFX1NCSU5UVkVDKTsNCgl2YWwgfD0g
 Y29yZXM7DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9TQklOVFZFQywgdmFsKTsN
 Cg0KCXZhbCA9IENTUl9SRUFEXzQoc2MsIEJGRV9TU0JfUENJX1RSQU5TXzIp
 Ow0KCXZhbCB8PSBCRkVfU1NCX1BDSV9QUkVGIHwgQkZFX1NTQl9QQ0lfQlVS
 U1Q7DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9TU0JfUENJX1RSQU5TXzIsIHZh
 bCk7DQoNCglwY2lfd3JpdGVfY29uZmlnKHNjLT5iZmVfZGV2LCBCRkVfQkFS
 MF9XSU4sIGJhcl9vcmlnLCA0KTsNCn0NCg0Kc3RhdGljIHZvaWQgDQpiZmVf
 Y2xlYXJfc3RhdHMoc3RydWN0IGJmZV9zb2Z0YyAqc2MpDQp7DQoJdV9sb25n
 IHJlZzsNCg0KCUJGRV9MT0NLKHNjKTsNCg0KCUNTUl9XUklURV80KHNjLCBC
 RkVfTUlCX0NUUkwsIEJGRV9NSUJfQ0xSX09OX1JFQUQpOw0KCWZvciAocmVn
 ID0gQkZFX1RYX0dPT0RfTzsgcmVnIDw9IEJGRV9UWF9QQVVTRTsgcmVnICs9
 IDQpDQoJCUNTUl9SRUFEXzQoc2MsIHJlZyk7DQoJZm9yIChyZWcgPSBCRkVf
 UlhfR09PRF9POyByZWcgPD0gQkZFX1JYX05QQVVTRTsgcmVnICs9IDQpDQoJ
 CUNTUl9SRUFEXzQoc2MsIHJlZyk7DQoNCglCRkVfVU5MT0NLKHNjKTsNCn0N
 Cg0Kc3RhdGljIGludCANCmJmZV9yZXNldHBoeShzdHJ1Y3QgYmZlX3NvZnRj
 ICpzYykNCnsNCgl1X2ludDMyX3QgdmFsOw0KDQoJQkZFX0xPQ0soc2MpOw0K
 CWJmZV93cml0ZXBoeShzYywgMCwgQk1DUl9SRVNFVCk7DQoJREVMQVkoMTAw
 KTsNCgliZmVfcmVhZHBoeShzYywgMCwgJnZhbCk7DQoJaWYgKHZhbCAmIEJN
 Q1JfUkVTRVQpIHsNCgkJcHJpbnRmKCJiZmUlZDogUEhZIFJlc2V0IHdvdWxk
 IG5vdCBjb21wbGV0ZS5cbiIsIHNjLT5iZmVfdW5pdCk7DQoJCUJGRV9VTkxP
 Q0soc2MpOw0KCQlyZXR1cm4gRU5YSU87DQoJfQ0KCUJGRV9VTkxPQ0soc2Mp
 Ow0KCXJldHVybiAwOw0KfQ0KDQpzdGF0aWMgdm9pZA0KYmZlX2NoaXBfaGFs
 dChzdHJ1Y3QgYmZlX3NvZnRjICpzYykNCnsNCglCRkVfTE9DSyhzYyk7DQoJ
 LyogZGlzYWJsZSBpbnRlcnJ1cHRzIC0gbm90IHRoYXQgaXQgYWN0dWFsbHkg
 ZG9lcy4uKi8NCglDU1JfV1JJVEVfNChzYywgQkZFX0lNQVNLLCAwKTsNCglD
 U1JfUkVBRF80KHNjLCBCRkVfSU1BU0spOw0KDQoJQ1NSX1dSSVRFXzQoc2Ms
 IEJGRV9FTkVUX0NUUkwsIEJGRV9FTkVUX0RJU0FCTEUpOw0KCWJmZV93YWl0
 X2JpdChzYywgQkZFX0VORVRfQ1RSTCwgQkZFX0VORVRfRElTQUJMRSwgMjAw
 LCAxKTsNCg0KCUNTUl9XUklURV80KHNjLCBCRkVfRE1BUlhfQ1RSTCwgMCk7
 DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9ETUFUWF9DVFJMLCAwKTsNCglERUxB
 WSgxMCk7DQoNCglCRkVfVU5MT0NLKHNjKTsNCn0NCg0Kc3RhdGljIHZvaWQN
 CmJmZV9jaGlwX3Jlc2V0KHN0cnVjdCBiZmVfc29mdGMgKnNjKQ0Kew0KCXVf
 aW50MzJfdCB2YWw7ICAgIA0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJLyogU2V0
 IHRoZSBpbnRlcnJ1cHQgdmVjdG9yIGZvciB0aGUgZW5ldCBjb3JlICovDQoJ
 YmZlX3BjaV9zZXR1cChzYywgQkZFX0lOVFZFQ19FTkVUMCk7DQoNCgkvKiBp
 cyBjb3JlIHVwPyAqLw0KCXZhbCA9IENTUl9SRUFEXzQoc2MsIEJGRV9TQlRN
 U0xPVykgJiAoQkZFX1JFU0VUIHwgQkZFX1JFSkVDVCB8IEJGRV9DTE9DSyk7
 DQoJaWYgKHZhbCA9PSBCRkVfQ0xPQ0spIHsNCgkJLyogSXQgaXMsIHNvIHNo
 dXQgaXQgZG93biAqLw0KCQlDU1JfV1JJVEVfNChzYywgQkZFX1JDVl9MQVpZ
 LCAwKTsNCgkJQ1NSX1dSSVRFXzQoc2MsIEJGRV9FTkVUX0NUUkwsIEJGRV9F
 TkVUX0RJU0FCTEUpOw0KCQliZmVfd2FpdF9iaXQoc2MsIEJGRV9FTkVUX0NU
 UkwsIEJGRV9FTkVUX0RJU0FCTEUsIDEwMCwgMSk7DQoJCUNTUl9XUklURV80
 KHNjLCBCRkVfRE1BVFhfQ1RSTCwgMCk7DQoJCXNjLT5iZmVfdHhfY250ID0g
 c2MtPmJmZV90eF9wcm9kID0gc2MtPmJmZV90eF9jb25zID0gMDsNCgkJaWYg
 KENTUl9SRUFEXzQoc2MsIEJGRV9ETUFSWF9TVEFUKSAmIEJGRV9TVEFUX0VN
 QVNLKSANCgkJCWJmZV93YWl0X2JpdChzYywgQkZFX0RNQVJYX1NUQVQsIEJG
 RV9TVEFUX1NJRExFLCAxMDAsIDApOw0KCQlDU1JfV1JJVEVfNChzYywgQkZF
 X0RNQVJYX0NUUkwsIDApOw0KCQlzYy0+YmZlX3J4X3Byb2QgPSBzYy0+YmZl
 X3J4X2NvbnMgPSAwOw0KCX0NCg0KCWJmZV9jb3JlX3Jlc2V0KHNjKTsNCgli
 ZmVfY2xlYXJfc3RhdHMoc2MpOw0KDQoJLyoNCgkgKiBXZSB3YW50IHRoZSBw
 aHkgcmVnaXN0ZXJzIHRvIGJlIGFjY2Vzc2libGUgZXZlbiB3aGVuDQoJICog
 dGhlIGRyaXZlciBpcyAiZG93bmVkIiBzbyBpbml0aWFsaXplIE1EQyBwcmVh
 bWJsZSwgZnJlcXVlbmN5LA0KCSAqIGFuZCB3aGV0aGVyIGludGVybmFsIG9y
 IGV4dGVybmFsIHBoeSBoZXJlLg0KCSAqLw0KDQoJLyogNDQwMiBoYXMgNjIu
 NU1oeiBTQiBjbG9jayBhbmQgaW50ZXJuYWwgcGh5ICovDQoJQ1NSX1dSSVRF
 XzQoc2MsIEJGRV9NRElPX0NUUkwsIDB4OGQpOw0KDQoJLyogSW50ZXJuYWwg
 b3IgZXh0ZXJuYWwgUEhZPyAqLw0KCXZhbCA9IENTUl9SRUFEXzQoc2MsIEJG
 RV9ERVZDVFJMKTsNCglpZighKHZhbCAmIEJGRV9JUFApKSANCgkJQ1NSX1dS
 SVRFXzQoc2MsIEJGRV9FTkVUX0NUUkwsIEJGRV9FTkVUX0VQU0VMKTsNCgll
 bHNlIGlmKENTUl9SRUFEXzQoc2MsIEJGRV9ERVZDVFJMKSAmIEJGRV9FUFIp
 IHsNCgkJQkZFX0FORChzYywgQkZFX0RFVkNUUkwsIH5CRkVfRVBSKTsNCgkJ
 REVMQVkoMTAwKTsNCgl9DQoNCgkvKiBFbmFibGUgQ1JDMzIgZ2VuZXJhdGlv
 biBhbmQgc2V0IHByb3BlciBMRUQgbW9kZXMgKi8NCglCRkVfT1Ioc2MsIEJG
 RV9NQUNfQ1RSTCwgQkZFX0NUUkxfQ1JDMzJfRU5BQiB8IEJGRV9DVFJMX0xF
 RCk7DQoNCgkvKiBSZXNldC9DbGVhciBwb3dlcmRvd24gYml0ICAqLw0KCUJG
 RV9BTkQoc2MsIEJGRV9NQUNfQ1RSTCwgfkJGRV9DVFJMX1BET1dOKTsNCg0K
 CUNTUl9XUklURV80KHNjLCBCRkVfUkNWX0xBWlksICgoMSA8PCBCRkVfTEFa
 WV9GQ19TSElGVCkgJiANCgkJCQlCRkVfTEFaWV9GQ19NQVNLKSk7DQoNCgkv
 KiANCgkgKiBXZSBkb24ndCB3YW50IGxhenkgaW50ZXJydXB0cywgc28ganVz
 dCBzZW5kIHRoZW0gYXQgdGhlIGVuZCBvZiBhIGZyYW1lLA0KCSAqIHBsZWFz
 ZSANCgkgKi8NCglCRkVfT1Ioc2MsIEJGRV9SQ1ZfTEFaWSwgMCk7DQoNCgkv
 KiBTZXQgbWF4IGxlbmd0aHMsIGFjY291bnRpbmcgZm9yIFZMQU4gdGFncyAq
 Lw0KCUNTUl9XUklURV80KHNjLCBCRkVfUlhNQVhMRU4sIEVUSEVSX01BWF9M
 RU4rMzIpOw0KCUNTUl9XUklURV80KHNjLCBCRkVfVFhNQVhMRU4sIEVUSEVS
 X01BWF9MRU4rMzIpOw0KDQoJLyogU2V0IHdhdGVybWFyayBYWFggLSBtYWdp
 YyAqLw0KCUNTUl9XUklURV80KHNjLCBCRkVfVFhfV01BUkssIDU2KTsNCg0K
 CS8qIA0KCSAqIEluaXRpYWxpc2UgRE1BIGNoYW5uZWxzIC0gbm90IGZvcmdl
 dHRpbmcgZG1hIGFkZHJlc3NlcyBuZWVkIHRvIGJlIGFkZGVkDQoJICogdG8g
 QkZFX1BDSV9ETUEgDQoJICovDQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9ETUFU
 WF9DVFJMLCBCRkVfVFhfQ1RSTF9FTkFCTEUpOw0KCUNTUl9XUklURV80KHNj
 LCBCRkVfRE1BVFhfQUREUiwgc2MtPmJmZV90eF9kbWEgKyBCRkVfUENJX0RN
 QSk7DQoNCglDU1JfV1JJVEVfNChzYywgQkZFX0RNQVJYX0NUUkwsIChCRkVf
 UlhfT0ZGU0VUIDw8IEJGRV9SWF9DVFJMX1JPU0hJRlQpIHwgDQoJCQlCRkVf
 UlhfQ1RSTF9FTkFCTEUpOw0KCUNTUl9XUklURV80KHNjLCBCRkVfRE1BUlhf
 QUREUiwgc2MtPmJmZV9yeF9kbWEgKyBCRkVfUENJX0RNQSk7DQoNCgliZmVf
 cmVzZXRwaHkoc2MpOw0KCWJmZV9zZXR1cHBoeShzYyk7DQoNCglCRkVfVU5M
 T0NLKHNjKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmJmZV9jb3JlX2Rpc2FibGUo
 c3RydWN0IGJmZV9zb2Z0YyAqc2MpDQp7DQoJaWYoKENTUl9SRUFEXzQoc2Ms
 IEJGRV9TQlRNU0xPVykpICYgQkZFX1JFU0VUKQ0KCQlyZXR1cm47DQoNCgkv
 KiANCgkgKiBTZXQgcmVqZWN0LCB3YWl0IGZvciBpdCBzZXQsIHRoZW4gd2Fp
 dCBmb3IgdGhlIGNvcmUgdG8gc3RvcCBiZWluZyBidXN5DQoJICogVGhlbiBz
 ZXQgcmVzZXQgYW5kIHJlamVjdCBhbmQgZW5hYmxlIHRoZSBjbG9ja3MNCgkg
 Ki8NCglDU1JfV1JJVEVfNChzYywgQkZFX1NCVE1TTE9XLCAoQkZFX1JFSkVD
 VCB8IEJGRV9DTE9DSykpOw0KCWJmZV93YWl0X2JpdChzYywgQkZFX1NCVE1T
 TE9XLCBCRkVfUkVKRUNULCAxMDAwLCAwKTsNCgliZmVfd2FpdF9iaXQoc2Ms
 IEJGRV9TQlRNU0hJR0gsIEJGRV9CVVNZLCAxMDAwLCAxKTsNCglDU1JfV1JJ
 VEVfNChzYywgQkZFX1NCVE1TTE9XLCAoQkZFX0ZHQyB8IEJGRV9DTE9DSyB8
 IEJGRV9SRUpFQ1QgfA0KCQkJCUJGRV9SRVNFVCkpOw0KCUNTUl9SRUFEXzQo
 c2MsIEJGRV9TQlRNU0xPVyk7DQoJREVMQVkoMTApOw0KCS8qIExlYXZlIHJl
 c2V0IGFuZCByZWplY3Qgc2V0ICovDQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9T
 QlRNU0xPVywgKEJGRV9SRUpFQ1QgfCBCRkVfUkVTRVQpKTsNCglERUxBWSgx
 MCk7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfY29yZV9yZXNldChzdHJ1Y3Qg
 YmZlX3NvZnRjICpzYykNCnsNCgl1X2ludDMyX3QgdmFsOw0KDQoJLyogRGlz
 YWJsZSB0aGUgY29yZSAqLw0KCWJmZV9jb3JlX2Rpc2FibGUoc2MpOw0KDQoJ
 LyogYW5kIGJyaW5nIGl0IGJhY2sgdXAgKi8NCglDU1JfV1JJVEVfNChzYywg
 QkZFX1NCVE1TTE9XLCAoQkZFX1JFU0VUIHwgQkZFX0NMT0NLIHwgQkZFX0ZH
 QykpOw0KCUNTUl9SRUFEXzQoc2MsIEJGRV9TQlRNU0xPVyk7DQoJREVMQVko
 MTApOw0KDQoJLyogQ2hpcCBidWcsIGNsZWFyIFNFUlIsIElCIGFuZCBUTyBp
 ZiB0aGV5IGFyZSBzZXQuICovDQoJaWYgKENTUl9SRUFEXzQoc2MsIEJGRV9T
 QlRNU0hJR0gpICYgQkZFX1NFUlIpDQoJCUNTUl9XUklURV80KHNjLCBCRkVf
 U0JUTVNISUdILCAwKTsNCgl2YWwgPSBDU1JfUkVBRF80KHNjLCBCRkVfU0JJ
 TVNUQVRFKTsNCglpZiAodmFsICYgKEJGRV9JQkUgfCBCRkVfVE8pKQ0KCQlD
 U1JfV1JJVEVfNChzYywgQkZFX1NCSU1TVEFURSwgdmFsICYgfihCRkVfSUJF
 IHwgQkZFX1RPKSk7DQoNCgkvKiBDbGVhciByZXNldCBhbmQgYWxsb3cgaXQg
 dG8gbW92ZSB0aHJvdWdoIHRoZSBjb3JlICovDQoJQ1NSX1dSSVRFXzQoc2Ms
 IEJGRV9TQlRNU0xPVywgKEJGRV9DTE9DSyB8IEJGRV9GR0MpKTsNCglDU1Jf
 UkVBRF80KHNjLCBCRkVfU0JUTVNMT1cpOw0KCURFTEFZKDEwKTsNCg0KCS8q
 IExlYXZlIHRoZSBjbG9jayBzZXQgKi8NCglDU1JfV1JJVEVfNChzYywgQkZF
 X1NCVE1TTE9XLCBCRkVfQ0xPQ0spOw0KCUNTUl9SRUFEXzQoc2MsIEJGRV9T
 QlRNU0xPVyk7DQoJREVMQVkoMTApOw0KfQ0KDQpzdGF0aWMgdm9pZCANCmJm
 ZV9jYW1fd3JpdGUoc3RydWN0IGJmZV9zb2Z0YyAqc2MsIHVfY2hhciAqZGF0
 YSwgaW50IGluZGV4KQ0Kew0KCXVfaW50MzJfdCB2YWw7DQoNCgl2YWwgID0g
 KCh1X2ludDMyX3QpIGRhdGFbMl0pIDw8IDI0Ow0KCXZhbCB8PSAoKHVfaW50
 MzJfdCkgZGF0YVszXSkgPDwgMTY7DQoJdmFsIHw9ICgodV9pbnQzMl90KSBk
 YXRhWzRdKSA8PCAgODsNCgl2YWwgfD0gKCh1X2ludDMyX3QpIGRhdGFbNV0p
 Ow0KCUNTUl9XUklURV80KHNjLCBCRkVfQ0FNX0RBVEFfTE8sIHZhbCk7DQoJ
 dmFsID0gKEJGRV9DQU1fSElfVkFMSUQgfA0KCQkJKCgodV9pbnQzMl90KSBk
 YXRhWzBdKSA8PCA4KSB8DQoJCQkoKCh1X2ludDMyX3QpIGRhdGFbMV0pKSk7
 DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9DQU1fREFUQV9ISSwgdmFsKTsNCglD
 U1JfV1JJVEVfNChzYywgQkZFX0NBTV9DVFJMLCAoQkZFX0NBTV9XUklURSB8
 DQoJCQkJKCh1X2ludDMyX3QpIGluZGV4IDw8IEJGRV9DQU1fSU5ERVhfU0hJ
 RlQpKSk7DQoJYmZlX3dhaXRfYml0KHNjLCBCRkVfQ0FNX0NUUkwsIEJGRV9D
 QU1fQlVTWSwgMTAwMDAsIDEpOw0KfQ0KDQpzdGF0aWMgdm9pZCANCmJmZV9z
 ZXRfcnhfbW9kZShzdHJ1Y3QgYmZlX3NvZnRjICpzYykNCnsNCglzdHJ1Y3Qg
 aWZuZXQgKmlmcCA9ICZzYy0+YXJwY29tLmFjX2lmOw0KCXN0cnVjdCBpZm11
 bHRpYWRkciAgKmlmbWE7DQoJdV9pbnQzMl90IHZhbDsNCglpbnQgaSA9IDA7
 DQoNCgl2YWwgPSBDU1JfUkVBRF80KHNjLCBCRkVfUlhDT05GKTsNCg0KCWlm
 IChpZnAtPmlmX2ZsYWdzICYgSUZGX1BST01JU0MpDQoJCXZhbCB8PSBCRkVf
 UlhDT05GX1BST01JU0M7DQoJZWxzZQ0KCQl2YWwgJj0gfkJGRV9SWENPTkZf
 UFJPTUlTQzsNCg0KCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0JST0FEQ0FT
 VCkNCgkJdmFsICY9IH5CRkVfUlhDT05GX0RCQ0FTVDsNCgllbHNlDQoJCXZh
 bCB8PSBCRkVfUlhDT05GX0RCQ0FTVDsNCg0KDQoJQ1NSX1dSSVRFXzQoc2Ms
 IEJGRV9DQU1fQ1RSTCwgMCk7DQoJYmZlX2NhbV93cml0ZShzYywgc2MtPmFy
 cGNvbS5hY19lbmFkZHIsIGkrKyk7DQoNCglpZiAoaWZwLT5pZl9mbGFncyAm
 IElGRl9BTExNVUxUSSkNCgkJdmFsIHw9IEJGRV9SWENPTkZfQUxMTVVMVEk7
 DQoJZWxzZSB7DQoJCXZhbCAmPSB+QkZFX1JYQ09ORl9BTExNVUxUSTsNCgkJ
 VEFJTFFfRk9SRUFDSChpZm1hLCAmaWZwLT5pZl9tdWx0aWFkZHJzLCBpZm1h
 X2xpbmspIHsNCgkJCWlmIChpZm1hLT5pZm1hX2FkZHItPnNhX2ZhbWlseSAh
 PSBBRl9MSU5LKQ0KCQkJCWNvbnRpbnVlOw0KCQkJYmZlX2NhbV93cml0ZShz
 YywgTExBRERSKChzdHJ1Y3Qgc29ja2FkZHJfZGwgKilpZm1hLT5pZm1hX2Fk
 ZHIpLA0KCQkJCQlpKyspOw0KCQl9DQoJfQ0KDQoJQ1NSX1dSSVRFXzQoc2Ms
 IEJGRV9SWENPTkYsIHZhbCk7DQoJQkZFX09SKHNjLCBCRkVfQ0FNX0NUUkws
 IEJGRV9DQU1fRU5BQkxFKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmJmZV9kbWFf
 bWFwKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBu
 c2VnLCBpbnQgZXJyb3IpDQp7DQoJdV9pbnQzMl90ICpwdHI7DQoNCglwdHIg
 PSBhcmc7DQoJKnB0ciA9IHNlZ3MtPmRzX2FkZHI7DQp9DQoNCnN0YXRpYyB2
 b2lkDQpiZmVfZG1hX21hcF9kZXNjKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdt
 ZW50X3QgKnNlZ3MsIGludCBuc2VnLCBpbnQgZXJyb3IpDQp7DQoJc3RydWN0
 IGJmZV9kZXNjICpkOw0KDQoJZCA9IGFyZzsNCgkvKiBUaGUgY2hpcCBuZWVk
 cyBhbGwgYWRkcmVzc2VzIHRvIGJlIGFkZGVkIHRvIEJGRV9QQ0lfRE1BICov
 DQoJZC0+YmZlX2FkZHIgPSBzZWdzLT5kc19hZGRyICsgQkZFX1BDSV9ETUE7
 DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfcmVsZWFzZV9yZXNvdXJjZXMoc3Ry
 dWN0IGJmZV9zb2Z0YyAqc2MpDQp7DQoJZGV2aWNlX3QgZGV2Ow0KCWludCBp
 Ow0KDQoJZGV2ID0gc2MtPmJmZV9kZXY7DQoNCglpZiAoc2MtPmJmZV92cGRf
 cHJvZG5hbWUgIT0gTlVMTCkNCgkJZnJlZShzYy0+YmZlX3ZwZF9wcm9kbmFt
 ZSwgTV9ERVZCVUYpOw0KDQoJaWYgKHNjLT5iZmVfdnBkX3JlYWRvbmx5ICE9
 IE5VTEwpDQoJCWZyZWUoc2MtPmJmZV92cGRfcmVhZG9ubHksIE1fREVWQlVG
 KTsNCg0KCWlmIChzYy0+YmZlX2ludHJoYW5kICE9IE5VTEwpDQoJCWJ1c190
 ZWFyZG93bl9pbnRyKGRldiwgc2MtPmJmZV9pcnEsIHNjLT5iZmVfaW50cmhh
 bmQpOw0KDQoJaWYgKHNjLT5iZmVfaXJxICE9IE5VTEwpDQoJCWJ1c19yZWxl
 YXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JUlEsIDAsIHNjLT5iZmVfaXJx
 KTsNCg0KCWlmIChzYy0+YmZlX3JlcyAhPSBOVUxMKQ0KCQlidXNfcmVsZWFz
 ZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLCAweDEwLCBzYy0+YmZl
 X3Jlcyk7DQoNCglpZihzYy0+YmZlX3R4X3RhZyAhPSBOVUxMKSB7DQoJCWJ1
 c19kbWFtYXBfdW5sb2FkKHNjLT5iZmVfdHhfdGFnLCBzYy0+YmZlX3R4X21h
 cCk7DQoJCWJ1c19kbWFtZW1fZnJlZShzYy0+YmZlX3R4X3RhZywgc2MtPmJm
 ZV90eF9saXN0LCBzYy0+YmZlX3R4X21hcCk7DQoJCWJ1c19kbWFfdGFnX2Rl
 c3Ryb3koc2MtPmJmZV90eF90YWcpOw0KCQlzYy0+YmZlX3R4X3RhZyA9IE5V
 TEw7DQoJfQ0KDQoJaWYoc2MtPmJmZV9yeF90YWcgIT0gTlVMTCkgew0KCQli
 dXNfZG1hbWFwX3VubG9hZChzYy0+YmZlX3J4X3RhZywgc2MtPmJmZV9yeF9t
 YXApOw0KCQlidXNfZG1hbWVtX2ZyZWUoc2MtPmJmZV9yeF90YWcsIHNjLT5i
 ZmVfcnhfbGlzdCwgc2MtPmJmZV9yeF9tYXApOw0KCQlidXNfZG1hX3RhZ19k
 ZXN0cm95KHNjLT5iZmVfcnhfdGFnKTsNCgkJc2MtPmJmZV9yeF90YWcgPSBO
 VUxMOw0KCX0NCg0KCWlmKHNjLT5iZmVfdGFnICE9IE5VTEwpIHsNCgkJZm9y
 KGkgPSAwOyBpIDwgQkZFX1RYX0xJU1RfQ05UOyBpKyspIHsNCgkJCWJ1c19k
 bWFtYXBfZGVzdHJveShzYy0+YmZlX3RhZywgc2MtPmJmZV90eF9yaW5nW2ld
 LmJmZV9tYXApOw0KCQl9DQoJCWJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmJm
 ZV90YWcpOw0KICAgICAgICBzYy0+YmZlX3RhZyA9IE5VTEw7DQoJfQ0KDQoJ
 aWYoc2MtPmJmZV9wYXJlbnRfdGFnICE9IE5VTEwpDQoJCWJ1c19kbWFfdGFn
 X2Rlc3Ryb3koc2MtPmJmZV9wYXJlbnRfdGFnKTsNCg0KCXJldHVybjsNCn0N
 Cg0Kc3RhdGljIHZvaWQNCmJmZV9yZWFkX2VlcHJvbShzdHJ1Y3QgYmZlX3Nv
 ZnRjICpzYywgdV9pbnQ4X3QgKmRhdGEpDQp7DQoJbG9uZyBpOw0KCXVfaW50
 MTZfdCAqcHRyID0gKHVfaW50MTZfdCAqKWRhdGE7DQoNCglmb3IoaSA9IDA7
 IGkgPCAxMjg7IGkgKz0gMikNCgkJcHRyW2kvMl0gPSBDU1JfUkVBRF80KHNj
 LCA0MDk2ICsgaSk7DQp9DQoNCnN0YXRpYyBpbnQNCmJmZV93YWl0X2JpdChz
 dHJ1Y3QgYmZlX3NvZnRjICpzYywgdV9pbnQzMl90IHJlZywgdV9pbnQzMl90
 IGJpdCwgDQoJCXVfbG9uZyB0aW1lb3V0LCBjb25zdCBpbnQgY2xlYXIpDQp7
 DQoJdV9sb25nIGk7DQoNCglmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsr
 KSB7DQoJCXVfaW50MzJfdCB2YWwgPSBDU1JfUkVBRF80KHNjLCByZWcpOw0K
 DQoJCWlmIChjbGVhciAmJiAhKHZhbCAmIGJpdCkpDQoJCQlicmVhazsNCgkJ
 aWYgKCFjbGVhciAmJiAodmFsICYgYml0KSkNCgkJCWJyZWFrOw0KCQlERUxB
 WSgxMCk7DQoJfQ0KCWlmIChpID09IHRpbWVvdXQpIHsNCgkJcHJpbnRmKCJi
 ZmUlZDogQlVHISAgVGltZW91dCB3YWl0aW5nIGZvciBiaXQgJTA4eCBvZiBy
 ZWdpc3RlciAiDQoJCQkJIiV4IHRvICVzLlxuIiwgc2MtPmJmZV91bml0LCBi
 aXQsIHJlZywgDQoJCQkJKGNsZWFyID8gImNsZWFyIiA6ICJzZXQiKSk7DQoJ
 CXJldHVybiAtMTsNCgl9DQoJcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBpbnQN
 CmJmZV9yZWFkcGh5KHN0cnVjdCBiZmVfc29mdGMgKnNjLCB1X2ludDMyX3Qg
 cmVnLCB1X2ludDMyX3QgKnZhbCkNCnsNCglpbnQgZXJyOyANCg0KCUJGRV9M
 T0NLKHNjKTsNCgkvKiBDbGVhciBNSUkgSVNSICovDQoJQ1NSX1dSSVRFXzQo
 c2MsIEJGRV9FTUFDX0lTVEFULCBCRkVfRU1BQ19JTlRfTUlJKTsNCglDU1Jf
 V1JJVEVfNChzYywgQkZFX01ESU9fREFUQSwgKEJGRV9NRElPX1NCX1NUQVJU
 IHwNCgkJCQkoQkZFX01ESU9fT1BfUkVBRCA8PCBCRkVfTURJT19PUF9TSElG
 VCkgfA0KCQkJCShzYy0+YmZlX3BoeWFkZHIgPDwgQkZFX01ESU9fUE1EX1NI
 SUZUKSB8DQoJCQkJKHJlZyA8PCBCRkVfTURJT19SQV9TSElGVCkgfA0KCQkJ
 CShCRkVfTURJT19UQV9WQUxJRCA8PCBCRkVfTURJT19UQV9TSElGVCkpKTsN
 CgllcnIgPSBiZmVfd2FpdF9iaXQoc2MsIEJGRV9FTUFDX0lTVEFULCBCRkVf
 RU1BQ19JTlRfTUlJLCAxMDAsIDApOw0KCSp2YWwgPSBDU1JfUkVBRF80KHNj
 LCBCRkVfTURJT19EQVRBKSAmIEJGRV9NRElPX0RBVEFfREFUQTsNCg0KCUJG
 RV9VTkxPQ0soc2MpOw0KCXJldHVybiBlcnI7DQp9DQoNCnN0YXRpYyBpbnQN
 CmJmZV93cml0ZXBoeShzdHJ1Y3QgYmZlX3NvZnRjICpzYywgdV9pbnQzMl90
 IHJlZywgdV9pbnQzMl90IHZhbCkNCnsNCglpbnQgc3RhdHVzOw0KDQoJQkZF
 X0xPQ0soc2MpOw0KCUNTUl9XUklURV80KHNjLCBCRkVfRU1BQ19JU1RBVCwg
 QkZFX0VNQUNfSU5UX01JSSk7DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9NRElP
 X0RBVEEsIChCRkVfTURJT19TQl9TVEFSVCB8DQoJCQkJKEJGRV9NRElPX09Q
 X1dSSVRFIDw8IEJGRV9NRElPX09QX1NISUZUKSB8DQoJCQkJKHNjLT5iZmVf
 cGh5YWRkciA8PCBCRkVfTURJT19QTURfU0hJRlQpIHwNCgkJCQkocmVnIDw8
 IEJGRV9NRElPX1JBX1NISUZUKSB8DQoJCQkJKEJGRV9NRElPX1RBX1ZBTElE
 IDw8IEJGRV9NRElPX1RBX1NISUZUKSB8DQoJCQkJKHZhbCAmIEJGRV9NRElP
 X0RBVEFfREFUQSkpKTsNCglzdGF0dXMgPSBiZmVfd2FpdF9iaXQoc2MsIEJG
 RV9FTUFDX0lTVEFULCBCRkVfRU1BQ19JTlRfTUlJLCAxMDAsIDApOw0KCUJG
 RV9VTkxPQ0soc2MpOw0KDQoJcmV0dXJuIHN0YXR1czsNCn0NCg0KLyogDQog
 KiBYWFggLSBJIHRoaW5rIHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgUEhZIGRy
 aXZlciwgYnV0IGl0IGNhbid0IGh1cnQgdG8gZG8gaXQNCiAqIHR3aWNlDQog
 Ki8NCnN0YXRpYyBpbnQNCmJmZV9zZXR1cHBoeShzdHJ1Y3QgYmZlX3NvZnRj
 ICpzYykNCnsNCgl1X2ludDMyX3QgdmFsOw0KCUJGRV9MT0NLKHNjKTsNCg0K
 CS8qIEVuYWJsZSBhY3Rpdml0eSBMRUQgKi8NCgliZmVfcmVhZHBoeShzYywg
 MjYsICZ2YWwpOw0KCWJmZV93cml0ZXBoeShzYywgMjYsIHZhbCAmIDB4N2Zm
 Zik7IA0KCWJmZV9yZWFkcGh5KHNjLCAyNiwgJnZhbCk7DQoNCgkvKiBFbmFi
 bGUgdHJhZmZpYyBtZXRlciBMRUQgbW9kZSAqLw0KCWJmZV9yZWFkcGh5KHNj
 LCAyNywgJnZhbCk7DQoJYmZlX3dyaXRlcGh5KHNjLCAyNywgdmFsIHwgKDEg
 PDwgNikpOw0KDQoJQkZFX1VOTE9DSyhzYyk7DQoJcmV0dXJuIDA7DQp9DQoN
 CnN0YXRpYyB2b2lkIA0KYmZlX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYmZlX3Nv
 ZnRjICpzYykNCnsNCgl1X2xvbmcgcmVnOw0KCXVfaW50MzJfdCAqdmFsOw0K
 DQoJdmFsID0gJnNjLT5iZmVfaHdzdGF0cy50eF9nb29kX29jdGV0czsNCglm
 b3IgKHJlZyA9IEJGRV9UWF9HT09EX087IHJlZyA8PSBCRkVfVFhfUEFVU0U7
 IHJlZyArPSA0KSB7DQoJCSp2YWwrKyArPSBDU1JfUkVBRF80KHNjLCByZWcp
 Ow0KCX0NCgl2YWwgPSAmc2MtPmJmZV9od3N0YXRzLnJ4X2dvb2Rfb2N0ZXRz
 Ow0KCWZvciAocmVnID0gQkZFX1JYX0dPT0RfTzsgcmVnIDw9IEJGRV9SWF9O
 UEFVU0U7IHJlZyArPSA0KSB7DQoJCSp2YWwrKyArPSBDU1JfUkVBRF80KHNj
 LCByZWcpOw0KCX0NCn0NCg0Kc3RhdGljIHZvaWQNCmJmZV90eGVvZihzdHJ1
 Y3QgYmZlX3NvZnRjICpzYykNCnsNCglzdHJ1Y3QgaWZuZXQgKmlmcDsNCglp
 bnQgaSwgY2hpcGlkeDsNCg0KCUJGRV9MT0NLKHNjKTsNCg0KCWlmcCA9ICZz
 Yy0+YXJwY29tLmFjX2lmOw0KDQoJY2hpcGlkeCA9IENTUl9SRUFEXzQoc2Ms
 IEJGRV9ETUFUWF9TVEFUKSAmIEJGRV9TVEFUX0NETUFTSzsNCgljaGlwaWR4
 IC89IHNpemVvZihzdHJ1Y3QgYmZlX2Rlc2MpOw0KDQogICAgaSA9IHNjLT5i
 ZmVfdHhfY29uczsNCgkvKiBHbyB0aHJvdWdoIHRoZSBtYnVmcyBhbmQgZnJl
 ZSB0aG9zZSB0aGF0IGhhdmUgYmVlbiB0cmFuc21pdHRlZCAqLw0KICAgIHdo
 aWxlKGkgIT0gY2hpcGlkeCkgew0KCQlzdHJ1Y3QgYmZlX2RhdGEgKnIgPSAm
 c2MtPmJmZV90eF9yaW5nW2ldOw0KCQlpZihyLT5iZmVfbWJ1ZiAhPSBOVUxM
 KSB7DQoJCQlpZnAtPmlmX29wYWNrZXRzKys7DQoJCQltX2ZyZWVtKHItPmJm
 ZV9tYnVmKTsNCgkJCXItPmJmZV9tYnVmID0gTlVMTDsNCgkJCWJ1c19kbWFt
 YXBfdW5sb2FkKHNjLT5iZmVfdGFnLCByLT5iZmVfbWFwKTsNCgkJfQ0KICAg
 ICAgICBzYy0+YmZlX3R4X2NudC0tOw0KICAgICAgICBCRkVfSU5DKGksIEJG
 RV9UWF9MSVNUX0NOVCk7DQoJfQ0KDQoJaWYoaSAhPSBzYy0+YmZlX3R4X2Nv
 bnMpIHsNCgkJLyogd2UgZnJlZWQgdXAgc29tZSBtYnVmcyAqLw0KCQlzYy0+
 YmZlX3R4X2NvbnMgPSBpOw0KCQlpZnAtPmlmX2ZsYWdzICY9IH5JRkZfT0FD
 VElWRTsNCgl9DQoJaWYoc2MtPmJmZV90eF9jbnQgPT0gMCkNCgkJaWZwLT5p
 Zl90aW1lciA9IDA7DQoJZWxzZQ0KCQlpZnAtPmlmX3RpbWVyID0gNTsNCg0K
 CUJGRV9VTkxPQ0soc2MpOw0KfQ0KDQovKiBQYXNzIGEgcmVjZWl2ZWQgcGFj
 a2V0IHVwIHRoZSBzdGFjayAqLw0Kc3RhdGljIHZvaWQNCmJmZV9yeGVvZihz
 dHJ1Y3QgYmZlX3NvZnRjICpzYykNCnsNCglzdHJ1Y3QgbWJ1ZiAqbTsNCglz
 dHJ1Y3QgaWZuZXQgKmlmcDsNCglzdHJ1Y3QgYmZlX3J4aGVhZGVyICpyeGhl
 YWRlcjsNCglzdHJ1Y3QgYmZlX2RhdGEgKnI7DQoJaW50IGNvbnM7DQoJdV9p
 bnQzMl90IHN0YXR1cywgY3VycmVudCwgbGVuLCBmbGFnczsNCg0KCUJGRV9M
 T0NLKHNjKTsNCgljb25zID0gc2MtPmJmZV9yeF9jb25zOw0KCXN0YXR1cyA9
 IENTUl9SRUFEXzQoc2MsIEJGRV9ETUFSWF9TVEFUKTsNCgljdXJyZW50ID0g
 KHN0YXR1cyAmIEJGRV9TVEFUX0NETUFTSykgLyBzaXplb2Yoc3RydWN0IGJm
 ZV9kZXNjKTsNCg0KCWlmcCA9ICZzYy0+YXJwY29tLmFjX2lmOw0KDQoJd2hp
 bGUoY3VycmVudCAhPSBjb25zKSB7DQoJCXIgPSAmc2MtPmJmZV9yeF9yaW5n
 W2NvbnNdOw0KCQltID0gci0+YmZlX21idWY7DQoJCXJ4aGVhZGVyID0gbXRv
 ZChtLCBzdHJ1Y3QgYmZlX3J4aGVhZGVyKik7DQoJCWJ1c19kbWFtYXBfc3lu
 YyhzYy0+YmZlX3RhZywgci0+YmZlX21hcCwgQlVTX0RNQVNZTkNfUE9TVFdS
 SVRFKTsNCgkJbGVuID0gcnhoZWFkZXItPmxlbjsNCgkJci0+YmZlX21idWYg
 PSBOVUxMOw0KDQoJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5iZmVfdGFnLCBy
 LT5iZmVfbWFwKTsNCgkJZmxhZ3MgPSByeGhlYWRlci0+ZmxhZ3M7DQoNCgkJ
 bGVuIC09IEVUSEVSX0NSQ19MRU47DQoNCgkJLyogZmxhZyBhbiBlcnJvciBh
 bmQgdHJ5IGFnYWluICovDQoJCWlmICgobGVuID4gRVRIRVJfTUFYX0xFTisz
 MikgfHwgKGZsYWdzICYgQkZFX1JYX0ZMQUdfRVJST1JTKSkgew0KCQkJaWZw
 LT5pZl9pZXJyb3JzKys7DQoJCQlpZiAoZmxhZ3MgJiBCRkVfUlhfRkxBR19T
 RVJSKQ0KCQkJCWlmcC0+aWZfY29sbGlzaW9ucysrOw0KCQkJYmZlX2xpc3Rf
 bmV3YnVmKHNjLCBjb25zLCBtKTsNCgkJCWNvbnRpbnVlOw0KCQl9DQoNCgkJ
 LyogR28gcGFzdCB0aGUgcnggaGVhZGVyICovDQoJCWlmIChiZmVfbGlzdF9u
 ZXdidWYoc2MsIGNvbnMsIE5VTEwpID09IDApIHsNCgkJCW1fYWRqKG0sIEJG
 RV9SWF9PRkZTRVQpOw0KCQkJbS0+bV9sZW4gPSBtLT5tX3BrdGhkci5sZW4g
 PSBsZW47DQoJCX0gZWxzZSB7DQoJCQliZmVfbGlzdF9uZXdidWYoc2MsIGNv
 bnMsIG0pOw0KCQkJaWZwLT5pZl9pZXJyb3JzKys7DQoJCQljb250aW51ZTsN
 CgkJfQ0KDQoJCWlmcC0+aWZfaXBhY2tldHMrKzsNCgkJbS0+bV9wa3RoZHIu
 cmN2aWYgPSBpZnA7DQoJCUJGRV9VTkxPQ0soc2MpOw0KCQkoKmlmcC0+aWZf
 aW5wdXQpKGlmcCwgbSk7DQoJCUJGRV9MT0NLKHNjKTsNCg0KICAgICAgICBC
 RkVfSU5DKGNvbnMsIEJGRV9SWF9MSVNUX0NOVCk7DQoJfQ0KCXNjLT5iZmVf
 cnhfY29ucyA9IGNvbnM7DQoJQkZFX1VOTE9DSyhzYyk7DQp9DQoNCnN0YXRp
 YyB2b2lkDQpiZmVfaW50cih2b2lkICp4c2MpDQp7DQoJc3RydWN0IGJmZV9z
 b2Z0YyAqc2MgPSB4c2M7DQoJc3RydWN0IGlmbmV0ICppZnA7DQoJdV9pbnQz
 Ml90IGlzdGF0LCBpbWFzaywgZmxhZzsNCg0KCWlmcCA9ICZzYy0+YXJwY29t
 LmFjX2lmOw0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJaXN0YXQgPSBDU1JfUkVB
 RF80KHNjLCBCRkVfSVNUQVQpOw0KCWltYXNrID0gQ1NSX1JFQURfNChzYywg
 QkZFX0lNQVNLKTsNCg0KCS8qIA0KCSAqIERlZmVyIHVuc29saWNpdGVkIGlu
 dGVycnVwdHMgLSBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNldHRpbmcg
 dGhlDQoJICogY2hpcHMgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgdG8gMCBk
 b2Vzbid0IGFjdHVhbGx5IHN0b3AgdGhlDQoJICogaW50ZXJydXB0cw0KCSAq
 Lw0KCWlzdGF0ICY9IGltYXNrOw0KCUNTUl9XUklURV80KHNjLCBCRkVfSVNU
 QVQsIGlzdGF0KTsNCglDU1JfUkVBRF80KHNjLCBCRkVfSVNUQVQpOw0KDQoJ
 Lyogbm90IGV4cGVjdGluZyB0aGlzIGludGVycnVwdCwgZGlzcmVnYXJkIGl0
 ICovDQoJaWYoaXN0YXQgPT0gMCkgew0KCQlCRkVfVU5MT0NLKHNjKTsNCgkJ
 cmV0dXJuOw0KCX0NCg0KCWlmKGlzdGF0ICYgQkZFX0lTVEFUX0VSUk9SUykg
 ew0KCQlmbGFnID0gQ1NSX1JFQURfNChzYywgQkZFX0RNQVRYX1NUQVQpOw0K
 CQlpZihmbGFnICYgQkZFX1NUQVRfRU1BU0spDQoJCQlpZnAtPmlmX29lcnJv
 cnMrKzsNCg0KCQlmbGFnID0gQ1NSX1JFQURfNChzYywgQkZFX0RNQVJYX1NU
 QVQpOw0KCQlpZihmbGFnICYgQkZFX1JYX0ZMQUdfRVJST1JTKQ0KCQkJaWZw
 LT5pZl9pZXJyb3JzKys7DQoNCgkJaWZwLT5pZl9mbGFncyAmPSB+SUZGX1JV
 Tk5JTkc7DQoJCWJmZV9pbml0KHNjKTsNCgl9DQoNCgkvKiBBIHBhY2tldCB3
 YXMgcmVjZWl2ZWQgKi8NCglpZihpc3RhdCAmIEJGRV9JU1RBVF9SWCkNCgkJ
 YmZlX3J4ZW9mKHNjKTsNCg0KCS8qIEEgcGFja2V0IHdhcyBzZW50ICovDQoJ
 aWYoaXN0YXQgJiBCRkVfSVNUQVRfVFgpDQoJCWJmZV90eGVvZihzYyk7DQoN
 CgkvKiBXZSBoYXZlIHBhY2tldHMgcGVuZGluZywgZmlyZSB0aGVtIG91dCAq
 LyANCglpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9SVU5OSU5HICYmIGlmcC0+
 aWZfc25kLmlmcV9oZWFkICE9IE5VTEwpDQoJCWJmZV9zdGFydChpZnApOw0K
 DQoJQkZFX1VOTE9DSyhzYyk7DQp9DQoNCnN0YXRpYyBpbnQNCmJmZV9lbmNh
 cChzdHJ1Y3QgYmZlX3NvZnRjICpzYywgc3RydWN0IG1idWYgKm1faGVhZCwg
 dV9pbnQzMl90ICp0eGlkeCkNCnsNCglzdHJ1Y3QgYmZlX2Rlc2MgKmQgPSBO
 VUxMOw0KCXN0cnVjdCBiZmVfZGF0YSAqciA9IE5VTEw7DQoJc3RydWN0IG1i
 dWYgICAgICptOw0KCXVfaW50MzJfdCAgICAgICBmcmFnLCBjdXIsIGNudCA9
 IDA7DQoJaW50IGNoYWlubGVuID0gMDsNCg0KCWlmKEJGRV9UWF9MSVNUX0NO
 VCAtIHNjLT5iZmVfdHhfY250IDwgMikNCgkJcmV0dXJuKEVOT0JVRlMpOw0K
 DQoJLyoNCgkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGZyYWdzIGluIHRoaXMg
 Y2hhaW4gdG8gc2VlIGlmDQoJICogd2UgbmVlZCB0byBtX2RlZnJhZy4gIFNp
 bmNlIHRoZSBkZXNjcmlwdG9yIGxpc3QgaXMgc2hhcmVkDQoJICogYnkgYWxs
 IHBhY2tldHMsIHdlJ2xsIG1fZGVmcmFnIGxvbmcgY2hhaW5zIHNvIHRoYXQg
 dGhleQ0KCSAqIGRvIG5vdCB1c2UgdXAgdGhlIGVudGlyZSBsaXN0LCBldmVu
 IGlmIHRoZXkgd291bGQgZml0Lg0KCSAqLw0KCWZvcihtID0gbV9oZWFkOyBt
 ICE9IE5VTEw7IG0gPSBtLT5tX25leHQpIA0KCQljaGFpbmxlbisrOw0KDQoN
 CglpZiAoKGNoYWlubGVuID4gQkZFX1RYX0xJU1RfQ05UIC8gNCkgfHwgDQoJ
 CQkoKEJGRV9UWF9MSVNUX0NOVCAtIChjaGFpbmxlbiArIHNjLT5iZmVfdHhf
 Y250KSkgPCAyKSkgew0KCQltID0gbV9kZWZyYWcobV9oZWFkLCBNX0RPTlRX
 QUlUKTsNCgkJaWYgKG0gPT0gTlVMTCkgDQoJCQlyZXR1cm4oRU5PQlVGUyk7
 DQoJCW1faGVhZCA9IG07DQoJfQ0KDQoJLyoNCgkgKiBTdGFydCBwYWNraW5n
 IHRoZSBtYnVmcyBpbiB0aGlzIGNoYWluIGludG8NCgkgKiB0aGUgZnJhZ21l
 bnQgcG9pbnRlcnMuIFN0b3Agd2hlbiB3ZSBydW4gb3V0DQoJICogb2YgZnJh
 Z21lbnRzIG9yIGhpdCB0aGUgZW5kIG9mIHRoZSBtYnVmIGNoYWluLg0KCSAq
 Lw0KCW0gPSBtX2hlYWQ7DQoJY3VyID0gZnJhZyA9ICp0eGlkeDsNCgljbnQg
 PSAwOw0KDQoJZm9yKG0gPSBtX2hlYWQ7IG0gIT0gTlVMTDsgbSA9IG0tPm1f
 bmV4dCkgew0KCQlpZihtLT5tX2xlbiAhPSAwKSB7DQoJCQlpZigoQkZFX1RY
 X0xJU1RfQ05UIC0gKHNjLT5iZmVfdHhfY250ICsgY250KSkgPCAyKQ0KCQkJ
 CXJldHVybihFTk9CVUZTKTsNCg0KCQkJZCA9ICZzYy0+YmZlX3R4X2xpc3Rb
 Y3VyXTsNCgkJCXIgPSAmc2MtPmJmZV90eF9yaW5nW2N1cl07DQoJCQlkLT5i
 ZmVfY3RybCA9IEJGRV9ERVNDX0xFTiAmIG0tPm1fbGVuOw0KCQkJLyogYWx3
 YXlzIGludHRlcnVwdCBvbiBjb21wbGV0aW9uICovDQoJCQlkLT5iZmVfY3Ry
 bCB8PSBCRkVfREVTQ19JT0M7DQoJCQlpZihjbnQgPT0gMCkNCgkJCQkvKiBT
 ZXQgc3RhcnQgb2YgZnJhbWUgKi8NCgkJCQlkLT5iZmVfY3RybCB8PSBCRkVf
 REVTQ19TT0Y7DQoJCQlpZihjdXIgPT0gQkZFX1RYX0xJU1RfQ05UIC0gMSkN
 CgkJCQkvKiBUZWxsIHRoZSBjaGlwIHRvIHdyYXAgdG8gdGhlIHN0YXJ0IG9m
 IHRoZSBkZXNjcmlwdG9yIGxpc3QgKi8NCgkJCQlkLT5iZmVfY3RybCB8PSBC
 RkVfREVTQ19FT1Q7DQoNCgkJCWJ1c19kbWFtYXBfbG9hZChzYy0+YmZlX3Rh
 Zywgci0+YmZlX21hcCwgbXRvZChtLCB2b2lkKiksIG0tPm1fbGVuLCANCgkJ
 CQkJYmZlX2RtYV9tYXBfZGVzYywgZCwgMCk7DQoJCQlidXNfZG1hbWFwX3N5
 bmMoc2MtPmJmZV90YWcsIHItPmJmZV9tYXAsIEJVU19ETUFTWU5DX1BSRVJF
 QUQpOw0KDQoJCQlmcmFnID0gY3VyOw0KICAgICAgICAgICAgQkZFX0lOQyhj
 dXIsIEJGRV9UWF9MSVNUX0NOVCk7DQoJCQljbnQrKzsNCgkJfQ0KCX0NCg0K
 CWlmIChtICE9IE5VTEwpDQoJCXJldHVybihFTk9CVUZTKTsNCg0KCXNjLT5i
 ZmVfdHhfbGlzdFtmcmFnXS5iZmVfY3RybCB8PSBCRkVfREVTQ19FT0Y7DQoJ
 c2MtPmJmZV90eF9yaW5nW2ZyYWddLmJmZV9tYnVmID0gbV9oZWFkOw0KCWJ1
 c19kbWFtYXBfc3luYyhzYy0+YmZlX3R4X3RhZywgc2MtPmJmZV90eF9tYXAs
 IEJVU19ETUFTWU5DX1BSRVJFQUQpOw0KDQoJKnR4aWR4ID0gY3VyOw0KCXNj
 LT5iZmVfdHhfY250ICs9IGNudDsNCglyZXR1cm4gKDApOw0KfQ0KDQovKg0K
 ICogU2V0IHVwIHRvIHRyYW5zbWl0IGEgcGFja2V0DQogKi8NCnN0YXRpYyB2
 b2lkDQpiZmVfc3RhcnQoc3RydWN0IGlmbmV0ICppZnApDQp7DQoJc3RydWN0
 IGJmZV9zb2Z0YyAqc2M7DQoJc3RydWN0IG1idWYgKm1faGVhZCA9IE5VTEw7
 DQoJaW50IGlkeDsNCg0KCXNjID0gaWZwLT5pZl9zb2Z0YzsNCglpZHggPSBz
 Yy0+YmZlX3R4X3Byb2Q7DQoNCglCRkVfTE9DSyhzYyk7DQoNCgkvKiANCgkg
 KiBub3QgbXVjaCBwb2ludCB0cnlpbmcgdG8gc2VuZCBpZiB0aGUgbGluayBp
 cyBkb3duIG9yIHdlIGhhdmUgbm90aGluZyB0bw0KCSAqIHNlbmQNCgkgKi8N
 CglpZiAoIXNjLT5iZmVfbGluayAmJiBpZnAtPmlmX3NuZC5pZnFfbGVuIDwg
 MTApIHsNCgkJQkZFX1VOTE9DSyhzYyk7DQoJCXJldHVybjsNCgl9DQoNCglp
 ZiAoaWZwLT5pZl9mbGFncyAmIElGRl9PQUNUSVZFKSB7DQoJCUJGRV9VTkxP
 Q0soc2MpOw0KCQlyZXR1cm47DQoJfQ0KDQoJd2hpbGUoc2MtPmJmZV90eF9y
 aW5nW2lkeF0uYmZlX21idWYgPT0gTlVMTCkgew0KCQlJRl9ERVFVRVVFKCZp
 ZnAtPmlmX3NuZCwgbV9oZWFkKTsNCgkJaWYobV9oZWFkID09IE5VTEwpDQoJ
 CQlicmVhazsNCg0KCQkvKiANCgkJICogUGFjayB0aGUgZGF0YSBpbnRvIHRo
 ZSB0eCByaW5nLiAgSWYgd2UgZG9udCBoYXZlIGVub3VnaCByb29tLCBsZXQN
 CgkJICogdGhlIGNoaXAgZHJhaW4gdGhlIHJpbmcNCgkJICovDQoJCWlmKGJm
 ZV9lbmNhcChzYywgbV9oZWFkLCAmaWR4KSkgew0KCQkJSUZfUFJFUEVORCgm
 aWZwLT5pZl9zbmQsIG1faGVhZCk7DQoJCQlpZnAtPmlmX2ZsYWdzIHw9IElG
 Rl9PQUNUSVZFOw0KCQkJYnJlYWs7DQoJCX0NCg0KCQkvKg0KCQkgKiBJZiB0
 aGVyZSdzIGEgQlBGIGxpc3RlbmVyLCBib3VuY2UgYSBjb3B5IG9mIHRoaXMg
 ZnJhbWUNCgkJICogdG8gaGltLg0KCQkgKi8NCgkJQlBGX01UQVAoaWZwLCBt
 X2hlYWQpOw0KCX0NCg0KCXNjLT5iZmVfdHhfcHJvZCA9IGlkeDsNCgkvKiBU
 cmFuc21pdCAtIHR3aWNlIGR1ZSB0byBhcHBhcmVudCBoYXJkd2FyZSBidWcg
 Ki8NCglDU1JfV1JJVEVfNChzYywgQkZFX0RNQVRYX1BUUiwgaWR4ICogc2l6
 ZW9mKHN0cnVjdCBiZmVfZGVzYykpOw0KCUNTUl9XUklURV80KHNjLCBCRkVf
 RE1BVFhfUFRSLCBpZHggKiBzaXplb2Yoc3RydWN0IGJmZV9kZXNjKSk7DQoN
 CgkvKg0KCSAqIFNldCBhIHRpbWVvdXQgaW4gY2FzZSB0aGUgY2hpcCBnb2Vz
 IG91dCB0byBsdW5jaC4NCgkgKi8NCglpZnAtPmlmX3RpbWVyID0gNTsNCglC
 RkVfVU5MT0NLKHNjKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmJmZV9pbml0KHZv
 aWQgKnhzYykNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpzYyA9IChzdHJ1Y3Qg
 YmZlX3NvZnRjKil4c2M7DQoJc3RydWN0IGlmbmV0ICppZnAgPSAmc2MtPmFy
 cGNvbS5hY19pZjsNCg0KCUJGRV9MT0NLKHNjKTsNCg0KCWlmIChpZnAtPmlm
 X2ZsYWdzICYgSUZGX1JVTk5JTkcpIHsNCgkJQkZFX1VOTE9DSyhzYyk7DQoJ
 CXJldHVybjsNCgl9DQoNCgliZmVfc3RvcChzYyk7DQoJYmZlX2NoaXBfcmVz
 ZXQoc2MpOw0KDQoJaWYgKGJmZV9saXN0X3J4X2luaXQoc2MpID09IEVOT0JV
 RlMpIHsNCgkJcHJpbnRmKCJiZmUlZDogYmZlX2luaXQgZmFpbGVkLiBOb3Qg
 ZW5vdWdoIG1lbW9yeSBmb3IgbGlzdCBidWZmZXJzXG4iLA0KCQkJCXNjLT5i
 ZmVfdW5pdCk7DQoJCWJmZV9zdG9wKHNjKTsNCgkJcmV0dXJuOw0KCX0NCg0K
 CWJmZV9zZXRfcnhfbW9kZShzYyk7DQoNCgkvKiBFbmFibGUgdGhlIGNoaXAg
 YW5kIGNvcmUgKi8NCglCRkVfT1Ioc2MsIEJGRV9FTkVUX0NUUkwsIEJGRV9F
 TkVUX0VOQUJMRSk7DQoJLyogRW5hYmxlIGludGVycnVwdHMgKi8NCglDU1Jf
 V1JJVEVfNChzYywgQkZFX0lNQVNLLCBCRkVfSU1BU0tfREVGKTsNCg0KCWJm
 ZV9pZm1lZGlhX3VwZChpZnApOw0KCWlmcC0+aWZfZmxhZ3MgfD0gSUZGX1JV
 Tk5JTkc7DQoJaWZwLT5pZl9mbGFncyAmPSB+SUZGX09BQ1RJVkU7DQoNCglz
 Yy0+YmZlX3N0YXRfY2ggPSB0aW1lb3V0KGJmZV90aWNrLCBzYywgaHopOw0K
 CUJGRV9VTkxPQ0soc2MpOw0KfQ0KDQovKg0KICogU2V0IG1lZGlhIG9wdGlv
 bnMuDQogKi8NCnN0YXRpYyBpbnQNCmJmZV9pZm1lZGlhX3VwZChzdHJ1Y3Qg
 aWZuZXQgKmlmcCkNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpzYzsNCglzdHJ1
 Y3QgbWlpX2RhdGEgKm1paTsNCg0KCXNjID0gaWZwLT5pZl9zb2Z0YzsNCg0K
 CUJGRV9MT0NLKHNjKTsNCg0KCW1paSA9IGRldmljZV9nZXRfc29mdGMoc2Mt
 PmJmZV9taWlidXMpOw0KCXNjLT5iZmVfbGluayA9IDA7DQoJaWYgKG1paS0+
 bWlpX2luc3RhbmNlKSB7DQoJCXN0cnVjdCBtaWlfc29mdGMgKm1paXNjOw0K
 CQlmb3IgKG1paXNjID0gTElTVF9GSVJTVCgmbWlpLT5taWlfcGh5cyk7IG1p
 aXNjICE9IE5VTEw7DQoJCQkJbWlpc2MgPSBMSVNUX05FWFQobWlpc2MsIG1p
 aV9saXN0KSkNCgkJCW1paV9waHlfcmVzZXQobWlpc2MpOw0KCX0NCgltaWlf
 bWVkaWFjaGcobWlpKTsNCg0KCUJGRV9VTkxPQ0soc2MpOw0KCXJldHVybigw
 KTsNCn0NCg0KLyoNCiAqIFJlcG9ydCBjdXJyZW50IG1lZGlhIHN0YXR1cy4N
 CiAqLw0Kc3RhdGljIHZvaWQNCmJmZV9pZm1lZGlhX3N0cyhzdHJ1Y3QgaWZu
 ZXQgKmlmcCwgc3RydWN0IGlmbWVkaWFyZXEgKmlmbXIpDQp7DQoJc3RydWN0
 IGJmZV9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOw0KCXN0cnVjdCBtaWlf
 ZGF0YSAqbWlpOw0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJbWlpID0gZGV2aWNl
 X2dldF9zb2Z0YyhzYy0+YmZlX21paWJ1cyk7DQoJbWlpX3BvbGxzdGF0KG1p
 aSk7DQoJaWZtci0+aWZtX2FjdGl2ZSA9IG1paS0+bWlpX21lZGlhX2FjdGl2
 ZTsNCglpZm1yLT5pZm1fc3RhdHVzID0gbWlpLT5taWlfbWVkaWFfc3RhdHVz
 Ow0KDQoJQkZFX1VOTE9DSyhzYyk7DQp9DQoNCnN0YXRpYyBpbnQNCmJmZV9p
 b2N0bChzdHJ1Y3QgaWZuZXQgKmlmcCwgdV9sb25nIGNvbW1hbmQsIGNhZGRy
 X3QgZGF0YSkNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpzYyA9IGlmcC0+aWZf
 c29mdGM7DQoJc3RydWN0IGlmcmVxICppZnIgPSAoc3RydWN0IGlmcmVxICop
 IGRhdGE7DQoJc3RydWN0IG1paV9kYXRhICptaWk7DQoJaW50IGVycm9yID0g
 MDsNCg0KCUJGRV9MT0NLKHNjKTsNCg0KCXN3aXRjaChjb21tYW5kKSB7DQoJ
 CWNhc2UgU0lPQ1NJRkZMQUdTOg0KCQkJaWYoaWZwLT5pZl9mbGFncyAmIElG
 Rl9VUCkNCgkJCQlpZihpZnAtPmlmX2ZsYWdzICYgSUZGX1JVTk5JTkcpDQoJ
 CQkJCWJmZV9zZXRfcnhfbW9kZShzYyk7DQoJCQkJZWxzZQ0KCQkJCQliZmVf
 aW5pdChzYyk7DQoJCQllbHNlIGlmKGlmcC0+aWZfZmxhZ3MgJiBJRkZfUlVO
 TklORykNCgkJCQliZmVfc3RvcChzYyk7DQoJCQlicmVhazsNCgkJY2FzZSBT
 SU9DQURETVVMVEk6DQoJCWNhc2UgU0lPQ0RFTE1VTFRJOg0KCQkJaWYoaWZw
 LT5pZl9mbGFncyAmIElGRl9SVU5OSU5HKQ0KCQkJCWJmZV9zZXRfcnhfbW9k
 ZShzYyk7DQoJCQlicmVhazsNCgkJY2FzZSBTSU9DR0lGTUVESUE6DQoJCWNh
 c2UgU0lPQ1NJRk1FRElBOg0KCQkJbWlpID0gZGV2aWNlX2dldF9zb2Z0Yyhz
 Yy0+YmZlX21paWJ1cyk7DQoJCQllcnJvciA9IGlmbWVkaWFfaW9jdGwoaWZw
 LCBpZnIsICZtaWktPm1paV9tZWRpYSwgY29tbWFuZCk7DQoJCQlicmVhazsN
 CgkJZGVmYXVsdDoNCgkJCWVycm9yID0gZXRoZXJfaW9jdGwoaWZwLCBjb21t
 YW5kLCBkYXRhKTsgDQoJCQlicmVhazsNCgl9DQoNCglCRkVfVU5MT0NLKHNj
 KTsNCglyZXR1cm4gZXJyb3I7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfd2F0
 Y2hkb2coc3RydWN0IGlmbmV0ICppZnApDQp7DQoJc3RydWN0IGJmZV9zb2Z0
 YyAqc2M7DQoNCglzYyA9IGlmcC0+aWZfc29mdGM7DQoNCglCRkVfTE9DSyhz
 Yyk7DQoNCglwcmludGYoImJmZSVkOiB3YXRjaGRvZyB0aW1lb3V0IC0tIHJl
 c2V0dGluZ1xuIiwgc2MtPmJmZV91bml0KTsNCg0KCWlmcC0+aWZfZmxhZ3Mg
 Jj0gfklGRl9SVU5OSU5HOw0KCWJmZV9pbml0KHNjKTsNCg0KCWlmcC0+aWZf
 b2Vycm9ycysrOw0KDQoJQkZFX1VOTE9DSyhzYyk7DQp9DQoNCnN0YXRpYyB2
 b2lkDQpiZmVfdGljayh2b2lkICp4c2MpDQp7DQoJc3RydWN0IGJmZV9zb2Z0
 YyAqc2MgPSB4c2M7DQoJc3RydWN0IG1paV9kYXRhICptaWk7DQoNCglpZiAo
 c2MgPT0gTlVMTCkNCgkJcmV0dXJuOw0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJ
 bWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+YmZlX21paWJ1cyk7DQoNCgli
 ZmVfc3RhdHNfdXBkYXRlKHNjKTsNCglzYy0+YmZlX3N0YXRfY2ggPSB0aW1l
 b3V0KGJmZV90aWNrLCBzYywgaHopOw0KDQoJaWYoc2MtPmJmZV9saW5rKSB7
 DQoJCUJGRV9VTkxPQ0soc2MpOw0KCQlyZXR1cm47DQoJfQ0KDQoJbWlpX3Rp
 Y2sobWlpKTsNCglpZiAoIXNjLT5iZmVfbGluayAmJiBtaWktPm1paV9tZWRp
 YV9zdGF0dXMgJiBJRk1fQUNUSVZFICYmDQoJCQlJRk1fU1VCVFlQRShtaWkt
 Pm1paV9tZWRpYV9hY3RpdmUpICE9IElGTV9OT05FKSANCgkJc2MtPmJmZV9s
 aW5rKys7DQoNCglCRkVfVU5MT0NLKHNjKTsNCn0NCg0KLyoNCiAqIFN0b3Ag
 dGhlIGFkYXB0ZXIgYW5kIGZyZWUgYW55IG1idWZzIGFsbG9jYXRlZCB0byB0
 aGUNCiAqIFJYIGFuZCBUWCBsaXN0cy4NCiAqLw0Kc3RhdGljIHZvaWQNCmJm
 ZV9zdG9wKHN0cnVjdCBiZmVfc29mdGMgKnNjKQ0Kew0KCXN0cnVjdCBpZm5l
 dCAqaWZwOw0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJdW50aW1lb3V0KGJmZV90
 aWNrLCBzYywgc2MtPmJmZV9zdGF0X2NoKTsNCg0KCWlmcCA9ICZzYy0+YXJw
 Y29tLmFjX2lmOw0KDQoJYmZlX2NoaXBfaGFsdChzYyk7DQogICAgYmZlX3R4
 X3JpbmdfZnJlZShzYyk7DQoJYmZlX3J4X3JpbmdfZnJlZShzYyk7DQoNCglp
 ZnAtPmlmX2ZsYWdzICY9IH4oSUZGX1JVTk5JTkcgfCBJRkZfT0FDVElWRSk7
 DQoNCglCRkVfVU5MT0NLKHNjKTsNCn0NCg==
 
 ---559023410-851401618-1084200166=:27340--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200405101450.i4AEoHq2070831>