From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH v7 06/20] drm/dp_mst: Introduce new refcounting scheme for mstbs and ports Date: Thu, 10 Jan 2019 19:53:29 -0500 Message-ID: <20190111005343.17443-7-lyude@redhat.com> References: <20190111005343.17443-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190111005343.17443-1-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Jerry Zuo , Daniel Vetter , David Airlie , Harry Wentland , Juston Li List-Id: nouveau.vger.kernel.org VGhlIGN1cnJlbnQgd2F5IG9mIGhhbmRsaW5nIHJlZmNvdW50aW5nIGluIHRoZSBEUCBNU1QgaGVs cGVycyBpcyByZWFsbHkKY29uZnVzaW5nIGFuZCBwcm9iYWJseSBqdXN0IHBsYWluIHdyb25nIGJl Y2F1c2UgaXQncyBiZWVuIGhhY2tlZCB1cCBtYW55CnRpbWVzIG92ZXIgdGhlIHllYXJzIHdpdGhv dXQgYW55b25lIGFjdHVhbGx5IGdvaW5nIG92ZXIgdGhlIGNvZGUgYW5kCnNlZWluZyBpZiB0aGlu Z3MgY291bGQgYmUgc2ltcGxpZmllZC4KClRvIHRoZSBiZXN0IG9mIG15IHVuZGVyc3RhbmRpbmcs IHRoZSBjdXJyZW50IHNjaGVtZSB3b3JrcyBsaWtlIHRoaXM6CmRybV9kcF9tc3RfcG9ydCBhbmQg ZHJtX2RwX21zdF9icmFuY2ggYm90aCBoYXZlIGEgc2luZ2xlIHJlZmNvdW50LiBXaGVuCnRoaXMg cmVmY291bnQgaGl0cyAwIGZvciBlaXRoZXIgb2YgdGhlIHR3bywgdGhleSdyZSByZW1vdmVkIGZy b20gdGhlCnRvcG9sb2d5IHN0YXRlLCBidXQgbm90IGltbWVkaWF0ZWx5IGZyZWVkLiBCb3RoIHBv cnRzIGFuZCBicmFuY2ggZGV2aWNlcwp3aWxsIHJlaW5pdGlhbGl6ZSB0aGVpciBrcmVmIG9uY2Ug aXQncyBoaXQgMCBiZWZvcmUgYWN0dWFsbHkgZGVzdHJveWluZwp0aGVtc2VsdmVzLiBUaGUgaW50 ZW5kZWQgcHVycG9zZSBiZWhpbmQgdGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBhdm9pZApwcm9ibGVt cyBsaWtlIG5vdCBiZWluZyBhYmxlIHRvIGZyZWUgYSByZW1vdGUgcGF5bG9hZCB0aGF0IG1pZ2h0 IHN0aWxsCmJlIGFjdGl2ZSwgZHVlIHRvIHVzIGhhdmluZyByZW1vdmVkIGFsbCBvZiB0aGUgcG9y dC9icmFuY2ggZGV2aWNlCnN0cnVjdHVyZXMgaW4gbWVtb3J5LCBhcyBwZXI6Cgpjb21taXQgOTFh MjVlNDYzMTMwICgiZHJtL2RwL21zdDogZGVhbGxvY2F0ZSBwYXlsb2FkIG9uIHBvcnQgZGVzdHJ1 Y3Rpb24iKQoKV2hpY2ggbWF5IGhhdmUgd29ya2VkLCBidXQgdGhlbiBpdCBjYXVzZWQgdXNlLWFm dGVyLWZyZWUgZXJyb3JzLiBCZWluZwpuZXcgdG8gTVNUIGF0IHRoZSB0aW1lLCBJIHRyaWVkIGZp eGluZyBpdDsKCmNvbW1pdCAyNjNlZmRlMzFmOTcgKCJkcm0vZHAvbXN0OiBHZXQgdmFsaWRhdGVk IHBvcnQgcmVmIGluIGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MSgpIikKCkJ1dCwgdGhhdCB3 YXMgYnJva2VuOiBib3RoIGRybV9kcF9tc3RfcG9ydCBhbmQgZHJtX2RwX21zdF9icmFuY2ggc3Ry dWN0cwphcmUgdmFsaWRhdGVkIGluIGFsbW9zdCBldmVyeSBEUCBNU1QgaGVscGVyIGZ1bmN0aW9u LiBTaW1wbHkgcHV0LCB0aGlzCm1lYW5zIHdlIGdvIHRocm91Z2ggdGhlIHRvcG9sb2d5IGFuZCB0 cnkgdG8gc2VlIGlmIHRoZSBnaXZlbgpkcm1fZHBfbXN0X2JyYW5jaCBvciBkcm1fZHBfbXN0X3Bv cnQgaXMgc3RpbGwgYXR0YWNoZWQgdG8gc29tZXRoaW5nCmJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0 IGluIG9yZGVyIHRvIGF2b2lkIGRlcmVmZXJlbmNpbmcgZnJlZWQgbWVtb3J5Cihzb21ldGhpbmcg dGhhdCBoYXMgaGFwcGVuZWQgYSBMT1QgaW4gdGhlIHBhc3Qgd2l0aCB0aGlzIGxpYnJhcnkpLgpC ZWNhdXNlIG9mIHRoaXMgaXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgd2hldGhlciBvciBub3Qg d2Uga2VlcCBrZWVwCnRoZSBwb3J0cyBhbmQgYnJhbmNoZXMgYXJvdW5kIGluIG1lbW9yeSBhcyB0 aGF0J3Mgbm90IGVub3VnaCwgYmVjYXVzZQphbnkgZnVuY3Rpb24gdGhhdCB2YWxpZGF0ZXMgdGhl IGJyYW5jaGVzIGFuZCBwb3J0cyBwYXNzZWQgdG8gaXQgd2lsbApzdGlsbCByZWplY3QgdGhlbSBh bnl3YXkgc2luY2UgdGhleSdyZSBubyBsb25nZXIgaW4gdGhlIHRvcG9sb2d5CnN0cnVjdHVyZS4g U28sIHVzZS1hZnRlci1mcmVlIGVycm9ycyB3ZXJlIGZpeGVkIGJ1dCBwYXlsb2FkIGRlYWxsb2Nh dGlvbgp3YXMgY29tcGxldGVseSBicm9rZW4uCgpUd28geWVhcnMgbGF0ZXIsIEFNRCBpbmZvcm1l ZCBtZSBhYm91dCB0aGlzIGlzc3VlIGFuZCBJIGF0dGVtcHRlZCB0bwpjb21lIHVwIHdpdGggYSB0 ZW1wb3JhcnkgZml4LCBwZW5kaW5nIGEgbG9uZy1vdmVyZHVlIGNsZWFudXAgb2YgdGhpcwpsaWJy YXJ5OgoKY29tbWl0IGM1NGM3Mzc0ZmY0NCAoImRybS9kcF9tc3Q6IFNraXAgdmFsaWRhdGluZyBw b3J0cyBkdXJpbmcgZGVzdHJ1Y3Rpb24sIGp1c3QgcmVmIikKCkJ1dCB0aGVuIHRoYXQgaW50cm9k dWNlZCB1c2UtYWZ0ZXItZnJlZSBlcnJvcnMsIHNvIEkgcXVpY2tseSByZXZlcnRlZAppdDoKCmNv bW1pdCA5NzY1NjM1YjMwNzUgKCJSZXZlcnQgImRybS9kcF9tc3Q6IFNraXAgdmFsaWRhdGluZyBw b3J0cyBkdXJpbmcgZGVzdHJ1Y3Rpb24sIGp1c3QgcmVmIiIpCgpBbmQgaW4gdGhlIHByb2Nlc3Ms IGxlYXJuZWQgdGhhdCB0aGVyZSBpcyBqdXN0IG5vIHNpbXBsZSBmaXggZm9yIHRoaXM6CnRoZSBk ZXNpZ24gaXMganVzdCBicm9rZW4uIFVuZm9ydHVuYXRlbHksIHRoZSB1c2FnZSBvZiB0aGVzZSBo ZWxwZXJzIGFyZQpxdWl0ZSBicm9rZW4gYXMgd2VsbC4gU29tZSBkcml2ZXJzIGxpa2UgaTkxNSBo YXZlIGJlZW4gc21hcnQgZW5vdWdoIHRvCmF2b2lkIGFjY2Vzc2luZyBhbnkga2luZCBvZiBpbmZv cm1hdGlvbiBmcm9tIE1TVCBwb3J0IHN0cnVjdHVyZXMsIGJ1dApvdGhlcnMgbGlrZSBub3V2ZWF1 IGhhdmUgYXNzdW1lZCwgdW5kZXJzdGFuZGFibHkgc28sIHRoYXQKZHJtX2RwX21zdF9wb3J0IHN0 cnVjdHVyZXMgYXJlIG5vcm1hbCBhbmQgY2FuIGp1c3QgYmUgYWNjZXNzZWQgYXQgYW55CnRpbWUg d2l0aG91dCB3b3JyeWluZyBhYm91dCB1c2UtYWZ0ZXItZnJlZSBlcnJvcnMuCgpBZnRlciBhIGxv dCBvZiBkaXNjdXNzaW9uLCBtZSBhbmQgRGFuaWVsIFZldHRlciBjYW1lIHVwIHdpdGggYSBiZXR0 ZXIKaWRlYSB0byByZXBsYWNlIGFsbCBvZiB0aGlzLgoKVG8gc3VtbWFyaXplLCBzaW5jZSB0aGlz IGlzIGRvY3VtZW50ZWQgZmFyIG1vcmUgaW5kZXB0aCBpbiB0aGUKZG9jdW1lbnRhdGlvbiB0aGlz IHBhdGNoIGludHJvZHVjZXMsIHdlIG1ha2UgaXQgc28gdGhhdCBkcm1fZHBfbXN0X3BvcnQKYW5k IGRybV9kcF9tc3RfYnJhbmNoIHN0cnVjdHVyZXMgaGF2ZSB0d28gZGlmZmVyZW50IGNsYXNzZXMg b2YKcmVmY291bnRzOiB0b3BvbG9neV9rcmVmLCBhbmQgbWFsbG9jX2tyZWYuIHRvcG9sb2d5X2ty ZWYgY29ycmVzcG9uZHMgdG8KdGhlIGxpZmV0aW1lIG9mIHRoZSBnaXZlbiBkcm1fZHBfbXN0X3Bv cnQgb3IgZHJtX2RwX21zdF9icmFuY2ggaW4gaXQncwpnaXZlbiB0b3BvbG9neS4gT25jZSBpdCBo aXRzIHplcm8sIGFueSBhc3NvY2lhdGVkIGNvbm5lY3RvcnMgYXJlIHJlbW92ZWQKYW5kIHRoZSBi cmFuY2ggb3IgcG9ydCBjYW4gbm8gbG9uZ2VyIGJlIHZhbGlkYXRlZC4gbWFsbG9jX2tyZWYKY29y cmVzcG9uZHMgdG8gdGhlIGxpZmV0aW1lIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhl IGFjdHVhbApzdHJ1Y3R1cmUsIGFuZCB3aWxsIGFsd2F5cyBiZSBub24temVybyBzbyBsb25nIGFz IHRoZSB0b3BvbG9neV9rcmVmIGlzCm5vbi16ZXJvLiBUaGlzIGdpdmVzIHVzIGEgd2F5IHRvIGFs bG93IGNhbGxlcnMgdG8gaG9sZCBvbnRvIHBvcnQgYW5kCmJyYW5jaCBkZXZpY2Ugc3RydWN0dXJl cyBwYXN0IHRoZWlyIHRvcG9sb2d5IGxpZmV0aW1lLCBhbmQgZHJhbWF0aWNhbGx5CnNpbXBsaWZp ZXMgdGhlIGxpZmV0aW1lcyBvZiBib3RoIHN0cnVjdHVyZXMuIFRoaXMgYWxzbyBmaW5hbGx5IGZp eGVzIHRoZQpwb3J0IGRlYWxsb2NhdGlvbiBwcm9ibGVtLCBwcm9wZXJseS4KCkFkZGl0aW9uYWxs eTogc2luY2UgdGhpcyBub3cgbWVhbnMgdGhhdCB3ZSBjYW4ga2VlcCBwb3J0cyBhbmQgYnJhbmNo CmRldmljZXMgYWxsb2NhdGVkIGluIG1lbW9yeSBmb3IgaG93ZXZlciBsb25nIHdlIG5lZWQsIHdl IG5vIGxvbmdlciBuZWVkCmEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHRoZSBwb3J0IHZhbGlkYXRp b24gdGhhdCB3ZSBjdXJyZW50bHkgZG8uCgpBZGRpdGlvbmFsbHksIHRoZXJlIGlzIG9uZSBsYXN0 IHNjZW5hcmlvIHRoYXQgdGhpcyBmaXhlcywgd2hpY2ggY291bGRuJ3QKaGF2ZSBiZWVuIGZpeGVk IHByb3Blcmx5IGJlZm9yZWhhbmQ6CgotIENQVTEgdW5yZWZzIHBvcnQgZnJvbSB0b3BvbG9neSAo cmVmY291bnQgMS0+MCkKLSBDUFUyIHJlZnMgcG9ydCBpbiB0b3BvbG9neShyZWZjb3VudCAwLT4x KQoKU2luY2Ugd2Ugbm93IGNhbiBndWFyYW50ZWUgbWVtb3J5IHNhZmV0eSBmb3IgcG9ydHMgYW5k IGJyYW5jaGVzCmFzLW5lZWRlZCwgd2UgYWxzbyBjYW4gbWFrZSBvdXIgbWFpbiByZWZlcmVuY2Ug Y291bnRpbmcgZnVuY3Rpb25zIGZpeAp0aGlzIHByb2JsZW0gYnkgdXNpbmcga3JlZl9nZXRfdW5s ZXNzX3plcm8oKSBpbnRlcm5hbGx5IHNvIHRoYXQgdG9wb2xvZ3kKcmVmY291bnRzIGNhbiBvbmx5 IGV2ZXIgcmVhY2ggMCBvbmNlLgoKQ2hhbmdlcyBzaW5jZSB2NDoKKiBDaGFuZ2UgdGhlIGtlcm5l bC1maWd1cmUgc3VtbWFyeSBmb3IgZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0xLmRvdCBhCiAgYml0 IC0gZGFudmV0CiogUmVtb3ZlIGZpZ3VyZSBudW1iZXJzIC0gZGFudmV0CgpDaGFuZ2VzIHNpbmNl IHYzOgoqIFJlbW92ZSByZWJhc2UgZGV0cml0dXMgLSBkYW52ZXQKKiBTcGxpdCBvdXQgcHVyZWx5 IHN0eWxlIGNoYW5nZXMgaW50byBzZXBhcmF0ZSBwYXRjaGVzIC0gaHdlbnRsYW4KCkNoYW5nZXMg c2luY2UgdjI6CiogRml4IGNvbW1pdCBtZXNzYWdlIC0gY2hlY2twYXRjaAoqIHMvKS0xLykgLSAx L2cgLSBjaGVja3BhdGNoCgpDaGFuZ2VzIHNpbmNlIHYxOgoqIFJlbW92ZSBmb3J3YXJkIGRlY2xh cmF0aW9ucyAtIGRhbnZldAoqIE1vdmUgIkJyYW5jaCBkZXZpY2UgYW5kIHBvcnQgcmVmY291bnRp bmciIHNlY3Rpb24gZnJvbSBkb2N1bWVudGF0aW9uCiAgaW50byBrZXJuZWwtZG9jIGNvbW1lbnRz IC0gZGFudmV0CiogRXhwb3J0IGludGVybmFsIHRvcG9sb2d5IGxpZmV0aW1lIGZ1bmN0aW9ucyBp bnRvIHRoZWlyIG93biBzZWN0aW9uIGluCiAgdGhlIGtlcm5lbC1kb2NzIC0gZGFudmV0Ciogcy9A LyYvZyBmb3Igc3RydWN0IHJlZmVyZW5jZXMgaW4ga2VybmVsLWRvY3MgLSBkYW52ZXQKKiBEcm9w IHRoZSAid2hlbiB0aGV5IGFyZSBubyBsb25nZXIgYmVpbmcgdXNlZCIgYml0cyBmcm9tIHRoZSBr ZXJuZWwKICBkb2NzIC0gZGFudmV0CiogTW9kaWZ5IGRpYWdyYW1zIHRvIHNob3cgaG93IHRoZSBE Uk0gZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSB0b3BvbG9neQogIGFuZCBwYXlsb2FkcyAtIGRh bnZldAoqIE1ha2Ugc3VnZ2VzdGVkIGRvY3VtZW50YXRpb24gY2hhbmdlcyBmb3IKICBkcm1fZHBf bXN0X3RvcG9sb2d5X2dldF9tc3RiKCkgYW5kIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQo KSAtCiAgZGFudmV0CiogQmV0dGVyIGV4cGxhaW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIG1h bGxvYyByZWZzIGFuZCB0b3BvbG9neSBrcmVmcwogIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBk cm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0KCkgYW5kCiAgZHJtX2RwX21zdF90b3BvbG9neV9n ZXRfbXN0YigpIC0gZGFudmV0CiogRml4ICJTZWUgYWxzbyIgaW4gZHJtX2RwX21zdF90b3BvbG9n eV9nZXRfbXN0YigpIC0gZGFudmV0CiogUmVuYW1lIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0Xyhw b3J0fG1zdGIpKCkgLT4KICBkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfKHBvcnR8bXN0Yiko KSBhbmQKICBkcm1fZHBfbXN0X3RvcG9sb2d5X3JlZl8ocG9ydHxtc3RiKSgpIC0+CiAgZHJtX2Rw X21zdF90b3BvbG9neV9nZXRfKHBvcnR8bXN0YikoKSAtIGRhbnZldAoqIHMvc2hvdWxkL211c3Qg aW4gZG9jcyAtIGRhbnZldAoqIFdBUk5fT04ocmVmY291bnQgPT0gMCkgaW4gdG9wb2xvZ3lfZ2V0 Xyhtc3RifHBvcnQpIC0gZGFudmV0CiogTW92ZSBrZG9jcyBmb3IgbXN0Yi9wb3J0IHN0cnVjdHMg aW5saW5lIC0gZGFudmV0CiogU3BsaXQgZHJtX2RwX2dldF9sYXN0X2Nvbm5lY3RlZF9wb3J0X2Fu ZF9tc3RiKCkgY2hhbmdlcyBpbnRvIHRoZWlyIG93bgogIGNvbW1pdCAtIGRhbnZldAoKU2lnbmVk LW9mZi1ieTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KUmV2aWV3ZWQtYnk6IEhhcnJ5 IFdlbnRsYW5kIDxoYXJyeS53ZW50bGFuZEBhbWQuY29tPgpSZXZpZXdlZC1ieTogRGFuaWVsIFZl dHRlciA8ZGFuaWVsQGZmd2xsLmNoPgpDYzogRGF2aWQgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5j b20+CkNjOiBKZXJyeSBadW8gPEplcnJ5Llp1b0BhbWQuY29tPgpDYzogSnVzdG9uIExpIDxqdXN0 b24ubGlAaW50ZWwuY29tPgotLS0KIC4uLi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0xLmRv dCAgICAgICAgICB8ICA1MiArKwogLi4uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTIuZG90 ICAgICAgICAgIHwgIDU2ICsrKwogLi4uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTMuZG90 ICAgICAgICAgIHwgIDU5ICsrKwogRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJz dCAgICAgICAgIHwgIDI2ICstCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5j ICAgICAgICAgfCA0NTggKysrKysrKysrKysrKysrLS0tCiBpbmNsdWRlL2RybS9kcm1fZHBfbXN0 X2hlbHBlci5oICAgICAgICAgICAgICAgfCAgMzIgKy0KIDYgZmlsZXMgY2hhbmdlZCwgNjE0IGlu c2VydGlvbnMoKyksIDY5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50 YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMS5kb3QKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBEb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTIuZG90CiBjcmVhdGUg bW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0zLmRv dAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUt MS5kb3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTEuZG90Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTU3ZTE3YzdlMGIwCi0tLSAv ZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0x LmRvdApAQCAtMCwwICsxLDUyIEBACitkaWdyYXBoIFQgeworICAgIC8qIE1ha2Ugc3VyZSBvdXIg cGF5bG9hZHMgYXJlIGFsd2F5cyBkcmF3biBiZWxvdyB0aGUgZHJpdmVyIG5vZGUgKi8KKyAgICBz dWJncmFwaCBjbHVzdGVyX2RyaXZlciB7CisgICAgICAgIGZpbGxjb2xvciA9IGdyZXk7CisgICAg ICAgIHN0eWxlID0gZmlsbGVkOworICAgICAgICBkcml2ZXIgLT4ge3BheWxvYWQxLCBwYXlsb2Fk Mn0gW2Rpcj1ub25lXTsKKyAgICB9CisKKyAgICAvKiBEcml2ZXIgbWFsbG9jIHJlZmVyZW5jZXMg Ki8KKyAgICBlZGdlIFtzdHlsZT1kYXNoZWRdOworICAgIGRyaXZlciAtPiBwb3J0MTsKKyAgICBk cml2ZXIgLT4gcG9ydDI7CisgICAgZHJpdmVyIC0+IHBvcnQzOmU7CisgICAgZHJpdmVyIC0+IHBv cnQ0OworCisgICAgcGF5bG9hZDE6cyAtPiBwb3J0MTplOworICAgIHBheWxvYWQyOnMgLT4gcG9y dDM6ZTsKKyAgICBlZGdlIFtzdHlsZT0iIl07CisKKyAgICBzdWJncmFwaCBjbHVzdGVyX3RvcG9s b2d5IHsKKyAgICAgICAgbGFiZWw9IlRvcG9sb2d5IE1hbmFnZXIiOworICAgICAgICBsYWJlbGxv Yz1ib3R0b207CisKKyAgICAgICAgLyogVG9wb2xvZ3kgcmVmZXJlbmNlcyAqLworICAgICAgICBt c3RiMSAtPiB7cG9ydDEsIHBvcnQyfTsKKyAgICAgICAgcG9ydDEgLT4gbXN0YjI7CisgICAgICAg IHBvcnQyIC0+IG1zdGIzIC0+IHtwb3J0MywgcG9ydDR9OworICAgICAgICBwb3J0MyAtPiBtc3Ri NDsKKworICAgICAgICAvKiBNYWxsb2MgcmVmZXJlbmNlcyAqLworICAgICAgICBlZGdlIFtzdHls ZT1kYXNoZWQ7ZGlyPWJhY2tdOworICAgICAgICBtc3RiMSAtPiB7cG9ydDEsIHBvcnQyfTsKKyAg ICAgICAgcG9ydDEgLT4gbXN0YjI7CisgICAgICAgIHBvcnQyIC0+IG1zdGIzIC0+IHtwb3J0Mywg cG9ydDR9OworICAgICAgICBwb3J0MyAtPiBtc3RiNDsKKyAgICB9CisKKyAgICBkcml2ZXIgW2xh YmVsPSJEUk0gZHJpdmVyIjtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94O2ZpbGxjb2xvcj1saWdodGJs dWVdOworCisgICAgcGF5bG9hZDEgW2xhYmVsPSJQYXlsb2FkICMxIjtzdHlsZT1maWxsZWQ7c2hh cGU9Ym94O2ZpbGxjb2xvcj1saWdodGJsdWVdOworICAgIHBheWxvYWQyIFtsYWJlbD0iUGF5bG9h ZCAjMiI7c3R5bGU9ZmlsbGVkO3NoYXBlPWJveDtmaWxsY29sb3I9bGlnaHRibHVlXTsKKworICAg IG1zdGIxIFtsYWJlbD0iTVNUQiAjMSI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW47 c2hhcGU9b3ZhbF07CisgICAgbXN0YjIgW2xhYmVsPSJNU1RCICMyIjtzdHlsZT1maWxsZWQ7Zmls bGNvbG9yPXBhbGVncmVlbjtzaGFwZT1vdmFsXTsKKyAgICBtc3RiMyBbbGFiZWw9Ik1TVEIgIzMi O3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFsZWdyZWVuO3NoYXBlPW92YWxdOworICAgIG1zdGI0 IFtsYWJlbD0iTVNUQiAjNCI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW47c2hhcGU9 b3ZhbF07CisKKyAgICBwb3J0MSBbbGFiZWw9IlBvcnQgIzEiO3NoYXBlPW92YWxdOworICAgIHBv cnQyIFtsYWJlbD0iUG9ydCAjMiI7c2hhcGU9b3ZhbF07CisgICAgcG9ydDMgW2xhYmVsPSJQb3J0 ICMzIjtzaGFwZT1vdmFsXTsKKyAgICBwb3J0NCBbbGFiZWw9IlBvcnQgIzQiO3NoYXBlPW92YWxd OworfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3Vy ZS0yLmRvdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMi5kb3QK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40MjQzZGQxNzM3Y2IKLS0t IC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJl LTIuZG90CkBAIC0wLDAgKzEsNTYgQEAKK2RpZ3JhcGggVCB7CisgICAgLyogTWFrZSBzdXJlIG91 ciBwYXlsb2FkcyBhcmUgYWx3YXlzIGRyYXduIGJlbG93IHRoZSBkcml2ZXIgbm9kZSAqLworICAg IHN1YmdyYXBoIGNsdXN0ZXJfZHJpdmVyIHsKKyAgICAgICAgZmlsbGNvbG9yID0gZ3JleTsKKyAg ICAgICAgc3R5bGUgPSBmaWxsZWQ7CisgICAgICAgIGRyaXZlciAtPiB7cGF5bG9hZDEsIHBheWxv YWQyfSBbZGlyPW5vbmVdOworICAgIH0KKworICAgIC8qIERyaXZlciBtYWxsb2MgcmVmZXJlbmNl cyAqLworICAgIGVkZ2UgW3N0eWxlPWRhc2hlZF07CisgICAgZHJpdmVyIC0+IHBvcnQxOworICAg IGRyaXZlciAtPiBwb3J0MjsKKyAgICBkcml2ZXIgLT4gcG9ydDM6ZTsKKyAgICBkcml2ZXIgLT4g cG9ydDQgW2NvbG9yPXJlZF07CisKKyAgICBwYXlsb2FkMTpzIC0+IHBvcnQxOmU7CisgICAgcGF5 bG9hZDI6cyAtPiBwb3J0MzplOworICAgIGVkZ2UgW3N0eWxlPSIiXTsKKworICAgIHN1YmdyYXBo IGNsdXN0ZXJfdG9wb2xvZ3kgeworICAgICAgICBsYWJlbD0iVG9wb2xvZ3kgTWFuYWdlciI7Cisg ICAgICAgIGxhYmVsbG9jPWJvdHRvbTsKKworICAgICAgICAvKiBUb3BvbG9neSByZWZlcmVuY2Vz ICovCisgICAgICAgIG1zdGIxIC0+IHtwb3J0MSwgcG9ydDJ9OworICAgICAgICBwb3J0MSAtPiBt c3RiMjsKKyAgICAgICAgZWRnZSBbY29sb3I9cmVkXTsKKyAgICAgICAgcG9ydDIgLT4gbXN0YjMg LT4ge3BvcnQzLCBwb3J0NH07CisgICAgICAgIHBvcnQzIC0+IG1zdGI0OworICAgICAgICBlZGdl IFtjb2xvcj0iIl07CisKKyAgICAgICAgLyogTWFsbG9jIHJlZmVyZW5jZXMgKi8KKyAgICAgICAg ZWRnZSBbc3R5bGU9ZGFzaGVkO2Rpcj1iYWNrXTsKKyAgICAgICAgbXN0YjEgLT4ge3BvcnQxLCBw b3J0Mn07CisgICAgICAgIHBvcnQxIC0+IG1zdGIyOworICAgICAgICBwb3J0MiAtPiBtc3RiMyAt PiBwb3J0MzsKKyAgICAgICAgZWRnZSBbY29sb3I9cmVkXTsKKyAgICAgICAgbXN0YjMgLT4gcG9y dDQ7CisgICAgICAgIHBvcnQzIC0+IG1zdGI0OworICAgIH0KKworICAgIG1zdGIxIFtsYWJlbD0i TVNUQiAjMSI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW5dOworICAgIG1zdGIyIFts YWJlbD0iTVNUQiAjMiI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW5dOworICAgIG1z dGIzIFtsYWJlbD0iTVNUQiAjMyI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW5dOwor ICAgIG1zdGI0IFtsYWJlbD0iTVNUQiAjNCI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1ncmV5XTsK KworICAgIHBvcnQxIFtsYWJlbD0iUG9ydCAjMSJdOworICAgIHBvcnQyIFtsYWJlbD0iUG9ydCAj MiJdOworICAgIHBvcnQzIFtsYWJlbD0iUG9ydCAjMyJdOworICAgIHBvcnQ0IFtsYWJlbD0iUG9y dCAjNCI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1ncmV5XTsKKworICAgIGRyaXZlciBbbGFiZWw9 IkRSTSBkcml2ZXIiO3N0eWxlPWZpbGxlZDtzaGFwZT1ib3g7ZmlsbGNvbG9yPWxpZ2h0Ymx1ZV07 CisKKyAgICBwYXlsb2FkMSBbbGFiZWw9IlBheWxvYWQgIzEiO3N0eWxlPWZpbGxlZDtzaGFwZT1i b3g7ZmlsbGNvbG9yPWxpZ2h0Ymx1ZV07CisgICAgcGF5bG9hZDIgW2xhYmVsPSJQYXlsb2FkICMy IjtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94O2ZpbGxjb2xvcj1saWdodGJsdWVdOworfQpkaWZmIC0t Z2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0zLmRvdCBiL0Rv Y3VtZW50YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMy5kb3QKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42Y2Q3OGQwNjc3OGIKLS0tIC9kZXYvbnVsbAor KysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTMuZG90CkBAIC0w LDAgKzEsNTkgQEAKK2RpZ3JhcGggVCB7CisgICAgLyogTWFrZSBzdXJlIG91ciBwYXlsb2FkcyBh cmUgYWx3YXlzIGRyYXduIGJlbG93IHRoZSBkcml2ZXIgbm9kZSAqLworICAgIHN1YmdyYXBoIGNs dXN0ZXJfZHJpdmVyIHsKKyAgICAgICAgZmlsbGNvbG9yID0gZ3JleTsKKyAgICAgICAgc3R5bGUg PSBmaWxsZWQ7CisgICAgICAgIGVkZ2UgW2Rpcj1ub25lXTsKKyAgICAgICAgZHJpdmVyIC0+IHBh eWxvYWQxOworICAgICAgICBkcml2ZXIgLT4gcGF5bG9hZDIgW3BlbndpZHRoPTNdOworICAgICAg ICBlZGdlIFtkaXI9IiJdOworICAgIH0KKworICAgIC8qIERyaXZlciBtYWxsb2MgcmVmZXJlbmNl cyAqLworICAgIGVkZ2UgW3N0eWxlPWRhc2hlZF07CisgICAgZHJpdmVyIC0+IHBvcnQxOworICAg IGRyaXZlciAtPiBwb3J0MjsKKyAgICBkcml2ZXIgLT4gcG9ydDM6ZTsKKyAgICBkcml2ZXIgLT4g cG9ydDQgW2NvbG9yPWdyZXldOworICAgIHBheWxvYWQxOnMgLT4gcG9ydDE6ZTsKKyAgICBwYXls b2FkMjpzIC0+IHBvcnQzOmUgW3BlbndpZHRoPTNdOworICAgIGVkZ2UgW3N0eWxlPSIiXTsKKwor ICAgIHN1YmdyYXBoIGNsdXN0ZXJfdG9wb2xvZ3kgeworICAgICAgICBsYWJlbD0iVG9wb2xvZ3kg TWFuYWdlciI7CisgICAgICAgIGxhYmVsbG9jPWJvdHRvbTsKKworICAgICAgICAvKiBUb3BvbG9n eSByZWZlcmVuY2VzICovCisgICAgICAgIG1zdGIxIC0+IHtwb3J0MSwgcG9ydDJ9OworICAgICAg ICBwb3J0MSAtPiBtc3RiMjsKKyAgICAgICAgZWRnZSBbY29sb3I9Z3JleV07CisgICAgICAgIHBv cnQyIC0+IG1zdGIzIC0+IHtwb3J0MywgcG9ydDR9OworICAgICAgICBwb3J0MyAtPiBtc3RiNDsK KyAgICAgICAgZWRnZSBbY29sb3I9IiJdOworCisgICAgICAgIC8qIE1hbGxvYyByZWZlcmVuY2Vz ICovCisgICAgICAgIGVkZ2UgW3N0eWxlPWRhc2hlZDtkaXI9YmFja107CisgICAgICAgIG1zdGIx IC0+IHtwb3J0MSwgcG9ydDJ9OworICAgICAgICBwb3J0MSAtPiBtc3RiMjsKKyAgICAgICAgcG9y dDIgLT4gbXN0YjMgW3BlbndpZHRoPTNdOworICAgICAgICBtc3RiMyAtPiBwb3J0MyBbcGVud2lk dGg9M107CisgICAgICAgIGVkZ2UgW2NvbG9yPWdyZXldOworICAgICAgICBtc3RiMyAtPiBwb3J0 NDsKKyAgICAgICAgcG9ydDMgLT4gbXN0YjQ7CisgICAgfQorCisgICAgbXN0YjEgW2xhYmVsPSJN U1RCICMxIjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbl07CisgICAgbXN0YjIgW2xh YmVsPSJNU1RCICMyIjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbl07CisgICAgbXN0 YjMgW2xhYmVsPSJNU1RCICMzIjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbjtwZW53 aWR0aD0zXTsKKyAgICBtc3RiNCBbbGFiZWw9Ik1TVEIgIzQiO3N0eWxlPWZpbGxlZDtmaWxsY29s b3I9Z3JleV07CisKKyAgICBwb3J0MSBbbGFiZWw9IlBvcnQgIzEiXTsKKyAgICBwb3J0MiBbbGFi ZWw9IlBvcnQgIzIiO3BlbndpZHRoPTVdOworICAgIHBvcnQzIFtsYWJlbD0iUG9ydCAjMyI7cGVu d2lkdGg9M107CisgICAgcG9ydDQgW2xhYmVsPSJQb3J0ICM0IjtzdHlsZT1maWxsZWQ7ZmlsbGNv bG9yPWdyZXldOworCisgICAgZHJpdmVyIFtsYWJlbD0iRFJNIGRyaXZlciI7c3R5bGU9ZmlsbGVk O3NoYXBlPWJveDtmaWxsY29sb3I9bGlnaHRibHVlXTsKKworICAgIHBheWxvYWQxIFtsYWJlbD0i UGF5bG9hZCAjMSI7c3R5bGU9ZmlsbGVkO3NoYXBlPWJveDtmaWxsY29sb3I9bGlnaHRibHVlXTsK KyAgICBwYXlsb2FkMiBbbGFiZWw9IlBheWxvYWQgIzIiO3N0eWxlPWZpbGxlZDtzaGFwZT1ib3g7 ZmlsbGNvbG9yPWxpZ2h0Ymx1ZTtwZW53aWR0aD0zXTsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50 YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21z LWhlbHBlcnMucnN0CmluZGV4IGI0MjJlYjhlZGYxNi4uN2EzZmM1NjliYzY4IDEwMDY0NAotLS0g YS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0CisrKyBiL0RvY3VtZW50YXRp b24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QKQEAgLTIwOCwxOCArMjA4LDQwIEBAIERpc3BsYXkg UG9ydCBEdWFsIE1vZGUgQWRhcHRvciBIZWxwZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQogLi4ga2Vy bmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5jCiAgICA6 ZXhwb3J0OgogCi1EaXNwbGF5IFBvcnQgTVNUIEhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlCi09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitEaXNwbGF5IFBvcnQg TVNUIEhlbHBlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitPdmVydmlldworLS0tLS0t LS0KIAogLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5 LmMKICAgIDpkb2M6IGRwIG1zdCBoZWxwZXIKIAorLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1 L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKKyAgIDpkb2M6IEJyYW5jaCBkZXZpY2UgYW5kIHBv cnQgcmVmY291bnRpbmcKKworRnVuY3Rpb25zIFJlZmVyZW5jZQorLS0tLS0tLS0tLS0tLS0tLS0t LQorCiAuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAogICAg OmludGVybmFsOgogCiAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3Rf dG9wb2xvZ3kuYwogICAgOmV4cG9ydDoKIAorVG9wb2xvZ3kgTGlmZXRpbWUgSW50ZXJuYWxzCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgZnVuY3Rpb25zIGFyZW4ndCBleHBv cnRlZCB0byBkcml2ZXJzLCBidXQgYXJlIGRvY3VtZW50ZWQgaGVyZSB0byBoZWxwIG1ha2UKK3Ro ZSBNU1QgdG9wb2xvZ3kgaGVscGVycyBlYXNpZXIgdG8gdW5kZXJzdGFuZAorCisuLiBrZXJuZWwt ZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYworICAgOmZ1bmN0aW9u czogZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X21zdGIgZHJtX2RwX21zdF90b3BvbG9neV9n ZXRfbXN0YgorICAgICAgICAgICAgICAgZHJtX2RwX21zdF90b3BvbG9neV9wdXRfbXN0YgorICAg ICAgICAgICAgICAgZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X3BvcnQgZHJtX2RwX21zdF90 b3BvbG9neV9nZXRfcG9ydAorICAgICAgICAgICAgICAgZHJtX2RwX21zdF90b3BvbG9neV9wdXRf cG9ydAorICAgICAgICAgICAgICAgZHJtX2RwX21zdF9nZXRfbXN0Yl9tYWxsb2MgZHJtX2RwX21z dF9wdXRfbXN0Yl9tYWxsb2MKKwogTUlQSSBEU0kgSGVscGVyIEZ1bmN0aW9ucyBSZWZlcmVuY2UK ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rw X21zdF90b3BvbG9neS5jCmluZGV4IDA3NGU5ODUwOTNjYS4uNzk2OTg1NjA5OTMzIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKQEAgLTg1MCw0NiArODUwLDIxMiBAQCBzdGF0 aWMgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICpkcm1fZHBfYWRkX21zdF9icmFuY2hfZGV2aWNl KHU4IGxjdCwgdTggKnJhZCkKIAlpZiAobGN0ID4gMSkKIAkJbWVtY3B5KG1zdGItPnJhZCwgcmFk LCBsY3QgLyAyKTsKIAlJTklUX0xJU1RfSEVBRCgmbXN0Yi0+cG9ydHMpOwotCWtyZWZfaW5pdCgm bXN0Yi0+a3JlZik7CisJa3JlZl9pbml0KCZtc3RiLT50b3BvbG9neV9rcmVmKTsKKwlrcmVmX2lu aXQoJm1zdGItPm1hbGxvY19rcmVmKTsKIAlyZXR1cm4gbXN0YjsKIH0KIAotc3RhdGljIHZvaWQg ZHJtX2RwX2ZyZWVfbXN0X3BvcnQoc3RydWN0IGtyZWYgKmtyZWYpOwotCiBzdGF0aWMgdm9pZCBk cm1fZHBfZnJlZV9tc3RfYnJhbmNoX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKLQlzdHJ1 Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRy bV9kcF9tc3RfYnJhbmNoLCBrcmVmKTsKLQlpZiAobXN0Yi0+cG9ydF9wYXJlbnQpIHsKLQkJaWYg KGxpc3RfZW1wdHkoJm1zdGItPnBvcnRfcGFyZW50LT5uZXh0KSkKLQkJCWtyZWZfcHV0KCZtc3Ri LT5wb3J0X3BhcmVudC0+a3JlZiwgZHJtX2RwX2ZyZWVfbXN0X3BvcnQpOwotCX0KKwlzdHJ1Y3Qg ZHJtX2RwX21zdF9icmFuY2ggKm1zdGIgPQorCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRy bV9kcF9tc3RfYnJhbmNoLCBtYWxsb2Nfa3JlZik7CisKKwlpZiAobXN0Yi0+cG9ydF9wYXJlbnQp CisJCWRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKG1zdGItPnBvcnRfcGFyZW50KTsKKwogCWtm cmVlKG1zdGIpOwogfQogCisvKioKKyAqIERPQzogQnJhbmNoIGRldmljZSBhbmQgcG9ydCByZWZj b3VudGluZworICoKKyAqIFRvcG9sb2d5IHJlZmNvdW50IG92ZXJ2aWV3CisgKiB+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIFRoZSByZWZjb3VudGluZyBzY2hlbWVzIGZvciAmc3Ry dWN0IGRybV9kcF9tc3RfYnJhbmNoIGFuZCAmc3RydWN0CisgKiBkcm1fZHBfbXN0X3BvcnQgYXJl IHNvbWV3aGF0IHVudXN1YWwuIEJvdGggcG9ydHMgYW5kIGJyYW5jaCBkZXZpY2VzIGhhdmUKKyAq IHR3byBkaWZmZXJlbnQga2luZHMgb2YgcmVmY291bnRzOiB0b3BvbG9neSByZWZjb3VudHMsIGFu ZCBtYWxsb2MgcmVmY291bnRzLgorICoKKyAqIFRvcG9sb2d5IHJlZmNvdW50cyBhcmUgbm90IGV4 cG9zZWQgdG8gZHJpdmVycywgYW5kIGFyZSBoYW5kbGVkIGludGVybmFsbHkKKyAqIGJ5IHRoZSBE UCBNU1QgaGVscGVycy4gVGhlIGhlbHBlcnMgdXNlIHRoZW0gaW4gb3JkZXIgdG8gcHJldmVudCB0 aGUKKyAqIGluLW1lbW9yeSB0b3BvbG9neSBzdGF0ZSBmcm9tIGJlaW5nIGNoYW5nZWQgaW4gdGhl IG1pZGRsZSBvZiBjcml0aWNhbAorICogb3BlcmF0aW9ucyBsaWtlIGNoYW5naW5nIHRoZSBpbnRl cm5hbCBzdGF0ZSBvZiBwYXlsb2FkIGFsbG9jYXRpb25zLiBUaGlzCisgKiBtZWFucyBlYWNoIGJy YW5jaCBhbmQgcG9ydCB3aWxsIGJlIGNvbnNpZGVyZWQgdG8gYmUgY29ubmVjdGVkIHRvIHRoZSBy ZXN0CisgKiBvZiB0aGUgdG9wb2xvZ3kgdW50aWwgaXQncyB0b3BvbG9neSByZWZjb3VudCByZWFj aGVzIHplcm8uIEFkZGl0aW9uYWxseSwKKyAqIGZvciBwb3J0cyB0aGlzIG1lYW5zIHRoYXQgdGhl aXIgYXNzb2NpYXRlZCAmc3RydWN0IGRybV9jb25uZWN0b3Igd2lsbCBzdGF5CisgKiByZWdpc3Rl cmVkIHdpdGggdXNlcnNwYWNlIHVudGlsIHRoZSBwb3J0J3MgcmVmY291bnQgcmVhY2hlcyAwLgor ICoKKyAqIE1hbGxvYyByZWZjb3VudCBvdmVydmlldworICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+CisgKgorICogTWFsbG9jIHJlZmVyZW5jZXMgYXJlIHVzZWQgdG8ga2VlcCBhICZzdHJ1Y3Qg ZHJtX2RwX21zdF9wb3J0IG9yICZzdHJ1Y3QKKyAqIGRybV9kcF9tc3RfYnJhbmNoIGFsbG9jYXRl ZCBldmVuIGFmdGVyIGFsbCBvZiBpdHMgdG9wb2xvZ3kgcmVmZXJlbmNlcyBoYXZlCisgKiBiZWVu IGRyb3BwZWQsIHNvIHRoYXQgdGhlIGRyaXZlciBvciBNU1QgaGVscGVycyBjYW4gc2FmZWx5IGFj Y2VzcyBlYWNoCisgKiBicmFuY2gncyBsYXN0IGtub3duIHN0YXRlIGJlZm9yZSBpdCB3YXMgZGlz Y29ubmVjdGVkIGZyb20gdGhlIHRvcG9sb2d5LgorICogV2hlbiB0aGUgbWFsbG9jIHJlZmNvdW50 IG9mIGEgcG9ydCBvciBicmFuY2ggcmVhY2hlcyAwLCB0aGUgbWVtb3J5CisgKiBhbGxvY2F0aW9u IGNvbnRhaW5pbmcgdGhlICZzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggb3IgJnN0cnVjdAorICog ZHJtX2RwX21zdF9wb3J0IHJlc3BlY3RpdmVseSB3aWxsIGJlIGZyZWVkLgorICoKKyAqIEZvciAm c3RydWN0IGRybV9kcF9tc3RfYnJhbmNoLCBtYWxsb2MgcmVmY291bnRzIGFyZSBub3QgY3VycmVu dGx5IGV4cG9zZWQKKyAqIHRvIGRyaXZlcnMuIEFzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0 aW9uLCB0aGVyZSBhcmUgbm8gZHJpdmVycyB0aGF0CisgKiBoYXZlIGEgdXNlY2FzZSBmb3IgYWNj ZXNzaW5nICZzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggb3V0c2lkZSBvZiB0aGUgTVNUCisgKiBo ZWxwZXJzLiBFeHBvc2luZyB0aGlzIEFQSSB0byBkcml2ZXJzIGluIGEgcmFjZS1mcmVlIG1hbm5l ciB3b3VsZCB0YWtlIG1vcmUKKyAqIHR3ZWFraW5nIG9mIHRoZSByZWZjb3VudGluZyBzY2hlbWUs IGhvd2V2ZXIgcGF0Y2hlcyBhcmUgd2VsY29tZSBwcm92aWRlZAorICogdGhlcmUgaXMgYSBsZWdp dGltYXRlIGRyaXZlciB1c2VjYXNlIGZvciB0aGlzLgorICoKKyAqIFJlZmNvdW50IHJlbGF0aW9u c2hpcHMgaW4gYSB0b3BvbG9neQorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+CisgKgorICogTGV0J3MgdGFrZSBhIGxvb2sgYXQgd2h5IHRoZSByZWxhdGlvbnNoaXAgYmV0 d2VlbiB0b3BvbG9neSBhbmQgbWFsbG9jCisgKiByZWZjb3VudHMgaXMgZGVzaWduZWQgdGhlIHdh eSBpdCBpcy4KKyAqCisgKiAuLiBrZXJuZWwtZmlndXJlOjogZHAtbXN0L3RvcG9sb2d5LWZpZ3Vy ZS0xLmRvdAorICoKKyAqICAgIEFuIGV4YW1wbGUgb2YgdG9wb2xvZ3kgYW5kIG1hbGxvYyByZWZz IGluIGEgRFAgTVNUIHRvcG9sb2d5IHdpdGggdHdvCisgKiAgICBhY3RpdmUgcGF5bG9hZHMuIFRv cG9sb2d5IHJlZmNvdW50IGluY3JlbWVudHMgYXJlIGluZGljYXRlZCBieSBzb2xpZAorICogICAg bGluZXMsIGFuZCBtYWxsb2MgcmVmY291bnQgaW5jcmVtZW50cyBhcmUgaW5kaWNhdGVkIGJ5IGRh c2hlZCBsaW5lcy4KKyAqICAgIEVhY2ggc3RhcnRzIGZyb20gdGhlIGJyYW5jaCB3aGljaCBpbmNy ZW1lbnRlZCB0aGUgcmVmY291bnQsIGFuZCBlbmRzIGF0CisgKiAgICB0aGUgYnJhbmNoIHRvIHdo aWNoIHRoZSByZWZjb3VudCBiZWxvbmdzIHRvLCBpLmUuIHRoZSBhcnJvdyBwb2ludHMgdGhlCisg KiAgICBzYW1lIHdheSBhcyB0aGUgQyBwb2ludGVycyB1c2VkIHRvIHJlZmVyZW5jZSBhIHN0cnVj dHVyZS4KKyAqCisgKiBBcyB5b3UgY2FuIHNlZSBpbiB0aGUgYWJvdmUgZmlndXJlLCBldmVyeSBi cmFuY2ggaW5jcmVtZW50cyB0aGUgdG9wb2xvZ3kKKyAqIHJlZmNvdW50IG9mIGl0J3MgY2hpbGRy ZW4sIGFuZCBpbmNyZW1lbnRzIHRoZSBtYWxsb2MgcmVmY291bnQgb2YgaXQncworICogcGFyZW50 LiBBZGRpdGlvbmFsbHksIGV2ZXJ5IHBheWxvYWQgaW5jcmVtZW50cyB0aGUgbWFsbG9jIHJlZmNv dW50IG9mIGl0J3MKKyAqIGFzc2lnbmVkIHBvcnQgYnkgMS4KKyAqCisgKiBTbywgd2hhdCB3b3Vs ZCBoYXBwZW4gaWYgTVNUQiAjMyBmcm9tIHRoZSBhYm92ZSBmaWd1cmUgd2FzIHVucGx1Z2dlZCBm cm9tCisgKiB0aGUgc3lzdGVtLCBidXQgdGhlIGRyaXZlciBoYWRuJ3QgeWV0IHJlbW92ZWQgcGF5 bG9hZCAjMiBmcm9tIHBvcnQgIzM/IFRoZQorICogdG9wb2xvZ3kgd291bGQgc3RhcnQgdG8gbG9v ayBsaWtlIHRoZSBmaWd1cmUgYmVsb3cuCisgKgorICogLi4ga2VybmVsLWZpZ3VyZTo6IGRwLW1z dC90b3BvbG9neS1maWd1cmUtMi5kb3QKKyAqCisgKiAgICBQb3J0cyBhbmQgYnJhbmNoIGRldmlj ZXMgd2hpY2ggaGF2ZSBiZWVuIHJlbGVhc2VkIGZyb20gbWVtb3J5IGFyZQorICogICAgY29sb3Jl ZCBncmV5LCBhbmQgcmVmZXJlbmNlcyB3aGljaCBoYXZlIGJlZW4gcmVtb3ZlZCBhcmUgY29sb3Jl ZCByZWQuCisgKgorICogV2hlbmV2ZXIgYSBwb3J0IG9yIGJyYW5jaCBkZXZpY2UncyB0b3BvbG9n eSByZWZjb3VudCByZWFjaGVzIHplcm8sIGl0IHdpbGwKKyAqIGRlY3JlbWVudCB0aGUgdG9wb2xv Z3kgcmVmY291bnRzIG9mIGFsbCBpdHMgY2hpbGRyZW4sIHRoZSBtYWxsb2MgcmVmY291bnQKKyAq IG9mIGl0cyBwYXJlbnQsIGFuZCBmaW5hbGx5IGl0cyBvd24gbWFsbG9jIHJlZmNvdW50LiBGb3Ig TVNUQiAjNCBhbmQgcG9ydAorICogIzQsIHRoaXMgbWVhbnMgdGhleSBib3RoIGhhdmUgYmVlbiBk aXNjb25uZWN0ZWQgZnJvbSB0aGUgdG9wb2xvZ3kgYW5kIGZyZWVkCisgKiBmcm9tIG1lbW9yeS4g QnV0LCBiZWNhdXNlIHBheWxvYWQgIzIgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBw b3J0CisgKiAjMywgcG9ydCAjMyBpcyByZW1vdmVkIGZyb20gdGhlIHRvcG9sb2d5IGJ1dCBpdCdz ICZzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0CisgKiBpcyBzdGlsbCBhY2Nlc3NpYmxlIGZyb20gbWVt b3J5LiBUaGlzIGFsc28gbWVhbnMgcG9ydCAjMyBoYXMgbm90IHlldAorICogZGVjcmVtZW50ZWQg dGhlIG1hbGxvYyByZWZjb3VudCBvZiBNU1RCICMzLCBzbyBpdCdzICZzdHJ1Y3QKKyAqIGRybV9k cF9tc3RfYnJhbmNoIHdpbGwgYWxzbyBzdGF5IGFsbG9jYXRlZCBpbiBtZW1vcnkgdW50aWwgcG9y dCAjMydzCisgKiBtYWxsb2MgcmVmY291bnQgcmVhY2hlcyAwLgorICoKKyAqIFRoaXMgcmVsYXRp b25zaGlwIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGluIG9yZGVyIHRvIHJlbGVhc2UgcGF5bG9hZCAj Miwgd2UKKyAqIG5lZWQgdG8gYmUgYWJsZSB0byBmaWd1cmUgb3V0IHRoZSBsYXN0IHJlbGF0aXZl IG9mIHBvcnQgIzMgdGhhdCdzIHN0aWxsCisgKiBjb25uZWN0ZWQgdG8gdGhlIHRvcG9sb2d5LiBJ biB0aGlzIGNhc2UsIHdlIHdvdWxkIHRyYXZlbCB1cCB0aGUgdG9wb2xvZ3kgYXMKKyAqIHNob3du IGJlbG93LgorICoKKyAqIC4uIGtlcm5lbC1maWd1cmU6OiBkcC1tc3QvdG9wb2xvZ3ktZmlndXJl LTMuZG90CisgKgorICogQW5kIGZpbmFsbHksIHJlbW92ZSBwYXlsb2FkICMyIGJ5IGNvbW11bmlj YXRpbmcgd2l0aCBwb3J0ICMyIHRocm91Z2gKKyAqIHNpZGViYW5kIHRyYW5zYWN0aW9ucy4KKyAq LworCisvKioKKyAqIGRybV9kcF9tc3RfZ2V0X21zdGJfbWFsbG9jKCkgLSBJbmNyZW1lbnQgdGhl IG1hbGxvYyByZWZjb3VudCBvZiBhIGJyYW5jaAorICogZGV2aWNlCisgKiBAbXN0YjogVGhlICZz dHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggdG8gaW5jcmVtZW50IHRoZSBtYWxsb2MgcmVmY291bnQg b2YKKyAqCisgKiBJbmNyZW1lbnRzICZkcm1fZHBfbXN0X2JyYW5jaC5tYWxsb2Nfa3JlZi4gV2hl bgorICogJmRybV9kcF9tc3RfYnJhbmNoLm1hbGxvY19rcmVmIHJlYWNoZXMgMCwgdGhlIG1lbW9y eSBhbGxvY2F0aW9uIGZvciBAbXN0YgorICogd2lsbCBiZSByZWxlYXNlZCBhbmQgQG1zdGIgbWF5 IG5vIGxvbmdlciBiZSB1c2VkLgorICoKKyAqIFNlZSBhbHNvOiBkcm1fZHBfbXN0X3B1dF9tc3Ri X21hbGxvYygpCisgKi8KK3N0YXRpYyB2b2lkCitkcm1fZHBfbXN0X2dldF9tc3RiX21hbGxvYyhz dHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIpCit7CisJa3JlZl9nZXQoJm1zdGItPm1hbGxv Y19rcmVmKTsKKwlEUk1fREVCVUcoIm1zdGIgJXAgKCVkKVxuIiwgbXN0Yiwga3JlZl9yZWFkKCZt c3RiLT5tYWxsb2Nfa3JlZikpOworfQorCisvKioKKyAqIGRybV9kcF9tc3RfcHV0X21zdGJfbWFs bG9jKCkgLSBEZWNyZW1lbnQgdGhlIG1hbGxvYyByZWZjb3VudCBvZiBhIGJyYW5jaAorICogZGV2 aWNlCisgKiBAbXN0YjogVGhlICZzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggdG8gZGVjcmVtZW50 IHRoZSBtYWxsb2MgcmVmY291bnQgb2YKKyAqCisgKiBEZWNyZW1lbnRzICZkcm1fZHBfbXN0X2Jy YW5jaC5tYWxsb2Nfa3JlZi4gV2hlbgorICogJmRybV9kcF9tc3RfYnJhbmNoLm1hbGxvY19rcmVm IHJlYWNoZXMgMCwgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBAbXN0YgorICogd2lsbCBiZSBy ZWxlYXNlZCBhbmQgQG1zdGIgbWF5IG5vIGxvbmdlciBiZSB1c2VkLgorICoKKyAqIFNlZSBhbHNv OiBkcm1fZHBfbXN0X2dldF9tc3RiX21hbGxvYygpCisgKi8KK3N0YXRpYyB2b2lkCitkcm1fZHBf bXN0X3B1dF9tc3RiX21hbGxvYyhzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIpCit7CisJ RFJNX0RFQlVHKCJtc3RiICVwICglZClcbiIsIG1zdGIsIGtyZWZfcmVhZCgmbXN0Yi0+bWFsbG9j X2tyZWYpIC0gMSk7CisJa3JlZl9wdXQoJm1zdGItPm1hbGxvY19rcmVmLCBkcm1fZHBfZnJlZV9t c3RfYnJhbmNoX2RldmljZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRybV9kcF9mcmVlX21zdF9wb3J0 KHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQgPQor CQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCwgbWFsbG9jX2tyZWYp OworCisJZHJtX2RwX21zdF9wdXRfbXN0Yl9tYWxsb2MocG9ydC0+cGFyZW50KTsKKwlrZnJlZShw b3J0KTsKK30KKworLyoqCisgKiBkcm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYygpIC0gSW5jcmVt ZW50IHRoZSBtYWxsb2MgcmVmY291bnQgb2YgYW4gTVNUIHBvcnQKKyAqIEBwb3J0OiBUaGUgJnN0 cnVjdCBkcm1fZHBfbXN0X3BvcnQgdG8gaW5jcmVtZW50IHRoZSBtYWxsb2MgcmVmY291bnQgb2YK KyAqCisgKiBJbmNyZW1lbnRzICZkcm1fZHBfbXN0X3BvcnQubWFsbG9jX2tyZWYuIFdoZW4gJmRy bV9kcF9tc3RfcG9ydC5tYWxsb2Nfa3JlZgorICogcmVhY2hlcyAwLCB0aGUgbWVtb3J5IGFsbG9j YXRpb24gZm9yIEBwb3J0IHdpbGwgYmUgcmVsZWFzZWQgYW5kIEBwb3J0IG1heQorICogbm8gbG9u Z2VyIGJlIHVzZWQuCisgKgorICogQmVjYXVzZSBAcG9ydCBjb3VsZCBwb3RlbnRpYWxseSBiZSBm cmVlZCBhdCBhbnkgdGltZSBieSB0aGUgRFAgTVNUIGhlbHBlcnMKKyAqIGlmICZkcm1fZHBfbXN0 X3BvcnQubWFsbG9jX2tyZWYgcmVhY2hlcyAwLCBpbmNsdWRpbmcgZHVyaW5nIGEgY2FsbCB0byB0 aGlzCisgKiBmdW5jdGlvbiwgZHJpdmVycyB0aGF0IHdoaWNoIHRvIG1ha2UgdXNlIG9mICZzdHJ1 Y3QgZHJtX2RwX21zdF9wb3J0IHNob3VsZAorICogZW5zdXJlIHRoYXQgdGhleSBncmFiIGF0IGxl YXN0IG9uZSBtYWluIG1hbGxvYyByZWZlcmVuY2UgdG8gdGhlaXIgTVNUIHBvcnRzCisgKiBpbiAm ZHJtX2RwX21zdF90b3BvbG9neV9jYnMuYWRkX2Nvbm5lY3Rvci4gVGhpcyBjYWxsYmFjayBpcyBj YWxsZWQgYmVmb3JlCisgKiB0aGVyZSBpcyBhbnkgY2hhbmNlIGZvciAmZHJtX2RwX21zdF9wb3J0 Lm1hbGxvY19rcmVmIHRvIHJlYWNoIDAuCisgKgorICogU2VlIGFsc286IGRybV9kcF9tc3RfcHV0 X3BvcnRfbWFsbG9jKCkKKyAqLwordm9pZAorZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2Moc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKK3sKKwlrcmVmX2dldCgmcG9ydC0+bWFsbG9jX2ty ZWYpOworCURSTV9ERUJVRygicG9ydCAlcCAoJWQpXG4iLCBwb3J0LCBrcmVmX3JlYWQoJnBvcnQt Pm1hbGxvY19rcmVmKSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfZ2V0X3BvcnRfbWFs bG9jKTsKKworLyoqCisgKiBkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYygpIC0gRGVjcmVtZW50 IHRoZSBtYWxsb2MgcmVmY291bnQgb2YgYW4gTVNUIHBvcnQKKyAqIEBwb3J0OiBUaGUgJnN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgdG8gZGVjcmVtZW50IHRoZSBtYWxsb2MgcmVmY291bnQgb2YKKyAq CisgKiBEZWNyZW1lbnRzICZkcm1fZHBfbXN0X3BvcnQubWFsbG9jX2tyZWYuIFdoZW4gJmRybV9k cF9tc3RfcG9ydC5tYWxsb2Nfa3JlZgorICogcmVhY2hlcyAwLCB0aGUgbWVtb3J5IGFsbG9jYXRp b24gZm9yIEBwb3J0IHdpbGwgYmUgcmVsZWFzZWQgYW5kIEBwb3J0IG1heQorICogbm8gbG9uZ2Vy IGJlIHVzZWQuCisgKgorICogU2VlIGFsc286IGRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKCkK KyAqLwordm9pZAorZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2Moc3RydWN0IGRybV9kcF9tc3Rf cG9ydCAqcG9ydCkKK3sKKwlEUk1fREVCVUcoInBvcnQgJXAgKCVkKVxuIiwgcG9ydCwga3JlZl9y ZWFkKCZwb3J0LT5tYWxsb2Nfa3JlZikgLSAxKTsKKwlrcmVmX3B1dCgmcG9ydC0+bWFsbG9jX2ty ZWYsIGRybV9kcF9mcmVlX21zdF9wb3J0KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9w dXRfcG9ydF9tYWxsb2MpOworCiBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9tc3RfYnJhbmNo X2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKLQlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gg Km1zdGIgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoLCBrcmVm KTsKKwlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIgPQorCQljb250YWluZXJfb2Yoa3Jl Ziwgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoLCB0b3BvbG9neV9rcmVmKTsKKwlzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciA9IG1zdGItPm1ncjsKIAlzdHJ1Y3QgZHJtX2RwX21z dF9wb3J0ICpwb3J0LCAqdG1wOwogCWJvb2wgd2FrZV90eCA9IGZhbHNlOwogCi0JLyoKLQkgKiBp bml0IGtyZWYgYWdhaW4gdG8gYmUgdXNlZCBieSBwb3J0cyB0byByZW1vdmUgbXN0IGJyYW5jaCB3 aGVuIGl0IGlzCi0JICogbm90IG5lZWRlZCBhbnltb3JlCi0JICovCi0Ja3JlZl9pbml0KGtyZWYp OwotCi0JaWYgKG1zdGItPnBvcnRfcGFyZW50ICYmIGxpc3RfZW1wdHkoJm1zdGItPnBvcnRfcGFy ZW50LT5uZXh0KSkKLQkJa3JlZl9nZXQoJm1zdGItPnBvcnRfcGFyZW50LT5rcmVmKTsKLQotCS8q Ci0JICogZGVzdHJveSBhbGwgcG9ydHMgLSBkb24ndCBuZWVkIGxvY2sKLQkgKiBhcyB0aGVyZSBh cmUgbm8gbW9yZSByZWZlcmVuY2VzIHRvIHRoZSBtc3QgYnJhbmNoCi0JICogZGV2aWNlIGF0IHRo aXMgcG9pbnQuCi0JICovCisJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmUocG9ydCwgdG1wLCAmbXN0Yi0+cG9ydHMsIG5leHQpIHsKIAkJbGlzdF9kZWwo JnBvcnQtPm5leHQpOwogCQlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOwogCX0K KwltdXRleF91bmxvY2soJm1nci0+bG9jayk7CiAKIAkvKiBkcm9wIGFueSB0eCBzbG90cyBtc2cg Ki8KIAltdXRleF9sb2NrKCZtc3RiLT5tZ3ItPnFsb2NrKTsKQEAgLTkwOCwxNCArMTA3NCw4MyBA QCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9tc3RfYnJhbmNoX2RldmljZShzdHJ1Y3Qga3Jl ZiAqa3JlZikKIAlpZiAod2FrZV90eCkKIAkJd2FrZV91cF9hbGwoJm1zdGItPm1nci0+dHhfd2Fp dHEpOwogCi0Ja3JlZl9wdXQoa3JlZiwgZHJtX2RwX2ZyZWVfbXN0X2JyYW5jaF9kZXZpY2UpOwor CWRybV9kcF9tc3RfcHV0X21zdGJfbWFsbG9jKG1zdGIpOwogfQogCi1zdGF0aWMgdm9pZCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3RiKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YikK Ky8qKgorICogZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X21zdGIoKSAtIEluY3JlbWVudCB0 aGUgdG9wb2xvZ3kgcmVmY291bnQgb2YgYQorICogYnJhbmNoIGRldmljZSB1bmxlc3MgaXRzIHpl cm8KKyAqIEBtc3RiOiAmc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoIHRvIGluY3JlbWVudCB0aGUg dG9wb2xvZ3kgcmVmY291bnQgb2YKKyAqCisgKiBBdHRlbXB0cyB0byBncmFiIGEgdG9wb2xvZ3kg cmVmZXJlbmNlIHRvIEBtc3RiLCBpZiBpdCBoYXNuJ3QgeWV0IGJlZW4KKyAqIHJlbW92ZWQgZnJv bSB0aGUgdG9wb2xvZ3kgKGUuZy4gJmRybV9kcF9tc3RfYnJhbmNoLnRvcG9sb2d5X2tyZWYgaGFz CisgKiByZWFjaGVkIDApLiBIb2xkaW5nIGEgdG9wb2xvZ3kgcmVmZXJlbmNlIGltcGxpZXMgdGhh dCBhIG1hbGxvYyByZWZlcmVuY2UKKyAqIHdpbGwgYmUgaGVsZCB0byBAbXN0YiBhcyBsb25nIGFz IHRoZSB1c2VyIGhvbGRzIHRoZSB0b3BvbG9neSByZWZlcmVuY2UuCisgKgorICogQ2FyZSBzaG91 bGQgYmUgdGFrZW4gdG8gZW5zdXJlIHRoYXQgdGhlIHVzZXIgaGFzIGF0IGxlYXN0IG9uZSBtYWxs b2MKKyAqIHJlZmVyZW5jZSB0byBAbXN0Yi4gSWYgeW91IGFscmVhZHkgaGF2ZSBhIHRvcG9sb2d5 IHJlZmVyZW5jZSB0byBAbXN0YiwgeW91CisgKiBzaG91bGQgdXNlIGRybV9kcF9tc3RfdG9wb2xv Z3lfZ2V0X21zdGIoKSBpbnN0ZWFkLgorICoKKyAqIFNlZSBhbHNvOgorICogZHJtX2RwX21zdF90 b3BvbG9neV9nZXRfbXN0YigpCisgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3RiKCkKKyAq CisgKiBSZXR1cm5zOgorICogKiAxOiBBIHRvcG9sb2d5IHJlZmVyZW5jZSB3YXMgZ3JhYmJlZCBz dWNjZXNzZnVsbHkKKyAqICogMDogQHBvcnQgaXMgbm8gbG9uZ2VyIGluIHRoZSB0b3BvbG9neSwg bm8gcmVmZXJlbmNlIHdhcyBncmFiYmVkCisgKi8KK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrCitk cm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfbXN0YihzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gg Km1zdGIpCiB7Ci0Ja3JlZl9wdXQoJm1zdGItPmtyZWYsIGRybV9kcF9kZXN0cm95X21zdF9icmFu Y2hfZGV2aWNlKTsKKwlpbnQgcmV0ID0ga3JlZl9nZXRfdW5sZXNzX3plcm8oJm1zdGItPnRvcG9s b2d5X2tyZWYpOworCisJaWYgKHJldCkKKwkJRFJNX0RFQlVHKCJtc3RiICVwICglZClcbiIsIG1z dGIsCisJCQkgIGtyZWZfcmVhZCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZikpOworCisJcmV0dXJuIHJl dDsKIH0KIAorLyoqCisgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiKCkgLSBJbmNyZW1l bnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50IG9mIGEKKyAqIGJyYW5jaCBkZXZpY2UKKyAqIEBtc3Ri OiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCB0byBpbmNyZW1lbnQgdGhlIHRvcG9sb2d5 IHJlZmNvdW50IG9mCisgKgorICogSW5jcmVtZW50cyAmZHJtX2RwX21zdF9icmFuY2gudG9wb2xv Z3lfcmVmY291bnQgd2l0aG91dCBjaGVja2luZyB3aGV0aGVyIG9yCisgKiBub3QgaXQncyBhbHJl YWR5IHJlYWNoZWQgMC4gVGhpcyBpcyBvbmx5IHZhbGlkIHRvIHVzZSBpbiBzY2VuYXJpb3Mgd2hl cmUKKyAqIHlvdSBhcmUgYWxyZWFkeSBndWFyYW50ZWVkIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGFj dGl2ZSB0b3BvbG9neSByZWZlcmVuY2UKKyAqIHRvIEBtc3RiLiBPdGhlcndpc2UsIGRybV9kcF9t c3RfdG9wb2xvZ3lfdHJ5X2dldF9tc3RiKCkgbXVzdCBiZSB1c2VkLgorICoKKyAqIFNlZSBhbHNv OgorICogZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X21zdGIoKQorICogZHJtX2RwX21zdF90 b3BvbG9neV9wdXRfbXN0YigpCisgKi8KK3N0YXRpYyB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lf Z2V0X21zdGIoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiKQoreworCVdBUk5fT04oa3Jl Zl9yZWFkKCZtc3RiLT50b3BvbG9neV9rcmVmKSA9PSAwKTsKKwlrcmVmX2dldCgmbXN0Yi0+dG9w b2xvZ3lfa3JlZik7CisJRFJNX0RFQlVHKCJtc3RiICVwICglZClcbiIsIG1zdGIsIGtyZWZfcmVh ZCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZikpOworfQorCisvKioKKyAqIGRybV9kcF9tc3RfdG9wb2xv Z3lfcHV0X21zdGIoKSAtIHJlbGVhc2UgYSB0b3BvbG9neSByZWZlcmVuY2UgdG8gYSBicmFuY2gK KyAqIGRldmljZQorICogQG1zdGI6IFRoZSAmc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoIHRvIHJl bGVhc2UgdGhlIHRvcG9sb2d5IHJlZmVyZW5jZSBmcm9tCisgKgorICogUmVsZWFzZXMgYSB0b3Bv bG9neSByZWZlcmVuY2UgZnJvbSBAbXN0YiBieSBkZWNyZW1lbnRpbmcKKyAqICZkcm1fZHBfbXN0 X2JyYW5jaC50b3BvbG9neV9rcmVmLgorICoKKyAqIFNlZSBhbHNvOgorICogZHJtX2RwX21zdF90 b3BvbG9neV90cnlfZ2V0X21zdGIoKQorICogZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0Yigp CisgKi8KK3N0YXRpYyB2b2lkCitkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3RiKHN0cnVjdCBk cm1fZHBfbXN0X2JyYW5jaCAqbXN0YikKK3sKKwlEUk1fREVCVUcoIm1zdGIgJXAgKCVkKVxuIiwK KwkJICBtc3RiLCBrcmVmX3JlYWQoJm1zdGItPnRvcG9sb2d5X2tyZWYpIC0gMSk7CisJa3JlZl9w dXQoJm1zdGItPnRvcG9sb2d5X2tyZWYsIGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hfZGV2aWNl KTsKK30KIAogc3RhdGljIHZvaWQgZHJtX2RwX3BvcnRfdGVhcmRvd25fcGR0KHN0cnVjdCBkcm1f ZHBfbXN0X3BvcnQgKnBvcnQsIGludCBvbGRfcGR0KQogewpAQCAtOTM3LDcgKzExNzIsOCBAQCBz dGF0aWMgdm9pZCBkcm1fZHBfcG9ydF90ZWFyZG93bl9wZHQoc3RydWN0IGRybV9kcF9tc3RfcG9y dCAqcG9ydCwgaW50IG9sZF9wZHQpCiAKIHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0cm95X3BvcnQo c3RydWN0IGtyZWYgKmtyZWYpCiB7Ci0Jc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCA9IGNv bnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0LCBrcmVmKTsKKwlzdHJ1Y3Qg ZHJtX2RwX21zdF9wb3J0ICpwb3J0ID0KKwkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBkcm1f ZHBfbXN0X3BvcnQsIHRvcG9sb2d5X2tyZWYpOwogCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyID0gcG9ydC0+bWdyOwogCiAJaWYgKCFwb3J0LT5pbnB1dCkgewpAQCAtOTU2LDcg KzExOTIsNiBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9wb3J0KHN0cnVjdCBrcmVmICpr cmVmKQogCQkJICogZnJvbSBhbiBFRElEIHJldHJpZXZhbCAqLwogCiAJCQltdXRleF9sb2NrKCZt Z3ItPmRlc3Ryb3lfY29ubmVjdG9yX2xvY2spOwotCQkJa3JlZl9nZXQoJnBvcnQtPnBhcmVudC0+ a3JlZik7CiAJCQlsaXN0X2FkZCgmcG9ydC0+bmV4dCwgJm1nci0+ZGVzdHJveV9jb25uZWN0b3Jf bGlzdCk7CiAJCQltdXRleF91bmxvY2soJm1nci0+ZGVzdHJveV9jb25uZWN0b3JfbG9jayk7CiAJ CQlzY2hlZHVsZV93b3JrKCZtZ3ItPmRlc3Ryb3lfY29ubmVjdG9yX3dvcmspOwpAQCAtOTY3LDEy ICsxMjAyLDc5IEBAIHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0cm95X3BvcnQoc3RydWN0IGtyZWYg KmtyZWYpCiAJCWRybV9kcF9wb3J0X3RlYXJkb3duX3BkdChwb3J0LCBwb3J0LT5wZHQpOwogCQlw b3J0LT5wZHQgPSBEUF9QRUVSX0RFVklDRV9OT05FOwogCX0KLQlrZnJlZShwb3J0KTsKKwlkcm1f ZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3J0KTsKK30KKworLyoqCisgKiBkcm1fZHBfbXN0X3Rv cG9sb2d5X3RyeV9nZXRfcG9ydCgpIC0gSW5jcmVtZW50IHRoZSB0b3BvbG9neSByZWZjb3VudCBv ZiBhCisgKiBwb3J0IHVubGVzcyBpdHMgemVybworICogQHBvcnQ6ICZzdHJ1Y3QgZHJtX2RwX21z dF9wb3J0IHRvIGluY3JlbWVudCB0aGUgdG9wb2xvZ3kgcmVmY291bnQgb2YKKyAqCisgKiBBdHRl bXB0cyB0byBncmFiIGEgdG9wb2xvZ3kgcmVmZXJlbmNlIHRvIEBwb3J0LCBpZiBpdCBoYXNuJ3Qg eWV0IGJlZW4KKyAqIHJlbW92ZWQgZnJvbSB0aGUgdG9wb2xvZ3kgKGUuZy4gJmRybV9kcF9tc3Rf cG9ydC50b3BvbG9neV9rcmVmIGhhcyByZWFjaGVkCisgKiAwKS4gSG9sZGluZyBhIHRvcG9sb2d5 IHJlZmVyZW5jZSBpbXBsaWVzIHRoYXQgYSBtYWxsb2MgcmVmZXJlbmNlIHdpbGwgYmUKKyAqIGhl bGQgdG8gQHBvcnQgYXMgbG9uZyBhcyB0aGUgdXNlciBob2xkcyB0aGUgdG9wb2xvZ3kgcmVmZXJl bmNlLgorICoKKyAqIENhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGVuc3VyZSB0aGF0IHRoZSB1c2Vy IGhhcyBhdCBsZWFzdCBvbmUgbWFsbG9jCisgKiByZWZlcmVuY2UgdG8gQHBvcnQuIElmIHlvdSBh bHJlYWR5IGhhdmUgYSB0b3BvbG9neSByZWZlcmVuY2UgdG8gQHBvcnQsIHlvdQorICogc2hvdWxk IHVzZSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0KCkgaW5zdGVhZC4KKyAqCisgKiBTZWUg YWxzbzoKKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQoKQorICogZHJtX2RwX21zdF90 b3BvbG9neV9wdXRfcG9ydCgpCisgKgorICogUmV0dXJuczoKKyAqICogMTogQSB0b3BvbG9neSBy ZWZlcmVuY2Ugd2FzIGdyYWJiZWQgc3VjY2Vzc2Z1bGx5CisgKiAqIDA6IEBwb3J0IGlzIG5vIGxv bmdlciBpbiB0aGUgdG9wb2xvZ3ksIG5vIHJlZmVyZW5jZSB3YXMgZ3JhYmJlZAorICovCitzdGF0 aWMgaW50IF9fbXVzdF9jaGVjaworZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X3BvcnQoc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcmV0ID0ga3JlZl9nZXRfdW5sZXNz X3plcm8oJnBvcnQtPnRvcG9sb2d5X2tyZWYpOworCisJaWYgKHJldCkKKwkJRFJNX0RFQlVHKCJw b3J0ICVwICglZClcbiIsIHBvcnQsCisJCQkgIGtyZWZfcmVhZCgmcG9ydC0+dG9wb2xvZ3lfa3Jl ZikpOworCisJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X2dl dF9wb3J0KCkgLSBJbmNyZW1lbnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50IG9mIGEgcG9ydAorICog QHBvcnQ6IFRoZSAmc3RydWN0IGRybV9kcF9tc3RfcG9ydCB0byBpbmNyZW1lbnQgdGhlIHRvcG9s b2d5IHJlZmNvdW50IG9mCisgKgorICogSW5jcmVtZW50cyAmZHJtX2RwX21zdF9wb3J0LnRvcG9s b2d5X3JlZmNvdW50IHdpdGhvdXQgY2hlY2tpbmcgd2hldGhlciBvcgorICogbm90IGl0J3MgYWxy ZWFkeSByZWFjaGVkIDAuIFRoaXMgaXMgb25seSB2YWxpZCB0byB1c2UgaW4gc2NlbmFyaW9zIHdo ZXJlCisgKiB5b3UgYXJlIGFscmVhZHkgZ3VhcmFudGVlZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBh Y3RpdmUgdG9wb2xvZ3kgcmVmZXJlbmNlCisgKiB0byBAcG9ydC4gT3RoZXJ3aXNlLCBkcm1fZHBf bXN0X3RvcG9sb2d5X3RyeV9nZXRfcG9ydCgpIG11c3QgYmUgdXNlZC4KKyAqCisgKiBTZWUgYWxz bzoKKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9wb3J0KCkKKyAqIGRybV9kcF9tc3Rf dG9wb2xvZ3lfcHV0X3BvcnQoKQorICovCitzdGF0aWMgdm9pZCBkcm1fZHBfbXN0X3RvcG9sb2d5 X2dldF9wb3J0KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpCit7CisJV0FSTl9PTihrcmVm X3JlYWQoJnBvcnQtPnRvcG9sb2d5X2tyZWYpID09IDApOworCWtyZWZfZ2V0KCZwb3J0LT50b3Bv bG9neV9rcmVmKTsKKwlEUk1fREVCVUcoInBvcnQgJXAgKCVkKVxuIiwgcG9ydCwga3JlZl9yZWFk KCZwb3J0LT50b3BvbG9neV9rcmVmKSk7Cit9CisKKy8qKgorICogZHJtX2RwX21zdF90b3BvbG9n eV9wdXRfcG9ydCgpIC0gcmVsZWFzZSBhIHRvcG9sb2d5IHJlZmVyZW5jZSB0byBhIHBvcnQKKyAq IEBwb3J0OiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgdG8gcmVsZWFzZSB0aGUgdG9wb2xv Z3kgcmVmZXJlbmNlIGZyb20KKyAqCisgKiBSZWxlYXNlcyBhIHRvcG9sb2d5IHJlZmVyZW5jZSBm cm9tIEBwb3J0IGJ5IGRlY3JlbWVudGluZworICogJmRybV9kcF9tc3RfcG9ydC50b3BvbG9neV9r cmVmLgorICoKKyAqIFNlZSBhbHNvOgorICogZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X3Bv cnQoKQorICogZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydCgpCisgKi8KIHN0YXRpYyB2b2lk IGRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQoc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9y dCkKIHsKLQlrcmVmX3B1dCgmcG9ydC0+a3JlZiwgZHJtX2RwX2Rlc3Ryb3lfcG9ydCk7CisJRFJN X0RFQlVHKCJwb3J0ICVwICglZClcbiIsCisJCSAgcG9ydCwga3JlZl9yZWFkKCZwb3J0LT50b3Bv bG9neV9rcmVmKSAtIDEpOworCWtyZWZfcHV0KCZwb3J0LT50b3BvbG9neV9rcmVmLCBkcm1fZHBf ZGVzdHJveV9wb3J0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqCkBA IC05ODEsMTAgKzEyODMsMTAgQEAgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0Yl92YWxpZGF0 ZWRfbG9ja2VkKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwKIHsKIAlzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0ICpwb3J0OwogCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqcm1zdGI7Ci0J aWYgKHRvX2ZpbmQgPT0gbXN0YikgewotCQlrcmVmX2dldCgmbXN0Yi0+a3JlZik7CisKKwlpZiAo dG9fZmluZCA9PSBtc3RiKQogCQlyZXR1cm4gbXN0YjsKLQl9CisKIAlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHBvcnQsICZtc3RiLT5wb3J0cywgbmV4dCkgewogCQlpZiAocG9ydC0+bXN0YikgewogCQkJ cm1zdGIgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiX3ZhbGlkYXRlZF9sb2NrZWQoCkBA IC0xMDAxLDI1ICsxMzAzLDMyIEBAIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGJfdmFsaWRh dGVkKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAogCQkJCSAgICAgICBzdHJ1 Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIpCiB7CiAJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNo ICpybXN0YiA9IE5VTEw7CisKIAltdXRleF9sb2NrKCZtZ3ItPmxvY2spOwotCWlmIChtZ3ItPm1z dF9wcmltYXJ5KQorCWlmIChtZ3ItPm1zdF9wcmltYXJ5KSB7CiAJCXJtc3RiID0gZHJtX2RwX21z dF90b3BvbG9neV9nZXRfbXN0Yl92YWxpZGF0ZWRfbG9ja2VkKAogCQkgICAgbWdyLT5tc3RfcHJp bWFyeSwgbXN0Yik7CisKKwkJaWYgKHJtc3RiICYmICFkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9n ZXRfbXN0YihybXN0YikpCisJCQlybXN0YiA9IE5VTEw7CisJfQogCW11dGV4X3VubG9jaygmbWdy LT5sb2NrKTsKIAlyZXR1cm4gcm1zdGI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpkcm1fZHBfbXN0X2dldF9wb3J0X3JlZl9sb2NrZWQoc3RydWN0IGRybV9kcF9tc3RfYnJh bmNoICptc3RiLCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICp0b19maW5kKQorc3RhdGljIHN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgKgorZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0 ZWRfbG9ja2VkKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwKKwkJCQkJICAgICAgc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAqdG9fZmluZCkKIHsKIAlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0 ICpwb3J0LCAqbXBvcnQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZtc3RiLT5wb3J0 cywgbmV4dCkgewotCQlpZiAocG9ydCA9PSB0b19maW5kKSB7Ci0JCQlrcmVmX2dldCgmcG9ydC0+ a3JlZik7CisJCWlmIChwb3J0ID09IHRvX2ZpbmQpCiAJCQlyZXR1cm4gcG9ydDsKLQkJfQorCiAJ CWlmIChwb3J0LT5tc3RiKSB7Ci0JCQltcG9ydCA9IGRybV9kcF9tc3RfZ2V0X3BvcnRfcmVmX2xv Y2tlZChwb3J0LT5tc3RiLCB0b19maW5kKTsKKwkJCW1wb3J0ID0gZHJtX2RwX21zdF90b3BvbG9n eV9nZXRfcG9ydF92YWxpZGF0ZWRfbG9ja2VkKAorCQkJICAgIHBvcnQtPm1zdGIsIHRvX2ZpbmQp OwogCQkJaWYgKG1wb3J0KQogCQkJCXJldHVybiBtcG9ydDsKIAkJfQpAQCAtMTAzMiw5ICsxMzQx LDE1IEBAIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnRfdmFsaWRhdGVkKHN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAogCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0KQogewogCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnJwb3J0ID0gTlVMTDsKKwog CW11dGV4X2xvY2soJm1nci0+bG9jayk7Ci0JaWYgKG1nci0+bXN0X3ByaW1hcnkpCi0JCXJwb3J0 ID0gZHJtX2RwX21zdF9nZXRfcG9ydF9yZWZfbG9ja2VkKG1nci0+bXN0X3ByaW1hcnksIHBvcnQp OworCWlmIChtZ3ItPm1zdF9wcmltYXJ5KSB7CisJCXJwb3J0ID0gZHJtX2RwX21zdF90b3BvbG9n eV9nZXRfcG9ydF92YWxpZGF0ZWRfbG9ja2VkKAorCQkgICAgbWdyLT5tc3RfcHJpbWFyeSwgcG9y dCk7CisKKwkJaWYgKHJwb3J0ICYmICFkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfcG9ydChy cG9ydCkpCisJCQlycG9ydCA9IE5VTEw7CisJfQogCW11dGV4X3VubG9jaygmbWdyLT5sb2NrKTsK IAlyZXR1cm4gcnBvcnQ7CiB9CkBAIC0xMDQyLDExICsxMzU3LDEyIEBAIGRybV9kcF9tc3RfdG9w b2xvZ3lfZ2V0X3BvcnRfdmFsaWRhdGVkKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAq bWdyLAogc3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKmRybV9kcF9nZXRfcG9ydChzdHJ1 Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIsIHU4IHBvcnRfbnVtKQogewogCXN0cnVjdCBkcm1f ZHBfbXN0X3BvcnQgKnBvcnQ7CisJaW50IHJldDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9y dCwgJm1zdGItPnBvcnRzLCBuZXh0KSB7CiAJCWlmIChwb3J0LT5wb3J0X251bSA9PSBwb3J0X251 bSkgewotCQkJa3JlZl9nZXQoJnBvcnQtPmtyZWYpOwotCQkJcmV0dXJuIHBvcnQ7CisJCQlyZXQg PSBkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfcG9ydChwb3J0KTsKKwkJCXJldHVybiByZXQg PyBwb3J0IDogTlVMTDsKIAkJfQogCX0KIApAQCAtMTA5NSw2ICsxNDExLDExIEBAIHN0YXRpYyBi b29sIGRybV9kcF9wb3J0X3NldHVwX3BkdChzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQog CQlpZiAocG9ydC0+bXN0YikgewogCQkJcG9ydC0+bXN0Yi0+bWdyID0gcG9ydC0+bWdyOwogCQkJ cG9ydC0+bXN0Yi0+cG9ydF9wYXJlbnQgPSBwb3J0OworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSB0 aGlzIHBvcnQncyBtZW1vcnkgYWxsb2NhdGlvbiBzdGF5cworCQkJICogYXJvdW5kIHVudGlsIGl0 J3MgY2hpbGQgTVNUQiByZWxlYXNlcyBpdAorCQkJICovCisJCQlkcm1fZHBfbXN0X2dldF9wb3J0 X21hbGxvYyhwb3J0KTsKIAogCQkJc2VuZF9saW5rID0gdHJ1ZTsKIAkJfQpAQCAtMTE1NSwxNyAr MTQ3NiwyNiBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfYWRkX3BvcnQoc3RydWN0IGRybV9kcF9tc3Rf YnJhbmNoICptc3RiLAogCWJvb2wgY3JlYXRlZCA9IGZhbHNlOwogCWludCBvbGRfcGR0ID0gMDsK IAlpbnQgb2xkX2RkcHMgPSAwOworCiAJcG9ydCA9IGRybV9kcF9nZXRfcG9ydChtc3RiLCBwb3J0 X21zZy0+cG9ydF9udW1iZXIpOwogCWlmICghcG9ydCkgewogCQlwb3J0ID0ga3phbGxvYyhzaXpl b2YoKnBvcnQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwb3J0KQogCQkJcmV0dXJuOwotCQlrcmVm X2luaXQoJnBvcnQtPmtyZWYpOworCQlrcmVmX2luaXQoJnBvcnQtPnRvcG9sb2d5X2tyZWYpOwor CQlrcmVmX2luaXQoJnBvcnQtPm1hbGxvY19rcmVmKTsKIAkJcG9ydC0+cGFyZW50ID0gbXN0YjsK IAkJcG9ydC0+cG9ydF9udW0gPSBwb3J0X21zZy0+cG9ydF9udW1iZXI7CiAJCXBvcnQtPm1nciA9 IG1zdGItPm1ncjsKIAkJcG9ydC0+YXV4Lm5hbWUgPSAiRFBNU1QiOwogCQlwb3J0LT5hdXguZGV2 ID0gZGV2LT5kZXY7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSBtZW1vcnkgYWxsb2NhdGlv biBmb3Igb3VyIHBhcmVudCBicmFuY2ggc3RheXMKKwkJICogYXJvdW5kIHVudGlsIG91ciBvd24g bWVtb3J5IGFsbG9jYXRpb24gaXMgcmVsZWFzZWQKKwkJICovCisJCWRybV9kcF9tc3RfZ2V0X21z dGJfbWFsbG9jKG1zdGIpOworCiAJCWNyZWF0ZWQgPSB0cnVlOwogCX0gZWxzZSB7CiAJCW9sZF9w ZHQgPSBwb3J0LT5wZHQ7CkBAIC0xMTg1LDcgKzE1MTUsNyBAQCBzdGF0aWMgdm9pZCBkcm1fZHBf YWRkX3BvcnQoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiLAogCSAgIGZvciB0aGlzIGxp c3QgKi8KIAlpZiAoY3JlYXRlZCkgewogCQltdXRleF9sb2NrKCZtc3RiLT5tZ3ItPmxvY2spOwot CQlrcmVmX2dldCgmcG9ydC0+a3JlZik7CisJCWRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQo cG9ydCk7CiAJCWxpc3RfYWRkKCZwb3J0LT5uZXh0LCAmbXN0Yi0+cG9ydHMpOwogCQltdXRleF91 bmxvY2soJm1zdGItPm1nci0+bG9jayk7CiAJfQpAQCAtMTI4NCw3ICsxNjE0LDcgQEAgc3RhdGlj IHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqZHJtX2RwX2dldF9tc3RfYnJhbmNoX2RldmljZShz dHJ1Y3QgZHJtX2RwX21zdF8KIHsKIAlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGI7CiAJ c3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0OwogCS8q IGZpbmQgdGhlIHBvcnQgYnkgaXRlcmF0aW5nIGRvd24gKi8KIAogCW11dGV4X2xvY2soJm1nci0+ bG9jayk7CkBAIC0xMzA5LDcgKzE2MzksOSBAQCBzdGF0aWMgc3RydWN0IGRybV9kcF9tc3RfYnJh bmNoICpkcm1fZHBfZ2V0X21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdCBkcm1fZHBfbXN0XwogCQkJ fQogCQl9CiAJfQotCWtyZWZfZ2V0KCZtc3RiLT5rcmVmKTsKKwlyZXQgPSBkcm1fZHBfbXN0X3Rv cG9sb2d5X3RyeV9nZXRfbXN0Yihtc3RiKTsKKwlpZiAoIXJldCkKKwkJbXN0YiA9IE5VTEw7CiBv dXQ6CiAJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxvY2spOwogCXJldHVybiBtc3RiOwpAQCAtMTM0NCwx NCArMTY3NiwxNyBAQCBkcm1fZHBfZ2V0X21zdF9icmFuY2hfZGV2aWNlX2J5X2d1aWQoc3RydWN0 IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCiAJCQkJICAgICB1aW50OF90ICpndWlkKQog ewogCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YjsKKwlpbnQgcmV0OwogCiAJLyogZmlu ZCB0aGUgcG9ydCBieSBpdGVyYXRpbmcgZG93biAqLwogCW11dGV4X2xvY2soJm1nci0+bG9jayk7 CiAKIAltc3RiID0gZ2V0X21zdF9icmFuY2hfZGV2aWNlX2J5X2d1aWRfaGVscGVyKG1nci0+bXN0 X3ByaW1hcnksIGd1aWQpOwotCi0JaWYgKG1zdGIpCi0JCWtyZWZfZ2V0KCZtc3RiLT5rcmVmKTsK KwlpZiAobXN0YikgeworCQlyZXQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfbXN0Yiht c3RiKTsKKwkJaWYgKCFyZXQpCisJCQltc3RiID0gTlVMTDsKKwl9CiAKIAltdXRleF91bmxvY2so Jm1nci0+bG9jayk7CiAJcmV0dXJuIG1zdGI7CkBAIC0xMzkwLDExICsxNzI1LDE0IEBAIHN0YXRp YyB2b2lkIGRybV9kcF9tc3RfbGlua19wcm9iZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y aykKIHsKIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciA9IGNvbnRhaW5lcl9v Zih3b3JrLCBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IsIHdvcmspOwogCXN0cnVjdCBk cm1fZHBfbXN0X2JyYW5jaCAqbXN0YjsKKwlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmbWdyLT5s b2NrKTsKIAltc3RiID0gbWdyLT5tc3RfcHJpbWFyeTsKIAlpZiAobXN0YikgewotCQlrcmVmX2dl dCgmbXN0Yi0+a3JlZik7CisJCXJldCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9tc3Ri KG1zdGIpOworCQlpZiAoIXJldCkKKwkJCW1zdGIgPSBOVUxMOwogCX0KIAltdXRleF91bmxvY2so Jm1nci0+bG9jayk7CiAJaWYgKG1zdGIpIHsKQEAgLTE3MjIsOCArMjA2MCwxMCBAQCBzdGF0aWMg c3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICpkcm1fZHBfZ2V0X2xhc3RfY29ubmVjdGVkX3BvcnRf YW5kX21zdGIoc3RydWN0CiAKIAkJaWYgKGZvdW5kX3BvcnQpIHsKIAkJCXJtc3RiID0gZm91bmRf cG9ydC0+cGFyZW50OwotCQkJa3JlZl9nZXQoJnJtc3RiLT5rcmVmKTsKLQkJCSpwb3J0X251bSA9 IGZvdW5kX3BvcnQtPnBvcnRfbnVtOworCQkJaWYgKGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dl dF9tc3RiKHJtc3RiKSkKKwkJCQkqcG9ydF9udW0gPSBmb3VuZF9wb3J0LT5wb3J0X251bTsKKwkJ CWVsc2UKKwkJCQlybXN0YiA9IE5VTEw7CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxv Y2spOwpAQCAtMjE3Niw3ICsyNTE2LDcgQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3Nl dF9tc3Qoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIGJvb2wgbXMKIAogCQkv KiBnaXZlIHRoaXMgdGhlIG1haW4gcmVmZXJlbmNlICovCiAJCW1nci0+bXN0X3ByaW1hcnkgPSBt c3RiOwotCQlrcmVmX2dldCgmbWdyLT5tc3RfcHJpbWFyeS0+a3JlZik7CisJCWRybV9kcF9tc3Rf dG9wb2xvZ3lfZ2V0X21zdGIobWdyLT5tc3RfcHJpbWFyeSk7CiAKIAkJcmV0ID0gZHJtX2RwX2Rw Y2Rfd3JpdGViKG1nci0+YXV4LCBEUF9NU1RNX0NUUkwsCiAJCQkJCQkJIERQX01TVF9FTiB8IERQ X1VQX1JFUV9FTiB8IERQX1VQU1RSRUFNX0lTX1NSQyk7CkBAIC0zMDk2LDEzICszNDM2LDYgQEAg c3RhdGljIHZvaWQgZHJtX2RwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCW11 dGV4X3VubG9jaygmbWdyLT5xbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIGRybV9kcF9mcmVlX21z dF9wb3J0KHN0cnVjdCBrcmVmICprcmVmKQotewotCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBv cnQgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCwga3JlZik7Ci0J a3JlZl9wdXQoJnBvcnQtPnBhcmVudC0+a3JlZiwgZHJtX2RwX2ZyZWVfbXN0X2JyYW5jaF9kZXZp Y2UpOwotCWtmcmVlKHBvcnQpOwotfQotCiBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9jb25u ZWN0b3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3IgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyLCBkZXN0cm95X2Nvbm5lY3Rvcl93b3JrKTsKQEAgLTMxMjMsNyArMzQ1 Niw2IEBAIHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrKHN0cnVjdCB3 b3JrX3N0cnVjdCAqd29yaykKIAkJbGlzdF9kZWwoJnBvcnQtPm5leHQpOwogCQltdXRleF91bmxv Y2soJm1nci0+ZGVzdHJveV9jb25uZWN0b3JfbG9jayk7CiAKLQkJa3JlZl9pbml0KCZwb3J0LT5r cmVmKTsKIAkJSU5JVF9MSVNUX0hFQUQoJnBvcnQtPm5leHQpOwogCiAJCW1nci0+Y2JzLT5kZXN0 cm95X2Nvbm5lY3RvcihtZ3IsIHBvcnQtPmNvbm5lY3Rvcik7CkBAIC0zMTM3LDcgKzM0NjksNyBA QCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9jb25uZWN0b3Jfd29yayhzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspCiAJCQlkcm1fZHBfbXN0X3B1dF9wYXlsb2FkX2lkKG1nciwgcG9ydC0+dmNw aS52Y3BpKTsKIAkJfQogCi0JCWtyZWZfcHV0KCZwb3J0LT5rcmVmLCBkcm1fZHBfZnJlZV9tc3Rf cG9ydCk7CisJCWRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKHBvcnQpOwogCQlzZW5kX2hvdHBs dWcgPSB0cnVlOwogCX0KIAlpZiAoc2VuZF9ob3RwbHVnKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9k cm0vZHJtX2RwX21zdF9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgK aW5kZXggNDM1NWI1NWQwMDgxLi43MGVjNDUyZjJhNDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJt L2RybV9kcF9tc3RfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIu aApAQCAtNDQsNyArNDQsNiBAQCBzdHJ1Y3QgZHJtX2RwX3ZjcGkgewogCiAvKioKICAqIHN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgLSBNU1QgcG9ydAotICogQGtyZWY6IHJlZmVyZW5jZSBjb3VudCBm b3IgdGhpcyBwb3J0LgogICogQHBvcnRfbnVtOiBwb3J0IG51bWJlcgogICogQGlucHV0OiBpZiB0 aGlzIHBvcnQgaXMgYW4gaW5wdXQgcG9ydC4KICAqIEBtY3M6IG1lc3NhZ2UgY2FwYWJpbGl0eSBz dGF0dXMgLSBEUCAxLjIgc3BlYy4KQEAgLTY3LDcgKzY2LDE4IEBAIHN0cnVjdCBkcm1fZHBfdmNw aSB7CiAgKiBpbiB0aGUgTVNUIHRvcG9sb2d5LgogICovCiBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0 IHsKLQlzdHJ1Y3Qga3JlZiBrcmVmOworCS8qKgorCSAqIEB0b3BvbG9neV9rcmVmOiByZWZjb3Vu dCBmb3IgdGhpcyBwb3J0J3MgbGlmZXRpbWUgaW4gdGhlIHRvcG9sb2d5LAorCSAqIG9ubHkgdGhl IERQIE1TVCBoZWxwZXJzIHNob3VsZCBuZWVkIHRvIHRvdWNoIHRoaXMKKwkgKi8KKwlzdHJ1Y3Qg a3JlZiB0b3BvbG9neV9rcmVmOworCisJLyoqCisJICogQG1hbGxvY19rcmVmOiByZWZjb3VudCBm b3IgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRhaW5pbmcgdGhpcworCSAqIHN0cnVjdHVyZS4g U2VlIGRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKCkgYW5kCisJICogZHJtX2RwX21zdF9wdXRf cG9ydF9tYWxsb2MoKS4KKwkgKi8KKwlzdHJ1Y3Qga3JlZiBtYWxsb2Nfa3JlZjsKIAogCXU4IHBv cnRfbnVtOwogCWJvb2wgaW5wdXQ7CkBAIC0xMDIsNyArMTEyLDYgQEAgc3RydWN0IGRybV9kcF9t c3RfcG9ydCB7CiAKIC8qKgogICogc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoIC0gTVNUIGJyYW5j aCBkZXZpY2UuCi0gKiBAa3JlZjogcmVmZXJlbmNlIGNvdW50IGZvciB0aGlzIHBvcnQuCiAgKiBA cmFkOiBSZWxhdGl2ZSBBZGRyZXNzIHRvIHRhbGsgdG8gdGhpcyBicmFuY2ggZGV2aWNlLgogICog QGxjdDogTGluayBjb3VudCB0b3RhbCB0byB0YWxrIHRvIHRoaXMgYnJhbmNoIGRldmljZS4KICAq IEBudW1fcG9ydHM6IG51bWJlciBvZiBwb3J0cyBvbiB0aGUgYnJhbmNoLgpAQCAtMTIxLDcgKzEz MCwxOSBAQCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHsKICAqIHRvIGRvd25zdHJlYW0gcG9ydCBv ZiBwYXJlbnQgYnJhbmNoZXMuCiAgKi8KIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCB7Ci0Jc3Ry dWN0IGtyZWYga3JlZjsKKwkvKioKKwkgKiBAdG9wb2xvZ3lfa3JlZjogcmVmY291bnQgZm9yIHRo aXMgYnJhbmNoIGRldmljZSdzIGxpZmV0aW1lIGluIHRoZQorCSAqIHRvcG9sb2d5LCBvbmx5IHRo ZSBEUCBNU1QgaGVscGVycyBzaG91bGQgbmVlZCB0byB0b3VjaCB0aGlzCisJICovCisJc3RydWN0 IGtyZWYgdG9wb2xvZ3lfa3JlZjsKKworCS8qKgorCSAqIEBtYWxsb2Nfa3JlZjogcmVmY291bnQg Zm9yIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBjb250YWluaW5nIHRoaXMKKwkgKiBzdHJ1Y3R1cmUu IFNlZSBkcm1fZHBfbXN0X2dldF9tc3RiX21hbGxvYygpIGFuZAorCSAqIGRybV9kcF9tc3RfcHV0 X21zdGJfbWFsbG9jKCkuCisJICovCisJc3RydWN0IGtyZWYgbWFsbG9jX2tyZWY7CisKIAl1OCBy YWRbOF07CiAJdTggbGN0OwogCWludCBudW1fcG9ydHM7CkBAIC02MjcsNCArNjQ4LDcgQEAgaW50 IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwKIGludCBkcm1fZHBfc2VuZF9wb3dlcl91cGRvd25fcGh5KHN0cnVjdCBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyLAogCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0 LCBib29sIHBvd2VyX3VwKTsKIAordm9pZCBkcm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYyhzdHJ1 Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsKK3ZvaWQgZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxs b2Moc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCk7CisKICNlbmRpZgotLSAKMi4yMC4xCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1h aWxpbmcgbGlzdApOb3V2ZWF1QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL25vdXZlYXUK