From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail.kernel.org ([198.145.29.99]:49208 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752910AbeERJNE (ORCPT ); Fri, 18 May 2018 05:13:04 -0400 Date: Fri, 18 May 2018 11:12:46 +0200 From: Greg KH To: Arend van Spriel Cc: Carlos Manuel Santos , Samuel Ortiz , Stephen Hemminger , linux-usb@vger.kernel.org, linux-wireless@vger.kernel.org Subject: Re: ACS ACR122U not working: pn533_usb 1-1:1.0: NFC: Couldn't poweron... Message-ID: <20180518091246.GA14856@kroah.com> (sfid-20180518_111324_652497_1CFB5D83) References: <20180517141217.GA32551@kroah.com> <20180517164004.GA8413@kroah.com> <20180517164624.GA28341@kroah.com> <5AFE9539.4010106@broadcom.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii In-Reply-To: <5AFE9539.4010106@broadcom.com> Sender: linux-wireless-owner@vger.kernel.org List-ID: On Fri, May 18, 2018 at 10:56:25AM +0200, Arend van Spriel wrote: > On 5/17/2018 6:46 PM, Greg KH wrote: > > On Thu, May 17, 2018 at 06:40:04PM +0200, Greg KH wrote: > > > Adding the network and NFC developers as this really is a NFC driver > > > bug, not a USB core issue... > > > > > > On Thu, May 17, 2018 at 04:12:17PM +0200, Greg KH wrote: > > > > On Thu, May 17, 2018 at 02:10:57PM +0100, Carlos Manuel Santos wrote: > > > > > Hello. > > > > > I'm having troubles with this NFC card reader. It seems kernel driver > > > > > pn533 is not working properly. > > > > > At this moment I have my work stalled. I need to add NFC support to a > > > > > software product and I can't get the device to work. NFC tools won't > > > > > work, the device is not detected. > > > > > > > > > > This is what I get from "dmesg": > > > > > > > > > > [ 4.182300] nfc: nfc_init: NFC Core ver 0.1 > > > > > [ 4.182318] NET: Registered protocol family 39 > > > > > [ 4.184676] hidraw: raw HID events driver (C) Jiri Kosina > > > > > [ 4.193366] ------------[ cut here ]------------ > > > > > [ 4.193366] transfer buffer not dma capable > > > > > [ 4.193398] WARNING: CPU: 2 PID: 259 at drivers/usb/core/hcd.c:1584 > > > > > usb_hcd_map_urb_for_dma+0x413/0x570 [usbcore] > > > > > [ 4.193399] Modules linked in: usbhid(+) pn533_usb(+) pn533 hid nfc > > > > > snd_soc_skl(+) rtsx_usb_ms snd_soc_skl_ipc memstick snd_hda_ext_core > > > > > snd_soc_sst_dsp snd_soc_sst_ipc ecdh_generic snd_soc_acpi snd_soc_core > > > > > snd_hda_codec_realtek(+) snd_hda_codec_generic snd_compress ac97_bus > > > > > snd_pcm_dmaengine arc4 intel_rapl x86_pkg_temp_thermal > > > > > intel_powerclamp coretemp kvm_intel snd_hda_intel kvm iTCO_wdt > > > > > snd_hda_codec iTCO_vendor_support iwlmvm i915 nls_iso8859_1 nls_cp437 > > > > > mac80211 vfat fat ppdev irqbypass crct10dif_pclmul crc32_pclmul > > > > > ghash_clmulni_intel uvcvideo pcbc snd_hda_core iwlwifi > > > > > videobuf2_vmalloc videobuf2_memops aesni_intel videobuf2_v4l2 > > > > > snd_hwdep aes_x86_64 crypto_simd glue_helper cryptd snd_pcm > > > > > intel_cstate videobuf2_common e1000e intel_uncore snd_timer cfg80211 > > > > > intel_rapl_perf tpm_crb psmouse > > > > > [ 4.193427] videodev pcspkr input_leds intel_wmi_thunderbolt > > > > > wmi_bmof ptp snd pps_core i2c_i801 soundcore toshiba_acpi mei_me media > > > > > sparse_keymap toshiba_bluetooth mei intel_gtt industrialio > > > > > intel_pch_thermal shpchp parport_pc tpm_tis tpm_tis_core battery > > > > > rfkill parport evdev rtc_cmos mac_hid tpm rng_core ac sg crypto_user > > > > > ip_tables x_tables rtsx_usb_sdmmc mmc_core rtsx_usb ext4 > > > > > crc32c_generic crc16 mbcache jbd2 fscrypto sr_mod cdrom sd_mod > > > > > serio_raw atkbd libps2 ahci libahci xhci_pci xhci_hcd crc32c_intel > > > > > libata usbcore scsi_mod usb_common i8042 serio nouveau led_class > > > > > mxm_wmi wmi i2c_algo_bit drm_kms_helper syscopyarea sysfillrect > > > > > sysimgblt fb_sys_fops ttm drm agpgart > > > > > [ 4.193458] CPU: 2 PID: 259 Comm: systemd-udevd Not tainted 4.16.8-1-ARCH #1 > > > > > [ 4.193459] Hardware name: TOSHIBA SATELLITE PRO A50-C/SATELLITE > > > > > PRO A50-C, BIOS Version 7.50 09/26/2016 > > > > > [ 4.193467] RIP: 0010:usb_hcd_map_urb_for_dma+0x413/0x570 [usbcore] > > > > > [ 4.193468] RSP: 0018:ffffa3b44282f9f8 EFLAGS: 00010282 > > > > > [ 4.193469] RAX: 0000000000000000 RBX: ffff981fc9e320c0 RCX: 0000000000000001 > > > > > [ 4.193470] RDX: 0000000080000001 RSI: 0000000000000002 RDI: 00000000ffffffff > > > > > [ 4.193471] RBP: ffff981fd42f0000 R08: 0000000713ed01d2 R09: 000000000000001f > > > > > [ 4.193472] R10: 0000000000000344 R11: 000000000000f300 R12: 00000000014000c0 > > > > > [ 4.193473] R13: 00000000fffffff5 R14: ffff981fd2592b98 R15: 00000000c0410280 > > > > > [ 4.193475] FS: 00007f4fb98d0d40(0000) GS:ffff981fe6d00000(0000) > > > > > knlGS:0000000000000000 > > > > > [ 4.193476] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > > > > > [ 4.193477] CR2: 0000562b4a68f6e8 CR3: 00000004532d6004 CR4: 00000000003606e0 > > > > > [ 4.193478] Call Trace: > > > > > [ 4.193488] usb_hcd_submit_urb+0x38d/0xb20 [usbcore] > > > > > [ 4.193492] ? pn533_usb_probe+0x61/0x4d0 [pn533_usb] > > > > > [ 4.193495] ? __kmalloc+0x19e/0x220 > > > > > [ 4.193498] pn533_usb_probe+0x397/0x4d0 [pn533_usb] > > > > > [ 4.193507] usb_probe_interface+0xe4/0x2f0 [usbcore] > > > > > [ 4.193511] driver_probe_device+0x2b9/0x460 > > > > > [ 4.193514] ? __driver_attach+0xb6/0xe0 > > > > > [ 4.193516] ? driver_probe_device+0x460/0x460 > > > > > [ 4.193518] ? bus_for_each_dev+0x76/0xc0 > > > > > [ 4.193520] ? bus_add_driver+0x152/0x230 > > > > > [ 4.193522] ? driver_register+0x6b/0xb0 > > > > > [ 4.193530] ? usb_register_driver+0x7a/0x130 [usbcore] > > > > > [ 4.193531] ? 0xffffffffc13b6000 > > > > > [ 4.193534] ? do_one_initcall+0x48/0x13b > > > > > [ 4.193537] ? free_unref_page_commit+0x6a/0x100 > > > > > [ 4.193539] ? kmem_cache_alloc_trace+0xdc/0x1c0 > > > > > [ 4.193542] ? do_init_module+0x5a/0x210 > > > > > [ 4.193544] ? load_module+0x247a/0x29f0 > > > > > [ 4.193549] ? SyS_init_module+0x139/0x180 > > > > > [ 4.193550] ? SyS_init_module+0x139/0x180 > > > > > [ 4.193554] ? do_syscall_64+0x74/0x190 > > > > > [ 4.193556] ? entry_SYSCALL_64_after_hwframe+0x3d/0xa2 > > > > > [ 4.193559] Code: 49 39 c9 73 30 80 3d 7d b5 02 00 00 41 bd f5 ff > > > > > ff ff 0f 85 57 ff ff ff 48 c7 c7 88 9d 6e c0 c6 05 63 b5 02 00 01 e8 > > > > > 97 85 9a ec <0f> 0b 8b 53 64 e9 3a ff ff ff 65 48 8b 0c 25 00 5c 01 00 > > > > > 48 8b > > > > > [ 4.193589] ---[ end trace 37ff3cbaf04a5b5d ]--- > > > > > [ 4.193612] usb 1-1: NFC: Reader power on cmd error -11 > > > > > [ 4.193614] pn533_usb 1-1:1.0: NFC: Couldn't poweron the reader (error -11) > > > > > [ 4.193618] pn533_usb: probe of 1-1:1.0 failed with error -11 > > > > > [ 4.193637] usbcore: registered new interface driver pn533_usb > > > > > [ 4.198216] usbcore: registered new interface driver usbhid > > > > > > > > > > > > > > > Please find the full dmesg in the link below: > > > > > https://pastebin.com/ck4sZuUY > > > > > > > > Odd that this driver has ever worked. Has it worked for you on older > > > > kernels? > > > > > > > > It looks like it is trying to send data off of the stack. At first > > > > glance, I see at least two places it is doing this, which is what is > > > > causing the errors you are seeing. I'll go audit the whole thing in a > > > > few hours when I get a chance. > > > > > > > > Are you able to build and test a kernel patch if I make one for you? > > > > > > Here's a totally untested, and not even built, patch that I knocked up > > > that should fix this type of issue. > > > > > > I'll try to at least build it later tonight... > > > > Ok, that was dumb, this version at least compiles :) > > I think there is a bit more dumbness below... :-p > > > -------------- > > > > From: Greg Kroah-Hartman > > Subject: [PATCH] NFC: pn533: don't send USB data off of the stack > > > > It's amazing that this driver ever worked, but now that x86 doesn't > > allow USB data to be sent off of the stack, it really does not work at > > all. Fix this up by properly allocating the data for the small > > "commands" that get sent to the device. > > > > The USB stack will free the buffer when the data has been transmitted, > > that is why there is no kfree() to mirror the call to kmalloc(). > > > > Reported-by: Carlos Manuel Santos > > Cc: Samuel Ortiz > > Cc: Stephen Hemminger > > Cc: stable > > Signed-off-by: Greg Kroah-Hartman > > > > diff --git a/drivers/nfc/pn533/usb.c b/drivers/nfc/pn533/usb.c > > index e153e8b64bb8..a0542f86efcf 100644 > > --- a/drivers/nfc/pn533/usb.c > > +++ b/drivers/nfc/pn533/usb.c > > @@ -150,10 +150,17 @@ static int pn533_usb_send_ack(struct pn533 *dev, gfp_t flags) > > struct pn533_usb_phy *phy = dev->phy; > > static const u8 ack[6] = {0x00, 0x00, 0xff, 0x00, 0xff, 0x00}; > > /* spec 7.1.1.3: Preamble, SoPC (2), ACK Code (2), Postamble */ > > + char *buffer; > > int rc; > > > > + buffer = kmalloc(sizeof(ack), GFP_KERNEL); > > + if (!buffer) > > + return -ENOMEM; > > + memcpy(buffer, ack, sizeof(ack)); > > + > > phy->out_urb->transfer_buffer = (u8 *)ack; > > Shouldn't this be assigned to the allocated bufffer instead? > > > phy->out_urb->transfer_buffer_length = sizeof(ack); > > + phy->out_urb->transfer_flags |= URB_FREE_BUFFER; > > rc = usb_submit_urb(phy->out_urb, flags); > > > > return rc; > > @@ -170,6 +177,7 @@ static int pn533_usb_send_frame(struct pn533 *dev, > > > > phy->out_urb->transfer_buffer = out->data; > > phy->out_urb->transfer_buffer_length = out->len; > > + phy->out_urb->transfer_flags &= ~URB_FREE_BUFFER; > > > > print_hex_dump_debug("PN533 TX: ", DUMP_PREFIX_NONE, 16, 1, > > out->data, out->len, false); > > @@ -375,12 +383,18 @@ static int pn533_acr122_poweron_rdr(struct pn533_usb_phy *phy) > > /* Power on th reader (CCID cmd) */ > > u8 cmd[10] = {PN533_ACR122_PC_TO_RDR_ICCPOWERON, > > 0, 0, 0, 0, 0, 0, 3, 0, 0}; > > + char *buffer; > > int rc; > > void *cntx; > > struct pn533_acr122_poweron_rdr_arg arg; > > > > dev_dbg(&phy->udev->dev, "%s\n", __func__); > > > > + buffer = kmalloc(sizeof(cmd), GFP_KERNEL); > > + if (!buffer) > > + return -ENOMEM; > > + memcpy(buffer, cmd, sizeof(cmd)); > > + > > init_completion(&arg.done); > > cntx = phy->in_urb->context; /* backup context */ > > > > @@ -389,6 +403,7 @@ static int pn533_acr122_poweron_rdr(struct pn533_usb_phy *phy) > > > > phy->out_urb->transfer_buffer = cmd; > > and same here. Ugh, that's what I get for writing kernel patches while sitting in a cafe... Let me go try this again... greg k-h From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: ACS ACR122U not working: pn533_usb 1-1:1.0: NFC: Couldn't poweron... From: Greg Kroah-Hartman Message-Id: <20180518091246.GA14856@kroah.com> Date: Fri, 18 May 2018 11:12:46 +0200 To: Arend van Spriel Cc: Carlos Manuel Santos , Samuel Ortiz , Stephen Hemminger , linux-usb@vger.kernel.org, linux-wireless@vger.kernel.org List-ID: T24gRnJpLCBNYXkgMTgsIDIwMTggYXQgMTA6NTY6MjVBTSArMDIwMCwgQXJlbmQgdmFuIFNwcmll bCB3cm90ZToKPiBPbiA1LzE3LzIwMTggNjo0NiBQTSwgR3JlZyBLSCB3cm90ZToKPiA+IE9uIFRo dSwgTWF5IDE3LCAyMDE4IGF0IDA2OjQwOjA0UE0gKzAyMDAsIEdyZWcgS0ggd3JvdGU6Cj4gPiA+ IEFkZGluZyB0aGUgbmV0d29yayBhbmQgTkZDIGRldmVsb3BlcnMgYXMgdGhpcyByZWFsbHkgaXMg YSBORkMgZHJpdmVyCj4gPiA+IGJ1Zywgbm90IGEgVVNCIGNvcmUgaXNzdWUuLi4KPiA+ID4gCj4g PiA+IE9uIFRodSwgTWF5IDE3LCAyMDE4IGF0IDA0OjEyOjE3UE0gKzAyMDAsIEdyZWcgS0ggd3Jv dGU6Cj4gPiA+ID4gT24gVGh1LCBNYXkgMTcsIDIwMTggYXQgMDI6MTA6NTdQTSArMDEwMCwgQ2Fy bG9zIE1hbnVlbCBTYW50b3Mgd3JvdGU6Cj4gPiA+ID4gPiBIZWxsby4KPiA+ID4gPiA+IEknbSBo YXZpbmcgdHJvdWJsZXMgd2l0aCB0aGlzIE5GQyBjYXJkIHJlYWRlci4gSXQgc2VlbXMga2VybmVs IGRyaXZlcgo+ID4gPiA+ID4gcG41MzMgaXMgbm90IHdvcmtpbmcgcHJvcGVybHkuCj4gPiA+ID4g PiBBdCB0aGlzIG1vbWVudCBJIGhhdmUgbXkgd29yayBzdGFsbGVkLiBJIG5lZWQgdG8gYWRkIE5G QyBzdXBwb3J0IHRvIGEKPiA+ID4gPiA+IHNvZnR3YXJlIHByb2R1Y3QgYW5kIEkgY2FuJ3QgZ2V0 IHRoZSBkZXZpY2UgdG8gd29yay4gTkZDIHRvb2xzIHdvbid0Cj4gPiA+ID4gPiB3b3JrLCB0aGUg ZGV2aWNlIGlzIG5vdCBkZXRlY3RlZC4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gVGhpcyBpcyB3aGF0 IEkgZ2V0IGZyb20gImRtZXNnIjoKPiA+ID4gPiA+IAo+ID4gPiA+ID4gWyAgICA0LjE4MjMwMF0g bmZjOiBuZmNfaW5pdDogTkZDIENvcmUgdmVyIDAuMQo+ID4gPiA+ID4gWyAgICA0LjE4MjMxOF0g TkVUOiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAzOQo+ID4gPiA+ID4gWyAgICA0LjE4NDY3 Nl0gaGlkcmF3OiByYXcgSElEIGV2ZW50cyBkcml2ZXIgKEMpIEppcmkgS29zaW5hCj4gPiA+ID4g PiBbICAgIDQuMTkzMzY2XSAtLS0tLS0tLS0tLS1bIGN1dCBoZXJlIF0tLS0tLS0tLS0tLS0KPiA+ ID4gPiA+IFsgICAgNC4xOTMzNjZdIHRyYW5zZmVyIGJ1ZmZlciBub3QgZG1hIGNhcGFibGUKPiA+ ID4gPiA+IFsgICAgNC4xOTMzOThdIFdBUk5JTkc6IENQVTogMiBQSUQ6IDI1OSBhdCBkcml2ZXJz L3VzYi9jb3JlL2hjZC5jOjE1ODQKPiA+ID4gPiA+IHVzYl9oY2RfbWFwX3VyYl9mb3JfZG1hKzB4 NDEzLzB4NTcwIFt1c2Jjb3JlXQo+ID4gPiA+ID4gWyAgICA0LjE5MzM5OV0gTW9kdWxlcyBsaW5r ZWQgaW46IHVzYmhpZCgrKSBwbjUzM191c2IoKykgcG41MzMgaGlkIG5mYwo+ID4gPiA+ID4gc25k X3NvY19za2woKykgcnRzeF91c2JfbXMgc25kX3NvY19za2xfaXBjIG1lbXN0aWNrIHNuZF9oZGFf ZXh0X2NvcmUKPiA+ID4gPiA+IHNuZF9zb2Nfc3N0X2RzcCBzbmRfc29jX3NzdF9pcGMgZWNkaF9n ZW5lcmljIHNuZF9zb2NfYWNwaSBzbmRfc29jX2NvcmUKPiA+ID4gPiA+IHNuZF9oZGFfY29kZWNf cmVhbHRlaygrKSBzbmRfaGRhX2NvZGVjX2dlbmVyaWMgc25kX2NvbXByZXNzIGFjOTdfYnVzCj4g PiA+ID4gPiBzbmRfcGNtX2RtYWVuZ2luZSBhcmM0IGludGVsX3JhcGwgeDg2X3BrZ190ZW1wX3Ro ZXJtYWwKPiA+ID4gPiA+IGludGVsX3Bvd2VyY2xhbXAgY29yZXRlbXAga3ZtX2ludGVsIHNuZF9o ZGFfaW50ZWwga3ZtIGlUQ09fd2R0Cj4gPiA+ID4gPiBzbmRfaGRhX2NvZGVjIGlUQ09fdmVuZG9y X3N1cHBvcnQgaXdsbXZtIGk5MTUgbmxzX2lzbzg4NTlfMSBubHNfY3A0MzcKPiA+ID4gPiA+IG1h YzgwMjExIHZmYXQgZmF0IHBwZGV2IGlycWJ5cGFzcyBjcmN0MTBkaWZfcGNsbXVsIGNyYzMyX3Bj bG11bAo+ID4gPiA+ID4gZ2hhc2hfY2xtdWxuaV9pbnRlbCB1dmN2aWRlbyBwY2JjIHNuZF9oZGFf Y29yZSBpd2x3aWZpCj4gPiA+ID4gPiB2aWRlb2J1ZjJfdm1hbGxvYyB2aWRlb2J1ZjJfbWVtb3Bz IGFlc25pX2ludGVsIHZpZGVvYnVmMl92NGwyCj4gPiA+ID4gPiBzbmRfaHdkZXAgYWVzX3g4Nl82 NCBjcnlwdG9fc2ltZCBnbHVlX2hlbHBlciBjcnlwdGQgc25kX3BjbQo+ID4gPiA+ID4gaW50ZWxf Y3N0YXRlIHZpZGVvYnVmMl9jb21tb24gZTEwMDBlIGludGVsX3VuY29yZSBzbmRfdGltZXIgY2Zn ODAyMTEKPiA+ID4gPiA+IGludGVsX3JhcGxfcGVyZiB0cG1fY3JiIHBzbW91c2UKPiA+ID4gPiA+ IFsgICAgNC4xOTM0MjddICB2aWRlb2RldiBwY3Nwa3IgaW5wdXRfbGVkcyBpbnRlbF93bWlfdGh1 bmRlcmJvbHQKPiA+ID4gPiA+IHdtaV9ibW9mIHB0cCBzbmQgcHBzX2NvcmUgaTJjX2k4MDEgc291 bmRjb3JlIHRvc2hpYmFfYWNwaSBtZWlfbWUgbWVkaWEKPiA+ID4gPiA+IHNwYXJzZV9rZXltYXAg dG9zaGliYV9ibHVldG9vdGggbWVpIGludGVsX2d0dCBpbmR1c3RyaWFsaW8KPiA+ID4gPiA+IGlu dGVsX3BjaF90aGVybWFsIHNocGNocCBwYXJwb3J0X3BjIHRwbV90aXMgdHBtX3Rpc19jb3JlIGJh dHRlcnkKPiA+ID4gPiA+IHJma2lsbCBwYXJwb3J0IGV2ZGV2IHJ0Y19jbW9zIG1hY19oaWQgdHBt IHJuZ19jb3JlIGFjIHNnIGNyeXB0b191c2VyCj4gPiA+ID4gPiBpcF90YWJsZXMgeF90YWJsZXMg cnRzeF91c2Jfc2RtbWMgbW1jX2NvcmUgcnRzeF91c2IgZXh0NAo+ID4gPiA+ID4gY3JjMzJjX2dl bmVyaWMgY3JjMTYgbWJjYWNoZSBqYmQyIGZzY3J5cHRvIHNyX21vZCBjZHJvbSBzZF9tb2QKPiA+ ID4gPiA+IHNlcmlvX3JhdyBhdGtiZCBsaWJwczIgYWhjaSBsaWJhaGNpIHhoY2lfcGNpIHhoY2lf aGNkIGNyYzMyY19pbnRlbAo+ID4gPiA+ID4gbGliYXRhIHVzYmNvcmUgc2NzaV9tb2QgdXNiX2Nv bW1vbiBpODA0MiBzZXJpbyBub3V2ZWF1IGxlZF9jbGFzcwo+ID4gPiA+ID4gbXhtX3dtaSB3bWkg aTJjX2FsZ29fYml0IGRybV9rbXNfaGVscGVyIHN5c2NvcHlhcmVhIHN5c2ZpbGxyZWN0Cj4gPiA+ ID4gPiBzeXNpbWdibHQgZmJfc3lzX2ZvcHMgdHRtIGRybSBhZ3BnYXJ0Cj4gPiA+ID4gPiBbICAg IDQuMTkzNDU4XSBDUFU6IDIgUElEOiAyNTkgQ29tbTogc3lzdGVtZC11ZGV2ZCBOb3QgdGFpbnRl ZCA0LjE2LjgtMS1BUkNIICMxCj4gPiA+ID4gPiBbICAgIDQuMTkzNDU5XSBIYXJkd2FyZSBuYW1l OiBUT1NISUJBIFNBVEVMTElURSBQUk8gQTUwLUMvU0FURUxMSVRFCj4gPiA+ID4gPiBQUk8gQTUw LUMsIEJJT1MgVmVyc2lvbiA3LjUwICAgMDkvMjYvMjAxNgo+ID4gPiA+ID4gWyAgICA0LjE5MzQ2 N10gUklQOiAwMDEwOnVzYl9oY2RfbWFwX3VyYl9mb3JfZG1hKzB4NDEzLzB4NTcwIFt1c2Jjb3Jl XQo+ID4gPiA+ID4gWyAgICA0LjE5MzQ2OF0gUlNQOiAwMDE4OmZmZmZhM2I0NDI4MmY5ZjggRUZM QUdTOiAwMDAxMDI4Mgo+ID4gPiA+ID4gWyAgICA0LjE5MzQ2OV0gUkFYOiAwMDAwMDAwMDAwMDAw MDAwIFJCWDogZmZmZjk4MWZjOWUzMjBjMCBSQ1g6IDAwMDAwMDAwMDAwMDAwMDEKPiA+ID4gPiA+ IFsgICAgNC4xOTM0NzBdIFJEWDogMDAwMDAwMDA4MDAwMDAwMSBSU0k6IDAwMDAwMDAwMDAwMDAw MDIgUkRJOiAwMDAwMDAwMGZmZmZmZmZmCj4gPiA+ID4gPiBbICAgIDQuMTkzNDcxXSBSQlA6IGZm ZmY5ODFmZDQyZjAwMDAgUjA4OiAwMDAwMDAwNzEzZWQwMWQyIFIwOTogMDAwMDAwMDAwMDAwMDAx Zgo+ID4gPiA+ID4gWyAgICA0LjE5MzQ3Ml0gUjEwOiAwMDAwMDAwMDAwMDAwMzQ0IFIxMTogMDAw MDAwMDAwMDAwZjMwMCBSMTI6IDAwMDAwMDAwMDE0MDAwYzAKPiA+ID4gPiA+IFsgICAgNC4xOTM0 NzNdIFIxMzogMDAwMDAwMDBmZmZmZmZmNSBSMTQ6IGZmZmY5ODFmZDI1OTJiOTggUjE1OiAwMDAw MDAwMGMwNDEwMjgwCj4gPiA+ID4gPiBbICAgIDQuMTkzNDc1XSBGUzogIDAwMDA3ZjRmYjk4ZDBk NDAoMDAwMCkgR1M6ZmZmZjk4MWZlNmQwMDAwMCgwMDAwKQo+ID4gPiA+ID4ga25sR1M6MDAwMDAw MDAwMDAwMDAwMAo+ID4gPiA+ID4gWyAgICA0LjE5MzQ3Nl0gQ1M6ICAwMDEwIERTOiAwMDAwIEVT OiAwMDAwIENSMDogMDAwMDAwMDA4MDA1MDAzMwo+ID4gPiA+ID4gWyAgICA0LjE5MzQ3N10gQ1Iy OiAwMDAwNTYyYjRhNjhmNmU4IENSMzogMDAwMDAwMDQ1MzJkNjAwNCBDUjQ6IDAwMDAwMDAwMDAz NjA2ZTAKPiA+ID4gPiA+IFsgICAgNC4xOTM0NzhdIENhbGwgVHJhY2U6Cj4gPiA+ID4gPiBbICAg IDQuMTkzNDg4XSAgdXNiX2hjZF9zdWJtaXRfdXJiKzB4MzhkLzB4YjIwIFt1c2Jjb3JlXQo+ID4g PiA+ID4gWyAgICA0LjE5MzQ5Ml0gID8gcG41MzNfdXNiX3Byb2JlKzB4NjEvMHg0ZDAgW3BuNTMz X3VzYl0KPiA+ID4gPiA+IFsgICAgNC4xOTM0OTVdICA/IF9fa21hbGxvYysweDE5ZS8weDIyMAo+ ID4gPiA+ID4gWyAgICA0LjE5MzQ5OF0gIHBuNTMzX3VzYl9wcm9iZSsweDM5Ny8weDRkMCBbcG41 MzNfdXNiXQo+ID4gPiA+ID4gWyAgICA0LjE5MzUwN10gIHVzYl9wcm9iZV9pbnRlcmZhY2UrMHhl NC8weDJmMCBbdXNiY29yZV0KPiA+ID4gPiA+IFsgICAgNC4xOTM1MTFdICBkcml2ZXJfcHJvYmVf ZGV2aWNlKzB4MmI5LzB4NDYwCj4gPiA+ID4gPiBbICAgIDQuMTkzNTE0XSAgPyBfX2RyaXZlcl9h dHRhY2grMHhiNi8weGUwCj4gPiA+ID4gPiBbICAgIDQuMTkzNTE2XSAgPyBkcml2ZXJfcHJvYmVf ZGV2aWNlKzB4NDYwLzB4NDYwCj4gPiA+ID4gPiBbICAgIDQuMTkzNTE4XSAgPyBidXNfZm9yX2Vh Y2hfZGV2KzB4NzYvMHhjMAo+ID4gPiA+ID4gWyAgICA0LjE5MzUyMF0gID8gYnVzX2FkZF9kcml2 ZXIrMHgxNTIvMHgyMzAKPiA+ID4gPiA+IFsgICAgNC4xOTM1MjJdICA/IGRyaXZlcl9yZWdpc3Rl cisweDZiLzB4YjAKPiA+ID4gPiA+IFsgICAgNC4xOTM1MzBdICA/IHVzYl9yZWdpc3Rlcl9kcml2 ZXIrMHg3YS8weDEzMCBbdXNiY29yZV0KPiA+ID4gPiA+IFsgICAgNC4xOTM1MzFdICA/IDB4ZmZm ZmZmZmZjMTNiNjAwMAo+ID4gPiA+ID4gWyAgICA0LjE5MzUzNF0gID8gZG9fb25lX2luaXRjYWxs KzB4NDgvMHgxM2IKPiA+ID4gPiA+IFsgICAgNC4xOTM1MzddICA/IGZyZWVfdW5yZWZfcGFnZV9j b21taXQrMHg2YS8weDEwMAo+ID4gPiA+ID4gWyAgICA0LjE5MzUzOV0gID8ga21lbV9jYWNoZV9h bGxvY190cmFjZSsweGRjLzB4MWMwCj4gPiA+ID4gPiBbICAgIDQuMTkzNTQyXSAgPyBkb19pbml0 X21vZHVsZSsweDVhLzB4MjEwCj4gPiA+ID4gPiBbICAgIDQuMTkzNTQ0XSAgPyBsb2FkX21vZHVs ZSsweDI0N2EvMHgyOWYwCj4gPiA+ID4gPiBbICAgIDQuMTkzNTQ5XSAgPyBTeVNfaW5pdF9tb2R1 bGUrMHgxMzkvMHgxODAKPiA+ID4gPiA+IFsgICAgNC4xOTM1NTBdICA/IFN5U19pbml0X21vZHVs ZSsweDEzOS8weDE4MAo+ID4gPiA+ID4gWyAgICA0LjE5MzU1NF0gID8gZG9fc3lzY2FsbF82NCsw eDc0LzB4MTkwCj4gPiA+ID4gPiBbICAgIDQuMTkzNTU2XSAgPyBlbnRyeV9TWVNDQUxMXzY0X2Fm dGVyX2h3ZnJhbWUrMHgzZC8weGEyCj4gPiA+ID4gPiBbICAgIDQuMTkzNTU5XSBDb2RlOiA0OSAz OSBjOSA3MyAzMCA4MCAzZCA3ZCBiNSAwMiAwMCAwMCA0MSBiZCBmNSBmZgo+ID4gPiA+ID4gZmYg ZmYgMGYgODUgNTcgZmYgZmYgZmYgNDggYzcgYzcgODggOWQgNmUgYzAgYzYgMDUgNjMgYjUgMDIg MDAgMDEgZTgKPiA+ID4gPiA+IDk3IDg1IDlhIGVjIDwwZj4gMGIgOGIgNTMgNjQgZTkgM2EgZmYg ZmYgZmYgNjUgNDggOGIgMGMgMjUgMDAgNWMgMDEgMDAKPiA+ID4gPiA+IDQ4IDhiCj4gPiA+ID4g PiBbICAgIDQuMTkzNTg5XSAtLS1bIGVuZCB0cmFjZSAzN2ZmM2NiYWYwNGE1YjVkIF0tLS0KPiA+ ID4gPiA+IFsgICAgNC4xOTM2MTJdIHVzYiAxLTE6IE5GQzogUmVhZGVyIHBvd2VyIG9uIGNtZCBl cnJvciAtMTEKPiA+ID4gPiA+IFsgICAgNC4xOTM2MTRdIHBuNTMzX3VzYiAxLTE6MS4wOiBORkM6 IENvdWxkbid0IHBvd2Vyb24gdGhlIHJlYWRlciAoZXJyb3IgLTExKQo+ID4gPiA+ID4gWyAgICA0 LjE5MzYxOF0gcG41MzNfdXNiOiBwcm9iZSBvZiAxLTE6MS4wIGZhaWxlZCB3aXRoIGVycm9yIC0x MQo+ID4gPiA+ID4gWyAgICA0LjE5MzYzN10gdXNiY29yZTogcmVnaXN0ZXJlZCBuZXcgaW50ZXJm YWNlIGRyaXZlciBwbjUzM191c2IKPiA+ID4gPiA+IFsgICAgNC4xOTgyMTZdIHVzYmNvcmU6IHJl Z2lzdGVyZWQgbmV3IGludGVyZmFjZSBkcml2ZXIgdXNiaGlkCj4gPiA+ID4gPiAKPiA+ID4gPiA+ IAo+ID4gPiA+ID4gUGxlYXNlIGZpbmQgdGhlIGZ1bGwgZG1lc2cgaW4gdGhlIGxpbmsgYmVsb3c6 Cj4gPiA+ID4gPiBodHRwczovL3Bhc3RlYmluLmNvbS9jazRzWnVVWQo+ID4gPiA+IAo+ID4gPiA+ IE9kZCB0aGF0IHRoaXMgZHJpdmVyIGhhcyBldmVyIHdvcmtlZC4gIEhhcyBpdCB3b3JrZWQgZm9y IHlvdSBvbiBvbGRlcgo+ID4gPiA+IGtlcm5lbHM/Cj4gPiA+ID4gCj4gPiA+ID4gSXQgbG9va3Mg bGlrZSBpdCBpcyB0cnlpbmcgdG8gc2VuZCBkYXRhIG9mZiBvZiB0aGUgc3RhY2suICBBdCBmaXJz dAo+ID4gPiA+IGdsYW5jZSwgSSBzZWUgYXQgbGVhc3QgdHdvIHBsYWNlcyBpdCBpcyBkb2luZyB0 aGlzLCB3aGljaCBpcyB3aGF0IGlzCj4gPiA+ID4gY2F1c2luZyB0aGUgZXJyb3JzIHlvdSBhcmUg c2VlaW5nLiAgIEknbGwgZ28gYXVkaXQgdGhlIHdob2xlIHRoaW5nIGluIGEKPiA+ID4gPiBmZXcg aG91cnMgd2hlbiBJIGdldCBhIGNoYW5jZS4KPiA+ID4gPiAKPiA+ID4gPiBBcmUgeW91IGFibGUg dG8gYnVpbGQgYW5kIHRlc3QgYSBrZXJuZWwgcGF0Y2ggaWYgSSBtYWtlIG9uZSBmb3IgeW91Pwo+ ID4gPiAKPiA+ID4gSGVyZSdzIGEgdG90YWxseSB1bnRlc3RlZCwgYW5kIG5vdCBldmVuIGJ1aWx0 LCBwYXRjaCB0aGF0IEkga25vY2tlZCB1cAo+ID4gPiB0aGF0IHNob3VsZCBmaXggdGhpcyB0eXBl IG9mIGlzc3VlLgo+ID4gPiAKPiA+ID4gSSdsbCB0cnkgdG8gYXQgbGVhc3QgYnVpbGQgaXQgbGF0 ZXIgdG9uaWdodC4uLgo+ID4gCj4gPiBPaywgdGhhdCB3YXMgZHVtYiwgdGhpcyB2ZXJzaW9uIGF0 IGxlYXN0IGNvbXBpbGVzIDopCj4gCj4gSSB0aGluayB0aGVyZSBpcyBhIGJpdCBtb3JlIGR1bWJu ZXNzIGJlbG93Li4uIDotcAo+IAo+ID4gLS0tLS0tLS0tLS0tLS0KPiA+IAo+ID4gRnJvbTogR3Jl ZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KPiA+IFN1YmplY3Q6 IFtQQVRDSF0gTkZDOiBwbjUzMzogZG9uJ3Qgc2VuZCBVU0IgZGF0YSBvZmYgb2YgdGhlIHN0YWNr Cj4gPiAKPiA+IEl0J3MgYW1hemluZyB0aGF0IHRoaXMgZHJpdmVyIGV2ZXIgd29ya2VkLCBidXQg bm93IHRoYXQgeDg2IGRvZXNuJ3QKPiA+IGFsbG93IFVTQiBkYXRhIHRvIGJlIHNlbnQgb2ZmIG9m IHRoZSBzdGFjaywgaXQgcmVhbGx5IGRvZXMgbm90IHdvcmsgYXQKPiA+IGFsbC4gIEZpeCB0aGlz IHVwIGJ5IHByb3Blcmx5IGFsbG9jYXRpbmcgdGhlIGRhdGEgZm9yIHRoZSBzbWFsbAo+ID4gImNv bW1hbmRzIiB0aGF0IGdldCBzZW50IHRvIHRoZSBkZXZpY2UuCj4gPiAKPiA+IFRoZSBVU0Igc3Rh Y2sgd2lsbCBmcmVlIHRoZSBidWZmZXIgd2hlbiB0aGUgZGF0YSBoYXMgYmVlbiB0cmFuc21pdHRl ZCwKPiA+IHRoYXQgaXMgd2h5IHRoZXJlIGlzIG5vIGtmcmVlKCkgdG8gbWlycm9yIHRoZSBjYWxs IHRvIGttYWxsb2MoKS4KPiA+IAo+ID4gUmVwb3J0ZWQtYnk6IENhcmxvcyBNYW51ZWwgU2FudG9z IDxjbW1wc2FudG9zQGdtYWlsLmNvbT4KPiA+IENjOiBTYW11ZWwgT3J0aXogPHNhbWVvQGxpbnV4 LmludGVsLmNvbT4KPiA+IENjOiBTdGVwaGVuIEhlbW1pbmdlciA8c3RlcGhlbkBuZXR3b3JrcGx1 bWJlci5vcmc+Cj4gPiBDYzogc3RhYmxlIDxzdGFibGVAdmdlci5rZXJuZWwub3JnPgo+ID4gU2ln bmVkLW9mZi1ieTogR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9y Zz4KPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3BuNTMzL3VzYi5jIGIvZHJpdmVy cy9uZmMvcG41MzMvdXNiLmMKPiA+IGluZGV4IGUxNTNlOGI2NGJiOC4uYTA1NDJmODZlZmNmIDEw MDY0NAo+ID4gLS0tIGEvZHJpdmVycy9uZmMvcG41MzMvdXNiLmMKPiA+ICsrKyBiL2RyaXZlcnMv bmZjL3BuNTMzL3VzYi5jCj4gPiBAQCAtMTUwLDEwICsxNTAsMTcgQEAgc3RhdGljIGludCBwbjUz M191c2Jfc2VuZF9hY2soc3RydWN0IHBuNTMzICpkZXYsIGdmcF90IGZsYWdzKQo+ID4gICAJc3Ry dWN0IHBuNTMzX3VzYl9waHkgKnBoeSA9IGRldi0+cGh5Owo+ID4gICAJc3RhdGljIGNvbnN0IHU4 IGFja1s2XSA9IHsweDAwLCAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwfTsKPiA+ICAgCS8q IHNwZWMgNy4xLjEuMzogIFByZWFtYmxlLCBTb1BDICgyKSwgQUNLIENvZGUgKDIpLCBQb3N0YW1i bGUgKi8KPiA+ICsJY2hhciAqYnVmZmVyOwo+ID4gICAJaW50IHJjOwo+ID4gCj4gPiArCWJ1ZmZl ciA9IGttYWxsb2Moc2l6ZW9mKGFjayksIEdGUF9LRVJORUwpOwo+ID4gKwlpZiAoIWJ1ZmZlcikK PiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4gKwltZW1jcHkoYnVmZmVyLCBhY2ssIHNpemVvZihh Y2spKTsKPiA+ICsKPiA+ICAgCXBoeS0+b3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyID0gKHU4ICop YWNrOwo+IAo+IFNob3VsZG4ndCB0aGlzIGJlIGFzc2lnbmVkIHRvIHRoZSBhbGxvY2F0ZWQgYnVm ZmZlciBpbnN0ZWFkPwo+IAo+ID4gICAJcGh5LT5vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVu Z3RoID0gc2l6ZW9mKGFjayk7Cj4gPiArCXBoeS0+b3V0X3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0g VVJCX0ZSRUVfQlVGRkVSOwo+ID4gICAJcmMgPSB1c2Jfc3VibWl0X3VyYihwaHktPm91dF91cmIs IGZsYWdzKTsKPiA+IAo+ID4gICAJcmV0dXJuIHJjOwo+ID4gQEAgLTE3MCw2ICsxNzcsNyBAQCBz dGF0aWMgaW50IHBuNTMzX3VzYl9zZW5kX2ZyYW1lKHN0cnVjdCBwbjUzMyAqZGV2LAo+ID4gCj4g PiAgIAlwaHktPm91dF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IG91dC0+ZGF0YTsKPiA+ICAgCXBo eS0+b3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IG91dC0+bGVuOwo+ID4gKwlwaHkt Pm91dF91cmItPnRyYW5zZmVyX2ZsYWdzICY9IH5VUkJfRlJFRV9CVUZGRVI7Cj4gPiAKPiA+ICAg CXByaW50X2hleF9kdW1wX2RlYnVnKCJQTjUzMyBUWDogIiwgRFVNUF9QUkVGSVhfTk9ORSwgMTYs IDEsCj4gPiAgIAkJCSAgICAgb3V0LT5kYXRhLCBvdXQtPmxlbiwgZmFsc2UpOwo+ID4gQEAgLTM3 NSwxMiArMzgzLDE4IEBAIHN0YXRpYyBpbnQgcG41MzNfYWNyMTIyX3Bvd2Vyb25fcmRyKHN0cnVj dCBwbjUzM191c2JfcGh5ICpwaHkpCj4gPiAgIAkvKiBQb3dlciBvbiB0aCByZWFkZXIgKENDSUQg Y21kKSAqLwo+ID4gICAJdTggY21kWzEwXSA9IHtQTjUzM19BQ1IxMjJfUENfVE9fUkRSX0lDQ1BP V0VST04sCj4gPiAgIAkJICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMywgMCwgMH07Cj4gPiArCWNo YXIgKmJ1ZmZlcjsKPiA+ICAgCWludCByYzsKPiA+ICAgCXZvaWQgKmNudHg7Cj4gPiAgIAlzdHJ1 Y3QgcG41MzNfYWNyMTIyX3Bvd2Vyb25fcmRyX2FyZyBhcmc7Cj4gPiAKPiA+ICAgCWRldl9kYmco JnBoeS0+dWRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKPiA+IAo+ID4gKwlidWZmZXIgPSBr bWFsbG9jKHNpemVvZihjbWQpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFidWZmZXIpCj4gPiAr CQlyZXR1cm4gLUVOT01FTTsKPiA+ICsJbWVtY3B5KGJ1ZmZlciwgY21kLCBzaXplb2YoY21kKSk7 Cj4gPiArCj4gPiAgIAlpbml0X2NvbXBsZXRpb24oJmFyZy5kb25lKTsKPiA+ICAgCWNudHggPSBw aHktPmluX3VyYi0+Y29udGV4dDsgIC8qIGJhY2t1cCBjb250ZXh0ICovCj4gPiAKPiA+IEBAIC0z ODksNiArNDAzLDcgQEAgc3RhdGljIGludCBwbjUzM19hY3IxMjJfcG93ZXJvbl9yZHIoc3RydWN0 IHBuNTMzX3VzYl9waHkgKnBoeSkKPiA+IAo+ID4gICAJcGh5LT5vdXRfdXJiLT50cmFuc2Zlcl9i dWZmZXIgPSBjbWQ7Cj4gCj4gYW5kIHNhbWUgaGVyZS4KClVnaCwgdGhhdCdzIHdoYXQgSSBnZXQg Zm9yIHdyaXRpbmcga2VybmVsIHBhdGNoZXMgd2hpbGUgc2l0dGluZyBpbiBhCmNhZmUuLi4KCkxl dCBtZSBnbyB0cnkgdGhpcyBhZ2Fpbi4uLgoKZ3JlZyBrLWgKLS0tClRvIHVuc3Vic2NyaWJlIGZy b20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC11c2IiIGluCnRo ZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnCk1vcmUgbWFq b3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRt bAo=