From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161279AbcBQPCO (ORCPT ); Wed, 17 Feb 2016 10:02:14 -0500 Received: from mx2.suse.de ([195.135.220.15]:42868 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161047AbcBQPCM (ORCPT ); Wed, 17 Feb 2016 10:02:12 -0500 Message-ID: <1455721173.7626.23.camel@suse.com> Subject: Re: [PATCH] usb: check for signals in chaoskey read function From: Oliver Neukum To: Keith Packard Cc: Greg Kroah-Hartman , linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org Date: Wed, 17 Feb 2016 15:59:33 +0100 In-Reply-To: <86h9h8ii9o.fsf@hiro.keithp.com> References: <1455590972-2120-1-git-send-email-keithp@keithp.com> <1455611093.4532.2.camel@suse.com> <86h9h8ii9o.fsf@hiro.keithp.com> Content-Type: multipart/mixed; boundary="=-0H4iDyTECZs/fqWoMWHu" X-Mailer: Evolution 3.12.11 Mime-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-0H4iDyTECZs/fqWoMWHu Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Tue, 2016-02-16 at 11:09 -0800, Keith Packard wrote: > I could be convinced that the driver should be using a different path > through the USB stack that would allow a signal to wake up while > waiting > for the URB to complete, but this patch at least avoids needing to > wait > for a huge read to finish. The other option would be to eliminate the > loop reading multiple URBs from the device, but that would reduce the > available bandwidth from the device pretty considerably. Do these do the job? Regards Oliver --=-0H4iDyTECZs/fqWoMWHu Content-Disposition: attachment; filename="0001-chaoskey-introduce-an-URB-for-asynchronous-reads.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-chaoskey-introduce-an-URB-for-asynchronous-reads.patch"; charset="UTF-8" RnJvbSA3M2ZhNTY4NDBiNDE1OGIyMDM0NzllYWJmOWJlMWU2MGRhNWNhNGQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbGl2ZXIgTmV1a3VtIDxvbmV1a3VtQHN1c2UuY29tPgpEYXRl OiBXZWQsIDE3IEZlYiAyMDE2IDEwOjUxOjU2ICswMTAwClN1YmplY3Q6IFtQQVRDSCAxLzJdIGNo YW9za2V5OiBpbnRyb2R1Y2UgYW4gVVJCIGZvciBhc3luY2hyb25vdXMgcmVhZHMKClRvIGdldCBt b3JlIGJhbmR3aWR0aCBhbmQgY2xlYW4gaGFuZGxpbmcgb2Ygc2lnbmFscwphbiBVUkIgaXMgaW50 cm9kdWNlZC4gQWxzbyBhIGNsZWFudXAgb2YgYWxsb2NhdGlvbgphbmQgZnJlZWluZyByZXNvdXJj ZXMuCgpTaWduZWQtb2ZmLWJ5OiBPbGl2ZXIgTmV1a3VtIDxvbmV1a3VtQHN1c2UuY29tPgotLS0K IGRyaXZlcnMvdXNiL21pc2MvY2hhb3NrZXkuYyB8IDQ2ICsrKysrKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyks IDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvY2hhb3NrZXku YyBiL2RyaXZlcnMvdXNiL21pc2MvY2hhb3NrZXkuYwppbmRleCAyM2M3OTQ4Li41YTY3YTA0IDEw MDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2NoYW9za2V5LmMKKysrIGIvZHJpdmVycy91c2Iv bWlzYy9jaGFvc2tleS5jCkBAIC04MCw3ICs4MCw4IEBAIHN0cnVjdCBjaGFvc2tleSB7CiAJc3Ry dWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IG11dGV4IHJuZ19sb2NrOwogCWludCBvcGVuOwkJCS8q IG9wZW4gY291bnQgKi8KLQlpbnQgcHJlc2VudDsJCQkvKiBkZXZpY2Ugbm90IGRpc2Nvbm5lY3Rl ZCAqLworCWJvb2wgcHJlc2VudDsJCQkvKiBkZXZpY2Ugbm90IGRpc2Nvbm5lY3RlZCAqLworCWJv b2wgcmVhZGluZzsJCQkvKiBvbmdvaW5nIElPICovCiAJaW50IHNpemU7CQkJLyogc2l6ZSBvZiBi dWYgKi8KIAlpbnQgdmFsaWQ7CQkJLyogYnl0ZXMgb2YgYnVmIHJlYWQgKi8KIAlpbnQgdXNlZDsJ CQkvKiBieXRlcyBvZiBidWYgY29uc3VtZWQgKi8KQEAgLTg4LDE1ICs4OSwxOSBAQCBzdHJ1Y3Qg Y2hhb3NrZXkgewogCXN0cnVjdCBod3JuZyBod3JuZzsJCS8qIEVtYmVkZGVkIHN0cnVjdCBmb3Ig aHdybmcgKi8KIAlpbnQgaHdybmdfcmVnaXN0ZXJlZDsJCS8qIHJlZ2lzdGVyZWQgd2l0aCBod3Ju ZyBBUEkgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CS8qIGZvciB0aW1lb3V0cyAqLwor CXN0cnVjdCB1cmIgKnVyYjsJCS8qIGZvciBwZXJmb3JtaW5nIElPICovCiAJY2hhciAqYnVmOwog fTsKIAogc3RhdGljIHZvaWQgY2hhb3NrZXlfZnJlZShzdHJ1Y3QgY2hhb3NrZXkgKmRldikKIHsK LQl1c2JfZGJnKGRldi0+aW50ZXJmYWNlLCAiZnJlZSIpOwotCWtmcmVlKGRldi0+bmFtZSk7Ci0J a2ZyZWUoZGV2LT5idWYpOwotCWtmcmVlKGRldik7CisJaWYgKGRldikgeworCQl1c2JfZGJnKGRl di0+aW50ZXJmYWNlLCAiZnJlZSIpOworCQl1c2JfZnJlZV91cmIoZGV2LT51cmIpOworCQlrZnJl ZShkZXYtPm5hbWUpOworCQlrZnJlZShkZXYtPmJ1Zik7CisJCWtmcmVlKGRldik7CisJfQogfQog CiBzdGF0aWMgaW50IGNoYW9za2V5X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZh Y2UsCkBAIC0xMDcsNyArMTEyLDcgQEAgc3RhdGljIGludCBjaGFvc2tleV9wcm9iZShzdHJ1Y3Qg dXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAogCWludCBpOwogCWludCBpbl9lcCA9IC0xOwogCXN0 cnVjdCBjaGFvc2tleSAqZGV2OwotCWludCByZXN1bHQ7CisJaW50IHJlc3VsdCA9IC1FTk9NRU07 CiAJaW50IHNpemU7CiAKIAl1c2JfZGJnKGludGVyZmFjZSwgInByb2JlICVzLSVzIiwgdWRldi0+ cHJvZHVjdCwgdWRldi0+c2VyaWFsKTsKQEAgLTE0MiwxNCArMTQ3LDE3IEBAIHN0YXRpYyBpbnQg Y2hhb3NrZXlfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKIAlkZXYgPSBr emFsbG9jKHNpemVvZihzdHJ1Y3QgY2hhb3NrZXkpLCBHRlBfS0VSTkVMKTsKIAogCWlmIChkZXYg PT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gb3V0OwogCiAJZGV2LT5idWYgPSBr bWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCi0JaWYgKGRldi0+YnVmID09IE5VTEwpIHsKLQkJ a2ZyZWUoZGV2KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWlmIChkZXYtPmJ1ZiA9PSBOVUxM KQorCQlnb3RvIG91dDsKKworCWRldi0+dXJiID0gdXNiX2FsbG9jX3VyYihHRlBfS0VSTkVMLCAw KTsKKworCWlmICghZGV2LT51cmIpCisJCWdvdG8gb3V0OwogCiAJLyogQ29uc3RydWN0IGEgbmFt ZSB1c2luZyB0aGUgcHJvZHVjdCBhbmQgc2VyaWFsIHZhbHVlcy4gRWFjaAogCSAqIGRldmljZSBu ZWVkcyBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgaHdybmcgY29kZQpAQCAtMTU4LDExICsxNjYsOCBA QCBzdGF0aWMgaW50IGNoYW9za2V5X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZh Y2UsCiAJaWYgKHVkZXYtPnByb2R1Y3QgJiYgdWRldi0+c2VyaWFsKSB7CiAJCWRldi0+bmFtZSA9 IGttYWxsb2Moc3RybGVuKHVkZXYtPnByb2R1Y3QpICsgMSArCiAJCQkJICAgIHN0cmxlbih1ZGV2 LT5zZXJpYWwpICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChkZXYtPm5hbWUgPT0gTlVMTCkgewot CQkJa2ZyZWUoZGV2LT5idWYpOwotCQkJa2ZyZWUoZGV2KTsKLQkJCXJldHVybiAtRU5PTUVNOwot CQl9CisJCWlmIChkZXYtPm5hbWUgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OwogCiAJCXN0cmNweShk ZXYtPm5hbWUsIHVkZXYtPnByb2R1Y3QpOwogCQlzdHJjYXQoZGV2LT5uYW1lLCAiLSIpOwpAQCAt MTg2LDkgKzE5MSw3IEBAIHN0YXRpYyBpbnQgY2hhb3NrZXlfcHJvYmUoc3RydWN0IHVzYl9pbnRl cmZhY2UgKmludGVyZmFjZSwKIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGVyZmFjZSwg JmNoYW9za2V5X2NsYXNzKTsKIAlpZiAocmVzdWx0KSB7CiAJCXVzYl9lcnIoaW50ZXJmYWNlLCAi VW5hYmxlIHRvIGFsbG9jYXRlIG1pbm9yIG51bWJlci4iKTsKLQkJdXNiX3NldF9pbnRmZGF0YShp bnRlcmZhY2UsIE5VTEwpOwotCQljaGFvc2tleV9mcmVlKGRldik7Ci0JCXJldHVybiByZXN1bHQ7 CisJCWdvdG8gb3V0OwogCX0KIAogCWRldi0+aHdybmcubmFtZSA9IGRldi0+bmFtZSA/IGRldi0+ bmFtZSA6IGNoYW9za2V5X2RyaXZlci5uYW1lOwpAQCAtMjE1LDYgKzIxOCwxMSBAQCBzdGF0aWMg aW50IGNoYW9za2V5X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAKIAl1 c2JfZGJnKGludGVyZmFjZSwgImNoYW9za2V5IHByb2JlIHN1Y2Nlc3MsIHNpemUgJWQiLCBkZXYt PnNpemUpOwogCXJldHVybiAwOworCitvdXQ6CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2Us IE5VTEwpOworCWNoYW9za2V5X2ZyZWUoZGV2KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0 aWMgdm9pZCBjaGFvc2tleV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZh Y2UpCi0tIAoyLjEuNAoK --=-0H4iDyTECZs/fqWoMWHu Content-Disposition: attachment; filename="0002-chaoskey-use-an-URB-for-requesting-data.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0002-chaoskey-use-an-URB-for-requesting-data.patch"; charset="UTF-8" RnJvbSAwNzVkMzM0OTIzYmVlMjY0NGJjYjJjYjU5YTFmNGFlZTEzNjljODAwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbGl2ZXIgTmV1a3VtIDxvbmV1a3VtQHN1c2UuY29tPgpEYXRl OiBXZWQsIDE3IEZlYiAyMDE2IDE0OjU2OjU3ICswMTAwClN1YmplY3Q6IFtQQVRDSCAyLzJdIGNo YW9za2V5OiB1c2UgYW4gVVJCIGZvciByZXF1ZXN0aW5nIGRhdGEKClRoaXMgYWxsb3dzIGhhbmRs aW5nIHNpZ25hbHMuCgpTaWduZWQtb2ZmLWJ5OiBPbGl2ZXIgTmV1a3VtIDxPTmV1a3VtQHN1c2Uu Y29tPgotLS0KIGRyaXZlcnMvdXNiL21pc2MvY2hhb3NrZXkuYyB8IDc2ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDU2IGluc2Vy dGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mv Y2hhb3NrZXkuYyBiL2RyaXZlcnMvdXNiL21pc2MvY2hhb3NrZXkuYwppbmRleCA1YTY3YTA0Li42 NzEwMmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2NoYW9za2V5LmMKKysrIGIvZHJp dmVycy91c2IvbWlzYy9jaGFvc2tleS5jCkBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3QgdXNiX2RldmljZV9pZCBjaGFvc2tleV90YWJsZVtdID0gewogfTsKIE1PRFVMRV9ERVZJ Q0VfVEFCTEUodXNiLCBjaGFvc2tleV90YWJsZSk7CiAKK3N0YXRpYyB2b2lkIGNoYW9zX3JlYWRf Y2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKKwogLyogRHJpdmVyLWxvY2FsIHNwZWNpZmljIHN0 dWZmICovCiBzdHJ1Y3QgY2hhb3NrZXkgewogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZh Y2U7CkBAIC0xNTksNiArMTYxLDE0IEBAIHN0YXRpYyBpbnQgY2hhb3NrZXlfcHJvYmUoc3RydWN0 IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKIAlpZiAoIWRldi0+dXJiKQogCQlnb3RvIG91dDsK IAorCXVzYl9maWxsX2J1bGtfdXJiKGRldi0+dXJiLAorCQl1ZGV2LAorCQl1c2JfcmN2YnVsa3Bp cGUodWRldiwgYWx0c2V0dGluZy0+ZW5kcG9pbnRbaW5fZXBdLmRlc2MuYkVuZHBvaW50QWRkcmVz cyksCisJCWRldi0+YnVmLAorCQlzaXplLAorCQljaGFvc19yZWFkX2NhbGxiYWNrLAorCQlkZXYp OworCiAJLyogQ29uc3RydWN0IGEgbmFtZSB1c2luZyB0aGUgcHJvZHVjdCBhbmQgc2VyaWFsIHZh bHVlcy4gRWFjaAogCSAqIGRldmljZSBuZWVkcyBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgaHdybmcg Y29kZQogCSAqLwpAQCAtMjQ1LDYgKzI1NSw3IEBAIHN0YXRpYyB2b2lkIGNoYW9za2V5X2Rpc2Nv bm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIAltdXRleF9sb2NrKCZkZXYt PmxvY2spOwogCiAJZGV2LT5wcmVzZW50ID0gMDsKKwl1c2JfcG9pc29uX3VyYihkZXYtPnVyYik7 CiAKIAlpZiAoIWRldi0+b3BlbikgewogCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CkBAIC0z MTksMTQgKzMzMCwzMyBAQCBzdGF0aWMgaW50IGNoYW9za2V5X3JlbGVhc2Uoc3RydWN0IGlub2Rl ICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lk IGNoYW9zX3JlYWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBjaGFvc2tl eSAqZGV2ID0gdXJiLT5jb250ZXh0OworCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKKworCXVz Yl9kYmcoZGV2LT5pbnRlcmZhY2UsICJjYWxsYmFjayBzdGF0dXMgKCVkKSIsIHN0YXR1cyk7CisK KwlpZiAoc3RhdHVzID09IDApCisJCWRldi0+dmFsaWQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJ ZWxzZQorCQlkZXYtPnZhbGlkID0gMDsKKworCWRldi0+dXNlZCA9IDA7CisKKwkvKiBtdXN0IGJl IHNlZW4gZmlyc3QgYmVmb3JlIHZhbGlkaXR5IGlzIGFubm91bmNlZCAqLworCXNtcF93bWIoKTsK KworCWRldi0+cmVhZGluZyA9IGZhbHNlOworCXdha2VfdXAoJmRldi0+d2FpdF9xKTsKK30KKwog LyogRmlsbCB0aGUgYnVmZmVyLiBDYWxsZWQgd2l0aCBkZXYtPmxvY2sgaGVsZAogICovCiBzdGF0 aWMgaW50IF9jaGFvc2tleV9maWxsKHN0cnVjdCBjaGFvc2tleSAqZGV2KQogewogCURFRklORV9X QUlUKHdhaXQpOwogCWludCByZXN1bHQ7Ci0JaW50IHRoaXNfcmVhZDsKLQlzdHJ1Y3QgdXNiX2Rl dmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoZGV2LT5pbnRlcmZhY2UpOwogCiAJdXNi X2RiZyhkZXYtPmludGVyZmFjZSwgImZpbGwiKTsKIApAQCAtMzUxLDIxICszODEsMzEgQEAgc3Rh dGljIGludCBfY2hhb3NrZXlfZmlsbChzdHJ1Y3QgY2hhb3NrZXkgKmRldikKIAkJcmV0dXJuIHJl c3VsdDsKIAl9CiAKLQlyZXN1bHQgPSB1c2JfYnVsa19tc2codWRldiwKLQkJCSAgICAgIHVzYl9y Y3ZidWxrcGlwZSh1ZGV2LCBkZXYtPmluX2VwKSwKLQkJCSAgICAgIGRldi0+YnVmLCBkZXYtPnNp emUsICZ0aGlzX3JlYWQsCi0JCQkgICAgICBOQUtfVElNRU9VVCk7CisJZGV2LT5yZWFkaW5nID0g dHJ1ZTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYiwgR0ZQX0tFUk5FTCk7CisJ aWYgKHJlc3VsdCA8IDApIHsKKwkJcmVzdWx0ID0gdXNiX3RyYW5zbGF0ZV9lcnJvcnMocmVzdWx0 KTsKKwkJZGV2LT5yZWFkaW5nID0gZmFsc2U7CisJCWdvdG8gb3V0OworCX0KKworCXJlc3VsdCA9 IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQlkZXYtPndhaXRfcSwKKwkJIWRl di0+cmVhZGluZywKKwkJTkFLX1RJTUVPVVQpOworCisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8g b3V0OwogCisJaWYgKHJlc3VsdCA9PSAwKQorCQlyZXN1bHQgPSAtRVRJTUVET1VUOworCWVsc2UK KwkJcmVzdWx0ID0gZGV2LT52YWxpZDsKK291dDoKIAkvKiBMZXQgdGhlIGRldmljZSBnbyBiYWNr IHRvIHNsZWVwIGV2ZW50dWFsbHkgKi8KIAl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LT5p bnRlcmZhY2UpOwogCi0JaWYgKHJlc3VsdCA9PSAwKSB7Ci0JCWRldi0+dmFsaWQgPSB0aGlzX3Jl YWQ7Ci0JCWRldi0+dXNlZCA9IDA7Ci0JfQotCi0JdXNiX2RiZyhkZXYtPmludGVyZmFjZSwgImJ1 bGtfbXNnIHJlc3VsdCAlZCB0aGlzX3JlYWQgJWQiLAotCQlyZXN1bHQsIHRoaXNfcmVhZCk7CisJ dXNiX2RiZyhkZXYtPmludGVyZmFjZSwgInJlYWQgJWQgYnl0ZXMiLCBkZXYtPnZhbGlkKTsKIAog CXJldHVybiByZXN1bHQ7CiB9CkBAIC00MDMsMTMgKzQ0Myw3IEBAIHN0YXRpYyBzc2l6ZV90IGNo YW9za2V5X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQlnb3RvIGJhaWw7CiAJCWlmIChkZXYt PnZhbGlkID09IGRldi0+dXNlZCkgewogCQkJcmVzdWx0ID0gX2NoYW9za2V5X2ZpbGwoZGV2KTsK LQkJCWlmIChyZXN1bHQpIHsKLQkJCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0JCQkJZ290 byBiYWlsOwotCQkJfQotCi0JCQkvKiBSZWFkIHJldHVybmVkIHplcm8gYnl0ZXMgKi8KLQkJCWlm IChkZXYtPnVzZWQgPT0gZGV2LT52YWxpZCkgeworCQkJaWYgKHJlc3VsdCA8IDApIHsKIAkJCQlt dXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCQkJZ290byBiYWlsOwogCQkJfQpAQCAtNDQzLDYg KzQ3Nyw4IEBAIGJhaWw6CiAJCXJldHVybiByZWFkX2NvdW50OwogCX0KIAl1c2JfZGJnKGRldi0+ aW50ZXJmYWNlLCAiZW1wdHkgcmVhZCwgcmVzdWx0ICVkIiwgcmVzdWx0KTsKKwlpZiAocmVzdWx0 ID09IC1FVElNRURPVVQpCisJCXJlc3VsdCA9IC1FQUdBSU47CiAJcmV0dXJuIHJlc3VsdDsKIH0K IAotLSAKMi4xLjQKCg== --=-0H4iDyTECZs/fqWoMWHu--