Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Mon, 21 Jan 2002 04:56:52 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Mon, 21 Jan 2002 04:56:47 -0500 Received: from astound-64-85-224-253.ca.astound.net ([64.85.224.253]:62479 "EHLO master.linux-ide.org") by vger.kernel.org with ESMTP id ; Mon, 21 Jan 2002 04:56:30 -0500 Date: Mon, 21 Jan 2002 01:50:26 -0800 (PST) From: Andre Hedrick To: linux-kernel@vger.kernel.org Subject: Re: Linux 2.5.3-pre1-aia1 (fwd) Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="1430322656-1514984572-1011606626=:13727" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org 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. --1430322656-1514984572-1011606626=:13727 Content-Type: text/plain; charset=us-ascii Failed to attached the patch. Andre Hedrick Linux Disk Certification Project Linux ATA Development ---------- Forwarded message ---------- Date: Mon, 21 Jan 2002 01:48:10 -0800 (PST) From: Andre Hedrick To: Jens Axboe Cc: Davide Libenzi , Anton Altaparmakov , Linus Torvalds , lkml Subject: Re: Linux 2.5.3-pre1-aia1 On Mon, 21 Jan 2002, Jens Axboe wrote: > On Mon, Jan 21 2002, Andre Hedrick wrote: > > > This really sucks, it means we cannot safely use multi mode for a > > > variety of request sizes. I agree with your earlier comment. Here's what > > > I think we should be doing: when requesting multi mode, limit to 8 > > > sectors like in your patch. This is by far the most commen multiple, > > > that's why. When starting a request, use WIN_MULT* only for cases where > > > (rq->nr_sectors % drive->mult_count) == 0. If that doesn't hold, simply > > > use WIN_READ or WIN_WRITE. > > > > > > Applied the 2.5.3-pre2 sched SMP fix, booting -pre2 and then hacking up > > > a patch. > > > > Why I have already done it, just take and apply. > > Cool, where is it? Attached, and please do not pick and choose. I moved and added things for a reason as not to loose hard work, because of writing the ISR's to the purity of the spec, and then we modify ISR's to fit the kernel and not the other way around. I do have a just reason to request a MEMPOOL, which would be exclusively used for PIO operations. Then we get out of the mess we are in and get in to serious compliance to how the hardware works. Thus in the offline comments about the creation of an ata_request_struct, a mempool allocation for PIO is justified. Since the correct solution of DMA timeouts is to void the request and assume no data down is valid. Thus PIO is next. If we look at the overhead in the generation of a new request for each and every time we do a PIO transfer it is scary. Think about this issue for more than the time it takes to hit the delete key. Respectfully, Andre Hedrick Linux Disk Certification Project Linux ATA Development --1430322656-1514984572-1011606626=:13727 Content-Type: text/plain; charset=us-ascii; name="acb-io-2.5.3-p2.01212002.patch" Content-Transfer-Encoding: base64 Content-ID: Content-Description: Content-Disposition: attachment; filename="acb-io-2.5.3-p2.01212002.patch" ZGlmZiAtdXJOIGxpbnV4LTIuNS4zLXAyLXByaXN0aW5lL2RyaXZlcnMvaWRl L2NtZDY0eC5jIGxpbnV4LTIuNS4zLXAyL2RyaXZlcnMvaWRlL2NtZDY0eC5j DQotLS0gbGludXgtMi41LjMtcDItcHJpc3RpbmUvZHJpdmVycy9pZGUvY21k NjR4LmMJU3VuIEphbiAyMCAwMDoyNTo0NCAyMDAyDQorKysgbGludXgtMi41 LjMtcDIvZHJpdmVycy9pZGUvY21kNjR4LmMJU3VuIEphbiAyMCAwMTowMDo1 NSAyMDAyDQpAQCAtNTM4LDYgKzUzOCwxMSBAQA0KIAlpZiAoKHNwZWVkID09 IFhGRVJfVURNQV82KSAmJiAoc2NzYyAmIDB4MzApID09IDB4MDApIHsNCiAJ CXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4OEEsIHNjc2N8MHgwMSk7 DQogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4OEEsICZzY3NjKTsN CisjaWYgMA0KKwkJLyogaWYgMTMzIGNsb2NrIGZhaWxzLCBzd2l0Y2ggdG8g MnhidXMgY2xvY2sgKi8NCisJCWlmICghKHNjc2MgJiAweDAxKSkNCisJCQlw Y2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDhBLCBzY3NjfDB4MTApOw0K KyNlbmRpZg0KIAl9DQogDQogCXN3aXRjaChzcGVlZCkgew0KQEAgLTk3NSw2 ICs5ODAsMTMgQEANCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4 NCwgMHgwMCk7DQogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg4QSwg JnRtcGJ5dGUpOw0KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDhB LCB0bXBieXRlfDB4MDEpOw0KKyNpZiAwDQorCS8qIGlmIDEzMyBjbG9jayBm YWlscywgc3dpdGNoIHRvIDJ4YnVzIGNsb2NrICovCQ0KKwlpZiAoISh0bXBi eXRlICYgMHgwMSkpIHsNCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwg MHg4QSwgJnRtcGJ5dGUpOw0KKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRl diwgMHg4QSwgdG1wYnl0ZXwweDEwKTsJCQ0KKwl9DQorI2VuZGlmDQogCXBj aV93cml0ZV9jb25maWdfd29yZChkZXYsIDB4QTIsIDB4MzI4QSk7DQogCXBj aV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweEE0LCAweDMyOEEpOw0KIAlw Y2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHhBOCwgMHg0MzkyKTsNCmRp ZmYgLXVyTiBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2ZXJzL2lkZS9o cHQzNHguYyBsaW51eC0yLjUuMy1wMi9kcml2ZXJzL2lkZS9ocHQzNHguYw0K LS0tIGxpbnV4LTIuNS4zLXAyLXByaXN0aW5lL2RyaXZlcnMvaWRlL2hwdDM0 eC5jCVR1ZSBOb3YgMjcgMDk6MjM6MjcgMjAwMQ0KKysrIGxpbnV4LTIuNS4z LXAyL2RyaXZlcnMvaWRlL2hwdDM0eC5jCVN1biBKYW4gMjAgMDA6NDA6MTEg MjAwMg0KQEAgLTMzNSw5ICszMzUsMjggQEANCiAJCQlkcml2ZS0+d2FpdGlu Z19mb3JfZG1hID0gMTsNCiAJCQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9k aXNrKQ0KIAkJCQlyZXR1cm4gMDsNCi0JCQlpZGVfc2V0X2hhbmRsZXIoZHJp dmUsICZpZGVfZG1hX2ludHIsIFdBSVRfQ01ELCBOVUxMKTsJLyogaXNzdWUg Y21kIHRvIGRyaXZlICovDQotCQkJT1VUX0JZVEUoKHJlYWRpbmcgPT0gOSkg PyBXSU5fUkVBRERNQSA6IFdJTl9XUklURURNQSwgSURFX0NPTU1BTkRfUkVH KTsNCi0JCQlyZXR1cm4gMDsNCisJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUs ICZpZGVfZG1hX2ludHIsIFdBSVRfQ01ELCBOVUxMKTsNCisJCQkvKiBpc3N1 ZSBjbWQgdG8gZHJpdmUgKi8NCisJCQkvKg0KKwkJCSAqIEZJWCBNRSB0byB1 c2Ugb25seSBBQ0IgaWRlX3Rhc2tfdCBhcmdzIFN0cnVjdA0KKwkJCSAqLw0K KyNpZiAwDQorCQl7DQorCQkJaWRlX3Rhc2tfdCAqYXJncyA9IEhXR1JPVVAo ZHJpdmUpLT5ycS0+c3BlY2lhbDsNCisJCQlPVVRfQllURShhcmdzLT50ZlJl Z2lzdGVyW0lERV9DT01NQU5EX09GRlNFVF0sIElERV9DT01NQU5EX1JFRyk7 DQorCQl9DQorI2Vsc2UNCisJCQlpZiAoKEhXR1JPVVAoZHJpdmUpLT5ycS0+ ZmxhZ3MgJiBSRVFfRFJJVkVfVEFTS0ZJTEUpICYmDQorCQkJICAgIChkcml2 ZS0+YWRkcmVzc2luZyA9PSAxKSkgew0KKwkJCQlpZGVfdGFza190ICphcmdz ID0gSFdHUk9VUChkcml2ZSktPnJxLT5zcGVjaWFsOw0KKwkJCQlPVVRfQllU RShhcmdzLT50ZlJlZ2lzdGVyW0lERV9DT01NQU5EX09GRlNFVF0sIElERV9D T01NQU5EX1JFRyk7DQorCQkJfSBlbHNlIGlmIChkcml2ZS0+YWRkcmVzc2lu Zykgew0KKwkJCQlPVVRfQllURSgocmVhZGluZyA9PSA5KSA/IFdJTl9SRUFE RE1BX0VYVCA6IFdJTl9XUklURURNQV9FWFQsIElERV9DT01NQU5EX1JFRyk7 DQorCQkJfSBlbHNlIHsNCisJCQkJT1VUX0JZVEUoKHJlYWRpbmcgPT0gOSkg PyBXSU5fUkVBRERNQSA6IFdJTl9XUklURURNQSwgSURFX0NPTU1BTkRfUkVH KTsNCisJCQl9DQorI2VuZGlmDQorCQkJcmV0dXJuIEhXSUYoZHJpdmUpLT5k bWFwcm9jKGlkZV9kbWFfYmVnaW4sIGRyaXZlKTsNCiAJCWNhc2UgaWRlX2Rt YV9lbmQ6CS8qIHJldHVybnMgMSBvbiBlcnJvciwgMCBvdGhlcndpc2UgKi8N CiAJCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsNCiAJCQlvdXRiKGlu YihkbWFfYmFzZSkmfjEsIGRtYV9iYXNlKTsJLyogc3RvcCBETUEgKi8NCmRp ZmYgLXVyTiBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2ZXJzL2lkZS9p Y3NpZGUuYyBsaW51eC0yLjUuMy1wMi9kcml2ZXJzL2lkZS9pY3NpZGUuYw0K LS0tIGxpbnV4LTIuNS4zLXAyLXByaXN0aW5lL2RyaXZlcnMvaWRlL2ljc2lk ZS5jCVR1ZSBEZWMgMjUgMjE6NDM6MzIgMjAwMQ0KKysrIGxpbnV4LTIuNS4z LXAyL2RyaXZlcnMvaWRlL2ljc2lkZS5jCVN1biBKYW4gMjAgMDA6NDA6MTEg MjAwMg0KQEAgLTU0Nyw5ICs1NDcsMjUgQEANCiAJCQlyZXR1cm4gMDsNCiAN CiAJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmljc2lkZV9kbWFpbnRyLCBX QUlUX0NNRCwgTlVMTCk7DQotCQlPVVRfQllURShyZWFkaW5nID8gV0lOX1JF QURETUEgOiBXSU5fV1JJVEVETUEsDQotCQkJIElERV9DT01NQU5EX1JFRyk7 DQotDQorCQkvKg0KKwkJICogRklYIE1FIHRvIHVzZSBvbmx5IEFDQiBpZGVf dGFza190IGFyZ3MgU3RydWN0DQorCQkgKi8NCisjaWYgMA0KKwl7DQorCQlp ZGVfdGFza190ICphcmdzID0gSFdHUk9VUChkcml2ZSktPnJxLT5zcGVjaWFs Ow0KKwkJT1VUX0JZVEUoYXJncy0+dGZSZWdpc3RlcltJREVfQ09NTUFORF9P RkZTRVRdLCBJREVfQ09NTUFORF9SRUcpOwl9CQkNCisjZWxzZQ0KKwkJaWYg KChIV0dST1VQKGRyaXZlKS0+cnEtPmZsYWdzICYgUkVRX0RSSVZFX1RBU0tG SUxFKSAmJg0KKwkJICAgIChkcml2ZS0+YWRkcmVzc2luZyA9PSAxKSkgew0K KwkJCWlkZV90YXNrX3QgKmFyZ3MgPSBIV0dST1VQKGRyaXZlKS0+cnEtPnNw ZWNpYWw7DQorCQkJT1VUX0JZVEUoYXJncy0+dGZSZWdpc3RlcltJREVfQ09N TUFORF9PRkZTRVRdLCBJREVfQ09NTUFORF9SRUcpOw0KKwkJfSBlbHNlIGlm IChkcml2ZS0+YWRkcmVzc2luZykgew0KKwkJCU9VVF9CWVRFKHJlYWRpbmcg PyBXSU5fUkVBRERNQV9FWFQgOiBXSU5fV1JJVEVETUFfRVhULCBJREVfQ09N TUFORF9SRUcpOw0KKwkJfSBlbHNlIHsNCisJCQlPVVRfQllURShyZWFkaW5n ID8gV0lOX1JFQURETUEgOiBXSU5fV1JJVEVETUEsIElERV9DT01NQU5EX1JF Ryk7DQorCQl9DQorI2VuZGlmDQorCQlyZXR1cm4gSFdJRihkcml2ZSktPmRt YXByb2MoaWRlX2RtYV9iZWdpbiwgZHJpdmUpOw0KIAljYXNlIGlkZV9kbWFf YmVnaW46DQogCQllbmFibGVfZG1hKGh3aWYtPmh3LmRtYSk7DQogCQlyZXR1 cm4gMDsNCmRpZmYgLXVyTiBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2 ZXJzL2lkZS9pZGUtZGlzay5jIGxpbnV4LTIuNS4zLXAyL2RyaXZlcnMvaWRl L2lkZS1kaXNrLmMNCi0tLSBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2 ZXJzL2lkZS9pZGUtZGlzay5jCVN1biBKYW4gMjAgMDA6MjU6NDQgMjAwMg0K KysrIGxpbnV4LTIuNS4zLXAyL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMJTW9u IEphbiAyMSAwMDowMToyMCAyMDAyDQpAQCAtMTc3LDcgKzE3Nyw3IEBADQog CXN0cnVjdCBoZF9kcml2ZV90YXNrX2hkcgl0YXNrZmlsZTsNCiAJc3RydWN0 IGhkX2RyaXZlX2hvYl9oZHIJCWhvYmZpbGU7DQogCWlkZV90YXNrX3QJCQlh cmdzOw0KLQlpbnQJCQkJc2VjdG9yczsNCisJaW50CQkJCXNlY3RvcnMgPSBy cS0+bnJfc2VjdG9yczsNCiANCiAJdGFza19pb3JlZ190IGNvbW1hbmQJPSBn ZXRfY29tbWFuZChkcml2ZSwgcnFfZGF0YV9kaXIocnEpKTsNCiANCkBAIC0x ODksMTMgKzE4OSwxNCBAQA0KIAltZW1zZXQoJnRhc2tmaWxlLCAwLCBzaXpl b2YodGFza19zdHJ1Y3RfdCkpOw0KIAltZW1zZXQoJmhvYmZpbGUsIDAsIHNp emVvZihob2Jfc3RydWN0X3QpKTsNCiANCi0Jc2VjdG9ycyA9IHJxLT5ucl9z ZWN0b3JzOw0KIAlpZiAoc2VjdG9ycyA9PSAyNTYpDQogCQlzZWN0b3JzID0g MDsNCi0JaWYgKGNvbW1hbmQgPT0gV0lOX01VTFRXUklURV9FWFQgfHwgY29t bWFuZCA9PSBXSU5fTVVMVFdSSVRFKSB7DQorCWlmIChjb21tYW5kID09IFdJ Tl9NVUxUV1JJVEUpIHsNCiAJCXNlY3RvcnMgPSBkcml2ZS0+bXVsdF9jb3Vu dDsNCiAJCWlmIChzZWN0b3JzID4gcnEtPmN1cnJlbnRfbnJfc2VjdG9ycykN CiAJCQlzZWN0b3JzID0gcnEtPmN1cnJlbnRfbnJfc2VjdG9yczsNCisJCWlm IChzZWN0b3JzICE9IGRyaXZlLT5tdWx0X2NvdW50KQ0KKwkJCWNvbW1hbmQg PSBXSU5fV1JJVEU7DQogCX0NCiANCiAJdGFza2ZpbGUuc2VjdG9yX2NvdW50 CT0gc2VjdG9yczsNCkBAIC0yMzQsMTcgKzIzNSwxOCBAQA0KIAlzdHJ1Y3Qg aGRfZHJpdmVfdGFza19oZHIJdGFza2ZpbGU7DQogCXN0cnVjdCBoZF9kcml2 ZV9ob2JfaGRyCQlob2JmaWxlOw0KIAlpZGVfdGFza190CQkJYXJnczsNCi0J aW50CQkJCXNlY3RvcnM7DQorCWludAkJCQlzZWN0b3JzID0gcnEtPm5yX3Nl Y3RvcnM7DQogDQogCXRhc2tfaW9yZWdfdCBjb21tYW5kCT0gZ2V0X2NvbW1h bmQoZHJpdmUsIHJxX2RhdGFfZGlyKHJxKSk7DQogDQotCXNlY3RvcnMgPSBy cS0+bnJfc2VjdG9yczsNCiAJaWYgKHNlY3RvcnMgPT0gMjU2KQ0KIAkJc2Vj dG9ycyA9IDA7DQotCWlmIChjb21tYW5kID09IFdJTl9NVUxUV1JJVEVfRVhU IHx8IGNvbW1hbmQgPT0gV0lOX01VTFRXUklURSkgew0KKwlpZiAoY29tbWFu ZCA9PSBXSU5fTVVMVFdSSVRFKSB7DQogCQlzZWN0b3JzID0gZHJpdmUtPm11 bHRfY291bnQ7DQogCQlpZiAoc2VjdG9ycyA+IHJxLT5jdXJyZW50X25yX3Nl Y3RvcnMpDQogCQkJc2VjdG9ycyA9IHJxLT5jdXJyZW50X25yX3NlY3RvcnM7 DQorCQlpZiAoc2VjdG9ycyAhPSBkcml2ZS0+bXVsdF9jb3VudCkNCisJCQlj b21tYW5kID0gV0lOX1dSSVRFOw0KIAl9DQogDQogCW1lbXNldCgmdGFza2Zp bGUsIDAsIHNpemVvZih0YXNrX3N0cnVjdF90KSk7DQpAQCAtMjkyLDMwICsy OTQsMjYgQEANCiAJc3RydWN0IGhkX2RyaXZlX3Rhc2tfaGRyCXRhc2tmaWxl Ow0KIAlzdHJ1Y3QgaGRfZHJpdmVfaG9iX2hkcgkJaG9iZmlsZTsNCiAJaWRl X3Rhc2tfdAkJCWFyZ3M7DQotCWludAkJCQlzZWN0b3JzOw0KKwlpbnQJCQkJ c2VjdG9ycyA9IHJxLT5ucl9zZWN0b3JzOw0KIA0KIAl0YXNrX2lvcmVnX3Qg Y29tbWFuZAk9IGdldF9jb21tYW5kKGRyaXZlLCBycV9kYXRhX2RpcihycSkp Ow0KIA0KIAltZW1zZXQoJnRhc2tmaWxlLCAwLCBzaXplb2YodGFza19zdHJ1 Y3RfdCkpOw0KIAltZW1zZXQoJmhvYmZpbGUsIDAsIHNpemVvZihob2Jfc3Ry dWN0X3QpKTsNCiANCi0Jc2VjdG9ycyA9IHJxLT5ucl9zZWN0b3JzOw0KLQlp ZiAoc2VjdG9ycyA9PSAyNTYpDQorCWlmIChzZWN0b3JzID09IDY1NTM2KQ0K IAkJc2VjdG9ycyA9IDA7DQotCWlmIChjb21tYW5kID09IFdJTl9NVUxUV1JJ VEVfRVhUIHx8IGNvbW1hbmQgPT0gV0lOX01VTFRXUklURSkgew0KKw0KKwlp ZiAoY29tbWFuZCA9PSBXSU5fTVVMVFdSSVRFX0VYVCkgew0KIAkJc2VjdG9y cyA9IGRyaXZlLT5tdWx0X2NvdW50Ow0KIAkJaWYgKHNlY3RvcnMgPiBycS0+ Y3VycmVudF9ucl9zZWN0b3JzKQ0KIAkJCXNlY3RvcnMgPSBycS0+Y3VycmVu dF9ucl9zZWN0b3JzOw0KKwkJaWYgKHNlY3RvcnMgIT0gZHJpdmUtPm11bHRf Y291bnQpDQorCQkJY29tbWFuZCA9IFdJTl9XUklURV9FWFQ7DQogCX0NCiAN CiAJdGFza2ZpbGUuc2VjdG9yX2NvdW50CT0gc2VjdG9yczsNCiAJaG9iZmls ZS5zZWN0b3JfY291bnQJPSBzZWN0b3JzID4+IDg7DQotDQotCWlmIChycS0+ bnJfc2VjdG9ycyA9PSA2NTUzNikgew0KLQkJdGFza2ZpbGUuc2VjdG9yX2Nv dW50CT0gMHgwMDsNCi0JCWhvYmZpbGUuc2VjdG9yX2NvdW50CT0gMHgwMDsN Ci0JfQ0KLQ0KIAl0YXNrZmlsZS5zZWN0b3JfbnVtYmVyCT0gYmxvY2s7CS8q IGxvdyBsYmEgKi8NCiAJdGFza2ZpbGUubG93X2N5bGluZGVyCT0gKGJsb2Nr Pj49OCk7CS8qIG1pZCBsYmEgKi8NCiAJdGFza2ZpbGUuaGlnaF9jeWxpbmRl cgk9IChibG9jaz4+PTgpOwkvKiBoaSAgbGJhICovDQpAQCAtNjc0LDYgKzY3 Miw4IEBADQogCQlzLT5iLnNldF9tdWx0bW9kZSA9IDA7DQogCQlpZiAoZHJp dmUtPmlkICYmIGRyaXZlLT5tdWx0X3JlcSA+IGRyaXZlLT5pZC0+bWF4X211 bHRzZWN0KQ0KIAkJCWRyaXZlLT5tdWx0X3JlcSA9IGRyaXZlLT5pZC0+bWF4 X211bHRzZWN0Ow0KKwkJaWYgKGRyaXZlLT5tdWx0X3JlcSA+IDgpDQorCQkJ ZHJpdmUtPm11bHRfcmVxID0gODsNCiAJCWlmICghSVNfUERDNDAzMF9EUklW RSkgew0KIAkJCXN0cnVjdCBoZF9kcml2ZV90YXNrX2hkciB0YXNrZmlsZTsN CiAJCQlzdHJ1Y3QgaGRfZHJpdmVfaG9iX2hkciBob2JmaWxlOw0KQEAgLTEw NDAsNiArMTA0MCw4IEBADQogCQkJZHJpdmUtPnNwZWNpYWwuYi5zZXRfbXVs dG1vZGUgPSAxOw0KICNlbmRpZgkvKiBDT05GSUdfSURFRElTS19NVUxUSV9N T0RFICovDQogCX0NCisJaWYgKGRyaXZlLT5tdWx0X3JlcSA+IDgpDQorCQlk cml2ZS0+bXVsdF9yZXEgPSA4Ow0KIAlkcml2ZS0+bm9faW9fMzJiaXQgPSBp ZC0+ZHdvcmRfaW8gPyAxIDogMDsNCiAJaWYgKGRyaXZlLT5pZC0+Y2ZzX2Vu YWJsZV8yICYgMHgzMDAwKQ0KIAkJd3JpdGVfY2FjaGUoZHJpdmUsIChpZC0+ Y2ZzX2VuYWJsZV8yICYgMHgzMDAwKSk7DQpkaWZmIC11ck4gbGludXgtMi41 LjMtcDItcHJpc3RpbmUvZHJpdmVycy9pZGUvaWRlLWRtYS5jIGxpbnV4LTIu NS4zLXAyL2RyaXZlcnMvaWRlL2lkZS1kbWEuYw0KLS0tIGxpbnV4LTIuNS4z LXAyLXByaXN0aW5lL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwlTdW4gSmFuIDIw IDAwOjI1OjQ0IDIwMDINCisrKyBsaW51eC0yLjUuMy1wMi9kcml2ZXJzL2lk ZS9pZGUtZG1hLmMJU3VuIEphbiAyMCAwMDo0MDoxMSAyMDAyDQpAQCAtNjA2 LDE4ICs2MDYsMzggQEANCiAJCWNhc2UgaWRlX2RtYV93cml0ZToNCiAJCQlT RUxFQ1RfUkVBRF9XUklURShod2lmLGRyaXZlLGZ1bmMpOw0KIAkJCWlmICgh KGNvdW50ID0gaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBmdW5jKSkpDQot CQkJCXJldHVybiAxOwkvKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICovDQot CQkJb3V0bChod2lmLT5kbWF0YWJsZV9kbWEsIGRtYV9iYXNlICsgNCk7IC8q IFBSRCB0YWJsZSAqLw0KLQkJCW91dGIocmVhZGluZywgZG1hX2Jhc2UpOwkJ CS8qIHNwZWNpZnkgci93ICovDQotCQkJb3V0YihpbmIoZG1hX2Jhc2UrMil8 NiwgZG1hX2Jhc2UrMik7CQkvKiBjbGVhciBJTlRSICYgRVJST1IgZmxhZ3Mg Ki8NCisJCS8qDQorCQkgKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICAgISEh RklYTUUNCisJCSAqDQorCQkgKiBNYXJrIHRoZSByZXF1ZXN0IGZvciBQSU8g YW5kIGVuZF9yZXF1ZXN0IHRvIGJlIHF1ZXVlZC4NCisJCSAqIE5vdGluZyB0 aGUgZnV0dXJlIFRJTUVPVVQgbW9kZWwgZG8gdGhlIHNhbWUgbGVzcw0KKwkJ ICogZGV2aWNlIHJlc2V0LCBuZWVkZWQgdG8gcmVjb3ZlciBkcml2ZSB0byBj b21tYW5kIG1vZGUuDQorCQkgKi8NCisJCQkJcmV0dXJuIDE7DQorCQkJLyog UFJEIHRhYmxlICovDQorCQkJb3V0bChod2lmLT5kbWF0YWJsZV9kbWEsIGRt YV9iYXNlICsgNCk7DQorCQkJLyogc3BlY2lmeSByL3cgKi8NCisJCQlvdXRi KHJlYWRpbmcsIGRtYV9iYXNlKTsNCisJCQkvKiBjbGVhciBJTlRSICYgRVJS T1IgZmxhZ3MgKi8NCisJCQlvdXRiKGluYihkbWFfYmFzZSsyKXw2LCBkbWFf YmFzZSsyKTsNCiAJCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsNCiAJ CQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKQ0KIAkJCQlyZXR1cm4g MDsNCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BX1RJTUVPVVQNCi0J CQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZpZGVfZG1hX2ludHIsIDIqV0FJ VF9DTUQsIE5VTEwpOwkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8NCisJCQlp ZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZpZGVfZG1hX2ludHIsIDIqV0FJVF9D TUQsIE5VTEwpOw0KICNlbHNlIC8qICFDT05GSUdfQkxLX0RFVl9JREVETUFf VElNRU9VVCAqLw0KLQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmlkZV9k bWFfaW50ciwgV0FJVF9DTUQsIGRtYV90aW1lcl9leHBpcnkpOwkvKiBpc3N1 ZSBjbWQgdG8gZHJpdmUgKi8NCisJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUs ICZpZGVfZG1hX2ludHIsIFdBSVRfQ01ELCBkbWFfdGltZXJfZXhwaXJ5KTsN CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BX1RJTUVPVVQgKi8N CisJCQkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8NCisJCQkvKg0KKwkJCSAq IEZJWCBNRSB0byB1c2Ugb25seSBBQ0IgaWRlX3Rhc2tfdCBhcmdzIFN0cnVj dA0KKwkJCSAqLw0KKyNpZiAwDQorCQl7DQorCQkJaWRlX3Rhc2tfdCAqYXJn cyA9IEhXR1JPVVAoZHJpdmUpLT5ycS0+c3BlY2lhbDsNCisJCQlPVVRfQllU RShhcmdzLT50ZlJlZ2lzdGVyW0lERV9DT01NQU5EX09GRlNFVF0sIElERV9D T01NQU5EX1JFRyk7DQorCQl9DQorI2Vsc2UNCiAJCQlpZiAoKEhXR1JPVVAo ZHJpdmUpLT5ycS0+ZmxhZ3MgJiBSRVFfRFJJVkVfVEFTS0ZJTEUpICYmDQog CQkJICAgIChkcml2ZS0+YWRkcmVzc2luZyA9PSAxKSkgew0KIAkJCQlpZGVf dGFza190ICphcmdzID0gSFdHUk9VUChkcml2ZSktPnJxLT5zcGVjaWFsOw0K QEAgLTYyNyw2ICs2NDcsNyBAQA0KIAkJCX0gZWxzZSB7DQogCQkJCU9VVF9C WVRFKHJlYWRpbmcgPyBXSU5fUkVBRERNQSA6IFdJTl9XUklURURNQSwgSURF X0NPTU1BTkRfUkVHKTsNCiAJCQl9DQorI2VuZGlmDQogCQkJcmV0dXJuIEhX SUYoZHJpdmUpLT5kbWFwcm9jKGlkZV9kbWFfYmVnaW4sIGRyaXZlKTsNCiAJ CWNhc2UgaWRlX2RtYV9iZWdpbjoNCiAJCQkvKiBOb3RlIHRoYXQgdGhpcyBp cyBkb25lICphZnRlciogdGhlIGNtZCBoYXMNCkBAIC02MzQsMTUgKzY1NSwy MSBAQA0KIAkJCSAqIFRoZSBQcm9taXNlIFVsdHJhMzMgZG9lc24ndCB3b3Jr IGNvcnJlY3RseSB3aGVuDQogCQkJICogd2UgZG8gdGhpcyBwYXJ0IGJlZm9y ZSBpc3N1aW5nIHRoZSBkcml2ZSBjbWQuDQogCQkJICovDQotCQkJb3V0Yihp bmIoZG1hX2Jhc2UpfDEsIGRtYV9iYXNlKTsJCS8qIHN0YXJ0IERNQSAqLw0K KwkJCS8qIHN0YXJ0IERNQSAqLw0KKwkJCW91dGIoaW5iKGRtYV9iYXNlKXwx LCBkbWFfYmFzZSk7DQogCQkJcmV0dXJuIDA7DQogCQljYXNlIGlkZV9kbWFf ZW5kOiAvKiByZXR1cm5zIDEgb24gZXJyb3IsIDAgb3RoZXJ3aXNlICovDQog CQkJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7DQotCQkJb3V0YihpbmIo ZG1hX2Jhc2UpJn4xLCBkbWFfYmFzZSk7CS8qIHN0b3AgRE1BICovDQotCQkJ ZG1hX3N0YXQgPSBpbmIoZG1hX2Jhc2UrMik7CQkvKiBnZXQgRE1BIHN0YXR1 cyAqLw0KLQkJCW91dGIoZG1hX3N0YXR8NiwgZG1hX2Jhc2UrMik7CS8qIGNs ZWFyIHRoZSBJTlRSICYgRVJST1IgYml0cyAqLw0KLQkJCWlkZV9kZXN0cm95 X2RtYXRhYmxlKGRyaXZlKTsJLyogcHVyZ2UgRE1BIG1hcHBpbmdzICovDQot CQkJcmV0dXJuIChkbWFfc3RhdCAmIDcpICE9IDQgPyAoMHgxMCB8IGRtYV9z dGF0KSA6IDA7CS8qIHZlcmlmeSBnb29kIERNQSBzdGF0dXMgKi8NCisJCQkv KiBzdG9wIERNQSAqLw0KKwkJCW91dGIoaW5iKGRtYV9iYXNlKSZ+MSwgZG1h X2Jhc2UpOw0KKwkJCS8qIGdldCBETUEgc3RhdHVzICovDQorCQkJZG1hX3N0 YXQgPSBpbmIoZG1hX2Jhc2UrMik7DQorCQkJLyogY2xlYXIgdGhlIElOVFIg JiBFUlJPUiBiaXRzICovDQorCQkJb3V0YihkbWFfc3RhdHw2LCBkbWFfYmFz ZSsyKTsNCisJCQkvKiBwdXJnZSBETUEgbWFwcGluZ3MgKi8NCisJCQlpZGVf ZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7DQorCQkJLyogdmVyaWZ5IGdvb2Qg RE1BIHN0YXR1cyAqLw0KKwkJCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0 ID8gKDB4MTAgfCBkbWFfc3RhdCkgOiAwOw0KIAkJY2FzZSBpZGVfZG1hX3Rl c3RfaXJxOiAvKiByZXR1cm5zIDEgaWYgZG1hIGlycSBpc3N1ZWQsIDAgb3Ro ZXJ3aXNlICovDQogCQkJZG1hX3N0YXQgPSBpbmIoZG1hX2Jhc2UrMik7DQog I2lmIDAgIC8qIGRvIG5vdCBzZXQgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91 IGFyZSBkb2luZyAqLw0KQEAgLTY1MSwyMSArNjc4LDIyIEBADQogCQkJCW91 dGIoZG1hX2Jhc2UrMiwgZG1hX3N0YXQgJiAweEU0KTsNCiAJCQl9DQogI2Vu ZGlmDQotCQkJcmV0dXJuIChkbWFfc3RhdCAmIDQpID09IDQ7CS8qIHJldHVy biAxIGlmIElOVFIgYXNzZXJ0ZWQgKi8NCisJCQkvKiByZXR1cm4gMSBpZiBJ TlRSIGFzc2VydGVkICovDQorCQkJcmV0dXJuIChkbWFfc3RhdCAmIDQpID09 IDQ7DQogCQljYXNlIGlkZV9kbWFfYmFkX2RyaXZlOg0KIAkJY2FzZSBpZGVf ZG1hX2dvb2RfZHJpdmU6DQogCQkJcmV0dXJuIGNoZWNrX2RyaXZlX2xpc3Rz KGRyaXZlLCAoZnVuYyA9PSBpZGVfZG1hX2dvb2RfZHJpdmUpKTsNCiAJCWNh c2UgaWRlX2RtYV92ZXJib3NlOg0KIAkJCXJldHVybiByZXBvcnRfZHJpdmVf ZG1haW5nKGRyaXZlKTsNCiAJCWNhc2UgaWRlX2RtYV90aW1lb3V0Og0KLQkJ CS8vIEZJWE1FOiBNYW55IElERSBjaGlwc2V0cyBkbyBub3QgcGVybWl0IGNv bW1hbmQgZmlsZSByZWdpc3RlciBhY2Nlc3MNCi0JCQkvLyBGSVhNRTogd2hp bGUgdGhlIGJ1cy1tYXN0ZXIgZnVuY3Rpb24gaXMgc3RpbGwgYWN0aXZlLg0K LQkJCS8vIEZJWE1FOiBUbyBwcmV2ZW50IGRlYWRsb2NrIHdpdGggdGhvc2Ug Y2hpcHNldHMsIHdlIG11c3QgYmUgZXh0cmVtZWx5DQotCQkJLy8gRklYTUU6 IGNhcmVmdWwgaGVyZSAoYW5kIGluIGlkZV9pbnRyKCkgYXMgd2VsbCkgdG8g Tk9UIGFjY2VzcyBhbnkNCi0JCQkvLyBGSVhNRTogcmVnaXN0ZXJzIGZyb20g dGhlIDB4MUZ4LzB4MTd4IHNldHMgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZQ0K LQkJCS8vIEZJWE1FOiBidXMtbWFzdGVyIG9wZXJhdGlvbiB2aWEgdGhlIGJ1 cy1tYXN0ZXIgY29udHJvbCByZWcuDQotCQkJLy8gRklYTUU6IE90aGVyd2lz ZSwgY2hpcHNldCBkZWFkbG9jayB3aWxsIG9jY3VyLCBhbmQgc29tZSBzeXN0 ZW1zIHdpbGwNCi0JCQkvLyBGSVhNRTogbG9jayB1cCBjb21wbGV0ZWx5ISEN CisJLy8gRklYTUU6IE1hbnkgSURFIGNoaXBzZXRzIGRvIG5vdCBwZXJtaXQg Y29tbWFuZCBmaWxlIHJlZ2lzdGVyIGFjY2Vzcw0KKwkvLyBGSVhNRTogd2hp bGUgdGhlIGJ1cy1tYXN0ZXIgZnVuY3Rpb24gaXMgc3RpbGwgYWN0aXZlLg0K KwkvLyBGSVhNRTogVG8gcHJldmVudCBkZWFkbG9jayB3aXRoIHRob3NlIGNo aXBzZXRzLCB3ZSBtdXN0IGJlIGV4dHJlbWVseQ0KKwkvLyBGSVhNRTogY2Fy ZWZ1bCBoZXJlIChhbmQgaW4gaWRlX2ludHIoKSBhcyB3ZWxsKSB0byBOT1Qg YWNjZXNzIGFueQ0KKwkvLyBGSVhNRTogcmVnaXN0ZXJzIGZyb20gdGhlIDB4 MUZ4LzB4MTd4IHNldHMgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZQ0KKwkvLyBG SVhNRTogYnVzLW1hc3RlciBvcGVyYXRpb24gdmlhIHRoZSBidXMtbWFzdGVy IGNvbnRyb2wgcmVnLg0KKwkvLyBGSVhNRTogT3RoZXJ3aXNlLCBjaGlwc2V0 IGRlYWRsb2NrIHdpbGwgb2NjdXIsIGFuZCBzb21lIHN5c3RlbXMgd2lsbA0K KwkvLyBGSVhNRTogbG9jayB1cCBjb21wbGV0ZWx5ISENCiAjaWZkZWYgQ09O RklHX0JMS19ERVZfSURFRE1BX1RJTUVPVVQNCiAJCQkvKg0KIAkJCSAqIEhh dmUgdG8gaXNzdWUgYW4gYWJvcnQgYW5kIHJlcXVldWUgdGhlIHJlcXVlc3QN CmRpZmYgLXVyTiBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2ZXJzL2lk ZS9pZGUtcG1hYy5jIGxpbnV4LTIuNS4zLXAyL2RyaXZlcnMvaWRlL2lkZS1w bWFjLmMNCi0tLSBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2ZXJzL2lk ZS9pZGUtcG1hYy5jCVN1biBKYW4gMjAgMDA6MjU6NDQgMjAwMg0KKysrIGxp bnV4LTIuNS4zLXAyL2RyaXZlcnMvaWRlL2lkZS1wbWFjLmMJU3VuIEphbiAy MCAwMDo0MDoxMSAyMDAyDQpAQCAtMjE1LDMyICsyMTUsNiBAQA0KICNkZWZp bmUgU1lTQ0xLX1RJQ0tTKHQpCQkoKCh0KSArIElERV9TWVNDTEtfTlMgLSAx KSAvIElERV9TWVNDTEtfTlMpDQogI2RlZmluZSBTWVNDTEtfVElDS1NfVURN QSh0KQkoKCh0KSArIElERV9TWVNDTEtfVUxUUkFfUFMgLSAxKSAvIElERV9T WVNDTEtfVUxUUkFfUFMpDQogDQotc3RhdGljIF9faW5saW5lX18gaW50DQot d2FpdF9mb3JfcmVhZHkoaWRlX2RyaXZlX3QgKmRyaXZlKQ0KLXsNCi0JLyog VGltZW91dCBidW1wZWQgZm9yIHNvbWUgcG93ZXJib29rcyAqLw0KLQlpbnQg dGltZW91dCA9IDIwMDA7DQotCWJ5dGUgc3RhdDsNCi0NCi0Jd2hpbGUoLS10 aW1lb3V0KSB7DQotCQlzdGF0ID0gR0VUX1NUQVQoKTsNCi0JCWlmKCEoc3Rh dCAmIEJVU1lfU1RBVCkpIHsNCi0JCQlpZiAoZHJpdmUtPnJlYWR5X3N0YXQg PT0gMCkNCi0JCQkJYnJlYWs7DQotCQkJZWxzZSBpZigoc3RhdCAmIGRyaXZl LT5yZWFkeV9zdGF0KSB8fCAoc3RhdCAmIEVSUl9TVEFUKSkNCi0JCQkJYnJl YWs7DQotCQl9DQotCQltZGVsYXkoMSk7DQotCX0NCi0JaWYoKHN0YXQgJiBF UlJfU1RBVCkgfHwgdGltZW91dCA8PSAwKSB7DQotCQlpZiAoc3RhdCAmIEVS Ul9TVEFUKSB7DQotCQkJcHJpbnRrKEtFUk5fRVJSICJpZGVfcG1hYzogd2Fp dF9mb3JfcmVhZHksIGVycm9yIHN0YXR1czogJXhcbiIsIHN0YXQpOw0KLQkJ fQ0KLQkJcmV0dXJuIDE7DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KIC8q IE5vdGU6IFdlIGRvbid0IHVzZSB0aGUgZ2VuZXJpYyByb3V0aW5lIGhlcmUg YmVjYXVzZSBzb21lIG9mIEFwcGxlJ3MNCiAgKiBjb250cm9sbGVyIHNlZW0g dG8gYmUgdmVyeSBzZW5zaXRpdmUgYWJvdXQgaG93IHRoaW5ncyBhcmUgZG9u ZS4NCiAgKiBXZSBzaG91bGQgcHJvYmFibHkgc2V0IHRoZSBOSUVOIGJpdCwg YnV0IHRoYXQncyBhbiBleGFtcGxlIG9mIHRoaW5nDQpAQCAtMjYxLDcgKzIz NSw4IEBADQogCVNFTEVDVF9EUklWRShIV0lGKGRyaXZlKSwgZHJpdmUpOw0K IAlTRUxFQ1RfTUFTSyhIV0lGKGRyaXZlKSwgZHJpdmUsIDApOw0KIAl1ZGVs YXkoMSk7DQotCWlmKHdhaXRfZm9yX3JlYWR5KGRyaXZlKSkgew0KKwkvKiBU aW1lb3V0IGJ1bXBlZCBmb3Igc29tZSBwb3dlcmJvb2tzICovDQorCWlmKHdh aXRfZm9yX3JlYWR5KGRyaXZlLCAyMDAwKSkgew0KIAkJcHJpbnRrKEtFUk5f RVJSICJwbWFjX2lkZV9kb19zZXRmZWF0dXJlIGRpc2sgbm90IHJlYWR5IGJl Zm9yZSBTRVRfRkVBVFVSRSFcbiIpOw0KIAkJZ290byBvdXQ7DQogCX0NCkBA IC0yNjksNyArMjQ0LDggQEANCiAJT1VUX0JZVEUoY29tbWFuZCwgSURFX05T RUNUT1JfUkVHKTsNCiAJT1VUX0JZVEUoV0lOX1NFVEZFQVRVUkVTLCBJREVf Q09NTUFORF9SRUcpOw0KIAl1ZGVsYXkoMSk7DQotCXJlc3VsdCA9IHdhaXRf Zm9yX3JlYWR5KGRyaXZlKTsNCisJLyogVGltZW91dCBidW1wZWQgZm9yIHNv bWUgcG93ZXJib29rcyAqLw0KKwlyZXN1bHQgPSB3YWl0X2Zvcl9yZWFkeShk cml2ZSwgMjAwMCk7DQogCWlmIChyZXN1bHQpDQogCQlwcmludGsoS0VSTl9F UlIgInBtYWNfaWRlX2RvX3NldGZlYXR1cmUgZGlzayBub3QgcmVhZHkgYWZ0 ZXIgU0VUX0ZFQVRVUkUgIVxuIik7DQogb3V0Og0KQEAgLTk4OCw4ICs5NjQs MjcgQEANCiAJCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spDQogCQkJ cmV0dXJuIDA7DQogCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZpZGVfZG1h X2ludHIsIFdBSVRfQ01ELCBOVUxMKTsNCi0JCU9VVF9CWVRFKGZ1bmM9PWlk ZV9kbWFfd3JpdGU/IFdJTl9XUklURURNQTogV0lOX1JFQURETUEsDQotCQkJ IElERV9DT01NQU5EX1JFRyk7DQorCQkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUg Ki8NCisJCS8qDQorCQkgKiBGSVggTUUgdG8gdXNlIG9ubHkgQUNCIGlkZV90 YXNrX3QgYXJncyBTdHJ1Y3QNCisJCSAqLw0KKyNpZiAwDQorCXsNCisJCWlk ZV90YXNrX3QgKmFyZ3MgPSBIV0dST1VQKGRyaXZlKS0+cnEtPnNwZWNpYWw7 DQorCQlPVVRfQllURShhcmdzLT50ZlJlZ2lzdGVyW0lERV9DT01NQU5EX09G RlNFVF0sIElERV9DT01NQU5EX1JFRyk7DQorCX0NCisjZWxzZQ0KKwkJaWYg KChIV0dST1VQKGRyaXZlKS0+cnEtPmZsYWdzICYgUkVRX0RSSVZFX1RBU0tG SUxFKSAmJg0KKwkJICAgIChkcml2ZS0+YWRkcmVzc2luZyA9PSAxKSkgew0K KwkJCWlkZV90YXNrX3QgKmFyZ3MgPSBIV0dST1VQKGRyaXZlKS0+cnEtPnNw ZWNpYWw7DQorCQkJT1VUX0JZVEUoYXJncy0+dGZSZWdpc3RlcltJREVfQ09N TUFORF9PRkZTRVRdLCBJREVfQ09NTUFORF9SRUcpOw0KKwkJfSBlbHNlIGlm IChkcml2ZS0+YWRkcmVzc2luZykgew0KKwkJCU9VVF9CWVRFKChmdW5jPT1p ZGVfZG1hX3dyaXRlKSA/IFdJTl9XUklURURNQV9FWFQgOiBXSU5fUkVBRERN QV9FWFQsIElERV9DT01NQU5EX1JFRyk7DQorCQl9IGVsc2Ugew0KKwkJCU9V VF9CWVRFKChmdW5jPT1pZGVfZG1hX3dyaXRlKSA/IFdJTl9XUklURURNQSA6 IFdJTl9SRUFERE1BLCBJREVfQ09NTUFORF9SRUcpOw0KKwkJfQ0KKyNlbmRp Zg0KKy8vCQlyZXR1cm4gSFdJRihkcml2ZSktPmRtYXByb2MoaWRlX2RtYV9i ZWdpbiwgZHJpdmUpOw0KIAljYXNlIGlkZV9kbWFfYmVnaW46DQogCQlvdXRf bGUzMigmZG1hLT5jb250cm9sLCAoUlVOIDw8IDE2KSB8IFJVTik7DQogCQli cmVhazsNCmRpZmYgLXVyTiBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2 ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYyBsaW51eC0yLjUuMy1wMi9kcml2ZXJz L2lkZS9pZGUtdGFza2ZpbGUuYw0KLS0tIGxpbnV4LTIuNS4zLXAyLXByaXN0 aW5lL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCVN1biBKYW4gMjAgMDA6 MjU6NDQgMjAwMg0KKysrIGxpbnV4LTIuNS4zLXAyL2RyaXZlcnMvaWRlL2lk ZS10YXNrZmlsZS5jCVN1biBKYW4gMjAgMDA6NDA6MTEgMjAwMg0KQEAgLTEs OCArMSwxMSBAQA0KIC8qDQotICogbGludXgvZHJpdmVycy9pZGUvaWRlLXRh c2tmaWxlLmMJVmVyc2lvbiAwLjIwCU9jdCAxMSwgMjAwMA0KKyAqIGxpbnV4 L2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCVZlcnNpb24gMC4yNQlKYW4g MTcsIDIwMDENCiAgKg0KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAJCU1pY2hh ZWwgQ29ybndlbGwgPGNvcm53ZWxsQGFjbS5vcmc+DQotICogIENvcHlyaWdo dCAoQykgMjAwMAkJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9y Zz4NCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIJTWljaGFlbCBDb3Ju d2VsbCA8Y29ybndlbGxAYWNtLm9yZz4NCisgKiAgQ29weXJpZ2h0IChDKSAy MDAwLTIwMDIJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4N CisgKg0KKyAqICBCSU8gR2x1ZSBMYXllciBpbnRvIDIuNS4zLXByZTEscHJl Mg0KKyAqCQkJCUplbnMgQXhib2UgPGF4Ym9lQGJyaWNrLmtlcm5lbC5kaz4N CiAgKg0KICAqICBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiAg Kg0KQEAgLTQyLDYgKzQ1LDMzIEBADQogI2RlZmluZSBEVEYoeC4uLikNCiAj ZW5kaWYNCiANCisvKg0KKyAqDQorICovDQorI2RlZmluZSB0YXNrX3JxX29m ZnNldChycSkgXA0KKwkoKChycSktPm5yX3NlY3RvcnMgLSAocnEpLT5jdXJy ZW50X25yX3NlY3RvcnMpICogU0VDVE9SX1NJWkUpDQorDQorLyoNCisgKiBm b3Igbm93LCB0YXNrZmlsZSByZXF1ZXN0cyBhcmUgc3BlY2lhbCA6Lw0KKyAq DQorICogSG93ZXZlciwgdXBvbiB0aGUgY3JlYXRpb24gb2YgdGhlIGF0YXBp IHZlcnNpb24gb2YgcGFja2V0X2NvbW1hbmQNCisgKiBkYXRhLXBoYXNlIElT UiBwbHVzIGl0IG93biBkaWFnbm9zdGljcyBhbmQgZXh0ZW5zaW9ucyBmb3Ig ZGlyZWN0IGFjY2Vzcw0KKyAqIChpb2N0bCxyZWFkLHdyaXRlLHJpcCxzdHJl YW0gLS0gYXRhcGkpLCB0aGUga21hcC9rdW5tYXAgZm9yIFBJTyB3aWxsDQor ICogY29tZSBsb2NhbGl6ZWQuDQorICovDQoraW5saW5lIGNoYXIgKnRhc2tf bWFwX3JxIChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGxvbmcgKmZs YWdzKQ0KK3sNCisJaWYgKHJxLT5iaW8pDQorCQlyZXR1cm4gaWRlX21hcF9i dWZmZXIocnEsIGZsYWdzKTsNCisJcmV0dXJuIHJxLT5idWZmZXIgKyB0YXNr X3JxX29mZnNldChycSk7DQorfQ0KKw0KK2lubGluZSB2b2lkIHRhc2tfdW5t YXBfcnEgKHN0cnVjdCByZXF1ZXN0ICpycSwgY2hhciAqYnVmLCB1bnNpZ25l ZCBsb25nICpmbGFncykNCit7DQorCWlmIChycS0+YmlvKQ0KKwkJaWRlX3Vu bWFwX2J1ZmZlcihidWYsIGZsYWdzKTsNCit9DQorDQogaW5saW5lIHUzMiB0 YXNrX3JlYWRfMjQgKGlkZV9kcml2ZV90ICpkcml2ZSkNCiB7DQogCXJldHVy bgkoSU5fQllURShJREVfSENZTF9SRUcpPDwxNikgfA0KQEAgLTI1NSw2ICsy ODUsMzIgQEANCiAJcmV0dXJuIDE7CQkvKiBkcml2ZSByZWFkeTogKm1pZ2h0 KiBiZSBpbnRlcnJ1cHRpbmcgKi8NCiB9DQogDQorLyoNCisgKiBHbG9iYWwg Zm9yIEFsbCwgYW5kIHRha2VuIGZyb20gaWRlLXBtYWMuYw0KKyAqLw0KK2lu dCB3YWl0X2Zvcl9yZWFkeSAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdGlt ZW91dCkNCit7DQorCWJ5dGUgc3RhdCA9IDA7DQorDQorCXdoaWxlKC0tdGlt ZW91dCkgew0KKwkJc3RhdCA9IEdFVF9TVEFUKCk7DQorCQlpZighKHN0YXQg JiBCVVNZX1NUQVQpKSB7DQorCQkJaWYgKGRyaXZlLT5yZWFkeV9zdGF0ID09 IDApDQorCQkJCWJyZWFrOw0KKwkJCWVsc2UgaWYoKHN0YXQgJiBkcml2ZS0+ cmVhZHlfc3RhdCkgfHwgKHN0YXQgJiBFUlJfU1RBVCkpDQorCQkJCWJyZWFr Ow0KKwkJfQ0KKwkJbWRlbGF5KDEpOw0KKwl9DQorCWlmKChzdGF0ICYgRVJS X1NUQVQpIHx8IHRpbWVvdXQgPD0gMCkgew0KKwkJaWYgKHN0YXQgJiBFUlJf U1RBVCkgew0KKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHdhaXRfZm9yX3Jl YWR5LCBlcnJvciBzdGF0dXM6ICV4XG4iLCBkcml2ZS0+bmFtZSwgc3RhdCk7 DQorCQl9DQorCQlyZXR1cm4gMTsNCisJfQ0KKwlyZXR1cm4gMDsNCit9DQor DQogaWRlX3N0YXJ0c3RvcF90IGRvX3J3X3Rhc2tmaWxlIChpZGVfZHJpdmVf dCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spDQogew0KIAl0YXNrX3N0cnVj dF90ICp0YXNrZmlsZSA9ICh0YXNrX3N0cnVjdF90ICopIHRhc2stPnRmUmVn aXN0ZXI7DQpAQCAtNzM2LDIxICs3OTIsMjUgQEANCiAJCX0NCiAJfQ0KIAlE VEYoInN0YXQ6ICUwMnhcbiIsIHN0YXQpOw0KLQlwQnVmID0gaWRlX21hcF9y cShycSwgJmZsYWdzKTsNCisJcEJ1ZiA9IHRhc2tfbWFwX3JxKHJxLCAmZmxh Z3MpOw0KIAlEVEYoIlJlYWQ6ICVwLCBycS0+Y3VycmVudF9ucl9zZWN0b3Jz OiAlZFxuIiwgcEJ1ZiwgKGludCkgcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7 DQogDQogCWRyaXZlLT5pb18zMmJpdCA9IDA7DQogCXRhc2tmaWxlX2lucHV0 X2RhdGEoZHJpdmUsIHBCdWYsIFNFQ1RPUl9XT1JEUyk7DQotCWlkZV91bm1h cF9ycShycSwgcEJ1ZiwgJmZsYWdzKTsNCisJdGFza191bm1hcF9ycShycSwg cEJ1ZiwgJmZsYWdzKTsNCiAJZHJpdmUtPmlvXzMyYml0ID0gaW9fMzJiaXQ7 DQogDQogCWlmICgtLXJxLT5jdXJyZW50X25yX3NlY3RvcnMgPD0gMCkgew0K IAkJLyogKGhzKTogc3dhcHBlZCBuZXh0IDIgbGluZXMgKi8NCiAJCURURigi UmVxdWVzdCBFbmRlZCBzdGF0OiAlMDJ4XG4iLCBHRVRfU1RBVCgpKTsNCisj aWYgMAkvKiBvcmlnaW5hbCBkYXRhLXBoYXNlICovDQorCQlpZGVfZW5kX3Jl cXVlc3QoMSwgSFdHUk9VUChkcml2ZSkpOw0KKyNlbHNlDQogCQlpZiAoaWRl X2VuZF9yZXF1ZXN0KDEsIEhXR1JPVVAoZHJpdmUpKSkgew0KIAkJCWlkZV9z ZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfaW5faW50ciwgIFdBSVRfQ01ELCBO VUxMKTsNCiAJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7DQogCQl9DQorI2VuZGlm DQogCX0gZWxzZSB7DQogCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNr X2luX2ludHIsICBXQUlUX0NNRCwgTlVMTCk7DQogCQlyZXR1cm4gaWRlX3N0 YXJ0ZWQ7DQpAQCAtODIxLDcgKzg4MSw3IEBADQogCQkJcmV0dXJuIGlkZV9l cnJvcihkcml2ZSwgInRhc2tfbXVsaW5faW50ciIsIHN0YXQpOw0KIAkJfQ0K IAkJLyogbm8gZGF0YSB5ZXQsIHNvIHdhaXQgZm9yIGFub3RoZXIgaW50ZXJy dXB0ICovDQotCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIHRhc2tfbXVsaW5f aW50ciwgV0FJVF9DTUQsIE5VTEwpOw0KKwkJaWRlX3NldF9oYW5kbGVyKGRy aXZlLCAmdGFza19tdWxpbl9pbnRyLCBXQUlUX0NNRCwgTlVMTCk7DQogCQly ZXR1cm4gaWRlX3N0YXJ0ZWQ7DQogCX0NCiANCkBAIC04NDAsMTEgKzkwMCwx MSBAQA0KIAkJICovDQogCQluc2VjdCA9IDE7DQogCQl3aGlsZSAocnEtPmN1 cnJlbnRfbnJfc2VjdG9ycykgew0KLQkJCXBCdWYgPSBpZGVfbWFwX3JxKHJx LCAmZmxhZ3MpOw0KKwkJCXBCdWYgPSB0YXNrX21hcF9ycShycSwgJmZsYWdz KTsNCiAJCQlEVEYoIk11bHRpcmVhZDogJXAsIG5zZWN0OiAlZCwgcnEtPmN1 cnJlbnRfbnJfc2VjdG9yczogJWxkXG4iLCBwQnVmLCBuc2VjdCwgcnEtPmN1 cnJlbnRfbnJfc2VjdG9ycyk7DQogCQkJZHJpdmUtPmlvXzMyYml0ID0gMDsN CiAJCQl0YXNrZmlsZV9pbnB1dF9kYXRhKGRyaXZlLCBwQnVmLCBuc2VjdCAq IFNFQ1RPUl9XT1JEUyk7DQotCQkJaWRlX3VubWFwX3JxKHJxLCBwQnVmLCAm ZmxhZ3MpOw0KKwkJCXRhc2tfdW5tYXBfcnEocnEsIHBCdWYsICZmbGFncyk7 DQogCQkJZHJpdmUtPmlvXzMyYml0ID0gaW9fMzJiaXQ7DQogCQkJcnEtPmVy cm9ycyA9IDA7DQogCQkJcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyAtPSBuc2Vj dDsNCkBAIC04NTUsMTggKzkxNSwzNiBAQA0KIAl9DQogI2VuZGlmIC8qIEFM VFNUQVRfU0NSRVdfVVAgKi8NCiANCisjaWYgMAkvKiBvcmlnaW5hbCBkYXRh LXBoYXNlICovDQorCW5zZWN0ID0gKHJxLT5jdXJyZW50X25yX3NlY3RvcnMg PiBtc2VjdCkgPyBtc2VjdCA6IHJxLT5jdXJyZW50X25yX3NlY3RvcnM7DQor CXBCdWYgPSB0YXNrX21hcF9ycShycSwgJmZsYWdzKTsNCisJRFRGKCJNdWx0 aXJlYWQ6ICVwLCBuc2VjdDogJWQgLCBycS0+Y3VycmVudF9ucl9zZWN0b3Jz OiAlbGRcbiIsDQorCQlwQnVmLCBuc2VjdCwgcnEtPmN1cnJlbnRfbnJfc2Vj dG9ycyk7DQorCWRyaXZlLT5pb18zMmJpdCA9IDA7DQorCXRhc2tmaWxlX2lu cHV0X2RhdGEoZHJpdmUsIHBCdWYsIG5zZWN0ICogU0VDVE9SX1dPUkRTKTsN CisJdGFza191bm1hcF9ycShycSwgcEJ1ZiwgJmZsYWdzKTsNCisJZHJpdmUt PmlvXzMyYml0ID0gaW9fMzJiaXQ7DQorCXJxLT5lcnJvcnMgPSAwOw0KKwly cS0+Y3VycmVudF9ucl9zZWN0b3JzIC09IG5zZWN0Ow0KKwlpZiAocnEtPmN1 cnJlbnRfbnJfc2VjdG9ycyAhPSAwKSB7DQorCQlpZGVfc2V0X2hhbmRsZXIo ZHJpdmUsICZ0YXNrX211bGluX2ludHIsIFdBSVRfQ01ELCBOVUxMKTsNCisJ CXJldHVybiBpZGVfc3RhcnRlZDsNCisJfQ0KKwlpZGVfZW5kX3JlcXVlc3Qo MSwgSFdHUk9VUChkcml2ZSkpOw0KKwlyZXR1cm4gaWRlX3N0b3BwZWQ7DQor I2Vsc2UNCiAJZG8gew0KIAkJbnNlY3QgPSBycS0+Y3VycmVudF9ucl9zZWN0 b3JzOw0KIAkJaWYgKG5zZWN0ID4gbXNlY3QpDQogCQkJbnNlY3QgPSBtc2Vj dDsNCiANCi0JCXBCdWYgPSBpZGVfbWFwX3JxKHJxLCAmZmxhZ3MpOw0KKwkJ cEJ1ZiA9IHRhc2tfbWFwX3JxKHJxLCAmZmxhZ3MpOw0KIA0KIAkJRFRGKCJN dWx0aXJlYWQ6ICVwLCBuc2VjdDogJWQgLCBycS0+Y3VycmVudF9ucl9zZWN0 b3JzOiAlbGRcbiIsDQogCQkJcEJ1ZiwgbnNlY3QsIHJxLT5jdXJyZW50X25y X3NlY3RvcnMpOw0KIAkJZHJpdmUtPmlvXzMyYml0ID0gMDsNCiAJCXRhc2tm aWxlX2lucHV0X2RhdGEoZHJpdmUsIHBCdWYsIG5zZWN0ICogU0VDVE9SX1dP UkRTKTsNCi0JCWlkZV91bm1hcF9ycShycSwgcEJ1ZiwgJmZsYWdzKTsNCisJ CXRhc2tfdW5tYXBfcnEocnEsIHBCdWYsICZmbGFncyk7DQogCQlkcml2ZS0+ aW9fMzJiaXQgPSBpb18zMmJpdDsNCiAJCXJxLT5lcnJvcnMgPSAwOw0KIAkJ cnEtPmN1cnJlbnRfbnJfc2VjdG9ycyAtPSBuc2VjdDsNCkBAIC04NzcsMTIg Kzk1NSwxMiBAQA0KIAkJfQ0KIAl9IHdoaWxlIChtc2VjdCk7DQogDQotDQog CS8qDQogCSAqIG1vcmUgZGF0YSBsZWZ0DQogCSAqLw0KLQlpZGVfc2V0X2hh bmRsZXIoZHJpdmUsIHRhc2tfbXVsaW5faW50ciwgV0FJVF9DTUQsIE5VTEwp Ow0KKwlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX211bGluX2ludHIs IFdBSVRfQ01ELCBOVUxMKTsNCiAJcmV0dXJuIGlkZV9zdGFydGVkOw0KKyNl bmRpZg0KIH0NCiANCiBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2lu dHIgKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQ0K QEAgLTg5OSwxMSArOTc3LDExIEBADQogCWlmICgoYXJncy0+dGZSZWdpc3Rl cltJREVfQ09NTUFORF9PRkZTRVRdICE9IFdJTl9NVUxUV1JJVEUpICYmDQog CSAgICAoYXJncy0+dGZSZWdpc3RlcltJREVfQ09NTUFORF9PRkZTRVRdICE9 IFdJTl9NVUxUV1JJVEVfRVhUKSkgew0KIAkJdW5zaWduZWQgbG9uZyBmbGFn czsNCi0JCWNoYXIgKmJ1ZiA9IGlkZV9tYXBfcnEocnEsICZmbGFncyk7DQor CQljaGFyICpwQnVmID0gdGFza19tYXBfcnEocnEsICZmbGFncyk7DQogCQkv KiBGb3IgV3JpdGVfc2VjdG9ycyB3ZSBuZWVkIHRvIHN0dWZmIHRoZSBmaXJz dCBzZWN0b3IgKi8NCi0JCXRhc2tmaWxlX291dHB1dF9kYXRhKGRyaXZlLCBi dWYsIFNFQ1RPUl9XT1JEUyk7DQorCQl0YXNrZmlsZV9vdXRwdXRfZGF0YShk cml2ZSwgcEJ1ZiwgU0VDVE9SX1dPUkRTKTsNCiAJCXJxLT5jdXJyZW50X25y X3NlY3RvcnMtLTsNCi0JCWlkZV91bm1hcF9ycShycSwgYnVmLCAmZmxhZ3Mp Ow0KKwkJdGFza191bm1hcF9ycShycSwgcEJ1ZiwgJmZsYWdzKTsNCiAJfSBl bHNlIHsNCiAJCS8qDQogCQkgKiAoa3MvaHMpOiBTdHVmZiB0aGUgZmlyc3Qg c2VjdG9yKHMpDQpAQCAtOTQ4LDIxICsxMDI2LDI1IEBADQogDQogCWlmICgo cnEtPmN1cnJlbnRfbnJfc2VjdG9ycz09MSkgXiAoc3RhdCAmIERSUV9TVEFU KSkgew0KIAkJcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7DQotCQlwQnVmID0g aWRlX21hcF9ycShycSwgJmZsYWdzKTsNCisJCXBCdWYgPSB0YXNrX21hcF9y cShycSwgJmZsYWdzKTsNCiAJCURURigid3JpdGU6ICVwLCBycS0+Y3VycmVu dF9ucl9zZWN0b3JzOiAlZFxuIiwgcEJ1ZiwgKGludCkgcnEtPmN1cnJlbnRf bnJfc2VjdG9ycyk7DQogCQlkcml2ZS0+aW9fMzJiaXQgPSAwOw0KIAkJdGFz a2ZpbGVfb3V0cHV0X2RhdGEoZHJpdmUsIHBCdWYsIFNFQ1RPUl9XT1JEUyk7 DQotCQlpZGVfdW5tYXBfcnEocnEsIHBCdWYsICZmbGFncyk7DQorCQl0YXNr X3VubWFwX3JxKHJxLCBwQnVmLCAmZmxhZ3MpOw0KIAkJZHJpdmUtPmlvXzMy Yml0ID0gaW9fMzJiaXQ7DQogCQlycS0+ZXJyb3JzID0gMDsNCiAJCXJxLT5j dXJyZW50X25yX3NlY3RvcnMtLTsNCiAJfQ0KIA0KIAlpZiAocnEtPmN1cnJl bnRfbnJfc2VjdG9ycyA8PSAwKSB7DQorI2lmIDAJLyogb3JpZ2luYWwgZGF0 YS1waGFzZSAqLw0KKwkJaWRlX2VuZF9yZXF1ZXN0KDEsIEhXR1JPVVAoZHJp dmUpKTsNCisjZWxzZQ0KIAkJaWYgKGlkZV9lbmRfcmVxdWVzdCgxLCBIV0dS T1VQKGRyaXZlKSkpIHsNCiAJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0 YXNrX291dF9pbnRyLCBXQUlUX0NNRCwgTlVMTCk7DQogCQkJcmV0dXJuIGlk ZV9zdGFydGVkOw0KIAkJfQ0KKyNlbmRpZg0KIAl9IGVsc2Ugew0KIAkJaWRl X3NldF9oYW5kbGVyKGRyaXZlLCAmdGFza19vdXRfaW50ciwgV0FJVF9DTUQs IE5VTEwpOw0KIAkJcmV0dXJuIGlkZV9zdGFydGVkOw0KQEAgLTk5OCw3ICsx MDgwLDYgQEANCiAJaWYgKHJxLT5jdXJyZW50X25yX3NlY3RvcnMgPT0gMCkg ew0KIAkJaWYgKHN0YXQgJiAoRVJSX1NUQVR8RFJRX1NUQVQpKQ0KIAkJCXJl dHVybiBpZGVfZXJyb3IoZHJpdmUsICJ0YXNrX211bG91dF9pbnRyIiwgc3Rh dCk7DQotDQogCQkvKg0KIAkJICogdGhlcmUgbWF5IGJlIG1vcmUsIGlkZV9k b19yZXF1ZXN0IHdpbGwgcmVzdGFydCBpdCBpZg0KIAkJICogbmVjZXNzYXJ5 DQpAQCAtMTAyOCwxMSArMTEwOSwxMSBAQA0KIAlpZiAoIW1zZWN0KSB7DQog CQluc2VjdCA9IDE7DQogCQl3aGlsZSAocnEtPmN1cnJlbnRfbnJfc2VjdG9y cykgew0KLQkJCXBCdWYgPSBpZGVfbWFwX3JxKHJxLCAmZmxhZ3MpOw0KKwkJ CXBCdWYgPSB0YXNrX21hcF9ycShycSwgJmZsYWdzKTsNCiAJCQlEVEYoIk11 bHRpd3JpdGU6ICVwLCBuc2VjdDogJWQsIHJxLT5jdXJyZW50X25yX3NlY3Rv cnM6ICVsZFxuIiwgcEJ1ZiwgbnNlY3QsIHJxLT5jdXJyZW50X25yX3NlY3Rv cnMpOw0KIAkJCWRyaXZlLT5pb18zMmJpdCA9IDA7DQogCQkJdGFza2ZpbGVf b3V0cHV0X2RhdGEoZHJpdmUsIHBCdWYsIG5zZWN0ICogU0VDVE9SX1dPUkRT KTsNCi0JCQlpZGVfdW5tYXBfcnEocEJ1ZiwgJmZsYWdzKTsNCisJCQl0YXNr X3VubWFwX3JxKHBCdWYsICZmbGFncyk7DQogCQkJZHJpdmUtPmlvXzMyYml0 ID0gaW9fMzJiaXQ7DQogCQkJcnEtPmVycm9ycyA9IDA7DQogCQkJcnEtPmN1 cnJlbnRfbnJfc2VjdG9ycyAtPSBuc2VjdDsNCkBAIC0xMDQzLDE2ICsxMTI0 LDE5IEBADQogCX0NCiAjZW5kaWYgLyogQUxUU1RBVF9TQ1JFV19VUCAqLw0K IA0KKyNpZiAwCS8qIG9yaWdpbmFsIGRhdGEtcGhhc2UgKi8NCisJbnNlY3Qg PSAocnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA+IG1zZWN0KSA/IG1zZWN0IDog cnEtPmN1cnJlbnRfbnJfc2VjdG9yczsNCisjZWxzZQ0KIAluc2VjdCA9IHJx LT5jdXJyZW50X25yX3NlY3RvcnM7DQogCWlmIChuc2VjdCA+IG1zZWN0KQ0K IAkJbnNlY3QgPSBtc2VjdDsNCi0NCi0JcEJ1ZiA9IGlkZV9tYXBfcnEocnEs ICZmbGFncyk7DQorI2VuZGlmDQorCXBCdWYgPSB0YXNrX21hcF9ycShycSwg JmZsYWdzKTsNCiAJRFRGKCJNdWx0aXdyaXRlOiAlcCwgbnNlY3Q6ICVkICwg cnEtPmN1cnJlbnRfbnJfc2VjdG9yczogJWxkXG4iLA0KIAkJcEJ1ZiwgbnNl Y3QsIHJxLT5jdXJyZW50X25yX3NlY3RvcnMpOw0KIAlkcml2ZS0+aW9fMzJi aXQgPSAwOw0KIAl0YXNrZmlsZV9vdXRwdXRfZGF0YShkcml2ZSwgcEJ1Ziwg bnNlY3QgKiBTRUNUT1JfV09SRFMpOw0KLQlpZGVfdW5tYXBfcnEocnEsIHBC dWYsICZmbGFncyk7DQorCXRhc2tfdW5tYXBfcnEocnEsIHBCdWYsICZmbGFn cyk7DQogCWRyaXZlLT5pb18zMmJpdCA9IGlvXzMyYml0Ow0KIAlycS0+ZXJy b3JzID0gMDsNCiAJcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyAtPSBuc2VjdDsN CkBAIC0xMzY0LDYgKzE0NDgsNyBAQA0KIAlhcmdzLmNvbW1hbmRfdHlwZSA9 IGlkZV9jbWRfdHlwZV9wYXJzZXIgKCZhcmdzKTsNCiAJaWYgKGFyZ3MuY29t bWFuZF90eXBlICE9IElERV9EUklWRV9UQVNLX05PX0RBVEEpDQogCQlycS5j dXJyZW50X25yX3NlY3RvcnMgPSBycS5ucl9zZWN0b3JzID0gKGhvYmZpbGUt PnNlY3Rvcl9jb3VudCA8PCA4KSB8IHRhc2tmaWxlLT5zZWN0b3JfY291bnQ7 DQorCS8qCXJxLmhhcmRfY3VyX3NlY3RvcnMJKi8NCiANCiAJcnEuYnVmZmVy ID0gYnVmOw0KIAlycS5zcGVjaWFsID0gJmFyZ3M7DQpAQCAtMTM3OCw2ICsx NDYzLDcgQEANCiANCiAJaWYgKGFyZ3MtPmNvbW1hbmRfdHlwZSAhPSBJREVf RFJJVkVfVEFTS19OT19EQVRBKQ0KIAkJcnEuY3VycmVudF9ucl9zZWN0b3Jz ID0gcnEubnJfc2VjdG9ycyA9IChhcmdzLT5ob2JSZWdpc3RlcltJREVfTlNF Q1RPUl9PRkZTRVRfSE9CXSA8PCA4KSB8IGFyZ3MtPnRmUmVnaXN0ZXJbSURF X05TRUNUT1JfT0ZGU0VUXTsNCisJLyoJcnEuaGFyZF9jdXJfc2VjdG9ycwkq Lw0KIA0KIAlycS5zcGVjaWFsID0gYXJnczsNCiAJcmV0dXJuIGlkZV9kb19k cml2ZV9jbWQoZHJpdmUsICZycSwgaWRlX3dhaXQpOw0KQEAgLTE2ODksNiAr MTc3NSw3IEBADQogfQ0KIA0KIEVYUE9SVF9TWU1CT0woZHJpdmVfaXNfcmVh ZHkpOw0KK0VYUE9SVF9TWU1CT0wod2FpdF9mb3JfcmVhZHkpOw0KIEVYUE9S VF9TWU1CT0wodGFza19yZWFkXzI0KTsNCiBFWFBPUlRfU1lNQk9MKGF0YV9p bnB1dF9kYXRhKTsNCiBFWFBPUlRfU1lNQk9MKGF0YV9vdXRwdXRfZGF0YSk7 DQpkaWZmIC11ck4gbGludXgtMi41LjMtcDItcHJpc3RpbmUvZHJpdmVycy9p ZGUvcGRjMjAyeHguYyBsaW51eC0yLjUuMy1wMi9kcml2ZXJzL2lkZS9wZGMy MDJ4eC5jDQotLS0gbGludXgtMi41LjMtcDItcHJpc3RpbmUvZHJpdmVycy9p ZGUvcGRjMjAyeHguYwlTdW4gSmFuIDIwIDAwOjI1OjQ0IDIwMDINCisrKyBs aW51eC0yLjUuMy1wMi9kcml2ZXJzL2lkZS9wZGMyMDJ4eC5jCVN1biBKYW4g MjAgMDA6NDA6MTEgMjAwMg0KQEAgLTkwMCw3ICs5MDAsNyBAQA0KIAkJcmV0 dXJuIGlkZV9kbWFfb2ZmX3F1aWV0bHk7DQogCX0NCiANCi0Jb3V0YihpbmIo ZG1hX2Jhc2UrMikgJiB+KDE8PCg1K3VuaXQpKSwgZG1hX2Jhc2UrMik7DQor CU9VVF9CWVRFKElOX0JZVEUoZG1hX2Jhc2UrMikgJiB+KDE8PCg1K3VuaXQp KSwgZG1hX2Jhc2UrMik7DQogCSh2b2lkKSBod2lmLT5zcGVlZHByb2MoZHJp dmUsIHNwZWVkKTsNCiANCiAJcmV0dXJuICgoaW50KQkoKGlkLT5kbWFfdWx0 cmEgPj4gMTQpICYgMykgPyBpZGVfZG1hX29uIDoNCkBAIC0xMDg2LDcgKzEw ODYsNyBAQA0KICNpZiAwDQogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRy aXZlKTsNCiAJdW5zaWduZWQgbG9uZyBoaWdoXzE2CT0gcGNpX3Jlc291cmNl X3N0YXJ0KGh3aWYtPnBjaV9kZXYsIDQpOw0KLQlieXRlIHNjMWYJCT0gaW5i KGhpZ2hfMTYgKyAweDAwMWYpOw0KKwlieXRlIHNjMWYJCT0gSU5fQllURSho aWdoXzE2ICsgMHgwMDFmKTsNCiANCiAJaWYgKCFod2lmKQ0KIAkJcmV0dXJu IC1FSU5WQUw7DQpAQCAtMTA5NCw5ICsxMDk0LDkgQEANCiAvLwlod2lmLT5i dXNfc3RhdGUgPSBzdGF0ZTsNCiANCiAJaWYgKHN0YXRlKSB7DQotCQlvdXRi KHNjMWYgfCAweDA4LCBoaWdoXzE2ICsgMHgwMDFmKTsNCisJCU9VVF9CWVRF KHNjMWYgfCAweDA4LCBoaWdoXzE2ICsgMHgwMDFmKTsNCiAJfSBlbHNlIHsN Ci0JCW91dGIoc2MxZiAmIH4weDA4LCBoaWdoXzE2ICsgMHgwMDFmKTsNCisJ CU9VVF9CWVRFKHNjMWYgJiB+MHgwOCwgaGlnaF8xNiArIDB4MDAxZik7DQog CX0NCiAjZW5kaWYNCiAJcmV0dXJuIDA7DQpkaWZmIC11ck4gbGludXgtMi41 LjMtcDItcHJpc3RpbmUvZHJpdmVycy9pZGUvcGRjNDAzMC5jIGxpbnV4LTIu NS4zLXAyL2RyaXZlcnMvaWRlL3BkYzQwMzAuYw0KLS0tIGxpbnV4LTIuNS4z LXAyLXByaXN0aW5lL2RyaXZlcnMvaWRlL3BkYzQwMzAuYwlTdW4gSmFuIDIw IDAwOjI1OjQ0IDIwMDINCisrKyBsaW51eC0yLjUuMy1wMi9kcml2ZXJzL2lk ZS9wZGM0MDMwLmMJU3VuIEphbiAyMCAwMDo0MDoxMSAyMDAyDQpAQCAtNTU0 LDYgKzU1NCwxMyBAQA0KIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7DQogCWJ5 dGUgc3RhdDsNCiANCisvKiBDaGVjayB0aGF0IGl0J3MgYSByZWd1bGFyIGNv bW1hbmQuIElmIG5vdCwgYm9tYiBvdXQgZWFybHkuICovDQorCWlmICghKHJx LT5mbGFncyAmIFJFUV9DTUQpKSB7DQorCQlibGtfZHVtcF9ycV9mbGFncyhy cSwgInBkYzQwMzAgYmFkIGZsYWdzIik7DQorCQlpZGVfZW5kX3JlcXVlc3Qo MCwgSFdHUk9VUChkcml2ZSkpOw0KKwkJcmV0dXJuIGlkZV9zdG9wcGVkOw0K Kwl9DQorDQogCWlmIChJREVfQ09OVFJPTF9SRUcpDQogCQlPVVRfQllURShk cml2ZS0+Y3RsLCBJREVfQ09OVFJPTF9SRUcpOyAgLyogY2xlYXIgbklFTiAq Lw0KIAlTRUxFQ1RfTUFTSyhIV0lGKGRyaXZlKSwgZHJpdmUsIDApOw0KQEAg LTU2OCwxNiArNTc1LDggQEANCiAJT1VUX0JZVEUodGFza2ZpbGUtPmRldmlj ZV9oZWFkLCBJREVfU0VMRUNUX1JFRyk7DQogCU9VVF9CWVRFKHRhc2tmaWxl LT5jb21tYW5kLCBJREVfQ09NTUFORF9SRUcpOw0KIA0KLS8qIENoZWNrIHRo YXQgaXQncyBhIHJlZ3VsYXIgY29tbWFuZC4gSWYgbm90LCBib21iIG91dCBl YXJseS4gKi8NCi0JaWYgKCEocnEtPmZsYWdzICYgUkVRX0NNRCkpIHsNCi0J CWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAicGRjNDAzMCBiYWQgZmxhZ3MiKTsN Ci0JCWlkZV9lbmRfcmVxdWVzdCgwLCBIV0dST1VQKGRyaXZlKSk7DQotCQly ZXR1cm4gaWRlX3N0b3BwZWQ7DQotCX0NCi0NCiAJc3dpdGNoIChycV9kYXRh X2RpcihycSkpIHsNCiAJY2FzZSBSRUFEOg0KLQkJT1VUX0JZVEUoUFJPTUlT RV9SRUFELCBJREVfQ09NTUFORF9SRUcpOw0KIC8qDQogICogVGhlIGNhcmQn cyBiZWhhdmlvdXIgaXMgb2RkIGF0IHRoaXMgcG9pbnQuIElmIHRoZSBkYXRh IGlzDQogICogYXZhaWxhYmxlLCBEUlEgd2lsbCBiZSB0cnVlLCBhbmQgbm8g aW50ZXJydXB0IHdpbGwgYmUNCkBAIC02MTEsOCArNjEwLDYgQEANCiAJCXJl dHVybiBpZGVfc3RvcHBlZDsNCiANCiAJY2FzZSBXUklURTogew0KLQkJaWRl X3N0YXJ0c3RvcF90IHN0YXJ0c3RvcDsNCi0JCU9VVF9CWVRFKFBST01JU0Vf V1JJVEUsIElERV9DT01NQU5EX1JFRyk7DQogLyoNCiAgKiBTdHJhdGVneSBv biB3cml0ZSBpczoNCiAgKglsb29rIGZvciB0aGUgRFJRIHRoYXQgc2hvdWxk IGhhdmUgYmVlbiBpbW1lZGlhdGVseSBhc3NlcnRlZA0KZGlmZiAtdXJOIGxp bnV4LTIuNS4zLXAyLXByaXN0aW5lL2RyaXZlcnMvaWRlL3NlcnZlcndvcmtz LmMgbGludXgtMi41LjMtcDIvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYw0K LS0tIGxpbnV4LTIuNS4zLXAyLXByaXN0aW5lL2RyaXZlcnMvaWRlL3NlcnZl cndvcmtzLmMJU3VuIEphbiAyMCAwMDoyNTo0NCAyMDAyDQorKysgbGludXgt Mi41LjMtcDIvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYwlTdW4gSmFuIDIw IDAwOjQwOjExIDIwMDINCkBAIC0zNDksOSArMzQ5LDkgQEANCiAJcGNpX3dy aXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1NCwgdWx0cmFfZW5hYmxlKTsNCiAJ DQogCWlmIChzcGVlZCA+IFhGRVJfUElPXzQpDQotCQlvdXRiKGluYihkbWFf YmFzZSsyKXwoMTw8KDUrdW5pdCkpLCBkbWFfYmFzZSsyKTsNCisJCU9VVF9C WVRFKElOX0JZVEUoZG1hX2Jhc2UrMil8KDE8PCg1K3VuaXQpKSwgZG1hX2Jh c2UrMik7DQogCWVsc2UNCi0JCW91dGIoaW5iKGRtYV9iYXNlKzIpICYgfigx PDwoNSt1bml0KSksIGRtYV9iYXNlKzIpOw0KKwkJT1VUX0JZVEUoSU5fQllU RShkbWFfYmFzZSsyKSAmIH4oMTw8KDUrdW5pdCkpLCBkbWFfYmFzZSsyKTsN CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BICovDQogDQogCWVy ciA9IGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIHNwZWVkKTsNCmRp ZmYgLXVyTiBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2ZXJzL2lkZS9z aXM1NTEzLmMgbGludXgtMi41LjMtcDIvZHJpdmVycy9pZGUvc2lzNTUxMy5j DQotLS0gbGludXgtMi41LjMtcDItcHJpc3RpbmUvZHJpdmVycy9pZGUvc2lz NTUxMy5jCVR1ZSBOb3YgMjcgMDk6MjM6MjcgMjAwMQ0KKysrIGxpbnV4LTIu NS4zLXAyL2RyaXZlcnMvaWRlL3NpczU1MTMuYwlTdW4gSmFuIDIwIDAwOjQ2 OjUxIDIwMDINCkBAIC0zNyw4ICszNywxMSBAQA0KICNkZWZpbmUgU0lTNTUx M19GTEFHX0FUQV8xNgkJMHgwMDAwMDAwMQ0KICNkZWZpbmUgU0lTNTUxM19G TEFHX0FUQV8zMwkJMHgwMDAwMDAwMg0KICNkZWZpbmUgU0lTNTUxM19GTEFH X0FUQV82NgkJMHgwMDAwMDAwNA0KKyNkZWZpbmUgU0lTNTUxM19GTEFHX0FU QV8xMDAJCTB4MDAwMDAwMDgNCiAjZGVmaW5lIFNJUzU1MTNfRkxBR19MQVRF TkNZCQkweDAwMDAwMDEwDQogDQorc3RhdGljIHVuc2lnbmVkIGludCBjYXBh YmlsaXRpZXMgPSAweDAwMDAwMDAwOw0KKw0KIHN0YXRpYyBjb25zdCBzdHJ1 Y3Qgew0KIAljb25zdCBjaGFyICpuYW1lOw0KIAl1bnNpZ25lZCBzaG9ydCBo b3N0X2lkOw0KQEAgLTQ4LDE1ICs1MSwxNSBAQA0KIAl7ICJTaVM1NDAiLAlQ Q0lfREVWSUNFX0lEX1NJXzU0MCwJU0lTNTUxM19GTEFHX0FUQV82NiwgfSwN CiAJeyAiU2lTNjIwIiwJUENJX0RFVklDRV9JRF9TSV82MjAsCVNJUzU1MTNf RkxBR19BVEFfNjZ8U0lTNTUxM19GTEFHX0xBVEVOQ1ksIH0sDQogCXsgIlNp UzYzMCIsCVBDSV9ERVZJQ0VfSURfU0lfNjMwLAlTSVM1NTEzX0ZMQUdfQVRB XzY2fFNJUzU1MTNfRkxBR19MQVRFTkNZLCB9LA0KLQl7ICJTaVM2MzUiLAlQ Q0lfREVWSUNFX0lEX1NJXzYzNSwJU0lTNTUxM19GTEFHX0FUQV82NnxTSVM1 NTEzX0ZMQUdfTEFURU5DWSwgfSwNCisJeyAiU2lTNjM1IiwJUENJX0RFVklD RV9JRF9TSV82MzUsCVNJUzU1MTNfRkxBR19BVEFfMTAwfFNJUzU1MTNfRkxB R19MQVRFTkNZLCB9LA0KIAl7ICJTaVM2NDAiLAlQQ0lfREVWSUNFX0lEX1NJ XzY0MCwJU0lTNTUxM19GTEFHX0FUQV82NnxTSVM1NTEzX0ZMQUdfTEFURU5D WSwgfSwNCi0JeyAiU2lTNjQ1IiwJUENJX0RFVklDRV9JRF9TSV82NDUsCVNJ UzU1MTNfRkxBR19BVEFfNjZ8U0lTNTUxM19GTEFHX0xBVEVOQ1ksIH0sDQot CXsgIlNpUzY1MCIsCVBDSV9ERVZJQ0VfSURfU0lfNjUwLAlTSVM1NTEzX0ZM QUdfQVRBXzY2fFNJUzU1MTNfRkxBR19MQVRFTkNZLCB9LA0KLQl7ICJTaVM3 MzAiLAlQQ0lfREVWSUNFX0lEX1NJXzczMCwJU0lTNTUxM19GTEFHX0FUQV82 NnxTSVM1NTEzX0ZMQUdfTEFURU5DWSwgfSwNCi0JeyAiU2lTNzM1IiwJUENJ X0RFVklDRV9JRF9TSV83MzUsCVNJUzU1MTNfRkxBR19BVEFfNjZ8U0lTNTUx M19GTEFHX0xBVEVOQ1ksIH0sDQotCXsgIlNpUzc0MCIsCVBDSV9ERVZJQ0Vf SURfU0lfNzQwLAlTSVM1NTEzX0ZMQUdfQVRBXzY2fFNJUzU1MTNfRkxBR19M QVRFTkNZLCB9LA0KLQl7ICJTaVM3NDUiLAlQQ0lfREVWSUNFX0lEX1NJXzc0 NSwJU0lTNTUxM19GTEFHX0FUQV82NnxTSVM1NTEzX0ZMQUdfTEFURU5DWSwg fSwNCi0JeyAiU2lTNzUwIiwJUENJX0RFVklDRV9JRF9TSV83NTAsCVNJUzU1 MTNfRkxBR19BVEFfNjZ8U0lTNTUxM19GTEFHX0xBVEVOQ1ksIH0sDQorCXsg IlNpUzY0NSIsCVBDSV9ERVZJQ0VfSURfU0lfNjQ1LAlTSVM1NTEzX0ZMQUdf QVRBXzEwMHxTSVM1NTEzX0ZMQUdfTEFURU5DWSwgfSwNCisJeyAiU2lTNjUw IiwJUENJX0RFVklDRV9JRF9TSV82NTAsCVNJUzU1MTNfRkxBR19BVEFfMTAw fFNJUzU1MTNfRkxBR19MQVRFTkNZLCB9LA0KKwl7ICJTaVM3MzAiLAlQQ0lf REVWSUNFX0lEX1NJXzczMCwJU0lTNTUxM19GTEFHX0FUQV8xMDB8U0lTNTUx M19GTEFHX0xBVEVOQ1ksIH0sDQorCXsgIlNpUzczNSIsCVBDSV9ERVZJQ0Vf SURfU0lfNzM1LAlTSVM1NTEzX0ZMQUdfQVRBXzEwMHxTSVM1NTEzX0ZMQUdf TEFURU5DWSwgfSwNCisJeyAiU2lTNzQwIiwJUENJX0RFVklDRV9JRF9TSV83 NDAsCVNJUzU1MTNfRkxBR19BVEFfMTAwfFNJUzU1MTNfRkxBR19MQVRFTkNZ LCB9LA0KKwl7ICJTaVM3NDUiLAlQQ0lfREVWSUNFX0lEX1NJXzc0NSwJU0lT NTUxM19GTEFHX0FUQV8xMDB8U0lTNTUxM19GTEFHX0xBVEVOQ1ksIH0sDQor CXsgIlNpUzc1MCIsCVBDSV9ERVZJQ0VfSURfU0lfNzUwLAlTSVM1NTEzX0ZM QUdfQVRBXzEwMHxTSVM1NTEzX0ZMQUdfTEFURU5DWSwgfSwNCiAJeyAiU2lT NTU5MSIsCVBDSV9ERVZJQ0VfSURfU0lfNTU5MSwJU0lTNTUxM19GTEFHX0FU QV8zMywgfSwNCiAJeyAiU2lTNTU5NyIsCVBDSV9ERVZJQ0VfSURfU0lfNTU5 NywJU0lTNTUxM19GTEFHX0FUQV8zMywgfSwNCiAJeyAiU2lTNTYwMCIsCVBD SV9ERVZJQ0VfSURfU0lfNTYwMCwJU0lTNTUxM19GTEFHX0FUQV8zMywgfSwN CkBAIC0xNDgsNiArMTUxLDE3IEBADQogCSI2IFBDSUNMSyIsICIxMiBQQ0lD TEsiDQogfTsNCiANCitzdGF0aWMgY2hhciogY3ljbGVfdGltZV9hdGExMDBb XSA9IHsNCisJIlJlc2VydmVkIiwgIjIgQ0xLIiwNCisJIjMgQ0xLIiwgIjQg Q0xLIiwNCisJIjUgQ0xLIiwgIjYgQ0xLIiwNCisJIjcgQ0xLIiwgIjggQ0xL IiwNCisJIjkgQ0xLIiwgIjEwIENMSyIsDQorCSIxMSBDTEsiLCAiMTIgQ0xL IiwNCisJIlJlc2VydmVkIiwgIlJlc2VydmVkIiwNCisJIlJlc2VydmVkIiwg IlJlc2VydmVkIg0KK307DQorDQogc3RhdGljIGludCBzaXNfZ2V0X2luZm8g KGNoYXIgKmJ1ZmZlciwgY2hhciAqKmFkZHIsIG9mZl90IG9mZnNldCwgaW50 IGNvdW50KQ0KIHsNCiAJaW50IHJjOw0KQEAgLTE4OSwxMSArMjAzLDE5IEBA DQogCXAgKz0gc3ByaW50ZihwLCAiICAgICAgICAgICAgICAgIFVETUEgJXMg XHQgXHQgXHQgVURNQSAlc1xuIiwNCiAJCSAgICAgKHJlZyAmIDB4ODApICA/ ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIsDQogCQkgICAgIChyZWcxICYgMHg4 MCkgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKTsNCi0JcCArPSBzcHJpbnRm KHAsICIgICAgICAgICAgICAgICAgVURNQSBDeWNsZSBUaW1lICAgICVzIFx0 IFVETUEgQ3ljbGUgVGltZSAgICAlc1xuIiwNCi0JCSAgICAgY3ljbGVfdGlt ZVsocmVnICYgMHg3MCkgPj4gNF0sIGN5Y2xlX3RpbWVbKHJlZzEgJiAweDcw KSA+PiA0XSk7DQotCXAgKz0gc3ByaW50ZihwLCAiICAgICAgICAgICAgICAg IERhdGEgQWN0aXZlIFRpbWUgICAlcyBcdCBEYXRhIEFjdGl2ZSBUaW1lICAg JXNcbiIsDQotCQkgICAgIGFjdGl2ZV90aW1lWyhyZWcgJiAweDA3KV0sIGFj dGl2ZV90aW1lWyhyZWcxICYweDA3KV0gKTsgDQotDQorCWlmIChjYXBhYmls aXRpZXMgJiYgU0lTNTUxM19GTEFHX0FUQV8xMDApIHsNCisJCXAgKz0gc3By aW50ZihwLCAiICAgICAgICAgICAgICAgIFVETUEgQ3ljbGUgVGltZSAgICAl cyBcdCBVRE1BIEN5Y2xlIFRpbWUgICAgJXNcbiIsDQorCQkJICAgICBjeWNs ZV90aW1lX2F0YTEwMFtyZWcgJiAweDBGXSwgY3ljbGVfdGltZV9hdGExMDBb cmVnMSAmIDB4MEZdKTsNCisJCXJjID0gcGNpX3JlYWRfY29uZmlnX2J5dGUo Ym1pZGVfZGV2LCAweDQwLCAmcmVnKTsNCisJCXJjID0gcGNpX3JlYWRfY29u ZmlnX2J5dGUoYm1pZGVfZGV2LCAweDQ0LCAmcmVnMSk7DQorCQlwICs9IHNw cmludGYocCwgIiAgICAgICAgICAgICAgICBEYXRhIEFjdGl2ZSBUaW1lICAg JXMgXHQgRGF0YSBBY3RpdmUgVGltZSAgICVzXG4iLA0KKwkJCSAgICBhY3Rp dmVfdGltZVsocmVnICYgMHg3MCkgPj4gNF0sIGFjdGl2ZV90aW1lWyhyZWcx ICYgMHg3MCkgPj4gNF0pOw0KKwl9IGVsc2Ugew0KKwkJcCArPSBzcHJpbnRm KHAsICIgICAgICAgICAgICAgICAgVURNQSBDeWNsZSBUaW1lICAgICVzIFx0 IFVETUEgQ3ljbGUgVGltZSAgICAlc1xuIiwNCisJCQkgICAgIGN5Y2xlX3Rp bWVbKHJlZyAmIDB4NzApID4+IDRdLCBjeWNsZV90aW1lWyhyZWcxICYgMHg3 MCkgPj4gNF0pOw0KKwkJcCArPSBzcHJpbnRmKHAsICIgICAgICAgICAgICAg ICAgRGF0YSBBY3RpdmUgVGltZSAgICVzIFx0IERhdGEgQWN0aXZlIFRpbWUg ICAlc1xuIiwNCisJCQkgICAgIGFjdGl2ZV90aW1lWyhyZWcgJiAweDA3KV0s IGFjdGl2ZV90aW1lWyhyZWcxICYweDA3KV0gKTsgDQorCX0NCiAJcmMgPSBw Y2lfcmVhZF9jb25maWdfYnl0ZShibWlkZV9kZXYsIDB4NDAsICZyZWcpOw0K IAlyYyA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGJtaWRlX2RldiwgMHg0NCwg JnJlZzEpOw0KIAlwICs9IHNwcmludGYocCwgIiAgICAgICAgICAgICAgICBE YXRhIFJlY292ZXJ5IFRpbWUgJXMgXHQgRGF0YSBSZWNvdmVyeSBUaW1lICVz XG4iLA0KQEAgLTIxMywxMCArMjM1LDE5IEBADQogCXAgKz0gc3ByaW50Zihw LCAiICAgICAgICAgICAgICAgIFVETUEgJXMgXHQgXHQgXHQgVURNQSAlc1xu IiwNCiAJCSAgICAgKHJlZyAmIDB4ODApICA/ICJFbmFibGVkIiA6ICJEaXNh YmxlZCIsDQogCQkgICAgIChyZWcxICYgMHg4MCkgPyAiRW5hYmxlZCIgOiAi RGlzYWJsZWQiKTsNCi0JcCArPSBzcHJpbnRmKHAsICIgICAgICAgICAgICAg ICAgVURNQSBDeWNsZSBUaW1lICAgICVzIFx0IFVETUEgQ3ljbGUgVGltZSAg ICAlc1xuIiwNCi0JCSAgICAgY3ljbGVfdGltZVsocmVnICYgMHg3MCkgPj4g NF0sIGN5Y2xlX3RpbWVbKHJlZzEgJiAweDcwKSA+PiA0XSk7DQotCXAgKz0g c3ByaW50ZihwLCAiICAgICAgICAgICAgICAgIERhdGEgQWN0aXZlIFRpbWUg ICAlcyBcdCBEYXRhIEFjdGl2ZSBUaW1lICAgJXNcbiIsDQotCQkgICAgIGFj dGl2ZV90aW1lWyhyZWcgJiAweDA3KV0sIGFjdGl2ZV90aW1lWyhyZWcxICYw eDA3KV0gKTsgDQorCWlmIChjYXBhYmlsaXRpZXMgJiYgU0lTNTUxM19GTEFH X0FUQV8xMDApIHsNCisJCXAgKz0gc3ByaW50ZihwLCAiICAgICAgICAgICAg ICAgIFVETUEgQ3ljbGUgVGltZSAgICAlcyBcdCBVRE1BIEN5Y2xlIFRpbWUg ICAgJXNcbiIsDQorCQkJICAgICBjeWNsZV90aW1lX2F0YTEwMFtyZWcgJiAw eDBGXSwgY3ljbGVfdGltZV9hdGExMDBbcmVnMSAmIDB4MEZdKTsNCisJCXJj ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUoYm1pZGVfZGV2LCAweDQyLCAmcmVn KTsNCisJCXJjID0gcGNpX3JlYWRfY29uZmlnX2J5dGUoYm1pZGVfZGV2LCAw eDQ2LCAmcmVnMSk7DQorCQlwICs9IHNwcmludGYocCwgIiAgICAgICAgICAg ICAgICBEYXRhIEFjdGl2ZSBUaW1lICAgJXMgXHQgRGF0YSBBY3RpdmUgVGlt ZSAgICVzXG4iLA0KKwkJCSAgICBhY3RpdmVfdGltZVsocmVnICYgMHg3MCkg Pj4gNF0sIGFjdGl2ZV90aW1lWyhyZWcxICYgMHg3MCkgPj4gNF0pOw0KKwl9 IGVsc2Ugew0KKwkJcCArPSBzcHJpbnRmKHAsICIgICAgICAgICAgICAgICAg VURNQSBDeWNsZSBUaW1lICAgICVzIFx0IFVETUEgQ3ljbGUgVGltZSAgICAl c1xuIiwNCisJCQkgICAgIGN5Y2xlX3RpbWVbKHJlZyAmIDB4NzApID4+IDRd LCBjeWNsZV90aW1lWyhyZWcxICYgMHg3MCkgPj4gNF0pOw0KKwkJcCArPSBz cHJpbnRmKHAsICIgICAgICAgICAgICAgICAgRGF0YSBBY3RpdmUgVGltZSAg ICVzIFx0IERhdGEgQWN0aXZlIFRpbWUgICAlc1xuIiwNCisJCQkgICAgIGFj dGl2ZV90aW1lWyhyZWcgJiAweDA3KV0sIGFjdGl2ZV90aW1lWyhyZWcxICYw eDA3KV0gKTsNCisJfQ0KIA0KIAlyYyA9IHBjaV9yZWFkX2NvbmZpZ19ieXRl KGJtaWRlX2RldiwgMHg0MiwgJnJlZyk7DQogCXJjID0gcGNpX3JlYWRfY29u ZmlnX2J5dGUoYm1pZGVfZGV2LCAweDQ2LCAmcmVnMSk7DQpAQCAtMjI5LDYg KzI2MCw3IEBADQogYnl0ZSBzaXNfcHJvYyA9IDA7DQogZXh0ZXJuIGNoYXIg KmlkZV94ZmVyX3ZlcmJvc2UgKGJ5dGUgeGZlcl9yYXRlKTsNCiANCisvKiBF bmFibGVzIFByZWZldGNoIGFuZCBQb3N0d3JpdGUgb24gZHJpdmUgKi8NCiBz dGF0aWMgdm9pZCBjb25maWdfZHJpdmVfYXJ0X3J3cCAoaWRlX2RyaXZlX3Qg KmRyaXZlKQ0KIHsNCiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUp Ow0KQEAgLTI0Myw4ICsyNzUsMTAgQEANCiAJDQogCWlmICgocmVnNGJoICYg cndfcHJlZmV0Y2gpICE9IHJ3X3ByZWZldGNoKQ0KIAkJcGNpX3dyaXRlX2Nv bmZpZ19ieXRlKGRldiwgMHg0YiwgcmVnNGJofHJ3X3ByZWZldGNoKTsNCisJ cHJpbnRrKCJTSVM1NTEzOiBjb25maWdfZHJpdmVfYXJ0X3J3cCwgZHJpdmUg JWRcbiIsIGRyaXZlLT5kbik7DQogfQ0KIA0KKy8qIFNldCBhY3RpdmUgYW5k IHJlY292ZXJ5IHRpbWUgKi8NCiBzdGF0aWMgdm9pZCBjb25maWdfYXJ0X3J3 cF9waW8gKGlkZV9kcml2ZV90ICpkcml2ZSwgYnl0ZSBwaW8pDQogew0KIAlp ZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7DQpAQCAtMjc0LDYgKzMw OCw4IEBADQogDQogCXRpbWluZyA9ICh4ZmVyX3BpbyA+PSBwaW8pID8geGZl cl9waW8gOiBwaW87DQogDQorCXByaW50aygiU0lTNTUxMzogY29uZmlnX2Ry aXZlX2FydF9yd3BfcGlvLCBkcml2ZSAlZCwgcGlvICVkLCB0aW1pbmcgJWRc biIsDQorCSAgICAgICBkcml2ZS0+ZG4sIHBpbywgdGltaW5nKTsNCiAvKg0K ICAqICAgICAgICAgICAgICAgTW9kZSAwICAgICAgIE1vZGUgMSAgICAgTW9k ZSAyICAgICBNb2RlIDMgICAgIE1vZGUgNA0KICAqIEFjdGl2ZSB0aW1lICAg IDhUICgyNDBucykgIDZUICgxODBucykgNFQgKDEyMG5zKSAzVCAgKDkwbnMp IDNUICAoOTBucykNCkBAIC0yOTEsNiArMzI3LDE5IEBADQogCQlkZWZhdWx0 OglyZXR1cm47DQogCX0NCiANCisJaWYgKGNhcGFiaWxpdGllcyAmJiBTSVM1 NTEzX0ZMQUdfQVRBXzEwMCkgew0KKwkJc3dpdGNoKHRpbWluZykgeyAvKiAg IGFjdGl2ZSAgcmVjb3ZlcnkNCisJCQkJCSAgdiAgICAgdiAqLw0KKwkJY2Fz ZSA0OgkJdGVzdDEgPSAweDMwfDB4MDE7IGJyZWFrOw0KKwkJY2FzZSAzOgkJ dGVzdDEgPSAweDMwfDB4MDM7IGJyZWFrOw0KKwkJY2FzZSAyOgkJdGVzdDEg PSAweDQwfDB4MDQ7IGJyZWFrOw0KKwkJY2FzZSAxOgkJdGVzdDEgPSAweDYw fDB4MDc7IGJyZWFrOw0KKwkJZGVmYXVsdDoJYnJlYWs7DQorCQl9DQorCQlw Y2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBkcml2ZV9wY2ksIHRlc3QxKTsN CisJCXJldHVybjsgLyogdGVtcG9yYXJ5IGhhY2sgZm9yIHRlc3RzICovDQor CX0NCisNCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBkcml2ZV9wY2ks ICZ0ZXN0MSk7DQogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgZHJpdmVf cGNpfDB4MDEsICZ0ZXN0Mik7DQogDQpAQCAtMjk4LDggKzM0Nyw4IEBADQog CSAqIERvIGEgYmxhbmtldCBjbGVhciBvZiBhY3RpdmUgYW5kIHJlY292ZXJ5 IHRpbWluZ3MuDQogCSAqLw0KIA0KLQl0ZXN0MSAmPSB+MHgwNzsNCi0JdGVz dDIgJj0gfjB4MEY7DQorCXRlc3QxICY9IH4weDBGOw0KKwl0ZXN0MiAmPSB+ MHgwNzsNCiANCiAJc3dpdGNoKHRpbWluZykgew0KIAkJY2FzZSA0OgkJdGVz dDEgfD0gMHgwMTsgdGVzdDIgfD0gMHgwMzsgYnJlYWs7DQpAQCAtMzQwLDYg KzM4OSw5IEBADQogCWJ5dGUJCQlkcml2ZV9wY2ksIHRlc3QxLCB0ZXN0MjsN CiAJYnl0ZQkJCXVubWFzaywgZm91cl90d28sIG1hc2sgPSAwOw0KIA0KKwlw cmludGsoIlNJUzU1MTM6IHNpczU1MTNfdHVuZV9jaGlwc2V0LCBkcml2ZSAl ZCwgc3BlZWQgJWRcbiIsDQorCSAgICAgICBkcml2ZS0+ZG4sIHNwZWVkKTsN CisNCiAJaWYgKGhvc3RfZGV2KSB7DQogCQlzd2l0Y2goaG9zdF9kZXYtPmRl dmljZSkgew0KIAkJCWNhc2UgUENJX0RFVklDRV9JRF9TSV81MzA6DQpAQCAt Mzc5LDYgKzQzMSw3IEBADQogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwg ZHJpdmVfcGNpLCAmdGVzdDEpOw0KIAlwY2lfcmVhZF9jb25maWdfYnl0ZShk ZXYsIGRyaXZlX3BjaXwweDAxLCAmdGVzdDIpOw0KIA0KKwkvKiBJZiBub3Qg YW4gVURNQSBtb2RlIHN3aXRjaCBvZmYgdWRtYSBiaXQgKi8NCiAJaWYgKChz cGVlZCA8PSBYRkVSX01XX0RNQV8yKSAmJiAodGVzdDIgJiAweDgwKSkgew0K IAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgZHJpdmVfcGNpfDB4MDEs IHRlc3QyICYgfjB4ODApOw0KIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2 LCBkcml2ZV9wY2l8MHgwMSwgJnRlc3QyKTsNCkBAIC0zODYsNyArNDM5LDMx IEBADQogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBkcml2ZV9wY2l8 MHgwMSwgdGVzdDIgJiB+dW5tYXNrKTsNCiAJfQ0KIA0KLQlzd2l0Y2goc3Bl ZWQpIHsNCisJaWYgKGNhcGFiaWxpdGllcyAmIFNJUzU1MTNfRkxBR19BVEFf MTAwKSB7DQorCQlzd2l0Y2goc3BlZWQpIHsNCisjaWZkZWYgQ09ORklHX0JM S19ERVZfSURFRE1BDQorCQljYXNlIFhGRVJfVURNQV81OiBtYXNrID0gMHgw MTsgYnJlYWs7DQorCQljYXNlIFhGRVJfVURNQV80OiBtYXNrID0gMHgwMjsg YnJlYWs7DQorCQljYXNlIFhGRVJfVURNQV8zOiBtYXNrID0gMHgwNDsgYnJl YWs7DQorCQljYXNlIFhGRVJfVURNQV8yOiBtYXNrID0gMHgwNTsgYnJlYWs7 DQorCQljYXNlIFhGRVJfVURNQV8xOiBtYXNrID0gMHgwNzsgYnJlYWs7DQor CQljYXNlIFhGRVJfVURNQV8wOiBtYXNrID0gMHgwQjsgYnJlYWs7DQorCQlj YXNlIFhGRVJfTVdfRE1BXzI6DQorCQljYXNlIFhGRVJfTVdfRE1BXzE6DQor CQljYXNlIFhGRVJfTVdfRE1BXzA6DQorCQljYXNlIFhGRVJfU1dfRE1BXzI6 DQorCQljYXNlIFhGRVJfU1dfRE1BXzE6DQorCQljYXNlIFhGRVJfU1dfRE1B XzA6IGJyZWFrOw0KKyNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUEg Ki8NCisJCWNhc2UgWEZFUl9QSU9fNDogcmV0dXJuKChpbnQpIGNvbmZpZ19j aGlwc2V0X2Zvcl9waW8oZHJpdmUsIDQpKTsNCisJCWNhc2UgWEZFUl9QSU9f MzogcmV0dXJuKChpbnQpIGNvbmZpZ19jaGlwc2V0X2Zvcl9waW8oZHJpdmUs IDMpKTsNCisJCWNhc2UgWEZFUl9QSU9fMjogcmV0dXJuKChpbnQpIGNvbmZp Z19jaGlwc2V0X2Zvcl9waW8oZHJpdmUsIDIpKTsNCisJCWNhc2UgWEZFUl9Q SU9fMTogcmV0dXJuKChpbnQpIGNvbmZpZ19jaGlwc2V0X2Zvcl9waW8oZHJp dmUsIDEpKTsNCisJCWNhc2UgWEZFUl9QSU9fMDoNCisJCWRlZmF1bHQ6CSBy ZXR1cm4oKGludCkgY29uZmlnX2NoaXBzZXRfZm9yX3Bpbyhkcml2ZSwgMCkp Ow0KKwkJfQ0KKwl9IGVsc2Ugew0KKwkJc3dpdGNoKHNwZWVkKSB7DQogI2lm ZGVmIENPTkZJR19CTEtfREVWX0lERURNQQ0KIAkJY2FzZSBYRkVSX1VETUFf NTogbWFzayA9IDB4ODA7IGJyZWFrOw0KIAkJY2FzZSBYRkVSX1VETUFfNDog bWFzayA9IDB4OTA7IGJyZWFrOw0KQEAgLTQwNywxMCArNDg0LDE2IEBADQog CQljYXNlIFhGRVJfUElPXzE6IHJldHVybigoaW50KSBjb25maWdfY2hpcHNl dF9mb3JfcGlvKGRyaXZlLCAxKSk7DQogCQljYXNlIFhGRVJfUElPXzA6DQog CQlkZWZhdWx0OgkgcmV0dXJuKChpbnQpIGNvbmZpZ19jaGlwc2V0X2Zvcl9w aW8oZHJpdmUsIDApKTsNCisJCX0NCiAJfQ0KIA0KLQlpZiAoc3BlZWQgPiBY RkVSX01XX0RNQV8yKQ0KLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwg ZHJpdmVfcGNpfDB4MDEsIHRlc3QyfG1hc2spOw0KKwlpZiAoc3BlZWQgPiBY RkVSX01XX0RNQV8yKSB7DQorCQlpZiAoY2FwYWJpbGl0aWVzICYgU0lTNTUx M19GTEFHX0FUQV8xMDApIHsNCisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUo ZGV2LCBkcml2ZV9wY2l8MHgwMSwgMHg4MHxtYXNrKTsNCisJCX0gZWxzZSB7 DQorCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgZHJpdmVfcGNpfDB4 MDEsIHRlc3QyfG1hc2spOw0KKwkJfQ0KKwl9DQogDQogCWRyaXZlLT5jdXJy ZW50X3NwZWVkID0gc3BlZWQ7DQogCXJldHVybiAoKGludCkgaWRlX2NvbmZp Z19kcml2ZV9zcGVlZChkcml2ZSwgc3BlZWQpKTsNCkBAIC00MzcsNiArNTIw LDkgQEANCiAJYnl0ZSB1ZG1hXzY2CQk9IGVpZ2h0eV9uaW50eV90aHJlZShk cml2ZSk7DQogCWJ5dGUgdWx0cmFfMTAwCQk9IDA7DQogDQorCXByaW50aygi U0lTNTUxMzogY29uZmlnX2NoaXBzZXRfZm9yX2RtYSwgZHJpdmUgJWQsIHVs dHJhICVkXG4iLA0KKwkgICAgICAgZHJpdmUtPmRuLCB1bHRyYSk7DQorDQog CWlmIChob3N0X2Rldikgew0KIAkJc3dpdGNoKGhvc3RfZGV2LT5kZXZpY2Up IHsNCiAJCQljYXNlIFBDSV9ERVZJQ0VfSURfU0lfNjM1Og0KQEAgLTQ4Nyw3 ICs1NzMsNyBAQA0KIAllbHNlDQogCQlyZXR1cm4gKChpbnQpIGlkZV9kbWFf b2ZmX3F1aWV0bHkpOw0KIA0KLQlvdXRiKGluYihod2lmLT5kbWFfYmFzZSsy KXwoMTw8KDUrdW5pdCkpLCBod2lmLT5kbWFfYmFzZSsyKTsNCisJT1VUX0JZ VEUoSU5fQllURShod2lmLT5kbWFfYmFzZSsyKXwoMTw8KDUrdW5pdCkpLCBo d2lmLT5kbWFfYmFzZSsyKTsNCiANCiAJZXJyID0gc2lzNTUxM190dW5lX2No aXBzZXQoZHJpdmUsIHNwZWVkKTsNCiANCkBAIC01ODMsNiArNjY5LDcgQEAN CiAJCQljb250aW51ZTsNCiANCiAJCWhvc3RfZGV2ID0gaG9zdDsNCisJCWNh cGFiaWxpdGllcyA9IFNpU0hvc3RDaGlwSW5mb1tpXS5mbGFnczsNCiAJCXBy aW50ayhTaVNIb3N0Q2hpcEluZm9baV0ubmFtZSk7DQogCQlwcmludGsoIlxu Iik7DQogCQlpZiAoU2lTSG9zdENoaXBJbmZvW2ldLmZsYWdzICYgU0lTNTUx M19GTEFHX0xBVEVOQ1kpIHsNCkBAIC01OTIsMTIgKzY3OSwyMiBAQA0KIAl9 DQogDQogCWlmIChob3N0X2Rldikgew0KLQkJYnl0ZSByZWc1MmggPSAwOw0K KwkJaWYgKGNhcGFiaWxpdGllcyAmIFNJUzU1MTNfRkxBR19BVEFfMTAwKSB7 DQorCQkJYnl0ZSByZWc0OWggPSAwOw0KIA0KLQkJcGNpX3JlYWRfY29uZmln X2J5dGUoZGV2LCAweDUyLCAmcmVnNTJoKTsNCi0JCWlmICghKHJlZzUyaCAm IDB4MDQpKSB7DQotCQkJLyogc2V0IElERSBjb250cm9sbGVyIHRvIG9wZXJh dGUgaW4gQ29tcGFiaXRpbGl0eSBtb2RlIG9ubHkgKi8NCi0JCQlwY2lfd3Jp dGVfY29uZmlnX2J5dGUoZGV2LCAweDUyLCByZWc1Mmh8MHgwNCk7DQorCQkJ cGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDQ5LCAmcmVnNDloKTsNCisJ CQlpZiAoIShyZWc0OWggJiAweDAxKSkgew0KKwkJCQkvKiBzZXQgSURFIGNv bnRyb2xsZXIgdG8gb3BlcmF0ZSBpbiBDb21wYWJpdGlsaXR5IG1vZGUgb25s eSAqLw0KKwkJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ5LCBy ZWc0OWh8MHgwMSk7DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQlieXRlIHJl ZzUyaCA9IDA7DQorDQorCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAw eDUyLCAmcmVnNTJoKTsNCisJCQlpZiAoIShyZWc1MmggJiAweDA0KSkgew0K KwkJCQkvKiBzZXQgSURFIGNvbnRyb2xsZXIgdG8gb3BlcmF0ZSBpbiBDb21w YWJpdGlsaXR5IG1vZGUgb25seSAqLw0KKwkJCQlwY2lfd3JpdGVfY29uZmln X2J5dGUoZGV2LCAweDUyLCByZWc1Mmh8MHgwNCk7DQorCQkJfQ0KIAkJfQ0K ICNpZiBkZWZpbmVkKERJU1BMQVlfU0lTX1RJTUlOR1MpICYmIGRlZmluZWQo Q09ORklHX1BST0NfRlMpDQogCQlpZiAoIXNpc19wcm9jKSB7DQpkaWZmIC11 ck4gbGludXgtMi41LjMtcDItcHJpc3RpbmUvZHJpdmVycy9pZGUvdHJtMjkw LmMgbGludXgtMi41LjMtcDIvZHJpdmVycy9pZGUvdHJtMjkwLmMNCi0tLSBs aW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2ZXJzL2lkZS90cm0yOTAuYwlU dWUgSnVuIDIwIDA3OjUyOjM2IDIwMDANCisrKyBsaW51eC0yLjUuMy1wMi9k cml2ZXJzL2lkZS90cm0yOTAuYwlTdW4gSmFuIDIwIDAwOjQwOjExIDIwMDIN CkBAIC0xOTUsOCArMTk1LDI2IEBADQogCQkJaWYgKGRyaXZlLT5tZWRpYSAh PSBpZGVfZGlzaykNCiAJCQkJcmV0dXJuIDA7DQogCQkJaWRlX3NldF9oYW5k bGVyKGRyaXZlLCAmaWRlX2RtYV9pbnRyLCBXQUlUX0NNRCwgTlVMTCk7DQot CQkJT1VUX0JZVEUocmVhZGluZyA/IFdJTl9SRUFERE1BIDogV0lOX1dSSVRF RE1BLCBJREVfQ09NTUFORF9SRUcpOw0KLQkJCXJldHVybiAwOw0KKy8qDQor ICogRklYIE1FIHRvIHVzZSBvbmx5IEFDQiBpZGVfdGFza190IGFyZ3MgU3Ry dWN0DQorICovDQorI2lmIDANCisJCXsNCisJCQlpZGVfdGFza190ICphcmdz ID0gSFdHUk9VUChkcml2ZSktPnJxLT5zcGVjaWFsOw0KKwkJCU9VVF9CWVRF KGFyZ3MtPnRmUmVnaXN0ZXJbSURFX0NPTU1BTkRfT0ZGU0VUXSwgSURFX0NP TU1BTkRfUkVHKTsNCisJCX0NCisjZWxzZQ0KKwkJCWlmICgoSFdHUk9VUChk cml2ZSktPnJxLT5mbGFncyAmIFJFUV9EUklWRV9UQVNLRklMRSkgJiYNCisJ CQkgICAgKGRyaXZlLT5hZGRyZXNzaW5nID09IDEpKSB7DQorCQkJCWlkZV90 YXNrX3QgKmFyZ3MgPSBIV0dST1VQKGRyaXZlKS0+cnEtPnNwZWNpYWw7DQor CQkJCU9VVF9CWVRFKGFyZ3MtPnRmUmVnaXN0ZXJbSURFX0NPTU1BTkRfT0ZG U0VUXSwgSURFX0NPTU1BTkRfUkVHKTsNCisJCQl9IGVsc2UgaWYgKGRyaXZl LT5hZGRyZXNzaW5nKSB7DQorCQkJCU9VVF9CWVRFKHJlYWRpbmcgPyBXSU5f UkVBRERNQV9FWFQgOiBXSU5fV1JJVEVETUFfRVhULCBJREVfQ09NTUFORF9S RUcpOw0KKwkJCX0gZWxzZSB7DQorCQkJCU9VVF9CWVRFKHJlYWRpbmcgPyBX SU5fUkVBRERNQSA6IFdJTl9XUklURURNQSwgSURFX0NPTU1BTkRfUkVHKTsN CisJCQl9DQorI2VuZGlmDQorCQkJcmV0dXJuIEhXSUYoZHJpdmUpLT5kbWFw cm9jKGlkZV9kbWFfYmVnaW4sIGRyaXZlKTsNCiAJCWNhc2UgaWRlX2RtYV9i ZWdpbjoNCiAJCQlyZXR1cm4gMDsNCiAJCWNhc2UgaWRlX2RtYV9lbmQ6DQpk aWZmIC11ck4gbGludXgtMi41LjMtcDItcHJpc3RpbmUvaW5jbHVkZS9saW51 eC9pZGUuaCBsaW51eC0yLjUuMy1wMi9pbmNsdWRlL2xpbnV4L2lkZS5oDQot LS0gbGludXgtMi41LjMtcDItcHJpc3RpbmUvaW5jbHVkZS9saW51eC9pZGUu aAlTdW4gSmFuIDIwIDAwOjI1OjU5IDIwMDINCisrKyBsaW51eC0yLjUuMy1w Mi9pbmNsdWRlL2xpbnV4L2lkZS5oCVN1biBKYW4gMjAgMDA6NDA6MTEgMjAw Mg0KQEAgLTMyOSw5ICszMjksMTEgQEANCiAjaWZkZWYgUkVBTExZX0ZBU1Rf SU8NCiAjZGVmaW5lIE9VVF9CWVRFKGIscCkgICAgICAgICAgb3V0YigoYiks KHApKQ0KICNkZWZpbmUgT1VUX1dPUkQodyxwKSAgICAgICAgICBvdXR3KCh3 KSwocCkpDQorI2RlZmluZSBPVVRfTE9ORyhsLHApICAgICAgICAgIG91dGwo KGwpLChwKSkNCiAjZWxzZQ0KICNkZWZpbmUgT1VUX0JZVEUoYixwKSAgICAg ICAgICBvdXRiX3AoKGIpLChwKSkNCiAjZGVmaW5lIE9VVF9XT1JEKHcscCkg ICAgICAgICAgb3V0d19wKCh3KSwocCkpDQorI2RlZmluZSBPVVRfTE9ORyhs LHApICAgICAgICAgIG91dGxfcCgobCksKHApKQ0KICNlbmRpZg0KICNlbmRp Zg0KIA0KQEAgLTMzOSw5ICszNDEsMTEgQEANCiAjaWZkZWYgUkVBTExZX0ZB U1RfSU8NCiAjZGVmaW5lIElOX0JZVEUocCkgICAgICAgICAgICAgKGJ5dGUp aW5iKHApDQogI2RlZmluZSBJTl9XT1JEKHApICAgICAgICAgICAgIChzaG9y dClpbncocCkNCisjZGVmaW5lIElOX0xPTkcocCkgICAgICAgICAgICAgKGlu dClpbmwocCkNCiAjZWxzZQ0KICNkZWZpbmUgSU5fQllURShwKSAgICAgICAg ICAgICAoYnl0ZSlpbmJfcChwKQ0KICNkZWZpbmUgSU5fV09SRChwKSAgICAg ICAgICAgICAoc2hvcnQpaW53X3AocCkNCisjZGVmaW5lIElOX0xPTkcocCkg ICAgICAgICAgICAgKGludClpbmxfcChwKQ0KICNlbmRpZg0KICNlbmRpZg0K IA0KQEAgLTc4Niw4ICs3OTAsNiBAQA0KIGlubGluZSBpbnQgX19pZGVfZW5k X3JlcXVlc3QoaWRlX2h3Z3JvdXBfdCAqLCBpbnQsIGludCk7DQogaW50IGlk ZV9lbmRfcmVxdWVzdChieXRlIHVwdG9kYXRlLCBpZGVfaHdncm91cF90ICpo d2dyb3VwKTsNCiANCi1pbnQgZHJpdmVfaXNfcmVhZHkgKGlkZV9kcml2ZV90 ICpkcml2ZSk7DQotDQogLyoNCiAgKiBUaGlzIGlzIHVzZWQgb24gZXhpdCBm cm9tIHRoZSBkcml2ZXIsIHRvIGRlc2lnbmF0ZSB0aGUgbmV4dCBpcnEgaGFu ZGxlcg0KICAqIGFuZCBhbHNvIHRvIHN0YXJ0IHRoZSBzYWZldHkgdGltZXIu DQpAQCAtODgyLDEwICs4ODQsOCBAQA0KIC8qDQogICogdGVtcG9yYXJpbHkg bWFwcGluZyBhIChwb3NzaWJsZSkgaGlnaG1lbSBiaW8gZm9yIFBJTyB0cmFu c2Zlcg0KICAqLw0KLSNkZWZpbmUgaWRlX3JxX29mZnNldChycSkgKCgocnEp LT5oYXJkX2N1cl9zZWN0b3JzIC0gKHJxKS0+Y3VycmVudF9ucl9zZWN0b3Jz KSA8PCA5KQ0KLQ0KLSNkZWZpbmUgdGFza19ycV9vZmZzZXQocnEpIFwNCi0J KCgocnEpLT5ucl9zZWN0b3JzIC0gKHJxKS0+Y3VycmVudF9ucl9zZWN0b3Jz KSAqIFNFQ1RPUl9TSVpFKQ0KKyNkZWZpbmUgaWRlX3JxX29mZnNldChycSkg XA0KKwkoKChycSktPmhhcmRfY3VyX3NlY3RvcnMgLSAocnEpLT5jdXJyZW50 X25yX3NlY3RvcnMpIDw8IDkpDQogDQogZXh0ZXJuIGlubGluZSB2b2lkICpp ZGVfbWFwX2J1ZmZlcihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGxv bmcgKmZsYWdzKQ0KIHsNCkBAIC04OTgsMjQgKzg5OCw2IEBADQogfQ0KIA0K IC8qDQotICogZm9yIG5vdywgdGFza2ZpbGUgcmVxdWVzdHMgYXJlIHNwZWNp YWwgOi8NCi0gKi8NCi1leHRlcm4gaW5saW5lIGNoYXIgKmlkZV9tYXBfcnEo c3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBsb25nICpmbGFncykNCi17 DQotCWlmIChycS0+YmlvKQ0KLQkJcmV0dXJuIGlkZV9tYXBfYnVmZmVyKHJx LCBmbGFncyk7DQotCWVsc2UNCi0JCXJldHVybiBycS0+YnVmZmVyICsgdGFz a19ycV9vZmZzZXQocnEpOw0KLX0NCi0NCi1leHRlcm4gaW5saW5lIHZvaWQg aWRlX3VubWFwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgY2hhciAqYnVmLA0K LQkJCQl1bnNpZ25lZCBsb25nICpmbGFncykNCi17DQotCWlmIChycS0+Ymlv KQ0KLQkJaWRlX3VubWFwX2J1ZmZlcihidWYsIGZsYWdzKTsNCi19DQotDQot LyoNCiAgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyBhIHNwZWNpYWwgSURFIGRl dmljZSByZXF1ZXN0DQogICogb250byB0aGUgcmVxdWVzdCBxdWV1ZS4NCiAg Kg0KQEAgLTk3MSwxMiArOTUzLDI1IEBADQogCXVuc2lnbmVkIGxvbmcJCWJs b2NrOwkJLyogY29weSBvZiBibG9jayAqLw0KIH0gaWRlX3Rhc2tfdDsNCiAN Cit0eXBlZGVmIHN0cnVjdCBwa3RfdGFza19zIHsNCisJdGFza19pb3JlZ190 CQl0ZlJlZ2lzdGVyWzhdOw0KKwlpbnQJCQlkYXRhX3BoYXNlOw0KKwlpbnQJ CQljb21tYW5kX3R5cGU7DQorCWlkZV9oYW5kbGVyX3QJCSpoYW5kbGVyOw0K Kwl2b2lkCQkJKnNwZWNpYWw7DQorCXN0cnVjdCByZXF1ZXN0CQkqcnE7CQkv KiBjb3B5IG9mIHJlcXVlc3QgKi8NCisJdW5zaWduZWQgbG9uZwkJYmxvY2s7 CQkvKiBjb3B5IG9mIGJsb2NrICovDQorfSBwa3RfdGFza190Ow0KKw0KIHZv aWQgYXRhX2lucHV0X2RhdGEgKGlkZV9kcml2ZV90ICpkcml2ZSwgdm9pZCAq YnVmZmVyLCB1bnNpZ25lZCBpbnQgd2NvdW50KTsNCiB2b2lkIGF0YV9vdXRw dXRfZGF0YSAoaWRlX2RyaXZlX3QgKmRyaXZlLCB2b2lkICpidWZmZXIsIHVu c2lnbmVkIGludCB3Y291bnQpOw0KIHZvaWQgYXRhcGlfaW5wdXRfYnl0ZXMg KGlkZV9kcml2ZV90ICpkcml2ZSwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBp bnQgYnl0ZWNvdW50KTsNCiB2b2lkIGF0YXBpX291dHB1dF9ieXRlcyAoaWRl X2RyaXZlX3QgKmRyaXZlLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGludCBi eXRlY291bnQpOw0KIHZvaWQgdGFza2ZpbGVfaW5wdXRfZGF0YSAoaWRlX2Ry aXZlX3QgKmRyaXZlLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGludCB3Y291 bnQpOw0KIHZvaWQgdGFza2ZpbGVfb3V0cHV0X2RhdGEgKGlkZV9kcml2ZV90 ICpkcml2ZSwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgd2NvdW50KTsN CisNCitpbnQgZHJpdmVfaXNfcmVhZHkgKGlkZV9kcml2ZV90ICpkcml2ZSk7 DQoraW50IHdhaXRfZm9yX3JlYWR5IChpZGVfZHJpdmVfdCAqZHJpdmUsIGlu dCB0aW1lb3V0KTsNCiANCiAvKg0KICAqIHRhc2tmaWxlIGlvIGZvciBkaXNr cyBmb3Igbm93Li4uDQo= --1430322656-1514984572-1011606626=:13727-- - 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/