From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dongwon Kim Subject: [RFC PATCH v2 2/9] hyper_dmabuf: architecture specification and reference guide Date: Tue, 13 Feb 2018 17:50:01 -0800 Message-ID: <20180214015008.9513-3-dongwon.kim__33110.1877535277$1518573060$gmane$org@intel.com> References: <20180214015008.9513-1-dongwon.kim@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1elmEH-00076u-Hf for xen-devel@lists.xenproject.org; Wed, 14 Feb 2018 01:51:25 +0000 In-Reply-To: <20180214015008.9513-1-dongwon.kim@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-kernel@vger.kernel.org, linaro-mm-sig@lists.linaro.org, xen-devel@lists.xenproject.org Cc: sumit.semwal@linaro.org, dongwon.kim@intel.com, dri-devel@lists.freedesktop.org, mateuszx.potrola@intel.com List-Id: xen-devel@lists.xenproject.org UmVmZXJlbmNlIGRvY3VtZW50IGZvciBoeXBlcl9ETUFCVUYgZHJpdmVyCgpEb2N1bWVudGF0aW9u L2h5cGVyLWRtYWJ1Zi1zaGFyaW5nLnR4dAoKU2lnbmVkLW9mZi1ieTogRG9uZ3dvbiBLaW0gPGRv bmd3b24ua2ltQGludGVsLmNvbT4KLS0tCiBEb2N1bWVudGF0aW9uL2h5cGVyLWRtYWJ1Zi1zaGFy aW5nLnR4dCB8IDczNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBj aGFuZ2VkLCA3MzQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRp b24vaHlwZXItZG1hYnVmLXNoYXJpbmcudHh0CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9o eXBlci1kbWFidWYtc2hhcmluZy50eHQgYi9Eb2N1bWVudGF0aW9uL2h5cGVyLWRtYWJ1Zi1zaGFy aW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjkyOGU0MTE5 MzFlMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHlwZXItZG1hYnVmLXNoYXJp bmcudHh0CkBAIC0wLDAgKzEsNzM0IEBACitMaW51eCBIeXBlciBETUFCVUYgRHJpdmVyCisKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorU2VjdGlvbiAxLiBPdmVydmlldworLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisKK0h5cGVyX0RNQUJVRiBkcml2ZXIgaXMgYSBMaW51eCBkZXZpY2UgZHJpdmVyIHJ1 bm5pbmcgb24gbXVsdGlwbGUgVmlydHVhbAorYWNoaW5lcyAoVk1zKSwgd2hpY2ggZXhwYW5kcyBE TUEtQlVGIHNoYXJpbmcgY2FwYWJpbGl0eSB0byB0aGUgVk0gZW52aXJvbm1lbnQKK3doZXJlIG11 bHRpcGxlIGRpZmZlcmVudCBPUyBpbnN0YW5jZXMgbmVlZCB0byBzaGFyZSBzYW1lIHBoeXNpY2Fs IGRhdGEgd2l0aG91dAorZGF0YS1jb3B5IGFjcm9zcyBWTXMuCisKK1RvIHNoYXJlIGEgRE1BX0JV RiBhY3Jvc3MgVk1zLCBhbiBpbnN0YW5jZSBvZiB0aGUgSHlwZXJfRE1BQlVGIGRydiBvbiB0aGUK K2V4cG9ydGluZyBWTSAoc28gY2FsbGVkLCDigJxleHBvcnRlcuKAnSkgaW1wb3J0cyBhIGxvY2Fs IERNQV9CVUYgZnJvbSB0aGUgb3JpZ2luYWwKK3Byb2R1Y2VyIG9mIHRoZSBidWZmZXIsIHRoZW4g cmUtZXhwb3J0cyBpdCB3aXRoIGFuIHVuaXF1ZSBJRCwgaHlwZXJfZG1hYnVmX2lkCitmb3IgdGhl IGJ1ZmZlciB0byB0aGUgaW1wb3J0aW5nIFZNIChzbyBjYWxsZWQsIOKAnGltcG9ydGVy4oCdKS4K KworQW5vdGhlciBpbnN0YW5jZSBvZiB0aGUgSHlwZXJfRE1BQlVGIGRyaXZlciBvbiBpbXBvcnRl ciByZWdpc3RlcnMKK2EgaHlwZXJfZG1hYnVmX2lkIHRvZ2V0aGVyIHdpdGggcmVmZXJlbmNlIGlu Zm9ybWF0aW9uIGZvciB0aGUgc2hhcmVkIHBoeXNpY2FsCitwYWdlcyBhc3NvY2lhdGVkIHdpdGgg dGhlIERNQV9CVUYgdG8gaXRzIGRhdGFiYXNlIHdoZW4gdGhlIGV4cG9ydCBoYXBwZW5zLgorCitU aGUgYWN0dWFsIG1hcHBpbmcgb2YgdGhlIERNQV9CVUYgb24gdGhlIGltcG9ydGVy4oCZcyBzaWRl IGlzIGRvbmUgYnkKK3RoZSBIeXBlcl9ETUFCVUYgZHJpdmVyIHdoZW4gdXNlciBzcGFjZSBpc3N1 ZXMgdGhlIElPQ1RMIGNvbW1hbmQgdG8gYWNjZXNzCit0aGUgc2hhcmVkIERNQV9CVUYuIFRoZSBI eXBlcl9ETUFCVUYgZHJpdmVyIHdvcmtzIGFzIGJvdGggYW4gaW1wb3J0aW5nIGFuZAorZXhwb3J0 aW5nIGRyaXZlciBhcyBpcywgdGhhdCBpcywgbm8gc3BlY2lhbCBjb25maWd1cmF0aW9uIGlzIHJl cXVpcmVkLgorQ29uc2VxdWVudGx5LCBvbmx5IGEgc2luZ2xlIG1vZHVsZSBwZXIgVk0gaXMgbmVl ZGVkIHRvIGVuYWJsZSBjcm9zcy1WTSBETUFfQlVGCitleGNoYW5nZS4KKworLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCitTZWN0aW9uIDIuIEFyY2hpdGVjdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisKKzEuIEh5cGVyX0RNQUJVRiBJRAorCitoeXBlcl9kbWFidWZfaWQgaXMgYSBnbG9iYWwgaGFu ZGxlIGZvciBzaGFyZWQgRE1BIEJVRnMsIHdoaWNoIGlzIGNvbXBhdGlibGUKK2Fjcm9zcyBWTXMu IEl0IGlzIGEga2V5IHVzZWQgYnkgdGhlIGltcG9ydGVyIHRvIHJldHJpZXZlIGluZm9ybWF0aW9u IGFib3V0CitzaGFyZWQgS2VybmVsIHBhZ2VzIGJlaGluZCB0aGUgRE1BX0JVRiBzdHJ1Y3R1cmUg ZnJvbSB0aGUgSU1QT1JUIGxpc3QuIFdoZW4KK2EgRE1BX0JVRiBpcyBleHBvcnRlZCB0byBhbm90 aGVyIGRvbWFpbiwgaXRzIGh5cGVyX2RtYWJ1Zl9pZCBhbmQgTUVUQSBkYXRhCithcmUgYWxzbyBr ZXB0IGluIHRoZSBFWFBPUlQgbGlzdCBieSB0aGUgZXhwb3J0ZXIgZm9yIGZ1cnRoZXIgc3luY2hy b25pemF0aW9uCitvZiBjb250cm9sIG92ZXIgdGhlIERNQV9CVUYuCisKK2h5cGVyX2RtYWJ1Zl9p ZCBpcyDigJx0YXJnZXRlZOKAnSwgbWVhbmluZyBpdCBpcyB2YWxpZCBvbmx5IGluIGV4cG9ydGlu ZyAob3duZXIgb2YKK3RoZSBidWZmZXIpIGFuZCBpbXBvcnRpbmcgVk1zLCB3aGVyZSB0aGUgY29y cmVzcG9uZGluZyBoeXBlcl9kbWFidWZfaWQgaXMKK3N0b3JlZCBpbiB0aGVpciBkYXRhYmFzZSAo RVhQT1JUIGFuZCBJTVBPUlQgbGlzdHMpLgorCitBIHVzZXItc3BhY2UgYXBwbGljYXRpb24gc3Bl Y2lmaWVzIHRoZSB0YXJnZXRlZCBWTSBpZCBpbiB0aGUgdXNlciBwYXJhbWV0ZXIKK3doZW4gaXQg Y2FsbHMgdGhlIElPQ1RMIGNvbW1hbmQgdG8gZXhwb3J0IHNoYXJlZCBETUFfQlVGIHRvIGFub3Ro ZXIgVk0uCisKK2h5cGVyX2RtYWJ1Zl9pZF90IGlzIGEgZGF0YSB0eXBlIGZvciBoeXBlcl9kbWFi dWZfaWQuIEl0IGlzIGRlZmluZWQgYXMgMTYtYnl0ZQorZGF0YSBzdHJ1Y3R1cmUsIGFuZCBpdCBj b250YWlucyBpZCBhbmQgcm5nX2tleVszXSBhcyBlbGVtZW50cyBmb3IKK3RoZSBzdHJ1Y3R1cmUu CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgaW50IGlkOworICAgICAgICBpbnQgcm5nX2tl eVszXTsgLyogMTJieXRlcyBsb25nIHJhbmRvbSBudW1iZXIgKi8KK30gaHlwZXJfZG1hYnVmX2lk X3Q7CisKK1RoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBoeXBlcl9kbWFidWZfaWQgc3RydWN0dXJl LCBpbnQgaWQgaXMgY29tYmluZWQgZGF0YSBvZgorYSBjb3VudCBudW1iZXIgZ2VuZXJhdGVkIGJ5 IHRoZSBkcml2ZXIgcnVubmluZyBvbiB0aGUgZXhwb3J0ZXIgYW5kCit0aGUgZXhwb3J0ZXLigJlz IElELiBUaGUgVk3igJlzIElEIGlzIGEgb25lIGJ5dGUgdmFsdWUgYW5kIGxvY2F0ZWQgYXQgdGhl IGZpZWxk4oCZcworU0IgaW4gaW50IGlkLiBUaGUgcmVtYWluaW5nIHRocmVlIGJ5dGVzIGluIGlu dCBpZCBhcmUgcmVzZXJ2ZWQgZm9yIGEgY291bnQKK251bWJlci4KKworSG93ZXZlciwgdGhlcmUg aXMgYSBsaW1pdCByZWxhdGVkIHRvIHRoaXMgY291bnQgbnVtYmVyLCB3aGljaCBpcyAxMDAwLgor VGhlcmVmb3JlLCBvbmx5IGxpdHRsZSBtb3JlIHRoYW4gYSBieXRlIHN0YXJ0aW5nIGZyb20gdGhl IExTQiBpcyBhY3R1YWxseSB1c2VkCitmb3Igc3RvcmluZyB0aGlzIGNvdW50IG51bWJlci4KKwor I2RlZmluZSBIWVBFUl9ETUFCVUZfSURfQ1JFQVRFKGRvbWlkLCBpZCkgXAorICAgICAgICAoKCgo ZG9taWQpICYgMHhGRikgPDwgMjQpIHwgKChpZCkgJiAweEZGRkZGRikpCisKK1RoaXMgbGltaXQg b24gdGhlIGNvdW50IG51bWJlciBkaXJlY3RseSBtZWFucyB0aGUgbWF4aW11bSBudW1iZXIgb2Yg RE1BIEJVRnMKK3RoYXQgIGNhbiBiZSBzaGFyZWQgc2ltdWx0YW5lb3VzbHkgYnkgb25lIFZNLiBU aGUgc2Vjb25kIGVsZW1lbnQgb2YKK2h5cGVyX2RtYWJ1Zl9pZCwgdGhhdCBpcyBpbnQgcm5nX2tl eVszXSwgaXMgYW4gYXJyYXkgb2YgdGhyZWUgaW50ZWdlcnMuIFRoZXNlCitudW1iZXJzIGFyZSBn ZW5lcmF0ZWQgYnkgTGludXjigJlzIG5hdGl2ZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbWVj aGFuaXNtLgorVGhpcyBmaWVsZCBpcyBhZGRlZCB0byBlbmhhbmNlIHRoZSBzZWN1cml0eSBvZiB0 aGUgSHlwZXIgRE1BQlVGIGRyaXZlciBieQorbWF4aW1pemluZyB0aGUgZW50cm9weSBvZiBoeXBl cl9kbWFidWZfaWQgKHRoYXQgaXMsIHByZXZlbnRpbmcgaXQgZnJvbSBiZWluZworZ3Vlc3NlZCBi eSBhIHNlY3VyaXR5IGF0dGFja2VyKS4KKworT25jZSBETUFfQlVGIGlzIG5vIGxvbmdlciBzaGFy ZWQsIHRoZSBoeXBlcl9kbWFidWZfaWQgYXNzb2NpYXRlZCB3aXRoCit0aGUgRE1BX0JVRiBpcyBy ZWxlYXNlZCwgYnV0IHRoZSBjb3VudCBudW1iZXIgaW4gaHlwZXJfZG1hYnVmX2lkIGlzIHNhdmVk IGluCit0aGUgSUQgbGlzdCBmb3IgcmV1c2UuIEhvd2V2ZXIsIHJhbmRvbSBrZXlzIHN0b3JlZCBp biBpbnQgcm5nX2tleVszXSBhcmUgbm90CityZXVzZWQuIEluc3RlYWQsIHRob3NlIGtleXMgYXJl IGFsd2F5cyBmaWxsZWQgd2l0aCBmcmVzaGx5IGdlbmVyYXRlZCByYW5kb20KK2tleXMgZm9yIHNl Y3VyaXR5LgorCisyLiBJT0NUTHMKKworYS4gSU9DVExfSFlQRVJfRE1BQlVGX1RYX0NIX1NFVFVQ CisKK1RoaXMgdHlwZSBvZiBJT0NUTCBpcyB1c2VkIGZvciBpbml0aWFsaXphdGlvbiBvZiBhIG9u ZS1kaXJlY3Rpb25hbCB0cmFuc21pdAorY29tbXVuaWNhdGlvbiBjaGFubmVsIHdpdGggYSByZW1v dGUgZG9tYWluLgorCitUaGUgdXNlciBzcGFjZSBhcmd1bWVudCBmb3IgdGhpcyB0eXBlIG9mIElP Q1RMIGlzIGRlZmluZWQgYXM6CisKK3N0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfdHhfY2hfc2V0 dXAgeworICAgIC8qIElOIHBhcmFtZXRlcnMgKi8KKyAgICAvKiBSZW1vdGUgZG9tYWluIGlkICov CisgICAgaW50IHJlbW90ZV9kb21haW47Cit9OworCitiLiBJT0NUTF9IWVBFUl9ETUFCVUZfUlhf Q0hfU0VUVVAKKworVGhpcyB0eXBlIG9mIElPQ1RMIGlzIHVzZWQgZm9yIGluaXRpYWxpemF0aW9u IG9mIGEgb25lLWRpcmVjdGlvbmFsIHJlY2VpdmUKK2NvbW11bmljYXRpb24gY2hhbm5lbCB3aXRo IGEgcmVtb3RlIGRvbWFpbi4KKworVGhlIHVzZXIgc3BhY2UgYXJndW1lbnQgZm9yIHRoaXMgdHlw ZSBvZiBJT0NUTCBpcyBkZWZpbmVkIGFzOgorCitzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX3J4 X2NoX3NldHVwIHsKKyAgICAvKiBJTiBwYXJhbWV0ZXJzICovCisgICAgLyogU291cmNlIGRvbWFp biBpZCAqLworICAgIGludCBzb3VyY2VfZG9tYWluOworfTsKKworYy4gSU9DVExfSFlQRVJfRE1B QlVGX0VYUE9SVF9SRU1PVEUKKworVGhpcyB0eXBlIG9mIElPQ1RMIGlzIHVzZWQgdG8gZXhwb3J0 IGEgRE1BIEJVRiB0byBhbm90aGVyIFZNLiBXaGVuIGEgdXNlcgorc3BhY2UgYXBwbGljYXRpb24g bWFrZXMgdGhpcyBjYWxsIHRvIHRoZSBkcml2ZXIsIGl0IGV4dHJhY3RzIEtlcm5lbCBwYWdlcwor YXNzb2NpYXRlZCB3aXRoIHRoZSBETUFfQlVGLCB0aGVuIG1ha2VzIHRob3NlIHNoYXJlZCB3aXRo IHRoZSBpbXBvcnRpbmcgVk0uCisKK0FsbCByZWZlcmVuY2UgaW5mb3JtYXRpb24gZm9yIHRoaXMg c2hhcmVkIHBhZ2VzIGFuZCBoeXBlcl9kbWFidWZfaWQgaXMKK2NyZWF0ZWQsIHRoZW4gcGFzc2Vk IHRvIHRoZSBpbXBvcnRpbmcgZG9tYWluIHRocm91Z2ggYSBjb21tdW5pY2F0aW9ucworY2hhbm5l bCBmb3Igc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uLiBJbiB0aGUgbWVhbnRpbWUsIHRoZSBoeXBl cl9kbWFidWZfaWQKK2ZvciB0aGUgc2hhcmVkIERNQV9CVUYgaXMgYWxzbyByZXR1cm5lZCB0byB1 c2VyLXNwYWNlIGFwcGxpY2F0aW9uLgorCitUaGlzIElPQ1RMIGNhbiBhY2NlcHQgYSByZWZlcmVu Y2UgdG8g4oCcdXNlci1kZWZpbmVk4oCdIGRhdGEgYXMgd2VsbCBhcyBhIEZECitmb3IgdGhlIERN QSBCVUYuIFRoaXMgcHJpdmF0ZSBkYXRhIGlzIHRoZW4gYXR0YWNoZWQgdG8gdGhlIERNQSBCVUYg YW5kCitleHBvcnRlZCB0b2dldGhlciB3aXRoIGl0LgorCitNb3JlIGRldGFpbHMgcmVnYXJkaW5n IHRoaXMgcHJpdmF0ZSBkYXRhIGNhbiBiZSBmb3VuZCBpbiBjaGFwdGVyIGZvcgor4oCcSHlwZXJf RE1BQlVGIFByaXZhdGUgRGF0YeKAnS4KKworVGhlIHVzZXIgc3BhY2UgYXJndW1lbnQgZm9yIHRo aXMgdHlwZSBvZiBJT0NUTCBpcyBkZWZpbmVkIGFzOgorCitzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1h YnVmX2V4cG9ydF9yZW1vdGUgeworICAgIC8qIElOIHBhcmFtZXRlcnMgKi8KKyAgICAvKiBETUEg YnVmIGZkIHRvIGJlIGV4cG9ydGVkICovCisgICAgaW50IGRtYWJ1Zl9mZDsKKyAgICAvKiBEb21h aW4gaWQgdG8gd2hpY2ggYnVmZmVyIHNob3VsZCBiZSBleHBvcnRlZCAqLworICAgIGludCByZW1v dGVfZG9tYWluOworICAgIC8qIGV4cG9ydGVkIGRtYSBidWYgaWQgKi8KKyAgICBoeXBlcl9kbWFi dWZfaWRfdCBoaWQ7CisgICAgLyogc2l6ZSBvZiBwcml2YXRlIGRhdGEgKi8KKyAgICBpbnQgc3pf cHJpdjsKKyAgICAvKiBwdHIgdG8gdGhlIHByaXZhdGUgZGF0YSBmb3IgSHlwZXJfRE1BQlVGICov CisgICAgY2hhciAqcHJpdjsKK307CisKK2QuIElPQ1RMX0hZUEVSX0RNQUJVRl9FWFBPUlRfRkQK KworVGhlIGltcG9ydGluZyBWTSB1c2VzIHRoaXMgSU9DVEwgdG8gaW1wb3J0IGFuZCByZS1leHBv cnQgYSBzaGFyZWQgRE1BX0JVRgorbG9jYWxseSB0byB0aGUgZW5kLWNvbnN1bWVyIHVzaW5nIHRo ZSBzdGFuZGFyZCBMaW51eCBETUFfQlVGIGZyYW1ld29yay4KK1Vwb24gSU9DVEwgY2FsbCwgdGhl IEh5cGVyX0RNQUJVRiBkcml2ZXIgZmluZHMgdGhlIHJlZmVyZW5jZSBpbmZvcm1hdGlvbgorb2Yg dGhlIHNoYXJlZCBETUFfQlVGIHdpdGggdGhlIGdpdmVuIGh5cGVyX2RtYWJ1Zl9pZCwgdGhlbiBt YXBzIGFsbCBzaGFyZWQKK3BhZ2VzIGluIGl0cyBvd24gS2VybmVsIHNwYWNlLiBUaGUgZHJpdmVy IHRoZW4gY29uc3RydWN0cyBhIHNjYXR0ZXItZ2F0aGVyCitsaXN0IHdpdGggdGhvc2UgbWFwcGVk IHBhZ2VzIGFuZCBjcmVhdGVzIGEgYnJhbmQtbmV3IERNQV9CVUYgd2l0aCB0aGUgbGlzdCwKK3do aWNoIGlzIGV2ZW50dWFsbHkgZXhwb3J0ZWQgd2l0aCBhIGZpbGUgZGVzY3JpcHRvciB0byB0aGUg bG9jYWwgY29uc3VtZXIuCisKK1RoZSB1c2VyIHNwYWNlIGFyZ3VtZW50IGZvciB0aGlzIHR5cGUg b2YgSU9DVEwgaXMgZGVmaW5lZCBhczoKKworc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl9leHBv cnRfZmQgeworICAgIC8qIElOIHBhcmFtZXRlcnMgKi8KKyAgICAvKiBoeXBlciBkbWFidWYgaWQg dG8gYmUgaW1wb3J0ZWQgKi8KKyAgICBpbnQgaHlwZXJfZG1hYnVmX2lkOworICAgIC8qIGZsYWdz ICovCisgICAgaW50IGZsYWdzOworICAgIC8qIE9VVCBwYXJhbWV0ZXJzICovCisgICAgLyogZXhw b3J0ZWQgZG1hIGJ1ZiBmZCAqLworICAgIGludCBmZDsKK307CisKK2UuIElPQ1RMX0hZUEVSX0RN QUJVRl9VTkVYUE9SVAorCitUaGlzIHR5cGUgb2YgSU9DVEwgaXMgdXNlZCB3aGVuIGl0IGlzIG5l Y2Vzc2FyeSB0byB0ZXJtaW5hdGUgdGhlIGN1cnJlbnQKK3NoYXJpbmcgb2YgYSBETUFfQlVGLiBX aGVuIGNhbGxlZCwgdGhlIGRyaXZlciBmaXJzdCBjaGVja3MgaWYgdGhlcmUgYXJlIGFueQorY29u c3VtZXJzIGFjdGl2ZWx5IHVzaW5nIHRoZSBETUFfQlVGLiBUaGVuLCBpdCB1bmV4cG9ydHMgaXQg aWYgaXQgaXMgbm90CittYXBwZWQgb3IgdXNlZCBieSBhbnkgY29uc3VtZXJzLiBPdGhlcndpc2Us IGl0IHBvc3Rwb25lcyB1bmV4cG9ydGluZywgYnV0CittYWtlcyB0aGUgYnVmZmVyIGludmFsaWQg dG8gcHJldmVudCBhbnkgZnVydGhlciBpbXBvcnQgb2YgdGhlIHNhbWUgRE1BX0JVRi4KK0RNQV9C VUYgaXMgY29tcGxldGVseSB1bmV4cG9ydGVkIGFmdGVyIHRoZSBsYXN0IGNvbnN1bWVyIHJlbGVh c2VzIGl0LgorCivigJ1VbmV4cG9ydOKAnSBtZWFucyByZW1vdmluZyBhbGwgcmVmZXJlbmNlIGlu Zm9ybWF0aW9uIGFib3V0IHRoZSBETUFfQlVGIGZyb20gdGhlCitMSVNUcyBhbmQgbWFrZSBhbGwg cGFnZXMgcHJpdmF0ZSBhZ2Fpbi4KKworVGhlIHVzZXIgc3BhY2UgYXJndW1lbnQgZm9yIHRoaXMg dHlwZSBvZiBJT0NUTCBpcyBkZWZpbmVkIGFzOgorCitzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVm X3VuZXhwb3J0IHsKKyAgICAvKiBJTiBwYXJhbWV0ZXJzICovCisgICAgLyogaHlwZXIgZG1hYnVm IGlkIHRvIGJlIHVuZXhwb3J0ZWQgKi8KKyAgICBpbnQgaHlwZXJfZG1hYnVmX2lkOworICAgIC8q IGRlbGF5IGluIG1zIGJ5IHdoaWNoIHVuZXhwb3J0IHByb2Nlc3Npbmcgd2lsbCBiZSBwb3N0cG9u ZWQgKi8KKyAgICBpbnQgZGVsYXlfbXM7CisgICAgLyogT1VUIHBhcmFtZXRlcnMgKi8KKyAgICAv KiBTdGF0dXMgb2YgcmVxdWVzdCAqLworICAgIGludCBzdGF0dXM7Cit9OworCitmLiBJT0NUTF9I WVBFUl9ETUFCVUZfUVVFUlkKKworVGhpcyBJT0NUTCBpcyB1c2VkIHRvIHJldHJpZXZlIHNwZWNp ZmljIGluZm9ybWF0aW9uIGFib3V0IGEgRE1BX0JVRiB0aGF0CitpcyBiZWluZyBzaGFyZWQuCisK K1RoZSB1c2VyIHNwYWNlIGFyZ3VtZW50IGZvciB0aGlzIHR5cGUgb2YgSU9DVEwgaXMgZGVmaW5l ZCBhczoKKworc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl9xdWVyeSB7CisgICAgLyogaW4gcGFy YW1ldGVycyAqLworICAgIC8qIGh5cGVyIGRtYWJ1ZiBpZCB0byBiZSBxdWVyaWVkICovCisgICAg aW50IGh5cGVyX2RtYWJ1Zl9pZDsKKyAgICAvKiBpdGVtIHRvIGJlIHF1ZXJpZWQgKi8KKyAgICBp bnQgaXRlbTsKKyAgICAvKiBPVVQgcGFyYW1ldGVycyAqLworICAgIC8qIG91dHB1dCBvZiBxdWVy eSAqLworICAgIC8qIGluZm8gY2FuIGJlIGVpdGhlciB2YWx1ZSBvciByZWZlcmVuY2UgKi8KKyAg ICB1bnNpZ25lZCBsb25nIGluZm87Cit9OworCis8QXZhaWxhYmxlIFF1ZXJpZXM+CisKK0hZUEVS X0RNQUJVRl9RVUVSWV9UWVBFCisgLSBSZXR1cm4gdGhlIHR5cGUgb2YgRE1BX0JVRiBmcm9tIHRo ZSBjdXJyZW50IGRvbWFpbiwgRXhwb3J0ZWQgb3IgSW1wb3J0ZWQuCisKK0hZUEVSX0RNQUJVRl9R VUVSWV9FWFBPUlRFUgorIC0gUmV0dXJuIHRoZSBleHBvcnRpbmcgZG9tYWlu4oCZcyBJRCBvZiBh IHNoYXJlZCBETUFfQlVGLgorCitIWVBFUl9ETUFCVUZfUVVFUllfSU1QT1JURVIKKyAtIFJldHVy biB0aGUgaW1wb3J0aW5nIGRvbWFpbuKAmXMgSUQgb2YgYSBzaGFyZWQgRE1BX0JVRi4KKworSFlQ RVJfRE1BQlVGX1FVRVJZX1NJWkUKKyAtIFJldHVybiB0aGUgc2l6ZSBvZiBhIHNoYXJlZCBETUFf QlVGIGluIGJ5dGVzLgorCitIWVBFUl9ETUFCVUZfUVVFUllfQlVTWQorIC0gUmV0dXJuIOKAmHRy dWXigJkgaWYgYSBzaGFyZWQgRE1BX0JVRiBpcyBjdXJyZW50bHkgdXNlZAorICAgKG1hcHBlZCBi eSB0aGUgZW5kLWNvbnN1bWVyKS4KKworSFlQRVJfRE1BQlVGX1FVRVJZX1VORVhQT1JURUQKKyAt IFJldHVybiDigJh0cnVl4oCZIGlmIGEgc2hhcmVkIERNQV9CVUYgaXMgbm90IHZhbGlkIGFueW1v cmUKKyAgIChzbyBpdCBkb2VzIG5vdCBhbGxvdyBhIG5ldyBjb25zdW1lciB0byBtYXAgaXQpLgor CitIWVBFUl9ETUFCVUZfUVVFUllfREVMQVlFRF9VTkVYUE9SVEVECisgLSBSZXR1cm4g4oCYdHJ1 ZeKAmSBpZiBhIHNoYXJlZCBETUFfQlVGIGlzIHNjaGVkdWxlZCB0byBiZSB1bmV4cG9ydGVkCisg ICAoYnV0IGlzIHN0aWxsIHZhbGlkKSB3aXRoaW4gYSBmaXhlZCB0aW1lLgorCitIWVBFUl9ETUFC VUZfUVVFUllfUFJJVl9JTkZPCisgLSBSZXR1cm4g4oCYcHJpdmF0ZeKAmSBkYXRhIGF0dGFjaGVk IHRvIHNoYXJlZCBETUFfQlVGIHRvIHRoZSB1c2VyIHNwYWNlLgorICAg4oCYdW5zaWduZWQgbG9u ZyBpbmZv4oCZIGlzIHRoZSB1c2VyIHNwYWNlIHBvaW50ZXIgZm9yIHRoZSBidWZmZXIsIHdoZXJl CisgICBwcml2YXRlIGRhdGEgd2lsbCBiZSBjb3BpZWQgdG8uCisKK0hZUEVSX0RNQUJVRl9RVUVS WV9QUklWX0lORk9fU0laRQorIC0gUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBwcml2YXRlIGRhdGEg YXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBETUFfQlVGLgorCiszLiBFdmVudCBQb2xsaW5nCisKK0V2 ZW50LXBvbGxpbmcgY2FuIGJlIGVuYWJsZWQgb3B0aW9uYWxseSBieSBzZWxlY3RpbmcgdGhlIEtl cm5lbCBjb25maWcgb3B0aW9uLAorRW5hYmxlIGV2ZW50LWdlbmVyYXRpb24gYW5kIHBvbGxpbmcg b3BlcmF0aW9uIHVuZGVyIHhlbi9oeXBlcnZpc29yIGluIEtlcm5lbOKAmXMKK21lbnVjb25maWcu IFRoZSBldmVudC1wb2xsaW5nIG1lY2hhbmlzbSBpbmNsdWRlcyB0aGUgZ2VuZXJhdGlvbiBvZgor YW4gaW1wb3J0LWV2ZW50LCBhZGRpbmcgaXQgdG8gdGhlIGV2ZW50LXF1ZXVlIGFuZCBwcm92aWRp bmcgYSBub3RpZmljYXRpb24gdG8KK3RoZSBhcHBsaWNhdGlvbiBzbyB0aGF0IGl0IGNhbiByZXRy aWV2ZSB0aGUgZXZlbnQgZGF0YSBmcm9tIHRoZSBxdWV1ZS4KKworRm9yIHRoaXMgbWVjaGFuaXNt LCDigJxQb2xs4oCdIGFuZCDigJxSZWFk4oCdIG9wZXJhdGlvbnMgYXJlIGFkZGVkIHRvIHRoZSBI eXBlcl9ETUFCVUYKK2RyaXZlci4gQSB1c2VyIGFwcGxpY2F0aW9uIHRoYXQgcG9sbHMgdGhlIGRy aXZlciBnb2VzIGludG8gYSBzbGVlcCBzdGF0ZSB1bnRpbAordGhlcmUgaXMgYSBuZXcgZXZlbnQg YWRkZWQgdG8gdGhlIHF1ZXVlLiBBbiBhcHBsaWNhdGlvbiB1c2VzIOKAnFJlYWTigJ0gdG8gcmV0 cmlldmUKK2V2ZW50IGRhdGEgZnJvbSB0aGUgZXZlbnQgcXVldWUuIEV2ZW50IGRhdGEgY29udGFp bnMgdGhlIGh5cGVyX2RtYWJ1Zl9pZCBhbmQKK3RoZSBwcml2YXRlIGRhdGEgb2YgdGhlIGJ1ZmZl ciB0aGF0IGhhcyBiZWVuIHJlY2VpdmVkIGJ5IHRoZSBpbXBvcnRlci4KKworRm9yIG1vcmUgaW5m b3JtYXRpb24gb24gcHJpdmF0ZSBkYXRhLCByZWZlciB0byBTZWN0aW9uIDMuNSkuCitVc2luZyB0 aGlzIG1ldGhvZCwgaXQgaXMgcG9zc2libGUgdG8gbG93ZXIgdGhlIHJpc2sgb2YgdGhlIGh5cGVy X2RtYWJ1Zl9pZCBhbmQKK290aGVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2hh cmVkIGJ1ZmZlciAoZm9yIGV4YW1wbGUsIG1ldGEtZGF0YQorZm9yIHNoYXJlZCBpbWFnZXMpIGJl aW5nIGxlYWtlZCB3aGlsZSBiZWluZyB0cmFuc2ZlcnJlZCB0byB0aGUgaW1wb3J0ZXIgYmVjYXVz ZQorYWxsIG9mIHRoaXMgZGF0YSBpcyBzaGFyZWQgYXMg4oCccHJpdmF0ZSBpbmZv4oCdIGF0IHRo ZSBkcml2ZXIgbGV2ZWwuIEhvd2V2ZXIsCitwbGVhc2Ugbm90ZSB0aGVyZSBzaG91bGQgYmUgYSB3 YXkgZm9yIHRoZSBpbXBvcnRlciB0byBmaW5kIHRoZSBjb3JyZWN0IERNQV9CVUYKK2luIHRoaXMg Y2FzZSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBIeXBlcl9ETUFCVUZzIGJlaW5nIHNoYXJlZCBz aW11bHRhbmVvdXNseS4KK0ZvciBleGFtcGxlLCB0aGUgc3VyZmFjZSBuYW1lIG9yIHRoZSBzdXJm YWNlIElEIG9mIGEgc3BlY2lmaWMgcmVuZGVyaW5nIHN1cmZhY2UKK25lZWRzIHRvIGJlIHNlbnQg dG8gdGhlIGltcG9ydGVyIGluIGFkdmFuY2UgYmVmb3JlIGl0IGlzIGV4cG9ydGVkIGluIGEgc3Vy ZmFjZS0KK3NoYXJpbmcgdXNlLWNhc2UuCisKK0VhY2ggZXZlbnQgZGF0YSBnaXZlbiB0byB0aGUg dXNlci1zcGFjZSBjb25zaXN0cyBvZiBhIGhlYWRlciBhbmQgdGhlIHByaXZhdGUKK2luZm9ybWF0 aW9uIG9mIHRoZSBidWZmZXIuIFRoZSBkYXRhIHR5cGUgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgor CitzdHJ1Y3QgaHlwZXJfZG1hYnVmX2V2ZW50X2hkciB7CisgICAgICAgIGludCBldmVudF90eXBl OyAvKiBvbmUgdHlwZSBvbmx5IGZvciBub3cgLSBuZXcgaW1wb3J0ICovCisgICAgICAgIGh5cGVy X2RtYWJ1Zl9pZF90IGhpZDsgLyogaHlwZXJfZG1hYnVmX2lkIG9mIHNwZWNpZmljIGh5cGVyX2Rt YWJ1ZiAqLworICAgICAgICBpbnQgc2l6ZTsgLyogc2l6ZSBvZiBkYXRhICovCit9OworCitzdHJ1 Y3QgaHlwZXJfZG1hYnVmX2V2ZW50X2RhdGEgeworICAgICAgICBzdHJ1Y3QgaHlwZXJfZG1hYnVm X2V2ZW50X2hkciBoZHI7CisgICAgICAgIHZvaWQgKmRhdGE7IC8qIHByaXZhdGUgZGF0YSAqLwor fTsKKworNC4gSHlwZXJfRE1BQlVGIFByaXZhdGUgRGF0YQorCitFYWNoIEh5cGVyX0RNQUJVRiBj YW4gY29tZSB3aXRoIHByaXZhdGUgZGF0YSwgdGhlIHNpemUgb2Ygd2hpY2ggY2FuIGJlIHVwIHRv CitBWF9TSVpFX1BSSVZfREFUQSAoY3VycmVudGx5IDE5MiBieXRlKS4gVGhpcyBwcml2YXRlIGRh dGEgaXMganVzdCBhIGNodW5rIG9mCitwbGFpbiBkYXRhIGF0dGFjaGVkIHRvIGV2ZXJ5IEh5cGVy X0RNQUJVRi4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBzeW5jaHJvbml6ZWQKK2Fjcm9zcyBWTXMs IGV4cG9ydGVyIGFuZCBpbXBvcnRlci4gVGhpcyBwcml2YXRlIGRhdGEgZG9lcyBub3QgaGF2ZSBh bnkgc3BlY2lmaWMKK3N0cnVjdHVyZSBkZWZpbmVkIGF0IHRoZSBkcml2ZXIgbGV2ZWwsIHNvIGFu eSDigJx1c2VyLWRlZmluZWTigJ0gZm9ybWF0IG9yCitzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQuIElu IGFkZGl0aW9uLCB0aGVyZSBpcyBubyBkZWRpY2F0ZWQgdXNlLWNhc2UgZm9yIHRoaXMKK2RhdGEu IEl0IGNhbiBiZSB1c2VkIHZpcnR1YWxseSBmb3IgYW55IHB1cnBvc2UuIEZvciBleGFtcGxlLCBp dCBjYW4gYmUgdXNlZCB0bworc2hhcmUgbWV0YS1kYXRhIHN1Y2ggYXMgZGltZW5zaW9uIGFuZCBj b2xvciBmb3JtYXRzIGZvciBzaGFyZWQgaW1hZ2VzIGluCithIHN1cmZhY2Ugc2hhcmluZyBtb2Rl bC4gQW5vdGhlciBleGFtcGxlIGlzIHdoZW4gd2Ugc2hhcmUgcHJvdGVjdGVkIG1lZGlhCitjb250 ZW50cy4KKworVGhpcyBwcml2YXRlIGRhdGEgY2FuIGJlIHVzZWQgdG8gdHJhbnNmZXIgZmxhZ3Mg cmVsYXRlZCB0byBjb250ZW50IHByb3RlY3Rpb24KK2luZm9ybWF0aW9uIG9uIHN0cmVhbWVkIG1l ZGlhIHRvIHRoZSBpbXBvcnRlci4KKworUHJpdmF0ZSBkYXRhIGlzIGluaXRpYWxseSBnZW5lcmF0 ZWQgd2hlbiBhIGJ1ZmZlciBpcyBleHBvcnRlZCBmb3IgdGhlIGZpcnN0Cit0aW1lLiBUaGVuLCBp dCBpcyB1cGRhdGVkIHdoZW5ldmVyIHRoZSBzYW1lIGJ1ZmZlciBpcyByZS1leHBvcnRlZC4gRHVy aW5nIHRoZQorcmUtZXhwb3J0aW5nIHByb2Nlc3MsIHRoZSBIeXBlcl9ETUFCVUYgZHJpdmVyIG9u bHkgdXBkYXRlcyBwcml2YXRlIGRhdGEgb24KK2JvdGggc2lkZXMgd2l0aCBuZXcgZGF0YSBmcm9t IHVzZXItc3BhY2Ugc2luY2UgdGhlIHNhbWUgYnVmZmVyIGFscmVhZHkgZXhpc3RzCitvbiBib3Ro IHRoZSBJTVBPUlQgTElTVCBhbmQgRVhQT1JUIExJU1QuCisKK1RoZXJlIGFyZSB0d28gZGlmZmVy ZW50IHdheXMgdG8gcmV0cmlldmUgdGhpcyBwcml2YXRlIGRhdGEgZnJvbSB1c2VyLXNwYWNlLgor VGhlIGZpcnN0IHdheSBpcyB0byB1c2Ug4oCcUmVhZOKAnSBvbiB0aGUgSHlwZXJfRE1BQlVGIGRy aXZlci4g4oCcUmVhZOKAnSByZXR1cm5zIHRoZQorZGF0YSBvZiBldmVudHMgY29udGFpbmluZyBw cml2YXRlIGRhdGEgb2YgdGhlIGJ1ZmZlci4gVGhlIHNlY29uZCB3YXkgaXMgdG8KK21ha2UgYSBx dWVyeSB0byBIeXBlcl9ETUFCVUYuIFRoZXJlIGFyZSB0d28gcXVlcnkgaXRlbXMsCitIWVBFUl9E TUFCVUZfUVVFUllfUFJJVl9JTkZPIGFuZCBIWVBFUl9ETUFCVUZfUVVFUllfUFJJVl9JTkZPX1NJ WkUgYXZhaWxhYmxlCitmb3IgcmV0cmlldmluZyBwcml2YXRlIGRhdGEgYW5kIGl0cyBzaXplLgor Cis1LiBTY2F0dGVyLUdhdGhlciBMaXN0IFRhYmxlIChTR1QpIE1hbmFnZW1lbnQKKworU0dUIG1h bmFnZW1lbnQgaXMgdGhlIGNvcmUgcGFydCBvZiB0aGUgSHlwZXJfRE1BQlVGIGRyaXZlciB0aGF0 IG1hbmFnZXMgYW4KK1NHVCwgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ3JvdXAgb2Yga2VybmVs IHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCBhIERNQV9CVUYuCitUaGlzIGJsb2NrIGluY2x1ZGVzIGZv dXIgZGlmZmVyZW50IHN1Yi1ibG9ja3M6CisKK2EuIEh5cGVyX0RNQUJVRl9pZCBNYW5hZ2VyCisK K1RoaXMgSUQgbWFuYWdlciBpcyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBhIGh5cGVyX2Rt YWJ1Zl9pZCBmb3IgYW4KK2V4cG9ydGVkIERNQV9CVUYuIFdoZW4gYW4gSUQgaXMgcmVxdWVzdGVk LCB0aGUgSUQgTWFuYWdlciBmaXJzdCBjaGVja3MgaWYKK3RoZXJlIGFyZSBhbnkgcmV1c2FibGUg SURzIGxlZnQgaW4gdGhlIGxpc3QgYW5kIHJldHVybnMgb25lIG9mIHRob3NlLAoraWYgYXZhaWxh YmxlLiBPdGhlcndpc2UsIGl0IGNyZWF0ZXMgdGhlIG5leHQgY291bnQgbnVtYmVyIGFuZCByZXR1 cm5zIGl0Cit0byB0aGUgY2FsbGVyLgorCitiLiBTR1QgQ3JlYXRvcgorCitUaGUgU0dUIChzdHJ1 Y3Qgc2dfdGFibGUpIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBETUFfQlVGIHN1Y2gg YXMKK3JlZmVyZW5jZXMgdG8gYWxsIGtlcm5lbCBwYWdlcyBmb3IgdGhlIGJ1ZmZlciBhbmQgdGhl aXIgY29ubmVjdGlvbnMuIFRoZQorU0dUIENyZWF0b3IgY3JlYXRlcyBhIG5ldyBTR1Qgb24gdGhl IGltcG9ydGVyIHNpZGUgd2l0aCBwYWdlcyBzaGFyZWQgYnkKK3RoZSBoeXBlcnZpc29yLgorCitj LiBLZXJuZWwgUGFnZSBFeHRyYWN0b3IKKworVGhlIFBhZ2UgRXh0cmFjdG9yIGV4dHJhY3RzIHBh Z2VzIGZyb20gYSBnaXZlbiBTR1QgYmVmb3JlIHRob3NlIHBhZ2VzCithcmUgc2hhcmVkLgorCitk LiBMaXN0IE1hbmFnZXIgSW50ZXJmYWNlCisKK1RoZSBTR1QgbWFuZ2VyIGFsc28gaW50ZXJhY3Rz IHdpdGggZXhwb3J0IGFuZCBpbXBvcnQgbGlzdCBtYW5hZ2Vycy4gSXQKK3NlbmRzIG91dCBpbmZv cm1hdGlvbiAoZm9yIGV4YW1wbGUsIGh5cGVyX2RtYWJ1Zl9pZCwgcmVmZXJlbmNlLCBhbmQKK0RN QV9CVUYgaW5mb3JtYXRpb24pIGFib3V0IHRoZSBleHBvcnRlZCBvciBpbXBvcnRlZCBETUFfQlVG cyB0byB0aGUKK2xpc3QgbWFuYWdlci4gQWxzbywgb24gSU9DVEwgcmVxdWVzdCwgaXQgYXNrcyB0 aGUgbGlzdCBtYW5hZ2VyIHRvIGZpbmQKK2FuZCByZXR1cm4gdGhlIGluZm9ybWF0aW9uIGZvciBh IGNvcnJlc3BvbmRpbmcgRE1BX0JVRiBpbiB0aGUgbGlzdC4KKworNi4gRE1BLUJVRiBJbnRlcmZh Y2UKKworVGhlIERNQS1CVUYgaW50ZXJmYWNlIHByb3ZpZGVzIHN0YW5kYXJkIG1ldGhvZHMgdG8g bWFuYWdlIERNQV9CVUZzCityZWNvbnN0cnVjdGVkIGJ5IHRoZSBIeXBlcl9ETUFCVUYgZHJpdmVy IGZyb20gc2hhcmVkIHBhZ2VzLiBBbGwgb2YgdGhlCityZWxldmFudCBvcGVyYXRpb25zIGFyZSBs aXN0ZWQgaW4gc3RydWN0IGRtYV9idWZfb3BzLiBUaGVzZSBvcGVyYXRpb25zCithcmUgc3RhbmRh cmQgRE1BX0JVRiBvcGVyYXRpb25zLCB0aGVyZWZvcmUgdGhleSBmb2xsb3cgc3RhbmRhcmQgRE1B IEJVRgorcHJvdG9jb2xzLgorCitFYWNoIERNQV9CVUYgb3BlcmF0aW9uIGNvbW11bmljYXRlcyB3 aXRoIHRoZSBleHBvcnRlciBhdCB0aGUgZW5kIG9mIHRoZQorcm91dGluZSBmb3Ig4oCcaW5kaXJl Y3QgRE1BX0JVRiBzeW5jaHJvbml6YXRpb27igJ0uCisKKzcuIEV4cG9ydC9JbXBvcnQgTGlzdCBN YW5hZ2VtZW50CisKK1doZW5ldmVyIGEgRE1BX0JVRiBpcyBzaGFyZWQgYW5kIGV4cG9ydGVkLCBp dHMgaW5mb3JtYXRpb24gaXMgYWRkZWQgdG8gdGhlCitkYXRhYmFzZSAoRVhQT1JULWxpc3QpIG9u IHRoZSBleHBvcnRpbmcgVk0uIFNpbWlsYXJseSwgaW5mb3JtYXRpb24gYWJvdXQgYW4KK2ltcG9y dGVkIERNQV9CVUYgaXMgYWRkZWQgdG8gdGhlIGltcG9ydGluZyBkYXRhYmFzZSAoSU1QT1JUIGxp c3QpIG9uIHRoZQoraW1wb3J0aW5nIFZNLCB3aGVuIHRoZSBleHBvcnQgaGFwcGVucy4KKworQWxs IG9mIHRoZSBlbnRyaWVzIGluIHRoZSBsaXN0cyBhcmUgbmVlZGVkIHRvIG1hbmFnZSB0aGUgZXhw b3J0ZWQvaW1wb3J0ZWQKK0RNQV9CVUYgbW9yZSBlZmZpY2llbnRseS4gQm90aCBsaXN0cyBhcmUg aW1wbGVtZW50ZWQgYXMgTGludXggaGFzaCB0YWJsZXMuCitUaGUga2V5IHRvIHRoZSBsaXN0IGlz IGh5cGVyX2RtYWJ1Zl9pZCBhbmQgdGhlIG91dHB1dCBpcyB0aGUgaW5mb3JtYXRpb24gb2YKK3Ro ZSBETUFfQlVGLiBUaGUgTGlzdCBNYW5hZ2VyIG1hbmFnZXMgYWxsIHJlcXVlc3RzIGZyb20gb3Ro ZXIgYmxvY2tzIGFuZAordHJhbnNhY3Rpb25zIHdpdGhpbiBsaXN0cyB0byBlbnN1cmUgdGhhdCBh bGwgZW50cmllcyBhcmUgdXAtdG8tZGF0ZSBhbmQKK3RoYXQgdGhlIGxpc3Qgc3RydWN0dXJlIGlz IGNvbnNpc3RlbnQuCisKK1RoZSBMaXN0IE1hbmFnZXIgcHJvdmlkZXMgYmFzaWMgZnVuY3Rpb25h bGl0eSwgc3VjaCBhczoKKworLSBBZGRpbmcgdG8gdGhlIExpc3QKKy0gUmVtb3ZhbCBmcm9tIHRo ZSBMaXN0CistIEZpbmRpbmcgaW5mb3JtYXRpb24gYWJvdXQgYSBETUFfQlVGLCBnaXZlbiB0aGUg aHlwZXJfZG1hYnVmX2lkCisKKzguIFBhZ2UgU2hhcmluZyBieSBIeXBlcmNhbGxzCisKK1RoZSBI eXBlcl9ETUFCVUYgZHJpdmVyIGFzc3VtZXMgdGhhdCB0aGVyZSBpcyBhIG5hdGl2ZSBwYWdlLWJ5 LXBhZ2UgbWVtb3J5CitzaGFyaW5nIG1lY2hhbmlzbSBhdmFpbGFibGUgb24gdGhlIGh5cGVydmlz b3IuIFJlZmVyZW5jaW5nIGEgZ3JvdXAgb2YgcGFnZXMKK3RoYXQgYXJlIGJlaW5nIHNoYXJlZCBp cyB3aGF0IHRoZSBkcml2ZXIgZXhwZWN0cyBmcm9tIOKAnGJhY2tlbmTigJ0gQVBJcyBvciB0aGUK K2h5cGVydmlzb3IgaXRzZWxmLgorCitGb3IgdGhlIGV4YW1wbGUsIHhlbiBiYWNrZW5kIGludGVn cmF0ZWQgaW4gY3VycmVudCBjb2RlIGJhc2UgdXRpbGl6ZXMgWGVu4oCZcworZ3JhbnQtdGFibGUg aW50ZXJmYWNlIGZvciBzaGFyaW5nIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBwYWdlcyAoc3RydWN0 ICpwYWdlKS4KKworTW9yZSBkZXRhaWxzIGFib3V0IGdyYW50LXRhYmxlIGludGVyZmFjZSBjYW4g YmUgZm91bmQgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisKK2h0dHBzOi8vd2lraS54ZW4u b3JnL3dpa2kvR3JhbnRfVGFibGUKK2h0dHBzOi8veGVuYml0cy54ZW4ub3JnL2RvY3MvNC42LXRl c3RpbmcvbWlzYy9ncmFudC10YWJsZXMudHh0CisKKzkuIE1lc3NhZ2UgSGFuZGxpbmcKKworVGhl IGV4cG9ydGVyIGFuZCBpbXBvcnRlciBjYW4gZWFjaCBjcmVhdGUgYSBtZXNzYWdlIHRoYXQgY29u c2lzdHMgb2YgYW4gb3Bjb2RlCisoY29tbWFuZCkgYW5kIG9wZXJhbmRzIChwYXJhbWV0ZXJzKSBh bmQgc2VuZCBpdCB0byBlYWNoIG90aGVyLgorCitUaGUgbWVzc2FnZSBmb3JtYXQgaXMgZGVmaW5l ZCBhczoKKworc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgeworICAgICAgICB1bnNpZ25lZCBpbnQg cmVxX2lkOyAvKiBTZXF1ZW5jZSBudW1iZXIuIFVzZWQgZm9yIFJJTkcgQlVGCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiAqLworICAgICAgICB1bnNpZ25l ZCBpbnQgc3RhdDsgLyogU3RhdHVzLlJlc3BvbnNlIGZyb20gcmVjZWl2ZXIuICovCisgICAgICAg IHVuc2lnbmVkIGludCBjbWQ7ICAvKiBPcGNvZGUgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IG9w W01BWF9OVU1CRVJfT0ZfT1BFUkFORFNdOyAvKiBPcGVyYW5kcyAqLworfTsKKworVGhlIGZvbGxv d2luZyB0YWJsZSBnaXZlcyB0aGUgbGlzdCBvZiBvcGNvZGVzOgorCis8T3Bjb2RlcyBpbiBNZXNz YWdlIHRvIEV4cG9ydGVyL0ltcG9ydGVyPgorCitIWVBFUl9ETUFCVUZfRVhQT1JUIChleHBvcnRl ciAtLT4gaW1wb3J0ZXIpCisgLSBFeHBvcnQgYSBETUFfQlVGIHRvIHRoZSBpbXBvcnRlci4gVGhl IGltcG9ydGVyIHJlZ2lzdGVycyB0aGUgY29ycmVzcG9uZGluZworICAgRE1BX0JVRiBpbiBpdHMg SU1QT1JUIExJU1Qgd2hlbiB0aGUgbWVzc2FnZSBpcyByZWNlaXZlZC4KKworSFlQRVJfRE1BQlVG X0VYUE9SVF9GRCAoaW1wb3J0ZXIgLS0+IGV4cG9ydGVyKQorIC0gTG9jYWxseSBleHBvcnRlZCBh cyBGRC4gVGhlIGltcG9ydGVyIHNlbmRzIG91dCB0aGlzIGNvbW1hbmQgdG8gdGhlIGV4cG9ydGVy CisgICB0byBub3RpZnkgdGhhdCB0aGUgYnVmZmVyIGlzIG5vdyBsb2NhbGx5IGV4cG9ydGVkICht YXBwZWQgYW5kIHVzZWQpLgorCitIWVBFUl9ETUFCVUZfRVhQT1JUX0ZEX0ZBSUxFRCAoaW1wb3J0 ZXIgLS0+IGV4cG9ydGVyKQorIC0gRmFpbGVkIHdoaWxlIGV4cG9ydGluZyBsb2NhbGx5LiBUaGUg aW1wb3J0ZXIgc2VuZHMgb3V0IHRoaXMgY29tbWFuZCB0byB0aGUKKyAgIGV4cG9ydGVyIHRvIG5v dGlmeSB0aGUgZXhwb3J0ZXIgdGhhdCB0aGUgRVhQT1JUX0ZEIGZhaWxlZC4KKworSFlQRVJfRE1B QlVGX05PVElGWV9VTkVYUE9SVCAoZXhwb3J0ZXIgLS0+IGltcG9ydGVyKQorIC0gVGVybWluYXRp b24gb2Ygc2hhcmluZy4gVGhlIGV4cG9ydGVyIG5vdGlmaWVzIHRoZSBpbXBvcnRlciB0aGF0IHRo ZSBETUFfQlVGCisgICBoYXMgYmVlbiB1bmV4cG9ydGVkLgorCitIWVBFUl9ETUFCVUZfT1BTX1RP X1JFTU9URSAoaW1wb3J0ZXIgLS0+IGV4cG9ydGVyKQorIC0gTm90IGltcGxlbWVudGVkIHlldC4K KworSFlQRVJfRE1BQlVGX09QU19UT19TT1VSQ0UgKGV4cG9ydGVyIC0tPiBpbXBvcnRlcikKKyAt IERNQV9CVUYgb3BzIHRvIHRoZSBleHBvcnRlciwgZm9yIERNQV9CVUYgdXBzdHJlYW0gc3luY2hy b25pemF0aW9uLgorICAgTm90ZTogSW1wbGVtZW50ZWQgYnV0IGl0IGlzIGRvbmUgYXN5bmNocm9u b3VzbHkgZHVlIHRvIHBlcmZvcm1hbmNlIGlzc3Vlcy4KKworVGhlIGZvbGxvd2luZyB0YWJsZSBz aG93cyB0aGUgbGlzdCBvZiBvcGVyYW5kcyBmb3IgZWFjaCBvcGNvZGUuCisKKzxPcGVyYW5kcyBp biBNZXNzYWdlIHRvIEV4cG9ydGVyL0ltcG9ydGVyPgorCistIEhZUEVSX0RNQUJVRl9FWFBPUlQK Kworb3AwIHRvIG9wMyDigJMgaHlwZXJfZG1hYnVmX2lkCitvcDQg4oCTIG51bWJlciBvZiBwYWdl cyB0byBiZSBzaGFyZWQKK29wNSDigJMgb2Zmc2V0IG9mIGRhdGEgaW4gdGhlIGZpcnN0IHBhZ2UK K29wNiDigJMgbGVuZ3RoIG9mIGRhdGEgaW4gdGhlIGxhc3QgcGFnZQorb3A3IOKAkyByZWZlcmVu Y2UgbnVtYmVyIGZvciB0aGUgZ3JvdXAgb2Ygc2hhcmVkIHBhZ2VzCitvcDgg4oCTIHNpemUgb2Yg cHJpdmF0ZSBkYXRhCitvcDkgdG8gKG9wOStvcDgpICDigJMgcHJpdmF0ZSBkYXRhCisKKy0gSFlQ RVJfRE1BQlVGX0VYUE9SVF9GRAorCitvcDAgdG8gb3AzIOKAkyBoeXBlcl9kbWFidWZfaWQKKwor LSBIWVBFUl9ETUFCVUZfRVhQT1JUX0ZEX0ZBSUxFRAorCitvcDAgdG8gb3AzIOKAkyBoeXBlcl9k bWFidWZfaWQKKworLSBIWVBFUl9ETUFCVUZfTk9USUZZX1VORVhQT1JUCisKK29wMCB0byBvcDMg 4oCTIGh5cGVyX2RtYWJ1Zl9pZAorCistIEhZUEVSX0RNQUJVRl9PUFNfVE9fUkVNT1RFKE5vdCBp bXBsZW1lbnRlZCkKKworLSBIWVBFUl9ETUFCVUZfT1BTX1RPX1NPVVJDRQorCitvcDAgdG8gb3Az IOKAkyBoeXBlcl9kbWFidWZfaWQKK29wNCDigJMgdHlwZSBvZiBETUFfQlVGIG9wZXJhdGlvbgor Cis5LiBJbnRlciBWTSAoRG9tYWluKSBDb21tdW5pY2F0aW9uCisKK1R3byBkaWZmZXJlbnQgdHlw ZXMgb2YgaW50ZXItZG9tYWluIGNvbW11bmljYXRpb24gY2hhbm5lbHMgYXJlIHJlcXVpcmVkLAor b25lIGluIGtlcm5lbCBzcGFjZSBhbmQgdGhlIG90aGVyIGluIHVzZXIgc3BhY2UuIFRoZSBjb21t dW5pY2F0aW9uIGNoYW5uZWwKK2luIHVzZXIgc3BhY2UgaXMgZm9yIHRyYW5zbWl0dGluZyBvciBy ZWNlaXZpbmcgdGhlIGh5cGVyX2RtYWJ1Zl9pZC4gU2luY2UKK3RoZXJlIGlzIG5vIHNwZWNpZmlj IHNlY3VyaXR5IChmb3IgZXhhbXBsZSwgZW5jcnlwdGlvbikgaW52b2x2ZWQgaW4gdGhlCitnZW5l cmF0aW9uIG9mIGEgZ2xvYmFsIGlkIGF0IHRoZSBkcml2ZXIgbGV2ZWwsIGl0IGlzIGhpZ2hseSBy ZWNvbW1lbmRlZCB0aGF0Cit0aGUgY3VzdG9tZXLigJlzIHVzZXIgYXBwbGljYXRpb24gc2V0IHVw IGEgdmVyeSBzZWN1cmUgY2hhbm5lbCBmb3IgZXhjaGFuZ2luZworaHlwZXJfZG1hYnVmX2lkIGJl dHdlZW4gVk1zLgorCitUaGUgY29tbXVuaWNhdGlvbiBjaGFubmVsIGluIGtlcm5lbCBzcGFjZSBp cyByZXF1aXJlZCBmb3IgZXhjaGFuZ2luZyBtZXNzYWdlcworZnJvbSDigJxtZXNzYWdlIG1hbmFn ZW1lbnTigJ0gYmxvY2sgYmV0d2VlbiB0d28gVk1zLiBJbiB0aGUgY3VycmVudCByZWZlcmVuY2UK K2JhY2tlbmQgZm9yIFhlbiBoeXBlcnZpc29yLCBYZW4gcmluZy1idWZmZXIgYW5kIGV2ZW50LWNo YW5uZWwgbWVjaGFuaXNtcyBhcmUKK3VzZWQgZm9yIG1lc3NhZ2UgZXhjaGFuZ2UgYmV0d2VlbiBp bXBvdGVyIGFuZCBleHBvcnRlci4KKworMTAuIFdoYXQgYXJlIHJlcXVpcmVkIGluIGh5cGVydmlz b3IKKworZW1vcnkgc2hhcmluZyBhbmQgbWVzc2FnZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gVk1z CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2VjdGlvbiAzLiBIeXBlciBETUFCVUYgU2hhcmlu ZyBGbG93CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gRXhwb3J0aW5nCisKK1RvIGV4cG9y dCBhIERNQV9CVUYgdG8gYW5vdGhlciBWTSwgdXNlciBzcGFjZSBoYXMgdG8gY2FsbCBhbiBJT0NU TAorKElPQ1RMX0hZUEVSX0RNQUJVRl9FWFBPUlRfUkVNT1RFKSB3aXRoIGEgZmlsZSBkZXNjcmlw dG9yIGZvciB0aGUgYnVmZmVyIGdpdmVuCitieSB0aGUgb3JpZ2luYWwgZXhwb3J0ZXIuIFRoZSBI eXBlcl9ETUFCVUYgZHJpdmVyIG1hcHMgYSBETUFfQlVGIGxvY2FsbHksIHRoZW4KK2lzc3VlcyBh IGh5cGVyX2RtYWJ1Zl9pZCBhbmQgU0dUIGZvciB0aGUgRE1BX0JVRiwgd2hpY2ggaXMgcmVnaXN0 ZXJlZCB0byB0aGUKK0VYUE9SVCBsaXN0LiBUaGVuLCBhbGwgcGFnZXMgZm9yIHRoZSBTR1QgYXJl IGV4dHJhY3RlZCBhbmQgZWFjaCBpbmRpdmlkdWFsCitwYWdlIGlzIHNoYXJlZCB2aWEgYSBoeXBl cnZpc29yLXNwZWNpZmljIG1lbW9yeSBzaGFyaW5nIG1lY2hhbmlzbQorKGZvciBleGFtcGxlLCBp biBYZW4gdGhpcyBpcyBncmFudC10YWJsZSkuCisKK09uZSBpbXBvcnRhbnQgcmVxdWlyZW1lbnQg b24gdGhpcyBtZW1vcnkgc2hhcmluZyBtZXRob2QgaXMgdGhhdCBpdCBuZWVkcyB0bworY3JlYXRl IGEgc2luZ2xlIGludGVnZXIgdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoZSBsaXN0IG9mIHBhZ2Vz LCB3aGljaCBjYW4KK3RoZW4gYmUgdXNlZCBieSB0aGUgaW1wb3J0ZXIgZm9yIHJldHJpZXZpbmcg dGhlIGdyb3VwIG9mIHNoYXJlZCBwYWdlcy4gIEZvcgordGhpcywgdGhlIOKAnEJhY2tlbmTigJ0g aW4gdGhlIHJlZmVyZW5jZSBkcml2ZXIgdXRpbGl6ZXMgdGhlIG11bHRpcGxlIGxldmVsCithZGRy ZXNzaW5nIG1lY2hhbmlzbS4KKworT25jZSB0aGUgaW50ZWdlciByZWZlcmVuY2UgdG8gdGhlIGxp c3Qgb2YgcGFnZXMgaXMgY3JlYXRlZCwgdGhlIGV4cG9ydGVyCitidWlsZHMgdGhlIOKAnGV4cG9y dOKAnSBjb21tYW5kIGFuZCBzZW5kcyBpdCB0byB0aGUgaW1wb3J0ZXIsIHRoZW4gbm90aWZpZXMg dGhlCitpbXBvcnRlci4KKworMi4gSW1wb3J0aW5nCisKK1RoZSBJbXBvcnQgcHJvY2VzcyBpcyBk aXZpZGVkIGludG8gdHdvIHNlY3Rpb25zLiBPbmUgaXMgdGhlIHJlZ2lzdHJhdGlvbgorb2YgRE1B X0JVRiBmcm9tIHRoZSBleHBvcnRlci4gVGhlIG90aGVyIGlzIHRoZSBhY3R1YWwgbWFwcGluZyBv ZiB0aGUgYnVmZmVyCitiZWZvcmUgYWNjZXNzaW5nIHRoZSBkYXRhIGluIHRoZSBidWZmZXIuIFRo ZSBmb3JtZXIgKHRlcm1lZCDigJxSZWdpc3RyYXRpb27igJ0pCitoYXBwZW5zIG9uIGFuIGV4cG9y dCBldmVudCAodGhhdCBpcywgdGhlIGV4cG9ydCBjb21tYW5kIHdpdGggYW4gaW50ZXJydXB0KQor aW4gdGhlIGV4cG9ydGVyLgorCitUaGUgbGF0dGVyICh0ZXJtZWQg4oCcTWFwcGluZ+KAnSkgaXMg ZG9uZSBhc3luY2hyb25vdXNseSB3aGVuIHRoZSBkcml2ZXIgZ2V0cyB0aGUKK0lPQ1RMIGNhbGwg ZnJvbSB1c2VyIHNwYWNlLiBXaGVuIHRoZSBpbXBvcnRlciBnZXRzIGFuIGludGVycnVwdCBmcm9t IHRoZQorZXhwb3J0ZXIsIGl0IGNoZWNrcyB0aGUgY29tbWFuZCBpbiB0aGUgcmVjZWl2aW5nIHF1 ZXVlIGFuZCBpZiBpdCBpcyBhbgor4oCcZXhwb3J04oCdIGNvbW1hbmQsIHRoZSByZWdpc3RyYXRp b24gcHJvY2VzcyBpcyBzdGFydGVkLiBJdCBmaXJzdCBmaW5kcworaHlwZXJfZG1hYnVmX2lkIGFu ZCB0aGUgaW50ZWdlciByZWZlcmVuY2UgZm9yIHRoZSBzaGFyZWQgcGFnZXMsIHRoZW4gc3RvcmVz CithbGwgb2YgdGhhdCBpbmZvcm1hdGlvbiB0b2dldGhlciB3aXRoIHRoZSDigJxkb21haW4gaWTi gJ0gb2YgdGhlIGV4cG9ydGluZyBkb21haW4KK2luIHRoZSBJTVBPUlQgTElTVC4KKworSW4gdGhl IGNhc2Ugd2hlcmUg4oCcZXZlbnQtcG9sbGluZ+KAnSBpcyBlbmFibGVkIChLZXJuZWwgQ29uZmln IC0gRW5hYmxlIGV2ZW50LQorZ2VuZXJhdGlvbiBhbmQgcG9sbGluZyBvcGVyYXRpb24pLCBhIOKA nG5ldyBzaGFyaW5nIGF2YWlsYWJsZeKAnSBldmVudCBpcworZ2VuZXJhdGVkIHJpZ2h0IGFmdGVy IHRoZSByZWZlcmVuY2UgaW5mbyBmb3IgdGhlIG5ldyBzaGFyZWQgRE1BX0JVRiBpcworcmVnaXN0 ZXJlZCB0byB0aGUgSU1QT1JUIExJU1QuIFRoaXMgZXZlbnQgaXMgYWRkZWQgdG8gdGhlIGV2ZW50 LXF1ZXVlLgorCitUaGUgdXNlciBwcm9jZXNzIHRoYXQgcG9sbHMgSHlwZXJfRE1BQlVGIGRyaXZl ciB3YWtlcyB1cCB3aGVuIHRoaXMgZXZlbnQtcXVldWUKK2lzIG5vdCBlbXB0eSBhbmQgaXMgYWJs ZSB0byByZWFkIGJhY2sgZXZlbnQgZGF0YSBmcm9tIHRoZSBxdWV1ZSB1c2luZyB0aGUKK2RyaXZl cuKAmXMg4oCcUmVhZOKAnSBmdW5jdGlvbi4gT25jZSB0aGUgdXNlci1hcHBsaWNhdGlvbiBjYWxs cyBFWFBPUlRfRkQgSU9DVEwgd2l0aAordGhlIHByb3BlciBwYXJhbWV0ZXJzIGluY2x1ZGluZyBo eXBlcl9kbWFidWZfaWQsIHRoZSBIeXBlcl9ETUFCVUYgZHJpdmVyCityZXRyaWV2ZXMgaW5mb3Jt YXRpb24gYWJvdXQgdGhlIG1hdGNoZWQgRE1BX0JVRiBmcm9tIHRoZSBJTVBPUlQgTElTVC4gVGhl biwgaXQKK21hcHMgYWxsIHBhZ2VzIHNoYXJlZCAocmVmZXJlbmNlZCBieSB0aGUgaW50ZWdlciBy ZWZlcmVuY2UpIGluIGl0cyBrZXJuZWwKK3NwYWNlIGFuZCBjcmVhdGVzIGl0cyBvd24gRE1BX0JV RiByZWZlcmVuY2luZyB0aGUgc2FtZSBzaGFyZWQgcGFnZXMuIEFmdGVyCit0aGlzLCBpdCBleHBv cnRzIHRoaXMgbmV3IERNQV9CVUYgdG8gdGhlIG90aGVyIGRyaXZlcnMgd2l0aCBhIGZpbGUgZGVz Y3JpcHRvci4KK0RNQV9CVUYgY2FuIHRoZW4gYmUgdXNlZCBqdXN0IGluIHRoZSBzYW1lIHdheSBh IGxvY2FsIERNQV9CVUYgaXMuCisKKzMuIEluZGlyZWN0IFN5bmNocm9uaXphdGlvbiBvZiBETUFf QlVGCisKK1N5bmNocm9uaXphdGlvbiBvZiBhIERNQV9CVUYgd2l0aGluIGEgc2luZ2xlIE9TIGlz IGF1dG9tYXRpY2FsbHkgYWNoaWV2ZWQKK2JlY2F1c2UgYWxsIG9mIGltcG9ydGVy4oCZcyBETUFf QlVGIG9wZXJhdGlvbnMgYXJlIGRvbmUgdXNpbmcgZnVuY3Rpb25zIGRlZmluZWQKK29uIHRoZSBl eHBvcnRlcuKAmXMgc2lkZSwgd2hpY2ggbWVhbnMgdGhlcmUgaXMgb25lIGNlbnRyYWwgcGxhY2Ug dGhhdCBoYXMgZnVsbAorY29udHJvbCBvdmVyIHRoZSBETUFfQlVGLiBJbiBvdGhlciB3b3Jkcywg YW55IHByaW1hcnkgYWN0aXZpdGllcyBzdWNoIGFzCithdHRhY2hpbmcvZGV0YWNoaW5nIGFuZCBt YXBwaW5nL3VuLW1hcHBpbmcgYXJlIGFsbCBjYXB0dXJlZCBieSB0aGUgZXhwb3J0ZXIsCittZWFu aW5nIHRoYXQgdGhlIGV4cG9ydGVyIGtub3dzIGJhc2ljIGluZm9ybWF0aW9uIHN1Y2ggYXMgd2hv IGlzIHVzaW5nIHRoZQorRE1BX0JVRiBhbmQgaG93IGl0IGlzIGJlaW5nIHVzZWQuIFRoaXMsIGhv d2V2ZXIsIGlzIG5vdCBhcHBsaWNhYmxlIGlmIHRoaXMKK3NoYXJpbmcgaXMgZG9uZSBiZXlvbmQg YSBzaW5nbGUgT1MgYmVjYXVzZSBrZXJuZWwgc3BhY2UgKHdoZXJlIHRoZSBleHBvcnRlcuKAmXMK K0RNQV9CVUYgb3BlcmF0aW9ucyByZXNpZGUpIGlzIHNpbXBseSBub3QgdmlzaWJsZSB0byB0aGUg aW1wb3J0aW5nIFZNLgorCitUaGVyZWZvcmUsIOKAnGluZGlyZWN0IHN5bmNocm9uaXphdGlvbuKA nSB3YXMgaW50cm9kdWNlZCBhcyBhbiBhbHRlcm5hdGl2ZSBzb2x1dGlvbiwKK3doaWNoIGlzIG5v dyBpbXBsZW1lbnRlZCBpbiB0aGUgSHlwZXJfRE1BQlVGIGRyaXZlci4gVGhpcyB0ZWNobmlxdWUg bWFrZXMKK3RoZSBleHBvcnRlciBjcmVhdGUgYSBzaGFkb3cgRE1BX0JVRiB3aGVuIHRoZSBlbmQt Y29uc3VtZXIgb2YgdGhlIGJ1ZmZlciBtYXBzCit0aGUgRE1BX0JVRiwgdGhlbiBkdXBsaWNhdGVz IGFueSBETUFfQlVGIG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uCit0aGUgaW1wb3J0ZXLigJlzIHNp ZGUuIFRocm91Z2ggdGhpcyDigJxpbmRpcmVjdCBzeW5jaHJvbml6YXRpb27igJ0sIHRoZSBleHBv cnRlciBpcworYWJsZSB0byB2aXJ0dWFsbHkgdHJhY2sgYWxsIGFjdGl2aXRpZXMgZG9uZSBieSB0 aGUgY29uc3VtZXIgKG1vc3RseSByZWZlcmVuY2UKK2NvdW50ZXIpIGFzIGlmIHRob3NlIGFyZSBk b25lIGluIGV4cG9ydGVy4oCZcyBsb2NhbCBzeXN0ZW0uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorU2VjdGlvbiA0LiBIeXBlcnZpc29yIEJhY2tlbmQgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKworVGhlIEh5cGVyX0RNQUJVRiBkcml2ZXIgaGFzIGEgc3RhbmRhcmQg4oCcQmFj a2VuZOKAnSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworbWFwcGluZ3MgdG8gdmFyaW91cyBmdW5j dGlvbnMgZGVzaWduZWQgZm9yIGEgc3BlY2lmaWMgSHlwZXJ2aXNvci4gTW9zdCBvZgordGhlc2Ug QVBJIGZ1bmN0aW9ucyBzaG91bGQgcHJvdmlkZSBhIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBv ZiBjb21tdW5pY2F0aW9uCithbmQgbWVtb3J5IHNoYXJpbmcgY2FwYWJpbGl0eSB0aGF0IHV0aWxp emUgYSBIeXBlcnZpc29y4oCZcyBuYXRpdmUgbWVjaGFuaXNtcy4KKworc3RydWN0IGh5cGVyX2Rt YWJ1Zl9iYWNrZW5kX29wcyB7CisgICAgICAgIC8qIHJldHJlaXZpbmcgaWQgb2YgY3VycmVudCB2 aXJ0dWFsIG1hY2hpbmUgKi8KKyAgICAgICAgaW50ICgqZ2V0X3ZtX2lkKSh2b2lkKTsKKyAgICAg ICAgLyogZ2V0IHBhZ2VzIHNoYXJlZCB2aWEgaHlwZXJ2aXNvci1zcGVjaWZpYyBtZXRob2QgKi8K KyAgICAgICAgaW50ICgqc2hhcmVfcGFnZXMpKHN0cnVjdCBwYWdlICoqLCBpbnQsIGludCwgdm9p ZCAqKik7CisgICAgICAgIC8qIG1ha2Ugc2hhcmVkIHBhZ2VzIHVuc2hhcmVkIHZpYSBoeXBlcnZp c29yIHNwZWNpZmljIG1ldGhvZCAqLworICAgICAgICBpbnQgKCp1bnNoYXJlX3BhZ2VzKSh2b2lk ICoqLCBpbnQpOworICAgICAgICAvKiBtYXAgcmVtb3RlbHkgc2hhcmVkIHBhZ2VzIG9uIGltcG9y dGVyJ3Mgc2lkZSB2aWEKKyAgICAgICAgICogIGh5cGVydmlzb3Itc3BlY2lmaWMgbWV0aG9kCisg ICAgICAgICAqLworICAgICAgICBzdHJ1Y3QgcGFnZSAqKiAoKm1hcF9zaGFyZWRfcGFnZXMpKGlu dCwgaW50LCBpbnQsIHZvaWQgKiopOworICAgICAgICAvKiB1bm1hcCBhbmQgZnJlZSBzaGFyZWQg cGFnZXMgb24gaW1wb3J0ZXIncyBzaWRlIHZpYQorICAgICAgICAgKiAgaHlwZXJ2aXNvci1zcGVj aWZpYyBtZXRob2QKKyAgICAgICAgICovCisgICAgICAgIGludCAoKnVubWFwX3NoYXJlZF9wYWdl cykodm9pZCAqKiwgaW50KTsKKyAgICAgICAgLyogaW5pdGlhbGl6ZSBjb21tdW5pY2F0aW9uIGVu dmlyb25tZW50ICovCisgICAgICAgIGludCAoKmluaXRfY29tbV9lbnYpKHZvaWQpOworICAgICAg ICAvKiBkZXN0cm95IGNvbW11bmljYXRpb24gY2hhbm5lbCAqLworICAgICAgICB2b2lkICgqZGVz dHJveV9jb21tKSh2b2lkKTsKKyAgICAgICAgLyogdXBzdHJlYW0gY2ggc2V0dXAgKHJlY2Vpdmlu ZyBhbmQgcmVzcG9uZGluZykgKi8KKyAgICAgICAgaW50ICgqaW5pdF9yeF9jaCkoaW50KTsKKyAg ICAgICAgLyogZG93bnN0cmVhbSBjaCBzZXR1cCAodHJhbnNtaXR0aW5nIGFuZCBwYXJzaW5nIHJl c3BvbnNlcykgKi8KKyAgICAgICAgaW50ICgqaW5pdF90eF9jaCkoaW50KTsKKyAgICAgICAgLyog c2VuZCBtc2cgdmlhIGNvbW11bmljYXRpb24gY2ggKi8KKyAgICAgICAgaW50ICgqc2VuZF9yZXEp KGludCwgc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKiwgaW50KTsKK307CisKKzxIeXBlcnZpc29y LXNwZWNpZmljIEJhY2tlbmQgU3RydWN0dXJlPgorCisxLiBnZXRfdm1faWQKKworCVJldHVybnMg dGhlIFZNIChkb21haW4pIElECisKKwlJbnB1dDoKKworCQktSUQgb2YgdGhlIGN1cnJlbnQgZG9t YWluCisKKwlPdXRwdXQ6CisKKwkJTm9uZQorCisyLiBzaGFyZV9wYWdlcworCisJR2V0IHBhZ2Vz IHNoYXJlZCB2aWEgaHlwZXJ2aXNvci1zcGVjaWZpYyBtZXRob2QgYW5kIHJldHVybiBvbmUgcmVm ZXJlbmNlCisJSUQgdGhhdCByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHNoYXJlZCBw YWdlcworCisJSW5wdXQ6CisKKwkJLUFycmF5IG9mIHBhZ2VzCisJCS1JRCBvZiBpbXBvcnRpbmcg Vk0KKwkJLU51bWJlciBvZiBwYWdlcworCQktSHlwZXJ2aXNvciBzcGVjaWZpYyBSZXByZXNlbnRh dGlvbiBvZiByZWZlcmVuY2UgaW5mbyBvZiBzaGFyZWQKKwkJIHBhZ2VzCisKKwlPdXRwdXQ6CisK KwkJLUh5cGVydmlzb3Igc3BlY2lmaWMgaW50ZWdlciB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgYWxs IG9mCisJCSB0aGUgc2hhcmVkIHBhZ2VzCisKKzMuIHVuc2hhcmVfcGFnZXMKKworCVN0b3Agc2hh cmluZyBwYWdlcworCisJSW5wdXQ6CisKKwkJLUh5cGVydmlzb3Igc3BlY2lmaWMgUmVwcmVzZW50 YXRpb24gb2YgcmVmZXJlbmNlIGluZm8gb2Ygc2hhcmVkCisJCSBwYWdlcworCQktTnVtYmVyIG9m IHNoYXJlZCBwYWdlcworCisJT3V0cHV0OgorCisJCTAKKworNC4gbWFwX3NoYXJlZF9wYWdlcwor CisJTWFwIHNoYXJlZCBwYWdlcyBsb2NhbGx5IHVzaW5nIGEgaHlwZXJ2aXNvci1zcGVjaWZpYyBt ZXRob2QKKworCUlucHV0OgorCisJCS1SZWZlcmVuY2UgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyBh bGwgb2Ygc2hhcmVkIHBhZ2VzCisJCS1JRCBvZiBleHBvcnRpbmcgVk0sIE51bWJlciBvZiBwYWdl cworCQktUmVmZXJlbmNlIGluZm9ybWF0aW9uIGZvciBhbnkgcHVycG9zZQorCisJT3V0cHV0Ogor CisJCS1BbiBhcnJheSBvZiBzaGFyZWQgcGFnZXMgKHN0cnVjdCBwYWdlKiopCisKKzUuIHVubWFw X3NoYXJlZF9wYWdlcworCisJVW5tYXAgc2hhcmVkIHBhZ2VzCisKKwlJbnB1dDoKKworCQktSHlw ZXJ2aXNvciBzcGVjaWZpYyBSZXByZXNlbnRhdGlvbiBvZiByZWZlcmVuY2UgaW5mbyBvZiBzaGFy ZWQgcGFnZXMKKworCU91dHB1dDoKKworCQktMCAoc3VjY2Vzc2Z1bCkgb3Igb25lIG9mIFN0YW5k YXJkIEtlcm5lbCBlcnJvcnMKKworNi4gaW5pdF9jb21tX2VudgorCisJU2V0dXAgaW5mcmFzdHJ1 Y3R1cmUgbmVlZGVkIGZvciBjb21tdW5pY2F0aW9uIGNoYW5uZWwKKworCUlucHV0OgorCisJCU5v bmUKKworCU91dHB1dDoKKworCQlOb25lCisKKzcuIGRlc3Ryb3lfY29tbQorCisJQ2xlYW51cCBl dmVyeXRoaW5nIGRvbmUgdmlhIGluaXRfY29tbV9lbnYKKworCUlucHV0OgorCisJCU5vbmUKKwor CU91dHB1dDoKKworCQlOb25lCisKKzguIGluaXRfcnhfY2gKKworCUNvbmZpZ3VyZSByZWNlaXZl IGNoYW5uZWwKKworCUlucHV0OgorCisJCS1JRCBvZiBWTSBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0 aGUgY2hhbm5lbAorCisJT3V0cHV0OgorCisJCS0wIChzdWNjZXNzZnVsKSBvciBvbmUgb2YgU3Rh bmRhcmQgS2VybmVsIGVycm9ycworCis5LiBpbml0X3R4X2NoCisKKwlDb25maWd1cmUgdHJhbnNt aXQgY2hhbm5lbAorCisJSW5wdXQ6CisKKwkJLUlEIG9mIFZNIG9uIHRoZSBvdGhlciBzaWRlIG9m IHRoZSBjaGFubmVsCisKKwlPdXRwdXQ6CisKKwkJLTAgKHN1Y2Nlc3MpIG9yIG9uZSBvZiBTdGFu ZGFyZCBLZXJuZWwgZXJyb3JzCisKKzEwLiBzZW5kX3JlcQorCisJU2VuZCBtZXNzYWdlIHRvIG90 aGVyIFZNCisKKwlJbnB1dDoKKworCQktSUQgb2YgVk0gdGhhdCByZWNlaXZlcyB0aGUgbWVzc2Fn ZQorCQktTWVzc2FnZQorCisJT3V0cHV0OgorCisJCS0wIChzdWNjZXNzKSBvciBvbmUgb2YgU3Rh bmRhcmQgS2VybmVsIGVycm9ycworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0tIAoyLjE2LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu Zm8veGVuLWRldmVs