From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [RFC,v2,2/3] usb: typec: Bus type for alternate modes From: Guenter Roeck Message-Id: <20180316213336.GA11002@roeck-us.net> Date: Fri, 16 Mar 2018 14:33:36 -0700 To: Heikki Krogerus Cc: Greg Kroah-Hartman , Hans de Goede , Jun Li , "Regupathy, Rajaram" , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org List-ID: T24gRnJpLCBNYXIgMDksIDIwMTggYXQgMDY6MTk6MTdQTSArMDMwMCwgSGVpa2tpIEtyb2dlcnVz IHdyb3RlOgo+IEludHJvZHVjaW5nIGEgc2ltcGxlIGJ1cyBmb3IgdGhlIGFsdGVybmF0ZSBtb2Rl cy4gQnVzIGFsbG93cwo+IGJpbmRpbmcgZHJpdmVycyB0byB0aGUgZGlzY292ZXJlZCBhbHRlcm5h dGUgbW9kZXMgdGhlCj4gcGFydG5lcnMgc3VwcG9ydC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBIZWlr a2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gIERv Y3VtZW50YXRpb24vQUJJL29ic29sZXRlL3N5c2ZzLWNsYXNzLXR5cGVjIHwgIDQ4ICsrKwo+ICBE b2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy10eXBlYyAgICB8ICA1MSArKysrCj4g IERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdHlwZWMgIHwgIDYyICstLS0K PiAgRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3VzYi90eXBlY19idXMucnN0ICAgfCAxNDMgKysr KysrKysrCj4gIGRyaXZlcnMvdXNiL3R5cGVjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwg ICAyICstCj4gIGRyaXZlcnMvdXNiL3R5cGVjL2J1cy5jICAgICAgICAgICAgICAgICAgICAgIHwg NDIxICsrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL3VzYi90eXBlYy9idXMu aCAgICAgICAgICAgICAgICAgICAgICB8ICAzNyArKysKPiAgZHJpdmVycy91c2IvdHlwZWMvY2xh c3MuYyAgICAgICAgICAgICAgICAgICAgfCAzMjUgKysrKysrKysrKysrKysrKystLS0tCj4gIGlu Y2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmggICAgICAgICAgICAgIHwgIDE1ICsKPiAgaW5j bHVkZS9saW51eC91c2IvdHlwZWMuaCAgICAgICAgICAgICAgICAgICAgfCAgMTYgKy0KPiAgaW5j bHVkZS9saW51eC91c2IvdHlwZWNfYWx0bW9kZS5oICAgICAgICAgICAgfCAxMzYgKysrKysrKysr Cj4gIHNjcmlwdHMvbW9kL2RldmljZXRhYmxlLW9mZnNldHMuYyAgICAgICAgICAgIHwgICA0ICsK PiAgc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jICAgICAgICAgICAgICAgICAgICAgfCAgMTMgKwo+ ICAxMyBmaWxlcyBjaGFuZ2VkLCAxMTM4IGluc2VydGlvbnMoKyksIDEzNSBkZWxldGlvbnMoLSkK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vQUJJL29ic29sZXRlL3N5c2ZzLWNs YXNzLXR5cGVjCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5n L3N5c2ZzLWJ1cy10eXBlYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kcml2 ZXItYXBpL3VzYi90eXBlY19idXMucnN0Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Vz Yi90eXBlYy9idXMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvdHlwZWMvYnVz LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvdXNiL3R5cGVjX2FsdG1vZGUu aAo+IAo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS9vYnNvbGV0ZS9zeXNmcy1jbGFz cy10eXBlYyBiL0RvY3VtZW50YXRpb24vQUJJL29ic29sZXRlL3N5c2ZzLWNsYXNzLXR5cGVjCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjMyNjIzNTE0ZWU4Nwo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9Eb2N1bWVudGF0aW9uL0FCSS9vYnNvbGV0ZS9zeXNmcy1j bGFzcy10eXBlYwo+IEBAIC0wLDAgKzEsNDggQEAKPiArVGhlc2UgZmlsZXMgYXJlIGRlcHJlY2F0 ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gVGhlIHNhbWUgZmlsZXMgYXJlIGF2YWlsYWJsZQo+ICt1 bmRlciAvc3lzL2J1cy90eXBlYyAoc2VlIERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMt YnVzLXR5cGVjKS4KPiArCj4gK1doYXQ6CQkvc3lzL2NsYXNzL3R5cGVjLzxwb3J0fHBhcnRuZXJ8 Y2FibGU+LzxkZXY+L3N2aWQKPiArRGF0ZToJCUFwcmlsIDIwMTcKPiArQ29udGFjdDoJSGVpa2tp IEtyb2dlcnVzIDxoZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwuY29tPgo+ICtEZXNjcmlwdGlv bjoKPiArCQlUaGUgU1ZJRCAoU3RhbmRhcmQgb3IgVmVuZG9yIElEKSBhc3NpZ25lZCBieSBVU0It SUYgZm9yIHRoaXMKPiArCQlhbHRlcm5hdGUgbW9kZS4KPiArCj4gK1doYXQ6CQkvc3lzL2NsYXNz L3R5cGVjLzxwb3J0fHBhcnRuZXJ8Y2FibGU+LzxkZXY+L21vZGU8aW5kZXg+Lwo+ICtEYXRlOgkJ QXByaWwgMjAxNwo+ICtDb250YWN0OglIZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0Bs aW51eC5pbnRlbC5jb20+Cj4gK0Rlc2NyaXB0aW9uOgo+ICsJCUV2ZXJ5IHN1cHBvcnRlZCBtb2Rl IHdpbGwgaGF2ZSBpdHMgb3duIGRpcmVjdG9yeS4gVGhlIG5hbWUgb2YKPiArCQlhIG1vZGUgd2ls bCBiZSAibW9kZTxpbmRleD4iIChmb3IgZXhhbXBsZSBtb2RlMSksIHdoZXJlIDxpbmRleD4KPiAr CQlpcyB0aGUgYWN0dWFsIGluZGV4IHRvIHRoZSBtb2RlIFZETyByZXR1cm5lZCBieSBEaXNjb3Zl ciBNb2Rlcwo+ICsJCVVTQiBwb3dlciBkZWxpdmVyeSBjb21tYW5kLgo+ICsKPiArV2hhdDoJCS9z eXMvY2xhc3MvdHlwZWMvPHBvcnR8cGFydG5lcnxjYWJsZT4vPGRldj4vbW9kZTxpbmRleD4vZGVz Y3JpcHRpb24KPiArRGF0ZToJCUFwcmlsIDIwMTcKPiArQ29udGFjdDoJSGVpa2tpIEtyb2dlcnVz IDxoZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwuY29tPgo+ICtEZXNjcmlwdGlvbjoKPiArCQlT aG93cyBkZXNjcmlwdGlvbiBvZiB0aGUgbW9kZS4gVGhlIGRlc2NyaXB0aW9uIGlzIG9wdGlvbmFs IGZvcgo+ICsJCXRoZSBkcml2ZXJzLCBqdXN0IGxpa2Ugd2l0aCB0aGUgQmlsbGJvYXJkIERldmlj ZXMuCj4gKwo+ICtXaGF0OgkJL3N5cy9jbGFzcy90eXBlYy88cG9ydHxwYXJ0bmVyfGNhYmxlPi88 ZGV2Pi9tb2RlPGluZGV4Pi92ZG8KPiArRGF0ZToJCUFwcmlsIDIwMTcKPiArQ29udGFjdDoJSGVp a2tpIEtyb2dlcnVzIDxoZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwuY29tPgo+ICtEZXNjcmlw dGlvbjoKPiArCQlTaG93cyB0aGUgVkRPIGluIGhleGFkZWNpbWFsIHJldHVybmVkIGJ5IERpc2Nv dmVyIE1vZGVzIGNvbW1hbmQKPiArCQlmb3IgdGhpcyBtb2RlLgo+ICsKPiArV2hhdDoJCS9zeXMv Y2xhc3MvdHlwZWMvPHBvcnR8cGFydG5lcnxjYWJsZT4vPGRldj4vbW9kZTxpbmRleD4vYWN0aXZl Cj4gK0RhdGU6CQlBcHJpbCAyMDE3Cj4gK0NvbnRhY3Q6CUhlaWtraSBLcm9nZXJ1cyA8aGVpa2tp Lmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbT4KPiArRGVzY3JpcHRpb246Cj4gKwkJU2hvd3MgaWYg dGhlIG1vZGUgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZAo+ICsJ CWZvciBlbnRlcmluZy9leGl0aW5nIHRoZSBtb2RlIHdpdGggcGFydG5lcnMgYW5kIGNhYmxlIHBs dWdzLCBhbmQKPiArCQl3aXRoIHRoZSBwb3J0IGFsdGVybmF0ZSBtb2RlcyBpdCBjYW4gYmUgdXNl ZCBmb3IgZGlzYWJsaW5nCj4gKwkJc3VwcG9ydCBmb3Igc3BlY2lmaWMgYWx0ZXJuYXRlIG1vZGVz LiBFbnRlcmluZy9leGl0aW5nIG1vZGVzIGlzCj4gKwkJc3VwcG9ydGVkIGFzIHN5bmNocm9ub3Vz IG9wZXJhdGlvbiBzbyB3cml0ZSgyKSB0byB0aGUgYXR0cmlidXRlCj4gKwkJZG9lcyBub3QgcmV0 dXJuIHVudGlsIHRoZSBlbnRlci9leGl0IG1vZGUgb3BlcmF0aW9uIGhhcwo+ICsJCWZpbmlzaGVk LiBUaGUgYXR0cmlidXRlIGlzIG5vdGlmaWVkIHdoZW4gdGhlIG1vZGUgaXMKPiArCQllbnRlcmVk L2V4aXRlZCBzbyBwb2xsKDIpIG9uIHRoZSBhdHRyaWJ1dGUgd2FrZXMgdXAuCj4gKwkJRW50ZXJp bmcvZXhpdGluZyBhIG1vZGUgd2lsbCBhbHNvIGdlbmVyYXRlIHVldmVudCBLT0JKX0NIQU5HRS4K PiArCj4gKwkJVmFsaWQgdmFsdWVzOiB5ZXMsIG5vCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRp b24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXR5cGVjIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGlu Zy9zeXNmcy1idXMtdHlwZWMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAwMC4uZWFkNjNmOTdkOWEyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL0RvY3VtZW50YXRpb24v QUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXR5cGVjCj4gQEAgLTAsMCArMSw1MSBAQAo+ICtXaGF0OgkJ L3N5cy9idXMvdHlwZWMvZGV2aWNlcy8uLi4vYWN0aXZlCj4gK0RhdGU6CQlBcHJpbCAyMDE4Cj4g K0NvbnRhY3Q6CUhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNv bT4KPiArRGVzY3JpcHRpb246Cj4gKwkJU2hvd3MgaWYgdGhlIG1vZGUgaXMgYWN0aXZlIG9yIG5v dC4gVGhlIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZAo+ICsJCWZvciBlbnRlcmluZy9leGl0aW5nIHRo ZSBtb2RlLiBFbnRlcmluZy9leGl0aW5nIG1vZGVzIGlzCj4gKwkJc3VwcG9ydGVkIGFzIHN5bmNo cm9ub3VzIG9wZXJhdGlvbiBzbyB3cml0ZSgyKSB0byB0aGUgYXR0cmlidXRlCj4gKwkJZG9lcyBu b3QgcmV0dXJuIHVudGlsIHRoZSBlbnRlci9leGl0IG1vZGUgb3BlcmF0aW9uIGhhcwo+ICsJCWZp bmlzaGVkLiBUaGUgYXR0cmlidXRlIGlzIG5vdGlmaWVkIHdoZW4gdGhlIG1vZGUgaXMKPiArCQll bnRlcmVkL2V4aXRlZCBzbyBwb2xsKDIpIG9uIHRoZSBhdHRyaWJ1dGUgd2FrZXMgdXAuCj4gKwkJ RW50ZXJpbmcvZXhpdGluZyBhIG1vZGUgd2lsbCBhbHNvIGdlbmVyYXRlIHVldmVudCBLT0JKX0NI QU5HRS4KPiArCj4gKwkJVmFsaWQgdmFsdWVzIGFyZSBib29sZWFuLgo+ICsKPiArV2hhdDoJCS9z eXMvYnVzL3R5cGVjL2RldmljZXMvLi4uL2Rlc2NyaXB0aW9uCj4gK0RhdGU6CQlBcHJpbCAyMDE4 Cj4gK0NvbnRhY3Q6CUhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVs LmNvbT4KPiArRGVzY3JpcHRpb246Cj4gKwkJU2hvd3MgZGVzY3JpcHRpb24gb2YgdGhlIG1vZGUu IFRoZSBkZXNjcmlwdGlvbiBpcyBvcHRpb25hbCBmb3IKPiArCQl0aGUgZHJpdmVycywganVzdCBs aWtlIHdpdGggdGhlIEJpbGxib2FyZCBEZXZpY2VzLgo+ICsKPiArV2hhdDoJCS9zeXMvYnVzL3R5 cGVjL2RldmljZXMvLi4uL21vZGUKPiArRGF0ZToJCUFwcmlsIDIwMTgKPiArQ29udGFjdDoJSGVp a2tpIEtyb2dlcnVzIDxoZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwuY29tPgo+ICtEZXNjcmlw dGlvbjoKPiArCQlUaGUgaW5kZXggbnVtYmVyIG9mIHRoZSBtb2RlIHJldHVybmVkIGJ5IERpc2Nv dmVyIE1vZGVzIFVTQgo+ICsJCVBvd2VyIERlbGl2ZXJ5IGNvbW1hbmQuIERlcGVuZGluZyBvbiB0 aGUgYWx0ZXJuYXRlIG1vZGUsIHRoZQo+ICsJCW1vZGUgaW5kZXggbWF5IGJlIHNpZ25pZmljYW50 Lgo+ICsKPiArCQlXaXRoIHNvbWUgYWx0ZXJuYXRlIG1vZGVzIChTVklEcyksIHRoZSBtb2RlIGlu ZGV4IGlzIGFzc2lnbmVkCj4gKwkJZm9yIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHNw ZWNpZmljYXRpb24gZm9yIHRoYXQKPiArCQlhbHRlcm5hdGUgbW9kZS4KPiArCj4gKwkJV2l0aCBv dGhlciBhbHRlcm5hdGUgbW9kZXMsIHRoZSBtb2RlIGluZGV4IHZhbHVlcyBhcmUgbm90Cj4gKwkJ YXNzaWduZWQsIGFuZCBjYW4gbm90IGJlIHRoZXJlZm9yZSB1c2VkIGZvciBpZGVudGlmaWNhdGlv bi4gV2hlbgo+ICsJCXRoZSBtb2RlIGluZGV4IGlzIG5vdCBhc3NpZ25lZCwgaWRlbnRpZnlpbmcg dGhlIGFsdGVybmF0ZSBtb2RlCj4gKwkJbXVzdCBiZSBkb25lIHdpdGggZWl0aGVyIG1vZGUgVkRP IG9yIHRoZSBkZXNjcmlwdGlvbi4KPiArCj4gK1doYXQ6CQkvc3lzL2J1cy90eXBlYy9kZXZpY2Vz Ly4uLi9zdmlkCj4gK0RhdGU6CQlBcHJpbCAyMDE4Cj4gK0NvbnRhY3Q6CUhlaWtraSBLcm9nZXJ1 cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbT4KPiArRGVzY3JpcHRpb246Cj4gKwkJ VGhlIFN0YW5kYXJkIG9yIFZlbmRvciBJRCAoU1ZJRCkgYXNzaWduZWQgYnkgVVNCLUlGIGZvciB0 aGlzCj4gKwkJYWx0ZXJuYXRlIG1vZGUuCj4gKwo+ICtXaGF0OgkJL3N5cy9idXMvdHlwZWMvZGV2 aWNlcy8uLi4vdmRvCj4gK0RhdGU6CQlBcHJpbCAyMDE4Cj4gK0NvbnRhY3Q6CUhlaWtraSBLcm9n ZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbT4KPiArRGVzY3JpcHRpb246Cj4g KwkJU2hvd3MgdGhlIFZETyBpbiBoZXhhZGVjaW1hbCByZXR1cm5lZCBieSBEaXNjb3ZlciBNb2Rl cyBjb21tYW5kCj4gKwkJZm9yIHRoaXMgbW9kZS4KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy10eXBlYyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rp bmcvc3lzZnMtY2xhc3MtdHlwZWMKPiBpbmRleCA1YmU1NTJlMjU1ZTkuLmQ3NjQ3YjI1OGMzYyAx MDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXR5cGVj Cj4gKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy10eXBlYwo+IEBA IC0yMjIsNzAgKzIyMiwxMiBAQCBEZXNjcmlwdGlvbjoKPiAgCQlhdmFpbGFibGUuIFRoZSB2YWx1 ZSBjYW4gYmUgcG9sbGVkLgo+ICAKPiAgCj4gLUFsdGVybmF0ZSBNb2RlIGRldmljZXMuCj4gK1VT QiBUeXBlLUMgcG9ydCBhbHRlcm5hdGUgbW9kZSBkZXZpY2VzLgo+ICAKPiAtVGhlIGFsdGVybmF0 ZSBtb2RlcyB3aWxsIGhhdmUgU3RhbmRhcmQgb3IgVmVuZG9yIElEIChTVklEKSBhc3NpZ25lZCBi eSBVU0ItSUYuCj4gLVRoZSBwb3J0cywgcGFydG5lcnMgYW5kIGNhYmxlIHBsdWdzIGNhbiBoYXZl IGFsdGVybmF0ZSBtb2Rlcy4gQSBzdXBwb3J0ZWQgU1ZJRAo+IC13aWxsIGNvbnNpc3Qgb2YgYSBz ZXQgb2YgbW9kZXMuIEV2ZXJ5IFNWSUQgYSBwb3J0L3BhcnRuZXIvcGx1ZyBzdXBwb3J0cyB3aWxs Cj4gLWhhdmUgYSBkZXZpY2UgY3JlYXRlZCBmb3IgaXQsIGFuZCBldmVyeSBzdXBwb3J0ZWQgbW9k ZSBmb3IgYSBzdXBwb3J0ZWQgU1ZJRCB3aWxsCj4gLWhhdmUgaXRzIG93biBkaXJlY3RvcnkgdW5k ZXIgdGhhdCBkZXZpY2UuIEJlbG93IDxkZXY+IHJlZmVycyB0byB0aGUgZGV2aWNlIGZvcgo+IC10 aGUgYWx0ZXJuYXRlIG1vZGUuCj4gLQo+IC1XaGF0OgkJL3N5cy9jbGFzcy90eXBlYy88cG9ydHxw YXJ0bmVyfGNhYmxlPi88ZGV2Pi9zdmlkCj4gLURhdGU6CQlBcHJpbCAyMDE3Cj4gLUNvbnRhY3Q6 CUhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbT4KPiAtRGVz Y3JpcHRpb246Cj4gLQkJVGhlIFNWSUQgKFN0YW5kYXJkIG9yIFZlbmRvciBJRCkgYXNzaWduZWQg YnkgVVNCLUlGIGZvciB0aGlzCj4gLQkJYWx0ZXJuYXRlIG1vZGUuCj4gLQo+IC1XaGF0OgkJL3N5 cy9jbGFzcy90eXBlYy88cG9ydHxwYXJ0bmVyfGNhYmxlPi88ZGV2Pi9tb2RlPGluZGV4Pi8KPiAt RGF0ZToJCUFwcmlsIDIwMTcKPiAtQ29udGFjdDoJSGVpa2tpIEtyb2dlcnVzIDxoZWlra2kua3Jv Z2VydXNAbGludXguaW50ZWwuY29tPgo+IC1EZXNjcmlwdGlvbjoKPiAtCQlFdmVyeSBzdXBwb3J0 ZWQgbW9kZSB3aWxsIGhhdmUgaXRzIG93biBkaXJlY3RvcnkuIFRoZSBuYW1lIG9mCj4gLQkJYSBt b2RlIHdpbGwgYmUgIm1vZGU8aW5kZXg+IiAoZm9yIGV4YW1wbGUgbW9kZTEpLCB3aGVyZSA8aW5k ZXg+Cj4gLQkJaXMgdGhlIGFjdHVhbCBpbmRleCB0byB0aGUgbW9kZSBWRE8gcmV0dXJuZWQgYnkg RGlzY292ZXIgTW9kZXMKPiAtCQlVU0IgcG93ZXIgZGVsaXZlcnkgY29tbWFuZC4KPiAtCj4gLVdo YXQ6CQkvc3lzL2NsYXNzL3R5cGVjLzxwb3J0fHBhcnRuZXJ8Y2FibGU+LzxkZXY+L21vZGU8aW5k ZXg+L2Rlc2NyaXB0aW9uCj4gLURhdGU6CQlBcHJpbCAyMDE3Cj4gLUNvbnRhY3Q6CUhlaWtraSBL cm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbT4KPiAtRGVzY3JpcHRpb246 Cj4gLQkJU2hvd3MgZGVzY3JpcHRpb24gb2YgdGhlIG1vZGUuIFRoZSBkZXNjcmlwdGlvbiBpcyBv cHRpb25hbCBmb3IKPiAtCQl0aGUgZHJpdmVycywganVzdCBsaWtlIHdpdGggdGhlIEJpbGxib2Fy ZCBEZXZpY2VzLgo+IC0KPiAtV2hhdDoJCS9zeXMvY2xhc3MvdHlwZWMvPHBvcnR8cGFydG5lcnxj YWJsZT4vPGRldj4vbW9kZTxpbmRleD4vdmRvCj4gLURhdGU6CQlBcHJpbCAyMDE3Cj4gLUNvbnRh Y3Q6CUhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbT4KPiAt RGVzY3JpcHRpb246Cj4gLQkJU2hvd3MgdGhlIFZETyBpbiBoZXhhZGVjaW1hbCByZXR1cm5lZCBi eSBEaXNjb3ZlciBNb2RlcyBjb21tYW5kCj4gLQkJZm9yIHRoaXMgbW9kZS4KPiAtCj4gLVdoYXQ6 CQkvc3lzL2NsYXNzL3R5cGVjLzxwb3J0fHBhcnRuZXJ8Y2FibGU+LzxkZXY+L21vZGU8aW5kZXg+ L2FjdGl2ZQo+IC1EYXRlOgkJQXByaWwgMjAxNwo+IC1Db250YWN0OglIZWlra2kgS3JvZ2VydXMg PGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRlbC5jb20+Cj4gLURlc2NyaXB0aW9uOgo+IC0JCVNo b3dzIGlmIHRoZSBtb2RlIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBhdHRyaWJ1dGUgY2FuIGJlIHVz ZWQKPiAtCQlmb3IgZW50ZXJpbmcvZXhpdGluZyB0aGUgbW9kZSB3aXRoIHBhcnRuZXJzIGFuZCBj YWJsZSBwbHVncywgYW5kCj4gLQkJd2l0aCB0aGUgcG9ydCBhbHRlcm5hdGUgbW9kZXMgaXQgY2Fu IGJlIHVzZWQgZm9yIGRpc2FibGluZwo+IC0JCXN1cHBvcnQgZm9yIHNwZWNpZmljIGFsdGVybmF0 ZSBtb2Rlcy4gRW50ZXJpbmcvZXhpdGluZyBtb2RlcyBpcwo+IC0JCXN1cHBvcnRlZCBhcyBzeW5j aHJvbm91cyBvcGVyYXRpb24gc28gd3JpdGUoMikgdG8gdGhlIGF0dHJpYnV0ZQo+IC0JCWRvZXMg bm90IHJldHVybiB1bnRpbCB0aGUgZW50ZXIvZXhpdCBtb2RlIG9wZXJhdGlvbiBoYXMKPiAtCQlm aW5pc2hlZC4gVGhlIGF0dHJpYnV0ZSBpcyBub3RpZmllZCB3aGVuIHRoZSBtb2RlIGlzCj4gLQkJ ZW50ZXJlZC9leGl0ZWQgc28gcG9sbCgyKSBvbiB0aGUgYXR0cmlidXRlIHdha2VzIHVwLgo+IC0J CUVudGVyaW5nL2V4aXRpbmcgYSBtb2RlIHdpbGwgYWxzbyBnZW5lcmF0ZSB1ZXZlbnQgS09CSl9D SEFOR0UuCj4gLQo+IC0JCVZhbGlkIHZhbHVlczogeWVzLCBubwo+IC0KPiAtV2hhdDoJCS9zeXMv Y2xhc3MvdHlwZWMvPHBvcnQ+LzxkZXY+L21vZGU8aW5kZXg+L3N1cHBvcnRlZF9yb2xlcwo+ICtX aGF0OgkJL3N5cy9jbGFzcy90eXBlYy88cG9ydD4vPGFsdCBtb2RlPi9zdXBwb3J0ZWRfcm9sZXMK PiAgRGF0ZToJCUFwcmlsIDIwMTcKPiAgQ29udGFjdDoJSGVpa2tpIEtyb2dlcnVzIDxoZWlra2ku a3JvZ2VydXNAbGludXguaW50ZWwuY29tPgo+ICBEZXNjcmlwdGlvbjoKPiAgCQlTcGFjZSBzZXBh cmF0ZWQgbGlzdCBvZiB0aGUgc3VwcG9ydGVkIHJvbGVzLgo+ICAKPiAtCQlUaGlzIGF0dHJpYnV0 ZSBpcyBhdmFpbGFibGUgZm9yIHRoZSBkZXZpY2VzIGRlc2NyaWJpbmcgdGhlCj4gLQkJYWx0ZXJu YXRlIG1vZGVzIGEgcG9ydCBzdXBwb3J0cywgYW5kIGl0IHdpbGwgbm90IGJlIGV4cG9zZWQgd2l0 aAo+IC0JCXRoZSBkZXZpY2VzIHByZXNlbnRpbmcgdGhlIGFsdGVybmF0ZSBtb2RlcyB0aGUgcGFy dG5lcnMgb3IgY2FibGUKPiAtCQlwbHVncyBzdXBwb3J0Lgo+IC0KPiAgCQlWYWxpZCB2YWx1ZXM6 IHNvdXJjZSwgc2luawo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdXNi L3R5cGVjX2J1cy5yc3QgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdXNiL3R5cGVjX2J1cy5y c3QKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZWYzYzA0OWE4 YTdmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS91c2Iv dHlwZWNfYnVzLnJzdAo+IEBAIC0wLDAgKzEsMTQzIEBACj4gKwo+ICtBUEkgZm9yIFVTQiBUeXBl LUMgQWx0ZXJuYXRlIE1vZGUgZHJpdmVycwo+ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQo+ICsKPiArSW50cm9kdWN0aW9uCj4gKy0tLS0tLS0tLS0tLQo+ICsKPiAr QWx0ZXJuYXRlIG1vZGVzIHJlcXVpcmUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBwYXJ0bmVyIHVz aW5nIFZlbmRvciBEZWZpbmVkCj4gK01lc3NhZ2VzIChWRE0pIGFzIGRlZmluZWQgaW4gVVNCIFR5 cGUtQyBhbmQgVVNCIFBvd2VyIERlbGl2ZXJ5IFNwZWNpZmljYXRpb25zLgo+ICtUaGUgY29tbXVu aWNhdGlvbiBpcyBTVklEIChTdGFuZGFyZCBvciBWZW5kb3IgSUQpIHNwZWNpZmljLCBpLmUuIHNw ZWNpZmljIGZvcgo+ICtldmVyeSBhbHRlcm5hdGUgbW9kZSwgc28gZXZlcnkgYWx0ZXJuYXRlIG1v ZGUgd2lsbCBuZWVkIGN1c3RvbSBkcml2ZXIuCj4gKwo+ICtVU0IgVHlwZS1DIGJ1cyBhbGxvd3Mg YmluZGluZyBhIGRyaXZlciB0byB0aGUgZGlzY292ZXJlZCBwYXJ0bmVyIGFsdGVybmF0ZQo+ICtt b2RlcyBieSB1c2luZyB0aGUgU1ZJRCBhbmQgdGhlIG1vZGUgbnVtYmVyLgo+ICsKPiArVVNCIFR5 cGUtQyBDb25uZWN0b3IgQ2xhc3MgcHJvdmlkZXMgYSBkZXZpY2UgZm9yIGV2ZXJ5IGFsdGVybmF0 ZSBtb2RlIGEgcG9ydAo+ICtzdXBwb3J0cywgYW5kIHNlcGFyYXRlIGRldmljZSBmb3IgZXZlcnkg YWx0ZXJuYXRlIG1vZGUgdGhlIHBhcnRuZXIgc3VwcG9ydHMuCj4gK1RoZSBkcml2ZXJzIGZvciB0 aGUgYWx0ZXJuYXRlIG1vZGVzIGFyZSBiaW5kIHRvIHRoZSBwYXJ0bmVyIGFsdGVybmF0ZSBtb2Rl Cj4gK2RldmljZXMsIGFuZCB0aGUgcG9ydCBhbHRlcm5hdGUgbW9kZSBkZXZpY2VzIG11c3QgYmUg aGFuZGxlZCBieSB0aGUgcG9ydAo+ICtkcml2ZXJzLgo+ICsKPiArV2hlbiBhIG5ldyBwYXJ0bmVy IGFsdGVybmF0ZSBtb2RlIGRldmljZSBpcyByZWdpc3RlcmVkLCBpdCBpcyBsaW5rZWQgdG8gdGhl Cj4gK2FsdGVybmF0ZSBtb2RlIGRldmljZSBvZiB0aGUgcG9ydCB0aGF0IHRoZSBwYXJ0bmVyIGlz IGF0dGFjaGVkIHRvLCB0aGF0IGhhcwo+ICttYXRjaGluZyBTVklEIGFuZCBtb2RlLiBDb21tdW5p Y2F0aW9uIGJldHdlZW4gdGhlIHBvcnQgZHJpdmVyIGFuZCBhbHRlcm5hdGUgbW9kZQo+ICtkcml2 ZXIgd2lsbCBoYXBwZW4gdXNpbmcgdGhlIHNhbWUgQVBJLgo+ICsKPiArVGhlIHBvcnQgYWx0ZXJu YXRlIG1vZGUgZGV2aWNlcyBhcmUgdXNlZCBhcyBhIHByb3h5IGJldHdlZW4gdGhlIHBhcnRuZXIg YW5kIHRoZQo+ICthbHRlcm5hdGUgbW9kZSBkcml2ZXJzLCBzbyB0aGUgcG9ydCBkcml2ZXJzIGFy ZSBvbmx5IGV4cGVjdGVkIHRvIHBhc3MgdGhlIFNWSUQKPiArc3BlY2lmaWMgY29tbWFuZHMgZnJv bSB0aGUgYWx0ZXJuYXRlIG1vZGUgZHJpdmVycyB0byB0aGUgcGFydG5lciwgYW5kIGZyb20gdGhl Cj4gK3BhcnRuZXJzIHRvIHRoZSBhbHRlcm5hdGUgbW9kZSBkcml2ZXJzLiBObyBkaXJlY3QgU1ZJ RCBzcGVjaWZpYyBjb21tdW5pY2F0aW9uIGlzCj4gK25lZWRlZCBmcm9tIHRoZSBwb3J0IGRyaXZl cnMsIGJ1dCB0aGUgcG9ydCBkcml2ZXJzIG5lZWQgdG8gcHJvdmlkZSB0aGUgb3BlcmF0aW9uCj4g K2NhbGxiYWNrcyBmb3IgdGhlIHBvcnQgYWx0ZXJuYXRlIG1vZGUgZGV2aWNlcywganVzdCBsaWtl IHRoZSBhbHRlcm5hdGUgbW9kZQo+ICtkcml2ZXJzIG5lZWQgdG8gcHJvdmlkZSB0aGVtIGZvciB0 aGUgcGFydG5lciBhbHRlcm5hdGUgbW9kZSBkZXZpY2VzLgo+ICsKPiArVXNhZ2U6Cj4gKy0tLS0t LQo+ICsKPiArR2VuZXJhbAo+ICt+fn5+fn5+Cj4gKwo+ICtCeSBkZWZhdWx0LCB0aGUgYWx0ZXJu YXRlIG1vZGUgZHJpdmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGVudGVyaW5nIHRoZSBtb2RlLgo+ ICtJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGxlYXZlIHRoZSBkZWNpc2lvbiBhYm91dCBlbnRlcmlu ZyB0aGUgbW9kZSB0byB0aGUgdXNlcgo+ICtzcGFjZSAoU2VlIERvY3VtZW50YXRpb24vQUJJL3Rl c3Rpbmcvc3lzZnMtY2xhc3MtdHlwZWMpLiBQb3J0IGRyaXZlcnMgc2hvdWxkIG5vdAo+ICtlbnRl ciBhbnkgbW9kZXMgb24gdGhlaXIgb3duLgo+ICsKPiArVGhlIGFsdGVybmF0ZSBtb2RlIGRyaXZl cnMgbmVlZCB0byByZWdpc3RlciB0aGVpciBvcGVyYXRpb24gdmVjdG9yIGluIHRoZWlyCj4gK2Bg LT5wcm9iZWBgIGNhbGxiYWNrIHdpdGggOmM6ZnVuYzpgdHlwZWNfYWx0bW9kZV9yZWdpc3Rlcl9v cHMoKWAuIFRoZXkgc2hvdWxkCj4gK2JlIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBtb2RlIGlzIGVu dGVyZWQgdXNpbmcgOmM6ZnVuYzpgdHlwZWNfYWx0bW9kZV9lbnRlcigpYC4KPiArCj4gK2BgLT52 ZG1gYCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgY2FsbGJhY2sgaW4gdGhlIHZlY3Rvci4gSXQgd2ls bCBiZSB1c2VkIHRvCj4gK2RlbGl2ZXIgYWxsIHRoZSBTVklEIHNwZWNpZmljIGNvbW1hbmRzIGZy b20gdGhlIHBhcnRuZXIgdG8gdGhlIGFsdGVybmF0ZSBtb2RlCj4gK2RyaXZlciwgYW5kIHZpc2Ug dmVyc2EgaW4gY2FzZSBvZiBwb3J0IGRyaXZlcnMuIFRoZSBkcml2ZXJzIHNlbmQgdGhlIFNWSUQK PiArc3BlY2lmaWMgY29tbWFuZHMgdG8gZWFjaCBvdGhlciB1c2luZyA6YzpmdW5jOmB0eXBlY19h bHRtb2RlX3ZtZCgpYC4KPiArCj4gK0lmIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHBhcnRu ZXIgdXNpbmcgdGhlIFNWSUQgc3BlY2lmaWMgY29tbWFuZHMgcmVzdWx0cwo+ICtpbiBuZWVkIHRv IHJlLWNvbmZpZ3VyZSB0aGUgcGlucyBvbiB0aGUgY29ubmVjdG9yLCB0aGUgYWx0ZXJuYXRlIG1v ZGUgZHJpdmVyCj4gK25lZWRzIHRvIG5vdGlmeSB0aGUgYnVzIHVzaW5nIDpjOmZ1bmM6YHR5cGVj X2FsdG1vZGVfbm90aWZ5KClgLiBUaGUgZHJpdmVyCj4gK3Bhc3NlcyB0aGUgbmVnb3RpYXRlZCBT VklEIHNwZWNpZmljIHBpbiBjb25maWd1cmF0aW9uIHZhbHVlIHRvIHRoZSBmdW5jdGlvbiBhcwo+ ICtwYXJhbWV0ZXIuIFRoZSBidXMgZHJpdmVyIHdpbGwgdGhlbiBjb25maWd1cmUgdGhlIG11eCBi ZWhpbmQgdGhlIGNvbm5lY3RvciB1c2luZwo+ICt0aGF0IHZhbHVlIGFzIHRoZSBzdGF0ZSB2YWx1 ZSBmb3IgdGhlIG11eCwgYW5kIGFsc28gY2FsbCBibG9ja2luZyBub3RpZmljYXRpb24KPiArY2hh aW4gdG8gbm90aWZ5IHRoZSBleHRlcm5hbCBkcml2ZXJzIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUg Y29ubmVjdG9yIHRoYXQgbmVlZAo+ICt0byBrbm93IGl0Lgo+ICsKPiArTk9URTogVGhlIFNWSUQg c3BlY2lmaWMgcGluIGNvbmZpZ3VyYXRpb24gdmFsdWVzIG11c3QgYWx3YXlzIHN0YXJ0IGZyb20K PiArYGBUWVBFQ19TVEFURV9NT0RBTGBgLiBVU0IgVHlwZS1DIHNwZWNpZmljYXRpb24gZGVmaW5l cyB0d28gZGVmYXVsdCBzdGF0ZXMgZm9yCj4gK3RoZSBjb25uZWN0b3I6IGBgVFlQRUNfU1RBVEVf VVNCYGAgYW5kIGBgVFlQRUNfU1RBVEVfU0FGRWBgLiBVU0IgVHlwZS1DCj4gK1NwZWNpZmljYXRp b24gYWxzbyBkZWZpbmVzIHR3byBBY2Nlc3NvcnkgbW9kZXMsIEF1ZGlvIGFuZCBEZWJ1ZzoKPiAr YGBUWVBFQ19TVEFURV9BVURJT2BgIGFuZCBgYFRZUEVDX1NUQVRFX0RFQlVHYGAgVGhlc2UgdmFs dWVzIGFyZSByZXNlcnZlZCBieSB0aGUKPiArYnVzIGFzIHRoZSBmb3VyIGZpcnN0IHBvc3NpYmxl IHZhbHVlcyBmb3IgdGhlIHN0YXRlLCBhbmQgYXR0ZW1wdHMgdG8gdXNlIHRoZW0KPiArZnJvbSB0 aGUgYWx0ZXJuYXRlIG1vZGUgZHJpdmVycyB3aWxsIHJlc3VsdCBpbiBmYWlsdXJlLiBXaGVuIHRo ZSBhbHRlcm5hdGUgbW9kZQo+ICtpcyBlbnRlcmVkLCB0aGUgYnVzIHdpbGwgcHV0IHRoZSBjb25u ZWN0b3IgaW50byBgYFRZUEVDX1NUQVRFX1NBRkVgYCBiZWZvcmUKPiArc2VuZGluZyBFbnRlciBv ciBFeGl0IE1vZGUgY29tbWFuZCBhcyBkZWZpbmVkIGluIFVTQiBUeXBlLUMgU3BlY2lmaWNhdGlv biwgYW5kCj4gK2Fsc28gcHV0IHRoZSBjb25uZWN0b3IgYmFjayB0byBgYFRZUEVDX1NUQVRFX1VT QmBgIGFmdGVyIHRoZSBtb2RlIGhhcyBiZWVuCj4gK2V4aXRlZC4KPiArCj4gK0FuIGV4YW1wbGUg b2Ygd29ya2luZyBkZWZpbml0aW9ucyBmb3IgU1ZJRCBzcGVjaWZpYyBwaW4gY29uZmlndXJhdGlv bnMgd291bGQKPiArbG9vayBsaWtlIHRoaXM6Cj4gKwo+ICtlbnVtIHsKPiArCUFMVE1PREVYX0NP TkZfQSA9IFRZUEVDX1NUQVRFX01PREFMLAo+ICsJQUxUTU9ERVhfQ09ORl9CLAo+ICsJLi4uCj4g K307Cj4gKwo+ICtIZWxwZXIgbWFjcm8gYGBUWVBFQ19NT0RBTF9TVEFURSgpYGAgY2FuIGFsc28g YmUgdXNlZDoKPiArCj4gKyNkZWZpbmUgQUxUTU9ERVhfQ09ORl9BID0gVFlQRUNfTU9EQUxfU1RB VEUoMCk7Cj4gKyNkZWZpbmUgQUxUTU9ERVhfQ09ORl9CID0gVFlQRUNfTU9EQUxfU1RBVEUoMSk7 Cj4gKwo+ICtOb3RpZmljYXRpb24gY2hhaW4KPiArfn5+fn5+fn5+fn5+fn5+fn5+Cj4gKwo+ICtU aGUgZHJpdmVycyBmb3IgdGhlIGNvbXBvbmVudHMgdGhhdCB0aGUgYWx0ZXJuYXRlIG1vZGVzIGFy ZSBkZXNpZ25lZCBmb3IgbmVlZCB0bwo+ICtnZXQgZGV0YWlscyByZWdhcmRpbmcgdGhlIHJlc3Vs dHMgb2YgdGhlIG5lZ290aWF0aW9uIHdpdGggdGhlIHBhcnRuZXIsIGFuZCB0aGUKPiArcGluIGNv bmZpZ3VyYXRpb24gb2YgdGhlIGNvbm5lY3Rvci4gSW4gY2FzZSBvZiBEaXNwbGF5UG9ydCBhbHRl cm5hdGUgbW9kZSBmb3IKPiArZXhhbXBsZSwgdGhlIEdQVSBkcml2ZXJzIHdpbGwgbmVlZCB0byBr bm93IHRob3NlIGRldGFpbHMuIEluIGNhc2Ugb2YKPiArVGh1bmRlcmJvbHQgYWx0ZXJuYXRlIG1v ZGUsIHRoZSB0aHVuZGVyYm9sdCBkcml2ZXJzIHdpbGwgbmVlZCB0byBrbm93IHRoZW0sIGFuZAo+ ICtzbyBvbi4KPiArCj4gK1RoZSBub3RpZmljYXRpb24gY2hhaW4gaXMgZGVzaWduZWQgZm9yIHRo aXMgcHVycG9zZS4gVGhlIGRyaXZlcnMgY2FuIHJlZ2lzdGVyCj4gK25vdGlmaWVycyB3aXRoIDpj OmZ1bmM6YHR5cGVjX2FsdG1vZGVfcmVnaXN0ZXJfbm90aWZpZXIoKWAuCj4gKwo+ICtDYWJsZSBw bHVnIGFsdGVybmF0ZSBtb2Rlcwo+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgo+ICsKPiAr VGhlIGFsdGVybmF0ZSBtb2RlIGRyaXZlcnMgYXJlIG5vdCBiaW5kIHRvIGNhYmxlIHBsdWcgYWx0 ZXJuYXRlIG1vZGUgZGV2aWNlcywKPiArb25seSB0byB0aGUgcGFydG5lciBhbHRlcm5hdGUgbW9k ZSBkZXZpY2VzLiBJZiB0aGUgYWx0ZXJuYXRlIG1vZGUgc3VwcG9ydHMsIG9yCj4gK3JlcXVpcmVz LCBhIGNhYmxlIHRoYXQgcmVzcG9uZHMgdG8gU09QIFByaW1lLCBhbmQgb3B0aW9uYWxseSBTT1Ag RG91YmxlIFByaW1lCj4gK21lc3NhZ2VzLCB0aGUgZHJpdmVyIGZvciB0aGF0IGFsdGVybmF0ZSBt b2RlIG11c3QgcmVxdWVzdCBoYW5kbGUgdG8gdGhlIGNhYmxlCj4gK3BsdWcgYWx0ZXJuYXRlIG1v ZGVzIHVzaW5nIDpjOmZ1bmM6YHR5cGVjX2FsdG1vZGVfZ2V0X3BsdWcoKWAsIGFuZCB0YWtpbmcg b3Zlcgo+ICt0aGVpciBjb250cm9sLgo+ICsKPiArRHJpdmVyIEFQSQo+ICstLS0tLS0tLS0tCj4g Kwo+ICtBbHRlcm5hdGUgbW9kZSBkcml2ZXIgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZwo+ICt+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgo+ICsKPiArLi4g a2VybmVsLWRvYzo6IGRyaXZlcnMvdXNiL3R5cGVjL2J1cy5jCj4gKyAgIDpmdW5jdGlvbnM6IHR5 cGVjX2FsdG1vZGVfcmVnaXN0ZXJfZHJpdmVyIHR5cGVjX2FsdG1vZGVfdW5yZWdpc3Rlcl9kcml2 ZXIKPiArCj4gK0FsdGVybmF0ZSBtb2RlIGRyaXZlciBvcGVyYXRpb25zCj4gK35+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cj4gKwo+ICsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy91c2Iv dHlwZWMvYnVzLmMKPiArICAgOmZ1bmN0aW9uczogdHlwZWNfYWx0bW9kZV9yZWdpc3Rlcl9vcHMg dHlwZWNfYWx0bW9kZV9lbnRlciB0eXBlY19hbHRtb2RlX2V4aXQgdHlwZWNfYWx0bW9kZV9hdHRl bnRpb24gdHlwZWNfYWx0bW9kZV92ZG0gdHlwZWNfYWx0bW9kZV9ub3RpZnkKPiArCj4gK0FQSSBm b3IgdGhlIHBvcnQgZHJpdmVycwo+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPiArCj4gKy4u IGtlcm5lbC1kb2M6OiBkcml2ZXJzL3VzYi90eXBlYy9idXMuYwo+ICsgICA6ZnVuY3Rpb25zOiB0 eXBlY19tYXRjaF9hbHRtb2RlCj4gKwo+ICtDYWJsZSBQbHVnIG9wZXJhdGlvbnMKPiArfn5+fn5+ fn5+fn5+fn5+fn5+fn5+Cj4gKwo+ICsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy91c2IvdHlwZWMv YnVzLmMKPiArICAgOmZ1bmN0aW9uczogdHlwZWNfYWx0bW9kZV9nZXRfcGx1ZyB0eXBlY19hbHRt b2RlX3B1dF9wbHVnCj4gKwo+ICtOb3RpZmljYXRpb25zCj4gK35+fn5+fn5+fn5+fn4KPiArLi4g a2VybmVsLWRvYzo6IGRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMKPiArICAgOmZ1bmN0aW9uczog dHlwZWNfYWx0bW9kZV9yZWdpc3Rlcl9ub3RpZmllciB0eXBlY19hbHRtb2RlX3VucmVnaXN0ZXJf bm90aWZpZXIKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvTWFrZWZpbGUgYi9kcml2 ZXJzL3VzYi90eXBlYy9NYWtlZmlsZQo+IGluZGV4IDFmNTk5YTZjMzBjYy4uNTQ2NmM2MmM4ZTk3 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL3R5cGVjL01ha2VmaWxlCj4gKysrIGIvZHJpdmVy cy91c2IvdHlwZWMvTWFrZWZpbGUKPiBAQCAtMSw2ICsxLDYgQEAKPiAgIyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMAo+ICBvYmotJChDT05GSUdfVFlQRUMpCQkrPSB0eXBlYy5vCj4g LXR5cGVjLXkJCQkJOj0gY2xhc3MubyBtdXgubwo+ICt0eXBlYy15CQkJCTo9IGNsYXNzLm8gbXV4 Lm8gYnVzLm8KPiAgb2JqLSQoQ09ORklHX1RZUEVDX1RDUE0pCSs9IHRjcG0ubwo+ICBvYmoteQkJ CQkrPSBmdXNiMzAyLwo+ICBvYmotJChDT05GSUdfVFlQRUNfV0NPVkUpCSs9IHR5cGVjX3djb3Zl Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvYnVzLmMgYi9kcml2ZXJzL3VzYi90 eXBlYy9idXMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi45 Mjk0NGFhZjNkNmEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy91c2IvdHlwZWMvYnVz LmMKPiBAQCAtMCwwICsxLDQyMSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMAo+ICsvKioKPiArICogQnVzIGZvciBVU0IgVHlwZS1DIEFsdGVybmF0ZSBNb2Rlcwo+ICsg Kgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KPiArICogQXV0aG9y OiBIZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRlbC5jb20+Cj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgImJ1cy5oIgo+ICsKPiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K PiArLyogQ29tbW9uIEFQSSAqLwo+ICsKPiArLyoqCj4gKyAqIHR5cGVjX2FsdG1vZGVfbm90aWZ5 IC0gQ29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBPUyBhbmQgYWx0ZXJuYXRlIG1vZGUgZHJpdmVy Cj4gKyAqIEBhZGV2OiBIYW5kbGUgdG8gdGhlIGFsdGVybmF0ZSBtb2RlCj4gKyAqIEBjb25mOiBB bHRlcm5hdGUgbW9kZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHZhbHVlCj4gKyAqIEBkYXRhOiBB bHRlcm5hdGUgbW9kZSBzcGVjaWZpYyBkYXRhCj4gKyAqCj4gKyAqIFRoZSBwcmltYXJ5IHB1cnBv c2UgZm9yIHRoaXMgZnVuY3Rpb24gaXMgdG8gYWxsb3cgdGhlIGFsdGVybmF0ZSBtb2RlIGRyaXZl cnMKPiArICogdG8gdGVsbCB3aGljaCBwaW4gY29uZmlndXJhdGlvbiBoYXMgYmVlbiBuZWdvdGlh dGVkIHdpdGggdGhlIHBhcnRuZXIuIFRoYXQKPiArICogaW5mb3JtYXRpb24gd2lsbCB0aGVuIGJl IHVzZWQgZm9yIGV4YW1wbGUgdG8gY29uZmlndXJlIHRoZSBtdXhlcy4KPiArICogQ29tbXVuaWNh dGlvbiB0byB0aGUgb3RoZXIgZGlyZWN0aW9uIGlzIGFsc28gcG9zc2libGUsIGFuZCBsb3cgbGV2 ZWwgZGV2aWNlCj4gKyAqIGRyaXZlcnMgY2FuIGFsc28gc2VuZCBub3RpZmljYXRpb25zIHRvIHRo ZSBhbHRlcm5hdGUgbW9kZSBkcml2ZXJzLiBUaGUgYWN0dWFsCj4gKyAqIGNvbW11bmljYXRpb24g d2lsbCBiZSBzcGVjaWZpYyBmb3IgZXZlcnkgU1ZJRC4KPiArICovCj4gK2ludCB0eXBlY19hbHRt b2RlX25vdGlmeShzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWRldiwKPiArCQkJIHVuc2lnbmVkIGxv bmcgY29uZiwgdm9pZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IGFsdG1vZGUgKmFsdG1vZGU7Cj4g KwlzdHJ1Y3QgYWx0bW9kZSAqcGFydG5lcjsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyoKPiArCSAq IEFsbCBTVklEIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdmFsdWVzIG11c3Qgc3RhcnQgZnJvbQo+ ICsJICogVFlQRUNfU1RBVEVfTU9EQUwuIFRoZSBmaXJzdCB2YWx1ZXMgYXJlIHJlc2VydmVkIGZv ciB0aGUgcGluIHN0YXRlcwo+ICsJICogZGVmaW5lZCBpbiBVU0IgVHlwZS1DIHNwZWNpZmljYXRp b246IFRZUEVDX1NUQVRFX1VTQiBhbmQKPiArCSAqIFRZUEVDX1NUQVRFX1NBRkUuIFdlJ2xsIGZv bGxvdyB0aGlzIHJ1bGUgZXZlbiB3aXRoIG1vZGVzIHRoYXQgZG8gbm90Cj4gKwkgKiByZXF1aXJl IHBpbiByZWNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHkuCj4gKwkgKi8K PiArCWlmIChjb25mIDwgVFlQRUNfU1RBVEVfTU9EQUwpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJaWYgKCFhZGV2KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWFsdG1vZGUgPSB0b19hbHRt b2RlKGFkZXYpOwo+ICsKPiArCWlmICghYWx0bW9kZS0+cGFydG5lcikKPiArCQlyZXR1cm4gLUVO T0RFVjsKPiArCj4gKwlyZXQgPSB0eXBlY19zZXRfbW9kZSh0eXBlY19hbHRtb2RlMnBvcnQoYWRl diksIChpbnQpY29uZik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcGFy dG5lciA9IGFsdG1vZGUtPnBhcnRuZXI7Cj4gKwo+ICsJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9j aGFpbihpc190eXBlY19wb3J0KGFkZXYtPmRldi5wYXJlbnQpID8KPiArCQkJCSAgICAgJmFsdG1v ZGUtPm5oIDogJnBhcnRuZXItPm5oLAo+ICsJCQkJICAgICBjb25mLCBkYXRhKTsKPiArCj4gKwlp ZiAocGFydG5lci0+b3BzICYmIHBhcnRuZXItPm9wcy0+bm90aWZ5KQo+ICsJCXJldHVybiBwYXJ0 bmVyLT5vcHMtPm5vdGlmeSgmcGFydG5lci0+YWRldiwgY29uZiwgZGF0YSk7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwodHlwZWNfYWx0bW9kZV9ub3RpZnkpOwo+ ICsKPiArLyoqCj4gKyAqIHR5cGVjX2FsdG1vZGVfZW50ZXIgLSBFbnRlciBNb2RlCj4gKyAqIEBh ZGV2OiBUaGUgYWx0ZXJuYXRlIG1vZGUKPiArICoKPiArICogVGhlIGFsdGVybmF0ZSBtb2RlIGRy aXZlcnMgdXNlIHRoaXMgZnVuY3Rpb24gdG8gZW50ZXIgbW9kZS4gVGhlIHBvcnQgZHJpdmVycwo+ ICsgKiB1c2UgdGhpcyB0byBpbmZvcm0gdGhlIGFsdGVybmF0ZSBtb2RlIGRyaXZlcnMgdGhhdCB0 aGVpciBtb2RlIGhhcyBiZWVuCj4gKyAqIGVudGVyZWQgc3VjY2Vzc2Z1bGx5Lgo+ICsgKi8KPiAr aW50IHR5cGVjX2FsdG1vZGVfZW50ZXIoc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFkZXYpCj4gK3sK PiArCXN0cnVjdCBhbHRtb2RlICpwYXJ0bmVyID0gdG9fYWx0bW9kZShhZGV2KS0+cGFydG5lcjsK PiArCXN0cnVjdCB0eXBlY19hbHRtb2RlICpwZGV2ID0gJnBhcnRuZXItPmFkZXY7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCWlmIChpc190eXBlY19wb3J0KGFkZXYtPmRldi5wYXJlbnQpKSB7Cj4gKwkJ dHlwZWNfYWx0bW9kZV91cGRhdGVfYWN0aXZlKHBkZXYsIHBkZXYtPm1vZGUsIHRydWUpOwo+ICsJ CXN5c2ZzX25vdGlmeSgmcGRldi0+ZGV2LmtvYmosIE5VTEwsICJhY3RpdmUiKTsKPiArCQlnb3Rv IGVudGVyX21vZGU7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFwZGV2LT5hY3RpdmUpCj4gKwkJcmV0dXJu IC1FUEVSTTsKPiArCj4gKwkvKiBGaXJzdCBtb3ZpbmcgdG8gVVNCIFNhZmUgU3RhdGUgKi8KPiAr CXJldCA9IHR5cGVjX3NldF9tb2RlKHR5cGVjX2FsdG1vZGUycG9ydChhZGV2KSwgVFlQRUNfU1RB VEVfU0FGRSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJYmxvY2tpbmdf bm90aWZpZXJfY2FsbF9jaGFpbigmcGFydG5lci0+bmgsIFRZUEVDX1NUQVRFX1NBRkUsIE5VTEwp Owo+ICsKPiArZW50ZXJfbW9kZToKPiArCS8qIEVudGVyIE1vZGUgY29tbWFuZCAqLwo+ICsJaWYg KHBhcnRuZXItPm9wcyAmJiBwYXJ0bmVyLT5vcHMtPmVudGVyKQo+ICsJCXBhcnRuZXItPm9wcy0+ ZW50ZXIocGRldik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwo dHlwZWNfYWx0bW9kZV9lbnRlcik7Cj4gKwo+ICsvKioKPiArICogdHlwZWNfYWx0bW9kZV9lbnRl ciAtIEV4aXQgTW9kZQoKdHlwZWNfYWx0bW9kZV9leGl0Cgo+ICsgKiBAYWRldjogVGhlIGFsdGVy bmF0ZSBtb2RlCj4gKyAqCj4gKyAqIFRoZSBhbHRlcm5hdGUgbW9kZSBkcml2ZXJzIHVzZSB0aGlz IGZ1bmN0aW9uIHRvIGV4aXQgbW9kZS4gVGhlIHBvcnQgZHJpdmVycwo+ICsgKiBjYW4gYWxzbyBp bmZvcm0gdGhlIGFsdGVybmF0ZSBtb2RlIGRyaXZlcnMgd2l0aCB0aGlzIGZ1bmN0aW9uIHRoYXQg dGhlIG1vZGUKPiArICogd2FzIHN1Y2Nlc3NmdWxseSBleGl0ZWQuCj4gKyAqLwo+ICtpbnQgdHlw ZWNfYWx0bW9kZV9leGl0KHN0cnVjdCB0eXBlY19hbHRtb2RlICphZGV2KQo+ICt7Cj4gKwlzdHJ1 Y3QgYWx0bW9kZSAqcGFydG5lciA9IHRvX2FsdG1vZGUoYWRldiktPnBhcnRuZXI7Cj4gKwlzdHJ1 Y3QgdHlwZWNfcG9ydCAqcG9ydCA9IHR5cGVjX2FsdG1vZGUycG9ydChhZGV2KTsKPiArCXN0cnVj dCB0eXBlY19hbHRtb2RlICpwZGV2ID0gJnBhcnRuZXItPmFkZXY7Cj4gKwlpbnQgcmV0Owo+ICsK PiArCS8qIEluIGNhc2Ugb2YgcG9ydCwganVzdCBjYWxsaW5nIHRoZSBkcml2ZXIgYW5kIGV4aXRp bmcgKi8KPiArCWlmIChpc190eXBlY19wb3J0KGFkZXYtPmRldi5wYXJlbnQpKSB7Cj4gKwkJdHlw ZWNfYWx0bW9kZV91cGRhdGVfYWN0aXZlKHBkZXYsIHBkZXYtPm1vZGUsIGZhbHNlKTsKPiArCQlz eXNmc19ub3RpZnkoJnBkZXYtPmRldi5rb2JqLCBOVUxMLCAiYWN0aXZlIik7Cj4gKwo+ICsJCWlm IChwYXJ0bmVyLT5vcHMgJiYgcGFydG5lci0+b3BzLT5leGl0KQo+ICsJCQlwYXJ0bmVyLT5vcHMt PmV4aXQocGRldik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJLyogTW92aW5nIHRvIFVT QiBTYWZlIFN0YXRlICovCj4gKwlyZXQgPSB0eXBlY19zZXRfbW9kZShwb3J0LCBUWVBFQ19TVEFU RV9TQUZFKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlibG9ja2luZ19u b3RpZmllcl9jYWxsX2NoYWluKCZwYXJ0bmVyLT5uaCwgVFlQRUNfU1RBVEVfU0FGRSwgTlVMTCk7 Cj4gKwo+ICsJLyogRXhpdCBNb2RlIGNvbW1hbmQgKi8KPiArCWlmIChwYXJ0bmVyLT5vcHMgJiYg cGFydG5lci0+b3BzLT5leGl0KQo+ICsJCXBhcnRuZXItPm9wcy0+ZXhpdChwZGV2KTsKPiArCj4g KwkvKiBCYWNrIHRvIFVTQiBvcGVyYXRpb24gKi8KPiArCXJldCA9IHR5cGVjX3NldF9tb2RlKHBv cnQsIFRZUEVDX1NUQVRFX1VTQik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmcGFydG5lci0+bmgsIFRZUEVDX1NUQVRF X1VTQiwgTlVMTCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwo dHlwZWNfYWx0bW9kZV9leGl0KTsKPiArCj4gKy8qKgo+ICsgKiB0eXBlY19hbHRtb2RlX2F0dGVu dGlvbiAtIEF0dGVudGlvbiBjb21tYW5kCj4gKyAqIEBhZGV2OiBUaGUgYWx0ZXJuYXRlIG1vZGUK PiArICogQHZkbzogVkRPIGZvciB0aGUgQXR0ZW50aW9uIGNvbW1hbmQKPiArICoKPiArICogTm90 aWZpZXMgdGhlIHBhcnRuZXIgb2YgQGFkZXYgYWJvdXQgQXR0ZW50aW9uIGNvbW1hbmQuCj4gKyAq Lwo+ICt2b2lkIHR5cGVjX2FsdG1vZGVfYXR0ZW50aW9uKHN0cnVjdCB0eXBlY19hbHRtb2RlICph ZGV2LCBjb25zdCB1MzIgdmRvKQo+ICt7Cj4gKwlzdHJ1Y3QgYWx0bW9kZSAqcGFydG5lciA9IHRv X2FsdG1vZGUoYWRldiktPnBhcnRuZXI7Cj4gKwo+ICsJaWYgKHBhcnRuZXIgJiYgcGFydG5lci0+ b3BzICYmIHBhcnRuZXItPm9wcy0+YXR0ZW50aW9uKQo+ICsJCXBhcnRuZXItPm9wcy0+YXR0ZW50 aW9uKCZwYXJ0bmVyLT5hZGV2LCB2ZG8pOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHR5cGVj X2FsdG1vZGVfYXR0ZW50aW9uKTsKPiArCj4gKy8qKgo+ICsgKiB0eXBlY19hbHRtb2RlX3ZkbSAt IFNlbmQgVmVuZG9yIERlZmluZWQgTWVzc2FnZXMgKFZETSkgdG8gdGhlIHBhcnRuZXIKPiArICog QGFkZXY6IEFsdGVybmF0ZSBtb2RlIGhhbmRsZQo+ICsgKiBAaGVhZGVyOiBWRE0gSGVhZGVyCj4g KyAqIEB2ZG86IEFycmF5IG9mIFZlbmRvciBEZWZpbmVkIERhdGEgT2JqZWN0cwo+ICsgKiBAY291 bnQ6IE51bWJlciBvZiBEYXRhIE9iamVjdHMKPiArICoKPiArICogVGhlIGFsdGVybmF0ZSBtb2Rl IGRyaXZlcnMgdXNlIHRoaXMgZnVuY3Rpb24gZm9yIFNWSUQgc3BlY2lmaWMgY29tbXVuaWNhdGlv bgo+ICsgKiB3aXRoIHRoZSBwYXJ0bmVyLiBUaGUgcG9ydCBkcml2ZXJzIHVzZSBpdCB0byBkZWxp dmVyIHRoZSBTdHJ1Y3R1cmVkIFZETXMKPiArICogcmVjZWl2ZWQgZnJvbSB0aGUgcGFydG5lcnMg dG8gdGhlIGFsdGVybmF0ZSBtb2RlIGRyaXZlcnMuCj4gKyAqLwo+ICtpbnQgdHlwZWNfYWx0bW9k ZV92ZG0oc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFkZXYsCj4gKwkJICAgICAgY29uc3QgdTMyIGhl YWRlciwgY29uc3QgdTMyICp2ZG8sIGludCBjb3VudCkKPiArewo+ICsJc3RydWN0IGFsdG1vZGUg KmFsdG1vZGU7Cj4gKwlzdHJ1Y3QgYWx0bW9kZSAqcGFydG5lcjsKPiArCj4gKwlpZiAoIWFkZXYp Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJYWx0bW9kZSA9IHRvX2FsdG1vZGUoYWRldik7Cj4gKwo+ ICsJaWYgKCFhbHRtb2RlLT5wYXJ0bmVyKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCXBh cnRuZXIgPSBhbHRtb2RlLT5wYXJ0bmVyOwo+ICsKPiArCWlmIChwYXJ0bmVyLT5vcHMgJiYgcGFy dG5lci0+b3BzLT52ZG0pCj4gKwkJcmV0dXJuIHBhcnRuZXItPm9wcy0+dmRtKCZwYXJ0bmVyLT5h ZGV2LCBoZWFkZXIsIHZkbywgY291bnQpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gK0VYUE9S VF9TWU1CT0xfR1BMKHR5cGVjX2FsdG1vZGVfdmRtKTsKPiArCj4gK3ZvaWQgdHlwZWNfYWx0bW9k ZV9yZWdpc3Rlcl9vcHMoc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFkZXYsCj4gKwkJCQljb25zdCBz dHJ1Y3QgdHlwZWNfYWx0bW9kZV9vcHMgKm9wcykKPiArewo+ICsJdG9fYWx0bW9kZShhZGV2KS0+ b3BzID0gb3BzOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHR5cGVjX2FsdG1vZGVfcmVnaXN0 ZXJfb3BzKTsKPiArCj4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCj4gKy8qIEFQSSBmb3IgdGhl IGFsdGVybmF0ZSBtb2RlIGRyaXZlcnMgKi8KPiArCj4gKy8qKgo+ICsgKiB0eXBlY19hbHRtb2Rl X2dldF9wbHVnIC0gRmluZCBjYWJsZSBwbHVnIGFsdGVybmF0ZSBtb2RlCj4gKyAqIEBhZGV2OiBI YW5kbGUgdG8gcGFydG5lciBhbHRlcm5hdGUgbW9kZQo+ICsgKiBAaW5kZXg6IENhYmxlIHBsdWcg aW5kZXgKPiArICoKPiArICogSW5jcmVtZW50IHJlZmVyZW5jZSBjb3VudCBmb3IgY2FibGUgcGx1 ZyBhbHRlcm5hdGUgbW9kZSBkZXZpY2UuIFJldHVybnMKPiArICogaGFuZGxlIHRvIHRoZSBjYWJs ZSBwbHVnIGFsdGVybmF0ZSBtb2RlLCBvciBOVUxMIGlmIG5vbmUgaXMgZm91bmQuCj4gKyAqLwo+ ICtzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqdHlwZWNfYWx0bW9kZV9nZXRfcGx1ZyhzdHJ1Y3QgdHlw ZWNfYWx0bW9kZSAqYWRldiwKPiArCQkJCQkgICAgIGludCBpbmRleCkKPiArewo+ICsJc3RydWN0 IGFsdG1vZGUgKnBvcnQgPSB0b19hbHRtb2RlKGFkZXYpLT5wYXJ0bmVyOwo+ICsKPiArCWlmIChw b3J0LT5wbHVnW2luZGV4XSkgewo+ICsJCWdldF9kZXZpY2UoJnBvcnQtPnBsdWdbaW5kZXhdLT5h ZGV2LmRldik7Cj4gKwkJcmV0dXJuICZwb3J0LT5wbHVnW2luZGV4XS0+YWRldjsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh0eXBlY19hbHRtb2Rl X2dldF9wbHVnKTsKPiArCj4gKy8qKgo+ICsgKiB0eXBlY19hbHRtb2RlX2dldF9wbHVnIC0gRGVj cmVtZW50IGNhYmxlIHBsdWcgYWx0ZXJuYXRlIG1vZGUgcmVmZXJlbmNlIGNvdW50Cgp0eXBlY19h bHRtb2RlX3B1dF9wbHVnCgo+ICsgKiBAcGx1ZzogSGFuZGxlIHRvIHRoZSBjYWJsZSBwbHVnIGFs dGVybmF0ZSBtb2RlCj4gKyAqLwo+ICt2b2lkIHR5cGVjX2FsdG1vZGVfcHV0X3BsdWcoc3RydWN0 IHR5cGVjX2FsdG1vZGUgKnBsdWcpCj4gK3sKPiArCWlmIChwbHVnKQo+ICsJCXB1dF9kZXZpY2Uo JnBsdWctPmRldik7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwodHlwZWNfYWx0bW9kZV9wdXRf cGx1Zyk7Cj4gKwo+ICtpbnQgX190eXBlY19hbHRtb2RlX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qg dHlwZWNfYWx0bW9kZV9kcml2ZXIgKmRydiwKPiArCQkJCSAgICBzdHJ1Y3QgbW9kdWxlICptb2R1 bGUpCj4gK3sKPiArCWlmICghZHJ2LT5wcm9iZSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4g KwlkcnYtPmRyaXZlci5vd25lciA9IG1vZHVsZTsKPiArCWRydi0+ZHJpdmVyLmJ1cyA9ICZ0eXBl Y19idXM7Cj4gKwo+ICsJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwo+ICt9 Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKF9fdHlwZWNfYWx0bW9kZV9yZWdpc3Rlcl9kcml2ZXIpOwo+ ICsKPiArdm9pZCB0eXBlY19hbHRtb2RlX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB0eXBlY19h bHRtb2RlX2RyaXZlciAqZHJ2KQo+ICt7Cj4gKwlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcml2 ZXIpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHR5cGVjX2FsdG1vZGVfdW5yZWdpc3Rlcl9k cml2ZXIpOwo+ICsKPiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KPiArLyogQVBJIGZvciB0aGUg cG9ydCBkcml2ZXJzICovCj4gKwo+ICtib29sIHR5cGVjX2FsdG1vZGVfdWZwX2NhcGFibGUoc3Ry dWN0IHR5cGVjX2FsdG1vZGUgKmFkZXYpCj4gK3sKPiArCXN0cnVjdCBhbHRtb2RlICphbHRtb2Rl ID0gdG9fYWx0bW9kZShhZGV2KTsKPiArCj4gKwlpZiAoIWlzX3R5cGVjX3BvcnQoYWRldi0+ZGV2 LnBhcmVudCkpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXJldHVybiAhKGFsdG1vZGUtPnJv bGVzID09IFRZUEVDX1BPUlRfREZQKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh0eXBlY19h bHRtb2RlX3VmcF9jYXBhYmxlKTsKPiArCj4gK2Jvb2wgdHlwZWNfYWx0bW9kZV9kZnBfY2FwYWJs ZShzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWRldikKPiArewo+ICsJc3RydWN0IGFsdG1vZGUgKmFs dG1vZGUgPSB0b19hbHRtb2RlKGFkZXYpOwo+ICsKPiArCWlmICghaXNfdHlwZWNfcG9ydChhZGV2 LT5kZXYucGFyZW50KSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuICEoYWx0bW9k ZS0+cm9sZXMgPT0gVFlQRUNfUE9SVF9VRlApOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHR5 cGVjX2FsdG1vZGVfZGZwX2NhcGFibGUpOwo+ICsKPiArLyoqCj4gKyAqIHR5cGVjX21hdGNoX2Fs dG1vZGUgLSBNYXRjaCBTVklEIHRvIGFuIGFycmF5IG9mIGFsdGVybmF0ZSBtb2Rlcwo+ICsgKiBA YWx0bW9kZXM6IEFycmF5IG9mIGFsdGVybmF0ZSBtb2Rlcwo+ICsgKiBAbjogTnVtYmVyIG9mIGVs ZW1lbnRzIGluIHRoZSBhcnJheSwgb3IgLTEgZm9yIE5VTEwgdGVybWlhdGVkIGFycmF5cwo+ICsg KiBAc3ZpZDogU3RhbmRhcmQgb3IgVmVuZG9yIElEIHRvIG1hdGNoIHdpdGgKPiArICoKPiArICog UmV0dXJuIHBvaW50ZXIgdG8gYW4gYWx0ZXJuYXRlIG1vZGUgd2l0aCBTVklEIG1hdGhpbmcgQHN2 aWQsIG9yIE5VTEwgd2hlbiBubwo+ICsgKiBtYXRjaCBpcyBmb3VuZC4KPiArICovCj4gK3N0cnVj dCB0eXBlY19hbHRtb2RlICp0eXBlY19tYXRjaF9hbHRtb2RlKHN0cnVjdCB0eXBlY19hbHRtb2Rl ICoqYWx0bW9kZXMsCj4gKwkJCQkJICBzaXplX3QgbiwgdTE2IHN2aWQsIHU4IG1vZGUpCj4gK3sK PiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKPiArCQlpZiAoIWFs dG1vZGVzW2ldKQo+ICsJCQlicmVhazsKPiArCQlpZiAoYWx0bW9kZXNbaV0tPnN2aWQgPT0gc3Zp ZCAmJiBhbHRtb2Rlc1tpXS0+bW9kZSA9PSBtb2RlKQo+ICsJCQlyZXR1cm4gYWx0bW9kZXNbaV07 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwodHlw ZWNfbWF0Y2hfYWx0bW9kZSk7Cj4gKwo+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwo+ICsKPiAr c3RhdGljIHNzaXplX3QKPiArZGVzY3JpcHRpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gK3sKPiArCXN0cnVjdCB0 eXBlY19hbHRtb2RlICphbHQgPSB0b190eXBlY19hbHRtb2RlKGRldik7Cj4gKwo+ICsJcmV0dXJu IHNwcmludGYoYnVmLCAiJXNcbiIsIGFsdC0+ZGVzYyA/IGFsdC0+ZGVzYyA6ICIiKTsKPiArfQo+ ICtzdGF0aWMgREVWSUNFX0FUVFJfUk8oZGVzY3JpcHRpb24pOwo+ICsKPiArc3RhdGljIHN0cnVj dCBhdHRyaWJ1dGUgKnR5cGVjX2F0dHJzW10gPSB7Cj4gKwkmZGV2X2F0dHJfZGVzY3JpcHRpb24u YXR0ciwKPiArCU5VTEwKPiArfTsKPiArQVRUUklCVVRFX0dST1VQUyh0eXBlYyk7Cj4gKwo+ICtz dGF0aWMgaW50IHR5cGVjX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9k cml2ZXIgKmRyaXZlcikKPiArewo+ICsJc3RydWN0IHR5cGVjX2FsdG1vZGVfZHJpdmVyICpkcnYg PSB0b19hbHRtb2RlX2RyaXZlcihkcml2ZXIpOwo+ICsJc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFs dG1vZGUgPSB0b190eXBlY19hbHRtb2RlKGRldik7Cj4gKwljb25zdCBzdHJ1Y3QgdHlwZWNfZGV2 aWNlX2lkICppZDsKPiArCj4gKwlmb3IgKGlkID0gZHJ2LT5pZF90YWJsZTsgaWQtPnN2aWQ7IGlk KyspCj4gKwkJaWYgKChpZC0+c3ZpZCA9PSBhbHRtb2RlLT5zdmlkKSAmJgo+ICsJCSAgICAoaWQt Pm1vZGUgPT0gVFlQRUNfQU5ZX01PREUgfHwgaWQtPm1vZGUgPT0gYWx0bW9kZS0+bW9kZSkpCj4g KwkJCXJldHVybiAxOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdHlwZWNf dWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQo+ ICt7Cj4gKwlzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0bW9kZSA9IHRvX3R5cGVjX2FsdG1vZGUo ZGV2KTsKPiArCj4gKwlpZiAoYWRkX3VldmVudF92YXIoZW52LCAiU1ZJRD0lMDRYIiwgYWx0bW9k ZS0+c3ZpZCkpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaWYgKGFkZF91ZXZlbnRfdmFy KGVudiwgIk1PREU9JXUiLCBhbHRtb2RlLT5tb2RlKSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwlyZXR1cm4gYWRkX3VldmVudF92YXIoZW52LCAiTU9EQUxJQVM9dHlwZWM6aWQlMDRYbSUw MlgiLAo+ICsJCQkgICAgICBhbHRtb2RlLT5zdmlkLCBhbHRtb2RlLT5tb2RlKTsKPiArfQo+ICsK PiArc3RhdGljIGludCB0eXBlY19hbHRtb2RlX2NyZWF0ZV9saW5rcyhzdHJ1Y3QgYWx0bW9kZSAq YWx0KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpwb3J0X2RldiA9ICZhbHQtPnBhcnRuZXItPmFk ZXYuZGV2Owo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFsdC0+YWRldi5kZXY7Cj4gKwlpbnQg ZXJyOwo+ICsKPiArCWVyciA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXYtPmtvYmosICZwb3J0X2Rl di0+a29iaiwgInBvcnQiKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwll cnIgPSBzeXNmc19jcmVhdGVfbGluaygmcG9ydF9kZXYtPmtvYmosICZkZXYtPmtvYmosICJwYXJ0 bmVyIik7Cj4gKwlpZiAoZXJyKQo+ICsJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmtvYmosICJw b3J0Iik7Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCB0eXBlY19w cm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCB0eXBlY19hbHRtb2RlX2Ry aXZlciAqZHJ2ID0gdG9fYWx0bW9kZV9kcml2ZXIoZGV2LT5kcml2ZXIpOwo+ICsJc3RydWN0IHR5 cGVjX2FsdG1vZGUgKmFkZXYgPSB0b190eXBlY19hbHRtb2RlKGRldik7Cj4gKwlzdHJ1Y3QgYWx0 bW9kZSAqYWx0bW9kZSA9IHRvX2FsdG1vZGUoYWRldik7Cj4gKwo+ICsJLyogRmFpbCBpZiB0aGUg cG9ydCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBhbHRlcm5hdGUgbW9kZSAqLwo+ICsJaWYgKCFhbHRt b2RlLT5wYXJ0bmVyKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCWlmICh0eXBlY19hbHRt b2RlX2NyZWF0ZV9saW5rcyhhbHRtb2RlKSkKPiArCQlkZXZfd2FybihkZXYsICJmYWlsZWQgdG8g Y3JlYXRlIHN5bWxpbmtzXG4iKTsKPiArCj4gKwlyZXR1cm4gZHJ2LT5wcm9iZShhZGV2LCBhbHRt b2RlLT5wYXJ0bmVyLT5hZGV2LnZkbyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdHlwZWNfcmVt b3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHR5cGVjX2FsdG1vZGVfZHJp dmVyICpkcnYgPSB0b19hbHRtb2RlX2RyaXZlcihkZXYtPmRyaXZlcik7Cj4gKwlzdHJ1Y3QgdHlw ZWNfYWx0bW9kZSAqYWRldiA9IHRvX3R5cGVjX2FsdG1vZGUoZGV2KTsKPiArCXN0cnVjdCBhbHRt b2RlICphbHRtb2RlID0gdG9fYWx0bW9kZShhZGV2KTsKPiArCj4gKwlpZiAoIWlzX3R5cGVjX3Bv cnQoYWRldi0+ZGV2LnBhcmVudCkpIHsKPiArCQlzeXNmc19yZW1vdmVfbGluaygmYWx0bW9kZS0+ cGFydG5lci0+YWRldi5kZXYua29iaiwgInBhcnRuZXIiKTsKPiArCQlzeXNmc19yZW1vdmVfbGlu aygmYWRldi0+ZGV2LmtvYmosICJwb3J0Iik7Cj4gKwl9Cj4gKwo+ICsJaWYgKGRydi0+cmVtb3Zl KQo+ICsJCWRydi0+cmVtb3ZlKHRvX3R5cGVjX2FsdG1vZGUoZGV2KSk7Cj4gKwo+ICsJaWYgKGFk ZXYtPmFjdGl2ZSkKPiArCQl0eXBlY19hbHRtb2RlX2V4aXQoYWRldik7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0cnVjdCBidXNfdHlwZSB0eXBlY19idXMgPSB7Cj4gKwkubmFtZSA9 ICJ0eXBlYyIsCj4gKwkuZGV2X2dyb3VwcyA9IHR5cGVjX2dyb3VwcywKPiArCS5tYXRjaCA9IHR5 cGVjX21hdGNoLAo+ICsJLnVldmVudCA9IHR5cGVjX3VldmVudCwKPiArCS5wcm9iZSA9IHR5cGVj X3Byb2JlLAo+ICsJLnJlbW92ZSA9IHR5cGVjX3JlbW92ZSwKPiArfTsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy91c2IvdHlwZWMvYnVzLmggYi9kcml2ZXJzL3VzYi90eXBlYy9idXMuaAo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zODU4NTM2Mzk1MmYKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy91c2IvdHlwZWMvYnVzLmgKPiBAQCAtMCwwICsxLDM3 IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKwo+ICsjaWZu ZGVmIF9fVVNCX1RZUEVDX0FMVE1PREVfSF9fCj4gKyNkZWZpbmUgX19VU0JfVFlQRUNfQUxUTU9E RV9IX18KPiArCj4gKyNpbmNsdWRlIDxsaW51eC91c2IvdHlwZWMuaD4KPiArCj4gK3N0cnVjdCBi dXNfdHlwZTsKPiArCj4gK3N0cnVjdCBhbHRtb2RlIHsKPiArCXVuc2lnbmVkIGludAkJCWlkOwo+ ICsJc3RydWN0IHR5cGVjX2FsdG1vZGUJCWFkZXY7Cj4gKwo+ICsJZW51bSB0eXBlY19wb3J0X2Rh dGEJCXJvbGVzOwo+ICsKPiArCXN0cnVjdCBhdHRyaWJ1dGUJCSphdHRyc1s1XTsKPiArCWNoYXIJ CQkJZ3JvdXBfbmFtZVs2XTsKPiArCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJCWdyb3VwOwo+ICsJ Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkqZ3JvdXBzWzJdOwo+ICsKPiArCXN0cnVjdCBh bHRtb2RlCQkJKnBhcnRuZXI7Cj4gKwlzdHJ1Y3QgYWx0bW9kZQkJCSpwbHVnWzJdOwo+ICsJY29u c3Qgc3RydWN0IHR5cGVjX2FsdG1vZGVfb3BzCSpvcHM7Cj4gKwo+ICsJc3RydWN0IGJsb2NraW5n X25vdGlmaWVyX2hlYWQJbmg7Cj4gK307Cj4gKwo+ICsjZGVmaW5lIHRvX2FsdG1vZGUoZCkgY29u dGFpbmVyX29mKGQsIHN0cnVjdCBhbHRtb2RlLCBhZGV2KQo+ICsKPiArZXh0ZXJuIHN0cnVjdCBi dXNfdHlwZSB0eXBlY19idXM7Cj4gK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdHlw ZWNfYWx0bW9kZV9kZXZfdHlwZTsKPiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB0 eXBlY19wb3J0X2Rldl90eXBlOwo+ICsKPiArI2RlZmluZSBpc190eXBlY19hbHRtb2RlKF9kZXZf KSAoX2Rldl8tPnR5cGUgPT0gJnR5cGVjX2FsdG1vZGVfZGV2X3R5cGUpCj4gKyNkZWZpbmUgaXNf dHlwZWNfcG9ydChfZGV2XykgKF9kZXZfLT50eXBlID09ICZ0eXBlY19wb3J0X2Rldl90eXBlKQo+ ICsKPiArI2VuZGlmIC8qIF9fVVNCX1RZUEVDX0FMVE1PREVfSF9fICovCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMgYi9kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jCj4g aW5kZXggMjZlZWFiMTQ5MWI3Li4zM2ZmZmI4NTM5OTQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91 c2IvdHlwZWMvY2xhc3MuYwo+ICsrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMKPiBAQCAt Niw2ICs2LDcgQEAKPiAgICogQXV0aG9yOiBIZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1 c0BsaW51eC5pbnRlbC5jb20+Cj4gICAqLwo+ICAKPiArI2luY2x1ZGUgPGxpbnV4L2Nvbm5lY3Rp b24uaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+IEBAIC0xMywyNSArMTQsMTIgQEAK PiAgI2luY2x1ZGUgPGxpbnV4L3VzYi90eXBlYy5oPgo+ICAjaW5jbHVkZSA8bGludXgvdXNiL3R5 cGVjX211eC5oPgo+ICAKPiAtc3RydWN0IHR5cGVjX2FsdG1vZGUgewo+IC0Jc3RydWN0IGRldmlj ZQkJCWRldjsKPiAtCXUxNgkJCQlzdmlkOwo+IC0JdTgJCQkJbW9kZTsKPiAtCj4gLQl1MzIJCQkJ dmRvOwo+IC0JY2hhcgkJCQkqZGVzYzsKPiAtCWVudW0gdHlwZWNfcG9ydF90eXBlCQlyb2xlczsK PiAtCXVuc2lnbmVkIGludAkJCWFjdGl2ZToxOwo+IC0KPiAtCXN0cnVjdCBhdHRyaWJ1dGUJCSph dHRyc1s1XTsKPiAtCWNoYXIJCQkJZ3JvdXBfbmFtZVs2XTsKPiAtCXN0cnVjdCBhdHRyaWJ1dGVf Z3JvdXAJCWdyb3VwOwo+IC0JY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkqZ3JvdXBzWzJd Owo+IC19Owo+ICsjaW5jbHVkZSAiYnVzLmgiCj4gIAo+ICBzdHJ1Y3QgdHlwZWNfcGx1ZyB7Cj4g IAlzdHJ1Y3QgZGV2aWNlCQkJZGV2Owo+ICAJZW51bSB0eXBlY19wbHVnX2luZGV4CQlpbmRleDsK PiArCXN0cnVjdCBpZGEJCQltb2RlX2lkczsKPiAgfTsKPiAgCj4gIHN0cnVjdCB0eXBlY19jYWJs ZSB7Cj4gQEAgLTQ2LDExICszNCwxMyBAQCBzdHJ1Y3QgdHlwZWNfcGFydG5lciB7Cj4gIAl1bnNp Z25lZCBpbnQJCQl1c2JfcGQ6MTsKPiAgCXN0cnVjdCB1c2JfcGRfaWRlbnRpdHkJCSppZGVudGl0 eTsKPiAgCWVudW0gdHlwZWNfYWNjZXNzb3J5CQlhY2Nlc3Nvcnk7Cj4gKwlzdHJ1Y3QgaWRhCQkJ bW9kZV9pZHM7Cj4gIH07Cj4gIAo+ICBzdHJ1Y3QgdHlwZWNfcG9ydCB7Cj4gIAl1bnNpZ25lZCBp bnQJCQlpZDsKPiAgCXN0cnVjdCBkZXZpY2UJCQlkZXY7Cj4gKwlzdHJ1Y3QgaWRhCQkJbW9kZV9p ZHM7Cj4gIAo+ICAJaW50CQkJCXByZWZlcl9yb2xlOwo+ICAJZW51bSB0eXBlY19kYXRhX3JvbGUJ CWRhdGFfcm9sZTsKPiBAQCAtNzEsMTcgKzYxLDE0IEBAIHN0cnVjdCB0eXBlY19wb3J0IHsKPiAg I2RlZmluZSB0b190eXBlY19wbHVnKF9kZXZfKSBjb250YWluZXJfb2YoX2Rldl8sIHN0cnVjdCB0 eXBlY19wbHVnLCBkZXYpCj4gICNkZWZpbmUgdG9fdHlwZWNfY2FibGUoX2Rldl8pIGNvbnRhaW5l cl9vZihfZGV2Xywgc3RydWN0IHR5cGVjX2NhYmxlLCBkZXYpCj4gICNkZWZpbmUgdG9fdHlwZWNf cGFydG5lcihfZGV2XykgY29udGFpbmVyX29mKF9kZXZfLCBzdHJ1Y3QgdHlwZWNfcGFydG5lciwg ZGV2KQo+IC0jZGVmaW5lIHRvX2FsdG1vZGUoX2Rldl8pIGNvbnRhaW5lcl9vZihfZGV2Xywgc3Ry dWN0IHR5cGVjX2FsdG1vZGUsIGRldikKPiAgCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNl X3R5cGUgdHlwZWNfcGFydG5lcl9kZXZfdHlwZTsKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZp Y2VfdHlwZSB0eXBlY19jYWJsZV9kZXZfdHlwZTsKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZp Y2VfdHlwZSB0eXBlY19wbHVnX2Rldl90eXBlOwo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmlj ZV90eXBlIHR5cGVjX3BvcnRfZGV2X3R5cGU7Cj4gIAo+ICAjZGVmaW5lIGlzX3R5cGVjX3BhcnRu ZXIoX2Rldl8pIChfZGV2Xy0+dHlwZSA9PSAmdHlwZWNfcGFydG5lcl9kZXZfdHlwZSkKPiAgI2Rl ZmluZSBpc190eXBlY19jYWJsZShfZGV2XykgKF9kZXZfLT50eXBlID09ICZ0eXBlY19jYWJsZV9k ZXZfdHlwZSkKPiAgI2RlZmluZSBpc190eXBlY19wbHVnKF9kZXZfKSAoX2Rldl8tPnR5cGUgPT0g JnR5cGVjX3BsdWdfZGV2X3R5cGUpCj4gLSNkZWZpbmUgaXNfdHlwZWNfcG9ydChfZGV2XykgKF9k ZXZfLT50eXBlID09ICZ0eXBlY19wb3J0X2Rldl90eXBlKQo+ICAKPiAgc3RhdGljIERFRklORV9J REEodHlwZWNfaW5kZXhfaWRhKTsKPiAgc3RhdGljIHN0cnVjdCBjbGFzcyAqdHlwZWNfY2xhc3M7 Cj4gQEAgLTE2MywyNyArMTUwLDE0MSBAQCBzdGF0aWMgdm9pZCB0eXBlY19yZXBvcnRfaWRlbnRp dHkoc3RydWN0IGRldmljZSAqZGV2KQo+ICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCj4gIC8qIEFs dGVybmF0ZSBNb2RlcyAqLwo+ICAKPiArc3RhdGljIGludCBhbHRtb2RlX21hdGNoKHN0cnVjdCBk ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFk ZXYgPSB0b190eXBlY19hbHRtb2RlKGRldik7Cj4gKwlzdHJ1Y3QgdHlwZWNfZGV2aWNlX2lkICpp ZCA9IGRhdGE7Cj4gKwo+ICsJaWYgKCFpc190eXBlY19hbHRtb2RlKGRldikpCj4gKwkJcmV0dXJu IDA7Cj4gKwo+ICsJcmV0dXJuICgoYWRldi0+c3ZpZCA9PSBpZC0+c3ZpZCkgJiYgKGFkZXYtPm1v ZGUgPT0gaWQtPm1vZGUpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdHlwZWNfYWx0bW9kZV9n ZXRfcGFydG5lcihzdHJ1Y3QgYWx0bW9kZSAqYWx0bW9kZSkKPiArewo+ICsJc3RydWN0IHR5cGVj X2FsdG1vZGUgKmFkZXYgPSAmYWx0bW9kZS0+YWRldjsKPiArCXN0cnVjdCB0eXBlY19kZXZpY2Vf aWQgaWQgPSB7IGFkZXYtPnN2aWQsIGFkZXYtPm1vZGUsIH07Cj4gKwlzdHJ1Y3QgdHlwZWNfcG9y dCAqcG9ydCA9IHR5cGVjX2FsdG1vZGUycG9ydChhZGV2KTsKPiArCXN0cnVjdCBhbHRtb2RlICpw YXJ0bmVyOwo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsKPiArCWRldiA9IGRldmljZV9maW5k X2NoaWxkKCZwb3J0LT5kZXYsICZpZCwgYWx0bW9kZV9tYXRjaCk7Cj4gKwlpZiAoIWRldikKPiAr CQlyZXR1cm47Cj4gKwo+ICsJLyogQmluZCB0aGUgcG9ydCBhbHQgbW9kZSB0byB0aGUgcGFydG5l ci9wbHVnIGFsdCBtb2RlLiAqLwo+ICsJcGFydG5lciA9IHRvX2FsdG1vZGUodG9fdHlwZWNfYWx0 bW9kZShkZXYpKTsKPiArCWFsdG1vZGUtPnBhcnRuZXIgPSBwYXJ0bmVyOwo+ICsKPiArCS8qIEJp bmQgdGhlIHBhcnRuZXIvcGx1ZyBhbHQgbW9kZSB0byB0aGUgcG9ydCBhbHQgbW9kZS4gKi8KPiAr CWlmIChpc190eXBlY19wbHVnKGFkZXYtPmRldi5wYXJlbnQpKSB7Cj4gKwkJc3RydWN0IHR5cGVj X3BsdWcgKnBsdWcgPSB0b190eXBlY19wbHVnKGFkZXYtPmRldi5wYXJlbnQpOwo+ICsKPiArCQlw YXJ0bmVyLT5wbHVnW3BsdWctPmluZGV4XSA9IGFsdG1vZGU7Cj4gKwl9IGVsc2Ugewo+ICsJCXBh cnRuZXItPnBhcnRuZXIgPSBhbHRtb2RlOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0 eXBlY19hbHRtb2RlX3B1dF9wYXJ0bmVyKHN0cnVjdCBhbHRtb2RlICphbHRtb2RlKQo+ICt7Cj4g KwlzdHJ1Y3QgYWx0bW9kZSAqcGFydG5lciA9IGFsdG1vZGUtPnBhcnRuZXI7Cj4gKwlzdHJ1Y3Qg dHlwZWNfYWx0bW9kZSAqYWRldjsKPiArCj4gKwlpZiAoIXBhcnRuZXIpCj4gKwkJcmV0dXJuOwo+ ICsKPiArCWFkZXYgPSAmcGFydG5lci0+YWRldjsKPiArCj4gKwlpZiAoaXNfdHlwZWNfcGx1Zyhh ZGV2LT5kZXYucGFyZW50KSkgewo+ICsJCXN0cnVjdCB0eXBlY19wbHVnICpwbHVnID0gdG9fdHlw ZWNfcGx1ZyhhZGV2LT5kZXYucGFyZW50KTsKPiArCj4gKwkJcGFydG5lci0+cGx1Z1twbHVnLT5p bmRleF0gPSBOVUxMOwo+ICsJfSBlbHNlIHsKPiArCQlwYXJ0bmVyLT5wYXJ0bmVyID0gTlVMTDsK PiArCX0KPiArCXB1dF9kZXZpY2UoJmFkZXYtPmRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg X190eXBlY19wb3J0X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqbmFtZSkK PiArewo+ICsJcmV0dXJuICFzdHJjbXAoKGNvbnN0IGNoYXIgKiluYW1lLCBkZXZfbmFtZShkZXYp KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgKnR5cGVjX3BvcnRfbWF0Y2goc3RydWN0IGRldmNv biAqY29uLCBpbnQgZXAsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXJldHVybiBjbGFzc19maW5kX2Rl dmljZSh0eXBlY19jbGFzcywgTlVMTCwgY29uLT5lbmRwb2ludFtlcF0sCj4gKwkJCQkgX190eXBl Y19wb3J0X21hdGNoKTsKPiArfQo+ICsKPiArc3RydWN0IHR5cGVjX2FsdG1vZGUgKgo+ICt0eXBl Y19hbHRtb2RlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwgdTE2IHN2aWQs IHU4IG1vZGUsCj4gKwkJCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQo+ICt7Cj4gKwlzdHJ1 Y3QgdHlwZWNfZGV2aWNlX2lkIGlkID0geyBzdmlkLCBtb2RlLCB9Owo+ICsJc3RydWN0IGRldmlj ZSAqYWx0bW9kZV9kZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpwb3J0X2RldjsKPiArCXN0cnVjdCBh bHRtb2RlICphbHRtb2RlOwo+ICsJaW50IHJldDsKPiArCj4gKwkvKiBGaW5kIHRoZSBwb3J0IGxp bmtlZCB0byB0aGUgY2FsbGVyICovCj4gKwlwb3J0X2RldiA9IF9fZGV2aWNlX2ZpbmRfY29ubmVj dGlvbihkZXYsIE5VTEwsIE5VTEwsIHR5cGVjX3BvcnRfbWF0Y2gpOwo+ICsJaWYgKCFwb3J0X2Rl dikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKPiArCj4gKwkvKiBGaW5kIHRoZSBhbHRt b2RlIHdpdGggbWF0Y2hpbmcgc3ZpZCAqLwo+ICsJYWx0bW9kZV9kZXYgPSBkZXZpY2VfZmluZF9j aGlsZChwb3J0X2RldiwgJmlkLCBhbHRtb2RlX21hdGNoKTsKPiArCj4gKwlwdXRfZGV2aWNlKHBv cnRfZGV2KTsKPiArCj4gKwlpZiAoIWFsdG1vZGVfZGV2KQo+ICsJCXJldHVybiBFUlJfUFRSKC1F Tk9ERVYpOwo+ICsKPiArCWFsdG1vZGUgPSB0b19hbHRtb2RlKHRvX3R5cGVjX2FsdG1vZGUoYWx0 bW9kZV9kZXYpKTsKPiArCj4gKwkvKiBSZWdpc3RlciBub3RpZmllciAqLwo+ICsJcmV0ID0gYmxv Y2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmFsdG1vZGUtPm5oLCBuYik7Cj4gKwlpZiAo cmV0KSB7Cj4gKwkJcHV0X2RldmljZShhbHRtb2RlX2Rldik7Cj4gKwkJcmV0dXJuIEVSUl9QVFIo cmV0KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gJmFsdG1vZGUtPmFkZXY7Cj4gK30KPiArRVhQT1JU X1NZTUJPTF9HUEwodHlwZWNfYWx0bW9kZV9yZWdpc3Rlcl9ub3RpZmllcik7Cj4gKwo+ICt2b2lk IHR5cGVjX2FsdG1vZGVfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAq YWRldiwKPiArCQkJCSAgICAgICBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQo+ICt7Cj4gKwlz dHJ1Y3QgYWx0bW9kZSAqYWx0bW9kZSA9IHRvX2FsdG1vZGUoYWRldik7Cj4gKwo+ICsJYmxvY2tp bmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmYWx0bW9kZS0+bmgsIG5iKTsKPiArCXB1dF9k ZXZpY2UoJmFkZXYtPmRldik7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwodHlwZWNfYWx0bW9k ZV91bnJlZ2lzdGVyX25vdGlmaWVyKTsKPiArCj4gIC8qKgo+ICAgKiB0eXBlY19hbHRtb2RlX3Vw ZGF0ZV9hY3RpdmUgLSBSZXBvcnQgRW50ZXIvRXhpdCBtb2RlCj4gLSAqIEBhbHQ6IEhhbmRsZSB0 byB0aGUgYWx0ZXJuYXRlIG1vZGUKPiArICogQGFkZXY6IEhhbmRsZSB0byB0aGUgYWx0ZXJuYXRl IG1vZGUKPiAgICogQG1vZGU6IE1vZGUgaW5kZXgKPiAgICogQGFjdGl2ZTogVHJ1ZSB3aGVuIHRo ZSBtb2RlIGhhcyBiZWVuIGVudGVyZWQKPiAgICoKPiAgICogSWYgYSBwYXJ0bmVyIG9yIGNhYmxl IHBsdWcgZXhlY3V0ZXMgRW50ZXIvRXhpdCBNb2RlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5LCB0aGUK PiAgICogZHJpdmVycyB1c2UgdGhpcyByb3V0aW5lIHRvIHJlcG9ydCB0aGUgdXBkYXRlZCBzdGF0 ZSBvZiB0aGUgbW9kZS4KPiAgICovCj4gLXZvaWQgdHlwZWNfYWx0bW9kZV91cGRhdGVfYWN0aXZl KHN0cnVjdCB0eXBlY19hbHRtb2RlICphbHQsIGludCBtb2RlLAo+ICt2b2lkIHR5cGVjX2FsdG1v ZGVfdXBkYXRlX2FjdGl2ZShzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWRldiwgaW50IG1vZGUsCj4g IAkJCQkgYm9vbCBhY3RpdmUpCj4gIHsKPiAgCWNoYXIgZGlyWzZdOwo+ICAKPiAtCWlmIChhbHQt PmFjdGl2ZSA9PSBhY3RpdmUpCj4gKwlpZiAoYWRldi0+YWN0aXZlID09IGFjdGl2ZSkKPiAgCQly ZXR1cm47Cj4gIAo+IC0JYWx0LT5hY3RpdmUgPSBhY3RpdmU7Cj4gKwlhZGV2LT5hY3RpdmUgPSBh Y3RpdmU7Cj4gIAlzbnByaW50ZihkaXIsIHNpemVvZihkaXIpLCAibW9kZSVkIiwgbW9kZSk7Cj4g LQlzeXNmc19ub3RpZnkoJmFsdC0+ZGV2LmtvYmosIGRpciwgImFjdGl2ZSIpOwo+IC0Ja29iamVj dF91ZXZlbnQoJmFsdC0+ZGV2LmtvYmosIEtPQkpfQ0hBTkdFKTsKPiArCXN5c2ZzX25vdGlmeSgm YWRldi0+ZGV2LmtvYmosIGRpciwgImFjdGl2ZSIpOwo+ICsJa29iamVjdF91ZXZlbnQoJmFkZXYt PmRldi5rb2JqLCBLT0JKX0NIQU5HRSk7Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTF9HUEwodHlwZWNf YWx0bW9kZV91cGRhdGVfYWN0aXZlKTsKPiAgCj4gQEAgLTIxMCw3ICszMTEsNyBAQCBFWFBPUlRf U1lNQk9MX0dQTCh0eXBlY19hbHRtb2RlMnBvcnQpOwo+ICBzdGF0aWMgc3NpemVfdAo+ICB2ZG9f c2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBj aGFyICpidWYpCj4gIHsKPiAtCXN0cnVjdCB0eXBlY19hbHRtb2RlICphbHQgPSB0b19hbHRtb2Rl KGRldik7Cj4gKwlzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0ID0gdG9fdHlwZWNfYWx0bW9kZShk ZXYpOwo+ICAKPiAgCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgYWx0LT52ZG8pOwo+ ICB9Cj4gQEAgLTIxOSw3ICszMjAsNyBAQCBzdGF0aWMgREVWSUNFX0FUVFJfUk8odmRvKTsKPiAg c3RhdGljIHNzaXplX3QKPiAgZGVzY3JpcHRpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gIHsKPiAtCXN0cnVjdCB0 eXBlY19hbHRtb2RlICphbHQgPSB0b19hbHRtb2RlKGRldik7Cj4gKwlzdHJ1Y3QgdHlwZWNfYWx0 bW9kZSAqYWx0ID0gdG9fdHlwZWNfYWx0bW9kZShkZXYpOwo+ICAKPiAgCXJldHVybiBzcHJpbnRm KGJ1ZiwgIiVzXG4iLCBhbHQtPmRlc2MgPyBhbHQtPmRlc2MgOiAiIik7Cj4gIH0KPiBAQCAtMjI4 LDI4ICszMjksNDYgQEAgc3RhdGljIERFVklDRV9BVFRSX1JPKGRlc2NyaXB0aW9uKTsKPiAgc3Rh dGljIHNzaXplX3QKPiAgYWN0aXZlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICB7Cj4gLQlzdHJ1Y3QgdHlwZWNfYWx0 bW9kZSAqYWx0ID0gdG9fYWx0bW9kZShkZXYpOwo+ICsJc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFs dCA9IHRvX3R5cGVjX2FsdG1vZGUoZGV2KTsKPiAgCj4gIAlyZXR1cm4gc3ByaW50ZihidWYsICIl c1xuIiwgYWx0LT5hY3RpdmUgPyAieWVzIiA6ICJubyIpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgc3Np emVfdAo+IC1hY3RpdmVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwKPiAtCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKPiAr c3RhdGljIHNzaXplX3QgYWN0aXZlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRl dmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBz aXplKQo+ICB7Cj4gLQlzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0ID0gdG9fYWx0bW9kZShkZXYp Owo+IC0Jc3RydWN0IHR5cGVjX3BvcnQgKnBvcnQgPSB0eXBlY19hbHRtb2RlMnBvcnQoYWx0KTsK PiAtCWJvb2wgYWN0aXZhdGU7Cj4gKwlzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWRldiA9IHRvX3R5 cGVjX2FsdG1vZGUoZGV2KTsKPiArCXN0cnVjdCB0eXBlY19wb3J0ICpwb3J0ID0gdHlwZWNfYWx0 bW9kZTJwb3J0KGFkZXYpOwo+ICsJc3RydWN0IGFsdG1vZGUgKmFsdG1vZGUgPSB0b19hbHRtb2Rl KGFkZXYpOwo+ICsJYm9vbCBlbnRlcjsKPiAgCWludCByZXQ7Cj4gIAo+ICAJaWYgKCFwb3J0LT5j YXAtPmFjdGl2YXRlX21vZGUpCj4gIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICAKPiAtCXJldCA9 IGtzdHJ0b2Jvb2woYnVmLCAmYWN0aXZhdGUpOwo+ICsJcmV0ID0ga3N0cnRvYm9vbChidWYsICZl bnRlcik7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JcmV0ID0gcG9ydC0+ Y2FwLT5hY3RpdmF0ZV9tb2RlKHBvcnQtPmNhcCwgYWx0LT5tb2RlLCBhY3RpdmF0ZSk7Cj4gKwlp ZiAoYWRldi0+YWN0aXZlID09IGVudGVyKQo+ICsJCXJldHVybiBzaXplOwo+ICsKPiArCWlmIChp c190eXBlY19wb3J0KGFkZXYtPmRldi5wYXJlbnQpKSB7Cj4gKwkJdHlwZWNfYWx0bW9kZV91cGRh dGVfYWN0aXZlKGFkZXYsIGFkZXYtPm1vZGUsIGVudGVyKTsKPiArCQlzeXNmc19ub3RpZnkoJmFk ZXYtPmRldi5rb2JqLCBOVUxMLCAiYWN0aXZlIik7Cj4gKwo+ICsJCWlmICghYWx0bW9kZS0+cGFy dG5lcikKPiArCQkJcmV0dXJuIHNpemU7Cj4gKwl9IGVsc2Ugewo+ICsJCWFkZXYgPSAmYWx0bW9k ZS0+cGFydG5lci0+YWRldjsKPiArCj4gKwkJaWYgKCFhZGV2LT5hY3RpdmUpIHsKPiArCQkJZGV2 X3dhcm4oZGV2LCAicG9ydCBoYXMgdGhlIG1vZGUgZGlzYWJsZWRcbiIpOwo+ICsJCQlyZXR1cm4g LUVQRVJNOwo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXQgPSBwb3J0LT5jYXAtPmFjdGl2YXRlX21v ZGUoYWRldiwgZW50ZXIpOwo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiBAQCAt MjYxLDcgKzM4MCw3IEBAIHN0YXRpYyBzc2l6ZV90Cj4gIHN1cHBvcnRlZF9yb2xlc19zaG93KHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gIAkJICAg ICBjaGFyICpidWYpCj4gIHsKPiAtCXN0cnVjdCB0eXBlY19hbHRtb2RlICphbHQgPSB0b19hbHRt b2RlKGRldik7Cj4gKwlzdHJ1Y3QgYWx0bW9kZSAqYWx0ID0gdG9fYWx0bW9kZSh0b190eXBlY19h bHRtb2RlKGRldikpOwo+ICAJc3NpemVfdCByZXQ7Cj4gIAo+ICAJc3dpdGNoIChhbHQtPnJvbGVz KSB7Cj4gQEAgLTI4MCwyOSArMzk5LDcyIEBAIHN1cHBvcnRlZF9yb2xlc19zaG93KHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gIH0KPiAgc3RhdGlj IERFVklDRV9BVFRSX1JPKHN1cHBvcnRlZF9yb2xlcyk7Cj4gIAo+IC1zdGF0aWMgdm9pZCB0eXBl Y19hbHRtb2RlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQo+ICtzdGF0aWMgc3NpemVfdAo+ ICttb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAq YXR0ciwgY2hhciAqYnVmKQo+ICB7Cj4gLQlzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0ID0gdG9f YWx0bW9kZShkZXYpOwo+ICsJc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFkZXYgPSB0b190eXBlY19h bHRtb2RlKGRldik7Cj4gIAo+IC0Ja2ZyZWUoYWx0KTsKPiArCXJldHVybiBzcHJpbnRmKGJ1Ziwg IiV1XG4iLCBhZGV2LT5tb2RlKTsKPiAgfQo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUk8obW9kZSk7 Cj4gIAo+IC1zdGF0aWMgc3NpemVfdCBzdmlkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiAtCQkJIGNoYXIgKmJ1ZikKPiArc3RhdGljIHNz aXplX3QKPiArc3ZpZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiAgewo+IC0Jc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFs dCA9IHRvX2FsdG1vZGUoZGV2KTsKPiArCXN0cnVjdCB0eXBlY19hbHRtb2RlICphZGV2ID0gdG9f dHlwZWNfYWx0bW9kZShkZXYpOwo+ICAKPiAtCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwNHhcbiIs IGFsdC0+c3ZpZCk7Cj4gKwlyZXR1cm4gc3ByaW50ZihidWYsICIlMDR4XG4iLCBhZGV2LT5zdmlk KTsKPiAgfQo+ICBzdGF0aWMgREVWSUNFX0FUVFJfUk8oc3ZpZCk7Cj4gIAo+ICBzdGF0aWMgc3Ry dWN0IGF0dHJpYnV0ZSAqdHlwZWNfYWx0bW9kZV9hdHRyc1tdID0gewo+ICsJJmRldl9hdHRyX2Fj dGl2ZS5hdHRyLAo+ICsJJmRldl9hdHRyX21vZGUuYXR0ciwKPiAgCSZkZXZfYXR0cl9zdmlkLmF0 dHIsCj4gKwkmZGV2X2F0dHJfdmRvLmF0dHIsCj4gIAlOVUxMCj4gIH07Cj4gIEFUVFJJQlVURV9H Uk9VUFModHlwZWNfYWx0bW9kZSk7Cj4gIAo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90 eXBlIHR5cGVjX2FsdG1vZGVfZGV2X3R5cGUgPSB7Cj4gK3N0YXRpYyBpbnQgYWx0bW9kZV9pZF9n ZXQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgaWRhICppZHM7Cj4gKwo+ICsJ aWYgKGlzX3R5cGVjX3BhcnRuZXIoZGV2KSkKPiArCQlpZHMgPSAmdG9fdHlwZWNfcGFydG5lcihk ZXYpLT5tb2RlX2lkczsKPiArCWVsc2UgaWYgKGlzX3R5cGVjX3BsdWcoZGV2KSkKPiArCQlpZHMg PSAmdG9fdHlwZWNfcGx1ZyhkZXYpLT5tb2RlX2lkczsKPiArCWVsc2UKPiArCQlpZHMgPSAmdG9f dHlwZWNfcG9ydChkZXYpLT5tb2RlX2lkczsKPiArCj4gKwlyZXR1cm4gaWRhX3NpbXBsZV9nZXQo aWRzLCAwLCAwLCBHRlBfS0VSTkVMKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWx0bW9kZV9p ZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaWQpCj4gK3sKPiArCXN0cnVjdCBpZGEg KmlkczsKPiArCj4gKwlpZiAoaXNfdHlwZWNfcGFydG5lcihkZXYpKQo+ICsJCWlkcyA9ICZ0b190 eXBlY19wYXJ0bmVyKGRldiktPm1vZGVfaWRzOwo+ICsJZWxzZSBpZiAoaXNfdHlwZWNfcGx1Zyhk ZXYpKQo+ICsJCWlkcyA9ICZ0b190eXBlY19wbHVnKGRldiktPm1vZGVfaWRzOwo+ICsJZWxzZQo+ ICsJCWlkcyA9ICZ0b190eXBlY19wb3J0KGRldiktPm1vZGVfaWRzOwo+ICsKPiArCWlkYV9zaW1w bGVfcmVtb3ZlKGlkcywgaWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0eXBlY19hbHRtb2Rl X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgYWx0bW9kZSAqYWx0 ID0gdG9fYWx0bW9kZSh0b190eXBlY19hbHRtb2RlKGRldikpOwo+ICsKPiArCXR5cGVjX2FsdG1v ZGVfcHV0X3BhcnRuZXIoYWx0KTsKPiArCj4gKwlhbHRtb2RlX2lkX3JlbW92ZShhbHQtPmFkZXYu ZGV2LnBhcmVudCwgYWx0LT5pZCk7Cj4gKwlrZnJlZShhbHQpOwo+ICt9Cj4gKwo+ICtjb25zdCBz dHJ1Y3QgZGV2aWNlX3R5cGUgdHlwZWNfYWx0bW9kZV9kZXZfdHlwZSA9IHsKPiAgCS5uYW1lID0g InR5cGVjX2FsdGVybmF0ZV9tb2RlIiwKPiAgCS5ncm91cHMgPSB0eXBlY19hbHRtb2RlX2dyb3Vw cywKPiAgCS5yZWxlYXNlID0gdHlwZWNfYWx0bW9kZV9yZWxlYXNlLAo+IEBAIC0zMTIsNTggKzQ3 NCw3MiBAQCBzdGF0aWMgc3RydWN0IHR5cGVjX2FsdG1vZGUgKgo+ICB0eXBlY19yZWdpc3Rlcl9h bHRtb2RlKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKPiAgCQkgICAgICAgY29uc3Qgc3RydWN0IHR5 cGVjX2FsdG1vZGVfZGVzYyAqZGVzYykKPiAgewo+IC0Jc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFs dDsKPiArCXVuc2lnbmVkIGludCBpZCA9IGFsdG1vZGVfaWRfZ2V0KHBhcmVudCk7Cj4gKwlib29s IGlzX3BvcnQgPSBpc190eXBlY19wb3J0KHBhcmVudCk7Cj4gKwlzdHJ1Y3QgYWx0bW9kZSAqYWx0 Owo+ICAJaW50IHJldDsKPiAgCj4gIAlhbHQgPSBremFsbG9jKHNpemVvZigqYWx0KSwgR0ZQX0tF Uk5FTCk7Cj4gIAlpZiAoIWFsdCkKPiAgCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAgCj4g LQlhbHQtPnN2aWQgPSBkZXNjLT5zdmlkOwo+IC0JYWx0LT5tb2RlID0gZGVzYy0+bW9kZTsKPiAt CWFsdC0+dmRvID0gZGVzYy0+dmRvOwo+ICsJYWx0LT5hZGV2LnN2aWQgPSBkZXNjLT5zdmlkOwo+ ICsJYWx0LT5hZGV2Lm1vZGUgPSBkZXNjLT5tb2RlOwo+ICsJYWx0LT5hZGV2LnZkbyA9IGRlc2Mt PnZkbzsKPiAgCWFsdC0+cm9sZXMgPSBkZXNjLT5yb2xlczsKPiArCWFsdC0+aWQgPSBpZDsKPiAg Cj4gIAlhbHQtPmF0dHJzWzBdID0gJmRldl9hdHRyX3Zkby5hdHRyOwo+ICAJYWx0LT5hdHRyc1sx XSA9ICZkZXZfYXR0cl9kZXNjcmlwdGlvbi5hdHRyOwo+ICAJYWx0LT5hdHRyc1syXSA9ICZkZXZf YXR0cl9hY3RpdmUuYXR0cjsKPiAgCj4gLQlpZiAoaXNfdHlwZWNfcG9ydChwYXJlbnQpKQo+ICsJ aWYgKGlzX3BvcnQpIHsKPiAgCQlhbHQtPmF0dHJzWzNdID0gJmRldl9hdHRyX3N1cHBvcnRlZF9y b2xlcy5hdHRyOwo+ICsJCWFsdC0+YWRldi5hY3RpdmUgPSB0cnVlOyAvKiBFbmFibGVkIGJ5IGRl ZmF1bHQgKi8KPiArCX0KPiAgCj4gIAlzcHJpbnRmKGFsdC0+Z3JvdXBfbmFtZSwgIm1vZGUlZCIs IGRlc2MtPm1vZGUpOwo+ICAJYWx0LT5ncm91cC5uYW1lID0gYWx0LT5ncm91cF9uYW1lOwo+ICAJ YWx0LT5ncm91cC5hdHRycyA9IGFsdC0+YXR0cnM7Cj4gIAlhbHQtPmdyb3Vwc1swXSA9ICZhbHQt Pmdyb3VwOwo+ICAKPiAtCWFsdC0+ZGV2LnBhcmVudCA9IHBhcmVudDsKPiAtCWFsdC0+ZGV2Lmdy b3VwcyA9IGFsdC0+Z3JvdXBzOwo+IC0JYWx0LT5kZXYudHlwZSA9ICZ0eXBlY19hbHRtb2RlX2Rl dl90eXBlOwo+IC0JZGV2X3NldF9uYW1lKCZhbHQtPmRldiwgIiVzLSUwNHg6JXUiLCBkZXZfbmFt ZShwYXJlbnQpLAo+IC0JCSAgICAgYWx0LT5zdmlkLCBhbHQtPm1vZGUpOwo+ICsJYWx0LT5hZGV2 LmRldi5wYXJlbnQgPSBwYXJlbnQ7Cj4gKwlhbHQtPmFkZXYuZGV2Lmdyb3VwcyA9IGFsdC0+Z3Jv dXBzOwo+ICsJYWx0LT5hZGV2LmRldi50eXBlID0gJnR5cGVjX2FsdG1vZGVfZGV2X3R5cGU7Cj4g KwlkZXZfc2V0X25hbWUoJmFsdC0+YWRldi5kZXYsICIlcy4ldSIsIGRldl9uYW1lKHBhcmVudCks IGlkKTsKPiArCj4gKwkvKiBMaW5rIHBhcnRuZXJzIGFuZCBwbHVncyB3aXRoIHRoZSBwb3J0cyAq Lwo+ICsJaWYgKGlzX3BvcnQpCj4gKwkJQkxPQ0tJTkdfSU5JVF9OT1RJRklFUl9IRUFEKCZhbHQt Pm5oKTsKPiArCWVsc2UKPiArCQl0eXBlY19hbHRtb2RlX2dldF9wYXJ0bmVyKGFsdCk7Cj4gIAo+ IC0JcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZhbHQtPmRldik7Cj4gKwkvKiBUaGUgcGFydG5lcnMg YXJlIGJpbmQgdG8gZHJpdmVycyAqLwo+ICsJaWYgKGlzX3R5cGVjX3BhcnRuZXIocGFyZW50KSkK PiArCQlhbHQtPmFkZXYuZGV2LmJ1cyA9ICZ0eXBlY19idXM7Cj4gKwo+ICsJcmV0ID0gZGV2aWNl X3JlZ2lzdGVyKCZhbHQtPmFkZXYuZGV2KTsKPiAgCWlmIChyZXQpIHsKPiAgCQlkZXZfZXJyKHBh cmVudCwgImZhaWxlZCB0byByZWdpc3RlciBhbHRlcm5hdGUgbW9kZSAoJWQpXG4iLAo+ICAJCQly ZXQpOwo+IC0JCXB1dF9kZXZpY2UoJmFsdC0+ZGV2KTsKPiArCQlwdXRfZGV2aWNlKCZhbHQtPmFk ZXYuZGV2KTsKPiAgCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICAJfQo+ICAKPiAtCXJldHVybiBh bHQ7Cj4gKwlyZXR1cm4gJmFsdC0+YWRldjsKPiAgfQo+ICAKPiAgLyoqCj4gICAqIHR5cGVjX3Vu cmVnaXN0ZXJfYWx0bW9kZSAtIFVucmVnaXN0ZXIgQWx0ZXJuYXRlIE1vZGUKPiAtICogQGFsdDog VGhlIGFsdGVybmF0ZSBtb2RlIHRvIGJlIHVucmVnaXN0ZXJlZAo+ICsgKiBAYWRldjogVGhlIGFs dGVybmF0ZSBtb2RlIHRvIGJlIHVucmVnaXN0ZXJlZAo+ICAgKgo+ICAgKiBVbnJlZ2lzdGVyIGRl dmljZSBjcmVhdGVkIHdpdGggdHlwZWNfcGFydG5lcl9yZWdpc3Rlcl9hbHRtb2RlKCksCj4gICAq IHR5cGVjX3BsdWdfcmVnaXN0ZXJfYWx0bW9kZSgpIG9yIHR5cGVjX3BvcnRfcmVnaXN0ZXJfYWx0 bW9kZSgpLgo+ICAgKi8KPiAtdm9pZCB0eXBlY191bnJlZ2lzdGVyX2FsdG1vZGUoc3RydWN0IHR5 cGVjX2FsdG1vZGUgKmFsdCkKPiArdm9pZCB0eXBlY191bnJlZ2lzdGVyX2FsdG1vZGUoc3RydWN0 IHR5cGVjX2FsdG1vZGUgKmFkZXYpCj4gIHsKPiAtCWlmICghSVNfRVJSX09SX05VTEwoYWx0KSkK PiAtCQlkZXZpY2VfdW5yZWdpc3RlcigmYWx0LT5kZXYpOwo+ICsJaWYgKCFJU19FUlJfT1JfTlVM TChhZGV2KSkKPiArCQlkZXZpY2VfdW5yZWdpc3RlcigmYWRldi0+ZGV2KTsKPiAgfQo+ICBFWFBP UlRfU1lNQk9MX0dQTCh0eXBlY191bnJlZ2lzdGVyX2FsdG1vZGUpOwo+ICAKPiBAQCAtNDAxLDYg KzU3Nyw3IEBAIHN0YXRpYyB2b2lkIHR5cGVjX3BhcnRuZXJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNl ICpkZXYpCj4gIHsKPiAgCXN0cnVjdCB0eXBlY19wYXJ0bmVyICpwYXJ0bmVyID0gdG9fdHlwZWNf cGFydG5lcihkZXYpOwo+ICAKPiArCWlkYV9kZXN0cm95KCZwYXJ0bmVyLT5tb2RlX2lkcyk7Cj4g IAlrZnJlZShwYXJ0bmVyKTsKPiAgfQo+ICAKPiBAQCAtNDY2LDYgKzY0Myw3IEBAIHN0cnVjdCB0 eXBlY19wYXJ0bmVyICp0eXBlY19yZWdpc3Rlcl9wYXJ0bmVyKHN0cnVjdCB0eXBlY19wb3J0ICpw b3J0LAo+ICAJaWYgKCFwYXJ0bmVyKQo+ICAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICAK PiArCWlkYV9pbml0KCZwYXJ0bmVyLT5tb2RlX2lkcyk7Cj4gIAlwYXJ0bmVyLT51c2JfcGQgPSBk ZXNjLT51c2JfcGQ7Cj4gIAlwYXJ0bmVyLT5hY2Nlc3NvcnkgPSBkZXNjLT5hY2Nlc3Nvcnk7Cj4g IAo+IEBAIC01MTQsNiArNjkyLDcgQEAgc3RhdGljIHZvaWQgdHlwZWNfcGx1Z19yZWxlYXNlKHN0 cnVjdCBkZXZpY2UgKmRldikKPiAgewo+ICAJc3RydWN0IHR5cGVjX3BsdWcgKnBsdWcgPSB0b190 eXBlY19wbHVnKGRldik7Cj4gIAo+ICsJaWRhX2Rlc3Ryb3koJnBsdWctPm1vZGVfaWRzKTsKPiAg CWtmcmVlKHBsdWcpOwo+ICB9Cj4gIAo+IEBAIC01NjYsNiArNzQ1LDcgQEAgc3RydWN0IHR5cGVj X3BsdWcgKnR5cGVjX3JlZ2lzdGVyX3BsdWcoc3RydWN0IHR5cGVjX2NhYmxlICpjYWJsZSwKPiAg Cj4gIAlzcHJpbnRmKG5hbWUsICJwbHVnJWQiLCBkZXNjLT5pbmRleCk7Cj4gIAo+ICsJaWRhX2lu aXQoJnBsdWctPm1vZGVfaWRzKTsKPiAgCXBsdWctPmluZGV4ID0gZGVzYy0+aW5kZXg7Cj4gIAlw bHVnLT5kZXYuY2xhc3MgPSB0eXBlY19jbGFzczsKPiAgCXBsdWctPmRldi5wYXJlbnQgPSAmY2Fi bGUtPmRldjsKPiBAQCAtMTA4MCwxMiArMTI2MCwxMyBAQCBzdGF0aWMgdm9pZCB0eXBlY19yZWxl YXNlKHN0cnVjdCBkZXZpY2UgKmRldikKPiAgCXN0cnVjdCB0eXBlY19wb3J0ICpwb3J0ID0gdG9f dHlwZWNfcG9ydChkZXYpOwo+ICAKPiAgCWlkYV9zaW1wbGVfcmVtb3ZlKCZ0eXBlY19pbmRleF9p ZGEsIHBvcnQtPmlkKTsKPiArCWlkYV9kZXN0cm95KCZwb3J0LT5tb2RlX2lkcyk7Cj4gIAl0eXBl Y19zd2l0Y2hfcHV0KHBvcnQtPnN3KTsKPiAgCXR5cGVjX211eF9wdXQocG9ydC0+bXV4KTsKPiAg CWtmcmVlKHBvcnQpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBl IHR5cGVjX3BvcnRfZGV2X3R5cGUgPSB7Cj4gK2NvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB0eXBl Y19wb3J0X2Rldl90eXBlID0gewo+ICAJLm5hbWUgPSAidHlwZWNfcG9ydCIsCj4gIAkuZ3JvdXBz ID0gdHlwZWNfZ3JvdXBzLAo+ICAJLnVldmVudCA9IHR5cGVjX3VldmVudCwKPiBAQCAtMTIzOCw2 ICsxNDE5LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwodHlwZWNfc2V0X21vZGUpOwo+ICAgKiB0eXBl Y19wb3J0X3JlZ2lzdGVyX2FsdG1vZGUgLSBSZWdpc3RlciBVU0IgVHlwZS1DIFBvcnQgQWx0ZXJu YXRlIE1vZGUKPiAgICogQHBvcnQ6IFVTQiBUeXBlLUMgUG9ydCB0aGF0IHN1cHBvcnRzIHRoZSBh bHRlcm5hdGUgbW9kZQo+ICAgKiBAZGVzYzogRGVzY3JpcHRpb24gb2YgdGhlIGFsdGVybmF0ZSBt b2RlCj4gKyAqIEBvcHM6IFBvcnQgc3BlY2lmaWMgb3BlcmF0aW9ucyBmb3IgdGhlIGFsdGVybmF0 ZSBtb2RlCj4gKyAqIEBkcnZkYXRhOiBQcml2YXRlIHBvaW50ZXIgdG8gZHJpdmVyIHNwZWNpZmlj IGluZm8KPiAgICoKPiAgICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gcmVnaXN0ZXIgYW4gYWx0 ZXJuYXRlIG1vZGUgdGhhdCBAcG9ydCBpcyBjYXBhYmxlIG9mCj4gICAqIHN1cHBvcnRpbmcuCj4g QEAgLTEzMjIsMTAgKzE1MDUsMTIgQEAgc3RydWN0IHR5cGVjX3BvcnQgKnR5cGVjX3JlZ2lzdGVy X3BvcnQoc3RydWN0IGRldmljZSAqcGFyZW50LAo+ICAJCWJyZWFrOwo+ICAJfQo+ICAKPiArCWlk YV9pbml0KCZwb3J0LT5tb2RlX2lkcyk7Cj4gKwltdXRleF9pbml0KCZwb3J0LT5wb3J0X3R5cGVf bG9jayk7Cj4gKwo+ICAJcG9ydC0+aWQgPSBpZDsKPiAgCXBvcnQtPmNhcCA9IGNhcDsKPiAgCXBv cnQtPnBvcnRfdHlwZSA9IGNhcC0+dHlwZTsKPiAtCW11dGV4X2luaXQoJnBvcnQtPnBvcnRfdHlw ZV9sb2NrKTsKPiAgCXBvcnQtPnByZWZlcl9yb2xlID0gY2FwLT5wcmVmZXJfcm9sZTsKPiAgCj4g IAlwb3J0LT5kZXYuY2xhc3MgPSB0eXBlY19jbGFzczsKPiBAQCAtMTM2OSw4ICsxNTU0LDE5IEBA IEVYUE9SVF9TWU1CT0xfR1BMKHR5cGVjX3VucmVnaXN0ZXJfcG9ydCk7Cj4gIAo+ICBzdGF0aWMg aW50IF9faW5pdCB0eXBlY19pbml0KHZvaWQpCj4gIHsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0 ID0gYnVzX3JlZ2lzdGVyKCZ0eXBlY19idXMpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0 Owo+ICsKPiAgCXR5cGVjX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAidHlwZWMi KTsKPiAtCXJldHVybiBQVFJfRVJSX09SX1pFUk8odHlwZWNfY2xhc3MpOwo+ICsJaWYgKElTX0VS Uih0eXBlY19jbGFzcykpIHsKPiArCQlidXNfdW5yZWdpc3RlcigmdHlwZWNfYnVzKTsKPiArCQly ZXR1cm4gUFRSX0VSUih0eXBlY19jbGFzcyk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gIH0K PiAgc3Vic3lzX2luaXRjYWxsKHR5cGVjX2luaXQpOwo+ICAKPiBAQCAtMTM3OCw2ICsxNTc0LDcg QEAgc3RhdGljIHZvaWQgX19leGl0IHR5cGVjX2V4aXQodm9pZCkKPiAgewo+ICAJY2xhc3NfZGVz dHJveSh0eXBlY19jbGFzcyk7Cj4gIAlpZGFfZGVzdHJveSgmdHlwZWNfaW5kZXhfaWRhKTsKPiAr CWJ1c191bnJlZ2lzdGVyKCZ0eXBlY19idXMpOwo+ICB9Cj4gIG1vZHVsZV9leGl0KHR5cGVjX2V4 aXQpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaCBi L2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKPiBpbmRleCA0OGZiMmI0M2MzNWEuLjE3 YzFhOTEyZjUyNCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5o Cj4gKysrIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAo+IEBAIC03MzMsNCArNzMz LDE5IEBAIHN0cnVjdCB0Yl9zZXJ2aWNlX2lkIHsKPiAgI2RlZmluZSBUQlNWQ19NQVRDSF9QUk9U T0NPTF9WRVJTSU9OCTB4MDAwNAo+ICAjZGVmaW5lIFRCU1ZDX01BVENIX1BST1RPQ09MX1JFVklT SU9OCTB4MDAwOAo+ICAKPiArLyogVVNCIFR5cGUtQyBBbHRlcm5hdGUgTW9kZXMgKi8KPiArCj4g KyNkZWZpbmUgVFlQRUNfQU5ZX01PREUJMHg3Cj4gKwo+ICsvKioKPiArICogc3RydWN0IHR5cGVj X2RldmljZV9pZCAtIFVTQiBUeXBlLUMgYWx0ZXJuYXRlIG1vZGUgaWRlbnRpZmllcnMKPiArICog QHN2aWQ6IFN0YW5kYXJkIG9yIFZlbmRvciBJRAo+ICsgKiBAbW9kZTogTW9kZSBpbmRleAo+ICsg Ki8KPiArc3RydWN0IHR5cGVjX2RldmljZV9pZCB7Cj4gKwlfX3UxNiBzdmlkOwo+ICsJX191OCBt b2RlOwo+ICsJa2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGE7Cj4gK307Cj4gKwo+ICAjZW5kaWYg LyogTElOVVhfTU9EX0RFVklDRVRBQkxFX0ggKi8KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51 eC91c2IvdHlwZWMuaCBiL2luY2x1ZGUvbGludXgvdXNiL3R5cGVjLmgKPiBpbmRleCAyNzhiNmI0 MmM3ZWEuLmExOWFhM2RiNDI3MiAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi90eXBl Yy5oCj4gKysrIGIvaW5jbHVkZS9saW51eC91c2IvdHlwZWMuaAo+IEBAIC00LDE2ICs0LDEzIEBA Cj4gICNkZWZpbmUgX19MSU5VWF9VU0JfVFlQRUNfSAo+ICAKPiAgI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+Cj4gLQo+IC0vKiBYWFg6IE9uY2Ugd2UgaGF2ZSBhIGhlYWRlciBmb3IgVVNCIFBvd2Vy IERlbGl2ZXJ5LCB0aGlzIGJlbG9uZ3MgdGhlcmUgKi8KPiAtI2RlZmluZSBBTFRNT0RFX01BWF9N T0RFUwk2Cj4gKyNpbmNsdWRlIDxsaW51eC91c2IvdHlwZWNfYWx0bW9kZS5oPgo+ICAKPiAgLyog VVNCIFR5cGUtQyBTcGVjaWZpY2F0aW9uIHJlbGVhc2VzICovCj4gICNkZWZpbmUgVVNCX1RZUEVD X1JFVl8xXzAJMHgxMDAgLyogMS4wICovCj4gICNkZWZpbmUgVVNCX1RZUEVDX1JFVl8xXzEJMHgx MTAgLyogMS4xICovCj4gICNkZWZpbmUgVVNCX1RZUEVDX1JFVl8xXzIJMHgxMjAgLyogMS4yICov Cj4gIAo+IC1zdHJ1Y3QgdHlwZWNfYWx0bW9kZTsKPiAgc3RydWN0IHR5cGVjX3BhcnRuZXI7Cj4g IHN0cnVjdCB0eXBlY19jYWJsZTsKPiAgc3RydWN0IHR5cGVjX3BsdWc7Cj4gQEAgLTEwNyw3ICsx MDQsNyBAQCBzdHJ1Y3QgdHlwZWNfYWx0bW9kZV9kZXNjIHsKPiAgCXU4CQkJbW9kZTsKPiAgCXUz MgkJCXZkbzsKPiAgCS8qIE9ubHkgdXNlZCB3aXRoIHBvcnRzICovCj4gLQllbnVtIHR5cGVjX3Bv cnRfdHlwZQlyb2xlczsKPiArCWVudW0gdHlwZWNfcG9ydF9kYXRhCXJvbGVzOwo+ICB9Owo+ICAK PiAgc3RydWN0IHR5cGVjX2FsdG1vZGUKPiBAQCAtMTE4LDcgKzExNSw4IEBAIHN0cnVjdCB0eXBl Y19hbHRtb2RlCj4gIAkJCSAgICAgY29uc3Qgc3RydWN0IHR5cGVjX2FsdG1vZGVfZGVzYyAqZGVz Yyk7Cj4gIHN0cnVjdCB0eXBlY19hbHRtb2RlCj4gICp0eXBlY19wb3J0X3JlZ2lzdGVyX2FsdG1v ZGUoc3RydWN0IHR5cGVjX3BvcnQgKnBvcnQsCj4gLQkJCSAgICAgY29uc3Qgc3RydWN0IHR5cGVj X2FsdG1vZGVfZGVzYyAqZGVzYyk7Cj4gKwkJCSAgICBjb25zdCBzdHJ1Y3QgdHlwZWNfYWx0bW9k ZV9kZXNjICpkZXNjKTsKPiArCj4gIHZvaWQgdHlwZWNfdW5yZWdpc3Rlcl9hbHRtb2RlKHN0cnVj dCB0eXBlY19hbHRtb2RlICphbHRtb2RlKTsKPiAgCj4gIHN0cnVjdCB0eXBlY19wb3J0ICp0eXBl Y19hbHRtb2RlMnBvcnQoc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFsdCk7Cj4gQEAgLTIxMywxMiAr MjExLDEwIEBAIHN0cnVjdCB0eXBlY19jYXBhYmlsaXR5IHsKPiAgCQkJCSAgZW51bSB0eXBlY19y b2xlKTsKPiAgCWludAkJKCp2Y29ubl9zZXQpKGNvbnN0IHN0cnVjdCB0eXBlY19jYXBhYmlsaXR5 ICosCj4gIAkJCQkgICAgIGVudW0gdHlwZWNfcm9sZSk7Cj4gLQo+IC0JaW50CQkoKmFjdGl2YXRl X21vZGUpKGNvbnN0IHN0cnVjdCB0eXBlY19jYXBhYmlsaXR5ICosCj4gLQkJCQkJIGludCBtb2Rl LCBpbnQgYWN0aXZhdGUpOwo+ICAJaW50CQkoKnBvcnRfdHlwZV9zZXQpKGNvbnN0IHN0cnVjdCB0 eXBlY19jYXBhYmlsaXR5ICosCj4gLQkJCQkJZW51bSB0eXBlY19wb3J0X3R5cGUpOwo+ICsJCQkJ CSBlbnVtIHR5cGVjX3BvcnRfdHlwZSk7Cj4gIAo+ICsJaW50CQkoKmFjdGl2YXRlX21vZGUpKHN0 cnVjdCB0eXBlY19hbHRtb2RlICphbHQsIGludCBhY3RpdmUpOwo+ICB9Owo+ICAKPiAgLyogU3Bl Y2lmaWMgdG8gdHJ5X3JvbGUoKS4gSW5kaWNhdGVzIHRoZSB1c2VyIHdhbnQncyB0byBjbGVhciB0 aGUgcHJlZmVyZW5jZS4gKi8KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdHlwZWNf YWx0bW9kZS5oIGIvaW5jbHVkZS9saW51eC91c2IvdHlwZWNfYWx0bW9kZS5oCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmJjNzY1MzUyYTNjOAo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9pbmNsdWRlL2xpbnV4L3VzYi90eXBlY19hbHRtb2RlLmgKPiBAQCAtMCww ICsxLDEzNiBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ICsK PiArI2lmbmRlZiBfX1VTQl9UWVBFQ19BTFRNT0RFX0gKPiArI2RlZmluZSBfX1VTQl9UWVBFQ19B TFRNT0RFX0gKPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxp bnV4L21vZF9kZXZpY2V0YWJsZS5oPgo+ICsKPiArI2RlZmluZSBNT0RFX0RJU0NPVkVSWV9NQVgJ Ngo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCB0eXBlY19hbHRtb2RlIC0gVVNCIFR5cGUtQyBhbHRl cm5hdGUgbW9kZSBkZXZpY2UKPiArICogQGRldjogRHJpdmVyIG1vZGVsJ3MgdmlldyBvZiB0aGlz IGRldmljZQo+ICsgKiBAc3ZpZDogU3RhbmRhcmQgb3IgVmVuZG9yIElEIChTVklEKSBvZiB0aGUg YWx0ZXJuYXRlIG1vZGUKPiArICogQG1vZGU6IEluZGV4IG9mIHRoZSBNb2RlCj4gKyAqIEB2ZG86 IFZETyByZXR1cm5lZCBieSBEaXNjb3ZlciBNb2RlcyBVU0IgUEQgY29tbWFuZAo+ICsgKiBAZGVz YzogT3B0aW9uYWwgaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIG1vZGUKPiArICog QGFjdGl2ZTogVGVsbHMgaGFzIHRoZSBtb2RlIGJlZW4gZW50ZXJlZCBvciBub3QKPiArICovCj4g K3N0cnVjdCB0eXBlY19hbHRtb2RlIHsKPiArCXN0cnVjdCBkZXZpY2UJCWRldjsKPiArCXUxNgkJ CXN2aWQ7Cj4gKwlpbnQJCQltb2RlOwo+ICsJdTMyCQkJdmRvOwo+ICsJY2hhcgkJCSpkZXNjOwo+ ICsJYm9vbAkJCWFjdGl2ZTsKPiArfSBfX3BhY2tlZDsKPiArCj4gKyNkZWZpbmUgdG9fdHlwZWNf YWx0bW9kZShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHR5cGVjX2FsdG1vZGUsIGRldikKPiAr Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB0eXBlY19hbHRtb2RlX3NldF9kcnZkYXRhKHN0cnVjdCB0 eXBlY19hbHRtb2RlICphbHRtb2RlLAo+ICsJCQkJCSAgICAgdm9pZCAqZGF0YSkKPiArewo+ICsJ ZGV2X3NldF9kcnZkYXRhKCZhbHRtb2RlLT5kZXYsIGRhdGEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW5saW5lIHZvaWQgKnR5cGVjX2FsdG1vZGVfZ2V0X2RydmRhdGEoc3RydWN0IHR5cGVjX2FsdG1v ZGUgKmFsdG1vZGUpCj4gK3sKPiArCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoJmFsdG1vZGUtPmRl dik7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgdHlwZWNfYWx0bW9kZV9vcHMgLSBBbHRl cm5hdGUgbW9kZSBzcGVjaWZpYyBvcGVyYXRpb25zIHZlY3Rvcgo+ICsgKiBAZW50ZXI6IE9wZXJh dGlvbnMgdG8gYmUgZXhlY3V0ZWQgd2l0aCBFbnRlciBNb2RlIENvbW1hbmQKPiArICogQGV4aXQ6 IE9wZXJhdGlvbnMgdG8gYmUgZXhlY3V0ZWQgd2l0aCBFeGl0IE1vZGUgQ29tbWFuZAo+ICsgKiBA YXR0ZW50aW9uOiBDYWxsYmFjayBmb3IgQXR0ZW50aW9uIENvbW1hbmQKPiArICogQHZkbTogQ2Fs bGJhY2sgZm9yIFNWSUQgc3BlY2lmaWMgY29tbWFuZHMKPiArICogQG5vdGlmeTogQ29tbXVuaWNh dGlvbiBjaGFubmVsIGZvciBwbGF0Zm9ybSBhbmQgdGhlIGFsdGVybmF0ZSBtb2RlCj4gKyAqLwo+ ICtzdHJ1Y3QgdHlwZWNfYWx0bW9kZV9vcHMgewo+ICsJdm9pZCAoKmVudGVyKShzdHJ1Y3QgdHlw ZWNfYWx0bW9kZSAqYWx0bW9kZSk7Cj4gKwl2b2lkICgqZXhpdCkoc3RydWN0IHR5cGVjX2FsdG1v ZGUgKmFsdG1vZGUpOwo+ICsJdm9pZCAoKmF0dGVudGlvbikoc3RydWN0IHR5cGVjX2FsdG1vZGUg KmFsdG1vZGUsIGNvbnN0IHUzMiB2ZG8pOwo+ICsJaW50ICgqdmRtKShzdHJ1Y3QgdHlwZWNfYWx0 bW9kZSAqYWx0bW9kZSwgY29uc3QgdTMyIGhkciwKPiArCQkgICBjb25zdCB1MzIgKnZkbywgaW50 IGNudCk7Cj4gKwlpbnQgKCpub3RpZnkpKHN0cnVjdCB0eXBlY19hbHRtb2RlICphbHRtb2RlLCB1 bnNpZ25lZCBsb25nIGNvbmYsCj4gKwkJICAgICAgdm9pZCAqZGF0YSk7Cj4gK307Cj4gKwo+ICt2 b2lkIHR5cGVjX2FsdG1vZGVfcmVnaXN0ZXJfb3BzKHN0cnVjdCB0eXBlY19hbHRtb2RlICphbHRt b2RlLAo+ICsJCQkJY29uc3Qgc3RydWN0IHR5cGVjX2FsdG1vZGVfb3BzICpvcHMpOwo+ICsKPiAr aW50IHR5cGVjX2FsdG1vZGVfZW50ZXIoc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFsdG1vZGUpOwo+ ICtpbnQgdHlwZWNfYWx0bW9kZV9leGl0KHN0cnVjdCB0eXBlY19hbHRtb2RlICphbHRtb2RlKTsK PiArdm9pZCB0eXBlY19hbHRtb2RlX2F0dGVudGlvbihzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0 bW9kZSwgY29uc3QgdTMyIHZkbyk7Cj4gK2ludCB0eXBlY19hbHRtb2RlX3ZkbShzdHJ1Y3QgdHlw ZWNfYWx0bW9kZSAqYWx0bW9kZSwKPiArCQkgICAgICBjb25zdCB1MzIgaGVhZGVyLCBjb25zdCB1 MzIgKnZkbywgaW50IGNvdW50KTsKPiAraW50IHR5cGVjX2FsdG1vZGVfbm90aWZ5KHN0cnVjdCB0 eXBlY19hbHRtb2RlICphbHRtb2RlLCB1bnNpZ25lZCBsb25nIGNvbmYsCj4gKwkJCSB2b2lkICpk YXRhKTsKPiArCj4gKy8qIFJldHVybiB2YWx1ZXMgZm9yIHR5cGVfYWx0bW9kZV92ZG0oKSAqLwo+ ICsjZGVmaW5lIFZETV9ET05FCQkwIC8qIERvbid0IGNhcmUgKi8KPiArI2RlZmluZSBWRE1fT0sJ CQkxIC8qIFN1aXRzIG1lICovCj4gKwo+ICsvKgo+ICsgKiBUaGVzZSBhcmUgdGhlIHBpbiBzdGF0 ZXMgKFVTQiwgU2FmZSBhbmQgQWx0IE1vZGUpIGFuZCBhY2Nlc3NvcnkgbW9kZXMgKEF1ZGlvCj4g KyAqIGFuZCBEZWJ1ZykgZGVmaW5lZCBpbiBVU0IgVHlwZS1DIFNwZWNpZmljYXRpb24uIFNWSUQg c3BlY2lmaWMgcGluIHN0YXRlcyBhcmUKPiArICogZXhwZWN0ZWQgdG8gZm9sbG93IGFuZCBzdGFy dCBmcm9tIHRoZSB2YWx1ZSBUWVBFQ19TVEFURV9NT0RBTC4KPiArICoKPiArICogUG9ydCBkcml2 ZXJzIHNob3VsZCB1c2UgVFlQRUNfU1RBVEVfQVVESU8gYW5kIFRZUEVDX1NUQVRFX0RFQlVHIGFz IHRoZQo+ICsgKiBvcGVyYXRpb24gdmFsdWUgZm9yIHR5cGVjX3NldF9tb2RlKCkgd2hlbiBhY2Nl c3NvcnkgbW9kZXMgYXJlIGluIHVzZS4KPiArICoKPiArICogTk9URTogdHlwZWNfYWx0bW9kZV9u b3RpZnkoKSBkb2VzIG5vdCBhY2NlcHQgdmFsdWVzIHNtYWxsZXIgdGhlbgo+ICsgKiBUWVBFQ19T VEFURV9NT0RBTC4gVVNCIFR5cGUtQyBidXMgd2lsbCBmb2xsb3cgVVNCIFR5cGUtQyBTcGVjaWZp Y2F0aW9uIHdpdGgKPiArICogVFlQRUNfU1RBVEVfVVNCIGFuZCBUWVBFQ19TVEFURV9TQUZFLgo+ ICsgKi8KPiArZW51bSB7Cj4gKwlUWVBFQ19TVEFURV9VU0IsCS8qIFVTQiBPcGVyYXRpb24gKi8K PiArCVRZUEVDX1NUQVRFX0FVRElPLAkvKiBBdWRpbyBBY2Nlc3NvcnkgKi8KPiArCVRZUEVDX1NU QVRFX0RFQlVHLAkvKiBEZWJ1ZyBBY2Nlc3NvcnkgKi8KPiArCVRZUEVDX1NUQVRFX1NBRkUsCS8q IFVTQiBTYWZlIFN0YXRlICovCj4gKwlUWVBFQ19TVEFURV9NT0RBTCwJLyogQWx0ZXJuYXRlIE1v ZGVzICovCj4gK307Cj4gKwo+ICsjZGVmaW5lIFRZUEVDX01PREFMX1NUQVRFKF9zdGF0ZV8pCSgo X3N0YXRlXykgKyBUWVBFQ19TVEFURV9NT0RBTCkKPiArCj4gK3N0cnVjdCB0eXBlY19hbHRtb2Rl ICp0eXBlY19hbHRtb2RlX2dldF9wbHVnKHN0cnVjdCB0eXBlY19hbHRtb2RlICphbHRtb2RlLAo+ ICsJCQkJCSAgICAgaW50IGluZGV4KTsKPiArdm9pZCB0eXBlY19hbHRtb2RlX3B1dF9wbHVnKHN0 cnVjdCB0eXBlY19hbHRtb2RlICpwbHVnKTsKPiArCj4gK2Jvb2wgdHlwZWNfYWx0bW9kZV91ZnBf Y2FwYWJsZShzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0bW9kZSk7Cj4gK2Jvb2wgdHlwZWNfYWx0 bW9kZV9kZnBfY2FwYWJsZShzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0bW9kZSk7Cj4gK3N0cnVj dCB0eXBlY19hbHRtb2RlICp0eXBlY19tYXRjaF9hbHRtb2RlKHN0cnVjdCB0eXBlY19hbHRtb2Rl ICoqYWx0bW9kZXMsCj4gKwkJCQkJICBzaXplX3QgbiwgdTE2IHN2aWQsIHU4IG1vZGUpOwo+ICsK PiArLyoqCj4gKyAqIHN0cnVjdCB0eXBlY19hbHRtb2RlX2RyaXZlciAtIFVTQiBUeXBlLUMgYWx0 ZXJuYXRlIG1vZGUgZGV2aWNlIGRyaXZlcgo+ICsgKiBAaWRfdGFibGU6IE51bGwgdGVybWluYXRl ZCBhcnJheSBvZiBTVklEcwo+ICsgKiBAcHJvYmU6IENhbGxiYWNrIGZvciBkZXZpY2UgYmluZGlu Zwo+ICsgKsKgQHJlbW92ZTogQ2FsbGJhY2sgZm9yIGRldmljZSB1bmJpbmRpbmcKPiArICogQGRy aXZlcjogRGV2aWNlIGRyaXZlciBtb2RlbCBkcml2ZXIKPiArICoKPiArICogVGhlc2UgZHJpdmVy cyB3aWxsIGJlIGJpbmQgdG8gdGhlIHBhcnRuZXIgYWx0ZXJuYXRlIG1vZGUgZGV2aWNlcy4gVGhl eSB3aWxsCj4gKyAqIGhhbmRsZSBhbGwgU1ZJRCBzcGVjaWZpYyBjb21tdW5pY2F0aW9uLgo+ICsg Ki8KPiArc3RydWN0IHR5cGVjX2FsdG1vZGVfZHJpdmVyIHsKPiArCWNvbnN0IHN0cnVjdCB0eXBl Y19kZXZpY2VfaWQgKmlkX3RhYmxlOwo+ICsJaW50ICgqcHJvYmUpKHN0cnVjdCB0eXBlY19hbHRt b2RlICphbHRtb2RlLCB1MzIgcG9ydF92ZG8pOwo+ICsJdm9pZCAoKnJlbW92ZSkoc3RydWN0IHR5 cGVjX2FsdG1vZGUgKmFsdG1vZGUpOwo+ICsJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOwo+ ICt9Owo+ICsKPiArI2RlZmluZSB0b19hbHRtb2RlX2RyaXZlcihkKSBjb250YWluZXJfb2YoZCwg c3RydWN0IHR5cGVjX2FsdG1vZGVfZHJpdmVyLCBcCj4gKwkJCQkJICBkcml2ZXIpCj4gKwo+ICsj ZGVmaW5lIHR5cGVjX2FsdG1vZGVfcmVnaXN0ZXJfZHJpdmVyKGRydikgXAo+ICsJCV9fdHlwZWNf YWx0bW9kZV9yZWdpc3Rlcl9kcml2ZXIoZHJ2LCBUSElTX01PRFVMRSkKPiAraW50IF9fdHlwZWNf YWx0bW9kZV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHR5cGVjX2FsdG1vZGVfZHJpdmVyICpkcnYs Cj4gKwkJCQkgICAgc3RydWN0IG1vZHVsZSAqbW9kdWxlKTsKPiArdm9pZCB0eXBlY19hbHRtb2Rl X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB0eXBlY19hbHRtb2RlX2RyaXZlciAqZHJ2KTsKPiAr Cj4gKyNkZWZpbmUgbW9kdWxlX3R5cGVjX2FsdG1vZGVfZHJpdmVyKF9fdHlwZWNfYWx0bW9kZV9k cml2ZXIpIFwKPiArCW1vZHVsZV9kcml2ZXIoX190eXBlY19hbHRtb2RlX2RyaXZlciwgdHlwZWNf YWx0bW9kZV9yZWdpc3Rlcl9kcml2ZXIsIFwKPiArCQkgICAgICB0eXBlY19hbHRtb2RlX3VucmVn aXN0ZXJfZHJpdmVyKQo+ICsKPiArI2VuZGlmIC8qIF9fVVNCX1RZUEVDX0FMVE1PREVfSCAqLwo+ IGRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9kZXZpY2V0YWJsZS1vZmZzZXRzLmMgYi9zY3JpcHRz L21vZC9kZXZpY2V0YWJsZS1vZmZzZXRzLmMKPiBpbmRleCA5ZmFkNmFmZTRjNDEuLmM0OGM3ZjU2 YWU2NCAxMDA2NDQKPiAtLS0gYS9zY3JpcHRzL21vZC9kZXZpY2V0YWJsZS1vZmZzZXRzLmMKPiAr KysgYi9zY3JpcHRzL21vZC9kZXZpY2V0YWJsZS1vZmZzZXRzLmMKPiBAQCAtMjE4LDUgKzIxOCw5 IEBAIGludCBtYWluKHZvaWQpCj4gIAlERVZJRF9GSUVMRCh0Yl9zZXJ2aWNlX2lkLCBwcm90b2Nv bF92ZXJzaW9uKTsKPiAgCURFVklEX0ZJRUxEKHRiX3NlcnZpY2VfaWQsIHByb3RvY29sX3Jldmlz aW9uKTsKPiAgCj4gKwlERVZJRCh0eXBlY19kZXZpY2VfaWQpOwo+ICsJREVWSURfRklFTEQodHlw ZWNfZGV2aWNlX2lkLCBzdmlkKTsKPiArCURFVklEX0ZJRUxEKHR5cGVjX2RldmljZV9pZCwgbW9k ZSk7Cj4gKwo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvZmls ZTJhbGlhcy5jIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCj4gaW5kZXggYjliZWVhYTQ2OTVi Li5hOGFmYmE4MzY0MDkgMTAwNjQ0Cj4gLS0tIGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCj4g KysrIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCj4gQEAgLTEzNDEsNiArMTM0MSwxOSBAQCBz dGF0aWMgaW50IGRvX3Ric3ZjX2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpzeW12 YWwsIGNoYXIgKmFsaWFzKQo+ICB9Cj4gIEFERF9UT19ERVZUQUJMRSgidGJzdmMiLCB0Yl9zZXJ2 aWNlX2lkLCBkb190YnN2Y19lbnRyeSk7Cj4gIAo+ICsvKiBMb29rcyBsaWtlOiB0eXBlYzppZE5t TiAqLwo+ICtzdGF0aWMgaW50IGRvX3R5cGVjX2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2 b2lkICpzeW12YWwsIGNoYXIgKmFsaWFzKQo+ICt7Cj4gKwlERUZfRklFTEQoc3ltdmFsLCB0eXBl Y19kZXZpY2VfaWQsIHN2aWQpOwo+ICsJREVGX0ZJRUxEKHN5bXZhbCwgdHlwZWNfZGV2aWNlX2lk LCBtb2RlKTsKPiArCj4gKwlzcHJpbnRmKGFsaWFzLCAidHlwZWM6aWQlMDRYIiwgc3ZpZCk7Cj4g KwlBREQoYWxpYXMsICJtIiwgbW9kZSAhPSBUWVBFQ19BTllfTU9ERSwgbW9kZSk7Cj4gKwo+ICsJ cmV0dXJuIDE7Cj4gK30KPiArQUREX1RPX0RFVlRBQkxFKCJ0eXBlYyIsIHR5cGVjX2RldmljZV9p ZCwgZG9fdHlwZWNfZW50cnkpOwo+ICsKPiAgLyogRG9lcyBuYW1lbGVuIGJ5dGVzIG9mIG5hbWUg ZXhhY3RseSBtYXRjaCB0aGUgc3ltYm9sPyAqLwo+ICBzdGF0aWMgYm9vbCBzeW1faXMoY29uc3Qg Y2hhciAqbmFtZSwgdW5zaWduZWQgbmFtZWxlbiwgY29uc3QgY2hhciAqc3ltYm9sKQo+ICB7Cj4g LS0gCj4gMi4xNi4xCj4KLS0tClRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRo ZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC11c2IiIGluCnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0 byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnCk1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6 Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbAo=