From owner-freebsd-bluetooth@FreeBSD.ORG Mon Jan 19 22:21:58 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8AFF1106570A; Mon, 19 Jan 2009 22:21:58 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from rv-out-0506.google.com (rv-out-0506.google.com [209.85.198.229]) by mx1.freebsd.org (Postfix) with ESMTP id 44F688FC0A; Mon, 19 Jan 2009 22:21:57 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by rv-out-0506.google.com with SMTP id b25so2932559rvf.43 for ; Mon, 19 Jan 2009 14:21:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=ujou4y21OCDmSVvsb87/vXBi8Ssseej0BpPFnL/1hXQ=; b=GQ6RH2Vrg6XKXinsgMqqT64ji2+oUCRxp8XOpb1rlCFDlTBdsqk+bmFe+91yVtcnCA 4Kl/txpEfMC6XRl2wVTRab3du1OVGKCHCWumsi8pVzoWKxjijY+Uflu7KndZ8I3n69TL WVqM49h3RGhgIiklZbQANRdFrJtOQ3Gtm6Phk= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=eCYZjis0fxjPjCOUY3tCcZPVjxIKqhtvjurlwOOk3/xGo8tNdf1ciDw1G3hjQOQ//K X/HfQFA2g5oe43Hg60CbEIFIYLnPYGg0CacT38to2C3Ii5Dtos7fF0Zf7FqSQQyn42Oj gdKZsBuABz1PLgyBwfEVayoyjtRJePP9imbyo= MIME-Version: 1.0 Received: by 10.140.166.16 with SMTP id o16mr588162rve.25.1232403717623; Mon, 19 Jan 2009 14:21:57 -0800 (PST) In-Reply-To: <200901161012.24544.hselasky@c2i.net> References: <200901152225.19150.hselasky@c2i.net> <200901161012.24544.hselasky@c2i.net> Date: Mon, 19 Jan 2009 14:21:57 -0800 Message-ID: From: Maksim Yevmenkin To: Hans Petter Selasky Content-Type: multipart/mixed; boundary=000e0cd2e10ccf0fd50460dd59a4 Cc: "freebsd-bluetooth@freebsd.org" , Alfred Perlstein Subject: Re: USB2: ng_ubt2 patch X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Jan 2009 22:21:59 -0000 --000e0cd2e10ccf0fd50460dd59a4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit hello, [...] >> >> > 1) Maybe you just want to merge together all the USB config structures >> >> > into one? >> >> >> >> i guess, i could. since isoc transfers are going over different (from >> >> control, interrupt and bulk transfers) interface, i kept original code >> >> that had two separate usb2_config structures (i.e. one per each >> >> interface). for the same reason, i added separate lock for interface 1 >> >> (where isoc transfers are). i figured, due to the nature of isoc >> >> transfers, this lock will be grabbed a lot more often. it seemed like >> >> a good idea to use different lock so there would be less contention >> >> with interface 0 lock. but then again, may be i just full of it :) and >> >> it really does not matter. >> >> >> >> could you please tell me what is the reason for merging usb2_config >> >> structures? is it better for usb2? >> > >> > It will save some memory allocations. >> >> i will see what i can do. ok, as per your request, i have merged two usb2_config structures into one (see attached patch) [...] > If isochronous is being used, then I recommend you have two transfers running > at any time in both directions. If there is nothing to send you send zero > length frames. Else you end up with glitches in the isochronous stream when > you change from one transfer to the other! Both isochronous transfers should > be queued all the time! ok, i've made this change as well. newer code queues and keeps both read and both write isoc. transfers running all the time. the attached patch seems to work (there was a reference counting problem in the previous version of the patch). i also tortured it a bit, i.e. stop the stack and/or yank the device while stack it active and sending lots of data (i used l2ping -f to create lots of activity). i think, it can be committed to -head now. it should be stable enough for early adopters of usb2 and bluetooth :) so, please let me know how should i proceed at this point? do i 1) commit it to head myself or 2) wait for you commit it into your cvs/scv/p4/etc. branch and then merge it into -head thanks, max --000e0cd2e10ccf0fd50460dd59a4 Content-Type: text/plain; charset=US-ASCII; name="ng_ubt2.diff.txt" Content-Disposition: attachment; filename="ng_ubt2.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fq5oxlah0 SW5kZXg6IG5nX3VidDIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBuZ191YnQyLmMJKHJldmlzaW9uIDE4NzMx MykKKysrIG5nX3VidDIuYwkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqLwogCiAv Ki0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIE1ha3NpbSBZZXZtZW5raW4gPG1fZXZtZW5r aW5AeWFob28uY29tPgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDkgTWFrc2ltIFlldm1lbmtp biA8bV9ldm1lbmtpbkB5YWhvby5jb20+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dApAQCAtMzEsNiArMzEsNjkgQEAKICAqICRGcmVlQlNEJAogICovCiAKKy8qCisg KiBOT1RFOiBuZ191YnQyIGRyaXZlciBoYXMgYSBzcGxpdCBwZXJzb25hbGl0eS4gT24gb25lIHNp ZGUgaXQgaXMKKyAqIGEgVVNCMiBkZXZpY2UgZHJpdmVyIGFuZCBvbiB0aGUgb3RoZXIgaXQgaXMg YSBOZXRncmFwaCBub2RlLiBUaGlzCisgKiBkcml2ZXIgd2lsbCAqTk9UKiBjcmVhdGUgdHJhZGl0 aW9uYWwgL2Rldi8gZW50aWVzLCBvbmx5IE5ldGdyYXBoIAorICogbm9kZS4KKyAqCisgKiBOT1RF IE9OIExPQ0tTIFVTRUQ6IG5nX3VidDIgZHJpdmVzIHVzZXMgMyBsb2NrcyAobXV0ZXhlcykKKyAq CisgKiAxKSBzY19pZl9tdHhbMF0gLSBsb2NrIGZvciBkZXZpY2UncyBpbnRlcmZhY2UgIzAuIFRo aXMgbG9jayBpcyB1c2VkCisgKiAgICBieSBVU0IyIGZvciBhbnkgVVNCIHJlcXVlc3QgZ29pbmcg b3ZlciBkZXZpY2UncyBpbnRlcmZhY2UgIzAsIGkuZS4KKyAqICAgIGludGVycnVwdCwgY29udHJv bCBhbmQgYnVsayB0cmFuc2ZlcnMuCisgKiAKKyAqIDIpIHNjX2lmX210eFsxXSAtIGxvY2sgZm9y IGRldmljZSdzIGludGVyZmFjZSAjMS4gVGhpcyBsb2NrIGlzIHVzZWQKKyAqICAgIGJ5IFVTQjIg Zm9yIGFueSBVU0IgcmVxdWVzdCBnb2luZyBvdmVyIGRldmljZSdzIGludGVyZmFjZSAjMSwgaS5l CisgKiAgICBpc29jLiB0cmFuc2ZlcnMuCisgKiAKKyAqIDMpIHNjX21idWZxX210eCAtIGxvY2sg Zm9yIG1idWZxIGFuZCB0YXNrIGZsYWdzLiBUaGlzIGxvY2sgaXMgdXNlZAorICogICAgdG8gcHJv dGVjdCBkZXZpY2UncyBvdXRnb2luZyBtYnVmIHF1ZXVlcyBhbmQgdGFzayBmbGFncy4gVGhpcyBs b2NrCisgKiAgICAqU0hPVUxEIE5PVCogYmUgZ3JhYmJlZCBmb3IgYSBsb25nIHRpbWUuIEluIGZh Y3QsIHRoaW5rIG9mIGl0IGFzIGEgCisgKiAgICBzcGluIGxvY2suCisgKgorICogTk9URSBPTiBM T0NLSU5HIFNUUkFURUdZOiBuZ191YnQyIGRyaXZlciBvcGVyYXRlcyBpbiAzIGRpZmZlcmVudCBj b250ZXh0cy4KKyAqCisgKiAxKSBVU0IgY29udGV4dC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIFVT QiByZWxhdGVkIHN0dWZmIGhhcHBlbnMuIEFsbAorICogICAgY2FsbGJhY2tzIHJ1biBpbiB0aGlz IGNvbnRleHQuIEFsbCBjYWxsYmFja3MgYXJlIGNhbGxlZCAoYnkgVVNCMikgd2l0aAorICogICAg YXBwcm9wcmlhdGUgaW50ZXJmYWNlIGxvY2sgaGVsZC4gSXQgaXMgKGdlbmVyYWxseSkgYWxsb3dl ZCB0byBncmFiCisgKiAgICBhbnkgYWRkaXRpb25hbCBsb2Nrcy4KKyAqCisgKiAyKSBOZXRncmFw aCBjb250ZXh0LiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgTmV0Z3JhcGggcmVsYXRlZCBzdHVmZiBo YXBwZW5zLgorICogICAgU2luY2Ugd2UgbWFyayBub2RlIGFzIFdSSVRFUiwgdGhlIE5ldGdyYXBo IG5vZGUgd2lsbCBiZSAibG9ja2VkIiAoZnJvbQorICogICAgTmV0Z3JhcGggcG9pbnQgb2Ygdmll dykuIEFueSB2YXJpYWJsZSB0aGF0IGlzIG9ubHkgbW9kaWZpZWQgZnJvbSB0aGUKKyAqICAgIE5l dGdyYXBoIGNvbnRleHQgZG9lcyBub3QgcmVxdWlyZSBhbnkgYWRkaXRvbmFsIGxvY2tpbmcuIEl0 IGlzIGdlbmVyYWxseQorICogICAgKk5PVCogYWxsb3dlZCB0byBncmFiICpBTlkqIGFkZGl0aW9u YWwgbG9jay4gV2hhdGV2ZXIgeW91IGRvLCAqRE8gTk9UKgorICogICAgbm90IGdyYWIgYW55IGxv bmctc2xlZXAgbG9jayBpbiB0aGUgTmV0Z3JhcGggY29udGV4dC4gSW4gZmFjdCwgdGhlIG9ubHkK KyAqICAgIGxvY2sgdGhhdCBpcyBhbGxvd2VkIGluIHRoZSBOZXRncmFwaCBjb250ZXh0IGlzIHRo ZSBzY19tYnVmcV9tdHggbG9jay4KKyAqCisgKiAzKSBUYXNrcXVldWUgY29udGV4dC4gVGhpcyBp cyB3aGVyZSB1YnRfdGFzayBydW5zLiBTaW5jZSB3ZSBhcmUgTk9UIGFsbG93ZWQKKyAqICAgIHRv IGdyYWIgYW55IGxvY2tzIGluIHRoZSBOZXRncmFwaCBjb250ZXh0LCBhbmQsIFVTQjIgcmVxdWly ZXMgdXMgdG8KKyAqICAgIGdyYWIgaW50ZXJmYWNlIGxvY2sgYmVmb3JlIGRvaW5nIHRoaW5ncyB3 aXRoIHRyYW5zZmVycywgd2UgbmVlZCB0bworICogICAgdHJhbnNpdGlvbiBmcm9tIHRoZSBOZXRn cmFwaCBjb250ZXh0IHRvIHRoZSBUYXNrcXVldWUgY29udGV4dCBiZWZvcmUKKyAqICAgIHdlIGNh biBjYWxsIGludG8gVVNCMiBzdWJzeXN0ZW0uCisgKgorICogU28sIHRvIHB1dCBldmVyeXRoaW5n IHRvZ2V0aGVyLCB0aGUgcnVsZXMgYXJlIGFzIGZvbGxvd3MuCisgKglJdCBpcyBPSyB0byBjYWxs IGZyb20gdGhlIFVTQiBjb250ZXh0IG9yIHRoZSBUYXNrcXVldWUgY29udGV4dCBpbnRvCisgKiB0 aGUgTmV0Z3JhcGggY29udGV4dCAoaS5lLiBjYWxsIE5HX1NFTkRfeHh4IGZ1bmN0aW9ucykuIElu IG90aGVyIHdvcmRzCisgKiBpdCBpcyBhbGxvd2VkIHRvIGNhbGwgaW50byB0aGUgTmV0Z3JhcGgg Y29udGV4dCB3aXRoIGxvY2tzIGhlbGQuCisgKglJcyBpdCAqTk9UKiBPSyB0byBjYWxsIGZyb20g dGhlIE5ldGdyYXBoIGNvbnRleHQgaW50byB0aGUgVVNCIGNvbnRleHQsCisgKiBiZWNhdXNlIFVT QjIgcmVxdWlyZXMgdXMgdG8gZ3JhYiBpbnRlcmZhY2UgbG9ja3MgYW5kIHdlIGNhbiBub3QgZG8g dGhhdC4KKyAqIFRvIGF2b2lkIHRoaXMsIHdlIHNldCB0YXNrIGZsYWdzIHRvIGluZGljYXRlIHdo aWNoIGFjdGlvbnMgd2Ugd2FudCB0bworICogcGVyZm9ybSBhbmQgc2NoZWR1bGUgdWJ0X3Rhc2sg d2hpY2ggd291bGQgcnVuIGluIHRoZSBUYXNrcXVldWUgY29udGV4dC4KKyAqCUlzIGlzIE9LIHRv IGNhbGwgZnJvbSB0aGUgVGFza3F1ZXVlIGNvbnRleHQgaW50byB0aGUgVVNCIGNvbnRleHQsCisg KiBhbmQsIHVidF90YXNrIGRvZXMganVzdCB0aGF0IChpLmUuIGdyYWJzIGFwcHJvcHJpYXRlIGlu dGVyZmFjZSBsb2NrcworICogYmVmb3JlIGNhbGxpbmcgaW50byBVU0IyKS4KKyAqCUFjY2VzcyB0 byB0aGUgb3V0Z29pbmcgcXVldWVzIGFuZCB0YXNrIGZsYWdzIGlzIGNvbnRyb2xsZWQgYnkgdGhl CisgKiBzY19tYnVmcV9tdHggbG9jay4gSXQgaXMgYW4gdW5hdm9pZGFibGUgZXZpbC4gQWdhaW4s IHNjX21idWZxX210eCBzaG91bGQKKyAqIHJlYWxseSBiZSBhIHNwaW4gbG9jay4KKyAqCUFsbCBV U0IgY2FsbGJhY2tzIGFjY2VwdCBOZXRncmFwaCBub2RlIHBvaW50ZXIgYXMgcHJpdmF0ZSBkYXRh LiBUbworICogZW5zdXJlIHRoYXQgTmV0Z3JhcGggbm9kZSBwb2ludGVyIHJlbWFpbnMgdmFsaWQg Zm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUKKyAqIHRyYW5zZmVyLCB3ZSBncmFiIGEgcmVmZXJyZW5j ZSB0byB0aGUgbm9kZS4gSW4gb3RoZXIgd29yZHMsIGlmIHRyYW5zZmVyIGlzCisgKiBwZW5kaW5n LCB0aGVuIHdlIHNob3VsZCBoYXZlIGEgcmVmZXJyZW5jZSBvbiB0aGUgbm9kZS4gTkdfTk9ERV9b Tk9UX11WQUxJRAorICogbWFjcm8gaXMgdXNlZCB0byBjaGVjayBpZiBub2RlIGlzIHN0aWxsIHBy ZXNlbnQgYW5kIHBvaW50ZXIgaXMgdmFsaWQuCisgKi8KKwogI2luY2x1ZGUgPGRldi91c2IyL2lu Y2x1ZGUvdXNiMl9kZXZpZC5oPgogI2luY2x1ZGUgPGRldi91c2IyL2luY2x1ZGUvdXNiMl9zdGFu ZGFyZC5oPgogI2luY2x1ZGUgPGRldi91c2IyL2luY2x1ZGUvdXNiMl9tZnVuYy5oPgpAQCAtNDQs OCArMTA3LDExIEBACiAjaW5jbHVkZSA8ZGV2L3VzYjIvY29yZS91c2IyX2xvb2t1cC5oPgogI2lu Y2x1ZGUgPGRldi91c2IyL2NvcmUvdXNiMl91dGlsLmg+CiAjaW5jbHVkZSA8ZGV2L3VzYjIvY29y ZS91c2IyX2J1c2RtYS5oPgorI2luY2x1ZGUgPGRldi91c2IyL2NvcmUvdXNiMl9wcm9jZXNzLmg+ CisjaW5jbHVkZSA8ZGV2L3VzYjIvY29yZS91c2IyX3RyYW5zZmVyLmg+CiAKICNpbmNsdWRlIDxz eXMvbWJ1Zi5oPgorI2luY2x1ZGUgPHN5cy90YXNrcXVldWUuaD4KIAogI2luY2x1ZGUgPG5ldGdy YXBoL25nX21lc3NhZ2UuaD4KICNpbmNsdWRlIDxuZXRncmFwaC9uZXRncmFwaC5oPgpAQCAtNTcs NzEgKzEyMyw1NyBAQAogI2luY2x1ZGUgPGRldi91c2IyL2JsdWV0b290aC91c2IyX2JsdWV0b290 aC5oPgogI2luY2x1ZGUgPGRldi91c2IyL2JsdWV0b290aC9uZ191YnQyX3Zhci5oPgogCi0vKgot ICogVVNCIG1ldGhvZHMKLSAqLworc3RhdGljIGludAkJdWJ0X21vZGV2ZW50KG1vZHVsZV90LCBp bnQsIHZvaWQgKik7CitzdGF0aWMgZGV2aWNlX3Byb2JlX3QJdWJ0X3Byb2JlOworc3RhdGljIGRl dmljZV9hdHRhY2hfdAl1YnRfYXR0YWNoOworc3RhdGljIGRldmljZV9kZXRhY2hfdAl1YnRfZGV0 YWNoOwogCi1zdGF0aWMgZGV2aWNlX3Byb2JlX3QgdWJ0X3Byb2JlOwotc3RhdGljIGRldmljZV9h dHRhY2hfdCB1YnRfYXR0YWNoOwotc3RhdGljIGRldmljZV9kZXRhY2hfdCB1YnRfZGV0YWNoOwor c3RhdGljIGludAkJdWJ0X3Rhc2tfc2NoZWR1bGUodWJ0X3NvZnRjX3AsIGludCk7CitzdGF0aWMg dGFza19mbl90CXVidF90YXNrOworc3RhdGljIHZvaWQJCXVidF94ZmVyX3N0YXJ0KHVidF9zb2Z0 Y19wLCBpbnQpOwogCi1zdGF0aWMgZGV2Y2xhc3NfdCB1YnRfZGV2Y2xhc3M7CisvKiBOZXRncmFw aCBtZXRob2RzICovCitzdGF0aWMgbmdfY29uc3RydWN0b3JfdAluZ191YnRfY29uc3RydWN0b3I7 CitzdGF0aWMgbmdfc2h1dGRvd25fdAluZ191YnRfc2h1dGRvd247CitzdGF0aWMgbmdfbmV3aG9v a190CW5nX3VidF9uZXdob29rOworc3RhdGljIG5nX2Nvbm5lY3RfdAluZ191YnRfY29ubmVjdDsK K3N0YXRpYyBuZ19kaXNjb25uZWN0X3QJbmdfdWJ0X2Rpc2Nvbm5lY3Q7CitzdGF0aWMgbmdfcmN2 bXNnX3QJbmdfdWJ0X3Jjdm1zZzsKK3N0YXRpYyBuZ19yY3ZkYXRhX3QJbmdfdWJ0X3JjdmRhdGE7 CiAKLXN0YXRpYyBkZXZpY2VfbWV0aG9kX3QgdWJ0X21ldGhvZHNbXSA9IHsKLQlERVZNRVRIT0Qo ZGV2aWNlX3Byb2JlLCB1YnRfcHJvYmUpLAotCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCB1YnRf YXR0YWNoKSwKLQlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgdWJ0X2RldGFjaCksCi0JezAsIDB9 Ci19OwotCi1zdGF0aWMgZHJpdmVyX3QgdWJ0X2RyaXZlciA9IHsKLQkubmFtZSA9ICJ1YnQiLAot CS5tZXRob2RzID0gdWJ0X21ldGhvZHMsCi0JLnNpemUgPSBzaXplb2Yoc3RydWN0IHVidF9zb2Z0 YyksCi19OwotCi0vKgotICogTmV0Z3JhcGggbWV0aG9kcwotICovCi0KLXN0YXRpYyBuZ19jb25z dHJ1Y3Rvcl90IG5nX3VidF9jb25zdHJ1Y3RvcjsKLXN0YXRpYyBuZ19zaHV0ZG93bl90IG5nX3Vi dF9zaHV0ZG93bjsKLXN0YXRpYyBuZ19uZXdob29rX3QgbmdfdWJ0X25ld2hvb2s7Ci1zdGF0aWMg bmdfY29ubmVjdF90IG5nX3VidF9jb25uZWN0Owotc3RhdGljIG5nX2Rpc2Nvbm5lY3RfdCBuZ191 YnRfZGlzY29ubmVjdDsKLXN0YXRpYyBuZ19yY3Ztc2dfdCBuZ191YnRfcmN2bXNnOwotc3RhdGlj IG5nX3JjdmRhdGFfdCBuZ191YnRfcmN2ZGF0YTsKLQogLyogUXVldWUgbGVuZ3RoICovCi1zdGF0 aWMgY29uc3Qgc3RydWN0IG5nX3BhcnNlX3N0cnVjdF9maWVsZCBuZ191YnRfbm9kZV9xbGVuX3R5 cGVfZmllbGRzW10gPQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZ19wYXJzZV9zdHJ1Y3RfZmllbGQJ bmdfdWJ0X25vZGVfcWxlbl90eXBlX2ZpZWxkc1tdID0KIHsKLQl7InF1ZXVlIiwgJm5nX3BhcnNl X2ludDMyX3R5cGUsfSwKLQl7InFsZW4iLCAmbmdfcGFyc2VfaW50MzJfdHlwZSx9LAotCXtOVUxM LH0KKwl7ICJxdWV1ZSIsICZuZ19wYXJzZV9pbnQzMl90eXBlLCB9LAorCXsgInFsZW4iLCAgJm5n X3BhcnNlX2ludDMyX3R5cGUsIH0sCisJeyBOVUxMLCB9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVj dCBuZ19wYXJzZV90eXBlIG5nX3VidF9ub2RlX3FsZW5fdHlwZSA9IHsKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgbmdfcGFyc2VfdHlwZQkJbmdfdWJ0X25vZGVfcWxlbl90eXBlID0KK3sKIAkmbmdfcGFy c2Vfc3RydWN0X3R5cGUsCiAJJm5nX3VidF9ub2RlX3FsZW5fdHlwZV9maWVsZHMKIH07CiAKIC8q IFN0YXQgaW5mbyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBuZ19wYXJzZV9zdHJ1Y3RfZmllbGQg bmdfdWJ0X25vZGVfc3RhdF90eXBlX2ZpZWxkc1tdID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgbmdf cGFyc2Vfc3RydWN0X2ZpZWxkCW5nX3VidF9ub2RlX3N0YXRfdHlwZV9maWVsZHNbXSA9CiB7Ci0J eyJwY2t0c19yZWN2IiwgJm5nX3BhcnNlX3VpbnQzMl90eXBlLH0sCi0JeyJieXRlc19yZWN2Iiwg Jm5nX3BhcnNlX3VpbnQzMl90eXBlLH0sCi0JeyJwY2t0c19zZW50IiwgJm5nX3BhcnNlX3VpbnQz Ml90eXBlLH0sCi0JeyJieXRlc19zZW50IiwgJm5nX3BhcnNlX3VpbnQzMl90eXBlLH0sCi0JeyJv ZXJyb3JzIiwgJm5nX3BhcnNlX3VpbnQzMl90eXBlLH0sCi0JeyJpZXJyb3JzIiwgJm5nX3BhcnNl X3VpbnQzMl90eXBlLH0sCi0Je05VTEwsfQorCXsgInBja3RzX3JlY3YiLCAmbmdfcGFyc2VfdWlu dDMyX3R5cGUsIH0sCisJeyAiYnl0ZXNfcmVjdiIsICZuZ19wYXJzZV91aW50MzJfdHlwZSwgfSwK Kwl7ICJwY2t0c19zZW50IiwgJm5nX3BhcnNlX3VpbnQzMl90eXBlLCB9LAorCXsgImJ5dGVzX3Nl bnQiLCAmbmdfcGFyc2VfdWludDMyX3R5cGUsIH0sCisJeyAib2Vycm9ycyIsICAgICZuZ19wYXJz ZV91aW50MzJfdHlwZSwgfSwKKwl7ICJpZXJyb3JzIiwgICAgJm5nX3BhcnNlX3VpbnQzMl90eXBl LCB9LAorCXsgTlVMTCwgfQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmdfcGFyc2VfdHlwZSBu Z191YnRfbm9kZV9zdGF0X3R5cGUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5nX3BhcnNlX3R5 cGUJCW5nX3VidF9ub2RlX3N0YXRfdHlwZSA9Cit7CiAJJm5nX3BhcnNlX3N0cnVjdF90eXBlLAog CSZuZ191YnRfbm9kZV9zdGF0X3R5cGVfZmllbGRzCiB9OwogCiAvKiBOZXRncmFwaCBub2RlIGNv bW1hbmQgbGlzdCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBuZ19jbWRsaXN0IG5nX3VidF9jbWRs aXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5nX2NtZGxpc3QJCQluZ191YnRfY21kbGlz dFtdID0KK3sKIAl7CiAJCU5HTV9VQlRfQ09PS0lFLAogCQlOR01fVUJUX05PREVfU0VUX0RFQlVH LApAQCAtMTY0LDMxNiArMjE2LDI2NyBAQAogCQlOVUxMLAogCQlOVUxMCiAJfSwKLQl7MCx9CisJ eyAwLCB9CiB9OwogCiAvKiBOZXRncmFwaCBub2RlIHR5cGUgKi8KLXN0YXRpYyBzdHJ1Y3Qgbmdf dHlwZSB0eXBlc3RydWN0ID0gewotCS52ZXJzaW9uID0gTkdfQUJJX1ZFUlNJT04sCi0JLm5hbWUg PSBOR19VQlRfTk9ERV9UWVBFLAotCS5jb25zdHJ1Y3RvciA9IG5nX3VidF9jb25zdHJ1Y3RvciwK LQkucmN2bXNnID0gbmdfdWJ0X3Jjdm1zZywKLQkuc2h1dGRvd24gPSBuZ191YnRfc2h1dGRvd24s Ci0JLm5ld2hvb2sgPSBuZ191YnRfbmV3aG9vaywKLQkuY29ubmVjdCA9IG5nX3VidF9jb25uZWN0 LAotCS5yY3ZkYXRhID0gbmdfdWJ0X3JjdmRhdGEsCi0JLmRpc2Nvbm5lY3QgPSBuZ191YnRfZGlz Y29ubmVjdCwKLQkuY21kbGlzdCA9IG5nX3VidF9jbWRsaXN0CitzdGF0aWMgc3RydWN0IG5nX3R5 cGUJdHlwZXN0cnVjdCA9Cit7CisJLnZlcnNpb24gPSAJTkdfQUJJX1ZFUlNJT04sCisJLm5hbWUg PQkJTkdfVUJUX05PREVfVFlQRSwKKwkuY29uc3RydWN0b3IgPQluZ191YnRfY29uc3RydWN0b3Is CisJLnJjdm1zZyA9CW5nX3VidF9yY3Ztc2csCisJLnNodXRkb3duID0JbmdfdWJ0X3NodXRkb3du LAorCS5uZXdob29rID0JbmdfdWJ0X25ld2hvb2ssCisJLmNvbm5lY3QgPQluZ191YnRfY29ubmVj dCwKKwkucmN2ZGF0YSA9CW5nX3VidF9yY3ZkYXRhLAorCS5kaXNjb25uZWN0ID0JbmdfdWJ0X2Rp c2Nvbm5lY3QsCisJLmNtZGxpc3QgPQluZ191YnRfY21kbGlzdAogfTsKIAorLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBVU0Igc3BlY2lmaWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKwogLyogVVNCIG1ldGhvZHMgKi8KK3N0YXRpYyB1c2IyX2NhbGxiYWNrX3QJdWJ0 X2N0cmxfd3JpdGVfY2FsbGJhY2s7CitzdGF0aWMgdXNiMl9jYWxsYmFja190CXVidF9pbnRyX3Jl YWRfY2FsbGJhY2s7CitzdGF0aWMgdXNiMl9jYWxsYmFja190CXVidF9pbnRyX3JlYWRfY2xlYXJf c3RhbGxfY2FsbGJhY2s7CitzdGF0aWMgdXNiMl9jYWxsYmFja190CXVidF9idWxrX3JlYWRfY2Fs bGJhY2s7CitzdGF0aWMgdXNiMl9jYWxsYmFja190CXVidF9idWxrX3JlYWRfY2xlYXJfc3RhbGxf Y2FsbGJhY2s7CitzdGF0aWMgdXNiMl9jYWxsYmFja190CXVidF9idWxrX3dyaXRlX2NhbGxiYWNr Oworc3RhdGljIHVzYjJfY2FsbGJhY2tfdAl1YnRfYnVsa193cml0ZV9jbGVhcl9zdGFsbF9jYWxs YmFjazsKK3N0YXRpYyB1c2IyX2NhbGxiYWNrX3QJdWJ0X2lzb2NfcmVhZF9jYWxsYmFjazsKK3N0 YXRpYyB1c2IyX2NhbGxiYWNrX3QJdWJ0X2lzb2Nfd3JpdGVfY2FsbGJhY2s7CiAKLXN0YXRpYyB1 c2IyX2NhbGxiYWNrX3QgdWJ0X2N0cmxfd3JpdGVfY2FsbGJhY2s7Ci1zdGF0aWMgdXNiMl9jYWxs YmFja190IHVidF9pbnRyX3JlYWRfY2FsbGJhY2s7Ci1zdGF0aWMgdXNiMl9jYWxsYmFja190IHVi dF9pbnRyX3JlYWRfY2xlYXJfc3RhbGxfY2FsbGJhY2s7Ci1zdGF0aWMgdXNiMl9jYWxsYmFja190 IHVidF9idWxrX3JlYWRfY2FsbGJhY2s7Ci1zdGF0aWMgdXNiMl9jYWxsYmFja190IHVidF9idWxr X3JlYWRfY2xlYXJfc3RhbGxfY2FsbGJhY2s7Ci1zdGF0aWMgdXNiMl9jYWxsYmFja190IHVidF9i dWxrX3dyaXRlX2NhbGxiYWNrOwotc3RhdGljIHVzYjJfY2FsbGJhY2tfdCB1YnRfYnVsa193cml0 ZV9jbGVhcl9zdGFsbF9jYWxsYmFjazsKLXN0YXRpYyB1c2IyX2NhbGxiYWNrX3QgdWJ0X2lzb2Nf cmVhZF9jYWxsYmFjazsKLXN0YXRpYyB1c2IyX2NhbGxiYWNrX3QgdWJ0X2lzb2Nfd3JpdGVfY2Fs bGJhY2s7CitzdGF0aWMgaW50CXVidF9pc29jX3JlYWRfb25lX2ZyYW1lKHN0cnVjdCB1c2IyX3hm ZXIgKiwgaW50KTsKIAotc3RhdGljIGludAl1YnRfbW9kZXZlbnQobW9kdWxlX3QsIGludCwgdm9p ZCAqKTsKLXN0YXRpYyB2b2lkCXVidF9pbnRyX3JlYWRfY29tcGxldGUobm9kZV9wLCBob29rX3As IHZvaWQgKiwgaW50KTsKLXN0YXRpYyB2b2lkCXVidF9idWxrX3JlYWRfY29tcGxldGUobm9kZV9w LCBob29rX3AsIHZvaWQgKiwgaW50KTsKLXN0YXRpYyB2b2lkCXVidF9pc29jX3JlYWRfY29tcGxl dGUobm9kZV9wLCBob29rX3AsIHZvaWQgKiwgaW50KTsKKy8qCisgKiBVU0IgY29uZmlnCisgKiAK KyAqIFRoZSBmb2xsb3dpbmcgZGVzcmliZXMgdXNiIHRyYW5zZmVycyB0aGF0IGNvdWxkIGJlIHN1 Ym1pdHRlZCBvbiBVU0IgZGV2aWNlLgorICoKKyAqIEludGVyZmFjZSAwIG9uIHRoZSBVU0IgZGV2 aWNlIG11c3QgcHJlc2VudCB0aGUgZm9sbG93aW5nIGVuZHBvaW50cworICoJMSkgSW50ZXJydXB0 IGVuZHBvaW50IHRvIHJlY2VpdmUgSENJIGV2ZW50cworICoJMikgQnVsayBJTiBlbmRwb2ludCB0 byByZWNlaXZlIEFDTCBkYXRhCisgKgkzKSBCdWxrIE9VVCBlbmRwb2ludCB0byBzZW5kIEFDTCBk YXRhCisgKgorICogSW50ZXJmYWNlIDEgb24gdGhlIFVTQiBkZXZpY2UgbXVzdCBwcmVzZW50IHRo ZSBmb2xsb3dpbmcgZW5kcG9pbnRzCisgKgkxKSBJc29jaHJvbm91cyBJTiBlbmRwb2ludCB0byBy ZWNlaXZlIFNDTyBkYXRhCisgKgkyKSBJc29jaHJvbm91cyBPVVQgZW5kcG9pbnQgdG8gc2VuZCBT Q08gZGF0YQorICovCiAKLS8qIFVTQiBjb25maWcgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNi Ml9jb25maWcgdWJ0X2NvbmZpZ19pZl8wW1VCVF9JRl8wX05fVFJBTlNGRVJdID0geworc3RhdGlj IGNvbnN0IHN0cnVjdCB1c2IyX2NvbmZpZwkJdWJ0X2NvbmZpZ1tVQlRfTl9UUkFOU0ZFUl0gPQor eworCS8qCisJICogSW50ZXJmYWNlICMwCisgCSAqLwogCi0JWzBdID0gewotCQkudHlwZSA9IFVF X0JVTEssCi0JCS5lbmRwb2ludCA9IFVFX0FERFJfQU5ZLAotCQkuZGlyZWN0aW9uID0gVUVfRElS X09VVCwKLQkJLm1oLmJ1ZnNpemUgPSBVQlRfQlVMS19XUklURV9CVUZGRVJfU0laRSwKLQkJLm1o LmZsYWdzID0gey5waXBlX2JvZiA9IDEsfSwKLQkJLm1oLmNhbGxiYWNrID0gJnVidF9idWxrX3dy aXRlX2NhbGxiYWNrLAorCS8qIE91dGdvaW5nIGJ1bGsgdHJhbnNmZXIgLSBBQ0wgcGFja2V0cyAq LworCVtVQlRfSUZfMF9CVUxLX0RUX1dSXSA9IHsKKwkJLnR5cGUgPQkJVUVfQlVMSywKKwkJLmVu ZHBvaW50ID0JVUVfQUREUl9BTlksCisJCS5kaXJlY3Rpb24gPQlVRV9ESVJfT1VULAorCQkubWgu YnVmc2l6ZSA9CVVCVF9CVUxLX1dSSVRFX0JVRkZFUl9TSVpFLAorCQkubWguZmxhZ3MgPQl7IC5w aXBlX2JvZiA9IDEsIH0sCisJCS5taC5jYWxsYmFjayA9CSZ1YnRfYnVsa193cml0ZV9jYWxsYmFj aywKIAl9LAotCi0JWzFdID0gewotCQkudHlwZSA9IFVFX0JVTEssCi0JCS5lbmRwb2ludCA9IFVF X0FERFJfQU5ZLAotCQkuZGlyZWN0aW9uID0gVUVfRElSX0lOLAotCQkubWguYnVmc2l6ZSA9IFVC VF9CVUxLX1JFQURfQlVGRkVSX1NJWkUsCi0JCS5taC5mbGFncyA9IHsucGlwZV9ib2YgPSAxLC5z aG9ydF94ZmVyX29rID0gMSx9LAotCQkubWguY2FsbGJhY2sgPSAmdWJ0X2J1bGtfcmVhZF9jYWxs YmFjaywKKwkvKiBJbmNvbWluZyBidWxrIHRyYW5zZmVyIC0gQUNMIHBhY2tldHMgKi8KKwlbVUJU X0lGXzBfQlVMS19EVF9SRF0gPSB7CisJCS50eXBlID0JCVVFX0JVTEssCisJCS5lbmRwb2ludCA9 CVVFX0FERFJfQU5ZLAorCQkuZGlyZWN0aW9uID0JVUVfRElSX0lOLAorCQkubWguYnVmc2l6ZSA9 CVVCVF9CVUxLX1JFQURfQlVGRkVSX1NJWkUsCisJCS5taC5mbGFncyA9CXsgLnBpcGVfYm9mID0g MSwgLnNob3J0X3hmZXJfb2sgPSAxLCB9LAorCQkubWguY2FsbGJhY2sgPQkmdWJ0X2J1bGtfcmVh ZF9jYWxsYmFjaywKIAl9LAotCi0JWzJdID0gewotCQkudHlwZSA9IFVFX0lOVEVSUlVQVCwKLQkJ LmVuZHBvaW50ID0gVUVfQUREUl9BTlksCi0JCS5kaXJlY3Rpb24gPSBVRV9ESVJfSU4sCi0JCS5t aC5mbGFncyA9IHsucGlwZV9ib2YgPSAxLC5zaG9ydF94ZmVyX29rID0gMSx9LAotCQkubWguYnVm c2l6ZSA9IDB4MTEwLAkvKiBieXRlcyAqLwotCQkubWguY2FsbGJhY2sgPSAmdWJ0X2ludHJfcmVh ZF9jYWxsYmFjaywKKwkvKiBJbmNvbWluZyBpbnRlcnJ1cHQgdHJhbnNmZXIgLSBIQ0kgZXZlbnRz ICovCisJW1VCVF9JRl8wX0lOVFJfRFRfUkRdID0geworCQkudHlwZSA9CQlVRV9JTlRFUlJVUFQs CisJCS5lbmRwb2ludCA9CVVFX0FERFJfQU5ZLAorCQkuZGlyZWN0aW9uID0JVUVfRElSX0lOLAor CQkubWguZmxhZ3MgPQl7IC5waXBlX2JvZiA9IDEsIC5zaG9ydF94ZmVyX29rID0gMSwgfSwKKwkJ Lm1oLmJ1ZnNpemUgPQlVQlRfSU5UUl9CVUZGRVJfU0laRSwKKwkJLm1oLmNhbGxiYWNrID0JJnVi dF9pbnRyX3JlYWRfY2FsbGJhY2ssCiAJfSwKLQotCVszXSA9IHsKLQkJLnR5cGUgPSBVRV9DT05U Uk9MLAotCQkuZW5kcG9pbnQgPSAweDAwLAkvKiBDb250cm9sIHBpcGUgKi8KLQkJLmRpcmVjdGlv biA9IFVFX0RJUl9BTlksCi0JCS5taC5idWZzaXplID0gKHNpemVvZihzdHJ1Y3QgdXNiMl9kZXZp Y2VfcmVxdWVzdCkgKyBVQlRfQ1RSTF9CVUZGRVJfU0laRSksCi0JCS5taC5jYWxsYmFjayA9ICZ1 YnRfY3RybF93cml0ZV9jYWxsYmFjaywKLQkJLm1oLnRpbWVvdXQgPSA1MDAwLAkvKiA1IHNlY29u ZHMgKi8KKwkvKiBPdXRnb2luZyBjb250cm9sIHRyYW5zZmVyIC0gSENJIGNvbW1hbmRzICovCisJ W1VCVF9JRl8wX0NUUkxfRFRfV1JdID0geworCQkudHlwZSA9CQlVRV9DT05UUk9MLAorCQkuZW5k cG9pbnQgPQkweDAwLAkvKiBjb250cm9sIHBpcGUgKi8KKwkJLmRpcmVjdGlvbiA9CVVFX0RJUl9B TlksCisJCS5taC5idWZzaXplID0JVUJUX0NUUkxfQlVGRkVSX1NJWkUsCisJCS5taC5jYWxsYmFj ayA9CSZ1YnRfY3RybF93cml0ZV9jYWxsYmFjaywKKwkJLm1oLnRpbWVvdXQgPQk1MDAwLAkvKiA1 IHNlY29uZHMgKi8KIAl9LAotCi0JWzRdID0gewotCQkudHlwZSA9IFVFX0NPTlRST0wsCi0JCS5l bmRwb2ludCA9IDB4MDAsCS8qIENvbnRyb2wgcGlwZSAqLwotCQkuZGlyZWN0aW9uID0gVUVfRElS X0FOWSwKLQkJLm1oLmJ1ZnNpemUgPSBzaXplb2Yoc3RydWN0IHVzYjJfZGV2aWNlX3JlcXVlc3Qp LAotCQkubWguY2FsbGJhY2sgPSAmdWJ0X2J1bGtfd3JpdGVfY2xlYXJfc3RhbGxfY2FsbGJhY2ss Ci0JCS5taC50aW1lb3V0ID0gMTAwMCwJLyogMSBzZWNvbmQgKi8KLQkJLm1oLmludGVydmFsID0g NTAsCS8qIDUwbXMgKi8KKwkvKiBPdXRnb2luZyBjb250cm9sIHRyYW5zZmVyIHRvIGNsZWFyIHN0 YWxsIG9uIG91dGdvaW5nIGJ1bGsgdHJhbnNmZXIgKi8KKwlbVUJUX0lGXzBfQlVMS19DU19XUl0g PSB7CisJCS50eXBlID0JCVVFX0NPTlRST0wsCisJCS5lbmRwb2ludCA9CTB4MDAsCS8qIGNvbnRy b2wgcGlwZSAqLworCQkuZGlyZWN0aW9uID0JVUVfRElSX0FOWSwKKwkJLm1oLmJ1ZnNpemUgPQlz aXplb2Yoc3RydWN0IHVzYjJfZGV2aWNlX3JlcXVlc3QpLAorCQkubWguY2FsbGJhY2sgPQkmdWJ0 X2J1bGtfd3JpdGVfY2xlYXJfc3RhbGxfY2FsbGJhY2ssCisJCS5taC50aW1lb3V0ID0JMTAwMCwJ LyogMSBzZWNvbmQgKi8KKwkJLm1oLmludGVydmFsID0JNTAsCS8qIDUwbXMgKi8KIAl9LAotCi0J WzVdID0gewotCQkudHlwZSA9IFVFX0NPTlRST0wsCi0JCS5lbmRwb2ludCA9IDB4MDAsCS8qIENv bnRyb2wgcGlwZSAqLwotCQkuZGlyZWN0aW9uID0gVUVfRElSX0FOWSwKLQkJLm1oLmJ1ZnNpemUg PSBzaXplb2Yoc3RydWN0IHVzYjJfZGV2aWNlX3JlcXVlc3QpLAotCQkubWguY2FsbGJhY2sgPSAm dWJ0X2J1bGtfcmVhZF9jbGVhcl9zdGFsbF9jYWxsYmFjaywKLQkJLm1oLnRpbWVvdXQgPSAxMDAw LAkvKiAxIHNlY29uZCAqLwotCQkubWguaW50ZXJ2YWwgPSA1MCwJLyogNTBtcyAqLworCS8qIE91 dGdvaW5nIGNvbnRyb2wgdHJhbnNmZXIgdG8gY2xlYXIgc3RhbGwgb24gaW5jb21pbmcgYnVsayB0 cmFuc2ZlciAqLworCVtVQlRfSUZfMF9CVUxLX0NTX1JEXSA9IHsKKwkJLnR5cGUgPQkJVUVfQ09O VFJPTCwKKwkJLmVuZHBvaW50ID0JMHgwMCwJLyogY29udHJvbCBwaXBlICovCisJCS5kaXJlY3Rp b24gPQlVRV9ESVJfQU5ZLAorCQkubWguYnVmc2l6ZSA9CXNpemVvZihzdHJ1Y3QgdXNiMl9kZXZp Y2VfcmVxdWVzdCksCisJCS5taC5jYWxsYmFjayA9CSZ1YnRfYnVsa19yZWFkX2NsZWFyX3N0YWxs X2NhbGxiYWNrLAorCQkubWgudGltZW91dCA9CTEwMDAsCS8qIDEgc2Vjb25kICovCisJCS5taC5p bnRlcnZhbCA9CTUwLAkvKiA1MG1zICovCiAJfSwKLQotCVs2XSA9IHsKLQkJLnR5cGUgPSBVRV9D T05UUk9MLAotCQkuZW5kcG9pbnQgPSAweDAwLAkvKiBDb250cm9sIHBpcGUgKi8KLQkJLmRpcmVj dGlvbiA9IFVFX0RJUl9BTlksCi0JCS5taC5idWZzaXplID0gc2l6ZW9mKHN0cnVjdCB1c2IyX2Rl dmljZV9yZXF1ZXN0KSwKLQkJLm1oLmNhbGxiYWNrID0gJnVidF9pbnRyX3JlYWRfY2xlYXJfc3Rh bGxfY2FsbGJhY2ssCi0JCS5taC50aW1lb3V0ID0gMTAwMCwJLyogMSBzZWNvbmQgKi8KLQkJLm1o LmludGVydmFsID0gNTAsCS8qIDUwbXMgKi8KKwkvKgorCSAqIE91dGdvaW5nIGNvbnRyb2wgdHJh bnNmZXIgdG8gY2xlYXIgc3RhbGwgb24gaW5jb21pbmcKKwkgKiBpbnRlcnJ1cHQgdHJhbnNmZXIK KwkgKi8KKwlbVUJUX0lGXzBfSU5UUl9DU19SRF0gPSB7CisJCS50eXBlID0JCVVFX0NPTlRST0ws CisJCS5lbmRwb2ludCA9CTB4MDAsCS8qIGNvbnRyb2wgcGlwZSAqLworCQkuZGlyZWN0aW9uID0J VUVfRElSX0FOWSwKKwkJLm1oLmJ1ZnNpemUgPQlzaXplb2Yoc3RydWN0IHVzYjJfZGV2aWNlX3Jl cXVlc3QpLAorCQkubWguY2FsbGJhY2sgPQkmdWJ0X2ludHJfcmVhZF9jbGVhcl9zdGFsbF9jYWxs YmFjaywKKwkJLm1oLnRpbWVvdXQgPQkxMDAwLAkvKiAxIHNlY29uZCAqLworCQkubWguaW50ZXJ2 YWwgPQk1MCwJLyogNTBtcyAqLwogCX0sCi19OwogCi0vKiBVU0IgY29uZmlnICovCi1zdGF0aWMg Y29uc3Qgc3RydWN0IHVzYjJfY29uZmlnCi0JdWJ0X2NvbmZpZ19pZl8xX2Z1bGxfc3BlZWRbVUJU X0lGXzFfTl9UUkFOU0ZFUl0gPSB7CisJLyoKKwkgKiBJbnRlcmZhY2UgIzEKKyAJICovCiAKLQlb MF0gPSB7Ci0JCS50eXBlID0gVUVfSVNPQ0hST05PVVMsCi0JCS5lbmRwb2ludCA9IFVFX0FERFJf QU5ZLAotCQkuZGlyZWN0aW9uID0gVUVfRElSX0lOLAotCQkubWguYnVmc2l6ZSA9IDAsCS8qIHVz ZSAid01heFBhY2tldFNpemUgKiBmcmFtZXMiICovCi0JCS5taC5mcmFtZXMgPSBVQlRfSVNPQ19O RlJBTUVTLAotCQkubWguZmxhZ3MgPSB7LnNob3J0X3hmZXJfb2sgPSAxLH0sCi0JCS5taC5jYWxs YmFjayA9ICZ1YnRfaXNvY19yZWFkX2NhbGxiYWNrLAorCS8qIEluY29taW5nIGlzb2Nocm9ub3Vz IHRyYW5zZmVyICMxIC0gU0NPIHBhY2tldHMgKi8KKwlbVUJUX0lGXzFfSVNPQ19EVF9SRDFdID0g eworCQkudHlwZSA9CQlVRV9JU09DSFJPTk9VUywKKwkJLmVuZHBvaW50ID0JVUVfQUREUl9BTlks CisJCS5kaXJlY3Rpb24gPQlVRV9ESVJfSU4sCisJCS5taC5idWZzaXplID0JMCwJLyogdXNlICJ3 TWF4UGFja2V0U2l6ZSAqIGZyYW1lcyIgKi8KKwkJLm1oLmZyYW1lcyA9CVVCVF9JU09DX05GUkFN RVMsCisJCS5taC5mbGFncyA9CXsgLnNob3J0X3hmZXJfb2sgPSAxLCB9LAorCQkubWguY2FsbGJh Y2sgPQkmdWJ0X2lzb2NfcmVhZF9jYWxsYmFjaywKIAl9LAotCi0JWzFdID0gewotCQkudHlwZSA9 IFVFX0lTT0NIUk9OT1VTLAotCQkuZW5kcG9pbnQgPSBVRV9BRERSX0FOWSwKLQkJLmRpcmVjdGlv biA9IFVFX0RJUl9JTiwKLQkJLm1oLmJ1ZnNpemUgPSAwLAkvKiB1c2UgIndNYXhQYWNrZXRTaXpl ICogZnJhbWVzIiAqLwotCQkubWguZnJhbWVzID0gVUJUX0lTT0NfTkZSQU1FUywKLQkJLm1oLmZs YWdzID0gey5zaG9ydF94ZmVyX29rID0gMSx9LAotCQkubWguY2FsbGJhY2sgPSAmdWJ0X2lzb2Nf cmVhZF9jYWxsYmFjaywKKwkvKiBJbmNvbWluZyBpc29jaHJvbm91cyB0cmFuc2ZlciAjMiAtIFND TyBwYWNrZXRzICovCisJW1VCVF9JRl8xX0lTT0NfRFRfUkQyXSA9IHsKKwkJLnR5cGUgPQkJVUVf SVNPQ0hST05PVVMsCisJCS5lbmRwb2ludCA9CVVFX0FERFJfQU5ZLAorCQkuZGlyZWN0aW9uID0J VUVfRElSX0lOLAorCQkubWguYnVmc2l6ZSA9CTAsCS8qIHVzZSAid01heFBhY2tldFNpemUgKiBm cmFtZXMiICovCisJCS5taC5mcmFtZXMgPQlVQlRfSVNPQ19ORlJBTUVTLAorCQkubWguZmxhZ3Mg PQl7IC5zaG9ydF94ZmVyX29rID0gMSwgfSwKKwkJLm1oLmNhbGxiYWNrID0JJnVidF9pc29jX3Jl YWRfY2FsbGJhY2ssCiAJfSwKLQotCVsyXSA9IHsKLQkJLnR5cGUgPSBVRV9JU09DSFJPTk9VUywK LQkJLmVuZHBvaW50ID0gVUVfQUREUl9BTlksCi0JCS5kaXJlY3Rpb24gPSBVRV9ESVJfT1VULAot CQkubWguYnVmc2l6ZSA9IDAsCS8qIHVzZSAid01heFBhY2tldFNpemUgKiBmcmFtZXMiICovCi0J CS5taC5mcmFtZXMgPSBVQlRfSVNPQ19ORlJBTUVTLAotCQkubWguZmxhZ3MgPSB7LnNob3J0X3hm ZXJfb2sgPSAxLH0sCi0JCS5taC5jYWxsYmFjayA9ICZ1YnRfaXNvY193cml0ZV9jYWxsYmFjaywK KwkvKiBPdXRnb2luZyBpc29jaHJvbm91cyB0cmFuc2ZlciAjMSAtIFNDTyBwYWNrZXRzICovCisJ W1VCVF9JRl8xX0lTT0NfRFRfV1IxXSA9IHsKKwkJLnR5cGUgPQkJVUVfSVNPQ0hST05PVVMsCisJ CS5lbmRwb2ludCA9CVVFX0FERFJfQU5ZLAorCQkuZGlyZWN0aW9uID0JVUVfRElSX09VVCwKKwkJ Lm1oLmJ1ZnNpemUgPQkwLAkvKiB1c2UgIndNYXhQYWNrZXRTaXplICogZnJhbWVzIiAqLworCQku bWguZnJhbWVzID0JVUJUX0lTT0NfTkZSQU1FUywKKwkJLm1oLmZsYWdzID0JeyAuc2hvcnRfeGZl cl9vayA9IDEsIH0sCisJCS5taC5jYWxsYmFjayA9CSZ1YnRfaXNvY193cml0ZV9jYWxsYmFjaywK IAl9LAotCi0JWzNdID0gewotCQkudHlwZSA9IFVFX0lTT0NIUk9OT1VTLAotCQkuZW5kcG9pbnQg PSBVRV9BRERSX0FOWSwKLQkJLmRpcmVjdGlvbiA9IFVFX0RJUl9PVVQsCi0JCS5taC5idWZzaXpl ID0gMCwJLyogdXNlICJ3TWF4UGFja2V0U2l6ZSAqIGZyYW1lcyIgKi8KLQkJLm1oLmZyYW1lcyA9 IFVCVF9JU09DX05GUkFNRVMsCi0JCS5taC5mbGFncyA9IHsuc2hvcnRfeGZlcl9vayA9IDEsfSwK LQkJLm1oLmNhbGxiYWNrID0gJnVidF9pc29jX3dyaXRlX2NhbGxiYWNrLAorCS8qIE91dGdvaW5n IGlzb2Nocm9ub3VzIHRyYW5zZmVyICMyIC0gU0NPIHBhY2tldHMgKi8KKwlbVUJUX0lGXzFfSVNP Q19EVF9XUjJdID0geworCQkudHlwZSA9CQlVRV9JU09DSFJPTk9VUywKKwkJLmVuZHBvaW50ID0J VUVfQUREUl9BTlksCisJCS5kaXJlY3Rpb24gPQlVRV9ESVJfT1VULAorCQkubWguYnVmc2l6ZSA9 CTAsCS8qIHVzZSAid01heFBhY2tldFNpemUgKiBmcmFtZXMiICovCisJCS5taC5mcmFtZXMgPQlV QlRfSVNPQ19ORlJBTUVTLAorCQkubWguZmxhZ3MgPQl7IC5zaG9ydF94ZmVyX29rID0gMSwgfSwK KwkJLm1oLmNhbGxiYWNrID0JJnVidF9pc29jX3dyaXRlX2NhbGxiYWNrLAogCX0sCiB9OwogCi0v KiBVU0IgY29uZmlnICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYjJfY29uZmlnCi0JdWJ0X2Nv bmZpZ19pZl8xX2hpZ2hfc3BlZWRbVUJUX0lGXzFfTl9UUkFOU0ZFUl0gPSB7Ci0KLQlbMF0gPSB7 Ci0JCS50eXBlID0gVUVfSVNPQ0hST05PVVMsCi0JCS5lbmRwb2ludCA9IFVFX0FERFJfQU5ZLAot CQkuZGlyZWN0aW9uID0gVUVfRElSX0lOLAotCQkubWguYnVmc2l6ZSA9IDAsCS8qIHVzZSAid01h eFBhY2tldFNpemUgKiBmcmFtZXMiICovCi0JCS5taC5mcmFtZXMgPSBVQlRfSVNPQ19ORlJBTUVT ICogOCwKLQkJLm1oLmZsYWdzID0gey5zaG9ydF94ZmVyX29rID0gMSx9LAotCQkubWguY2FsbGJh Y2sgPSAmdWJ0X2lzb2NfcmVhZF9jYWxsYmFjaywKLQl9LAotCi0JWzFdID0gewotCQkudHlwZSA9 IFVFX0lTT0NIUk9OT1VTLAotCQkuZW5kcG9pbnQgPSBVRV9BRERSX0FOWSwKLQkJLmRpcmVjdGlv biA9IFVFX0RJUl9JTiwKLQkJLm1oLmJ1ZnNpemUgPSAwLAkvKiB1c2UgIndNYXhQYWNrZXRTaXpl ICogZnJhbWVzIiAqLwotCQkubWguZnJhbWVzID0gVUJUX0lTT0NfTkZSQU1FUyAqIDgsCi0JCS5t aC5mbGFncyA9IHsuc2hvcnRfeGZlcl9vayA9IDEsfSwKLQkJLm1oLmNhbGxiYWNrID0gJnVidF9p c29jX3JlYWRfY2FsbGJhY2ssCi0JfSwKLQotCVsyXSA9IHsKLQkJLnR5cGUgPSBVRV9JU09DSFJP Tk9VUywKLQkJLmVuZHBvaW50ID0gVUVfQUREUl9BTlksCi0JCS5kaXJlY3Rpb24gPSBVRV9ESVJf T1VULAotCQkubWguYnVmc2l6ZSA9IDAsCS8qIHVzZSAid01heFBhY2tldFNpemUgKiBmcmFtZXMi ICovCi0JCS5taC5mcmFtZXMgPSBVQlRfSVNPQ19ORlJBTUVTICogOCwKLQkJLm1oLmZsYWdzID0g ey5zaG9ydF94ZmVyX29rID0gMSx9LAotCQkubWguY2FsbGJhY2sgPSAmdWJ0X2lzb2Nfd3JpdGVf Y2FsbGJhY2ssCi0JfSwKLQotCVszXSA9IHsKLQkJLnR5cGUgPSBVRV9JU09DSFJPTk9VUywKLQkJ LmVuZHBvaW50ID0gVUVfQUREUl9BTlksCi0JCS5kaXJlY3Rpb24gPSBVRV9ESVJfT1VULAotCQku bWguYnVmc2l6ZSA9IDAsCS8qIHVzZSAid01heFBhY2tldFNpemUgKiBmcmFtZXMiICovCi0JCS5t aC5mcmFtZXMgPSBVQlRfSVNPQ19ORlJBTUVTICogOCwKLQkJLm1oLmZsYWdzID0gey5zaG9ydF94 ZmVyX29rID0gMSx9LAotCQkubWguY2FsbGJhY2sgPSAmdWJ0X2lzb2Nfd3JpdGVfY2FsbGJhY2ss Ci0JfSwKLX07Ci0KIC8qCi0gKiBNb2R1bGUKLSAqLwotCi1EUklWRVJfTU9EVUxFKG5nX3VidCwg dXNodWIsIHVidF9kcml2ZXIsIHVidF9kZXZjbGFzcywgdWJ0X21vZGV2ZW50LCAwKTsKLU1PRFVM RV9WRVJTSU9OKG5nX3VidCwgTkdfQkxVRVRPT1RIX1ZFUlNJT04pOwotTU9EVUxFX0RFUEVORChu Z191YnQsIG5ldGdyYXBoLCBOR19BQklfVkVSU0lPTiwgTkdfQUJJX1ZFUlNJT04sIE5HX0FCSV9W RVJTSU9OKTsKLU1PRFVMRV9ERVBFTkQobmdfdWJ0LCBuZ19oY2ksIE5HX0JMVUVUT09USF9WRVJT SU9OLCBOR19CTFVFVE9PVEhfVkVSU0lPTiwgTkdfQkxVRVRPT1RIX1ZFUlNJT04pOwotTU9EVUxF X0RFUEVORChuZ191YnQsIHVzYjJfYmx1ZXRvb3RoLCAxLCAxLCAxKTsKLU1PRFVMRV9ERVBFTkQo bmdfdWJ0LCB1c2IyX2NvcmUsIDEsIDEsIDEpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKLSAqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQiBz cGVjaWZpYwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0v KgotICogTG9hZC9VbmxvYWQgdGhlIGRyaXZlciBtb2R1bGUKLSAqLwotCi1zdGF0aWMgaW50Ci11 YnRfbW9kZXZlbnQobW9kdWxlX3QgbW9kLCBpbnQgZXZlbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50 IGVycm9yOwotCi0Jc3dpdGNoIChldmVudCkgewotCWNhc2UgTU9EX0xPQUQ6Ci0JCWVycm9yID0g bmdfbmV3dHlwZSgmdHlwZXN0cnVjdCk7Ci0JCWlmIChlcnJvciAhPSAwKSB7Ci0JCQlwcmludGYo IiVzOiBDb3VsZCBub3QgcmVnaXN0ZXIgIgotCQkJICAgICJOZXRncmFwaCBub2RlIHR5cGUsIGVy cm9yPSVkXG4iLAotCQkJICAgIE5HX1VCVF9OT0RFX1RZUEUsIGVycm9yKTsKLQkJfQotCQlicmVh azsKLQotCWNhc2UgTU9EX1VOTE9BRDoKLQkJZXJyb3IgPSBuZ19ybXR5cGUoJnR5cGVzdHJ1Y3Qp OwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWVycm9yID0gRU9QTk9UU1VQUDsKLQkJYnJlYWs7 Ci0JfQotCXJldHVybiAoZXJyb3IpOwotfQkJCQkJLyogdWJ0X21vZGV2ZW50ICovCi0KLS8qCiAg KiBJZiBmb3Igc29tZSByZWFzb24gZGV2aWNlIHNob3VsZCBub3QgYmUgYXR0YWNoZWQgdGhlbiBw dXQKICAqIFZlbmRvcklEL1Byb2R1Y3RJRCBwYWlyIGludG8gdGhlIGxpc3QgYmVsb3cuIFRoZSBm b3JtYXQgaXMKICAqIGFzIGZvbGxvd3M6CiAgKgotICoJeyBWRU5ET1JfSUQsIFBST0RVQ1RfSUQg fSwKKyAqCXsgVVNCX1ZQSShWRU5ET1JfSUQsIFBST0RVQ1RfSUQsIDApIH0sCiAgKgogICogd2hl cmUgVkVORE9SX0lEIGFuZCBQUk9EVUNUX0lEIGFyZSBoZXggbnVtYmVycy4KICAqLwogc3RhdGlj IGNvbnN0IHN0cnVjdCB1c2IyX2RldmljZV9pZCB1YnRfaWdub3JlX2RldnNbXSA9IHsKIAkvKiBB Vk0gVVNCIEJsdWV0b290aC1BZGFwdGVyIEJsdWVGcml0eiEgdjEuMCAqLwotCXtVU0JfVlBJKFVT Ql9WRU5ET1JfQVZNLCAweDIyMDAsIDApfSwKKwl7IFVTQl9WUEkoVVNCX1ZFTkRPUl9BVk0sIDB4 MjIwMCwgMCkgfSwKIH07CiAKIC8qIExpc3Qgb2Ygc3VwcG9ydGVkIGJsdWV0b290aCBkZXZpY2Vz ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYjJfZGV2aWNlX2lkIHVidF9kZXZzW10gPSB7Ci0J LyogR2VuZXJpYyBCbHVldG9vdGggY2xhc3MgZGV2aWNlcy4gKi8KLQl7VVNCX0lGQUNFX0NMQVNT KFVEQ0xBU1NfV0lSRUxFU1MpLAotCQlVU0JfSUZBQ0VfU1VCQ0xBU1MoVURTVUJDTEFTU19SRiks Ci0JVVNCX0lGQUNFX1BST1RPQ09MKFVEUFJPVE9fQkxVRVRPT1RIKX0sCisJLyogR2VuZXJpYyBC bHVldG9vdGggY2xhc3MgZGV2aWNlcyAqLworCXsgVVNCX0lGQUNFX0NMQVNTKFVEQ0xBU1NfV0lS RUxFU1MpLAorCSAgVVNCX0lGQUNFX1NVQkNMQVNTKFVEU1VCQ0xBU1NfUkYpLAorCSAgVVNCX0lG QUNFX1BST1RPQ09MKFVEUFJPVE9fQkxVRVRPT1RIKSB9LAogCiAJLyogQVZNIFVTQiBCbHVldG9v dGgtQWRhcHRlciBCbHVlRnJpdHohIHYyLjAgKi8KLQl7VVNCX1ZQSShVU0JfVkVORE9SX0FWTSwg MHgzODAwLCAwKX0sCisJeyBVU0JfVlBJKFVTQl9WRU5ET1JfQVZNLCAweDM4MDAsIDApIH0sCiB9 OwogCiAvKgotICogUHJvYmUgZm9yIGEgVVNCIEJsdWV0b290aCBkZXZpY2UKKyAqIFByb2JlIGZv ciBhIFVTQiBCbHVldG9vdGggZGV2aWNlLgorICogVVNCIGNvbnRleHQuCiAgKi8KIAogc3RhdGlj IGludAogdWJ0X3Byb2JlKGRldmljZV90IGRldikKIHsKLQlzdHJ1Y3QgdXNiMl9hdHRhY2hfYXJn ICp1YWEgPSBkZXZpY2VfZ2V0X2l2YXJzKGRldik7CisJc3RydWN0IHVzYjJfYXR0YWNoX2FyZwkq dWFhID0gZGV2aWNlX2dldF9pdmFycyhkZXYpOwogCi0JaWYgKHVhYS0+dXNiMl9tb2RlICE9IFVT Ql9NT0RFX0hPU1QpIHsKKwlpZiAodWFhLT51c2IyX21vZGUgIT0gVVNCX01PREVfSE9TVCkKIAkJ cmV0dXJuIChFTlhJTyk7Ci0JfQotCWlmICh1YWEtPmluZm8uYklmYWNlSW5kZXggIT0gMCkgewor CisJaWYgKHVhYS0+aW5mby5iSWZhY2VJbmRleCAhPSAwKQogCQlyZXR1cm4gKEVOWElPKTsKLQl9 CisKIAlpZiAodXNiMl9sb29rdXBfaWRfYnlfdWFhKHVidF9pZ25vcmVfZGV2cywKLQkgICAgc2l6 ZW9mKHVidF9pZ25vcmVfZGV2cyksIHVhYSkgPT0gMCkgeworCQkJc2l6ZW9mKHVidF9pZ25vcmVf ZGV2cyksIHVhYSkgPT0gMCkKIAkJcmV0dXJuIChFTlhJTyk7Ci0JfQorCiAJcmV0dXJuICh1c2Iy X2xvb2t1cF9pZF9ieV91YWEodWJ0X2RldnMsIHNpemVvZih1YnRfZGV2cyksIHVhYSkpOwotfQor fSAvKiB1YnRfcHJvYmUgKi8KIAogLyoKLSAqIEF0dGFjaCB0aGUgZGV2aWNlCisgKiBBdHRhY2gg dGhlIGRldmljZS4KKyAqIFVTQiBjb250ZXh0LgogICovCiAKIHN0YXRpYyBpbnQKIHVidF9hdHRh Y2goZGV2aWNlX3QgZGV2KQogewotCXN0cnVjdCB1c2IyX2F0dGFjaF9hcmcgKnVhYSA9IGRldmlj ZV9nZXRfaXZhcnMoZGV2KTsKLQlzdHJ1Y3QgdWJ0X3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29m dGMoZGV2KTsKLQljb25zdCBzdHJ1Y3QgdXNiMl9jb25maWcgKmlzb2Nfc2V0dXA7Ci0Jc3RydWN0 IHVzYjJfZW5kcG9pbnRfZGVzY3JpcHRvciAqZWQ7Ci0JdWludDE2X3Qgd01heFBhY2tldFNpemU7 Ci0JdWludDhfdCBhbHRfaW5kZXg7Ci0JdWludDhfdCBpZmFjZV9pbmRleDsKLQl1aW50OF90IGk7 Ci0JdWludDhfdCBqOworCXN0cnVjdCB1c2IyX2F0dGFjaF9hcmcJCSp1YWEgPSBkZXZpY2VfZ2V0 X2l2YXJzKGRldik7CisJc3RydWN0IHVidF9zb2Z0YwkJKnNjID0gZGV2aWNlX2dldF9zb2Z0Yyhk ZXYpOworCXN0cnVjdCB1c2IyX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmVkOworCXVpbnQxNl90CQkJ d01heFBhY2tldFNpemU7CisJdWludDhfdAkJCQlhbHRfaW5kZXgsIGlmYWNlX2luZGV4LCBpLCBq OwogCiAJZGV2aWNlX3NldF91c2IyX2Rlc2MoZGV2KTsKIAogCXNucHJpbnRmKHNjLT5zY19uYW1l LCBzaXplb2Yoc2MtPnNjX25hbWUpLAotCSAgICAiJXMiLCBkZXZpY2VfZ2V0X25hbWV1bml0KGRl dikpOworCQkiJXMiLCBkZXZpY2VfZ2V0X25hbWV1bml0KGRldikpOwogCisJLyogCisJICogQ3Jl YXRlIE5ldGdyYXBoIG5vZGUKKwkgKi8KKworCXNjLT5zY19ob29rID0gTlVMTDsKKworCWlmIChu Z19tYWtlX25vZGVfY29tbW9uKCZ0eXBlc3RydWN0LCAmc2MtPnNjX25vZGUpICE9IDApIHsKKwkJ ZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBub3QgY3JlYXRlIE5ldGdyYXBoIG5vZGVcbiIpOwor CQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwkvKiBOYW1lIE5ldGdyYXBoIG5vZGUgKi8KKwlpZiAo bmdfbmFtZV9ub2RlKHNjLT5zY19ub2RlLCBzYy0+c2NfbmFtZSkgIT0gMCkgeworCQlkZXZpY2Vf cHJpbnRmKGRldiwgImNvdWxkIG5vdCBuYW1lIE5ldGdyYXBoIG5vZGVcbiIpOworCQlOR19OT0RF X1VOUkVGKHNjLT5zY19ub2RlKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCU5HX05PREVfU0VU X1BSSVZBVEUoc2MtPnNjX25vZGUsIHNjKTsKKwlOR19OT0RFX0ZPUkNFX1dSSVRFUihzYy0+c2Nf bm9kZSk7CisKIAkvKgogCSAqIEluaXRpYWxpemUgZGV2aWNlIHNvZnRjIHN0cnVjdHVyZQogCSAq LwpAQCAtNDgxLDM0ICs0ODQsMjggQEAKIAkvKiBzdGF0ZSAqLwogCXNjLT5zY19kZWJ1ZyA9IE5H X1VCVF9XQVJOX0xFVkVMOwogCXNjLT5zY19mbGFncyA9IDA7Ci0JTkdfVUJUX1NUQVRfUkVTRVQo c2MtPnNjX3N0YXQpOworCVVCVF9TVEFUX1JFU0VUKHNjKTsKIAotCS8qIGNvbnRyb2wgcGlwZSAq LworCS8qIGluaXRpYWxpemUgbG9ja3MgKi8KKwltdHhfaW5pdCgmc2MtPnNjX21idWZxX210eCwg InVidCBtYnVmcSIsIE5VTEwsIE1UWF9ERUYpOworCW10eF9pbml0KCZzYy0+c2NfaWZfbXR4WzBd LCAidWJ0IGlmMCIsIE5VTEwsIE1UWF9ERUYgfCBNVFhfUkVDVVJTRSk7CisJbXR4X2luaXQoJnNj LT5zY19pZl9tdHhbMV0sICJ1YnQgaWYxIiwgTlVMTCwgTVRYX0RFRiB8IE1UWF9SRUNVUlNFKTsK KworCS8qIGluaXRpYWxpemUgcGFja2V0IHF1ZXVlcyAqLwogCU5HX0JUX01CVUZRX0lOSVQoJnNj LT5zY19jbWRxLCBVQlRfREVGQVVMVF9RTEVOKTsKLQotCS8qIGJ1bGstb3V0IHBpcGUgKi8KIAlO R19CVF9NQlVGUV9JTklUKCZzYy0+c2NfYWNscSwgVUJUX0RFRkFVTFRfUUxFTik7CisJTkdfQlRf TUJVRlFfSU5JVCgmc2MtPnNjX3Njb3EsIFVCVF9ERUZBVUxUX1FMRU4pOwogCi0JLyogaXNvYy1v dXQgcGlwZSAqLwotCU5HX0JUX01CVUZRX0lOSVQoJnNjLT5zY19zY29xLAotCSAgICAodXNiMl9n ZXRfc3BlZWQodWFhLT5kZXZpY2UpID09IFVTQl9TUEVFRF9ISUdIKSA/Ci0JICAgICgyICogVUJU X0lTT0NfTkZSQU1FUyAqIDgpIDoKLQkgICAgKDIgKiBVQlRfSVNPQ19ORlJBTUVTKSk7CisJLyog aW5pdGlhbGl6ZSBnbHVlIHRhc2sgKi8KKwlzYy0+c2NfdGFza19mbGFncyA9IDA7CisJVEFTS19J TklUKCZzYy0+c2NfdGFzaywgMCwgdWJ0X3Rhc2ssIHNjLT5zY19ub2RlKTsKIAotCS8qIGlzb2Mt aW4gcGlwZSAqLwotCU5HX0JUX01CVUZRX0lOSVQoJnNjLT5zY19zY2lxLAotCSAgICAodXNiMl9n ZXRfc3BlZWQodWFhLT5kZXZpY2UpID09IFVTQl9TUEVFRF9ISUdIKSA/Ci0JICAgICgyICogVUJU X0lTT0NfTkZSQU1FUyAqIDgpIDoKLQkgICAgKDIgKiBVQlRfSVNPQ19ORlJBTUVTKSk7Ci0KLQkv KiBuZXRncmFwaCBwYXJ0ICovCi0Jc2MtPnNjX25vZGUgPSBOVUxMOwotCXNjLT5zY19ob29rID0g TlVMTDsKLQogCS8qCiAJICogQ29uZmlndXJlIEJsdWV0b290aCBVU0IgZGV2aWNlLiBEaXNjb3Zl ciBhbGwgcmVxdWlyZWQgVVNCCiAJICogaW50ZXJmYWNlcyBhbmQgZW5kcG9pbnRzLgogCSAqCisJ ICogRGV2aWNlIGlzIGV4cGVjdGVkIHRvIGJlIGEgaGlnaC1zcGVlZCBkZXZpY2UuCisJICoKIAkg KiBVU0IgZGV2aWNlIG11c3QgcHJlc2VudCB0d28gaW50ZXJmYWNlczoKIAkgKiAxKSBJbnRlcmZh Y2UgMCB0aGF0IGhhcyAzIGVuZHBvaW50cwogCSAqCTEpIEludGVycnVwdCBlbmRwb2ludCB0byBy ZWNlaXZlIEhDSSBldmVudHMKQEAgLTUyMywxMDAzICs1MjAsMTEzNCBAQAogCSAqIGNvbmZpZ3Vy YXRpb25zIHdpdGggZGlmZmVyZW50IHBhY2tldCBzaXplLgogCSAqLwogCisJYnplcm8oJnNjLT5z Y194ZmVyLCBzaXplb2Yoc2MtPnNjX3hmZXIpKTsKKwogCS8qCiAJICogSW50ZXJmYWNlIDAKIAkg Ki8KIAotCW10eF9pbml0KCZzYy0+c2NfbXR4LCAidWJ0IGxvY2siLCBOVUxMLCBNVFhfREVGIHwg TVRYX1JFQ1VSU0UpOwotCiAJaWZhY2VfaW5kZXggPSAwOwotCWlmICh1c2IyX3RyYW5zZmVyX3Nl dHVwCi0JICAgICh1YWEtPmRldmljZSwgJmlmYWNlX2luZGV4LCBzYy0+c2NfeGZlcl9pZl8wLCB1 YnRfY29uZmlnX2lmXzAsCi0JICAgIFVCVF9JRl8wX05fVFJBTlNGRVIsIHNjLCAmc2MtPnNjX210 eCkpIHsKLQkJZGV2aWNlX3ByaW50ZihkZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgdHJhbnNmZXJz ICIKLQkJICAgICJmb3IgaW50ZXJmYWNlIDAhXG4iKTsKKwlpZiAodXNiMl90cmFuc2Zlcl9zZXR1 cCh1YWEtPmRldmljZSwgJmlmYWNlX2luZGV4LCBzYy0+c2NfeGZlciwKKwkJCXVidF9jb25maWcs IFVCVF9JRl8wX05fVFJBTlNGRVIsCisJCQlzYy0+c2Nfbm9kZSwgJnNjLT5zY19pZl9tdHhbMF0p KSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHRyYW5zZmVycyBm b3IgIiBcCisJCQkiaW50ZXJmYWNlIDAhXG4iKTsKIAkJZ290byBkZXRhY2g7CiAJfQorCiAJLyoK IAkgKiBJbnRlcmZhY2UgMQotCSAqIChzZWFyY2ggYWx0ZXJuYXRlIHNldHRpbmdzLCBhbmQgZmlu ZAotCSAqICB0aGUgZGVzY3JpcHRvciB3aXRoIHRoZSBsYXJnZXN0CisJICogKHNlYXJjaCBhbHRl cm5hdGUgc2V0dGluZ3MsIGFuZCBmaW5kIHRoZSBkZXNjcmlwdG9yIHdpdGggdGhlIGxhcmdlc3QK IAkgKiAgd01heFBhY2tldFNpemUpCiAJICovCi0JaXNvY19zZXR1cCA9Ci0JICAgICgodXNiMl9n ZXRfc3BlZWQodWFhLT5kZXZpY2UpID09IFVTQl9TUEVFRF9ISUdIKSA/Ci0JICAgIHVidF9jb25m aWdfaWZfMV9oaWdoX3NwZWVkIDoKLQkgICAgdWJ0X2NvbmZpZ19pZl8xX2Z1bGxfc3BlZWQpOwog CiAJd01heFBhY2tldFNpemUgPSAwOwotCi0JLyogc2VhcmNoIHRocm91Z2ggYWxsIHRoZSBkZXNj cmlwdG9ycyBsb29raW5nIGZvciBiaWRpciBtb2RlICovCi0KLQlhbHRfaW5kZXggPSAwIC0gMTsK KwlhbHRfaW5kZXggPSAwOwogCWkgPSAwOwogCWogPSAwOworCisJLyogU2VhcmNoIHRocm91Z2gg YWxsIHRoZSBkZXNjcmlwdG9ycyBsb29raW5nIGZvciBiaWRpciBtb2RlICovCiAJd2hpbGUgKDEp IHsKIAkJdWludDE2X3QgdGVtcDsKIAotCQllZCA9IHVzYjJfZmluZF9lZGVzYygKLQkJICAgIHVz YjJfZ2V0X2NvbmZpZ19kZXNjcmlwdG9yKHVhYS0+ZGV2aWNlKSwgMSwgaSwgaik7CisJCWVkID0g dXNiMl9maW5kX2VkZXNjKHVzYjJfZ2V0X2NvbmZpZ19kZXNjcmlwdG9yKHVhYS0+ZGV2aWNlKSwK KwkJCQkxLCBpLCBqKTsKIAkJaWYgKGVkID09IE5VTEwpIHsKLQkJCWlmIChqID09IDApIHsKLQkJ CQkvKiBlbmQgb2YgaW50ZXJmYWNlcyAqLwotCQkJCWJyZWFrOwotCQkJfSBlbHNlIHsKKwkJCWlm IChqICE9IDApIHsKIAkJCQkvKiBuZXh0IGludGVyZmFjZSAqLwogCQkJCWogPSAwOwotCQkJCWkr KzsKKwkJCQlpICsrOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCisJCQlicmVhazsJLyogZW5kIG9m IGludGVyZmFjZXMgKi8KIAkJfQorCiAJCXRlbXAgPSBVR0VUVyhlZC0+d01heFBhY2tldFNpemUp OwogCQlpZiAodGVtcCA+IHdNYXhQYWNrZXRTaXplKSB7CiAJCQl3TWF4UGFja2V0U2l6ZSA9IHRl bXA7CiAJCQlhbHRfaW5kZXggPSBpOwogCQl9Ci0JCWorKzsKLQl9CiAKLQlpZiAodXNiMl9zZXRf YWx0X2ludGVyZmFjZV9pbmRleCh1YWEtPmRldmljZSwgMSwgYWx0X2luZGV4KSkgewotCQlkZXZp Y2VfcHJpbnRmKGRldiwgIkNvdWxkIG5vdCBzZXQgYWx0ZXJuYXRlICIKLQkJICAgICJzZXR0aW5n ICVkIGZvciBpbnRlcmZhY2UgMSFcbiIsIGFsdF9pbmRleCk7Ci0JCWdvdG8gZGV0YWNoOworCQlq ICsrOwogCX0KLQlpZmFjZV9pbmRleCA9IDE7Ci0JaWYgKHVzYjJfdHJhbnNmZXJfc2V0dXAKLQkg ICAgKHVhYS0+ZGV2aWNlLCAmaWZhY2VfaW5kZXgsIHNjLT5zY194ZmVyX2lmXzEsCi0JICAgIGlz b2Nfc2V0dXAsIFVCVF9JRl8xX05fVFJBTlNGRVIsIHNjLCAmc2MtPnNjX210eCkpIHsKLQkJZGV2 aWNlX3ByaW50ZihkZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgdHJhbnNmZXJzICIKLQkJICAgICJm b3IgaW50ZXJmYWNlIDEhXG4iKTsKLQkJZ290byBkZXRhY2g7Ci0JfQotCS8qIGNyZWF0ZSBOZXRn cmFwaCBub2RlICovCiAKLQlpZiAobmdfbWFrZV9ub2RlX2NvbW1vbigmdHlwZXN0cnVjdCwgJnNj LT5zY19ub2RlKSAhPSAwKSB7Ci0JCXByaW50ZigiJXM6IENvdWxkIG5vdCBjcmVhdGUgTmV0Z3Jh cGggbm9kZVxuIiwKLQkJICAgIHNjLT5zY19uYW1lKTsKLQkJc2MtPnNjX25vZGUgPSBOVUxMOwor CS8qIFNldCBhbHQgY29uZmlndXJhdGlvbiBvbmx5IGlmIHdlIGZvdW5kIGl0ICovCisJaWYgKHdN YXhQYWNrZXRTaXplID4gMCAmJgorCSAgICB1c2IyX3NldF9hbHRfaW50ZXJmYWNlX2luZGV4KHVh YS0+ZGV2aWNlLCAxLCBhbHRfaW5kZXgpKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQg bm90IHNldCBhbHRlcm5hdGUgc2V0dGluZyAlZCAiIFwKKwkJCSJmb3IgaW50ZXJmYWNlIDEhXG4i LCBhbHRfaW5kZXgpOwogCQlnb3RvIGRldGFjaDsKIAl9Ci0JLyogbmFtZSBub2RlICovCiAKLQlp ZiAobmdfbmFtZV9ub2RlKHNjLT5zY19ub2RlLCBzYy0+c2NfbmFtZSkgIT0gMCkgewotCQlwcmlu dGYoIiVzOiBDb3VsZCBub3QgbmFtZSBOZXRncmFwaCBub2RlXG4iLAotCQkgICAgc2MtPnNjX25h bWUpOwotCQlOR19OT0RFX1VOUkVGKHNjLT5zY19ub2RlKTsKLQkJc2MtPnNjX25vZGUgPSBOVUxM OworCWlmYWNlX2luZGV4ID0gMTsKKwlpZiAodXNiMl90cmFuc2Zlcl9zZXR1cCh1YWEtPmRldmlj ZSwgJmlmYWNlX2luZGV4LAorCQkJJnNjLT5zY194ZmVyW1VCVF9JRl8wX05fVFJBTlNGRVJdLAor CQkJJnVidF9jb25maWdbVUJUX0lGXzBfTl9UUkFOU0ZFUl0sIFVCVF9JRl8xX05fVFJBTlNGRVIs CisJCQlzYy0+c2Nfbm9kZSwgJnNjLT5zY19pZl9tdHhbMV0pKSB7CisJCWRldmljZV9wcmludGYo ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHRyYW5zZmVycyBmb3IgIiBcCisJCQkiaW50ZXJmYWNl IDEhXG4iKTsKIAkJZ290byBkZXRhY2g7CiAJfQotCU5HX05PREVfU0VUX1BSSVZBVEUoc2MtPnNj X25vZGUsIHNjKTsKLQlOR19OT0RFX0ZPUkNFX1dSSVRFUihzYy0+c2Nfbm9kZSk7CiAKLQkvKiBj bGFpbSBhbGwgaW50ZXJmYWNlcyBvbiB0aGUgZGV2aWNlICovCi0KLQlmb3IgKGkgPSAxOzsgaSsr KSB7Ci0KLQkJaWYgKHVzYjJfZ2V0X2lmYWNlKHVhYS0+ZGV2aWNlLCBpKSA9PSBOVUxMKSB7Ci0J CQlicmVhazsKLQkJfQorCS8qIENsYWltIGFsbCBpbnRlcmZhY2VzIG9uIHRoZSBkZXZpY2UgKi8K Kwlmb3IgKGkgPSAxOyB1c2IyX2dldF9pZmFjZSh1YWEtPmRldmljZSwgaSkgIT0gTlVMTDsgaSAr KykKIAkJdXNiMl9zZXRfcGFyZW50X2lmYWNlKHVhYS0+ZGV2aWNlLCBpLCB1YWEtPmluZm8uYklm YWNlSW5kZXgpOwotCX0KIAotCXJldHVybiAoMCk7CQkJLyogc3VjY2VzcyAqLworCXJldHVybiAo MCk7IC8qIHN1Y2Nlc3MgKi8KIAogZGV0YWNoOgogCXVidF9kZXRhY2goZGV2KTsKIAogCXJldHVy biAoRU5YSU8pOwotfQorfSAvKiB1YnRfYXR0YWNoICovCiAKIC8qCi0gKiBEZXRhY2ggdGhlIGRl dmljZQorICogRGV0YWNoIHRoZSBkZXZpY2UuCisgKiBVU0IgY29udGV4dC4KICAqLwogCiBpbnQK IHVidF9kZXRhY2goZGV2aWNlX3QgZGV2KQogewotCXN0cnVjdCB1YnRfc29mdGMgKnNjID0gZGV2 aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCB1YnRfc29mdGMJKnNjID0gZGV2aWNlX2dldF9z b2Z0YyhkZXYpOworCW5vZGVfcAkJCW5vZGUgPSBzYy0+c2Nfbm9kZTsKIAotCS8qIGRlc3Ryb3kg TmV0Z3JhcGggbm9kZSAqLworCS8qIERlc3Ryb3kgTmV0Z3JhcGggbm9kZSAqLworCWlmIChub2Rl ICE9IE5VTEwpIHsKKwkJc2MtPnNjX25vZGUgPSBOVUxMOwogCi0JaWYgKHNjLT5zY19ub2RlICE9 IE5VTEwpIHsKLQkJTkdfTk9ERV9TRVRfUFJJVkFURShzYy0+c2Nfbm9kZSwgTlVMTCk7Ci0JCW5n X3Jtbm9kZV9zZWxmKHNjLT5zY19ub2RlKTsKLQkJc2MtPnNjX25vZGUgPSBOVUxMOworCQlOR19O T0RFX1NFVF9QUklWQVRFKG5vZGUsIE5VTEwpOworCQlOR19OT0RFX1JFQUxMWV9ESUUobm9kZSk7 CisJCU5HX05PREVfUkVGKG5vZGUpOworCQluZ19ybW5vZGVfc2VsZihub2RlKTsKIAl9Ci0JLyog ZnJlZSBVU0IgdHJhbnNmZXJzLCBpZiBhbnkgKi8KIAotCXVzYjJfdHJhbnNmZXJfdW5zZXR1cChz Yy0+c2NfeGZlcl9pZl8wLCBVQlRfSUZfMF9OX1RSQU5TRkVSKTsKKwkvKiBGcmVlIFVTQiB0cmFu c2ZlcnMsIGlmIGFueSAqLworCXVzYjJfdHJhbnNmZXJfdW5zZXR1cChzYy0+c2NfeGZlciwgVUJU X05fVFJBTlNGRVIpOwogCi0JdXNiMl90cmFuc2Zlcl91bnNldHVwKHNjLT5zY194ZmVyX2lmXzEs IFVCVF9JRl8xX05fVFJBTlNGRVIpOworCWlmIChub2RlICE9IE5VTEwpCisJCU5HX05PREVfVU5S RUYobm9kZSk7CiAKLQltdHhfZGVzdHJveSgmc2MtPnNjX210eCk7Ci0KLQkvKiBkZXN0cm95IHF1 ZXVlcyAqLwotCisJLyogRGVzdHJveSBxdWV1ZXMgKi8KKwlVQlRfTUJVRlFfTE9DSyhzYyk7CiAJ TkdfQlRfTUJVRlFfREVTVFJPWSgmc2MtPnNjX2NtZHEpOwogCU5HX0JUX01CVUZRX0RFU1RST1ko JnNjLT5zY19hY2xxKTsKIAlOR19CVF9NQlVGUV9ERVNUUk9ZKCZzYy0+c2Nfc2NvcSk7Ci0JTkdf QlRfTUJVRlFfREVTVFJPWSgmc2MtPnNjX3NjaXEpOworCVVCVF9NQlVGUV9VTkxPQ0soc2MpOwog CisJbXR4X2Rlc3Ryb3koJnNjLT5zY19pZl9tdHhbMF0pOworCW10eF9kZXN0cm95KCZzYy0+c2Nf aWZfbXR4WzFdKTsKKwltdHhfZGVzdHJveSgmc2MtPnNjX21idWZxX210eCk7CisKIAlyZXR1cm4g KDApOwotfQorfSAvKiB1YnRfZGV0YWNoICovCiAKKy8qIAorICogQ2FsbGVkIHdoZW4gb3V0Z29p bmcgY29udHJvbCByZXF1ZXN0IChIQ0kgY29tbWFuZCkgaGFzIGNvbXBsZXRlZCwgaS5lLgorICog SENJIGNvbW1hbmQgd2FzIHNlbnQgdG8gdGhlIGRldmljZS4KKyAqIFVTQiBjb250ZXh0LgorICov CisKIHN0YXRpYyB2b2lkCiB1YnRfY3RybF93cml0ZV9jYWxsYmFjayhzdHJ1Y3QgdXNiMl94ZmVy ICp4ZmVyKQogewotCXN0cnVjdCB1YnRfc29mdGMgKnNjID0geGZlci0+cHJpdl9zYzsKLQlzdHJ1 Y3QgdXNiMl9kZXZpY2VfcmVxdWVzdCByZXE7Ci0Jc3RydWN0IG1idWYgKm07CisJbm9kZV9wCQkJ CW5vZGUgPSB4ZmVyLT5wcml2X3NjOworCXN0cnVjdCB1YnRfc29mdGMJCSpzYzsKKwlzdHJ1Y3Qg dXNiMl9kZXZpY2VfcmVxdWVzdAlyZXE7CisJc3RydWN0IG1idWYJCQkqbTsKIAorCWlmIChOR19O T0RFX05PVF9WQUxJRChub2RlKSkgeworCQlOR19OT0RFX1VOUkVGKG5vZGUpOworCQlyZXR1cm47 IC8qIG5ldGdyYXBoIG5vZGUgaXMgZ29uZSAqLworCX0KKworCXNjID0gTkdfTk9ERV9QUklWQVRF KG5vZGUpOworCiAJc3dpdGNoIChVU0JfR0VUX1NUQVRFKHhmZXIpKSB7CiAJY2FzZSBVU0JfU1Rf VFJBTlNGRVJSRUQ6Ci10cl90cmFuc2ZlcnJlZDoKKwkJaWYgKHhmZXItPmVycm9yICE9IDApCisJ CQlVQlRfU1RBVF9PRVJST1Ioc2MpOworCQllbHNlIHsKKwkJCVVCVF9JTkZPKHNjLCAic2VudCAl ZCBieXRlcyB0byBjb250cm9sIHBpcGVcbiIsCisJCQkJeGZlci0+YWN0bGVuKTsKIAotCQlpZiAo eGZlci0+ZXJyb3IpIHsKLQkJCU5HX1VCVF9TVEFUX09FUlJPUihzYy0+c2Nfc3RhdCk7Ci0JCX0g ZWxzZSB7Ci0JCQlOR19VQlRfU1RBVF9CWVRFU19TRU5UKHNjLT5zY19zdGF0LCB4ZmVyLT5hY3Rs ZW4pOwotCQkJTkdfVUJUX1NUQVRfUENLVFNfU0VOVChzYy0+c2Nfc3RhdCk7CisJCQlVQlRfU1RB VF9CWVRFU19TRU5UKHNjLCB4ZmVyLT5hY3RsZW4pOworCQkJVUJUX1NUQVRfUENLVFNfU0VOVChz Yyk7CiAJCX0KKwkJLyogRkFMTFRIUk9VR0ggKi8KIAogCWNhc2UgVVNCX1NUX1NFVFVQOgotCi0J CS8qIGdldCBuZXh0IG1idWYsIGlmIGFueSAqLwotCitzZW5kX25leHQ6CisJCS8qIEdldCBuZXh0 IGNvbW1hbmQgbWJ1ZiwgaWYgYW55ICovCisJCVVCVF9NQlVGUV9MT0NLKHNjKTsKIAkJTkdfQlRf TUJVRlFfREVRVUVVRSgmc2MtPnNjX2NtZHEsIG0pOworCQlVQlRfTUJVRlFfVU5MT0NLKHNjKTsK IAogCQlpZiAobSA9PSBOVUxMKSB7Ci0JCQlOR19VQlRfSU5GTyhzYywgIkhDSSBjb21tYW5kIHF1 ZXVlIGlzIGVtcHR5XG4iKTsKKwkJCVVCVF9JTkZPKHNjLCAiSENJIGNvbW1hbmQgcXVldWUgaXMg ZW1wdHlcbiIpOworCQkJTkdfTk9ERV9VTlJFRihub2RlKTsKIAkJCXJldHVybjsKIAkJfQotCQkv KgotCQkgKiBjaGVjayBIQ0kgY29tbWFuZCBmcmFtZSBzaXplIGFuZAotCQkgKiBjb3B5IGl0IHRv IFVTQiB0cmFuc2ZlciBidWZmZXI6Ci0JCSAqLwogCi0JCWlmIChtLT5tX3BrdGhkci5sZW4gPiBV QlRfQ1RSTF9CVUZGRVJfU0laRSkgewotCQkJcGFuaWMoIkhDSSBjb21tYW5kIGZyYW1lIHRvbyBi aWcsIHNpemU9JXpkLCBsZW49JWRcbiIsCi0JCQkgICAgVUJUX0NUUkxfQlVGRkVSX1NJWkUsIG0t Pm1fcGt0aGRyLmxlbik7Ci0JCX0KLQkJLyogaW5pdGlhbGl6ZSBhIFVTQiBjb250cm9sIHJlcXVl c3QgYW5kIHRoZW4gc2NoZWR1bGUgaXQgKi8KLQorCQkvKiBJbml0aWFsaXplIGEgVVNCIGNvbnRy b2wgcmVxdWVzdCBhbmQgdGhlbiBzY2hlZHVsZSBpdCAqLwogCQliemVybygmcmVxLCBzaXplb2Yo cmVxKSk7Ci0KIAkJcmVxLmJtUmVxdWVzdFR5cGUgPSBVQlRfSENJX1JFUVVFU1Q7CiAJCVVTRVRX KHJlcS53TGVuZ3RoLCBtLT5tX3BrdGhkci5sZW4pOwogCi0JCU5HX1VCVF9JTkZPKHNjLCAiU2Vu ZGluZyBjb250cm9sIHJlcXVlc3QsIGJtUmVxdWVzdFR5cGU9MHglMDJ4LCAiCi0JCSAgICAid0xl bmd0aD0lZFxuIiwgcmVxLmJtUmVxdWVzdFR5cGUsIFVHRVRXKHJlcS53TGVuZ3RoKSk7CisJCVVC VF9JTkZPKHNjLCAiU2VuZGluZyBjb250cm9sIHJlcXVlc3QsICIgXAorCQkJImJtUmVxdWVzdFR5 cGU9MHglMDJ4LCB3TGVuZ3RoPSVkXG4iLAorCQkJcmVxLmJtUmVxdWVzdFR5cGUsIFVHRVRXKHJl cS53TGVuZ3RoKSk7CiAKIAkJdXNiMl9jb3B5X2luKHhmZXItPmZyYnVmZmVycywgMCwgJnJlcSwg c2l6ZW9mKHJlcSkpOwogCQl1c2IyX21fY29weV9pbih4ZmVyLT5mcmJ1ZmZlcnMgKyAxLCAwLCBt LCAwLCBtLT5tX3BrdGhkci5sZW4pOwogCiAJCXhmZXItPmZybGVuZ3Roc1swXSA9IHNpemVvZihy ZXEpOwogCQl4ZmVyLT5mcmxlbmd0aHNbMV0gPSBtLT5tX3BrdGhkci5sZW47Ci0JCXhmZXItPm5m cmFtZXMgPSB4ZmVyLT5mcmxlbmd0aHNbMV0gPyAyIDogMTsKKwkJeGZlci0+bmZyYW1lcyA9IDI7 CiAKIAkJTkdfRlJFRV9NKG0pOwogCiAJCXVzYjJfc3RhcnRfaGFyZHdhcmUoeGZlcik7Ci0JCXJl dHVybjsKKwkJYnJlYWs7CiAKLQlkZWZhdWx0OgkJCS8qIEVycm9yICovCi0JCWlmICh4ZmVyLT5l cnJvciA9PSBVU0JfRVJSX0NBTkNFTExFRCkgewotCQkJLyogaWdub3JlICovCi0JCQlyZXR1cm47 CisJZGVmYXVsdDogLyogRXJyb3IgKi8KKwkJaWYgKHhmZXItPmVycm9yICE9IFVTQl9FUlJfQ0FO Q0VMTEVEKSB7CisJCQlVQlRfV0FSTihzYywgImNvbnRyb2wgdHJhbnNmZXIgZmFpbGVkOiAlc1xu IiwKKwkJCQl1c2IyX2VycnN0cih4ZmVyLT5lcnJvcikpOworCisJCQlVQlRfU1RBVF9PRVJST1Io c2MpOworCQkJZ290byBzZW5kX25leHQ7CiAJCX0KLQkJZ290byB0cl90cmFuc2ZlcnJlZDsKKwor CQlOR19OT0RFX1VOUkVGKG5vZGUpOyAvKiBjYW5jZWxsZWQgKi8KKwkJYnJlYWs7CiAJfQotfQor fSAvKiB1YnRfY3RybF93cml0ZV9jYWxsYmFjayAqLwogCisvKiAKKyAqIENhbGxlZCB3aGVuIGlu Y29taW5nIGludGVycnVwdCB0cmFuc2ZlciAoSENJIGV2ZW50KSBoYXMgY29tcGxldGVkLCBpLmUu CisgKiBIQ0kgZXZlbnQgd2FzIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZS4KKyAqIFVTQiBjb250 ZXh0LgorICovCisKIHN0YXRpYyB2b2lkCiB1YnRfaW50cl9yZWFkX2NhbGxiYWNrKHN0cnVjdCB1 c2IyX3hmZXIgKnhmZXIpCiB7Ci0Jc3RydWN0IHVidF9zb2Z0YyAqc2MgPSB4ZmVyLT5wcml2X3Nj OwotCXN0cnVjdCBtYnVmICptOwotCXVpbnQzMl90IG1heF9sZW47Ci0JdWludDhfdCAqcHRyOwor CW5vZGVfcAkJCW5vZGUgPSB4ZmVyLT5wcml2X3NjOworCXN0cnVjdCB1YnRfc29mdGMJKnNjOwor CXN0cnVjdCBtYnVmCQkqbTsKKwluZ19oY2lfZXZlbnRfcGt0X3QJKmhkcjsKKwlpbnQJCQllcnJv cjsKIAorCWlmIChOR19OT0RFX05PVF9WQUxJRChub2RlKSkgeworCQlOR19OT0RFX1VOUkVGKG5v ZGUpOworCQlyZXR1cm47IC8qIG5ldGdyYXBoIG5vZGUgaXMgZ29uZSAqLworCX0KKworCXNjID0g TkdfTk9ERV9QUklWQVRFKG5vZGUpOworCisJaWYgKChzYy0+c2NfaG9vayA9PSBOVUxMKSB8fCBO R19IT09LX05PVF9WQUxJRChzYy0+c2NfaG9vaykpIHsKKwkJVUJUX0lORk8oc2MsICJubyB1cHN0 cmVhbSBob29rXG4iKTsKKwkJTkdfTk9ERV9VTlJFRihub2RlKTsKKwkJcmV0dXJuOyAvKiB1cHN0 cmVhbSBob29rIGlzIGdvbmUgKi8KKwl9CisKKwltID0gTlVMTDsKKwogCXN3aXRjaCAoVVNCX0dF VF9TVEFURSh4ZmVyKSkgewogCWNhc2UgVVNCX1NUX1RSQU5TRkVSUkVEOgotCi0JCS8qIGFsbG9j YXRlIGEgbmV3IG1idWYgKi8KLQorCQkvKiBBbGxvY2F0ZSBhIG5ldyBtYnVmICovCiAJCU1HRVRI RFIobSwgTV9ET05UV0FJVCwgTVRfREFUQSk7Ci0KIAkJaWYgKG0gPT0gTlVMTCkgewotCQkJZ290 byB0cl9zZXR1cDsKKwkJCVVCVF9TVEFUX0lFUlJPUihzYyk7CisJCQlnb3RvIHN1Ym1pdF9uZXh0 OwogCQl9CisKIAkJTUNMR0VUKG0sIE1fRE9OVFdBSVQpOwotCiAJCWlmICghKG0tPm1fZmxhZ3Mg JiBNX0VYVCkpIHsKLQkJCU5HX0ZSRUVfTShtKTsKLQkJCWdvdG8gdHJfc2V0dXA7CisJCQlVQlRf U1RBVF9JRVJST1Ioc2MpOworCQkJZ290byBzdWJtaXRfbmV4dDsKIAkJfQotCQlpZiAoIShzYy0+ c2NfZmxhZ3MgJiBVQlRfSEFWRV9GUkFNRV9UWVBFKSkgewotCQkJKm10b2QobSwgdWludDhfdCAq KT0gTkdfSENJX0VWRU5UX1BLVDsKLQkJCW0tPm1fcGt0aGRyLmxlbiA9IG0tPm1fbGVuID0gMTsK LQkJfSBlbHNlIHsKLQkJCW0tPm1fcGt0aGRyLmxlbiA9IG0tPm1fbGVuID0gMDsKKworCQkvKiBB ZGQgSENJIHBhY2tldCB0eXBlICovCisJCSptdG9kKG0sIHVpbnQ4X3QgKik9IE5HX0hDSV9FVkVO VF9QS1Q7CisJCW0tPm1fcGt0aGRyLmxlbiA9IG0tPm1fbGVuID0gMTsKKworCQlpZiAoeGZlci0+ YWN0bGVuID4gTUNMQllURVMgLSAxKQorCQkJeGZlci0+YWN0bGVuID0gTUNMQllURVMgLSAxOwor CisJCXVzYjJfY29weV9vdXQoeGZlci0+ZnJidWZmZXJzLCAwLCBtdG9kKG0sIHVpbnQ4X3QgKikg KyAxLAorCQkJeGZlci0+YWN0bGVuKTsKKwkJbS0+bV9wa3RoZHIubGVuICs9IHhmZXItPmFjdGxl bjsKKwkJbS0+bV9sZW4gKz0geGZlci0+YWN0bGVuOworCisJCVVCVF9JTkZPKHNjLCAiZ290ICVk IGJ5dGVzIGZyb20gaW50ZXJydXB0IHBpcGVcbiIsCisJCQl4ZmVyLT5hY3RsZW4pOworCisJCS8q IFZhbGlkYXRlIHBhY2tldCBhbmQgc2VuZCBpdCB1cCB0aGUgc3RhY2sgKi8KKwkJaWYgKG0tPm1f cGt0aGRyLmxlbiA8IHNpemVvZigqaGRyKSkgeworCQkJVUJUX0lORk8oc2MsICJIQ0kgZXZlbnQg cGFja2V0IGlzIHRvbyBzaG9ydFxuIik7CisKKwkJCVVCVF9TVEFUX0lFUlJPUihzYyk7CisJCQln b3RvIHN1Ym1pdF9uZXh0OwogCQl9CiAKLQkJbWF4X2xlbiA9IChNQ0xCWVRFUyAtIG0tPm1fbGVu KTsKKwkJaGRyID0gbXRvZChtLCBuZ19oY2lfZXZlbnRfcGt0X3QgKik7CisJCWlmIChoZHItPmxl bmd0aCAhPSAobS0+bV9wa3RoZHIubGVuIC0gc2l6ZW9mKCpoZHIpKSkgeworCQkJVUJUX0VSUihz YywgIkludmFsaWQgSENJIGV2ZW50IHBhY2tldCBzaXplLCAiIFwKKwkJCQkibGVuZ3RoPSVkLCBw a3RsZW49JWRcbiIsCisJCQkJaGRyLT5sZW5ndGgsIG0tPm1fcGt0aGRyLmxlbik7CiAKLQkJaWYg KHhmZXItPmFjdGxlbiA+IG1heF9sZW4pIHsKLQkJCXhmZXItPmFjdGxlbiA9IG1heF9sZW47CisJ CQlVQlRfU1RBVF9JRVJST1Ioc2MpOworCQkJZ290byBzdWJtaXRfbmV4dDsKIAkJfQotCQlwdHIg PSAoKHVpbnQ4X3QgKikobS0+bV9kYXRhKSkgKyBtLT5tX2xlbjsKIAotCQl1c2IyX2NvcHlfb3V0 KHhmZXItPmZyYnVmZmVycywgMCwgcHRyLCB4ZmVyLT5hY3RsZW4pOworCQlVQlRfSU5GTyhzYywg ImdvdCBjb21wbGV0ZSBIQ0kgZXZlbnQgZnJhbWUsIHBrdGxlbj0lZCwgIiBcCisJCQkibGVuZ3Ro PSVkXG4iLCBtLT5tX3BrdGhkci5sZW4sIGhkci0+bGVuZ3RoKTsKIAotCQltLT5tX3BrdGhkci5s ZW4gKz0geGZlci0+YWN0bGVuOwotCQltLT5tX2xlbiArPSB4ZmVyLT5hY3RsZW47CisJCVVCVF9T VEFUX1BDS1RTX1JFQ1Yoc2MpOworCQlVQlRfU1RBVF9CWVRFU19SRUNWKHNjLCBtLT5tX3BrdGhk ci5sZW4pOwogCi0JCU5HX1VCVF9JTkZPKHNjLCAiZ290ICVkIGJ5dGVzIGZyb20gaW50ZXJydXB0 ICIKLQkJICAgICJwaXBlXG4iLCB4ZmVyLT5hY3RsZW4pOworCQlOR19TRU5EX0RBVEFfT05MWShl cnJvciwgc2MtPnNjX2hvb2ssIG0pOworCQlpZiAoZXJyb3IgIT0gMCkKKwkJCVVCVF9TVEFUX0lF UlJPUihzYyk7CiAKLQkJc2MtPnNjX2ludHJfYnVmZmVyID0gbTsKKwkJLyogbSA9PSBOVUxMIGF0 IHRoaXMgcG9pbnQgKi8KKwkJLyogRkFMTFRIUk9VR0ggKi8KIAogCWNhc2UgVVNCX1NUX1NFVFVQ OgotdHJfc2V0dXA6CitzdWJtaXRfbmV4dDoKKwkJTkdfRlJFRV9NKG0pOyAvKiBjaGVja3MgZm9y IG0gIT0gTlVMTCAqLwogCi0JCWlmIChzYy0+c2NfaW50cl9idWZmZXIpIHsKLQkJCW5nX3NlbmRf Zm4oc2MtPnNjX25vZGUsIE5VTEwsIHVidF9pbnRyX3JlYWRfY29tcGxldGUsIE5VTEwsIDApOwot CQkJcmV0dXJuOworCQlpZiAoc2MtPnNjX2ZsYWdzICYgVUJUX0ZMQUdfSU5UUl9TVEFMTCkKKwkJ CXVzYjJfdHJhbnNmZXJfc3RhcnQoc2MtPnNjX3hmZXJbVUJUX0lGXzBfSU5UUl9DU19SRF0pOwor CQllbHNlIHsKKwkJCXhmZXItPmZybGVuZ3Roc1swXSA9IHhmZXItPm1heF9kYXRhX2xlbmd0aDsK KwkJCXVzYjJfc3RhcnRfaGFyZHdhcmUoeGZlcik7CiAJCX0KLQkJaWYgKHNjLT5zY19mbGFncyAm IFVCVF9GTEFHX0lOVFJfU1RBTEwpIHsKLQkJCXVzYjJfdHJhbnNmZXJfc3RhcnQoc2MtPnNjX3hm ZXJfaWZfMFs2XSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJeGZlci0+ZnJsZW5ndGhzWzBdID0geGZl ci0+bWF4X2RhdGFfbGVuZ3RoOworCQlicmVhazsKIAotCQl1c2IyX3N0YXJ0X2hhcmR3YXJlKHhm ZXIpOwotCQlyZXR1cm47CisJZGVmYXVsdDogLyogRXJyb3IgKi8KKwkJaWYgKHhmZXItPmVycm9y ICE9IFVTQl9FUlJfQ0FOQ0VMTEVEKSB7CisJCQlVQlRfV0FSTihzYywgImludGVycnVwdCB0cmFu c2ZlciBmYWlsZWQ6ICVzXG4iLAorCQkJCXVzYjJfZXJyc3RyKHhmZXItPmVycm9yKSk7CiAKLQlk ZWZhdWx0OgkJCS8qIEVycm9yICovCi0JCWlmICh4ZmVyLT5lcnJvciAhPSBVU0JfRVJSX0NBTkNF TExFRCkgewotCQkJLyogdHJ5IHRvIGNsZWFyIHN0YWxsIGZpcnN0ICovCisJCQkvKiBUcnkgdG8g Y2xlYXIgc3RhbGwgZmlyc3QgKi8KIAkJCXNjLT5zY19mbGFncyB8PSBVQlRfRkxBR19JTlRSX1NU QUxMOwotCQkJdXNiMl90cmFuc2Zlcl9zdGFydChzYy0+c2NfeGZlcl9pZl8wWzZdKTsKLQkJfQot CQlyZXR1cm47Ci0KKwkJCXVzYjJfdHJhbnNmZXJfc3RhcnQoc2MtPnNjX3hmZXJbVUJUX0lGXzBf SU5UUl9DU19SRF0pOworCQl9IGVsc2UKKwkJCU5HX05PREVfVU5SRUYobm9kZSk7IC8qIGNhbmNl bGxlZCAqLworCQlicmVhazsKIAl9Ci19Cit9IC8qIHVidF9pbnRyX3JlYWRfY2FsbGJhY2sgKi8K IAorLyoKKyAqIENhbGxlZCB3aGVuIG91dGdvaW5nIGNvbnRyb2wgdHJhbnNmZXIgaW5pdGlhdGVk IHRvIGNsZWFyIHN0YWxsIG9uCisgKiBpbnRlcnJ1cHQgcGlwZSBoYXMgY29tcGxldGVkLgorICog VVNCIGNvbnRleHQuCisgKi8KKwogc3RhdGljIHZvaWQKIHVidF9pbnRyX3JlYWRfY2xlYXJfc3Rh bGxfY2FsbGJhY2soc3RydWN0IHVzYjJfeGZlciAqeGZlcikKIHsKLQlzdHJ1Y3QgdWJ0X3NvZnRj ICpzYyA9IHhmZXItPnByaXZfc2M7Ci0Jc3RydWN0IHVzYjJfeGZlciAqeGZlcl9vdGhlciA9IHNj LT5zY194ZmVyX2lmXzBbMl07CisJbm9kZV9wCQkJbm9kZSA9IHhmZXItPnByaXZfc2M7CisJc3Ry dWN0IHVidF9zb2Z0Ywkqc2M7CisJc3RydWN0IHVzYjJfeGZlcgkqeGZlcl9vdGhlcjsKIAorCWlm IChOR19OT0RFX05PVF9WQUxJRChub2RlKSkgeworCQlOR19OT0RFX1VOUkVGKG5vZGUpOworCQly ZXR1cm47IC8qIG5ldGdyYXBoIG5vZGUgaXMgZ29uZSAqLworCX0KKworCXNjID0gTkdfTk9ERV9Q UklWQVRFKG5vZGUpOworCXhmZXJfb3RoZXIgPSBzYy0+c2NfeGZlcltVQlRfSUZfMF9JTlRSX0RU X1JEXTsKKwogCWlmICh1c2IyX2NsZWFyX3N0YWxsX2NhbGxiYWNrKHhmZXIsIHhmZXJfb3RoZXIp KSB7CiAJCURQUklOVEYoInN0YWxsIGNsZWFyZWRcbiIpOwogCQlzYy0+c2NfZmxhZ3MgJj0gflVC VF9GTEFHX0lOVFJfU1RBTEw7CiAJCXVzYjJfdHJhbnNmZXJfc3RhcnQoeGZlcl9vdGhlcik7Ci0J fQotfQorCX0gZWxzZQorCQlOR19OT0RFX1VOUkVGKG5vZGUpOyAvKiBjYW50IGNsZWFyIHN0YWxs ICovCit9IC8qIHVidF9pbnRyX3JlYWRfY2xlYXJfc3RhbGxfY2FsbGJhY2sgKi8KIAorLyoKKyAq IENhbGxlZCB3aGVuIGluY29taW5nIGJ1bGsgdHJhbnNmZXIgKEFDTCBwYWNrZXQpIGhhcyBjb21w bGV0ZWQsIGkuZS4KKyAqIEFDTCBwYWNrZXQgd2FzIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZS4K KyAqIFVTQiBjb250ZXh0LgorICovCisKIHN0YXRpYyB2b2lkCi11YnRfaW50cl9yZWFkX2NvbXBs ZXRlKG5vZGVfcCBub2RlLCBob29rX3AgaG9vaywgdm9pZCAqYXJnMSwgaW50IGFyZzIpCit1YnRf YnVsa19yZWFkX2NhbGxiYWNrKHN0cnVjdCB1c2IyX3hmZXIgKnhmZXIpCiB7Ci0Jc3RydWN0IHVi dF9zb2Z0YyAqc2MgPSBOR19OT0RFX1BSSVZBVEUobm9kZSk7Ci0Jc3RydWN0IG1idWYgKm07Ci0J bmdfaGNpX2V2ZW50X3BrdF90ICpoZHI7Ci0JaW50IGVycm9yOworCW5vZGVfcAkJCW5vZGUgPSB4 ZmVyLT5wcml2X3NjOworCXN0cnVjdCB1YnRfc29mdGMJKnNjOworCXN0cnVjdCBtYnVmCQkqbTsK KwluZ19oY2lfYWNsZGF0YV9wa3RfdAkqaGRyOworCXVpbnQxNl90CQlsZW47CisJaW50CQkJZXJy b3I7CiAKLQlpZiAoc2MgPT0gTlVMTCkgewotCQlyZXR1cm47CisJaWYgKE5HX05PREVfTk9UX1ZB TElEKG5vZGUpKSB7CisJCU5HX05PREVfVU5SRUYobm9kZSk7CisJCXJldHVybjsgLyogbmV0Z3Jh cGggbm9kZSBpcyBnb25lICovCiAJfQotCW10eF9sb2NrKCZzYy0+c2NfbXR4KTsKIAotCW0gPSBz Yy0+c2NfaW50cl9idWZmZXI7CisJc2MgPSBOR19OT0RFX1BSSVZBVEUobm9kZSk7CiAKLQlpZiAo bSkgewotCi0JCXNjLT5zY19pbnRyX2J1ZmZlciA9IE5VTEw7Ci0KLQkJaGRyID0gbXRvZChtLCBu Z19oY2lfZXZlbnRfcGt0X3QgKik7Ci0KLQkJaWYgKChzYy0+c2NfaG9vayA9PSBOVUxMKSB8fCBO R19IT09LX05PVF9WQUxJRChzYy0+c2NfaG9vaykpIHsKLQkJCU5HX1VCVF9JTkZPKHNjLCAiTm8g dXBzdHJlYW0gaG9va1xuIik7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQkJTkdfVUJUX1NUQVRfQllU RVNfUkVDVihzYy0+c2Nfc3RhdCwgbS0+bV9wa3RoZHIubGVuKTsKLQotCQlpZiAobS0+bV9wa3Ro ZHIubGVuIDwgc2l6ZW9mKCpoZHIpKSB7Ci0JCQlOR19VQlRfSU5GTyhzYywgIlBhY2tldCB0b28g c2hvcnRcbiIpOwotCQkJZ290byBkb25lOwotCQl9Ci0JCWlmIChoZHItPmxlbmd0aCA9PSAobS0+ bV9wa3RoZHIubGVuIC0gc2l6ZW9mKCpoZHIpKSkgewotCQkJTkdfVUJUX0lORk8oc2MsICJHb3Qg Y29tcGxldGUgSENJIGV2ZW50IGZyYW1lLCAiCi0JCQkgICAgInBrdGxlbj0lZCwgbGVuZ3RoPSVk XG4iLAotCQkJICAgIG0tPm1fcGt0aGRyLmxlbiwgaGRyLT5sZW5ndGgpOwotCi0JCQlOR19VQlRf U1RBVF9QQ0tUU19SRUNWKHNjLT5zY19zdGF0KTsKLQotCQkJTkdfU0VORF9EQVRBX09OTFkoZXJy b3IsIHNjLT5zY19ob29rLCBtKTsKLQotCQkJbSA9IE5VTEw7Ci0KLQkJCWlmIChlcnJvciAhPSAw KSB7Ci0JCQkJTkdfVUJUX1NUQVRfSUVSUk9SKHNjLT5zY19zdGF0KTsKLQkJCX0KLQkJfSBlbHNl IHsKLQkJCU5HX1VCVF9FUlIoc2MsICJJbnZhbGlkIEhDSSBldmVudCBmcmFtZSBzaXplLCAiCi0J CQkgICAgImxlbmd0aD0lZCwgcGt0bGVuPSVkXG4iLAotCQkJICAgIGhkci0+bGVuZ3RoLCBtLT5t X3BrdGhkci5sZW4pOwotCi0JCQlOR19VQlRfU1RBVF9JRVJST1Ioc2MtPnNjX3N0YXQpOwotCQl9 CisJaWYgKChzYy0+c2NfaG9vayA9PSBOVUxMKSB8fCBOR19IT09LX05PVF9WQUxJRChzYy0+c2Nf aG9vaykpIHsKKwkJVUJUX0lORk8oc2MsICJubyB1cHN0cmVhbSBob29rXG4iKTsKKwkJTkdfTk9E RV9VTlJFRihub2RlKTsKKwkJcmV0dXJuOyAvKiB1cHN0cmVhbSBob29rIGlzIGdvbmUgKi8KIAl9 Ci1kb25lOgotCWlmIChtKSB7Ci0JCU5HX0ZSRUVfTShtKTsKLQl9Ci0JLyogc3RhcnQgVVNCIHRy YW5zZmVyIGlmIG5vdCBhbHJlYWR5IHN0YXJ0ZWQgKi8KIAotCXVzYjJfdHJhbnNmZXJfc3RhcnQo c2MtPnNjX3hmZXJfaWZfMFsyXSk7CisJbSA9IE5VTEw7CiAKLQltdHhfdW5sb2NrKCZzYy0+c2Nf bXR4KTsKLX0KLQotc3RhdGljIHZvaWQKLXVidF9idWxrX3JlYWRfY2FsbGJhY2soc3RydWN0IHVz YjJfeGZlciAqeGZlcikKLXsKLQlzdHJ1Y3QgdWJ0X3NvZnRjICpzYyA9IHhmZXItPnByaXZfc2M7 Ci0Jc3RydWN0IG1idWYgKm07Ci0JdWludDMyX3QgbWF4X2xlbjsKLQl1aW50OF90ICpwdHI7Ci0K IAlzd2l0Y2ggKFVTQl9HRVRfU1RBVEUoeGZlcikpIHsKIAljYXNlIFVTQl9TVF9UUkFOU0ZFUlJF RDoKLQotCQkvKiBhbGxvY2F0ZSBuZXcgbWJ1ZiAqLwotCisJCS8qIEFsbG9jYXRlIG5ldyBtYnVm ICovCiAJCU1HRVRIRFIobSwgTV9ET05UV0FJVCwgTVRfREFUQSk7Ci0KIAkJaWYgKG0gPT0gTlVM TCkgewotCQkJZ290byB0cl9zZXR1cDsKKwkJCVVCVF9TVEFUX0lFUlJPUihzYyk7CisJCQlnb3Rv IHN1Ym1pdF9uZXh0OwogCQl9CisKIAkJTUNMR0VUKG0sIE1fRE9OVFdBSVQpOwotCiAJCWlmICgh KG0tPm1fZmxhZ3MgJiBNX0VYVCkpIHsKLQkJCU5HX0ZSRUVfTShtKTsKLQkJCWdvdG8gdHJfc2V0 dXA7CisJCQlVQlRfU1RBVF9JRVJST1Ioc2MpOworCQkJZ290byBzdWJtaXRfbmV4dDsKIAkJfQot CQlpZiAoIShzYy0+c2NfZmxhZ3MgJiBVQlRfSEFWRV9GUkFNRV9UWVBFKSkgewotCQkJKm10b2Qo bSwgdWludDhfdCAqKT0gTkdfSENJX0FDTF9EQVRBX1BLVDsKLQkJCW0tPm1fcGt0aGRyLmxlbiA9 IG0tPm1fbGVuID0gMTsKLQkJfSBlbHNlIHsKLQkJCW0tPm1fcGt0aGRyLmxlbiA9IG0tPm1fbGVu ID0gMDsKLQkJfQogCi0JCW1heF9sZW4gPSAoTUNMQllURVMgLSBtLT5tX2xlbik7CisJCS8qIEFk ZCBIQ0kgcGFja2V0IHR5cGUgKi8KKwkJKm10b2QobSwgdWludDhfdCAqKT0gTkdfSENJX0FDTF9E QVRBX1BLVDsKKwkJbS0+bV9wa3RoZHIubGVuID0gbS0+bV9sZW4gPSAxOwogCi0JCWlmICh4ZmVy LT5hY3RsZW4gPiBtYXhfbGVuKSB7Ci0JCQl4ZmVyLT5hY3RsZW4gPSBtYXhfbGVuOwotCQl9Ci0J CXB0ciA9ICgodWludDhfdCAqKShtLT5tX2RhdGEpKSArIG0tPm1fbGVuOworCQlpZiAoeGZlci0+ YWN0bGVuID4gTUNMQllURVMgLSAxKQorCQkJeGZlci0+YWN0bGVuID0gTUNMQllURVMgLSAxOwog Ci0JCXVzYjJfY29weV9vdXQoeGZlci0+ZnJidWZmZXJzLCAwLCBwdHIsIHhmZXItPmFjdGxlbik7 Ci0KKwkJdXNiMl9jb3B5X291dCh4ZmVyLT5mcmJ1ZmZlcnMsIDAsIG10b2QobSwgdWludDhfdCAq KSArIDEsCisJCQl4ZmVyLT5hY3RsZW4pOwogCQltLT5tX3BrdGhkci5sZW4gKz0geGZlci0+YWN0 bGVuOwogCQltLT5tX2xlbiArPSB4ZmVyLT5hY3RsZW47CiAKLQkJTkdfVUJUX0lORk8oc2MsICJn b3QgJWQgYnl0ZXMgZnJvbSBidWxrLWluICIKLQkJICAgICJwaXBlXG4iLCB4ZmVyLT5hY3RsZW4p OworCQlVQlRfSU5GTyhzYywgImdvdCAlZCBieXRlcyBmcm9tIGJ1bGstaW4gcGlwZVxuIiwKKwkJ CXhmZXItPmFjdGxlbik7CiAKLQkJc2MtPnNjX2J1bGtfaW5fYnVmZmVyID0gbTsKKwkJLyogVmFs aWRhdGUgcGFja2V0IGFuZCBzZW5kIGl0IHVwIHRoZSBzdGFjayAqLworCQlpZiAobS0+bV9wa3Ro ZHIubGVuIDwgc2l6ZW9mKCpoZHIpKSB7CisJCQlVQlRfSU5GTyhzYywgIkhDSSBBQ0wgcGFja2V0 IGlzIHRvbyBzaG9ydFxuIik7CiAKLQljYXNlIFVTQl9TVF9TRVRVUDoKLXRyX3NldHVwOgotCQlp ZiAoc2MtPnNjX2J1bGtfaW5fYnVmZmVyKSB7Ci0JCQluZ19zZW5kX2ZuKHNjLT5zY19ub2RlLCBO VUxMLCB1YnRfYnVsa19yZWFkX2NvbXBsZXRlLCBOVUxMLCAwKTsKLQkJCXJldHVybjsKKwkJCVVC VF9TVEFUX0lFUlJPUihzYyk7CisJCQlnb3RvIHN1Ym1pdF9uZXh0OwogCQl9Ci0JCWlmIChzYy0+ c2NfZmxhZ3MgJiBVQlRfRkxBR19SRUFEX1NUQUxMKSB7Ci0JCQl1c2IyX3RyYW5zZmVyX3N0YXJ0 KHNjLT5zY194ZmVyX2lmXzBbNV0pOwotCQkJcmV0dXJuOwotCQl9Ci0JCXhmZXItPmZybGVuZ3Ro c1swXSA9IHhmZXItPm1heF9kYXRhX2xlbmd0aDsKIAotCQl1c2IyX3N0YXJ0X2hhcmR3YXJlKHhm ZXIpOwotCQlyZXR1cm47CisJCWhkciA9IG10b2QobSwgbmdfaGNpX2FjbGRhdGFfcGt0X3QgKik7 CisJCWxlbiA9IGxlMTZ0b2goaGRyLT5sZW5ndGgpOworCQlpZiAobGVuICE9IChtLT5tX3BrdGhk ci5sZW4gLSBzaXplb2YoKmhkcikpKSB7CisJCQlVQlRfRVJSKHNjLCAiSW52YWxpZCBBQ0wgcGFj a2V0IHNpemUsIGxlbmd0aD0lZCwgIiBcCisJCQkJInBrdGxlbj0lZFxuIiwgbGVuLCBtLT5tX3Br dGhkci5sZW4pOwogCi0JZGVmYXVsdDoJCQkvKiBFcnJvciAqLwotCQlpZiAoeGZlci0+ZXJyb3Ig IT0gVVNCX0VSUl9DQU5DRUxMRUQpIHsKLQkJCS8qIHRyeSB0byBjbGVhciBzdGFsbCBmaXJzdCAq LwotCQkJc2MtPnNjX2ZsYWdzIHw9IFVCVF9GTEFHX1JFQURfU1RBTEw7Ci0JCQl1c2IyX3RyYW5z ZmVyX3N0YXJ0KHNjLT5zY194ZmVyX2lmXzBbNV0pOworCQkJVUJUX1NUQVRfSUVSUk9SKHNjKTsK KwkJCWdvdG8gc3VibWl0X25leHQ7CiAJCX0KLQkJcmV0dXJuOwogCi0JfQotfQorCQlVQlRfSU5G TyhzYywgImdvdCBjb21wbGV0ZSBBQ0wgZGF0YSBwYWNrZXQsIHBrdGxlbj0lZCwgIiBcCisJCQki bGVuZ3RoPSVkXG4iLCBtLT5tX3BrdGhkci5sZW4sIGxlbik7CiAKLXN0YXRpYyB2b2lkCi11YnRf YnVsa19yZWFkX2NsZWFyX3N0YWxsX2NhbGxiYWNrKHN0cnVjdCB1c2IyX3hmZXIgKnhmZXIpCi17 Ci0Jc3RydWN0IHVidF9zb2Z0YyAqc2MgPSB4ZmVyLT5wcml2X3NjOwotCXN0cnVjdCB1c2IyX3hm ZXIgKnhmZXJfb3RoZXIgPSBzYy0+c2NfeGZlcl9pZl8wWzFdOworCQlVQlRfU1RBVF9QQ0tUU19S RUNWKHNjKTsKKwkJVUJUX1NUQVRfQllURVNfUkVDVihzYywgbS0+bV9wa3RoZHIubGVuKTsKIAot CWlmICh1c2IyX2NsZWFyX3N0YWxsX2NhbGxiYWNrKHhmZXIsIHhmZXJfb3RoZXIpKSB7Ci0JCURQ UklOVEYoInN0YWxsIGNsZWFyZWRcbiIpOwotCQlzYy0+c2NfZmxhZ3MgJj0gflVCVF9GTEFHX1JF QURfU1RBTEw7Ci0JCXVzYjJfdHJhbnNmZXJfc3RhcnQoeGZlcl9vdGhlcik7Ci0JfQotfQorCQlO R19TRU5EX0RBVEFfT05MWShlcnJvciwgc2MtPnNjX2hvb2ssIG0pOworCQlpZiAoZXJyb3IgIT0g MCkKKwkJCVVCVF9TVEFUX0lFUlJPUihzYyk7CiAKLXN0YXRpYyB2b2lkCi11YnRfYnVsa19yZWFk X2NvbXBsZXRlKG5vZGVfcCBub2RlLCBob29rX3AgaG9vaywgdm9pZCAqYXJnMSwgaW50IGFyZzIp Ci17Ci0Jc3RydWN0IHVidF9zb2Z0YyAqc2MgPSBOR19OT0RFX1BSSVZBVEUobm9kZSk7Ci0Jc3Ry dWN0IG1idWYgKm07Ci0JbmdfaGNpX2FjbGRhdGFfcGt0X3QgKmhkcjsKLQl1aW50MTZfdCBsZW47 Ci0JaW50IGVycm9yOworCQkvKiBtID09IE5VTEwgYXQgdGhpcyBwb2ludCAqLworCQkvKiBGQUxM VEhPVUdIICovCiAKLQlpZiAoc2MgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCW10eF9sb2Nr KCZzYy0+c2NfbXR4KTsKKwljYXNlIFVTQl9TVF9TRVRVUDoKK3N1Ym1pdF9uZXh0OgorCQlOR19G UkVFX00obSk7IC8qIGNoZWNrcyBmb3IgbSAhPSBOVUxMICovCiAKLQltID0gc2MtPnNjX2J1bGtf aW5fYnVmZmVyOwotCi0JaWYgKG0pIHsKLQotCQlzYy0+c2NfYnVsa19pbl9idWZmZXIgPSBOVUxM OwotCi0JCWhkciA9IG10b2QobSwgbmdfaGNpX2FjbGRhdGFfcGt0X3QgKik7Ci0KLQkJaWYgKHNj LT5zY19ob29rID09IE5VTEwgfHwgTkdfSE9PS19OT1RfVkFMSUQoc2MtPnNjX2hvb2spKSB7Ci0J CQlOR19VQlRfSU5GTyhzYywgIk5vIHVwc3RyZWFtIGhvb2tcbiIpOwotCQkJZ290byBkb25lOwor CQlpZiAoc2MtPnNjX2ZsYWdzICYgVUJUX0ZMQUdfUkVBRF9TVEFMTCkKKwkJCXVzYjJfdHJhbnNm ZXJfc3RhcnQoc2MtPnNjX3hmZXJbVUJUX0lGXzBfQlVMS19DU19SRF0pOworCQllbHNlIHsKKwkJ CXhmZXItPmZybGVuZ3Roc1swXSA9IHhmZXItPm1heF9kYXRhX2xlbmd0aDsKKwkJCXVzYjJfc3Rh cnRfaGFyZHdhcmUoeGZlcik7CiAJCX0KLQkJTkdfVUJUX1NUQVRfQllURVNfUkVDVihzYy0+c2Nf c3RhdCwgbS0+bV9wa3RoZHIubGVuKTsKKwkJYnJlYWs7CiAKLQkJaWYgKG0tPm1fcGt0aGRyLmxl biA8IHNpemVvZigqaGRyKSkgewotCQkJTkdfVUJUX0lORk8oc2MsICJQYWNrZXQgdG9vIHNob3J0 XG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCQlsZW4gPSBsZTE2dG9oKGhkci0+bGVuZ3RoKTsK KwlkZWZhdWx0OiAvKiBFcnJvciAqLworCQlpZiAoeGZlci0+ZXJyb3IgIT0gVVNCX0VSUl9DQU5D RUxMRUQpIHsKKwkJCVVCVF9XQVJOKHNjLCAiYnVsay1pbiB0cmFuc2ZlciBmYWlsZWQ6ICVzXG4i LAorCQkJCXVzYjJfZXJyc3RyKHhmZXItPmVycm9yKSk7CiAKLQkJaWYgKGxlbiA9PSAobS0+bV9w a3RoZHIubGVuIC0gc2l6ZW9mKCpoZHIpKSkgewotCQkJTkdfVUJUX0lORk8oc2MsICJHb3QgY29t cGxldGUgQUNMIGRhdGEgZnJhbWUsICIKLQkJCSAgICAicGt0bGVuPSVkLCBsZW5ndGg9JWRcbiIs Ci0JCQkgICAgbS0+bV9wa3RoZHIubGVuLCBsZW4pOworCQkJLyogVHJ5IHRvIGNsZWFyIHN0YWxs IGZpcnN0ICovCisJCQlzYy0+c2NfZmxhZ3MgfD0gVUJUX0ZMQUdfUkVBRF9TVEFMTDsKKwkJCXVz YjJfdHJhbnNmZXJfc3RhcnQoc2MtPnNjX3hmZXJbVUJUX0lGXzBfQlVMS19DU19SRF0pOworCQl9 IGVsc2UKKwkJCU5HX05PREVfVU5SRUYobm9kZSk7IC8qIGNhbmNlbGxlZCAqLworCQlicmVhazsK Kwl9Cit9IC8qIHVidF9idWxrX3JlYWRfY2FsbGJhY2sgKi8KIAotCQkJTkdfVUJUX1NUQVRfUENL VFNfUkVDVihzYy0+c2Nfc3RhdCk7CisvKgorICogQ2FsbGVkIHdoZW4gb3V0Z29pbmcgY29udHJv bCB0cmFuc2ZlciBpbml0aWF0ZWQgdG8gY2xlYXIgc3RhbGwgb24KKyAqIGluY29taW5nIGJ1bGsg cGlwZSBoYXMgY29tcGxldGVkLgorICogVVNCIGNvbnRleHQuCisgKi8KIAotCQkJTkdfU0VORF9E QVRBX09OTFkoZXJyb3IsIHNjLT5zY19ob29rLCBtKTsKK3N0YXRpYyB2b2lkCit1YnRfYnVsa19y ZWFkX2NsZWFyX3N0YWxsX2NhbGxiYWNrKHN0cnVjdCB1c2IyX3hmZXIgKnhmZXIpCit7CisJbm9k ZV9wCQkJbm9kZSA9IHhmZXItPnByaXZfc2M7CisJc3RydWN0IHVidF9zb2Z0Ywkqc2M7CisJc3Ry dWN0IHVzYjJfeGZlcgkqeGZlcl9vdGhlcjsKIAotCQkJbSA9IE5VTEw7CisJaWYgKE5HX05PREVf Tk9UX1ZBTElEKG5vZGUpKSB7CisJCU5HX05PREVfVU5SRUYobm9kZSk7CisJCXJldHVybjsgLyog bmV0Z3JhcGggbm9kZSBpcyBnb25lICovCisJfQogCi0JCQlpZiAoZXJyb3IgIT0gMCkgewotCQkJ CU5HX1VCVF9TVEFUX0lFUlJPUihzYy0+c2Nfc3RhdCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlO R19VQlRfRVJSKHNjLCAiSW52YWxpZCBBQ0wgZnJhbWUgc2l6ZSwgIgotCQkJICAgICJsZW5ndGg9 JWQsIHBrdGxlbj0lZFxuIiwKLQkJCSAgICBsZW4sIG0tPm1fcGt0aGRyLmxlbik7CisJc2MgPSBO R19OT0RFX1BSSVZBVEUobm9kZSk7CisJeGZlcl9vdGhlciA9IHNjLT5zY194ZmVyW1VCVF9JRl8w X0JVTEtfRFRfUkRdOwogCi0JCQlOR19VQlRfU1RBVF9JRVJST1Ioc2MtPnNjX3N0YXQpOwotCQl9 Ci0JfQotZG9uZToKLQlpZiAobSkgewotCQlOR19GUkVFX00obSk7Ci0JfQotCS8qIHN0YXJ0IFVT QiB0cmFuc2ZlciBpZiBub3QgYWxyZWFkeSBzdGFydGVkICovCisJaWYgKHVzYjJfY2xlYXJfc3Rh bGxfY2FsbGJhY2soeGZlciwgeGZlcl9vdGhlcikpIHsKKwkJRFBSSU5URigic3RhbGwgY2xlYXJl ZFxuIik7CisJCXNjLT5zY19mbGFncyAmPSB+VUJUX0ZMQUdfUkVBRF9TVEFMTDsKKwkJdXNiMl90 cmFuc2Zlcl9zdGFydCh4ZmVyX290aGVyKTsKKwl9IGVsc2UKKwkJTkdfTk9ERV9VTlJFRihub2Rl KTsgLyogY2FudCBjbGVhciBzdGFsbCAqLworfSAvKiB1YnRfYnVsa19yZWFkX2NsZWFyX3N0YWxs X2NhbGxiYWNrICovCiAKLQl1c2IyX3RyYW5zZmVyX3N0YXJ0KHNjLT5zY194ZmVyX2lmXzBbMV0p OworLyoKKyAqIENhbGxlZCB3aGVuIG91dGdvaW5nIGJ1bGsgdHJhbnNmZXIgKEFDTCBwYWNrZXQp IGhhcyBjb21wbGV0ZWQsIGkuZS4KKyAqIEFDTCBwYWNrZXQgd2FzIHNlbnQgdG8gdGhlIGRldmlj ZS4KKyAqIFVTQiBjb250ZXh0LgorICovCiAKLQltdHhfdW5sb2NrKCZzYy0+c2NfbXR4KTsKLX0K LQogc3RhdGljIHZvaWQKIHVidF9idWxrX3dyaXRlX2NhbGxiYWNrKHN0cnVjdCB1c2IyX3hmZXIg KnhmZXIpCiB7Ci0Jc3RydWN0IHVidF9zb2Z0YyAqc2MgPSB4ZmVyLT5wcml2X3NjOwotCXN0cnVj dCBtYnVmICptOworCW5vZGVfcAkJCW5vZGUgPSB4ZmVyLT5wcml2X3NjOworCXN0cnVjdCB1YnRf c29mdGMJKnNjOworCXN0cnVjdCBtYnVmCQkqbTsKIAorCWlmIChOR19OT0RFX05PVF9WQUxJRChu b2RlKSkgeworCQlOR19OT0RFX1VOUkVGKG5vZGUpOworCQlyZXR1cm47IC8qIG5ldGdyYXBoIG5v ZGUgaXMgZ29uZSAqLworCX0KKworCXNjID0gTkdfTk9ERV9QUklWQVRFKG5vZGUpOworCiAJc3dp dGNoIChVU0JfR0VUX1NUQVRFKHhmZXIpKSB7CiAJY2FzZSBVU0JfU1RfVFJBTlNGRVJSRUQ6Ci0J CU5HX1VCVF9JTkZPKHNjLCAic2VudCAlZCBieXRlcyB0byBidWxrLW91dCAiCi0JCSAgICAicGlw ZVxuIiwgeGZlci0+YWN0bGVuKTsKLQkJTkdfVUJUX1NUQVRfQllURVNfU0VOVChzYy0+c2Nfc3Rh dCwgeGZlci0+YWN0bGVuKTsKLQkJTkdfVUJUX1NUQVRfUENLVFNfU0VOVChzYy0+c2Nfc3RhdCk7 CisJCWlmICh4ZmVyLT5lcnJvciAhPSAwKQorCQkJVUJUX1NUQVRfT0VSUk9SKHNjKTsKKwkJZWxz ZSB7CisJCQlVQlRfSU5GTyhzYywgInNlbnQgJWQgYnl0ZXMgdG8gYnVsay1vdXQgcGlwZVxuIiwK KwkJCQl4ZmVyLT5hY3RsZW4pOwogCi0JY2FzZSBVU0JfU1RfU0VUVVA6Ci0JCWlmIChzYy0+c2Nf ZmxhZ3MgJiBVQlRfRkxBR19XUklURV9TVEFMTCkgewotCQkJdXNiMl90cmFuc2Zlcl9zdGFydChz Yy0+c2NfeGZlcl9pZl8wWzRdKTsKLQkJCXJldHVybjsKKwkJCVVCVF9TVEFUX0JZVEVTX1NFTlQo c2MsIHhmZXItPmFjdGxlbik7CisJCQlVQlRfU1RBVF9QQ0tUU19TRU5UKHNjKTsKIAkJfQotCQkv KiBnZXQgbmV4dCBtYnVmLCBpZiBhbnkgKi8KKwkJLyogRkFMTFRIUk9VR0ggKi8KIAorCWNhc2Ug VVNCX1NUX1NFVFVQOgorCQkvKiBHZXQgbmV4dCBtYnVmLCBpZiBhbnkgKi8KKwkJVUJUX01CVUZR X0xPQ0soc2MpOwogCQlOR19CVF9NQlVGUV9ERVFVRVVFKCZzYy0+c2NfYWNscSwgbSk7CisJCVVC VF9NQlVGUV9VTkxPQ0soc2MpOwogCiAJCWlmIChtID09IE5VTEwpIHsKLQkJCU5HX1VCVF9JTkZP KHNjLCAiQUNMIGRhdGEgcXVldWUgaXMgZW1wdHlcbiIpOwotCQkJcmV0dXJuOworCQkJVUJUX0lO Rk8oc2MsICJBQ0wgZGF0YSBxdWV1ZSBpcyBlbXB0eVxuIik7CisJCQlOR19OT0RFX1VOUkVGKG5v ZGUpOworCQkJcmV0dXJuOyAvKiB0cmFuc2ZlciBjb21wbGV0ZWQgKi8KIAkJfQorCiAJCS8qCi0J CSAqIGNoZWNrIEFDTCBkYXRhIGZyYW1lIHNpemUgYW5kCi0JCSAqIGNvcHkgaXQgYmFjayB0byBh IGxpbmVhciBVU0IKLQkJICogdHJhbnNmZXIgYnVmZmVyOgorCQkgKiBDb3B5IEFDTCBkYXRhIGZy YW1lIGJhY2sgdG8gYSBsaW5lYXIgVVNCIHRyYW5zZmVyIGJ1ZmZlcgorCQkgKiBhbmQgc2NoZWR1 bGUgdHJhbnNmZXIKIAkJICovCiAKLQkJaWYgKG0tPm1fcGt0aGRyLmxlbiA+IFVCVF9CVUxLX1dS SVRFX0JVRkZFUl9TSVpFKSB7Ci0JCQlwYW5pYygiQUNMIGRhdGEgZnJhbWUgdG9vIGJpZywgc2l6 ZT0lZCwgbGVuPSVkXG4iLAotCQkJICAgIFVCVF9CVUxLX1dSSVRFX0JVRkZFUl9TSVpFLAotCQkJ ICAgIG0tPm1fcGt0aGRyLmxlbik7Ci0JCX0KIAkJdXNiMl9tX2NvcHlfaW4oeGZlci0+ZnJidWZm ZXJzLCAwLCBtLCAwLCBtLT5tX3BrdGhkci5sZW4pOworCQl4ZmVyLT5mcmxlbmd0aHNbMF0gPSBt LT5tX3BrdGhkci5sZW47CiAKLQkJTkdfVUJUX0lORk8oc2MsICJidWxrLW91dCB0cmFuc2ZlciBo YXMgYmVlbiBzdGFydGVkLCAiCi0JCSAgICAibGVuPSVkXG4iLCBtLT5tX3BrdGhkci5sZW4pOwor CQlVQlRfSU5GTyhzYywgImJ1bGstb3V0IHRyYW5zZmVyIGhhcyBiZWVuIHN0YXJ0ZWQsIGxlbj0l ZFxuIiwKKwkJCW0tPm1fcGt0aGRyLmxlbik7CiAKLQkJeGZlci0+ZnJsZW5ndGhzWzBdID0gbS0+ bV9wa3RoZHIubGVuOwotCiAJCU5HX0ZSRUVfTShtKTsKIAogCQl1c2IyX3N0YXJ0X2hhcmR3YXJl KHhmZXIpOwotCQlyZXR1cm47CisJCWJyZWFrOwogCi0JZGVmYXVsdDoJCQkvKiBFcnJvciAqLwor CWRlZmF1bHQ6IC8qIEVycm9yICovCiAJCWlmICh4ZmVyLT5lcnJvciAhPSBVU0JfRVJSX0NBTkNF TExFRCkgeworCQkJVUJUX1dBUk4oc2MsICJidWxrLW91dCB0cmFuc2ZlciBmYWlsZWQ6ICVzXG4i LAorCQkJCXVzYjJfZXJyc3RyKHhmZXItPmVycm9yKSk7CiAKLQkJCU5HX1VCVF9XQVJOKHNjLCAi YnVsay1vdXQgdHJhbnNmZXIgZmFpbGVkOiAlc1xuIiwKLQkJCSAgICB1c2IyX2VycnN0cih4ZmVy LT5lcnJvcikpOworCQkJVUJUX1NUQVRfT0VSUk9SKHNjKTsKIAotCQkJTkdfVUJUX1NUQVRfT0VS Uk9SKHNjLT5zY19zdGF0KTsKLQogCQkJLyogdHJ5IHRvIGNsZWFyIHN0YWxsIGZpcnN0ICovCiAJ CQlzYy0+c2NfZmxhZ3MgfD0gVUJUX0ZMQUdfV1JJVEVfU1RBTEw7Ci0JCQl1c2IyX3RyYW5zZmVy X3N0YXJ0KHNjLT5zY194ZmVyX2lmXzBbNF0pOwotCQl9Ci0JCXJldHVybjsKLQorCQkJdXNiMl90 cmFuc2Zlcl9zdGFydChzYy0+c2NfeGZlcltVQlRfSUZfMF9CVUxLX0NTX1dSXSk7CisJCX0gZWxz ZQorCQkJTkdfTk9ERV9VTlJFRihub2RlKTsgLyogY2FuY2VsbGVkICovCisJCWJyZWFrOwogCX0K LX0KK30gLyogdWJ0X2J1bGtfd3JpdGVfY2FsbGJhY2sgKi8KIAorLyoKKyAqIENhbGxlZCB3aGVu IG91dGdvaW5nIGNvbnRyb2wgdHJhbnNmZXIgaW5pdGlhdGVkIHRvIGNsZWFyIHN0YWxsIG9uCisg KiBvdXRnb2luZyBidWxrIHBpcGUgaGFzIGNvbXBsZXRlZC4KKyAqIFVTQiBjb250ZXh0LgorICov CisKIHN0YXRpYyB2b2lkCiB1YnRfYnVsa193cml0ZV9jbGVhcl9zdGFsbF9jYWxsYmFjayhzdHJ1 Y3QgdXNiMl94ZmVyICp4ZmVyKQogewotCXN0cnVjdCB1YnRfc29mdGMgKnNjID0geGZlci0+cHJp dl9zYzsKLQlzdHJ1Y3QgdXNiMl94ZmVyICp4ZmVyX290aGVyID0gc2MtPnNjX3hmZXJfaWZfMFsw XTsKKwlub2RlX3AJCQlub2RlID0geGZlci0+cHJpdl9zYzsKKwlzdHJ1Y3QgdWJ0X3NvZnRjCSpz YzsKKwlzdHJ1Y3QgdXNiMl94ZmVyCSp4ZmVyX290aGVyOwogCisJaWYgKE5HX05PREVfTk9UX1ZB TElEKG5vZGUpKSB7CisJCU5HX05PREVfVU5SRUYobm9kZSk7CisJCXJldHVybjsgLyogbmV0Z3Jh cGggbm9kZSBpcyBnb25lICovCisJfQorCisJc2MgPSBOR19OT0RFX1BSSVZBVEUobm9kZSk7CisJ eGZlcl9vdGhlciA9IHNjLT5zY194ZmVyW1VCVF9JRl8wX0JVTEtfRFRfV1JdOworCiAJaWYgKHVz YjJfY2xlYXJfc3RhbGxfY2FsbGJhY2soeGZlciwgeGZlcl9vdGhlcikpIHsKIAkJRFBSSU5URigi c3RhbGwgY2xlYXJlZFxuIik7CiAJCXNjLT5zY19mbGFncyAmPSB+VUJUX0ZMQUdfV1JJVEVfU1RB TEw7CiAJCXVzYjJfdHJhbnNmZXJfc3RhcnQoeGZlcl9vdGhlcik7Ci0JfQotfQorCX0gZWxzZQor CQlOR19OT0RFX1VOUkVGKG5vZGUpOyAvKiBjYW50IGNsZWFyIHN0YWxsICovCit9IC8qIHVidF9i dWxrX3dyaXRlX2NsZWFyX3N0YWxsX2NhbGxiYWNrICovCiAKKy8qCisgKiBDYWxsZWQgd2hlbiBp bmNvbWluZyBpc29jIHRyYW5zZmVyIChTQ08gcGFja2V0KSBoYXMgY29tcGxldGVkLCBpLmUuCisg KiBTQ08gcGFja2V0IHdhcyByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UuCisgKiBVU0IgY29udGV4 dC4KKyAqLworCiBzdGF0aWMgdm9pZAogdWJ0X2lzb2NfcmVhZF9jYWxsYmFjayhzdHJ1Y3QgdXNi Ml94ZmVyICp4ZmVyKQogewotCXN0cnVjdCB1YnRfc29mdGMgKnNjID0geGZlci0+cHJpdl9zYzsK LQluZ19oY2lfc2NvZGF0YV9wa3RfdCBoZHI7Ci0Jc3RydWN0IG1idWYgKm07Ci0JdWludDhfdCAq cHRyOwotCXVpbnQzMl90IG1heF9sZW47Ci0JdWludDMyX3QgbjsKLQl1aW50MzJfdCBvZmZzZXQ7 CisJbm9kZV9wCQkJbm9kZSA9IHhmZXItPnByaXZfc2M7CisJc3RydWN0IHVidF9zb2Z0Ywkqc2M7 CisJaW50CQkJbjsKIAotCXN3aXRjaCAoVVNCX0dFVF9TVEFURSh4ZmVyKSkgewotCWNhc2UgVVNC X1NUX1RSQU5TRkVSUkVEOgotdHJfdHJhbnNmZXJyZWQ6Ci0JCW9mZnNldCA9IDA7CisJaWYgKE5H X05PREVfTk9UX1ZBTElEKG5vZGUpKSB7CisJCU5HX05PREVfVU5SRUYobm9kZSk7CisJCXJldHVy bjsgLyogbmV0Z3JhcGggbm9kZSBpcyBnb25lICovCisJfQogCi0JCWZvciAobiA9IDA7IG4gPCB4 ZmVyLT5uZnJhbWVzOyBuKyspIHsKKwlzYyA9IE5HX05PREVfUFJJVkFURShub2RlKTsKIAotCQkJ aWYgKHhmZXItPmZybGVuZ3Roc1tuXSA+PSBzaXplb2YoaGRyKSkgeworCWlmICgoc2MtPnNjX2hv b2sgPT0gTlVMTCkgfHwgTkdfSE9PS19OT1RfVkFMSUQoc2MtPnNjX2hvb2spKSB7CisJCVVCVF9J TkZPKHNjLCAibm8gdXBzdHJlYW0gaG9va1xuIik7CisJCU5HX05PREVfVU5SRUYobm9kZSk7CisJ CXJldHVybjsgLyogdXBzdHJlYW0gaG9vayBpcyBnb25lICovCisJfQogCi0JCQkJdXNiMl9jb3B5 X291dCh4ZmVyLT5mcmJ1ZmZlcnMsIG9mZnNldCwKLQkJCQkgICAgJmhkciwgc2l6ZW9mKGhkcikp OworCXN3aXRjaCAoVVNCX0dFVF9TVEFURSh4ZmVyKSkgeworCWNhc2UgVVNCX1NUX1RSQU5TRkVS UkVEOgorCQlmb3IgKG4gPSAwOyBuIDwgeGZlci0+bmZyYW1lczsgbiArKykKKwkJCWlmICh1YnRf aXNvY19yZWFkX29uZV9mcmFtZSh4ZmVyLCBuKSA8IDApCisJCQkJYnJlYWs7CisJCS8qIEZBTExU SFJPVUdIICovCiAKLQkJCQlpZiAoaGRyLmxlbmd0aCA9PSAoeGZlci0+ZnJsZW5ndGhzW25dIC0g c2l6ZW9mKGhkcikpKSB7CisJY2FzZSBVU0JfU1RfU0VUVVA6CityZWFkX25leHQ6CisJCWZvciAo biA9IDA7IG4gPCB4ZmVyLT5uZnJhbWVzOyBuICsrKQorCQkJeGZlci0+ZnJsZW5ndGhzW25dID0g eGZlci0+bWF4X2ZyYW1lX3NpemU7CiAKLQkJCQkJTkdfVUJUX0lORk8oc2MsICJnb3QgY29tcGxl dGUgU0NPIGRhdGEgIgotCQkJCQkgICAgImZyYW1lLCBsZW5ndGg9JWRcbiIsIGhkci5sZW5ndGgp OworCQl1c2IyX3N0YXJ0X2hhcmR3YXJlKHhmZXIpOworCQlicmVhazsKIAotCQkJCQlpZiAoIU5H X0JUX01CVUZRX0ZVTEwoJnNjLT5zY19zY2lxKSkgeworCWRlZmF1bHQ6IC8qIEVycm9yICovCisg ICAgICAgICAgICAgICAgaWYgKHhmZXItPmVycm9yICE9IFVTQl9FUlJfQ0FOQ0VMTEVEKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBVQlRfU1RBVF9JRVJST1Ioc2MpOworICAgICAgICAgICAg ICAgICAgICAgICAgZ290byByZWFkX25leHQ7CisJCQkvKiBOT1QgUkVBQ0hFRCAqLworICAgICAg ICAgICAgICAgIH0KIAotCQkJCQkJLyogYWxsb2NhdGUgYSBuZXcgbWJ1ZiAqLworCQlOR19OT0RF X1VOUkVGKG5vZGUpOyAvKiBjYW5jZWxsZWQgKi8KKwkJYnJlYWs7CisJfQorfSAvKiB1YnRfaXNv Y19yZWFkX2NhbGxiYWNrICovCiAKLQkJCQkJCU1HRVRIRFIobSwgTV9ET05UV0FJVCwgTVRfREFU QSk7CisvKgorICogSGVscGVyIGZ1bmN0aW9uLiBDYWxsZWQgZnJvbSB1YnRfaXNvY19yZWFkX2Nh bGxiYWNrKCkgdG8gcmVhZAorICogU0NPIGRhdGEgZnJvbSBvbmUgZnJhbWUuCisgKiBVU0IgY29u dGV4dC4KKyAqLwogCi0JCQkJCQlpZiAobSA9PSBOVUxMKSB7Ci0JCQkJCQkJZ290byB0cl9zZXR1 cDsKLQkJCQkJCX0KLQkJCQkJCU1DTEdFVChtLCBNX0RPTlRXQUlUKTsKK3N0YXRpYyBpbnQKK3Vi dF9pc29jX3JlYWRfb25lX2ZyYW1lKHN0cnVjdCB1c2IyX3hmZXIgKnhmZXIsIGludCBmcmFtZV9u bykKK3sKKwlzdHJ1Y3QgdWJ0X3NvZnRjCSpzYyA9IHhmZXItPnByaXZfc2M7CisJc3RydWN0IG1i dWYJCSptOworCWludAkJCWxlbiwgd2FudCwgZ290LCBlcnJvcjsKIAotCQkJCQkJaWYgKCEobS0+ bV9mbGFncyAmIE1fRVhUKSkgewotCQkJCQkJCU5HX0ZSRUVfTShtKTsKLQkJCQkJCQlnb3RvIHRy X3NldHVwOwotCQkJCQkJfQotCQkJCQkJLyoKLQkJCQkJCSAqIGZpeCBTQ08gZGF0YSBmcmFtZSBo ZWFkZXIKLQkJCQkJCSAqIGlmIHJlcXVpcmVkCi0JCQkJCQkgKi8KKwkvKiBHZXQgZXhpc3Rpbmcg U0NPIHJlYXNzZW1ibHkgYnVmZmVyICovCisJbSA9IHNjLT5zY19pc29jX2luX2J1ZmZlcjsKKwlz Yy0+c2NfaXNvY19pbl9idWZmZXIgPSBOVUxMOwogCi0JCQkJCQlpZiAoIShzYy0+c2NfZmxhZ3Mg JiBVQlRfSEFWRV9GUkFNRV9UWVBFKSkgewotCQkJCQkJCSptdG9kKG0sIHVpbnQ4X3QgKik9IE5H X0hDSV9TQ09fREFUQV9QS1Q7Ci0JCQkJCQkJbS0+bV9wa3RoZHIubGVuID0gbS0+bV9sZW4gPSAx OwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQltLT5tX3BrdGhkci5sZW4gPSBtLT5tX2xlbiA9IDA7 Ci0JCQkJCQl9CisJLyogV2hpbGUgd2UgaGF2ZSBkYXRhIGluIHRoZSBmcmFtZSAqLworCXdoaWxl ICgobGVuID0geGZlci0+ZnJsZW5ndGhzW2ZyYW1lX25vXSkgPiAwKSB7CisJCWlmIChtID09IE5V TEwpIHsKKwkJCS8qIFN0YXJ0IG5ldyByZWFzc2VtYmx5IGJ1ZmZlciAqLworCQkJTUdFVEhEUiht LCBNX0RPTlRXQUlULCBNVF9EQVRBKTsKKwkJCWlmIChtID09IE5VTEwpIHsKKwkJCQlVQlRfU1RB VF9JRVJST1Ioc2MpOworCQkJCXJldHVybiAoLTEpOwkvKiBYWFggb3V0IG9mIHN5bmMhICovCisJ CQl9CiAKLQkJCQkJCW1heF9sZW4gPSAoTUNMQllURVMgLSBtLT5tX2xlbik7Ci0KLQkJCQkJCWlm ICh4ZmVyLT5mcmxlbmd0aHNbbl0gPiBtYXhfbGVuKSB7Ci0JCQkJCQkJeGZlci0+ZnJsZW5ndGhz W25dID0gbWF4X2xlbjsKLQkJCQkJCX0KLQkJCQkJCXB0ciA9ICgodWludDhfdCAqKShtLT5tX2Rh dGEpKSArIG0tPm1fbGVuOwotCi0JCQkJCQl1c2IyX2NvcHlfb3V0Ci0JCQkJCQkgICAgKHhmZXIt PmZyYnVmZmVycywgb2Zmc2V0LAotCQkJCQkJICAgIHB0ciwgeGZlci0+ZnJsZW5ndGhzW25dKTsK LQotCQkJCQkJbS0+bV9wa3RoZHIubGVuICs9IHhmZXItPmZybGVuZ3Roc1tuXTsKLQkJCQkJCW0t Pm1fbGVuICs9IHhmZXItPmZybGVuZ3Roc1tuXTsKLQotCQkJCQkJTkdfQlRfTUJVRlFfRU5RVUVV RSgmc2MtPnNjX3NjaXEsIG0pOwotCQkJCQl9Ci0JCQkJfQorCQkJTUNMR0VUKG0sIE1fRE9OVFdB SVQpOworCQkJaWYgKCEobS0+bV9mbGFncyAmIE1fRVhUKSkgeworCQkJCVVCVF9TVEFUX0lFUlJP UihzYyk7CisJCQkJTkdfRlJFRV9NKG0pOworCQkJCXJldHVybiAoLTEpOwkvKiBYWFggb3V0IG9m IHN5bmMhICovCiAJCQl9Ci0JCQlvZmZzZXQgKz0geGZlci0+bWF4X2ZyYW1lX3NpemU7Ci0JCX0K IAotCWNhc2UgVVNCX1NUX1NFVFVQOgotdHJfc2V0dXA6CisJCQkvKiBFeHBlY3QgU0NPIGhlYWRl ciAqLworCQkJKm10b2QobSwgdWludDhfdCAqKSA9IE5HX0hDSV9TQ09fREFUQV9QS1Q7CisJCQlt LT5tX3BrdGhkci5sZW4gPSBtLT5tX2xlbiA9IGdvdCA9IDE7CisJCQl3YW50ID0gc2l6ZW9mKG5n X2hjaV9zY29kYXRhX3BrdF90KTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBDaGVjayBpZiB3 ZSBoYXZlIFNDTyBoZWFkZXIgYW5kIGlmIHNvIAorCQkJICogYWRqdXN0IGFtb3VudCBvZiBkYXRh IHdlIHdhbnQKKwkJCSAqLworCQkJZ290ID0gbS0+bV9wa3RoZHIubGVuOworCQkJd2FudCA9IHNp emVvZihuZ19oY2lfc2NvZGF0YV9wa3RfdCk7CiAKLQkJaWYgKE5HX0JUX01CVUZRX0xFTigmc2Mt PnNjX3NjaXEpID4gMCkgewotCQkJbmdfc2VuZF9mbihzYy0+c2Nfbm9kZSwgTlVMTCwgdWJ0X2lz b2NfcmVhZF9jb21wbGV0ZSwgTlVMTCwgMCk7CisJCQlpZiAoZ290ID49IHdhbnQpCisJCQkJd2Fu dCArPSBtdG9kKG0sIG5nX2hjaV9zY29kYXRhX3BrdF90ICopLT5sZW5ndGg7CiAJCX0KLQkJZm9y IChuID0gMDsgbiA8IHhmZXItPm5mcmFtZXM7IG4rKykgewotCQkJeGZlci0+ZnJsZW5ndGhzW25d ID0geGZlci0+bWF4X2ZyYW1lX3NpemU7Ci0JCX0KIAotCQl1c2IyX3N0YXJ0X2hhcmR3YXJlKHhm ZXIpOwotCQlyZXR1cm47CisJCS8qIEFwcGVuZCBmcmFtZSBkYXRhIHRvIHRoZSBTQ08gcmVhc3Nl bWJseSBidWZmZXIgKi8KKwkJaWYgKGdvdCArIGxlbiA+IHdhbnQpCisJCQlsZW4gPSB3YW50IC0g Z290OwogCi0JZGVmYXVsdDoJCQkvKiBFcnJvciAqLwotCQlpZiAoeGZlci0+ZXJyb3IgPT0gVVNC X0VSUl9DQU5DRUxMRUQpIHsKLQkJCS8qIGlnbm9yZSAqLwotCQkJcmV0dXJuOwotCQl9Ci0JCWdv dG8gdHJfdHJhbnNmZXJyZWQ7Ci0JfQotfQorCQl1c2IyX2NvcHlfb3V0KHhmZXItPmZyYnVmZmVy cywgZnJhbWVfbm8gKiB4ZmVyLT5tYXhfZnJhbWVfc2l6ZSwKKwkJCW10b2QobSwgdWludDhfdCAq KSArIG0tPm1fcGt0aGRyLmxlbiwgbGVuKTsKIAotc3RhdGljIHZvaWQKLXVidF9pc29jX3JlYWRf Y29tcGxldGUobm9kZV9wIG5vZGUsIGhvb2tfcCBob29rLCB2b2lkICphcmcxLCBpbnQgYXJnMikK LXsKLQl1YnRfc29mdGNfcCBzYyA9IE5HX05PREVfUFJJVkFURShub2RlKTsKLQlzdHJ1Y3QgbWJ1 ZiAqbTsKLQlpbnQgZXJyb3I7CisJCW0tPm1fcGt0aGRyLmxlbiArPSBsZW47CisJCW0tPm1fbGVu ICs9IGxlbjsKKwkJeGZlci0+ZnJsZW5ndGhzW2ZyYW1lX25vXSAtPSBsZW47CiAKLQlpZiAoc2Mg PT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCW10eF9sb2NrKCZzYy0+c2NfbXR4KTsKKwkJLyog Q2hlY2sgaWYgd2UgZ290IGV2ZXJ5dGhpbmcgd2Ugd2FudGVkLCBpZiBub3QgLSBjb250aW51ZSAq LworCQlpZiAoZ290ICE9IHdhbnQpCisJCQljb250aW51ZTsKIAotCXdoaWxlICgxKSB7CisJCS8q IElmIHdlIGdvdCBoZXJlIHRoZW4gd2UgZ290IGNvbXBsZXRlIFNDTyBmcmFtZSAqLworCQlVQlRf SU5GTyhzYywgImdvdCBjb21wbGV0ZSBTQ08gZGF0YSBmcmFtZSwgcGt0bGVuPSVkLCAiIFwKKwkJ CSJsZW5ndGg9JWRcbiIsIG0tPm1fcGt0aGRyLmxlbiwKKwkJCW10b2QobSwgbmdfaGNpX3Njb2Rh dGFfcGt0X3QgKiktPmxlbmd0aCk7CiAKLQkJTkdfQlRfTUJVRlFfREVRVUVVRSgmc2MtPnNjX3Nj aXEsIG0pOworCQlVQlRfU1RBVF9QQ0tUU19SRUNWKHNjKTsKKwkJVUJUX1NUQVRfQllURVNfUkVD VihzYywgbS0+bV9wa3RoZHIubGVuKTsKIAotCQlpZiAobSA9PSBOVUxMKSB7Ci0JCQlicmVhazsK LQkJfQotCQlpZiAoc2MtPnNjX2hvb2sgPT0gTlVMTCB8fCBOR19IT09LX05PVF9WQUxJRChzYy0+ c2NfaG9vaykpIHsKLQkJCU5HX1VCVF9JTkZPKHNjLCAiTm8gdXBzdHJlYW0gaG9va1xuIik7Ci0J CQlnb3RvIGRvbmU7Ci0JCX0KLQkJTkdfVUJUX0lORk8oc2MsICJHb3QgY29tcGxldGUgU0NPIGRh dGEgZnJhbWUsICIKLQkJICAgICJwa3RsZW49JWQgYnl0ZXNcbiIsIG0tPm1fcGt0aGRyLmxlbik7 CisJCU5HX1NFTkRfREFUQV9PTkxZKGVycm9yLCBzYy0+c2NfaG9vaywgbSk7CisJCWlmIChlcnJv ciAhPSAwKQorCQkJVUJUX1NUQVRfSUVSUk9SKHNjKTsKIAotCQlOR19VQlRfU1RBVF9QQ0tUU19S RUNWKHNjLT5zY19zdGF0KTsKLQkJTkdfVUJUX1NUQVRfQllURVNfUkVDVihzYy0+c2Nfc3RhdCwg bS0+bV9wa3RoZHIubGVuKTsKKwkJLyogbSA9PSBOVUxMIGF0IHRoaXMgcG9pbnQgKi8KKwl9CiAK LQkJTkdfU0VORF9EQVRBX09OTFkoZXJyb3IsIHNjLT5zY19ob29rLCBtKTsKKwkvKiBQdXQgU0NP IHJlYXNzZW1ibHkgYnVmZmVyIGJhY2sgKi8KKwlzYy0+c2NfaXNvY19pbl9idWZmZXIgPSBtOwog Ci0JCW0gPSBOVUxMOworCXJldHVybiAoMCk7Cit9IC8qIHVidF9pc29jX3JlYWRfb25lX2ZyYW1l ICovCiAKLQkJaWYgKGVycm9yKSB7Ci0JCQlOR19VQlRfU1RBVF9JRVJST1Ioc2MtPnNjX3N0YXQp OwotCQl9Ci1kb25lOgotCQlpZiAobSkgewotCQkJTkdfRlJFRV9NKG0pOwotCQl9Ci0JfQorLyoK KyAqIENhbGxlZCB3aGVuIG91dGdvaW5nIGlzb2MgdHJhbnNmZXIgKFNDTyBwYWNrZXQpIGhhcyBj b21wbGV0ZWQsIGkuZS4KKyAqIFNDTyBwYWNrZXQgd2FzIHNlbnQgdG8gdGhlIGRldmljZS4KKyAq IFVTQiBjb250ZXh0LgorICovCiAKLQltdHhfdW5sb2NrKCZzYy0+c2NfbXR4KTsKLX0KLQogc3Rh dGljIHZvaWQKIHVidF9pc29jX3dyaXRlX2NhbGxiYWNrKHN0cnVjdCB1c2IyX3hmZXIgKnhmZXIp CiB7Ci0Jc3RydWN0IHVidF9zb2Z0YyAqc2MgPSB4ZmVyLT5wcml2X3NjOwotCXN0cnVjdCBtYnVm ICptOwotCXVpbnQzMl90IG47Ci0JdWludDMyX3QgbGVuOwotCXVpbnQzMl90IG9mZnNldDsKKwlu b2RlX3AJCQlub2RlID0geGZlci0+cHJpdl9zYzsKKwlzdHJ1Y3QgdWJ0X3NvZnRjCSpzYzsKKwlz dHJ1Y3QgbWJ1ZgkJKm07CisJaW50CQkJbiwgc3BhY2UsIG9mZnNldDsKIAorCWlmIChOR19OT0RF X05PVF9WQUxJRChub2RlKSkgeworCQlOR19OT0RFX1VOUkVGKG5vZGUpOworCQlyZXR1cm47IC8q IG5ldGdyYXBoIG5vZGUgaXMgZ29uZSAqLworCX0KKworCXNjID0gTkdfTk9ERV9QUklWQVRFKG5v ZGUpOworCiAJc3dpdGNoIChVU0JfR0VUX1NUQVRFKHhmZXIpKSB7CiAJY2FzZSBVU0JfU1RfVFJB TlNGRVJSRUQ6Ci10cl90cmFuc2ZlcnJlZDoKLQkJaWYgKHhmZXItPmVycm9yKSB7Ci0JCQlOR19V QlRfU1RBVF9PRVJST1Ioc2MtPnNjX3N0YXQpOwotCQl9IGVsc2UgewotCQkJTkdfVUJUX1NUQVRf QllURVNfU0VOVChzYy0+c2Nfc3RhdCwgeGZlci0+YWN0bGVuKTsKLQkJCU5HX1VCVF9TVEFUX1BD S1RTX1NFTlQoc2MtPnNjX3N0YXQpOworCQlpZiAoeGZlci0+ZXJyb3IpCisJCQlVQlRfU1RBVF9P RVJST1Ioc2MpOworCQllbHNlIHsKKwkJCVVCVF9JTkZPKHNjLCAic2VudCAlZCBieXRlcyB0byBp c29jLW91dCBwaXBlXG4iLAorCQkJCXhmZXItPmFjdGxlbik7CisKKwkJCVVCVF9TVEFUX0JZVEVT X1NFTlQoc2MsIHhmZXItPmFjdGxlbik7CisJCQlVQlRfU1RBVF9QQ0tUU19TRU5UKHNjKTsKIAkJ fQorCQkvKiBGQUxMVEhST1VHSCAqLwogCiAJY2FzZSBVU0JfU1RfU0VUVVA6CitzZW5kX25leHQ6 CiAJCW9mZnNldCA9IDA7CisJCXNwYWNlID0geGZlci0+bWF4X2ZyYW1lX3NpemUgKiB4ZmVyLT5u ZnJhbWVzOworCQltID0gTlVMTDsKIAotCQlmb3IgKG4gPSAwOyBuIDwgeGZlci0+bmZyYW1lczsg bisrKSB7CisJCXdoaWxlIChzcGFjZSA+IDApIHsKKwkJCWlmIChtID09IE5VTEwpIHsKKwkJCQlV QlRfTUJVRlFfTE9DSyhzYyk7CisJCQkJTkdfQlRfTUJVRlFfREVRVUVVRSgmc2MtPnNjX3Njb3Es IG0pOworCQkJCVVCVF9NQlVGUV9VTkxPQ0soc2MpOwogCi0JCQlOR19CVF9NQlVGUV9ERVFVRVVF KCZzYy0+c2Nfc2NvcSwgbSk7CisJCQkJaWYgKG0gPT0gTlVMTCkKKwkJCQkJYnJlYWs7CisJCQl9 CiAKLQkJCWlmIChtKSB7Ci0JCQkJbGVuID0gbWluKHhmZXItPm1heF9mcmFtZV9zaXplLCBtLT5t X3BrdGhkci5sZW4pOworCQkJbiA9IG1pbihzcGFjZSwgbS0+bV9wa3RoZHIubGVuKTsKKwkJCWlm IChuID4gMCkgeworCQkJCXVzYjJfbV9jb3B5X2luKHhmZXItPmZyYnVmZmVycywgb2Zmc2V0LCBt LDAsIG4pOworCQkJCW1fYWRqKG0sIG4pOwogCi0JCQkJdXNiMl9tX2NvcHlfaW4oeGZlci0+ZnJi dWZmZXJzLCBvZmZzZXQsIG0sIDAsIGxlbik7CisJCQkJb2Zmc2V0ICs9IG47CisJCQkJc3BhY2Ug LT0gbjsKKwkJCX0KIAotCQkJCU5HX0ZSRUVfTShtKTsKKwkJCWlmIChtLT5tX3BrdGhkci5sZW4g PT0gMCkKKwkJCQlOR19GUkVFX00obSk7IC8qIHNldHMgbSA9IE5VTEwgKi8KKwkJfQogCi0JCQkJ eGZlci0+ZnJsZW5ndGhzW25dID0gbGVuOwotCQkJCW9mZnNldCArPSBsZW47Ci0JCQl9IGVsc2Ug ewotCQkJCXhmZXItPmZybGVuZ3Roc1tuXSA9IDA7Ci0JCQl9CisJCS8qIFB1dCB3aGF0ZXZlciBp cyBsZWZ0IGZyb20gbWJ1ZiBiYWNrIG9uIHF1ZXVlICovCisJCWlmIChtICE9IE5VTEwpIHsKKwkJ CVVCVF9NQlVGUV9MT0NLKHNjKTsKKwkJCU5HX0JUX01CVUZRX1BSRVBFTkQoJnNjLT5zY19zY29x LCBtKTsKKwkJCVVCVF9NQlVGUV9VTkxPQ0soc2MpOwogCQl9CiAKKwkJLyoKKwkJICogQ2FsY3Vs YXRlIHNpemVzIGZvciBpc29jIGZyYW1lcy4KKwkJICogTm90ZSB0aGF0IG9mZnNldCBjb3VsZCBi ZSAwIGF0IHRoaXMgcG9pbnQgKGkuZS4gd2UgaGF2ZQorCQkgKiBub3RoaW5nIHRvIHNlbmQpLiBU aGF0IGlzIGZpbmUsIGFzIHdlIGhhdmUgaXNvYy4gdHJhbnNmZXJzCisJCSAqIGdvaW5nIGluIGJv dGggZGlyZWN0aW9ucyBhbGwgdGhlIHRpbWUuIEluIHRoaXMgY2FzZSBpdAorCQkgKiB3b3VsZCBi ZSBqdXN0IGVtcHR5IGlzb2MuIHRyYW5zZmVyLgorCQkgKi8KKworCQlmb3IgKG4gPSAwOyBuIDwg eGZlci0+bmZyYW1lczsgbiArKykgeworCQkJeGZlci0+ZnJsZW5ndGhzW25dID0gbWluKG9mZnNl dCwgeGZlci0+bWF4X2ZyYW1lX3NpemUpOworCQkJb2Zmc2V0IC09IHhmZXItPmZybGVuZ3Roc1tu XTsKKwkJfQorCiAJCXVzYjJfc3RhcnRfaGFyZHdhcmUoeGZlcik7Ci0JCXJldHVybjsKKwkJYnJl YWs7CiAKLQlkZWZhdWx0OgkJCS8qIEVycm9yICovCi0JCWlmICh4ZmVyLT5lcnJvciA9PSBVU0Jf RVJSX0NBTkNFTExFRCkgewotCQkJLyogaWdub3JlICovCi0JCQlyZXR1cm47CisJZGVmYXVsdDog LyogRXJyb3IgKi8KKwkJaWYgKHhmZXItPmVycm9yICE9IFVTQl9FUlJfQ0FOQ0VMTEVEKSB7CisJ CQlVQlRfU1RBVF9PRVJST1Ioc2MpOworCQkJZ290byBzZW5kX25leHQ7CisJCQkvKiBOT1QgUkVB Q0hFRCAqLwogCQl9Ci0JCWdvdG8gdHJfdHJhbnNmZXJyZWQ7CisKKwkJTkdfTk9ERV9VTlJFRihu b2RlKTsgLyogY2FuY2VsbGVkICovCisJCWJyZWFrOwogCX0KIH0KIAogLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiogICAgICAgICAgICAgICAgICAgICAgICBO ZXRncmFwaCBzcGVjaWZpYworICoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x1 ZSAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAq IE5ldGdyYXBoIG5vZGUgY29uc3RydWN0b3IuCi0gKiBEbyBub3QgYWxsb3cgdG8gY3JlYXRlIG5v ZGUgb2YgdGhpcyB0eXBlOgorICogU2NoZWR1bGUgZ2x1ZSB0YXNrLiBTaG91bGQgYmUgY2FsbGVk IHdpdGggc2NfbWJ1ZnFfbXR4IGhlbGQuCisgKiBOZXRncmFwaCBjb250ZXh0LgogICovCiAKIHN0 YXRpYyBpbnQKLW5nX3VidF9jb25zdHJ1Y3Rvcihub2RlX3Agbm9kZSkKK3VidF90YXNrX3NjaGVk dWxlKHVidF9zb2Z0Y19wIHNjLCBpbnQgYWN0aW9uKQogewotCXJldHVybiAoRUlOVkFMKTsKLX0K KwltdHhfYXNzZXJ0KCZzYy0+c2NfbWJ1ZnFfbXR4LCBNQV9PV05FRCk7CiAKKwlpZiAoKHNjLT5z Y190YXNrX2ZsYWdzICYgYWN0aW9uKSA9PSAwKSB7CisJCS8qCisJCSAqIFRyeSB0byBoYW5kbGUg Y29ybmVyIGNhc2Ugd2hlbiAic3RhcnQgYWxsIiBhbmQgInN0b3AgYWxsIgorCQkgKiBhY3Rpb25z IGNhbiBib3RoIGJlIHNldCBiZWZvcmUgdGFzayBpcyBleGVjdXRlZC4KKwkJICoKKwkJICogQXNz dW1lIHRoZSBmb2xsb3dpbmc6CisJCSAqIDEpICJzdG9wIGFsbCIgYWZ0ZXIgInN0YXJ0IGFsbCIg Y2FuY2VscyAic3RhcnQgYWxsIiwgYW5kLAorCQkgKiAgICBrZWVwcyAic3RvcCBhbGwiCisJCSAq CisJCSAqIDIpICJzdGFydCBhbGwiIGFmdGVyICJzdG9wIGFsbCIgaXMgZmluZSBiZWNhdXNlIHRh c2sgaXMKKwkJICogICAgZXhlY3V0aW5nICJzdG9wIGFsbCIgZmlyc3QKKwkJICovCisKKwkJaWYg KGFjdGlvbiA9PSBVQlRfRkxBR19UX1NUT1BfQUxMICYmCisJCSAgICAoc2MtPnNjX3Rhc2tfZmxh Z3MgJiBVQlRfRkxBR19UX1NUQVJUX0FMTCkgIT0gMCkKKwkJCXNjLT5zY190YXNrX2ZsYWdzICY9 IH5VQlRfRkxBR19UX1NUQVJUX0FMTDsKKworCQlzYy0+c2NfdGFza19mbGFncyB8PSBhY3Rpb247 CisJfQorCisJaWYgKHNjLT5zY190YXNrX2ZsYWdzICYgVUJUX0ZMQUdfVF9QRU5ESU5HKQorCQly ZXR1cm4gKDEpOworCisJaWYgKHRhc2txdWV1ZV9lbnF1ZXVlKHRhc2txdWV1ZV9zd2ksICZzYy0+ c2NfdGFzaykgPT0gMCkgeworCQlOR19OT0RFX1JFRihzYy0+c2Nfbm9kZSk7CisJCXNjLT5zY190 YXNrX2ZsYWdzIHw9IFVCVF9GTEFHX1RfUEVORElORzsKKwkJcmV0dXJuICgxKTsKKwl9CisKKwkv KiBYWFg6IGkgdGhpbmsgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisKKwlyZXR1cm4gKDAp OworfSAvKiB1YnRfdGFza19zY2hlZHVsZSAqLworCiAvKgotICogTmV0Z3JhcGggbm9kZSBkZXN0 cnVjdG9yLgotICogRGVzdHJveSBub2RlIG9ubHkgd2hlbiBkZXZpY2UgaGFzIGJlZW4gZGV0YWNo ZWQ6CisgKiBHbHVlIHRhc2suIEV4YW1pbmVzIHNjX3Rhc2tfZmxhZ3MgYW5kIGRvZXMgdGhpbmdz IGRlcGVuZGluZyBvbiBpdC4KKyAqIFRhc2txdWV1ZSBjb250ZXh0LgogICovCiAKLXN0YXRpYyBp bnQKLW5nX3VidF9zaHV0ZG93bihub2RlX3Agbm9kZSkKK3N0YXRpYyB2b2lkCit1YnRfdGFzayh2 b2lkICpjb250ZXh0LCBpbnQgcGVuZGluZykKIHsKLQlzdHJ1Y3QgdWJ0X3NvZnRjICpzYyA9IE5H X05PREVfUFJJVkFURShub2RlKTsKKwlub2RlX3AJCW5vZGUgPSBjb250ZXh0OworCXVidF9zb2Z0 Y19wCXNjOworCWludAkJdGFza19mbGFnczsKIAotCS8qIExldCBvbGQgbm9kZSBnbyAqLwotCU5H X05PREVfU0VUX1BSSVZBVEUobm9kZSwgTlVMTCk7Ci0JTkdfTk9ERV9VTlJFRihub2RlKTsKKwlp ZiAoTkdfTk9ERV9OT1RfVkFMSUQobm9kZSkpIHsKKwkJTkdfTk9ERV9VTlJFRihub2RlKTsKKwkJ cmV0dXJuOyAvKiBuZXRncmFwaCBub2RlIGlzIGdvbmUgKi8KKwl9CiAKLQlpZiAoc2MgPT0gTlVM TCkgewotCQlnb3RvIGRvbmU7CisJc2MgPSBOR19OT0RFX1BSSVZBVEUobm9kZSk7CisKKwlVQlRf TUJVRlFfTE9DSyhzYyk7CisJdGFza19mbGFncyA9IHNjLT5zY190YXNrX2ZsYWdzOworCXNjLT5z Y190YXNrX2ZsYWdzID0gMDsKKwlVQlRfTUJVRlFfVU5MT0NLKHNjKTsKKworCS8qIFN0b3AgYWxs IFVTQiB0cmFuc2ZlcnMgKi8KKwlpZiAodGFza19mbGFncyAmIFVCVF9GTEFHX1RfU1RPUF9BTEwp IHsKKwkJaW50CWk7CisKKwkJLyoKKwkJICogSW50ZXJmYWNlICMwCisJCSAqLworCisJCW10eF9s b2NrKCZzYy0+c2NfaWZfbXR4WzBdKTsKKworCQlmb3IgKGkgPSBVQlRfSUZfMF9CVUxLX0RUX1dS OyBpIDwgVUJUX0lGXzBfTl9UUkFOU0ZFUjsgaSArKykKKwkJCXVzYjJfdHJhbnNmZXJfc3RvcChz Yy0+c2NfeGZlcltpXSk7CisKKwkJbXR4X3VubG9jaygmc2MtPnNjX2lmX210eFswXSk7CisKKwkJ LyoKKwkJICogSW50ZXJmYWNlICMxCisJCSAqLworCisJCW10eF9sb2NrKCZzYy0+c2NfaWZfbXR4 WzFdKTsKKworCQlmb3IgKGkgPSBVQlRfSUZfMV9JU09DX0RUX1JEMTsgaSA8IFVCVF9OX1RSQU5T RkVSOyBpICsrKSAKKwkJCXVzYjJfdHJhbnNmZXJfc3RvcChzYy0+c2NfeGZlcltpXSk7CisKKwkJ bXR4X3VubG9jaygmc2MtPnNjX2lmX210eFsxXSk7CiAJfQotCW10eF9sb2NrKCZzYy0+c2NfbXR4 KTsKIAotCS8qIENyZWF0ZSBOZXRncmFwaCBub2RlICovCi0JaWYgKG5nX21ha2Vfbm9kZV9jb21t b24oJnR5cGVzdHJ1Y3QsICZzYy0+c2Nfbm9kZSkgIT0gMCkgewotCQlwcmludGYoIiVzOiBDb3Vs ZCBub3QgY3JlYXRlIE5ldGdyYXBoIG5vZGVcbiIsCi0JCSAgICBzYy0+c2NfbmFtZSk7Ci0JCXNj LT5zY19ub2RlID0gTlVMTDsKLQkJZ290byBkb25lOworCS8qIFN0YXJ0IGFsbCBpbmNvbWluZyBV U0IgdHJhbnNmZXJzICovCisJaWYgKHRhc2tfZmxhZ3MgJiBVQlRfRkxBR19UX1NUQVJUX0FMTCkg eworCQkvKgorCQkgKiBJbnRlcmZhY2UgIzAKKwkJICovCisKKwkJbXR4X2xvY2soJnNjLT5zY19p Zl9tdHhbMF0pOworCQl1YnRfeGZlcl9zdGFydChzYywgVUJUX0lGXzBfSU5UUl9EVF9SRCk7CisJ CXVidF94ZmVyX3N0YXJ0KHNjLCBVQlRfSUZfMF9CVUxLX0RUX1JEKTsKKwkJbXR4X3VubG9jaygm c2MtPnNjX2lmX210eFswXSk7CisKKwkJLyoKKwkJICogSW50ZXJmYWNlICMxCisJCSAqIFN0YXJ0 IGJvdGggcmVhZCBhbmQgd3JpdGUgaXNvYy4gdHJhbnNmZXJzIGJ5IGRlZmF1bHQuCisJCSAqIEdl dCB0aGVtIGdvaW5nIGFsbCB0aGUgdGltZSBldmVuIGlmIHdlIGhhdmUgbm90aGluZworCQkgKiB0 byBzZW5kIHRvIGF2b2lkIGFueSBkZWxheXMuCisJCSAqLworCisJCW10eF9sb2NrKCZzYy0+c2Nf aWZfbXR4WzFdKTsKKwkJdWJ0X3hmZXJfc3RhcnQoc2MsIFVCVF9JRl8xX0lTT0NfRFRfUkQxKTsK KwkJdWJ0X3hmZXJfc3RhcnQoc2MsIFVCVF9JRl8xX0lTT0NfRFRfUkQyKTsKKwkJdWJ0X3hmZXJf c3RhcnQoc2MsIFVCVF9JRl8xX0lTT0NfRFRfV1IxKTsKKwkJdWJ0X3hmZXJfc3RhcnQoc2MsIFVC VF9JRl8xX0lTT0NfRFRfV1IyKTsKKwkJbXR4X3VubG9jaygmc2MtPnNjX2lmX210eFsxXSk7CiAJ fQotCS8qIE5hbWUgbm9kZSAqLwotCWlmIChuZ19uYW1lX25vZGUoc2MtPnNjX25vZGUsIHNjLT5z Y19uYW1lKSAhPSAwKSB7Ci0JCXByaW50ZigiJXM6IENvdWxkIG5vdCBuYW1lIE5ldGdyYXBoIG5v ZGVcbiIsCi0JCSAgICBzYy0+c2NfbmFtZSk7Ci0JCU5HX05PREVfVU5SRUYoc2MtPnNjX25vZGUp OwotCQlzYy0+c2Nfbm9kZSA9IE5VTEw7Ci0JCWdvdG8gZG9uZTsKKworIAkvKiBTdGFydCBvdXRn b2luZyBjb250cm9sIHRyYW5zZmVyICovCisJaWYgKHRhc2tfZmxhZ3MgJiBVQlRfRkxBR19UX1NU QVJUX0NUUkwpIHsKKwkJbXR4X2xvY2soJnNjLT5zY19pZl9tdHhbMF0pOworCQl1YnRfeGZlcl9z dGFydChzYywgVUJUX0lGXzBfQ1RSTF9EVF9XUik7CisJCW10eF91bmxvY2soJnNjLT5zY19pZl9t dHhbMF0pOwogCX0KLQlOR19OT0RFX1NFVF9QUklWQVRFKHNjLT5zY19ub2RlLCBzYyk7Ci0JTkdf Tk9ERV9GT1JDRV9XUklURVIoc2MtPnNjX25vZGUpOwogCi1kb25lOgotCWlmIChzYykgewotCQlt dHhfdW5sb2NrKCZzYy0+c2NfbXR4KTsKKwkvKiBTdGFydCBvdXRnb2luZyBidWxrIHRyYW5zZmVy ICovCisJaWYgKHRhc2tfZmxhZ3MgJiBVQlRfRkxBR19UX1NUQVJUX0JVTEspIHsKKwkJbXR4X2xv Y2soJnNjLT5zY19pZl9tdHhbMF0pOworCQl1YnRfeGZlcl9zdGFydChzYywgVUJUX0lGXzBfQlVM S19EVF9XUik7CisJCW10eF91bmxvY2soJnNjLT5zY19pZl9tdHhbMF0pOwogCX0KLQlyZXR1cm4g KDApOwotfQogCisJTkdfTk9ERV9VTlJFRihub2RlKTsKK30gLyogdWJ0X3Rhc2sgKi8KKwogLyoK LSAqIENyZWF0ZSBuZXcgaG9vay4KLSAqIFRoZXJlIGNhbiBvbmx5IGJlIG9uZS4KKyAqIFN0YXJ0 IFVTQiB0cmFuc2Zlci4KKyAqIEhlbHBlciBmdW5jdGlvbiBjYWxsZWQgZnJvbSB1YnRfdGFzay4g TXVzdCBiZSBjYWxsZWQgd2l0aCBhcHByb3ByaWF0ZQorICogaW50ZXJmYWNlIGxvY2sgaGVsZC4K KyAqIFRhc2txdWV1ZSBjb250ZXh0LgogICovCiAKLXN0YXRpYyBpbnQKLW5nX3VidF9uZXdob29r KG5vZGVfcCBub2RlLCBob29rX3AgaG9vaywgY2hhciBjb25zdCAqbmFtZSkKK3N0YXRpYyB2b2lk Cit1YnRfeGZlcl9zdGFydCh1YnRfc29mdGNfcCBzYywgaW50IHRyYW5zZmVyKQogewotCXN0cnVj dCB1YnRfc29mdGMgKnNjID0gTkdfTk9ERV9QUklWQVRFKG5vZGUpOwotCWludCBlcnJvciA9IDA7 Ci0KLQlpZiAoc3RyY21wKG5hbWUsIE5HX1VCVF9IT09LKSAhPSAwKSB7Ci0JCXJldHVybiAoRUlO VkFMKTsKKwlpZiAoIXVzYjJfdHJhbnNmZXJfcGVuZGluZyhzYy0+c2NfeGZlclt0cmFuc2Zlcl0p KSB7CisJCU5HX05PREVfUkVGKHNjLT5zY19ub2RlKTsKKwkJdXNiMl90cmFuc2Zlcl9zdGFydChz Yy0+c2NfeGZlclt0cmFuc2Zlcl0pOwogCX0KLQltdHhfbG9jaygmc2MtPnNjX210eCk7Cit9IC8q IHVidF94ZmVyX3N0YXJ0ICovCiAKLQlpZiAoc2MtPnNjX2hvb2sgIT0gTlVMTCkgewotCQllcnJv ciA9IEVJU0NPTk47Ci0JfSBlbHNlIHsKLQkJc2MtPnNjX2hvb2sgPSBob29rOwotCX0KKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqICAgICAgICAgICAgICAg ICAgICAgICAgTmV0Z3JhcGggc3BlY2lmaWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KIAotCW10eF91bmxvY2soJnNjLT5zY19tdHgpOworLyoKKyAqIE5ldGdy YXBoIG5vZGUgY29uc3RydWN0b3IuIERvIG5vdCBhbGxvdyB0byBjcmVhdGUgbm9kZSBvZiB0aGlz IHR5cGUuCisgKiBOZXRncmFwaCBjb250ZXh0LgorICovCiAKLQlyZXR1cm4gKGVycm9yKTsKLX0K K3N0YXRpYyBpbnQKK25nX3VidF9jb25zdHJ1Y3Rvcihub2RlX3Agbm9kZSkKK3sKKwlyZXR1cm4g KEVJTlZBTCk7Cit9IC8qIG5nX3VidF9jb25zdHJ1Y3RvciAqLwogCiAvKgotICogQ29ubmVjdCBo b29rLgotICogU3RhcnQgaW5jb21pbmcgVVNCIHRyYW5zZmVycworICogTmV0Z3JhcGggbm9kZSBk ZXN0cnVjdG9yLiBEZXN0cm95IG5vZGUgb25seSB3aGVuIGRldmljZSBoYXMgYmVlbiBkZXRhY2hl ZC4KKyAqIE5ldGdyYXBoIGNvbnRleHQuCiAgKi8KIAogc3RhdGljIGludAotbmdfdWJ0X2Nvbm5l Y3QoaG9va19wIGhvb2spCituZ191YnRfc2h1dGRvd24obm9kZV9wIG5vZGUpCiB7Ci0Jc3RydWN0 IHVidF9zb2Z0YyAqc2MgPSBOR19OT0RFX1BSSVZBVEUoTkdfSE9PS19OT0RFKGhvb2spKTsKKwlp ZiAobm9kZS0+bmRfZmxhZ3MgJiBOR0ZfUkVBTExZX0RJRSkgeworCQkvKgorICAgICAgICAgICAg ICAgICAqIFdlIGNhbWUgaGVyZSBiZWNhdXNlIHRoZSBVU0IgZGV2aWNlIGlzIGJlaW5nCisJCSAq IGRldGFjaGVkLCBzbyBzdG9wIGJlaW5nIHBlcnNpc3RhbnQuCisgICAgICAgICAgICAgICAgICov CisJCU5HX05PREVfU0VUX1BSSVZBVEUobm9kZSwgTlVMTCk7CisJCU5HX05PREVfVU5SRUYobm9k ZSk7CisJfSBlbHNlCisJCU5HX05PREVfUkVWSVZFKG5vZGUpOyAvKiB0ZWxsIG5nX3Jtbm9kZSB3 ZSBhcmUgcGVyc2lzYW50ICovCiAKLQlOR19IT09LX0ZPUkNFX1FVRVVFKE5HX0hPT0tfUEVFUiho b29rKSk7CisJcmV0dXJuICgwKTsKK30gLyogbmdfdWJ0X3NodXRkb3duICovCiAKLQltdHhfbG9j aygmc2MtPnNjX210eCk7CisvKgorICogQ3JlYXRlIG5ldyBob29rLiBUaGVyZSBjYW4gb25seSBi ZSBvbmUuCisgKiBOZXRncmFwaCBjb250ZXh0LgorICovCiAKLQlzYy0+c2NfZmxhZ3MgfD0gKFVC VF9GTEFHX1JFQURfU1RBTEwgfAotCSAgICBVQlRfRkxBR19XUklURV9TVEFMTCB8Ci0JICAgIFVC VF9GTEFHX0lOVFJfU1RBTEwpOworc3RhdGljIGludAorbmdfdWJ0X25ld2hvb2sobm9kZV9wIG5v ZGUsIGhvb2tfcCBob29rLCBjaGFyIGNvbnN0ICpuYW1lKQoreworCXN0cnVjdCB1YnRfc29mdGMJ KnNjID0gTkdfTk9ERV9QUklWQVRFKG5vZGUpOwogCi0JLyogc3RhcnQgaW50ciB0cmFuc2ZlciAq LwotCXVzYjJfdHJhbnNmZXJfc3RhcnQoc2MtPnNjX3hmZXJfaWZfMFsyXSk7CisJaWYgKHN0cmNt cChuYW1lLCBOR19VQlRfSE9PSykgIT0gMCkKKwkJcmV0dXJuIChFSU5WQUwpOwogCi0JLyogc3Rh cnQgYnVsay1pbiB0cmFuc2ZlciAqLwotCXVzYjJfdHJhbnNmZXJfc3RhcnQoc2MtPnNjX3hmZXJf aWZfMFsxXSk7CisJaWYgKHNjLT5zY19ob29rICE9IE5VTEwpCisJCXJldHVybiAoRUlTQ09OTik7 CiAKLQkvKiBzdGFydCBidWxrLW91dCB0cmFuc2ZlciAqLwotCXVzYjJfdHJhbnNmZXJfc3RhcnQo c2MtPnNjX3hmZXJfaWZfMFswXSk7CisJc2MtPnNjX2hvb2sgPSBob29rOwogCi0JLyogc3RhcnQg Y29udHJvbC1vdXQgdHJhbnNmZXIgKi8KLQl1c2IyX3RyYW5zZmVyX3N0YXJ0KHNjLT5zY194ZmVy X2lmXzBbM10pOwotI2lmIDAKLQlYWFggY2FuIGVuYWJsZSB0aGlzIFhYWAorCXJldHVybiAoMCk7 Cit9IC8qIG5nX3VidF9uZXdob29rICovCiAKLQkvKiBzdGFydCBpc29jLWluIHRyYW5zZmVyICov Ci0JICAgICB1c2IyX3RyYW5zZmVyX3N0YXJ0KHNjLT5zY194ZmVyX2lmXzFbMF0pOworLyoKKyAq IENvbm5lY3QgaG9vay4gU3RhcnQgaW5jb21pbmcgVVNCIHRyYW5zZmVycy4KKyAqIE5ldGdyYXBo IGNvbnRleHQuCisgKi8KIAotCXVzYjJfdHJhbnNmZXJfc3RhcnQoc2MtPnNjX3hmZXJfaWZfMVsx XSk7CitzdGF0aWMgaW50CituZ191YnRfY29ubmVjdChob29rX3AgaG9vaykKK3sKKwlzdHJ1Y3Qg dWJ0X3NvZnRjCSpzYyA9IE5HX05PREVfUFJJVkFURShOR19IT09LX05PREUoaG9vaykpOwogCi0J Lyogc3RhcnQgaXNvYy1vdXQgdHJhbnNmZXIgKi8KLQl1c2IyX3RyYW5zZmVyX3N0YXJ0KHNjLT5z Y194ZmVyX2lmXzFbMl0pOwotCXVzYjJfdHJhbnNmZXJfc3RhcnQoc2MtPnNjX3hmZXJfaWZfMVsz XSk7Ci0jZW5kaWYKKwlOR19IT09LX0ZPUkNFX1FVRVVFKE5HX0hPT0tfUEVFUihob29rKSk7CiAK LQltdHhfdW5sb2NrKCZzYy0+c2NfbXR4KTsKKwlVQlRfTUJVRlFfTE9DSyhzYyk7CisJdWJ0X3Rh c2tfc2NoZWR1bGUoc2MsIFVCVF9GTEFHX1RfU1RBUlRfQUxMKTsKKwlVQlRfTUJVRlFfVU5MT0NL KHNjKTsKIAogCXJldHVybiAoMCk7Ci19Cit9IC8qIG5nX3VidF9jb25uZWN0ICovCiAKIC8qCi0g KiBEaXNjb25uZWN0IGhvb2sKKyAqIERpc2Nvbm5lY3QgaG9vay4KKyAqIE5ldGdyYXBoIGNvbnRl eHQuCiAgKi8KIAogc3RhdGljIGludAogbmdfdWJ0X2Rpc2Nvbm5lY3QoaG9va19wIGhvb2spCiB7 Ci0Jc3RydWN0IHVidF9zb2Z0YyAqc2MgPSBOR19OT0RFX1BSSVZBVEUoTkdfSE9PS19OT0RFKGhv b2spKTsKLQlpbnQgZXJyb3IgPSAwOworCW5vZGVfcAkJCW5vZGUgPSBOR19IT09LX05PREUoaG9v ayk7CisJc3RydWN0IHVidF9zb2Z0Ywkqc2M7CiAKLQlpZiAoc2MgIT0gTlVMTCkgeworCWlmIChO R19OT0RFX05PVF9WQUxJRChub2RlKSkKKwkJcmV0dXJuICgwKTsKIAotCQltdHhfbG9jaygmc2Mt PnNjX210eCk7CisJc2MgPSBOR19OT0RFX1BSSVZBVEUobm9kZSk7CiAKLQkJaWYgKGhvb2sgIT0g c2MtPnNjX2hvb2spIHsKLQkJCWVycm9yID0gRUlOVkFMOwotCQl9IGVsc2UgeworCWlmIChob29r ICE9IHNjLT5zY19ob29rKQorCQlyZXR1cm4gKEVJTlZBTCk7CiAKLQkJCS8qIHN0b3AgaW50ciB0 cmFuc2ZlciAqLwotCQkJdXNiMl90cmFuc2Zlcl9zdG9wKHNjLT5zY194ZmVyX2lmXzBbMl0pOwot CQkJdXNiMl90cmFuc2Zlcl9zdG9wKHNjLT5zY194ZmVyX2lmXzBbNl0pOworCXNjLT5zY19ob29r ID0gTlVMTDsKIAotCQkJLyogc3RvcCBidWxrLWluIHRyYW5zZmVyICovCi0JCQl1c2IyX3RyYW5z ZmVyX3N0b3Aoc2MtPnNjX3hmZXJfaWZfMFsxXSk7Ci0JCQl1c2IyX3RyYW5zZmVyX3N0b3Aoc2Mt PnNjX3hmZXJfaWZfMFs1XSk7CisJVUJUX01CVUZRX0xPQ0soc2MpOwogCi0JCQkvKiBzdG9wIGJ1 bGstb3V0IHRyYW5zZmVyICovCi0JCQl1c2IyX3RyYW5zZmVyX3N0b3Aoc2MtPnNjX3hmZXJfaWZf MFswXSk7Ci0JCQl1c2IyX3RyYW5zZmVyX3N0b3Aoc2MtPnNjX3hmZXJfaWZfMFs0XSk7CisJLyog RHJhaW4gcXVldWVzICovCisJTkdfQlRfTUJVRlFfRFJBSU4oJnNjLT5zY19jbWRxKTsKKwlOR19C VF9NQlVGUV9EUkFJTigmc2MtPnNjX2FjbHEpOworCU5HX0JUX01CVUZRX0RSQUlOKCZzYy0+c2Nf c2NvcSk7CiAKLQkJCS8qIHN0b3AgY29udHJvbCB0cmFuc2ZlciAqLwotCQkJdXNiMl90cmFuc2Zl cl9zdG9wKHNjLT5zY194ZmVyX2lmXzBbM10pOworCS8qIEtpY2sgb2ZmIHRhc2sgdG8gc3RvcCBh bGwgVVNCIHhmZXJzICovCisJdWJ0X3Rhc2tfc2NoZWR1bGUoc2MsIFVCVF9GTEFHX1RfU1RPUF9B TEwpOwogCi0JCQkvKiBzdG9wIGlzb2MtaW4gdHJhbnNmZXIgKi8KLQkJCXVzYjJfdHJhbnNmZXJf c3RvcChzYy0+c2NfeGZlcl9pZl8xWzBdKTsKLQkJCXVzYjJfdHJhbnNmZXJfc3RvcChzYy0+c2Nf eGZlcl9pZl8xWzFdKTsKKwlVQlRfTUJVRlFfVU5MT0NLKHNjKTsKIAotCQkJLyogc3RvcCBpc29j LW91dCB0cmFuc2ZlciAqLwotCQkJdXNiMl90cmFuc2Zlcl9zdG9wKHNjLT5zY194ZmVyX2lmXzFb Ml0pOwotCQkJdXNiMl90cmFuc2Zlcl9zdG9wKHNjLT5zY194ZmVyX2lmXzFbM10pOwotCi0JCQkv KiBjbGVhbnVwIHF1ZXVlcyAqLwotCQkJTkdfQlRfTUJVRlFfRFJBSU4oJnNjLT5zY19jbWRxKTsK LQkJCU5HX0JUX01CVUZRX0RSQUlOKCZzYy0+c2NfYWNscSk7Ci0JCQlOR19CVF9NQlVGUV9EUkFJ Tigmc2MtPnNjX3Njb3EpOwotCQkJTkdfQlRfTUJVRlFfRFJBSU4oJnNjLT5zY19zY2lxKTsKLQot CQkJc2MtPnNjX2hvb2sgPSBOVUxMOwotCQl9Ci0KLQkJbXR4X3VubG9jaygmc2MtPnNjX210eCk7 Ci0JfQotCXJldHVybiAoZXJyb3IpOwotfQotCisJcmV0dXJuICgwKTsKK30gLyogbmdfdWJ0X2Rp c2Nvbm5lY3QgKi8KKwkKIC8qCi0gKiBQcm9jZXNzIGNvbnRyb2wgbWVzc2FnZQorICogUHJvY2Vz cyBjb250cm9sIG1lc3NhZ2UuCisgKiBOZXRncmFwaCBjb250ZXh0LgogICovCiAKIHN0YXRpYyBp bnQKIG5nX3VidF9yY3Ztc2cobm9kZV9wIG5vZGUsIGl0ZW1fcCBpdGVtLCBob29rX3AgbGFzdGhv b2spCiB7Ci0Jc3RydWN0IHVidF9zb2Z0YyAqc2MgPSBOR19OT0RFX1BSSVZBVEUobm9kZSk7Ci0J c3RydWN0IG5nX21lc2cgKm1zZyA9IE5VTEwsICpyc3AgPSBOVUxMOwotCXN0cnVjdCBuZ19idF9t YnVmcSAqcSA9IE5VTEw7Ci0JaW50IGVycm9yID0gMCwgcXVldWUsIHFsZW47CisJc3RydWN0IHVi dF9zb2Z0Ywkqc2MgPSBOR19OT0RFX1BSSVZBVEUobm9kZSk7CisJc3RydWN0IG5nX21lc2cJCSpt c2csICpyc3AgPSBOVUxMOworCXN0cnVjdCBuZ19idF9tYnVmcQkqcTsKKwlpbnQJCQllcnJvciA9 IDAsIHF1ZXVlLCBxbGVuOwogCi0JaWYgKHNjID09IE5VTEwpIHsKLQkJTkdfRlJFRV9JVEVNKGl0 ZW0pOwotCQlyZXR1cm4gKEVIT1NURE9XTik7Ci0JfQotCW10eF9sb2NrKCZzYy0+c2NfbXR4KTsK LQogCU5HSV9HRVRfTVNHKGl0ZW0sIG1zZyk7CiAKIAlzd2l0Y2ggKG1zZy0+aGVhZGVyLnR5cGVj b29raWUpIHsKQEAgLTE1MjcsMjUgKzE2NTUsMzEgQEAKIAkJc3dpdGNoIChtc2ctPmhlYWRlci5j bWQpIHsKIAkJY2FzZSBOR01fVEVYVF9TVEFUVVM6CiAJCQlOR19NS1JFU1BPTlNFKHJzcCwgbXNn LCBOR19URVhUUkVTUE9OU0UsIE1fTk9XQUlUKTsKLQkJCWlmIChyc3AgPT0gTlVMTCkKKwkJCWlm IChyc3AgPT0gTlVMTCkgewogCQkJCWVycm9yID0gRU5PTUVNOwotCQkJZWxzZQotCQkJCXNucHJp bnRmKHJzcC0+ZGF0YSwgTkdfVEVYVFJFU1BPTlNFLAotCQkJCSAgICAiSG9vazogJXNcbiIgXAot CQkJCSAgICAiRmxhZ3M6ICUjeFxuIiBcCi0JCQkJICAgICJEZWJ1ZzogJWRcbiIgXAotCQkJCSAg ICAiQ01EIHF1ZXVlOiBbaGF2ZTolZCxtYXg6JWRdXG4iIFwKLQkJCQkgICAgIkFDTCBxdWV1ZTog W2hhdmU6JWQsbWF4OiVkXVxuIiBcCi0JCQkJICAgICJTQ08gcXVldWU6IFtoYXZlOiVkLG1heDol ZF0iLAotCQkJCSAgICAoc2MtPnNjX2hvb2sgIT0gTlVMTCkgPyBOR19VQlRfSE9PSyA6ICIiLAot CQkJCSAgICBzYy0+c2NfZmxhZ3MsCi0JCQkJICAgIHNjLT5zY19kZWJ1ZywKLQkJCQkgICAgTkdf QlRfTUJVRlFfTEVOKCZzYy0+c2NfY21kcSksCi0JCQkJICAgIHNjLT5zY19jbWRxLm1heGxlbiwK LQkJCQkgICAgTkdfQlRfTUJVRlFfTEVOKCZzYy0+c2NfYWNscSksCi0JCQkJICAgIHNjLT5zY19h Y2xxLm1heGxlbiwKLQkJCQkgICAgTkdfQlRfTUJVRlFfTEVOKCZzYy0+c2Nfc2NvcSksCi0JCQkJ ICAgIHNjLT5zY19zY29xLm1heGxlbik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXNucHJpbnRm KHJzcC0+ZGF0YSwgTkdfVEVYVFJFU1BPTlNFLAorCQkJCSJSZWZzOiAlZFxuIiBcCisJCQkJIkhv b2s6ICVzXG4iIFwKKwkJCQkiRmxhZ3M6ICUjeFxuIiBcCisJCQkJIlRhc2sgZmxhZ3M6ICUjeFxu IiBcCisJCQkJIkRlYnVnOiAlZFxuIiBcCisJCQkJIkNNRCBxdWV1ZTogW2hhdmU6JWQsbWF4OiVk XVxuIiBcCisJCQkJIkFDTCBxdWV1ZTogW2hhdmU6JWQsbWF4OiVkXVxuIiBcCisJCQkJIlNDTyBx dWV1ZTogW2hhdmU6JWQsbWF4OiVkXSIsCisJCQkJbm9kZS0+bmRfcmVmcywKKwkJCQkoc2MtPnNj X2hvb2sgIT0gTlVMTCkgPyBOR19VQlRfSE9PSzoiIiwKKwkJCQlzYy0+c2NfZmxhZ3MsCisJCQkJ c2MtPnNjX3Rhc2tfZmxhZ3MsCisJCQkJc2MtPnNjX2RlYnVnLAorCQkJCXNjLT5zY19jbWRxLmxl biwKKwkJCQlzYy0+c2NfY21kcS5tYXhsZW4sCisJCQkJc2MtPnNjX2FjbHEubGVuLAorCQkJCXNj LT5zY19hY2xxLm1heGxlbiwKKwkJCQlzYy0+c2Nfc2NvcS5sZW4sCisJCQkJc2MtPnNjX3Njb3Eu bWF4bGVuKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0xNTU3LDU5ICsxNjkxLDU0IEBA CiAJY2FzZSBOR01fVUJUX0NPT0tJRToKIAkJc3dpdGNoIChtc2ctPmhlYWRlci5jbWQpIHsKIAkJ Y2FzZSBOR01fVUJUX05PREVfU0VUX0RFQlVHOgotCQkJaWYgKG1zZy0+aGVhZGVyLmFyZ2xlbiAh PSBzaXplb2YobmdfdWJ0X25vZGVfZGVidWdfZXApKQorCQkJaWYgKG1zZy0+aGVhZGVyLmFyZ2xl biAhPSBzaXplb2YobmdfdWJ0X25vZGVfZGVidWdfZXApKXsKIAkJCQllcnJvciA9IEVNU0dTSVpF OwotCQkJZWxzZQotCQkJCXNjLT5zY19kZWJ1ZyA9Ci0JCQkJICAgICooKG5nX3VidF9ub2RlX2Rl YnVnX2VwICopIChtc2ctPmRhdGEpKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc2MtPnNjX2Rl YnVnID0gKigobmdfdWJ0X25vZGVfZGVidWdfZXAgKikgKG1zZy0+ZGF0YSkpOwogCQkJYnJlYWs7 CiAKIAkJY2FzZSBOR01fVUJUX05PREVfR0VUX0RFQlVHOgogCQkJTkdfTUtSRVNQT05TRShyc3As IG1zZywgc2l6ZW9mKG5nX3VidF9ub2RlX2RlYnVnX2VwKSwKIAkJCSAgICBNX05PV0FJVCk7Ci0J CQlpZiAocnNwID09IE5VTEwpCisJCQlpZiAocnNwID09IE5VTEwpIHsKIAkJCQllcnJvciA9IEVO T01FTTsKLQkJCWVsc2UKLQkJCQkqKChuZ191YnRfbm9kZV9kZWJ1Z19lcCAqKSAocnNwLT5kYXRh KSkgPQotCQkJCSAgICBzYy0+c2NfZGVidWc7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCSooKG5n X3VidF9ub2RlX2RlYnVnX2VwICopIChyc3AtPmRhdGEpKSA9IHNjLT5zY19kZWJ1ZzsKIAkJCWJy ZWFrOwogCiAJCWNhc2UgTkdNX1VCVF9OT0RFX1NFVF9RTEVOOgotCQkJaWYgKG1zZy0+aGVhZGVy LmFyZ2xlbiAhPSBzaXplb2YobmdfdWJ0X25vZGVfcWxlbl9lcCkpCisJCQlpZiAobXNnLT5oZWFk ZXIuYXJnbGVuICE9IHNpemVvZihuZ191YnRfbm9kZV9xbGVuX2VwKSkgewogCQkJCWVycm9yID0g RU1TR1NJWkU7Ci0JCQllbHNlIHsKLQkJCQlxdWV1ZSA9ICgobmdfdWJ0X25vZGVfcWxlbl9lcCAq KQotCQkJCSAgICAobXNnLT5kYXRhKSktPnF1ZXVlOwotCQkJCXFsZW4gPSAoKG5nX3VidF9ub2Rl X3FsZW5fZXAgKikKLQkJCQkgICAgKG1zZy0+ZGF0YSkpLT5xbGVuOworCQkJCWJyZWFrOworCQkJ fQogCi0JCQkJaWYgKHFsZW4gPD0gMCkgewotCQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQkJYnJl YWs7Ci0JCQkJfQotCQkJCXN3aXRjaCAocXVldWUpIHsKLQkJCQljYXNlIE5HTV9VQlRfTk9ERV9R VUVVRV9DTUQ6Ci0JCQkJCXEgPSAmc2MtPnNjX2NtZHE7Ci0JCQkJCWJyZWFrOworCQkJcXVldWUg PSAoKG5nX3VidF9ub2RlX3FsZW5fZXAgKikgKG1zZy0+ZGF0YSkpLT5xdWV1ZTsKKwkJCXFsZW4g PSAoKG5nX3VidF9ub2RlX3FsZW5fZXAgKikgKG1zZy0+ZGF0YSkpLT5xbGVuOwogCi0JCQkJY2Fz ZSBOR01fVUJUX05PREVfUVVFVUVfQUNMOgotCQkJCQlxID0gJnNjLT5zY19hY2xxOwotCQkJCQli cmVhazsKKwkJCXN3aXRjaCAocXVldWUpIHsKKwkJCWNhc2UgTkdNX1VCVF9OT0RFX1FVRVVFX0NN RDoKKwkJCQlxID0gJnNjLT5zY19jbWRxOworCQkJCWJyZWFrOwogCi0JCQkJY2FzZSBOR01fVUJU X05PREVfUVVFVUVfU0NPOgotCQkJCQlxID0gJnNjLT5zY19zY29xOwotCQkJCQlicmVhazsKKwkJ CWNhc2UgTkdNX1VCVF9OT0RFX1FVRVVFX0FDTDoKKwkJCQlxID0gJnNjLT5zY19hY2xxOworCQkJ CWJyZWFrOwogCi0JCQkJZGVmYXVsdDoKLQkJCQkJcSA9IE5VTEw7Ci0JCQkJCWVycm9yID0gRUlO VkFMOwotCQkJCQlicmVhazsKLQkJCQl9CisJCQljYXNlIE5HTV9VQlRfTk9ERV9RVUVVRV9TQ086 CisJCQkJcSA9ICZzYy0+c2Nfc2NvcTsKKwkJCQlicmVhazsKIAotCQkJCWlmIChxICE9IE5VTEwp IHsKLQkJCQkJcS0+bWF4bGVuID0gcWxlbjsKLQkJCQl9CisJCQlkZWZhdWx0OgorCQkJCWVycm9y ID0gRUlOVkFMOworCQkJCWdvdG8gZG9uZTsKKwkJCQkvKiBOT1QgUkVBQ0hFRCAqLwogCQkJfQor CisJCQlxLT5tYXhsZW4gPSBxbGVuOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBOR01fVUJUX05PREVf R0VUX1FMRU46CkBAIC0xNjE3LDcgKzE3NDYsOSBAQAogCQkJCWVycm9yID0gRU1TR1NJWkU7CiAJ CQkJYnJlYWs7CiAJCQl9CisKIAkJCXF1ZXVlID0gKChuZ191YnRfbm9kZV9xbGVuX2VwICopICht c2ctPmRhdGEpKS0+cXVldWU7CisKIAkJCXN3aXRjaCAocXVldWUpIHsKIAkJCWNhc2UgTkdNX1VC VF9OT0RFX1FVRVVFX0NNRDoKIAkJCQlxID0gJnNjLT5zY19jbWRxOwpAQCAtMTYzMiwzOSArMTc2 MywzNiBAQAogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgotCQkJCXEgPSBOVUxMOwogCQkJCWVy cm9yID0gRUlOVkFMOworCQkJCWdvdG8gZG9uZTsKKwkJCQkvKiBOT1QgUkVBQ0hFRCAqLworCQkJ fQorCisJCQlOR19NS1JFU1BPTlNFKHJzcCwgbXNnLCBzaXplb2YobmdfdWJ0X25vZGVfcWxlbl9l cCksCisJCQkJTV9OT1dBSVQpOworCQkJaWYgKHJzcCA9PSBOVUxMKSB7CisJCQkJZXJyb3IgPSBF Tk9NRU07CiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWlmIChxICE9IE5VTEwpIHsKLQkJCQlOR19N S1JFU1BPTlNFKHJzcCwgbXNnLAotCQkJCSAgICBzaXplb2YobmdfdWJ0X25vZGVfcWxlbl9lcCks IE1fTk9XQUlUKTsKLQkJCQlpZiAocnNwID09IE5VTEwpIHsKLQkJCQkJZXJyb3IgPSBFTk9NRU07 Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQkoKG5nX3VidF9ub2RlX3FsZW5fZXAgKikgKHJzcC0+ ZGF0YSkpLT5xdWV1ZSA9Ci0JCQkJICAgIHF1ZXVlOwotCQkJCSgobmdfdWJ0X25vZGVfcWxlbl9l cCAqKSAocnNwLT5kYXRhKSktPnFsZW4gPQotCQkJCSAgICBxLT5tYXhsZW47Ci0JCQl9CisJCQko KG5nX3VidF9ub2RlX3FsZW5fZXAgKikgKHJzcC0+ZGF0YSkpLT5xdWV1ZSA9IHF1ZXVlOworCQkJ KChuZ191YnRfbm9kZV9xbGVuX2VwICopIChyc3AtPmRhdGEpKS0+cWxlbiA9IHEtPm1heGxlbjsK IAkJCWJyZWFrOwogCiAJCWNhc2UgTkdNX1VCVF9OT0RFX0dFVF9TVEFUOgogCQkJTkdfTUtSRVNQ T05TRShyc3AsIG1zZywgc2l6ZW9mKG5nX3VidF9ub2RlX3N0YXRfZXApLAogCQkJICAgIE1fTk9X QUlUKTsKLQkJCWlmIChyc3AgPT0gTlVMTCkKKwkJCWlmIChyc3AgPT0gTlVMTCkgewogCQkJCWVy cm9yID0gRU5PTUVNOwotCQkJZWxzZSB7Ci0JCQkJYmNvcHkoJnNjLT5zY19zdGF0LCByc3AtPmRh dGEsCi0JCQkJICAgIHNpemVvZihuZ191YnRfbm9kZV9zdGF0X2VwKSk7CisJCQkJYnJlYWs7CiAJ CQl9CisKKwkJCWJjb3B5KCZzYy0+c2Nfc3RhdCwgcnNwLT5kYXRhLAorCQkJCXNpemVvZihuZ191 YnRfbm9kZV9zdGF0X2VwKSk7CiAJCQlicmVhazsKIAogCQljYXNlIE5HTV9VQlRfTk9ERV9SRVNF VF9TVEFUOgotCi0JCQlOR19VQlRfU1RBVF9SRVNFVChzYy0+c2Nfc3RhdCk7CisJCQlVQlRfU1RB VF9SRVNFVChzYyk7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpAQCAtMTY3Nyw5MCArMTgwNSwx NjEgQEAKIAkJZXJyb3IgPSBFSU5WQUw7CiAJCWJyZWFrOwogCX0KLQorZG9uZToKIAlOR19SRVNQ T05EX01TRyhlcnJvciwgbm9kZSwgaXRlbSwgcnNwKTsKIAlOR19GUkVFX01TRyhtc2cpOwogCi0J bXR4X3VubG9jaygmc2MtPnNjX210eCk7Ci0KIAlyZXR1cm4gKGVycm9yKTsKLX0KK30gLyogbmdf dWJ0X3Jjdm1zZyAqLwogCiAvKgotICogUHJvY2VzcyBkYXRhCisgKiBQcm9jZXNzIGRhdGEuCisg KiBOZXRncmFwaCBjb250ZXh0LgogICovCiAKIHN0YXRpYyBpbnQKIG5nX3VidF9yY3ZkYXRhKGhv b2tfcCBob29rLCBpdGVtX3AgaXRlbSkKIHsKLQlzdHJ1Y3QgdWJ0X3NvZnRjICpzYyA9IE5HX05P REVfUFJJVkFURShOR19IT09LX05PREUoaG9vaykpOwotCXN0cnVjdCBtYnVmICptOwotCXN0cnVj dCBuZ19idF9tYnVmcSAqcTsKLQlzdHJ1Y3QgdXNiMl94ZmVyICp4ZmVyOwotCWludCBlcnJvciA9 IDA7CisJc3RydWN0IHVidF9zb2Z0Ywkqc2MgPSBOR19OT0RFX1BSSVZBVEUoTkdfSE9PS19OT0RF KGhvb2spKTsKKwlzdHJ1Y3QgbWJ1ZgkJKm07CisJc3RydWN0IG5nX2J0X21idWZxCSpxOworCWlu dAkJCWFjdGlvbiwgZXJyb3IgPSAwOwogCi0JaWYgKHNjID09IE5VTEwpIHsKLQkJZXJyb3IgPSBF SE9TVERPV047Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JbXR4X2xvY2soJnNjLT5zY19tdHgpOwotCiAJ aWYgKGhvb2sgIT0gc2MtPnNjX2hvb2spIHsKIAkJZXJyb3IgPSBFSU5WQUw7CiAJCWdvdG8gZG9u ZTsKIAl9Ci0JLyogZGVhdGNoIG1idWYgYW5kIGdldCBIQ0kgZnJhbWUgdHlwZSAqLworCisJLyog RGVhdGNoIG1idWYgYW5kIGdldCBIQ0kgZnJhbWUgdHlwZSAqLwogCU5HSV9HRVRfTShpdGVtLCBt KTsKIAotCS8qIHByb2Nlc3MgSENJIGZyYW1lICovCisJLyoKKwkgKiBNaW5pbWFsIHNpemUgb2Yg dGhlIEhDSSBmcmFtZSBpcyA0IGJ5dGVzOiAxIGJ5dGUgZnJhbWUgdHlwZSwKKwkgKiAyIGJ5dGVz IGNvbm5lY3Rpb24gaGFuZGxlIGFuZCBhdCBsZWFzdCAxIGJ5dGUgb2YgbGVuZ3RoLgorCSAqIFBh bmljIG9uIGRhdGEgZnJhbWUgdGhhdCBoYXMgc2l6ZSBzbWFsbGVyIHRoYW4gNCBieXRlcyAoaXQK KwkgKiBzaG91bGQgbm90IGhhcHBlbikKKwkgKi8KKworCWlmIChtLT5tX3BrdGhkci5sZW4gPCA0 KQorCQlwYW5pYygiSENJIGZyYW1lIHNpemUgaXMgdG9vIHNtYWxsISBwa3RsZW49JWRcbiIsCisJ CQltLT5tX3BrdGhkci5sZW4pOworCisJLyogUHJvY2VzcyBIQ0kgZnJhbWUgKi8KIAlzd2l0Y2gg KCptdG9kKG0sIHVpbnQ4X3QgKikpIHsJLyogWFhYIGNhbGwgbV9wdWxsdXAgPyAqLwogCWNhc2Ug TkdfSENJX0NNRF9QS1Q6Ci0JCXhmZXIgPSBzYy0+c2NfeGZlcl9pZl8wWzNdOworCQlpZiAobS0+ bV9wa3RoZHIubGVuIC0gMSA+IFVCVF9DVFJMX0JVRkZFUl9TSVpFKQorCQkJcGFuaWMoIkhDSSBj b21tYW5kIGZyYW1lIHNpemUgaXMgdG9vIGJpZyEgIiBcCisJCQkJImJ1ZmZlciBzaXplPSV6ZCwg cGFja2V0IGxlbj0lZFxuIiwKKwkJCQlVQlRfQ1RSTF9CVUZGRVJfU0laRSwgbS0+bV9wa3RoZHIu bGVuKTsKKwogCQlxID0gJnNjLT5zY19jbWRxOworCQlhY3Rpb24gPSBVQlRfRkxBR19UX1NUQVJU X0NUUkw7CiAJCWJyZWFrOwogCiAJY2FzZSBOR19IQ0lfQUNMX0RBVEFfUEtUOgotCQl4ZmVyID0g c2MtPnNjX3hmZXJfaWZfMFswXTsKKwkJaWYgKG0tPm1fcGt0aGRyLmxlbiAtIDEgPiBVQlRfQlVM S19XUklURV9CVUZGRVJfU0laRSkKKwkJCXBhbmljKCJBQ0wgZGF0YSBmcmFtZSBzaXplIGlzIHRv byBiaWchICIgXAorCQkJCSJidWZmZXIgc2l6ZT0lZCwgcGFja2V0IGxlbj0lZFxuIiwKKwkJCQlV QlRfQlVMS19XUklURV9CVUZGRVJfU0laRSwgbS0+bV9wa3RoZHIubGVuKTsKKwogCQlxID0gJnNj LT5zY19hY2xxOworCQlhY3Rpb24gPSBVQlRfRkxBR19UX1NUQVJUX0JVTEs7CiAJCWJyZWFrOwog CiAJY2FzZSBOR19IQ0lfU0NPX0RBVEFfUEtUOgotCQl4ZmVyID0gTlVMTDsKIAkJcSA9ICZzYy0+ c2Nfc2NvcTsKKwkJYWN0aW9uID0gMDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlOR19VQlRf RVJSKHNjLCAiRHJvcHBpbmcgdW5zdXBwb3J0ZWQgSENJIGZyYW1lLCAiCi0JCSAgICAidHlwZT0w eCUwMngsIHBrdGxlbj0lZFxuIiwKLQkJICAgICptdG9kKG0sIHVpbnQ4X3QgKiksCi0JCSAgICBt LT5tX3BrdGhkci5sZW4pOworCQlVQlRfRVJSKHNjLCAiRHJvcHBpbmcgdW5zdXBwb3J0ZWQgSENJ IGZyYW1lLCB0eXBlPTB4JTAyeCwgIiBcCisJCQkicGt0bGVuPSVkXG4iLCAqbXRvZChtLCB1aW50 OF90ICopLCBtLT5tX3BrdGhkci5sZW4pOwogCiAJCU5HX0ZSRUVfTShtKTsKIAkJZXJyb3IgPSBF SU5WQUw7CiAJCWdvdG8gZG9uZTsKKwkJLyogTk9UIFJFQUNIRUQgKi8KIAl9CiAKLQkvKiBsb29z ZSBmcmFtZSB0eXBlLCBpZiByZXF1aXJlZCAqLwotCWlmICghKHNjLT5zY19mbGFncyAmIFVCVF9O RUVEX0ZSQU1FX1RZUEUpKSB7Ci0JCW1fYWRqKG0sIHNpemVvZih1aW50OF90KSk7Ci0JfQorCVVC VF9NQlVGUV9MT0NLKHNjKTsKIAlpZiAoTkdfQlRfTUJVRlFfRlVMTChxKSkgewotCQlOR19VQlRf RVJSKHNjLCAiRHJvcHBpbmcgSENJIGZyYW1lIDB4JTAyeCwgbGVuPSVkLiAiCi0JCSAgICAiUXVl dWUgZnVsbFxuIiwgKm10b2QobSwgdWludDhfdCAqKSwKLQkJICAgIG0tPm1fcGt0aGRyLmxlbik7 CisJCU5HX0JUX01CVUZRX0RST1AocSk7CisJCVVCVF9NQlVGUV9VTkxPQ0soc2MpOworCQkKKwkJ VUJUX0VSUihzYywgIkRyb3BwaW5nIEhDSSBmcmFtZSAweCUwMngsIGxlbj0lZC4gUXVldWUgZnVs bFxuIiwKKwkJCSptdG9kKG0sIHVpbnQ4X3QgKiksIG0tPm1fcGt0aGRyLmxlbik7CisKIAkJTkdf RlJFRV9NKG0pOwogCX0gZWxzZSB7CisJCS8qIExvb3NlIEhDSSBwYWNrZXQgdHlwZSwgZW5xdWV1 ZSBtYnVmIGFuZCBraWNrIG9mZiB0YXNrICovCisJCW1fYWRqKG0sIHNpemVvZih1aW50OF90KSk7 CiAJCU5HX0JUX01CVUZRX0VOUVVFVUUocSwgbSk7Ci0JfQorCQl1YnRfdGFza19zY2hlZHVsZShz YywgYWN0aW9uKTsKIAotCWlmICh4ZmVyKSB7Ci0JCXVzYjJfdHJhbnNmZXJfc3RhcnQoeGZlcik7 CisJCVVCVF9NQlVGUV9VTkxPQ0soc2MpOwogCX0KIGRvbmU6CiAJTkdfRlJFRV9JVEVNKGl0ZW0p OwogCi0JaWYgKHNjKSB7Ci0JCW10eF91bmxvY2soJnNjLT5zY19tdHgpOworCXJldHVybiAoZXJy b3IpOworfSAvKiBuZ191YnRfcmN2ZGF0YSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKyAqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVs ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICog TG9hZC9VbmxvYWQgdGhlIGRyaXZlciBtb2R1bGUKKyAqLworCitzdGF0aWMgaW50Cit1YnRfbW9k ZXZlbnQobW9kdWxlX3QgbW9kLCBpbnQgZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJaW50CWVycm9y OworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTU9EX0xPQUQ6CisJCWVycm9yID0gbmdfbmV3 dHlwZSgmdHlwZXN0cnVjdCk7CisJCWlmIChlcnJvciAhPSAwKQorCQkJcHJpbnRmKCIlczogQ291 bGQgbm90IHJlZ2lzdGVyIE5ldGdyYXBoIG5vZGUgdHlwZSwgIiBcCisJCQkJImVycm9yPSVkXG4i LCBOR19VQlRfTk9ERV9UWVBFLCBlcnJvcik7CisJCWJyZWFrOworCisJY2FzZSBNT0RfVU5MT0FE OgorCQllcnJvciA9IG5nX3JtdHlwZSgmdHlwZXN0cnVjdCk7CisJCWJyZWFrOworCisJZGVmYXVs dDoKKwkJZXJyb3IgPSBFT1BOT1RTVVBQOworCQlicmVhazsKIAl9CisKIAlyZXR1cm4gKGVycm9y KTsKLX0KK30gLyogdWJ0X21vZGV2ZW50ICovCisKK3N0YXRpYyBkZXZjbGFzc190CXVidF9kZXZj bGFzczsKKworc3RhdGljIGRldmljZV9tZXRob2RfdAl1YnRfbWV0aG9kc1tdID0KK3sKKwlERVZN RVRIT0QoZGV2aWNlX3Byb2JlLAl1YnRfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNo LCB1YnRfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgdWJ0X2RldGFjaCksCisJ eyAwLCAwIH0KK307CisKK3N0YXRpYyBkcml2ZXJfdAkJdWJ0X2RyaXZlciA9Cit7CisJLm5hbWUg PQkgICAidWJ0IiwKKwkubWV0aG9kcyA9IHVidF9tZXRob2RzLAorCS5zaXplID0JICAgc2l6ZW9m KHN0cnVjdCB1YnRfc29mdGMpLAorfTsKKworRFJJVkVSX01PRFVMRShuZ191YnQsIHVzaHViLCB1 YnRfZHJpdmVyLCB1YnRfZGV2Y2xhc3MsIHVidF9tb2RldmVudCwgMCk7CitNT0RVTEVfVkVSU0lP TihuZ191YnQsIE5HX0JMVUVUT09USF9WRVJTSU9OKTsKK01PRFVMRV9ERVBFTkQobmdfdWJ0LCBu ZXRncmFwaCwgTkdfQUJJX1ZFUlNJT04sIE5HX0FCSV9WRVJTSU9OLCBOR19BQklfVkVSU0lPTik7 CitNT0RVTEVfREVQRU5EKG5nX3VidCwgbmdfaGNpLCBOR19CTFVFVE9PVEhfVkVSU0lPTiwgTkdf QkxVRVRPT1RIX1ZFUlNJT04sIE5HX0JMVUVUT09USF9WRVJTSU9OKTsKK01PRFVMRV9ERVBFTkQo bmdfdWJ0LCB1c2IyX2JsdWV0b290aCwgMSwgMSwgMSk7CitNT0RVTEVfREVQRU5EKG5nX3VidCwg dXNiMl9jb3JlLCAxLCAxLCAxKTsKKwpJbmRleDogbmdfdWJ0Ml92YXIuaAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBuZ191YnQyX3Zhci5oCShyZXZpc2lvbiAxODczMTMpCisrKyBuZ191YnQyX3Zhci5oCSh3b3Jr aW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICovCiAKIC8qLQotICogQ29weXJpZ2h0IChjKSAy MDAxLTIwMDIgTWFrc2ltIFlldm1lbmtpbiA8bV9ldm1lbmtpbkB5YWhvby5jb20+CisgKiBDb3B5 cmlnaHQgKGMpIDIwMDEtMjAwOSBNYWtzaW0gWWV2bWVua2luIDxtX2V2bWVua2luQHlhaG9vLmNv bT4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMiw5NSAr MzIsMTExIEBACiAgKi8KIAogI2lmbmRlZiBfTkdfVUJUX1ZBUl9IXwotI2RlZmluZQlfTkdfVUJU X1ZBUl9IXworI2RlZmluZQlfTkdfVUJUX1ZBUl9IXwkxCiAKLS8qIHB1bGx1cCB3cmFwcGVyICov Ci0jZGVmaW5lCU5HX1VCVF9NX1BVTExVUChtLCBzKSBcCi0JZG8geyBcCi0JCWlmICgobSktPm1f bGVuIDwgKHMpKSBcCi0JCQkobSkgPSBtX3B1bGx1cCgobSksIChzKSk7IFwKLQkJaWYgKChtKSA9 PSBOVUxMKSB7IFwKLQkJCU5HX1VCVF9BTEVSVCgiJXM6ICVzIC0gbV9wdWxsdXAoJWQpIGZhaWxl ZFxuIiwgXAotCQkJCV9fZnVuY19fLCBzYy0+c2NfbmFtZSwgKHMpKTsgXAotCQl9IFwKLQl9IHdo aWxlICgwKQotCiAvKiBEZWJ1ZyBwcmludGYncyAqLwotI2RlZmluZQlOR19VQlRfREVCVUcobGV2 ZWwsIHNjLCBmbXQsIC4uLikgZG8geyBcCi0gICAgaWYgKChzYyktPnNjX2RlYnVnID49IChsZXZl bCkpIHsgXAotICAgICAgICBwcmludGYoIiVzOiVzOiVkOiAiIGZtdCwgKHNjKS0+c2NfbmFtZSwg XAotCSAgICAgICBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCMjIF9fVkFfQVJHU19fKTsgXAotICAg IH0gXAorI2RlZmluZQlVQlRfREVCVUcobGV2ZWwsIHNjLCBmbXQsIC4uLikJCQkJXAorZG8gewkJ CQkJCQkJXAorCWlmICgoc2MpLT5zY19kZWJ1ZyA+PSAobGV2ZWwpKQkJCQlcCisJCXByaW50Zigi JXM6JXM6JWQ6ICIgZm10LCAoc2MpLT5zY19uYW1lLAkJXAorCQkJX19GVU5DVElPTl9fLCBfX0xJ TkVfXywjIyBfX1ZBX0FSR1NfXyk7CVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUJTkdfVUJUX0FM RVJUKC4uLikgTkdfVUJUX0RFQlVHKE5HX1VCVF9BTEVSVF9MRVZFTCwgX19WQV9BUkdTX18pCi0j ZGVmaW5lCU5HX1VCVF9FUlIoLi4uKSAgIE5HX1VCVF9ERUJVRyhOR19VQlRfRVJSX0xFVkVMLCBf X1ZBX0FSR1NfXykKLSNkZWZpbmUJTkdfVUJUX1dBUk4oLi4uKSAgTkdfVUJUX0RFQlVHKE5HX1VC VF9XQVJOX0xFVkVMLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUJTkdfVUJUX0lORk8oLi4uKSAgTkdf VUJUX0RFQlVHKE5HX1VCVF9JTkZPX0xFVkVMLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUJVUJUX0FM RVJUKC4uLikJCVVCVF9ERUJVRyhOR19VQlRfQUxFUlRfTEVWRUwsIF9fVkFfQVJHU19fKQorI2Rl ZmluZQlVQlRfRVJSKC4uLikJCVVCVF9ERUJVRyhOR19VQlRfRVJSX0xFVkVMLCBfX1ZBX0FSR1Nf XykKKyNkZWZpbmUJVUJUX1dBUk4oLi4uKQkJVUJUX0RFQlVHKE5HX1VCVF9XQVJOX0xFVkVMLCBf X1ZBX0FSR1NfXykKKyNkZWZpbmUJVUJUX0lORk8oLi4uKQkJVUJUX0RFQlVHKE5HX1VCVF9JTkZP X0xFVkVMLCBfX1ZBX0FSR1NfXykKIAorI2RlZmluZSBVQlRfTUJVRlFfTE9DSyhzYykJbXR4X2xv Y2soJihzYyktPnNjX21idWZxX210eCkKKyNkZWZpbmUgVUJUX01CVUZRX1VOTE9DSyhzYykJbXR4 X3VubG9jaygmKHNjKS0+c2NfbWJ1ZnFfbXR4KQorCiAvKiBCbHVldG9vdGggVVNCIGNvbnRyb2wg cmVxdWVzdCB0eXBlICovCiAjZGVmaW5lCVVCVF9IQ0lfUkVRVUVTVAkJMHgyMAotI2RlZmluZQlV QlRfREVGQVVMVF9RTEVOCTEyCisjZGVmaW5lCVVCVF9ERUZBVUxUX1FMRU4JNjQKKyNkZWZpbmUJ VUJUX0lTT0NfTkZSQU1FUwkzMgkvKiBzaG91bGQgYmUgZmFjdG9yIG9mIDggKi8KIAogLyogQmx1 ZXRvb3RoIFVTQiBkZWZpbmVzICovCi0jZGVmaW5lCVVCVF9JRl8wX05fVFJBTlNGRVIgIDcJCS8q IHVuaXRzICovCi0jZGVmaW5lCVVCVF9JRl8xX05fVFJBTlNGRVIgIDQJCS8qIHVuaXRzICovCi0j ZGVmaW5lCVVCVF9JU09DX05GUkFNRVMgICAgMjUJCS8qIHVuaXRzICovCitlbnVtIHsKKwkvKiBJ bnRlcmZhY2UgIzAgdHJhbnNmZXJzICovCisJVUJUX0lGXzBfQlVMS19EVF9XUiA9IDAsCisJVUJU X0lGXzBfQlVMS19EVF9SRCwKKwlVQlRfSUZfMF9JTlRSX0RUX1JELAorCVVCVF9JRl8wX0NUUkxf RFRfV1IsCisJVUJUX0lGXzBfQlVMS19DU19XUiwKKwlVQlRfSUZfMF9CVUxLX0NTX1JELAorCVVC VF9JRl8wX0lOVFJfQ1NfUkQsCisJVUJUX0lGXzBfTl9UUkFOU0ZFUiwJLyogbnVtYmVyIG9mIGlu dGVyZmFjZSAwJ3MgdHJhbnNmZXJzICovCisJCisJLyogSW50ZXJmYWNlICMxIHRyYW5zZmVycyAq LworCVVCVF9JRl8xX0lTT0NfRFRfUkQxID0gVUJUX0lGXzBfTl9UUkFOU0ZFUiwKKwlVQlRfSUZf MV9JU09DX0RUX1JEMiwKKwlVQlRfSUZfMV9JU09DX0RUX1dSMSwKKwlVQlRfSUZfMV9JU09DX0RU X1dSMiwKIAorCVVCVF9OX1RSQU5TRkVSLAkJLyogdG90YWwgbnVtYmVyIG9mIHRyYW5zZmVycyAq LworCisJVUJUX0lGXzFfTl9UUkFOU0ZFUiA9IFVCVF9OX1RSQU5TRkVSIC0gVUJUX0lGXzFfSVNP Q19EVF9SRDEsCit9OworCiAvKiBVU0IgZGV2aWNlIHNvZnRjIHN0cnVjdHVyZSAqLwogc3RydWN0 IHVidF9zb2Z0YyB7CisJdWludDhfdAkJCXNjX25hbWVbMTZdOworCiAJLyogU3RhdGUgKi8KLQlu Z191YnRfbm9kZV9kZWJ1Z19lcCBzY19kZWJ1ZzsJLyogZGVidWcgbGV2ZWwgKi8KLQl1aW50MzJf dCBzY19mbGFnczsJCS8qIGRldmljZSBmbGFncyAqLwotI2RlZmluZQlVQlRfTkVFRF9GUkFNRV9U WVBFCSgxIDw8IDApLyogZGV2aWNlIHJlcXVpcmVkIGZyYW1lIHR5cGUgKi8KLSNkZWZpbmUJVUJU X0hBVkVfRlJBTUVfVFlQRSBVQlRfTkVFRF9GUkFNRV9UWVBFCi0jZGVmaW5lCVVCVF9GTEFHX1JF QURfU1RBTEwgICAgICgxIDw8IDEpLyogcmVhZCB0cmFuc2ZlciBoYXMgc3RhbGxlZCAqLwotI2Rl ZmluZQlVQlRfRkxBR19XUklURV9TVEFMTCAgICAoMSA8PCAyKS8qIHdyaXRlIHRyYW5zZmVyIGhh cyBzdGFsbGVkICovCi0jZGVmaW5lCVVCVF9GTEFHX0lOVFJfU1RBTEwgICAgICgxIDw8IDMpLyog aW50ZXJydXB0IHRyYW5zZmVyIGhhcyBzdGFsbGVkICovCisJbmdfdWJ0X25vZGVfZGVidWdfZXAJ c2NfZGVidWc7CS8qIGRlYnVnIGxldmVsICovCiAKLQluZ191YnRfbm9kZV9zdGF0X2VwIHNjX3N0 YXQ7CS8qIHN0YXRpc3RpYyAqLwotI2RlZmluZQlOR19VQlRfU1RBVF9QQ0tUU19TRU5UKHMpCShz KS5wY2t0c19zZW50ICsrCi0jZGVmaW5lCU5HX1VCVF9TVEFUX0JZVEVTX1NFTlQocywgbikJKHMp LmJ5dGVzX3NlbnQgKz0gKG4pCi0jZGVmaW5lCU5HX1VCVF9TVEFUX1BDS1RTX1JFQ1YocykJKHMp LnBja3RzX3JlY3YgKysKLSNkZWZpbmUJTkdfVUJUX1NUQVRfQllURVNfUkVDVihzLCBuKQkocyku Ynl0ZXNfcmVjdiArPSAobikKLSNkZWZpbmUJTkdfVUJUX1NUQVRfT0VSUk9SKHMpCQkocykub2Vy cm9ycyArKwotI2RlZmluZQlOR19VQlRfU1RBVF9JRVJST1IocykJCShzKS5pZXJyb3JzICsrCi0j ZGVmaW5lCU5HX1VCVF9TVEFUX1JFU0VUKHMpCQliemVybygmKHMpLCBzaXplb2YoKHMpKSkKKwlp bnQJCQlzY19mbGFnczsJLyogZGV2aWNlIGZsYWdzICovCisjZGVmaW5lCVVCVF9GTEFHX1JFQURf U1RBTEwJKDEgPDwgMCkJLyogcmVhZCB0cmFuc2ZlciBoYXMgc3RhbGxlZCAqLworI2RlZmluZQlV QlRfRkxBR19XUklURV9TVEFMTAkoMSA8PCAxKQkvKiB3cml0ZSB0cmFuc2ZlciBoYXMgc3RhbGxl ZCAqLworI2RlZmluZQlVQlRfRkxBR19JTlRSX1NUQUxMCSgxIDw8IDIpCS8qIGludGVyIHRyYW5z ZmVyIGhhcyBzdGFsbGVkICovCiAKLQl1aW50OF90CXNjX25hbWVbMTZdOworCW5nX3VidF9ub2Rl X3N0YXRfZXAJc2Nfc3RhdDsJLyogc3RhdGlzdGljICovCisjZGVmaW5lCVVCVF9TVEFUX1BDS1RT X1NFTlQoc2MpCQkoc2MpLT5zY19zdGF0LnBja3RzX3NlbnQgKysKKyNkZWZpbmUJVUJUX1NUQVRf QllURVNfU0VOVChzYywgbikJKHNjKS0+c2Nfc3RhdC5ieXRlc19zZW50ICs9IChuKQorI2RlZmlu ZQlVQlRfU1RBVF9QQ0tUU19SRUNWKHNjKQkJKHNjKS0+c2Nfc3RhdC5wY2t0c19yZWN2ICsrCisj ZGVmaW5lCVVCVF9TVEFUX0JZVEVTX1JFQ1Yoc2MsIG4pCShzYyktPnNjX3N0YXQuYnl0ZXNfcmVj diArPSAobikKKyNkZWZpbmUJVUJUX1NUQVRfT0VSUk9SKHNjKQkJKHNjKS0+c2Nfc3RhdC5vZXJy b3JzICsrCisjZGVmaW5lCVVCVF9TVEFUX0lFUlJPUihzYykJCShzYyktPnNjX3N0YXQuaWVycm9y cyArKworI2RlZmluZQlVQlRfU1RBVF9SRVNFVChzYykJYnplcm8oJihzYyktPnNjX3N0YXQsIHNp emVvZigoc2MpLT5zY19zdGF0KSkKIAotCXN0cnVjdCBtdHggc2NfbXR4OwotCiAJLyogVVNCIGRl dmljZSBzcGVjaWZpYyAqLwotCXN0cnVjdCB1c2IyX3hmZXIgKnNjX3hmZXJfaWZfMFtVQlRfSUZf MF9OX1RSQU5TRkVSXTsKLQlzdHJ1Y3QgdXNiMl94ZmVyICpzY194ZmVyX2lmXzFbVUJUX0lGXzFf Tl9UUkFOU0ZFUl07CisJc3RydWN0IG10eAkJc2NfaWZfbXR4WzJdOwkvKiBpbnRlcmZhY2UgbG9j a3MgKi8KKwlzdHJ1Y3QgdXNiMl94ZmVyCSpzY194ZmVyW1VCVF9OX1RSQU5TRkVSXTsKIAotCS8q IEludGVycnVwdCBwaXBlIChIQ0kgZXZlbnRzKSAqLwotCXN0cnVjdCBtYnVmICpzY19pbnRyX2J1 ZmZlcjsJLyogaW50ZXJydXB0IGJ1ZmZlciAqLworCXN0cnVjdCBtdHgJCXNjX21idWZxX210eDsJ LyogbG9jayBmb3IgYWxsIHF1ZXVlcyAqLwogCi0JLyogQ29udHJvbCBwaXBlIChIQ0kgY29tbWFu ZHMpICovCi0Jc3RydWN0IG5nX2J0X21idWZxIHNjX2NtZHE7CS8qIEhDSSBjb21tYW5kIHF1ZXVl ICovCi0jZGVmaW5lCVVCVF9DVFJMX0JVRkZFUl9TSVpFIChzaXplb2YobmdfaGNpX2NtZF9wa3Rf dCkgKyBOR19IQ0lfQ01EX1BLVF9TSVpFKQorCS8qIEhDSSBjb21tYW5kcyAqLworCXN0cnVjdCBu Z19idF9tYnVmcQlzY19jbWRxOwkvKiBIQ0kgY29tbWFuZCBxdWV1ZSAqLworI2RlZmluZQlVQlRf Q1RSTF9CVUZGRVJfU0laRQkoc2l6ZW9mKHN0cnVjdCB1c2IyX2RldmljZV9yZXF1ZXN0KSArCVwK KwkJCQkgc2l6ZW9mKG5nX2hjaV9jbWRfcGt0X3QpICsgTkdfSENJX0NNRF9QS1RfU0laRSkKKyNk ZWZpbmUJVUJUX0lOVFJfQlVGRkVSX1NJWkUJKE1DTEJZVEVTLTEpCS8qIHJlc2VydmUgMSBieXRl IGZvciBJRC10YWcgKi8KIAotCS8qIEJ1bGsgaW4gcGlwZSAoQUNMIGRhdGEpICovCi0Jc3RydWN0 IG1idWYgKnNjX2J1bGtfaW5fYnVmZmVyOwkvKiBidWxrLWluIGJ1ZmZlciAqLwotCi0JLyogQnVs ayBvdXQgcGlwZSAoQUNMIGRhdGEpICovCi0Jc3RydWN0IG5nX2J0X21idWZxIHNjX2FjbHE7CS8q IEFDTCBkYXRhIHF1ZXVlICovCi0jZGVmaW5lCVVCVF9CVUxLX1JFQURfQlVGRkVSX1NJWkUgKE1D TEJZVEVTLTEpCS8qIHJlc2VydmUgb25lIGJ5dGUgZm9yIElELXRhZyAqLworCS8qIEFDTCBkYXRh ICovCisJc3RydWN0IG5nX2J0X21idWZxCXNjX2FjbHE7CS8qIEFDTCBkYXRhIHF1ZXVlICovCisj ZGVmaW5lCVVCVF9CVUxLX1JFQURfQlVGRkVSX1NJWkUgKE1DTEJZVEVTLTEpCS8qIHJlc2VydmUg MSBieXRlIGZvciBJRC10YWcgKi8KICNkZWZpbmUJVUJUX0JVTEtfV1JJVEVfQlVGRkVSX1NJWkUg KE1DTEJZVEVTKQogCi0JLyogSXNvYy4gb3V0IHBpcGUgKEFDTCBkYXRhKSAqLwotCXN0cnVjdCBu Z19idF9tYnVmcSBzY19zY29xOwkvKiBTQ08gZGF0YSBxdWV1ZSAqLworCS8qIFNDTyBkYXRhICov CisJc3RydWN0IG5nX2J0X21idWZxCXNjX3Njb3E7CS8qIFNDTyBkYXRhIHF1ZXVlICovCisJc3Ry dWN0IG1idWYJCSpzY19pc29jX2luX2J1ZmZlcjsgLyogU0NPIHJlYXNzZW1ibHkgYnVmZmVyICov CiAKLQkvKiBJc29jLiBpbiBwaXBlIChBQ0wgZGF0YSkgKi8KLQlzdHJ1Y3QgbmdfYnRfbWJ1ZnEg c2Nfc2NpcTsJLyogU0NPIGRhdGEgcXVldWUgKi8KKwkvKiBOZXRncmFwaCBzcGVjaWZpYyAqLwor CW5vZGVfcAkJCXNjX25vZGU7CS8qIHBvaW50ZXIgYmFjayB0byBub2RlICovCisJaG9va19wCQkJ c2NfaG9vazsJLyogdXBzdHJlYW0gaG9vayAqLwogCi0JLyogTmV0Z3JhcGggc3BlY2lmaWMgKi8K LQlub2RlX3AJc2Nfbm9kZTsJCS8qIHBvaW50ZXIgYmFjayB0byBub2RlICovCi0JaG9va19wCXNj X2hvb2s7CQkvKiB1cHN0cmVhbSBob29rICovCisJLyogR2x1ZSAqLworCWludAkJCXNjX3Rhc2tf ZmxhZ3M7CS8qIHRhc2sgZmxhZ3MgKi8KKyNkZWZpbmUgVUJUX0ZMQUdfVF9QRU5ESU5HCSgxIDw8 IDApCS8qIHRhc2sgcGVuZGluZyAqLworI2RlZmluZSBVQlRfRkxBR19UX1NUT1BfQUxMCSgxIDw8 IDEpCS8qIHN0b3AgYWxsIHhmZXJzICovCisjZGVmaW5lIFVCVF9GTEFHX1RfU1RBUlRfQUxMCSgx IDw8IDIpCS8qIHN0YXJ0IGFsbCByZWFkIGFuZCBpc29jCisJCQkJCQkgICB3cml0ZSB4ZmVycyAq LworI2RlZmluZSBVQlRfRkxBR19UX1NUQVJUX0NUUkwJKDEgPDwgMykJLyogc3RhcnQgY29udHJv bCB4ZmVyICh3cml0ZSkgKi8KKyNkZWZpbmUgVUJUX0ZMQUdfVF9TVEFSVF9CVUxLCSgxIDw8IDQp CS8qIHN0YXJ0IGJ1bGsgeGZlciAod3JpdGUpICovCisKKwlzdHJ1Y3QgdGFzawkJc2NfdGFzazsK IH07Ci10eXBlZGVmIHN0cnVjdCB1YnRfc29mdGMgdWJ0X3NvZnRjX3Q7Ci10eXBlZGVmIHN0cnVj dCB1YnRfc29mdGMgKnVidF9zb2Z0Y19wOwordHlwZWRlZiBzdHJ1Y3QgdWJ0X3NvZnRjCXVidF9z b2Z0Y190OwordHlwZWRlZiBzdHJ1Y3QgdWJ0X3NvZnRjICoJdWJ0X3NvZnRjX3A7CiAKLSNlbmRp ZgkJCQkJLyogbmRlZiBfTkdfVUJUX1ZBUl9IXyAqLworI2VuZGlmIC8qIG5kZWYgX05HX1VCVF9W QVJfSF8gKi8KKwo= --000e0cd2e10ccf0fd50460dd59a4-- From owner-freebsd-bluetooth@FreeBSD.ORG Tue Jan 20 01:24:12 2009 Return-Path: Delivered-To: freebsd-bluetooth@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9D4B1106566B; Tue, 20 Jan 2009 01:24:12 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from harmony.bsdimp.com (bsdimp.com [199.45.160.85]) by mx1.freebsd.org (Postfix) with ESMTP id 402708FC13; Tue, 20 Jan 2009 01:24:12 +0000 (UTC) (envelope-from imp@bsdimp.com) Received: from localhost (localhost [127.0.0.1]) by harmony.bsdimp.com (8.14.2/8.14.1) with ESMTP id n0K1LJZg082312; Mon, 19 Jan 2009 18:21:19 -0700 (MST) (envelope-from imp@bsdimp.com) Date: Mon, 19 Jan 2009 18:21:53 -0700 (MST) Message-Id: <20090119.182153.1428097836.imp@bsdimp.com> To: maksim.yevmenkin@gmail.com From: "M. Warner Losh" In-Reply-To: References: <200901161012.24544.hselasky@c2i.net> X-Mailer: Mew version 5.2 on Emacs 21.3 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: freebsd-bluetooth@FreeBSD.org, alfred@FreeBSD.org, hselasky@c2i.net Subject: Re: USB2: ng_ubt2 patch X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Jan 2009 01:24:12 -0000 In message: Maksim Yevmenkin writes: : do i : : 1) commit it to head myself : or : 2) wait for you commit it into your cvs/scv/p4/etc. branch and then : merge it into -head The answer really should be #1. We've got to have the barriers for entry into usb2 be relatively low. Since you've talked to Hans-Peter Selasky about this change, and he's basically signed off on it, you should be good to go... Warner From owner-freebsd-bluetooth@FreeBSD.ORG Tue Jan 20 08:25:11 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 85079106566B; Tue, 20 Jan 2009 08:25:11 +0000 (UTC) (envelope-from hselasky@c2i.net) Received: from swip.net (mailfe05.swip.net [212.247.154.129]) by mx1.freebsd.org (Postfix) with ESMTP id E165E8FC0C; Tue, 20 Jan 2009 08:25:10 +0000 (UTC) (envelope-from hselasky@c2i.net) X-Cloudmark-Score: 0.000000 [] X-Cloudmark-Analysis: v=1.0 c=1 a=nklthdr5v5AUSfVrlghuJA==:17 a=x8FmYUKZ_skQvBAqHtkA:9 a=ea-pYyxqNiB6jlpbCnBO2Ho-DbwA:4 a=50e4U0PicR4A:10 Received: from [62.113.132.62] (account mc467741@c2i.net [62.113.132.62] verified) by mailfe05.swip.net (CommuniGate Pro SMTP 5.2.6) with ESMTPA id 1080310260; Tue, 20 Jan 2009 09:25:08 +0100 From: Hans Petter Selasky To: Maksim Yevmenkin Date: Tue, 20 Jan 2009 09:27:33 +0100 User-Agent: KMail/1.9.7 References: <200901161012.24544.hselasky@c2i.net> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200901200927.34134.hselasky@c2i.net> Cc: "freebsd-bluetooth@freebsd.org" , Alfred Perlstein Subject: Re: USB2: ng_ubt2 patch X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Jan 2009 08:25:11 -0000 Hi, > > 1) commit it to head myself You have my blessing to commit it. I will verify the changes next time I integrate my P4 repository! --HPS From owner-freebsd-bluetooth@FreeBSD.ORG Tue Jan 20 13:41:17 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A42E510656C5 for ; Tue, 20 Jan 2009 13:41:17 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out1.smtp.messagingengine.com (out1.smtp.messagingengine.com [66.111.4.25]) by mx1.freebsd.org (Postfix) with ESMTP id 74FD58FC14 for ; Tue, 20 Jan 2009 13:41:17 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from compute1.internal (compute1.internal [10.202.2.41]) by out1.messagingengine.com (Postfix) with ESMTP id 7096122FAD2; Tue, 20 Jan 2009 08:21:22 -0500 (EST) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by compute1.internal (MEProxy); Tue, 20 Jan 2009 08:21:22 -0500 X-Sasl-enc: M1Nr9nv0zHyZLi0z3Vd+dX+UX3y0PWFm3XU1SSkwbvOj 1232457682 Received: from empiric.lon.incunabulum.net (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTPSA id 92190168DC; Tue, 20 Jan 2009 08:21:21 -0500 (EST) Message-ID: <4975CFD0.1000002@incunabulum.net> Date: Tue, 20 Jan 2009 13:21:20 +0000 From: Bruce Simpson User-Agent: Thunderbird 2.0.0.19 (X11/20081209) MIME-Version: 1.0 To: Maksim Yevmenkin References: <200901152225.19150.hselasky@c2i.net> <200901161012.24544.hselasky@c2i.net> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: "freebsd-bluetooth@freebsd.org" , Alfred Perlstein , Hans Petter Selasky Subject: Ongoing Bluetooth work; Linux-like APIs? X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Jan 2009 13:41:18 -0000 Hi guys, I am pleased to see all the hard work going in to maintaining the FreeBSD Bluetooth support... I wonder though if anyone has considered implementing the Linux APIs ? It's kinda difficult to build applications with what we currently have in FreeBSD -- a whole host of higher level language bindings have popped up. Whilst they've done work on making sure it works on Windows with all the stacks they have there, I wonder if FreeBSD's being different from Linux is doing us any good here. Just a suggestion... as it is, I've had to side-step FreeBSD for the time being for what I am cooking at the moment :-( cheers BMS From owner-freebsd-bluetooth@FreeBSD.ORG Tue Jan 20 16:07:28 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DC031106566B for ; Tue, 20 Jan 2009 16:07:28 +0000 (UTC) (envelope-from bright@elvis.mu.org) Received: from elvis.mu.org (elvis.mu.org [192.203.228.196]) by mx1.freebsd.org (Postfix) with ESMTP id C79F18FC13 for ; Tue, 20 Jan 2009 16:07:28 +0000 (UTC) (envelope-from bright@elvis.mu.org) Received: by elvis.mu.org (Postfix, from userid 1192) id 9D1971A3C3A; Tue, 20 Jan 2009 07:50:28 -0800 (PST) Date: Tue, 20 Jan 2009 07:50:28 -0800 From: Alfred Perlstein To: Bruce Simpson Message-ID: <20090120155028.GU60686@elvis.mu.org> References: <200901152225.19150.hselasky@c2i.net> <200901161012.24544.hselasky@c2i.net> <4975CFD0.1000002@incunabulum.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4975CFD0.1000002@incunabulum.net> User-Agent: Mutt/1.4.2.3i Cc: "freebsd-bluetooth@freebsd.org" , Hans Petter Selasky Subject: Re: Ongoing Bluetooth work; Linux-like APIs? X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Jan 2009 16:07:29 -0000 * Bruce Simpson [090120 05:21] wrote: > Hi guys, > > I am pleased to see all the hard work going in to maintaining the > FreeBSD Bluetooth support... > > I wonder though if anyone has considered implementing the Linux APIs ? > > It's kinda difficult to build applications with what we currently have > in FreeBSD -- a whole host of higher level language bindings have popped > up. Whilst they've done work on making sure it works on Windows with all > the stacks they have there, I wonder if FreeBSD's being different from > Linux is doing us any good here. > > Just a suggestion... as it is, I've had to side-step FreeBSD for the > time being for what I am cooking at the moment :-( > > cheers > BMS That would be good. Please ping about it if you don't see it within a few weeks. -- - Alfred Perlstein From owner-freebsd-bluetooth@FreeBSD.ORG Tue Jan 20 17:58:39 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BDDA9106566B; Tue, 20 Jan 2009 17:58:39 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from out1.smtp.messagingengine.com (out1.smtp.messagingengine.com [66.111.4.25]) by mx1.freebsd.org (Postfix) with ESMTP id 7C47D8FC17; Tue, 20 Jan 2009 17:58:39 +0000 (UTC) (envelope-from bms@incunabulum.net) Received: from compute1.internal (compute1.internal [10.202.2.41]) by out1.messagingengine.com (Postfix) with ESMTP id 5AC73232822; Tue, 20 Jan 2009 12:55:00 -0500 (EST) Received: from heartbeat2.messagingengine.com ([10.202.2.161]) by compute1.internal (MEProxy); Tue, 20 Jan 2009 12:55:00 -0500 X-Sasl-enc: DG75W6mcer7BWAZpfTsmKmKSPCEHxRC7z1/2QyjmLb+d 1232474099 Received: from empiric.lon.incunabulum.net (82-35-112-254.cable.ubr07.dals.blueyonder.co.uk [82.35.112.254]) by mail.messagingengine.com (Postfix) with ESMTPSA id 1F20E20866; Tue, 20 Jan 2009 12:54:57 -0500 (EST) Message-ID: <49760FF0.7000400@incunabulum.net> Date: Tue, 20 Jan 2009 17:54:56 +0000 From: Bruce M Simpson User-Agent: Thunderbird 2.0.0.19 (X11/20090116) MIME-Version: 1.0 To: Alfred Perlstein References: <200901152225.19150.hselasky@c2i.net> <200901161012.24544.hselasky@c2i.net> <4975CFD0.1000002@incunabulum.net> <20090120155028.GU60686@elvis.mu.org> In-Reply-To: <20090120155028.GU60686@elvis.mu.org> X-Enigmail-Version: 0.95.6 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: "freebsd-bluetooth@freebsd.org" , Hans Petter Selasky Subject: Re: Ongoing Bluetooth work; Linux-like APIs? X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Jan 2009 17:58:40 -0000 Alfred Perlstein wrote: > ... >> I wonder though if anyone has considered implementing the Linux APIs ? >> ... >> > > That would be good. Please ping about it if you don't see it within > a few weeks. > If folk have cycles to look at that, and are interested in following up, that is excellent news... Meanwhile, a good set of pointers would be: http://org.csail.mit.edu/pybluez/ http://lightblue.sourceforge.net/ http://people.csail.mit.edu/albert/bluez-intro/c404.html http://code.google.com/p/bluecove/ Broadly there's a surface of interfaces to underlying system services (e.g. RFCOMM sockets, OBEX libraries, HCI sockets and/or layer access, and SDP in particular) which needs to be considered. The APIs above themselves have limitations with things like working with multiple interfaces, etc. I had a very brief crack at trying to get BlueCove to work with the FreeBSD stack, but I couldn't justify the time involved to get it up and running, given we'd already started building a solution on Linux. The differences between the Linux and FreeBSD stacks are small but subtle enough to render generic code incompatible... sigh. thanks, BMS From owner-freebsd-bluetooth@FreeBSD.ORG Tue Jan 20 22:22:10 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C2E8A106566B for ; Tue, 20 Jan 2009 22:22:10 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from rv-out-0506.google.com (rv-out-0506.google.com [209.85.198.235]) by mx1.freebsd.org (Postfix) with ESMTP id 9BDA78FC1A for ; Tue, 20 Jan 2009 22:22:10 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by rv-out-0506.google.com with SMTP id b25so3440710rvf.43 for ; Tue, 20 Jan 2009 14:22:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type:content-transfer-encoding; bh=TJAz2kcimHAL7vE6KTZLjiUirnMdL6oUeP5TDOTGChU=; b=BTAgFT/lGQun343X0v1JV75wa+uAexXQeS9EOgR8YtbyB5zXPqDyNbs8A/gRvW/3H7 YdO5280mJmz1JcmKEnbjB65AJCtwghrleEJ9BSgH/tlKvyWX2Ad0svEshQCvFE8//15q NwMlboO0Rz4DgxC9xUs/ebewBUfvM4HR4Ydcg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=K/ZGceqwnUelMSjYaFvmMQRHYkjUqxDrFc9Wd/gg7eSKolO4tWiY6kcpulXaGxc02A mnwm9x15UxQ9uKDC1cB6YAxYfPQq1swNofWLmwxG+9CTbX2HskFl9q5RD4DgCk+whIIZ NGiHZbgtiH5MMazHe6n8G0+XyB1wdV6vpB1bI= MIME-Version: 1.0 Received: by 10.141.206.13 with SMTP id i13mr551587rvq.215.1232490130217; Tue, 20 Jan 2009 14:22:10 -0800 (PST) Date: Tue, 20 Jan 2009 14:22:10 -0800 Message-ID: From: Maksim Yevmenkin To: "freebsd-bluetooth@freebsd.org" Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: ng_ubt2 patch committed X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Jan 2009 22:22:11 -0000 dear frebsd-bluetooth@ users with hps & alfred blessing updated version of the ng_ubt2 driver for usb2 was committed to -head. please give it a try and let me know if there are any problems. i'm also interested to hear about your experiences with ng_ubt2 and how it stacks up to usb1 ng_ubt. thanks, max === svn commit: r187494 - head/sys/dev/usb2/bluetooth Author: emax Date: Tue Jan 20 22:17:05 2009 New Revision: 187494 URL: http://svn.freebsd.org/changeset/base/187494 Log: Update (well, actually rewrite mostly) ng_ubt2 driver for USB2. Reviewed by: HPS, alfred Blessed by: HPS Modified: head/sys/dev/usb2/bluetooth/ng_ubt2.c head/sys/dev/usb2/bluetooth/ng_ubt2_var.h From owner-freebsd-bluetooth@FreeBSD.ORG Wed Jan 21 17:47:22 2009 Return-Path: Delivered-To: freebsd-bluetooth@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DEEC9106566B; Wed, 21 Jan 2009 17:47:22 +0000 (UTC) (envelope-from olli@lurza.secnetix.de) Received: from lurza.secnetix.de (unknown [IPv6:2a01:170:102f::2]) by mx1.freebsd.org (Postfix) with ESMTP id 5D9658FC1F; Wed, 21 Jan 2009 17:47:22 +0000 (UTC) (envelope-from olli@lurza.secnetix.de) Received: from lurza.secnetix.de (localhost [127.0.0.1]) by lurza.secnetix.de (8.14.3/8.14.3) with ESMTP id n0LHlJwq039855; Wed, 21 Jan 2009 18:47:19 +0100 (CET) (envelope-from oliver.fromme@secnetix.de) Received: (from olli@localhost) by lurza.secnetix.de (8.14.3/8.14.3/Submit) id n0LHlJfw039854; Wed, 21 Jan 2009 18:47:19 +0100 (CET) (envelope-from olli) Date: Wed, 21 Jan 2009 18:47:19 +0100 (CET) Message-Id: <200901211747.n0LHlJfw039854@lurza.secnetix.de> From: Oliver Fromme To: freebsd-bluetooth@FreeBSD.ORG, bms@incunabulum.net, Alfred Perlstein , Hans Petter Selasky In-Reply-To: <49760FF0.7000400@incunabulum.net> X-Newsgroups: list.freebsd-bluetooth User-Agent: tin/1.8.3-20070201 ("Scotasay") (UNIX) (FreeBSD/6.4-PRERELEASE-20080904 (i386)) MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-2.1.2 (lurza.secnetix.de [127.0.0.1]); Wed, 21 Jan 2009 18:47:20 +0100 (CET) Cc: Subject: Re: Ongoing Bluetooth work; Linux-like APIs? X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: freebsd-bluetooth@FreeBSD.ORG, bms@incunabulum.net, Alfred Perlstein , Hans Petter Selasky List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Jan 2009 17:47:23 -0000 Bruce M Simpson wrote: > Alfred Perlstein wrote: > > ... > > > I wonder though if anyone has considered implementing the Linux APIs ? > > > ... > > > > That would be good. Please ping about it if you don't see it within > > a few weeks. > > If folk have cycles to look at that, and are interested in following up, > that is excellent news... > > Meanwhile, a good set of pointers would be: > http://org.csail.mit.edu/pybluez/ I'm not exactly sure what the purpose of pybluez is. Python already supports Bluetooth on FreeBSD out of the box. I'm controlling several devices via Bluetooth (RFCOMM/SPP) with Python programs on FreeBSD. It works great. The very same programs work on NetBSD, too. I haven't tried Linux, though. Best regards Oliver -- Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M. Handelsregister: Registergericht Muenchen, HRA 74606, Geschäftsfuehrung: secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün- chen, HRB 125758, Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart FreeBSD-Dienstleistungen, -Produkte und mehr: http://www.secnetix.de/bsd "The ITU has offered the IETF formal alignment with its corresponding technology, Penguins, but that won't fly." -- RFC 2549 From owner-freebsd-bluetooth@FreeBSD.ORG Wed Jan 21 20:07:19 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 22C091065670; Wed, 21 Jan 2009 20:07:19 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from rv-out-0506.google.com (rv-out-0506.google.com [209.85.198.236]) by mx1.freebsd.org (Postfix) with ESMTP id C5A9E8FC27; Wed, 21 Jan 2009 20:07:18 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by rv-out-0506.google.com with SMTP id b25so3894699rvf.43 for ; Wed, 21 Jan 2009 12:07:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=7oFCpW9Y5L4PRQGMYVzrWEx91MlKRtB6j545jgWmAbs=; b=gmwmT4gJ2ELdmJHk0yxIW16KVKIkFxFIzr2LjmkMpNd6WPYXkFhIJM8H6fCNYF95OF ZgwIRAg6/WRSF6hDBUd1A6QRC1ozWEm7BdUm3S+9/AHBY6+nLpFLb4PJ4a19TobwIGC1 fX32xJEoEF33T61hkT1My+Gnfchs9fhlRENDE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=ACAYoME82vRLXgYyryPDZi8Kn5ud6T4GlyWPUpSA2zOfOUPKxiLKdqSwZ+93nwu1cQ 8y7zVsKg7ki1wkHDeE1Je4Y8retbq21/YI6PE0VmbgGnPPB5YUUTja4l/VSSGU0a2GSW Ns6FLALzJiuWljah7HGvv7tubYxchzt1wYLAM= MIME-Version: 1.0 Received: by 10.141.90.13 with SMTP id s13mr1113417rvl.54.1232568436064; Wed, 21 Jan 2009 12:07:16 -0800 (PST) In-Reply-To: <200901211747.n0LHlJfw039854@lurza.secnetix.de> References: <49760FF0.7000400@incunabulum.net> <200901211747.n0LHlJfw039854@lurza.secnetix.de> Date: Wed, 21 Jan 2009 12:07:16 -0800 Message-ID: From: Maksim Yevmenkin To: freebsd-bluetooth@freebsd.org, bms@incunabulum.net, Alfred Perlstein , Hans Petter Selasky Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Subject: Re: Ongoing Bluetooth work; Linux-like APIs? X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Jan 2009 20:07:19 -0000 On Wed, Jan 21, 2009 at 9:47 AM, Oliver Fromme wrote: > Bruce M Simpson wrote: > > Alfred Perlstein wrote: > > > ... > > > > I wonder though if anyone has considered implementing the Linux APIs ? > > > > ... > > > > > > That would be good. Please ping about it if you don't see it within > > > a few weeks. > > > > If folk have cycles to look at that, and are interested in following up, > > that is excellent news... > > > > Meanwhile, a good set of pointers would be: > > http://org.csail.mit.edu/pybluez/ > > I'm not exactly sure what the purpose of pybluez is. > Python already supports Bluetooth on FreeBSD out of the box. > I'm controlling several devices via Bluetooth (RFCOMM/SPP) > with Python programs on FreeBSD. It works great. The very > same programs work on NetBSD, too. I haven't tried Linux, > though. i think Bruce is talking about more high level (than bluetooth sockets support) stuff. for example, performing device inquiry, registering service with sdp server etc. while bluez libhci stuff (device inquiry and other general things such as sending and receiving hci commands and events) can be done fairly quickly, sdp api is quite different. Iain Hibbert (of netbsd) and i talking about sdp and how we can make it better. if anyone is working on libhci for freebsd, please let me know. thanks, max From owner-freebsd-bluetooth@FreeBSD.ORG Fri Jan 23 19:18:49 2009 Return-Path: Delivered-To: freebsd-bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 26EFC106564A for ; Fri, 23 Jan 2009 19:18:49 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: from rv-out-0506.google.com (rv-out-0506.google.com [209.85.198.230]) by mx1.freebsd.org (Postfix) with ESMTP id EE76A8FC08 for ; Fri, 23 Jan 2009 19:18:48 +0000 (UTC) (envelope-from maksim.yevmenkin@gmail.com) Received: by rv-out-0506.google.com with SMTP id b25so4958426rvf.43 for ; Fri, 23 Jan 2009 11:18:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=gVP6wKdcpkralML89+jda2DZwX3QCw1x+T5xchZ+VXY=; b=GMnTOph32HCPv/XxYbYCDaMnpCOx4yRkaM3s6JBQ/7kUghos/cekys8klqBXmn4lkt 3eei4OP7xoLHyIsRYAJjrhD0H1eQetyaCWf/Z9BmimgiYe025qt6WSl5YQZ/nJ3tZ78L IuYbLhpEW9AuiDYhy69pA54siVIQS757RfC7Q= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=DGQHhUZJG+BfoR1v3OETUmMWEpv6ao/ATBeV649BTceCwx6c95FdWDvNORe7OrADIs z6K9n3IGqqICrCrIl6WmKtSF9ts5Z26GTek2e+U7e3Uaejcd/JQoJKVXxMPSMtX8tq6R B2tSLbXoj15okA4WjC/u7OhGI7SG/s+IWjtYI= MIME-Version: 1.0 Received: by 10.140.201.6 with SMTP id y6mr2526393rvf.298.1232738328665; Fri, 23 Jan 2009 11:18:48 -0800 (PST) Date: Fri, 23 Jan 2009 11:18:48 -0800 Message-ID: From: Maksim Yevmenkin To: "freebsd-bluetooth@freebsd.org" Content-Type: multipart/mixed; boundary=000e0cd296c02e5fde04612b42d8 Subject: ng_ubt2 patch for stalled transfers X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 23 Jan 2009 19:18:49 -0000 --000e0cd296c02e5fde04612b42d8 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit dear freebsd-bluetooth@ users, it has been brought to my attention that recently committed ng_ubt2 (USB2) driver for bluetooth usb dongles may have issues with stalled transfers. if you are experiencing stalled transfers and crashes with USB2/ng_ubt2 please try the attached patch and let me know if it makes it better. the patch probably will not fix stalled transfers, but at least the system should not be crashing anymore (or so i hope :) if you are using USB2/ng_usb2 and do not experience stalled transfers, please try the patch anyway. it should not make any difference, but i'd like to get as much testing as i can. thanks, max --000e0cd296c02e5fde04612b42d8 Content-Type: text/plain; charset=US-ASCII; name="ng_ubt2.stall.diff.txt" Content-Disposition: attachment; filename="ng_ubt2.stall.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fqb8k5jn0 SW5kZXg6IG5nX3VidDIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBuZ191YnQyLmMJKHJldmlzaW9uIDE4NzUw NSkKKysrIG5nX3VidDIuYwkod29ya2luZyBjb3B5KQpAQCAtMjQzLDEzICsyNDMsMTEgQEAKIC8q IFVTQiBtZXRob2RzICovCiBzdGF0aWMgdXNiMl9jYWxsYmFja190CXVidF9jdHJsX3dyaXRlX2Nh bGxiYWNrOwogc3RhdGljIHVzYjJfY2FsbGJhY2tfdAl1YnRfaW50cl9yZWFkX2NhbGxiYWNrOwot c3RhdGljIHVzYjJfY2FsbGJhY2tfdAl1YnRfaW50cl9yZWFkX2NsZWFyX3N0YWxsX2NhbGxiYWNr Owogc3RhdGljIHVzYjJfY2FsbGJhY2tfdAl1YnRfYnVsa19yZWFkX2NhbGxiYWNrOwotc3RhdGlj IHVzYjJfY2FsbGJhY2tfdAl1YnRfYnVsa19yZWFkX2NsZWFyX3N0YWxsX2NhbGxiYWNrOwogc3Rh dGljIHVzYjJfY2FsbGJhY2tfdAl1YnRfYnVsa193cml0ZV9jYWxsYmFjazsKLXN0YXRpYyB1c2Iy X2NhbGxiYWNrX3QJdWJ0X2J1bGtfd3JpdGVfY2xlYXJfc3RhbGxfY2FsbGJhY2s7CiBzdGF0aWMg dXNiMl9jYWxsYmFja190CXVidF9pc29jX3JlYWRfY2FsbGJhY2s7CiBzdGF0aWMgdXNiMl9jYWxs YmFja190CXVidF9pc29jX3dyaXRlX2NhbGxiYWNrOworc3RhdGljIHVzYjJfY2FsbGJhY2tfdAl1 YnRfY2xlYXJfc3RhbGxfY2FsbGJhY2s7CiAKIHN0YXRpYyBpbnQJdWJ0X2lzb2NfcmVhZF9vbmVf ZnJhbWUoc3RydWN0IHVzYjJfeGZlciAqLCBpbnQpOwogCkBAIC0zMTYsNyArMzE0LDcgQEAKIAkJ LmVuZHBvaW50ID0JMHgwMCwJLyogY29udHJvbCBwaXBlICovCiAJCS5kaXJlY3Rpb24gPQlVRV9E SVJfQU5ZLAogCQkubWguYnVmc2l6ZSA9CXNpemVvZihzdHJ1Y3QgdXNiMl9kZXZpY2VfcmVxdWVz dCksCi0JCS5taC5jYWxsYmFjayA9CSZ1YnRfYnVsa193cml0ZV9jbGVhcl9zdGFsbF9jYWxsYmFj aywKKwkJLm1oLmNhbGxiYWNrID0JJnVidF9jbGVhcl9zdGFsbF9jYWxsYmFjaywKIAkJLm1oLnRp bWVvdXQgPQkxMDAwLAkvKiAxIHNlY29uZCAqLwogCQkubWguaW50ZXJ2YWwgPQk1MCwJLyogNTBt cyAqLwogCX0sCkBAIC0zMjYsNyArMzI0LDcgQEAKIAkJLmVuZHBvaW50ID0JMHgwMCwJLyogY29u dHJvbCBwaXBlICovCiAJCS5kaXJlY3Rpb24gPQlVRV9ESVJfQU5ZLAogCQkubWguYnVmc2l6ZSA9 CXNpemVvZihzdHJ1Y3QgdXNiMl9kZXZpY2VfcmVxdWVzdCksCi0JCS5taC5jYWxsYmFjayA9CSZ1 YnRfYnVsa19yZWFkX2NsZWFyX3N0YWxsX2NhbGxiYWNrLAorCQkubWguY2FsbGJhY2sgPQkmdWJ0 X2NsZWFyX3N0YWxsX2NhbGxiYWNrLAogCQkubWgudGltZW91dCA9CTEwMDAsCS8qIDEgc2Vjb25k ICovCiAJCS5taC5pbnRlcnZhbCA9CTUwLAkvKiA1MG1zICovCiAJfSwKQEAgLTMzOSw3ICszMzcs NyBAQAogCQkuZW5kcG9pbnQgPQkweDAwLAkvKiBjb250cm9sIHBpcGUgKi8KIAkJLmRpcmVjdGlv biA9CVVFX0RJUl9BTlksCiAJCS5taC5idWZzaXplID0Jc2l6ZW9mKHN0cnVjdCB1c2IyX2Rldmlj ZV9yZXF1ZXN0KSwKLQkJLm1oLmNhbGxiYWNrID0JJnVidF9pbnRyX3JlYWRfY2xlYXJfc3RhbGxf Y2FsbGJhY2ssCisJCS5taC5jYWxsYmFjayA9CSZ1YnRfY2xlYXJfc3RhbGxfY2FsbGJhY2ssCiAJ CS5taC50aW1lb3V0ID0JMTAwMCwJLyogMSBzZWNvbmQgKi8KIAkJLm1oLmludGVydmFsID0JNTAs CS8qIDUwbXMgKi8KIAl9LApAQCAtNjIzLDYgKzYyMSw5IEBACiAJCW5nX3Jtbm9kZV9zZWxmKG5v ZGUpOwogCX0KIAorCS8qIE1ha2Ugc3VyZSB1YnRfdGFzayBpbiBnb25lICovCisJdGFza3F1ZXVl X2RyYWluKHRhc2txdWV1ZV9zd2ksICZzYy0+c2NfdGFzayk7CisKIAkvKiBGcmVlIFVTQiB0cmFu c2ZlcnMsIGlmIGFueSAqLwogCXVzYjJfdHJhbnNmZXJfdW5zZXR1cChzYy0+c2NfeGZlciwgVUJU X05fVFJBTlNGRVIpOwogCkBAIC04NDMsMzUgKzg0NCw2IEBACiB9IC8qIHVidF9pbnRyX3JlYWRf Y2FsbGJhY2sgKi8KIAogLyoKLSAqIENhbGxlZCB3aGVuIG91dGdvaW5nIGNvbnRyb2wgdHJhbnNm ZXIgaW5pdGlhdGVkIHRvIGNsZWFyIHN0YWxsIG9uCi0gKiBpbnRlcnJ1cHQgcGlwZSBoYXMgY29t cGxldGVkLgotICogVVNCIGNvbnRleHQuCi0gKi8KLQotc3RhdGljIHZvaWQKLXVidF9pbnRyX3Jl YWRfY2xlYXJfc3RhbGxfY2FsbGJhY2soc3RydWN0IHVzYjJfeGZlciAqeGZlcikKLXsKLQlub2Rl X3AJCQlub2RlID0geGZlci0+cHJpdl9zYzsKLQlzdHJ1Y3QgdWJ0X3NvZnRjCSpzYzsKLQlzdHJ1 Y3QgdXNiMl94ZmVyCSp4ZmVyX290aGVyOwotCi0JaWYgKE5HX05PREVfTk9UX1ZBTElEKG5vZGUp KSB7Ci0JCU5HX05PREVfVU5SRUYobm9kZSk7Ci0JCXJldHVybjsgLyogbmV0Z3JhcGggbm9kZSBp cyBnb25lICovCi0JfQotCi0Jc2MgPSBOR19OT0RFX1BSSVZBVEUobm9kZSk7Ci0JeGZlcl9vdGhl ciA9IHNjLT5zY194ZmVyW1VCVF9JRl8wX0lOVFJfRFRfUkRdOwotCi0JaWYgKHVzYjJfY2xlYXJf c3RhbGxfY2FsbGJhY2soeGZlciwgeGZlcl9vdGhlcikpIHsKLQkJRFBSSU5URigic3RhbGwgY2xl YXJlZFxuIik7Ci0JCXNjLT5zY19mbGFncyAmPSB+VUJUX0ZMQUdfSU5UUl9TVEFMTDsKLQkJdXNi Ml90cmFuc2Zlcl9zdGFydCh4ZmVyX290aGVyKTsKLQl9IGVsc2UKLQkJTkdfTk9ERV9VTlJFRihu b2RlKTsgLyogY2FudCBjbGVhciBzdGFsbCAqLwotfSAvKiB1YnRfaW50cl9yZWFkX2NsZWFyX3N0 YWxsX2NhbGxiYWNrICovCi0KLS8qCiAgKiBDYWxsZWQgd2hlbiBpbmNvbWluZyBidWxrIHRyYW5z ZmVyIChBQ0wgcGFja2V0KSBoYXMgY29tcGxldGVkLCBpLmUuCiAgKiBBQ0wgcGFja2V0IHdhcyBy ZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UuCiAgKiBVU0IgY29udGV4dC4KQEAgLTk5MCwzNSArOTYy LDYgQEAKIH0gLyogdWJ0X2J1bGtfcmVhZF9jYWxsYmFjayAqLwogCiAvKgotICogQ2FsbGVkIHdo ZW4gb3V0Z29pbmcgY29udHJvbCB0cmFuc2ZlciBpbml0aWF0ZWQgdG8gY2xlYXIgc3RhbGwgb24K LSAqIGluY29taW5nIGJ1bGsgcGlwZSBoYXMgY29tcGxldGVkLgotICogVVNCIGNvbnRleHQuCi0g Ki8KLQotc3RhdGljIHZvaWQKLXVidF9idWxrX3JlYWRfY2xlYXJfc3RhbGxfY2FsbGJhY2soc3Ry dWN0IHVzYjJfeGZlciAqeGZlcikKLXsKLQlub2RlX3AJCQlub2RlID0geGZlci0+cHJpdl9zYzsK LQlzdHJ1Y3QgdWJ0X3NvZnRjCSpzYzsKLQlzdHJ1Y3QgdXNiMl94ZmVyCSp4ZmVyX290aGVyOwot Ci0JaWYgKE5HX05PREVfTk9UX1ZBTElEKG5vZGUpKSB7Ci0JCU5HX05PREVfVU5SRUYobm9kZSk7 Ci0JCXJldHVybjsgLyogbmV0Z3JhcGggbm9kZSBpcyBnb25lICovCi0JfQotCi0Jc2MgPSBOR19O T0RFX1BSSVZBVEUobm9kZSk7Ci0JeGZlcl9vdGhlciA9IHNjLT5zY194ZmVyW1VCVF9JRl8wX0JV TEtfRFRfUkRdOwotCi0JaWYgKHVzYjJfY2xlYXJfc3RhbGxfY2FsbGJhY2soeGZlciwgeGZlcl9v dGhlcikpIHsKLQkJRFBSSU5URigic3RhbGwgY2xlYXJlZFxuIik7Ci0JCXNjLT5zY19mbGFncyAm PSB+VUJUX0ZMQUdfUkVBRF9TVEFMTDsKLQkJdXNiMl90cmFuc2Zlcl9zdGFydCh4ZmVyX290aGVy KTsKLQl9IGVsc2UKLQkJTkdfTk9ERV9VTlJFRihub2RlKTsgLyogY2FudCBjbGVhciBzdGFsbCAq LwotfSAvKiB1YnRfYnVsa19yZWFkX2NsZWFyX3N0YWxsX2NhbGxiYWNrICovCi0KLS8qCiAgKiBD YWxsZWQgd2hlbiBvdXRnb2luZyBidWxrIHRyYW5zZmVyIChBQ0wgcGFja2V0KSBoYXMgY29tcGxl dGVkLCBpLmUuCiAgKiBBQ0wgcGFja2V0IHdhcyBzZW50IHRvIHRoZSBkZXZpY2UuCiAgKiBVU0Ig Y29udGV4dC4KQEAgLTEwOTYsMzUgKzEwMzksNiBAQAogfSAvKiB1YnRfYnVsa193cml0ZV9jYWxs YmFjayAqLwogCiAvKgotICogQ2FsbGVkIHdoZW4gb3V0Z29pbmcgY29udHJvbCB0cmFuc2ZlciBp bml0aWF0ZWQgdG8gY2xlYXIgc3RhbGwgb24KLSAqIG91dGdvaW5nIGJ1bGsgcGlwZSBoYXMgY29t cGxldGVkLgotICogVVNCIGNvbnRleHQuCi0gKi8KLQotc3RhdGljIHZvaWQKLXVidF9idWxrX3dy aXRlX2NsZWFyX3N0YWxsX2NhbGxiYWNrKHN0cnVjdCB1c2IyX3hmZXIgKnhmZXIpCi17Ci0Jbm9k ZV9wCQkJbm9kZSA9IHhmZXItPnByaXZfc2M7Ci0Jc3RydWN0IHVidF9zb2Z0Ywkqc2M7Ci0Jc3Ry dWN0IHVzYjJfeGZlcgkqeGZlcl9vdGhlcjsKLQotCWlmIChOR19OT0RFX05PVF9WQUxJRChub2Rl KSkgewotCQlOR19OT0RFX1VOUkVGKG5vZGUpOwotCQlyZXR1cm47IC8qIG5ldGdyYXBoIG5vZGUg aXMgZ29uZSAqLwotCX0KLQotCXNjID0gTkdfTk9ERV9QUklWQVRFKG5vZGUpOwotCXhmZXJfb3Ro ZXIgPSBzYy0+c2NfeGZlcltVQlRfSUZfMF9CVUxLX0RUX1dSXTsKLQotCWlmICh1c2IyX2NsZWFy X3N0YWxsX2NhbGxiYWNrKHhmZXIsIHhmZXJfb3RoZXIpKSB7Ci0JCURQUklOVEYoInN0YWxsIGNs ZWFyZWRcbiIpOwotCQlzYy0+c2NfZmxhZ3MgJj0gflVCVF9GTEFHX1dSSVRFX1NUQUxMOwotCQl1 c2IyX3RyYW5zZmVyX3N0YXJ0KHhmZXJfb3RoZXIpOwotCX0gZWxzZQotCQlOR19OT0RFX1VOUkVG KG5vZGUpOyAvKiBjYW50IGNsZWFyIHN0YWxsICovCi19IC8qIHVidF9idWxrX3dyaXRlX2NsZWFy X3N0YWxsX2NhbGxiYWNrICovCi0KLS8qCiAgKiBDYWxsZWQgd2hlbiBpbmNvbWluZyBpc29jIHRy YW5zZmVyIChTQ08gcGFja2V0KSBoYXMgY29tcGxldGVkLCBpLmUuCiAgKiBTQ08gcGFja2V0IHdh cyByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UuCiAgKiBVU0IgY29udGV4dC4KQEAgLTEzNjEsNiAr MTI3NSw4MCBAQAogCX0KIH0KIAorLyoKKyAqIENhbGxlZCB3aGVuIGFuIG91dGdvaW5nIGNvbnRy b2wgdHJhbnNmZXIgdG8gY2xlYXIgc3RhbGwgb24gYW5vdGhlcgorICogcGlwZSBoYXMgYmVlbiBj b21wbGV0ZWQuIEdlbmVyaWMgZm9yIGFsbCBjbGVhciBzdGFsbCB0cmFuc2ZlcnMuCisgKiBVU0Ig Y29udGV4dC4KKyAqLworCitzdGF0aWMgdm9pZAordWJ0X2NsZWFyX3N0YWxsX2NhbGxiYWNrKHN0 cnVjdCB1c2IyX3hmZXIgKnhmZXIpCit7CisJbm9kZV9wCQkJbm9kZSA9IHhmZXItPnByaXZfc2M7 CisJc3RydWN0IHVidF9zb2Z0Ywkqc2M7CisJc3RydWN0IHVzYjJfeGZlcgkqeGZlcl9vdGhlcjsK KwlpbnQJCQlmbGFnOworCisJaWYgKE5HX05PREVfTk9UX1ZBTElEKG5vZGUpKSB7CisJCU5HX05P REVfVU5SRUYobm9kZSk7CisJCXJldHVybjsgLyogbmV0Z3JhcGggbm9kZSBpcyBnb25lICovCisJ fQorCisJc2MgPSBOR19OT0RFX1BSSVZBVEUobm9kZSk7CisKKwkvKgorCSAqIEZpZ3VyZSBvdXQg d2hpY2ggY2xlYXIgc3RhbGwgdHJhbnNmZXIgaGFzIGNvbXBsZXRlZAorCSAqIGFuZCBzZXQgeGZl cl9vdGhlciBhbmQgZmxhZyBhY2NvcmRpbmdseQorCSAqLworCisJaWYgKHhmZXIgPT0gc2MtPnNj X3hmZXJbVUJUX0lGXzBfQlVMS19DU19XUl0pIHsKKwkJeGZlcl9vdGhlciA9IHNjLT5zY194ZmVy W1VCVF9JRl8wX0JVTEtfRFRfV1JdOworCQlmbGFnID0gVUJUX0ZMQUdfV1JJVEVfU1RBTEw7CisJ fSBlbHNlIGlmICh4ZmVyID09IHNjLT5zY194ZmVyW1VCVF9JRl8wX0JVTEtfQ1NfUkRdKSB7CisJ CXhmZXJfb3RoZXIgPSBzYy0+c2NfeGZlcltVQlRfSUZfMF9CVUxLX0RUX1JEXTsKKwkJZmxhZyA9 IFVCVF9GTEFHX1JFQURfU1RBTEw7CisJfSBlbHNlIGlmICh4ZmVyID09IHNjLT5zY194ZmVyW1VC VF9JRl8wX0lOVFJfQ1NfUkRdKSB7CisJCXhmZXJfb3RoZXIgPSBzYy0+c2NfeGZlcltVQlRfSUZf MF9JTlRSX0RUX1JEXTsKKwkJZmxhZyA9IFVCVF9GTEFHX0lOVFJfU1RBTEw7CisJfSBlbHNlCisJ CXBhbmljKCJjb3VsZCBub3Qgc2V0IHhmZXJfb3RoZXIhIHhmZXI9JXBcbiIsIHhmZXIpOworCisJ aWYgKHhmZXJfb3RoZXIgPT0gTlVMTCkgeworCQlVQlRfV0FSTihzYywgIm90aGVyIHRyYW5zZmVy IGlzIGdvbmUuIGFyZSB3ZSBkeWluZz8hXG4iKTsKKwkJTkdfTk9ERV9VTlJFRihub2RlKTsKKwkJ cmV0dXJuOyAvKiBvdGhlciB0cmFuc2ZlciBpcyBnb25lLiBhcmUgd2UgZHlpbmc/ISAqLworCX0K KworCXN3aXRjaCAoVVNCX0dFVF9TVEFURSh4ZmVyKSkgeworCWNhc2UgVVNCX1NUX1NFVFVQOgor CQkvKgorCQkgKiBJZ25vcmUgcmV0dXJuIHZhbHVlIGZyb20gdXNiMl9jbGVhcl9zdGFsbF9jYWxs YmFjaygpCisJCSAqIGFzIGl0IGFwcGVhcnMgaXQgY2FuIG5vdCByZXR1cm4gYW55dGhpbmcgb3Ro ZXIgdGhhbgorCQkgKiB6ZXJvIGluIFVTQl9TVF9TRVRVUCBjYXNlCisJCSAqLworCQkodm9pZCkg dXNiMl9jbGVhcl9zdGFsbF9jYWxsYmFjayh4ZmVyLCB4ZmVyX290aGVyKTsKKwkJYnJlYWs7CisK KwljYXNlIFVTQl9TVF9UUkFOU0ZFUlJFRDoKKwkJVUJUX0lORk8oc2MsICJzdGFsbCBjbGVhcmVk LCBmbGFnPSUjeFxuIiwgZmxhZyk7CitzdWJtaXRfb3RoZXI6CisJCXNjLT5zY19mbGFncyAmPSB+ ZmxhZzsKKwkJdXNiMl90cmFuc2Zlcl9zdGFydCh4ZmVyX290aGVyKTsKKwkJYnJlYWs7CisKKwlk ZWZhdWx0OgorCQlpZiAoeGZlci0+ZXJyb3IgIT0gVVNCX0VSUl9DQU5DRUxMRUQpIHsKKwkJCVVC VF9XQVJOKHNjLCAiY2xlYXIgc3RhbGwgdHJhbnNmZXIgZmFpbGVkOiAlcywgIiBcCisJCQkJImZs YWc9JSN4XG4iLCB1c2IyX2VycnN0cih4ZmVyLT5lcnJvciksIGZsYWcpOworCQkJZ290byBzdWJt aXRfb3RoZXI7CisJCQkvKiBOT1QgUkVBQ0hFRCAqLworCQl9CisKKwkJTkdfTk9ERV9VTlJFRihu b2RlKTsgLyogY2FuY2VsbGVkICovCisJCWJyZWFrOworCX0KK30gLyogdWJ0X2NsZWFyX3N0YWxs X2NhbGxiYWNrICovCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgogICoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x1ZSAK --000e0cd296c02e5fde04612b42d8--