Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ujwrW-00DwRE-7Q for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Aug 2025 09:24:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1ujwrT-003LFb-V9 for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Aug 2025 09:24:36 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ujwrS-003LFE-J1 for pgsql-hackers@lists.postgresql.org; Thu, 07 Aug 2025 09:24:35 +0000 Received: from relay5-d.mail.gandi.net ([217.70.183.197]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1ujwrH-001C9X-0d for pgsql-hackers@lists.postgresql.org; Thu, 07 Aug 2025 09:24:33 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id C3B2E42EF5; Thu, 7 Aug 2025 09:24:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1754558662; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=OZb3HJC/RfowRB3xScV4BxHWk9/hWIeAjX+Jcfj1H24=; b=FaK65aICEWUCeWByq1/KwibIvITxC/McOrWg7CKmsDMjzBXsg8U6Be3hvfv6WHoVkUp0Yh TVBhEqGd5aDTQf4uO0hytLFf4fsPXM/wn/M1tfXifCKjb8D8J/E5qjF6AySwsgqoX4O+pW YJqTZqu6bJviWcOtmR6xT5ixlTUBGe1JXRlPmADOIYXAOYK6IjjM54GzzWM0Ec/rOb30gR ASuLuyekm1bZ+++2lj/OohxtEvLT+cKKDD8pcG2E+0CWEHHxYvynOlNu/eOQdWnTT81n5A w2qOUbyCSA+VFiWKB/2/V+/AAoNXbK73SWrgGnh0LllIzVc8Ko8eSeAoAm2BbQ== Content-Type: multipart/mixed; boundary="------------8xriSvZLhsgPmdy7CNlM8G85" Message-ID: Date: Thu, 7 Aug 2025 11:24:18 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Adding basic NUMA awareness From: Tomas Vondra To: Jakub Wartak Cc: PostgreSQL Hackers References: <099b9433-2855-4f1b-b421-d078a5d82017@vondra.me> <5a2410f8-62a9-4483-bf0a-3a8331fb0808@vondra.me> <71a46484-053c-4b81-ba32-ddac050a8b5d@vondra.me> <1b5bf372-6d40-4022-bf4f-367ffb61ee51@vondra.me> <51e51832-7f47-412a-a1a6-b972101cc8cb@vondra.me> Content-Language: en-US In-Reply-To: <51e51832-7f47-412a-a1a6-b972101cc8cb@vondra.me> X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdefgdduvddtheeiucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpegtkfffgggfuffhvfevfhgjsehmtderredtvdejnecuhfhrohhmpefvohhmrghsucggohhnughrrgcuoehtohhmrghssehvohhnughrrgdrmhgvqeenucggtffrrghtthgvrhhnpeetheegudegieegvdeitdegkeetiedtheelveffgefggfeuvdduueffleeuvdevueenucfkphepkeeirdegledrvdeftddrvddtieenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeekiedrgeelrddvfedtrddvtdeipdhhvghloheplgdutddrudefjedrtddrvdgnpdhmrghilhhfrhhomhepthhomhgrshesvhhonhgurhgrrdhmvgdpnhgspghrtghpthhtohepvddprhgtphhtthhopehjrghkuhgsrdifrghrthgrkhesvghnthgvrhhprhhishgvuggsrdgtohhmpdhrtghpthhtohepphhgshhqlhdqhhgrtghkvghrsheslhhishhtshdrphhoshhtghhrvghsqhhlrdhorhhg X-GND-Sasl: tomas@vondra.me List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------8xriSvZLhsgPmdy7CNlM8G85 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi! Here's a slightly improved version of the patch series. The main improvement is related to rebalancing partitions of different sizes (which can happen because the sizes have to be a multiple of some minimal "chunk" determined by memory page size etc.). Part 0009 deals with that by adjusting the allocations by partition size. It works OK, but it's also true it matters less as the shared_buffers size increases (as the relative difference between large/small partition gets smaller). The other improvements are related to the pg_buffercache_partitions view, showing the weights and (running) totals of allocations. I plan to take a break from this patch series for a while, so this would be a good time to take a look, do a review, run some tests etc. ;-) One detail about the balancing I forgot to mention in my last message is how the patch "distributes" allocations to match the balancing weights. Consider for example the example weights from that message: P1: [ 55, 45] P2: [ 0, 100] Imagine a backend located on P1 requests allocation of a buffer. The weights say 55% buffers should be allocated from P1, and 45% should be redirected to P2. One way to achieve that would be generating a random number in [1, 100], and if it's [1,55] then P1, otherwise P2. The patch does a much simpler thing - treat the weight as a "budget", i.e. number of buffers to allocate before proceeding to the "next" partition. So it allocates 55 buffers from P1, then 45 buffers from P2, and then goes back to P1 in a round-robin way. The advantage is it can do away without a PRNG. There's two things I'm not entirely sure about: 1) memory model - I'm not quite sure the current code ensures updates to weights are properly "communicated" to the other processes. That is, if the bgwriter recalculates the weights, will the other backends see the new weights right away? Using a stale weights won't cause "failures", the consequence is just a bit of imbalance. But it shouldn't stay like that for too long, so maybe it'd be good to add some memory barriers or something like that. 2) I'm a bit unsure what "NUMA nodes" actually means. The patch mostly assumes each core / piece of RAM is assigned to a particular NUMA node. For the buffer partitioning the patch mostly cares about memory, as it "locates" the buffers on different NUMA nodes. Which works mostly OK (ignoring the issues with huge pages described in previous message). But it also cares about the cores (and the node for each core), because it uses that to pick the right partition for a backend. And here the situation is less clear, because the CPUs don't need to be assigned to a particular node, even on a NUMA system. Consider the rpi5 NUMA layout: $ numactl --hardware available: 8 nodes (0-7) node 0 cpus: 0 1 2 3 node 0 size: 992 MB node 0 free: 274 MB node 1 cpus: 0 1 2 3 node 1 size: 1019 MB node 1 free: 327 MB node 2 cpus: 0 1 2 3 node 2 size: 1019 MB node 2 free: 321 MB node 3 cpus: 0 1 2 3 node 3 size: 955 MB node 3 free: 251 MB node 4 cpus: 0 1 2 3 node 4 size: 1019 MB node 4 free: 332 MB node 5 cpus: 0 1 2 3 node 5 size: 1019 MB node 5 free: 342 MB node 6 cpus: 0 1 2 3 node 6 size: 1019 MB node 6 free: 352 MB node 7 cpus: 0 1 2 3 node 7 size: 1014 MB node 7 free: 339 MB node distances: node 0 1 2 3 4 5 6 7 0: 10 10 10 10 10 10 10 10 1: 10 10 10 10 10 10 10 10 2: 10 10 10 10 10 10 10 10 3: 10 10 10 10 10 10 10 10 4: 10 10 10 10 10 10 10 10 5: 10 10 10 10 10 10 10 10 6: 10 10 10 10 10 10 10 10 7: 10 10 10 10 10 10 10 10 This says there are 8 NUMA nodes, each with ~1GB of RAM. But the 4 cores are not assigned to particular nodes - each core is mapped to all 8 NUMA nodes. I'm not sure what to do about this (or how getcpu() or libnuma handle this). And can the situation be even more complicated? regards -- Tomas Vondra --------------8xriSvZLhsgPmdy7CNlM8G85 Content-Type: text/x-patch; charset=UTF-8; name="v20250807-0011-NUMA-pin-backends-to-NUMA-nodes.patch" Content-Disposition: attachment; filename="v20250807-0011-NUMA-pin-backends-to-NUMA-nodes.patch" Content-Transfer-Encoding: base64 RnJvbSA2MzBlNGYwYzljZTk5NWZmNWE5ZjFhYWY2OGU4YzY0ODM2Y2FkZmZiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAyNyBNYXkgMjAyNSAyMzowODo0OCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwODA3IDExLzExXSBOVU1BOiBwaW4gYmFja2VuZHMgdG8gTlVNQSBub2RlcwoKV2hl biBpbml0aWFsaXppbmcgdGhlIGJhY2tlbmQsIHdlIHBpY2sgYSBQR1BST0MgZW50cnkgZnJv bSB0aGUgcmlnaHQKTlVNQSBub2RlIHdoZXJlIHRoZSBiYWNrZW5kIGlzIHJ1bm5pbmcuIEJ1 dCB0aGUgcHJvY2VzcyBjYW4gbW92ZSB0byBhCmRpZmZlcmVudCBjb3JlIC8gbm9kZSwgc28g dG8gcHJldmVudCB0aGF0IHdlIHBpbiBpdC4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jICAgICB8IDIxICsrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv dXRpbHMvaW5pdC9nbG9iYWxzLmMgICAgfCAgMSArCiBzcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYyB8IDEwICsrKysrKysrKysKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5o ICAgICAgICAgICAgIHwgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCsp CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggMTEyNTkxNTFhN2QuLmRiYjRjYmIx YmZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTc2Niw2ICs3NjYsMjcgQEAg SW5pdFByb2Nlc3Modm9pZCkKIAl9CiAJTXlQcm9jTnVtYmVyID0gR2V0TnVtYmVyRnJvbVBH UHJvYyhNeVByb2MpOwogCisJLyoKKwkgKiBPcHRpb25hbGx5LCByZXN0cmljdCB0aGUgcHJv Y2VzcyB0byBvbmx5IHJ1biBvbiBDUFVzIGZyb20gdGhlIHNhbWUgTlVNQQorCSAqIGFzIHRo ZSBQR1BST0MuIFdlIGRvIHRoaXMgZXZlbiBpZiB0aGUgUEdQUk9DIGhhcyBhIGRpZmZlcmVu dCBOVU1BIG5vZGUsCisJICogYnV0IG5vdCBmb3IgUEdQUk9DIGVudHJpZXMgd2l0aG91dCBh IG5vZGUgKGkuZS4gYXV4LzJQQyBlbnRyaWVzKS4KKwkgKgorCSAqIFRoaXMgYWxzbyBtZWFu cyB3ZSBvbmx5IGRvIHRoaXMgd2l0aCBudW1hX3Byb2NzX2ludGVybGVhdmUsIGJlY2F1c2UK KwkgKiB3aXRob3V0IHRoYXQgd2UnbGwgaGF2ZSBudW1hX25vZGU9LTEgZm9yIGFsbCBQR1BS T0MgZW50cmllcy4KKwkgKgorCSAqIEZJWE1FIGFkZCBwcm9wZXIgZXJyb3ItY2hlY2tpbmcg Zm9yIGxpYm51bWEgZnVuY3Rpb25zCisJICovCisJaWYgKG51bWFfcHJvY3NfcGluICYmIE15 UHJvYy0+bnVtYV9ub2RlICE9IC0xKQorCXsKKwkJc3RydWN0IGJpdG1hc2sgKmNwdW1hc2sg PSBudW1hX2FsbG9jYXRlX2NwdW1hc2soKTsKKworCQludW1hX25vZGVfdG9fY3B1cyhNeVBy b2MtPm51bWFfbm9kZSwgY3B1bWFzayk7CisKKwkJbnVtYV9zY2hlZF9zZXRhZmZpbml0eShN eVByb2NQaWQsIGNwdW1hc2spOworCisJCW51bWFfZnJlZV9jcHVtYXNrKGNwdW1hc2spOwor CX0KKwogCS8qCiAJICogQ3Jvc3MtY2hlY2sgdGhhdCB0aGUgUEdQUk9DIGlzIG9mIHRoZSB0 eXBlIHdlIGV4cGVjdDsgaWYgdGhpcyB3ZXJlIG5vdAogCSAqIHRoZSBjYXNlLCBpdCB3b3Vs ZCBnZXQgcmV0dXJuZWQgdG8gdGhlIHdyb25nIGxpc3QuCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xv YmFscy5jCmluZGV4IDZlZTQ2ODRkMWI4Li4zZjg4NjU5YjQ5ZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv aW5pdC9nbG9iYWxzLmMKQEAgLTE1MCw2ICsxNTAsNyBAQCBib29sCQludW1hX2J1ZmZlcnNf aW50ZXJsZWF2ZSA9IGZhbHNlOwogYm9vbAkJbnVtYV9sb2NhbGFsbG9jID0gZmFsc2U7CiBi b29sCQludW1hX3BhcnRpdGlvbl9mcmVlbGlzdCA9IGZhbHNlOwogYm9vbAkJbnVtYV9wcm9j c19pbnRlcmxlYXZlID0gZmFsc2U7Citib29sCQludW1hX3Byb2NzX3BpbiA9IGZhbHNlOwog CiAvKiBHVUMgcGFyYW1ldGVycyBmb3IgdmFjdXVtICovCiBpbnQJCQlWYWN1dW1CdWZmZXJV c2FnZUxpbWl0ID0gMjA0ODsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5k ZXggN2I3MTg3NjAyNDguLjg2MjM0MWUxMzdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y190YWJsZXMuYwpAQCAtMjE1Niw2ICsyMTU2LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBD b25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJewor CQl7Im51bWFfcHJvY3NfcGluIiwgUEdDX1BPU1RNQVNURVIsIERFVkVMT1BFUl9PUFRJT05T LAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHBpbm5pbmcgYmFja2VuZHMgdG8gTlVNQSBu b2RlcyAobWF0Y2hpbmcgdGhlIFBHUFJPQyBub2RlKS4iKSwKKwkJCWdldHRleHRfbm9vcCgi V2hlbiBlbmFibGVkLCBzZXRzIGFmZmluaXR5IHRvIENQVXMgZnJvbSB0aGUgc2FtZSBOVU1B IG5vZGUuIiksCisJCX0sCisJCSZudW1hX3Byb2NzX3BpbiwKKwkJZmFsc2UsCisJCU5VTEws IE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7InN5bmNfcmVwbGljYXRpb25fc2xvdHMiLCBQ R0NfU0lHSFVQLCBSRVBMSUNBVElPTl9TVEFOREJZLAogCQkJZ2V0dGV4dF9ub29wKCJFbmFi bGVzIGEgcGh5c2ljYWwgc3RhbmRieSB0byBzeW5jaHJvbml6ZSBsb2dpY2FsIGZhaWxvdmVy IHJlcGxpY2F0aW9uIHNsb3RzIGZyb20gdGhlIHByaW1hcnkgc2VydmVyLiIpLApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4u aAppbmRleCBjZGVlZThkY2NiYS4uYTk3NzQxYzY3MDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBAIC0xODIs NiArMTgyLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgbnVtYV9idWZmZXJzX2ludGVy bGVhdmU7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBudW1hX2xvY2FsYWxsb2M7CiBleHRl cm4gUEdETExJTVBPUlQgYm9vbCBudW1hX3BhcnRpdGlvbl9mcmVlbGlzdDsKIGV4dGVybiBQ R0RMTElNUE9SVCBib29sIG51bWFfcHJvY3NfaW50ZXJsZWF2ZTsKK2V4dGVybiBQR0RMTElN UE9SVCBib29sIG51bWFfcHJvY3NfcGluOwogCiBleHRlcm4gUEdETExJTVBPUlQgaW50IGNv bW1pdF90aW1lc3RhbXBfYnVmZmVyczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbXVsdGl4 YWN0X21lbWJlcl9idWZmZXJzOwotLSAKMi41MC4xCgo= --------------8xriSvZLhsgPmdy7CNlM8G85 Content-Type: text/x-patch; charset=UTF-8; name="v20250807-0010-NUMA-interleave-PGPROC-entries.patch" Content-Disposition: attachment; filename="v20250807-0010-NUMA-interleave-PGPROC-entries.patch" Content-Transfer-Encoding: base64 RnJvbSBkMmM3ODAxMDExYTM5NGI1YjllMDBkNjBiZjU5ZTc1OWI2NWUxYmVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyMiBNYXkgMjAyNSAxODozOTowOCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwODA3IDEwLzExXSBOVU1BOiBpbnRlcmxlYXZlIFBHUFJPQyBlbnRyaWVzCgpUaGUg Z29hbCBpcyB0byBkaXN0cmlidXRlIFByb2NBcnJheSAob3IgcmF0aGVyIFBHUFJPQyBlbnRy aWVzIGFuZAphc3NvY2lhdGVkIGZhc3QtcGF0aCBhcnJheXMpIHRvIE5VTUEgbm9kZXMuCgpX ZSBjYW4ndCBkbyB0aGlzIGJ5IHNpbXBseSBpbnRlcmxlYXZpbmcgcGFnZXMsIGJlY2F1c2Ug dGhhdCB3b3VsZG4ndAp3b3JrIGZvciBib3RoIHBhcnRzIGF0IHRoZSBzYW1lIHRpbWUuIFdl IHdhbnQgdG8gcGxhY2UgdGhlIFBHUFJPQyBhbmQKaXQncyBmYXN0LXBhdGggbG9ja2luZyBz dHJ1Y3RzIG9uIHRoZSBzYW1lIG5vZGUsIGJ1dCB0aGUgc3RydWN0cyBhcmUKb2YgZGlmZmVy ZW50IHNpemVzLCBldGMuCgpBbm90aGVyIHByb2JsZW0gaXMgdGhhdCBQR1BST0MgZW50cmll cyBhcmUgZmFpcmx5IHNtYWxsLCBzbyB3aXRoIGh1Z2UKcGFnZXMgYW5kIHJlYXNvbmFibGUg dmFsdWVzIG9mIG1heF9jb25uZWN0aW9ucyBldmVyeXRoaW5nIGZpdHMgb250byBhCnNpbmds ZSBwYWdlLiBXZSBkb24ndCB3YW50IHRvIG1ha2UgdGhpcyBpbmNvbXBhdGlibGUgd2l0aCBo dWdlIHBhZ2VzLgoKTm90ZTogSWYgd2UgZXZlbnR1YWxseSBzd2l0Y2ggdG8gYWxsb2NhdGlu ZyBzZXBhcmF0ZSBzaGFyZWQgc2VnbWVudHMgZm9yCmRpZmZlcmVudCBwYXJ0cyAodG8gYWxs b3cgb24tbGluZSByZXNpemluZyksIHdlIGNvdWxkIGtlZXAgdXNpbmcgcmVndWxhcgpwYWdl cyBmb3IgcHJvY2FycmF5LCBhbmQgdGhpcyB3b3VsZCBub3QgYmUgc3VjaCBhbiBpc3N1ZS4K ClRvIG1ha2UgdGhpcyB3b3JrLCB3ZSBzcGxpdCB0aGUgUEdQUk9DIGFycmF5IGludG8gcGVy LW5vZGUgc2VnbWVudHMsCmVhY2ggd2l0aCBhYm91dCAoTWF4QmFja2VuZHMgLyBudW1hX25v ZGVzKSBlbnRyaWVzLCBhbmQgb25lIHNlZ21lbnQgZm9yCmF1eGlsaWFyeSBwcm9jZXNzZXMg YW5kIHByZXBhcmVkIHRyYW5zYXRpb25zLiBBbmQgd2UgZG8gdGhlIHNhbWUgdGhpbmcKZm9y IGZhc3QtcGF0aCBhcnJheXMuCgpUaGUgUEdQUk9DIHNlZ21lbnRzIGFyZSBsYWlkIG91dCBs aWtlIHRoaXMgKGUuZy4gZm9yIDIgTlVNQSBub2Rlcyk6CgogLSBQR1BST0MgYXJyYXkgLyBu b2RlICMwCiAtIFBHUFJPQyBhcnJheSAvIG5vZGUgIzEKIC0gUEdQUk9DIGFycmF5IC8gYXV4 IHByb2Nlc3NlcyArIDJQQyB0cmFuc2FjdGlvbnMKIC0gZmFzdC1wYXRoIGFycmF5cyAvIG5v ZGUgIzAKIC0gZmFzdC1wYXRoIGFycmF5cyAvIG5vZGUgIzEKIC0gZmFzdC1wYXRoIGFycmF5 cyAvIGF1eCBwcm9jZXNzZXMgKyAyUEMgdHJhbnNhY3Rpb24KCkVhY2ggc2VnbWVudCBpcyBh bGlnbmVkIHRvIChzdGFydHMgYXQpIG1lbW9yeSBwYWdlLCBhbmQgaXMgZWZmZWN0aXZlbHkg YQptdWx0aXBsZSBvZiBtdWx0aXBsZSBtZW1vcnkgcGFnZXMuCgpIYXZpbmcgYSBzaW5nbGUg UEdQUk9DIGFycmF5IG1hZGUgY2VydGFpbiBvcGVyYXRpb25zIGVhc2llcnMgLSBlLmcuIGl0 CndhcyBwb3NzaWJsZSB0byBpdGVyYXRlIHRoZSBhcnJheSwgYW5kIEdldE51bWJlckZyb21Q R1Byb2MoKSBjb3VsZApjYWxjdWxhdGUgb2Zmc2V0IGJ5IHNpbXBseSBzdWJ0cmFjdGluZyBQ R1BST0MgcG9pbnRlcnMuIFdpdGggbXVsdGlwbGUKc2VnbWVudHMgdGhhdCdzIG5vdCBwb3Nz aWJsZSwgYnV0IHRoZSBmYWxsb3V0IGlzIG1pbmltYWwuCgpNb3N0IHBsYWNlcyBhY2Nlc3Nl ZCBQR1BST0MgdGhyb3VnaCBQUk9DX0hEUi0+YWxsUHJvY3MsIGFuZCBjYW4gY29udGludWUK dG8gZG8gc28sIGV4Y2VwdCB0aGF0IG5vdyB0aGV5IGdldCBhIHBvaW50ZXIgdG8gdGhlIFBH UFJPQyAod2hpY2ggbW9zdApwbGFjZXMgd2FudGVkIGFueXdheSkuCgpXaXRoIHRoZSBmZWF0 dXJlIGRpc2FibGVkLCB0aGVyZSdzIG9ubHkgYSBzaW5nbGUgInBhcnRpdGlvbiIgZm9yIGFs bApQR1BST0MgZW50cmllcy4KClNpbWlsYXJseSB0byB0aGUgYnVmZmVyIHBhcnRpdGlvbmlu ZywgdGhpcyBpbnRyb2R1Y2VzIGEgc21hbGwgInJlZ2lzdHJ5IgpvZiBwYXJ0aXRpb25zLCBh cyBhIHNvdXJjZSBvZiB0cnV0aC4gQW5kIHRoZW4gYWxzbyBhIG5ldyAic3lzdGVtIiB2aWV3 CiJwZ19idWZmZXJjYWNoZV9wZ3Byb2MiIHNob3dpbmcgYmFzaWMgaW5mcm9tYXRpb24gYWJv dXV0IHRoZSBwYXJ0aXRpb25zLgoKTm90ZTogVGhlcmUncyBhbiBpbmRpcmVjdGlvbiwgdGhv dWdoLiBCdXQgdGhlIHBvaW50ZXIgZG9lcyBub3QgY2hhbmdlLApzbyBob3BlZnVsbHkgdGhh dCdzIG5vdCBhbiBpc3N1ZS4gQW5kIGVhY2ggUEdQUk9DIGVudHJ5IGdldHMgYW4gZXhwbGlj aXQKcHJvY251bWJlciBmaWVsZCwgd2hpY2ggaXMgdGhlIGluZGV4IGluIGFsbFByb2NzLCBH ZXROdW1iZXJGcm9tUEdQcm9jCmNhbiBzaW1wbHkgcmV0dXJuIHRoYXQuCgpFYWNoIFBHUFJP QyBhbHNvIGdldHMgbnVtYV9ub2RlLCB0cmFja2luZyB0aGUgTlVNQSBub2RlLCBzbyB0aGF0 IHdlCmRvbid0IGhhdmUgdG8gcmVjYWxjdWxhdGUgdGhhdC4gVGhpcyBpcyB1c2VkIGJ5IElu aXRQcm9jZXNzKCkgdG8gcGljawphIFBHUFJPQyBlbnRyeSBmcm9tIHRoZSBsb2NhbCBOVU1B IG5vZGUuCgpOb3RlOiBUaGUgc2NoZWR1bGVyIG1heSBtaWdyYXRlIHRoZSBwcm9jZXNzIHRv IGEgZGlmZmVyZW50IENQVS9ub2RlCmxhdGVyLiBNYXliZSB3ZSBzaG91bGQgY29uc2lkZXIg cGlubmluZyB0aGUgcHJvY2VzcyB0byB0aGUgbm9kZT8KLS0tCiAuLi4vcGdfYnVmZmVyY2Fj aGUtLTEuNi0tMS43LnNxbCAgICAgICAgICAgICAgfCAgMTkgKwogY29udHJpYi9wZ19idWZm ZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jIHwgIDk0ICsrKwogc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vY2xvZy5jICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3BnYXJjaC5jICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jICAgICAgICB8ICAgMiArLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyAgICAgICAgIHwgICAyIC0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAgICB8ICAgMiArLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAgICAgICAgIHwgIDYzICstCiBz cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jICAgICAgICAgICAgICAgfCAgIDYgKy0K IHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgICAgICAgICAgICAgICB8IDU2NSAr KysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMu YyAgICAgICAgICAgfCAgMTAgKwogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oICAgICAg ICAgICAgICAgICAgICB8ICAxNCArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgICAgICAgICAgICAgIHwgICAxICsKIDE1IGZpbGVzIGNoYW5nZWQsIDcyMiBpbnNlcnRp b25zKCspLCA2NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2J1ZmZl cmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwgYi9jb250cmliL3BnX2J1ZmZl cmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKaW5kZXggNWFjYWUzMWI4MzYu LmJhNTRmNjllZWI0IDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1 ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9w Z19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCkBAIC0zOCwzICszOCwyMiBAQCBSRVZPS0Ug QUxMIE9OIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMgRlJPTSBQVUJMSUM7CiAKIEdSQU5U IEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucygpIFRPIHBn X21vbml0b3I7CiBHUkFOVCBTRUxFQ1QgT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyBU TyBwZ19tb25pdG9yOworCistLSBSZWdpc3RlciB0aGUgbmV3IGZ1bmN0aW9ucy4KK0NSRUFU RSBPUiBSRVBMQUNFIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3BncHJvYygpCitSRVRVUk5T IFNFVE9GIFJFQ09SRAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19idWZmZXJjYWNoZV9w Z3Byb2MnCitMQU5HVUFHRSBDIFBBUkFMTEVMIFNBRkU7CisKKy0tIENyZWF0ZSBhIHZpZXcg Zm9yIGNvbnZlbmllbnQgYWNjZXNzLgorQ1JFQVRFIFZJRVcgcGdfYnVmZmVyY2FjaGVfcGdw cm9jIEFTCisJU0VMRUNUIFAuKiBGUk9NIHBnX2J1ZmZlcmNhY2hlX3BncHJvYygpIEFTIFAK KwkocGFydGl0aW9uIGludGVnZXIsCisJIG51bWFfbm9kZSBpbnRlZ2VyLCBudW1fcHJvY3Mg aW50ZWdlciwgcGdwcm9jX3B0ciBiaWdpbnQsIGZhc3RwYXRoX3B0ciBiaWdpbnQpOworCist LSBEb24ndCB3YW50IHRoZXNlIHRvIGJlIGF2YWlsYWJsZSB0byBwdWJsaWMuCitSRVZPS0Ug QUxMIE9OIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3BncHJvYygpIEZST00gUFVCTElDOwor UkVWT0tFIEFMTCBPTiBwZ19idWZmZXJjYWNoZV9wZ3Byb2MgRlJPTSBQVUJMSUM7CisKK0dS QU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGdwcm9jKCkgVE8gcGdf bW9uaXRvcjsKK0dSQU5UIFNFTEVDVCBPTiBwZ19idWZmZXJjYWNoZV9wZ3Byb2MgVE8gcGdf bW9uaXRvcjsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVy Y2FjaGVfcGFnZXMuYyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVf cGFnZXMuYwppbmRleCAxMzAxNDU0OWQwMC4uZWUzYWE4YmUyY2UgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYworKysgYi9jb250 cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKQEAgLTE1LDYgKzE1 LDcgQEAKICNpbmNsdWRlICJwb3J0L3BnX251bWEuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgorI2luY2x1ZGUg InN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKQEAgLTMwLDYgKzMx LDcgQEAKIAogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfTlVNQV9FTEVNCTMKICNkZWZpbmUg TlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTQkxNQorI2RlZmluZSBOVU1fQlVGRkVS Q0FDSEVfUEdQUk9DX0VMRU0JNQogCiBQR19NT0RVTEVfTUFHSUNfRVhUKAogCQkJCQkubmFt ZSA9ICJwZ19idWZmZXJjYWNoZSIsCkBAIC0xMDQsNiArMTA2LDcgQEAgUEdfRlVOQ1RJT05f SU5GT19WMShwZ19idWZmZXJjYWNoZV9ldmljdCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBn X2J1ZmZlcmNhY2hlX2V2aWN0X3JlbGF0aW9uKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdf YnVmZmVyY2FjaGVfZXZpY3RfYWxsKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfYnVmZmVy Y2FjaGVfcGFydGl0aW9ucyk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hl X3BncHJvYyk7CiAKIAogLyogT25seSBuZWVkIHRvIHRvdWNoIG1lbW9yeSBvbmNlIHBlciBi YWNrZW5kIHByb2Nlc3MgbGlmZXRpbWUgKi8KQEAgLTk0NiwzICs5NDksOTQgQEAgcGdfYnVm ZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCWVsc2UKIAkJU1JGX1JF VFVSTl9ET05FKGZ1bmNjdHgpOwogfQorCisvKgorICogSW5xdWlyZSBhYm91dCBwYXJ0aXRp b25pbmcgb2YgUEdQUk9DIGFycmF5LgorICovCitEYXR1bQorcGdfYnVmZmVyY2FjaGVfcGdw cm9jKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4Owor CU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlUdXBsZURlc2MJdHVwbGVkZXNjOworCVR1 cGxlRGVzYwlleHBlY3RlZF90dXBsZWRlc2M7CisJSGVhcFR1cGxlCXR1cGxlOworCURhdHVt CQlyZXN1bHQ7CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJZnVuY2N0eCA9 IFNSRl9GSVJTVENBTExfSU5JVCgpOworCisJCS8qIFN3aXRjaCBjb250ZXh0IHdoZW4gYWxs b2NhdGluZyBzdHVmZiB0byBiZSB1c2VkIGluIGxhdGVyIGNhbGxzICovCisJCW9sZGNvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlf Y3R4KTsKKworCQlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5cGUoZmNpbmZvLCBOVUxMLCAmZXhw ZWN0ZWRfdHVwbGVkZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUpCisJCQllbG9nKEVSUk9S LCAicmV0dXJuIHR5cGUgbXVzdCBiZSBhIHJvdyB0eXBlIik7CisKKwkJaWYgKGV4cGVjdGVk X3R1cGxlZGVzYy0+bmF0dHMgIT0gTlVNX0JVRkZFUkNBQ0hFX1BHUFJPQ19FTEVNKQorCQkJ ZWxvZyhFUlJPUiwgImluY29ycmVjdCBudW1iZXIgb2Ygb3V0cHV0IGFyZ3VtZW50cyIpOwor CisJCS8qIENvbnN0cnVjdCBhIHR1cGxlIGRlc2NyaXB0b3IgZm9yIHRoZSByZXN1bHQgcm93 cy4gKi8KKwkJdHVwbGVkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoZXhwZWN0ZWRf dHVwbGVkZXNjLT5uYXR0cyk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChB dHRyTnVtYmVyKSAxLCAicGFydGl0aW9uIiwKKwkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsK KwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDIsICJudW1h X25vZGUiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50 cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMywgIm51bV9wcm9jcyIsCisJCQkJCQkgICBJ TlQ0T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRy TnVtYmVyKSA0LCAicGdwcm9jX3B0ciIsCisJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisJ CVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA1LCAiZmFzdHBh dGhfcHRyIiwKKwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKKworCQlmdW5jY3R4LT51c2Vy X2ZjdHggPSBCbGVzc1R1cGxlRGVzYyh0dXBsZWRlc2MpOworCisJCS8qIFJldHVybiB0byBv cmlnaW5hbCBjb250ZXh0IHdoZW4gYWxsb2NhdGluZyB0cmFuc2llbnQgbWVtb3J5ICovCisJ CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCQkvKiBTZXQgbWF4IGNh bGxzIGFuZCByZW1lbWJlciB0aGUgdXNlciBmdW5jdGlvbiBjb250ZXh0LiAqLworCQlmdW5j Y3R4LT5tYXhfY2FsbHMgPSBQcm9jUGFydGl0aW9uQ291bnQoKTsKKwl9CisKKwlmdW5jY3R4 ID0gU1JGX1BFUkNBTExfU0VUVVAoKTsKKworCWlmIChmdW5jY3R4LT5jYWxsX2NudHIgPCBm dW5jY3R4LT5tYXhfY2FsbHMpCisJeworCQl1aW50MzIJCWkgPSBmdW5jY3R4LT5jYWxsX2Nu dHI7CisKKwkJaW50CQkJbnVtYV9ub2RlLAorCQkJCQludW1fcHJvY3M7CisKKwkJdm9pZAkg ICAqcGdwcm9jX3B0ciwKKwkJCQkgICAqZmFzdHBhdGhfcHRyOworCisJCURhdHVtCQl2YWx1 ZXNbTlVNX0JVRkZFUkNBQ0hFX1BHUFJPQ19FTEVNXTsKKwkJYm9vbAkJbnVsbHNbTlVNX0JV RkZFUkNBQ0hFX1BHUFJPQ19FTEVNXTsKKworCQlQcm9jUGFydGl0aW9uR2V0KGksICZudW1h X25vZGUsICZudW1fcHJvY3MsCisJCQkJCQkgJnBncHJvY19wdHIsICZmYXN0cGF0aF9wdHIp OworCisJCXZhbHVlc1swXSA9IEludDMyR2V0RGF0dW0oaSk7CisJCW51bGxzWzBdID0gZmFs c2U7CisKKwkJdmFsdWVzWzFdID0gSW50MzJHZXREYXR1bShudW1hX25vZGUpOworCQludWxs c1sxXSA9IGZhbHNlOworCisJCXZhbHVlc1syXSA9IEludDMyR2V0RGF0dW0obnVtX3Byb2Nz KTsKKwkJbnVsbHNbMl0gPSBmYWxzZTsKKworCQl2YWx1ZXNbM10gPSBQb2ludGVyR2V0RGF0 dW0ocGdwcm9jX3B0cik7CisJCW51bGxzWzNdID0gZmFsc2U7CisKKwkJdmFsdWVzWzRdID0g UG9pbnRlckdldERhdHVtKGZhc3RwYXRoX3B0cik7CisJCW51bGxzWzRdID0gZmFsc2U7CisK KwkJLyogQnVpbGQgYW5kIHJldHVybiB0aGUgdHVwbGUuICovCisJCXR1cGxlID0gaGVhcF9m b3JtX3R1cGxlKChUdXBsZURlc2MpIGZ1bmNjdHgtPnVzZXJfZmN0eCwgdmFsdWVzLCBudWxs cyk7CisJCXJlc3VsdCA9IEhlYXBUdXBsZUdldERhdHVtKHR1cGxlKTsKKworCQlTUkZfUkVU VVJOX05FWFQoZnVuY2N0eCwgcmVzdWx0KTsKKwl9CisJZWxzZQorCQlTUkZfUkVUVVJOX0RP TkUoZnVuY2N0eCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9jbG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKaW5kZXggZTgw ZmJlMTA5Y2YuLjkyOGQxMjZkMGVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9jbG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5j CkBAIC01NzQsNyArNTc0LDcgQEAgVHJhbnNhY3Rpb25Hcm91cFVwZGF0ZVhpZFN0YXR1cyhU cmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywKIAkvKiBXYWxrIHRoZSBsaXN0 IGFuZCB1cGRhdGUgdGhlIHN0YXR1cyBvZiBhbGwgWElEcy4gKi8KIAl3aGlsZSAobmV4dGlk eCAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQogCXsKLQkJUEdQUk9DCSAgICpuZXh0cHJvYyA9 ICZQcm9jR2xvYmFsLT5hbGxQcm9jc1tuZXh0aWR4XTsKKwkJUEdQUk9DCSAgICpuZXh0cHJv YyA9IFByb2NHbG9iYWwtPmFsbFByb2NzW25leHRpZHhdOwogCQlpbnQ2NAkJdGhpc3BhZ2Vu byA9IG5leHRwcm9jLT5jbG9nR3JvdXBNZW1iZXJQYWdlOwogCiAJCS8qCkBAIC02MzMsNyAr NjMzLDcgQEAgVHJhbnNhY3Rpb25Hcm91cFVwZGF0ZVhpZFN0YXR1cyhUcmFuc2FjdGlvbklk IHhpZCwgWGlkU3RhdHVzIHN0YXR1cywKIAkgKi8KIAl3aGlsZSAod2FrZWlkeCAhPSBJTlZB TElEX1BST0NfTlVNQkVSKQogCXsKLQkJUEdQUk9DCSAgICp3YWtlcHJvYyA9ICZQcm9jR2xv YmFsLT5hbGxQcm9jc1t3YWtlaWR4XTsKKwkJUEdQUk9DCSAgICp3YWtlcHJvYyA9IFByb2NH bG9iYWwtPmFsbFByb2NzW3dha2VpZHhdOwogCiAJCXdha2VpZHggPSBwZ19hdG9taWNfcmVh ZF91MzIoJndha2Vwcm9jLT5jbG9nR3JvdXBOZXh0KTsKIAkJcGdfYXRvbWljX3dyaXRlX3Uz Migmd2FrZXByb2MtPmNsb2dHcm91cE5leHQsIElOVkFMSURfUFJPQ19OVU1CRVIpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcGdhcmNoLmMKaW5kZXggNzhlMzllNWY4NjYuLmUyOGUwZjdkM2JkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKQEAgLTI4OSw3ICsyODksNyBAQCBQZ0FyY2hX YWtldXAodm9pZCkKIAkgKiBiZSByZWxhdW5jaGVkIHNob3J0bHkgYW5kIHdpbGwgc3RhcnQg YXJjaGl2aW5nLgogCSAqLwogCWlmIChhcmNoX3BncHJvY25vICE9IElOVkFMSURfUFJPQ19O VU1CRVIpCi0JCVNldExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQcm9jc1thcmNoX3BncHJvY25v XS5wcm9jTGF0Y2gpOworCQlTZXRMYXRjaCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbYXJjaF9w Z3Byb2Nub10tPnByb2NMYXRjaCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dh bHN1bW1hcml6ZXIuYwppbmRleCA3NzdjOWE4ZDU1NS4uMDg3Mjc5YTZhOGUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jCkBAIC02NDksNyArNjQ5LDcgQEAg V2FrZXVwV2FsU3VtbWFyaXplcih2b2lkKQogCUxXTG9ja1JlbGVhc2UoV0FMU3VtbWFyaXpl ckxvY2spOwogCiAJaWYgKHBncHJvY25vICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCi0JCVNl dExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQcm9jc1twZ3Byb2Nub10ucHJvY0xhdGNoKTsKKwkJ U2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW3BncHJvY25vXS0+cHJvY0xhdGNoKTsK IH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9p bml0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCmluZGV4IDVi NjVhODU1YjI5Li5mYjUyMDM5ZTFhNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvYnVmX2luaXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9i dWZfaW5pdC5jCkBAIC01MDAsOCArNTAwLDYgQEAgYnVmZmVyX3BhcnRpdGlvbnNfcHJlcGFy ZSh2b2lkKQogCWlmIChudW1hX25vZGVzIDwgMSkKIAkJbnVtYV9ub2RlcyA9IDE7CiAKLQll bG9nKFdBUk5JTkcsICJJc1VuZGVyUG9zdG1hc3RlciAlZCIsIElzVW5kZXJQb3N0bWFzdGVy KTsKLQogCS8qCiAJICogWFhYIEEgYml0IHdlaXJkLiBEbyB3ZSBuZWVkIHRvIHdvcnJ5IGFi b3V0IHBvc3RtYXN0ZXI/IENvdWxkIHRoaXMgZXZlbgogCSAqIHJ1biBvdXRzaWRlIHBvc3Rt YXN0ZXI/IEkgZG9uJ3QgdGhpbmsgc28uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJl ZWxpc3QuYwppbmRleCBiYmUyOWJjOTcyOS4uODc4ZDFlMzNmNjEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtNTEwLDcgKzUxMCw3IEBAIFN0cmF0ZWd5 R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50MzIgKmJ1Zl9z dGF0ZSwgYm9vbCAqZnJvbV9yCiAJCSAqIGFjdHVhbGx5IGZpbmUgYmVjYXVzZSBwcm9jTGF0 Y2ggaXNuJ3QgZXZlciBmcmVlZCwgc28gd2UganVzdCBjYW4KIAkJICogcG90ZW50aWFsbHkg c2V0IHRoZSB3cm9uZyBwcm9jZXNzJyAob3Igbm8gcHJvY2VzcycpIGxhdGNoLgogCQkgKi8K LQkJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW2Jnd3Byb2Nub10ucHJvY0xhdGNo KTsKKwkJU2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW2Jnd3Byb2Nub10tPnByb2NM YXRjaCk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NhcnJheS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKaW5k ZXggYmY5ODdhZWQ4ZDMuLjNlODZlNGNhMmFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9wcm9jYXJyYXkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w cm9jYXJyYXkuYwpAQCAtMjY4LDcgKzI2OCw3IEBAIHR5cGVkZWYgZW51bSBLQVhDb21wcmVz c1JlYXNvbgogCiBzdGF0aWMgUHJvY0FycmF5U3RydWN0ICpwcm9jQXJyYXk7CiAKLXN0YXRp YyBQR1BST0MgKmFsbFByb2NzOworc3RhdGljIFBHUFJPQyAqKmFsbFByb2NzOwogCiAvKgog ICogQ2FjaGUgdG8gcmVkdWNlIG92ZXJoZWFkIG9mIHJlcGVhdGVkIGNhbGxzIHRvIFRyYW5z YWN0aW9uSWRJc0luUHJvZ3Jlc3MoKQpAQCAtNTAyLDcgKzUwMiw3IEBAIFByb2NBcnJheUFk ZChQR1BST0MgKnByb2MpCiAJCWludAkJCXRoaXNfcHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nu b3NbaW5kZXhdOwogCiAJCUFzc2VydCh0aGlzX3Byb2NubyA+PSAwICYmIHRoaXNfcHJvY25v IDwgKGFycmF5UC0+bWF4UHJvY3MgKyBOVU1fQVVYSUxJQVJZX1BST0NTKSk7Ci0JCUFzc2Vy dChhbGxQcm9jc1t0aGlzX3Byb2Nub10ucGd4YWN0b2ZmID09IGluZGV4KTsKKwkJQXNzZXJ0 KGFsbFByb2NzW3RoaXNfcHJvY25vXS0+cGd4YWN0b2ZmID09IGluZGV4KTsKIAogCQkvKiBJ ZiB3ZSBoYXZlIGZvdW5kIG91ciByaWdodCBwb3NpdGlvbiBpbiB0aGUgYXJyYXksIGJyZWFr ICovCiAJCWlmICh0aGlzX3Byb2NubyA+IHBncHJvY25vKQpAQCAtNTM4LDkgKzUzOCw5IEBA IFByb2NBcnJheUFkZChQR1BST0MgKnByb2MpCiAJCWludAkJCXByb2NubyA9IGFycmF5UC0+ cGdwcm9jbm9zW2luZGV4XTsKIAogCQlBc3NlcnQocHJvY25vID49IDAgJiYgcHJvY25vIDwg KGFycmF5UC0+bWF4UHJvY3MgKyBOVU1fQVVYSUxJQVJZX1BST0NTKSk7Ci0JCUFzc2VydChh bGxQcm9jc1twcm9jbm9dLnBneGFjdG9mZiA9PSBpbmRleCAtIDEpOworCQlBc3NlcnQoYWxs UHJvY3NbcHJvY25vXS0+cGd4YWN0b2ZmID09IGluZGV4IC0gMSk7CiAKLQkJYWxsUHJvY3Nb cHJvY25vXS5wZ3hhY3RvZmYgPSBpbmRleDsKKwkJYWxsUHJvY3NbcHJvY25vXS0+cGd4YWN0 b2ZmID0gaW5kZXg7CiAJfQogCiAJLyoKQEAgLTU4MSw3ICs1ODEsNyBAQCBQcm9jQXJyYXlS ZW1vdmUoUEdQUk9DICpwcm9jLCBUcmFuc2FjdGlvbklkIGxhdGVzdFhpZCkKIAlteW9mZiA9 IHByb2MtPnBneGFjdG9mZjsKIAogCUFzc2VydChteW9mZiA+PSAwICYmIG15b2ZmIDwgYXJy YXlQLT5udW1Qcm9jcyk7Ci0JQXNzZXJ0KFByb2NHbG9iYWwtPmFsbFByb2NzW2FycmF5UC0+ cGdwcm9jbm9zW215b2ZmXV0ucGd4YWN0b2ZmID09IG15b2ZmKTsKKwlBc3NlcnQoUHJvY0ds b2JhbC0+YWxsUHJvY3NbYXJyYXlQLT5wZ3Byb2Nub3NbbXlvZmZdXS0+cGd4YWN0b2ZmID09 IG15b2ZmKTsKIAogCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZChsYXRlc3RYaWQpKQogCXsK QEAgLTYzNiw5ICs2MzYsOSBAQCBQcm9jQXJyYXlSZW1vdmUoUEdQUk9DICpwcm9jLCBUcmFu c2FjdGlvbklkIGxhdGVzdFhpZCkKIAkJaW50CQkJcHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nu b3NbaW5kZXhdOwogCiAJCUFzc2VydChwcm9jbm8gPj0gMCAmJiBwcm9jbm8gPCAoYXJyYXlQ LT5tYXhQcm9jcyArIE5VTV9BVVhJTElBUllfUFJPQ1MpKTsKLQkJQXNzZXJ0KGFsbFByb2Nz W3Byb2Nub10ucGd4YWN0b2ZmIC0gMSA9PSBpbmRleCk7CisJCUFzc2VydChhbGxQcm9jc1tw cm9jbm9dLT5wZ3hhY3RvZmYgLSAxID09IGluZGV4KTsKIAotCQlhbGxQcm9jc1twcm9jbm9d LnBneGFjdG9mZiA9IGluZGV4OworCQlhbGxQcm9jc1twcm9jbm9dLT5wZ3hhY3RvZmYgPSBp bmRleDsKIAl9CiAKIAkvKgpAQCAtODYwLDcgKzg2MCw3IEBAIFByb2NBcnJheUdyb3VwQ2xl YXJYaWQoUEdQUk9DICpwcm9jLCBUcmFuc2FjdGlvbklkIGxhdGVzdFhpZCkKIAkvKiBXYWxr IHRoZSBsaXN0IGFuZCBjbGVhciBhbGwgWElEcy4gKi8KIAl3aGlsZSAobmV4dGlkeCAhPSBJ TlZBTElEX1BST0NfTlVNQkVSKQogCXsKLQkJUEdQUk9DCSAgICpuZXh0cHJvYyA9ICZhbGxQ cm9jc1tuZXh0aWR4XTsKKwkJUEdQUk9DCSAgICpuZXh0cHJvYyA9IGFsbFByb2NzW25leHRp ZHhdOwogCiAJCVByb2NBcnJheUVuZFRyYW5zYWN0aW9uSW50ZXJuYWwobmV4dHByb2MsIG5l eHRwcm9jLT5wcm9jQXJyYXlHcm91cE1lbWJlclhpZCk7CiAKQEAgLTg4MCw3ICs4ODAsNyBA QCBQcm9jQXJyYXlHcm91cENsZWFyWGlkKFBHUFJPQyAqcHJvYywgVHJhbnNhY3Rpb25JZCBs YXRlc3RYaWQpCiAJICovCiAJd2hpbGUgKHdha2VpZHggIT0gSU5WQUxJRF9QUk9DX05VTUJF UikKIAl7Ci0JCVBHUFJPQwkgICAqbmV4dHByb2MgPSAmYWxsUHJvY3Nbd2FrZWlkeF07CisJ CVBHUFJPQwkgICAqbmV4dHByb2MgPSBhbGxQcm9jc1t3YWtlaWR4XTsKIAogCQl3YWtlaWR4 ID0gcGdfYXRvbWljX3JlYWRfdTMyKCZuZXh0cHJvYy0+cHJvY0FycmF5R3JvdXBOZXh0KTsK IAkJcGdfYXRvbWljX3dyaXRlX3UzMigmbmV4dHByb2MtPnByb2NBcnJheUdyb3VwTmV4dCwg SU5WQUxJRF9QUk9DX05VTUJFUik7CkBAIC0xNTI2LDcgKzE1MjYsNyBAQCBUcmFuc2FjdGlv bklkSXNJblByb2dyZXNzKFRyYW5zYWN0aW9uSWQgeGlkKQogCQlweGlkcyA9IG90aGVyX3N1 YnhpZHN0YXRlc1twZ3hhY3RvZmZdLmNvdW50OwogCQlwZ19yZWFkX2JhcnJpZXIoKTsJCS8q IHBhaXJzIHdpdGggYmFycmllciBpbiBHZXROZXdUcmFuc2FjdGlvbklkKCkgKi8KIAkJcGdw cm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1twZ3hhY3RvZmZdOwotCQlwcm9jID0gJmFsbFBy b2NzW3BncHJvY25vXTsKKwkJcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAkJZm9yIChq ID0gcHhpZHMgLSAxOyBqID49IDA7IGotLSkKIAkJewogCQkJLyogRmV0Y2ggeGlkIGp1c3Qg b25jZSAtIHNlZSBHZXROZXdUcmFuc2FjdGlvbklkICovCkBAIC0xNjIyLDcgKzE2MjIsNiBA QCBUcmFuc2FjdGlvbklkSXNJblByb2dyZXNzKFRyYW5zYWN0aW9uSWQgeGlkKQogCXJldHVy biBmYWxzZTsKIH0KIAotCiAvKgogICogRGV0ZXJtaW5lIFhJRCBob3Jpem9ucy4KICAqCkBA IC0xNzQwLDcgKzE3MzksNyBAQCBDb21wdXRlWGlkSG9yaXpvbnMoQ29tcHV0ZVhpZEhvcml6 b25zUmVzdWx0ICpoKQogCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51 bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJv Y25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107 CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAkJaW50OAkJc3Rh dHVzRmxhZ3MgPSBQcm9jR2xvYmFsLT5zdGF0dXNGbGFnc1tpbmRleF07CiAJCVRyYW5zYWN0 aW9uSWQgeGlkOwogCQlUcmFuc2FjdGlvbklkIHhtaW47CkBAIC0yMjI0LDcgKzIyMjMsNyBA QCBHZXRTbmFwc2hvdERhdGEoU25hcHNob3Qgc25hcHNob3QpCiAJCQlUcmFuc2FjdGlvbklk IHhpZCA9IFVJTlQzMl9BQ0NFU1NfT05DRShvdGhlcl94aWRzW3BneGFjdG9mZl0pOwogCQkJ dWludDgJCXN0YXR1c0ZsYWdzOwogCi0JCQlBc3NlcnQoYWxsUHJvY3NbYXJyYXlQLT5wZ3By b2Nub3NbcGd4YWN0b2ZmXV0ucGd4YWN0b2ZmID09IHBneGFjdG9mZik7CisJCQlBc3NlcnQo YWxsUHJvY3NbYXJyYXlQLT5wZ3Byb2Nub3NbcGd4YWN0b2ZmXV0tPnBneGFjdG9mZiA9PSBw Z3hhY3RvZmYpOwogCiAJCQkvKgogCQkJICogSWYgdGhlIHRyYW5zYWN0aW9uIGhhcyBubyBY SUQgYXNzaWduZWQsIHdlIGNhbiBza2lwIGl0OyBpdApAQCAtMjI5OCw3ICsyMjk3LDcgQEAg R2V0U25hcHNob3REYXRhKFNuYXBzaG90IHNuYXBzaG90KQogCQkJCQlpZiAobnN1YnhpZHMg PiAwKQogCQkJCQl7CiAJCQkJCQlpbnQJCQlwZ3Byb2NubyA9IHBncHJvY25vc1twZ3hhY3Rv ZmZdOwotCQkJCQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJ CQkJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQkJCQkJcGdf cmVhZF9iYXJyaWVyKCk7CS8qIHBhaXJzIHdpdGggR2V0TmV3VHJhbnNhY3Rpb25JZCAqLwog CkBAIC0yNDk5LDcgKzI0OTgsNyBAQCBQcm9jQXJyYXlJbnN0YWxsSW1wb3J0ZWRYbWluKFRy YW5zYWN0aW9uSWQgeG1pbiwKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51 bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJv Y25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107 CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAkJaW50CQkJc3Rh dHVzRmxhZ3MgPSBQcm9jR2xvYmFsLT5zdGF0dXNGbGFnc1tpbmRleF07CiAJCVRyYW5zYWN0 aW9uSWQgeGlkOwogCkBAIC0yNzI1LDcgKzI3MjQsNyBAQCBHZXRSdW5uaW5nVHJhbnNhY3Rp b25EYXRhKHZvaWQpCiAJCWlmIChUcmFuc2FjdGlvbklkUHJlY2VkZXMoeGlkLCBvbGRlc3RE YXRhYmFzZVJ1bm5pbmdYaWQpKQogCQl7CiAJCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+ cGdwcm9jbm9zW2luZGV4XTsKLQkJCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3By b2Nub107CisJCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJ CWlmIChwcm9jLT5kYXRhYmFzZUlkID09IE15RGF0YWJhc2VJZCkKIAkJCQlvbGRlc3REYXRh YmFzZVJ1bm5pbmdYaWQgPSB4aWQ7CkBAIC0yNzU2LDcgKzI3NTUsNyBAQCBHZXRSdW5uaW5n VHJhbnNhY3Rpb25EYXRhKHZvaWQpCiAJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5 UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJCXsKIAkJCWludAkJCXBncHJvY25vID0gYXJyYXlQ LT5wZ3Byb2Nub3NbaW5kZXhdOwotCQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3Bn cHJvY25vXTsKKwkJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAkJ CWludAkJCW5zdWJ4aWRzOwogCiAJCQkvKgpAQCAtMjg1OCw3ICsyODU3LDcgQEAgR2V0T2xk ZXN0QWN0aXZlVHJhbnNhY3Rpb25JZChib29sIGluQ29tbWl0T25seSwgYm9vbCBhbGxEYnMp CiAJewogCQlUcmFuc2FjdGlvbklkIHhpZDsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAt PnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3By b2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQkv KiBGZXRjaCB4aWQganVzdCBvbmNlIC0gc2VlIEdldE5ld1RyYW5zYWN0aW9uSWQgKi8KIAkJ eGlkID0gVUlOVDMyX0FDQ0VTU19PTkNFKG90aGVyX3hpZHNbaW5kZXhdKTsKQEAgLTMwMjAs NyArMzAxOSw3IEBAIEdldFZpcnR1YWxYSURzRGVsYXlpbmdDaGtwdChpbnQgKm52eGlkcywg aW50IHR5cGUpCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsg aW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5k ZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BS T0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJaWYgKChwcm9jLT5kZWxh eUNoa3B0RmxhZ3MgJiB0eXBlKSAhPSAwKQogCQl7CkBAIC0zMDYxLDcgKzMwNjAsNyBAQCBI YXZlVmlydHVhbFhJRHNEZWxheWluZ0Noa3B0KFZpcnR1YWxUcmFuc2FjdGlvbklkICp2eGlk cywgaW50IG52eGlkcywgaW50IHR5cGUpCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJy YXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQ LT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdw cm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCVZp cnR1YWxUcmFuc2FjdGlvbklkIHZ4aWQ7CiAKIAkJR0VUX1ZYSURfRlJPTV9QR1BST0Modnhp ZCwgKnByb2MpOwpAQCAtMzE4OSw3ICszMTg4LDcgQEAgQmFja2VuZFBpZEdldFByb2NXaXRo TG9jayhpbnQgcGlkKQogCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Q cm9jczsgaW5kZXgrKykKIAl7Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1thcnJh eVAtPnBncHJvY25vc1tpbmRleF1dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1th cnJheVAtPnBncHJvY25vc1tpbmRleF1dOwogCiAJCWlmIChwcm9jLT5waWQgPT0gcGlkKQog CQl7CkBAIC0zMjMyLDcgKzMyMzEsNyBAQCBCYWNrZW5kWGlkR2V0UGlkKFRyYW5zYWN0aW9u SWQgeGlkKQogCQlpZiAob3RoZXJfeGlkc1tpbmRleF0gPT0geGlkKQogCQl7CiAJCQlpbnQJ CQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJCVBHUFJPQwkgICAq cHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCQlQR1BST0MJICAgKnByb2MgPSBhbGxQ cm9jc1twZ3Byb2Nub107CiAKIAkJCXJlc3VsdCA9IHByb2MtPnBpZDsKIAkJCWJyZWFrOwpA QCAtMzMwMSw3ICszMzAwLDcgQEAgR2V0Q3VycmVudFZpcnR1YWxYSURzKFRyYW5zYWN0aW9u SWQgbGltaXRYbWluLCBib29sIGV4Y2x1ZGVYbWluMCwKIAlmb3IgKGluZGV4ID0gMDsgaW5k ZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8g PSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQ cm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25v XTsKIAkJdWludDgJCXN0YXR1c0ZsYWdzID0gUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3NbaW5k ZXhdOwogCiAJCWlmIChwcm9jID09IE15UHJvYykKQEAgLTM0MDMsNyArMzQwMiw3IEBAIEdl dENvbmZsaWN0aW5nVmlydHVhbFhJRHMoVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW4sIE9pZCBk Yk9pZCkKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRl eCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07 Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkg ICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQkvKiBFeGNsdWRlIHByZXBhcmVk IHRyYW5zYWN0aW9ucyAqLwogCQlpZiAocHJvYy0+cGlkID09IDApCkBAIC0zNDY4LDcgKzM0 NjcsNyBAQCBTaWduYWxWaXJ0dWFsVHJhbnNhY3Rpb24oVmlydHVhbFRyYW5zYWN0aW9uSWQg dnhpZCwgUHJvY1NpZ25hbFJlYXNvbiBzaWdtb2RlLAogCWZvciAoaW5kZXggPSAwOyBpbmRl eCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9 IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFBy b2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9d OwogCQlWaXJ0dWFsVHJhbnNhY3Rpb25JZCBwcm9jdnhpZDsKIAogCQlHRVRfVlhJRF9GUk9N X1BHUFJPQyhwcm9jdnhpZCwgKnByb2MpOwpAQCAtMzUyMyw3ICszNTIyLDcgQEAgTWluaW11 bUFjdGl2ZUJhY2tlbmRzKGludCBtaW4pCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJy YXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQ LT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdw cm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJ LyoKIAkJICogU2luY2Ugd2UncmUgbm90IGhvbGRpbmcgYSBsb2NrLCBuZWVkIHRvIGJlIHBy ZXBhcmVkIHRvIGRlYWwgd2l0aApAQCAtMzU2OSw3ICszNTY4LDcgQEAgQ291bnREQkJhY2tl bmRzKE9pZCBkYXRhYmFzZWlkKQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+ bnVtUHJvY3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdw cm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25v XTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCWlmIChw cm9jLT5waWQgPT0gMCkKIAkJCWNvbnRpbnVlOwkJCS8qIGRvIG5vdCBjb3VudCBwcmVwYXJl ZCB4YWN0cyAqLwpAQCAtMzU5OCw3ICszNTk3LDcgQEAgQ291bnREQkNvbm5lY3Rpb25zKE9p ZCBkYXRhYmFzZWlkKQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJv Y3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9z W2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJ UEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCWlmIChwcm9jLT5w aWQgPT0gMCkKIAkJCWNvbnRpbnVlOwkJCS8qIGRvIG5vdCBjb3VudCBwcmVwYXJlZCB4YWN0 cyAqLwpAQCAtMzYyOSw3ICszNjI4LDcgQEAgQ2FuY2VsREJCYWNrZW5kcyhPaWQgZGF0YWJh c2VpZCwgUHJvY1NpZ25hbFJlYXNvbiBzaWdtb2RlLCBib29sIGNvbmZsaWN0UGVuZGluZykK IAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQog CXsKIAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBH UFJPQwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJv YyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQlpZiAoZGF0YWJhc2VpZCA9PSBJbnZhbGlk T2lkIHx8IHByb2MtPmRhdGFiYXNlSWQgPT0gZGF0YWJhc2VpZCkKIAkJewpAQCAtMzY3MCw3 ICszNjY5LDcgQEAgQ291bnRVc2VyQmFja2VuZHMoT2lkIHJvbGVpZCkKIAlmb3IgKGluZGV4 ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJ cGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJv YyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2Nz W3BncHJvY25vXTsKIAogCQlpZiAocHJvYy0+cGlkID09IDApCiAJCQljb250aW51ZTsJCQkv KiBkbyBub3QgY291bnQgcHJlcGFyZWQgeGFjdHMgKi8KQEAgLTM3MzMsNyArMzczMiw3IEBA IENvdW50T3RoZXJEQkJhY2tlbmRzKE9pZCBkYXRhYmFzZUlkLCBpbnQgKm5iYWNrZW5kcywg aW50ICpucHJlcGFyZWQpCiAJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVt UHJvY3M7IGluZGV4KyspCiAJCXsKIAkJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3By b2Nub3NbaW5kZXhdOwotCQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25v XTsKKwkJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAkJCXVpbnQ4 CQlzdGF0dXNGbGFncyA9IFByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzW2luZGV4XTsKIAogCQkJ aWYgKHByb2MtPmRhdGFiYXNlSWQgIT0gZGF0YWJhc2VJZCkKQEAgLTM3OTksNyArMzc5OCw3 IEBAIFRlcm1pbmF0ZU90aGVyREJCYWNrZW5kcyhPaWQgZGF0YWJhc2VJZCkKIAlmb3IgKGkg PSAwOyBpIDwgcHJvY0FycmF5LT5udW1Qcm9jczsgaSsrKQogCXsKIAkJaW50CQkJcGdwcm9j bm8gPSBhcnJheVAtPnBncHJvY25vc1tpXTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFBy b2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9d OwogCiAJCWlmIChwcm9jLT5kYXRhYmFzZUlkICE9IGRhdGFiYXNlSWQpCiAJCQljb250aW51 ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCmluZGV4IDYyZjM0NzE0NDhlLi5jODRhMmE1 ZjFiYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCkBAIC0yODQ0LDcgKzI4NDQsNyBA QCBGYXN0UGF0aFRyYW5zZmVyUmVsYXRpb25Mb2NrcyhMb2NrTWV0aG9kIGxvY2tNZXRob2RU YWJsZSwgY29uc3QgTE9DS1RBRyAqbG9ja3RhZwogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBQ cm9jR2xvYmFsLT5hbGxQcm9jQ291bnQ7IGkrKykKIAl7Ci0JCVBHUFJPQwkgICAqcHJvYyA9 ICZQcm9jR2xvYmFsLT5hbGxQcm9jc1tpXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gUHJvY0ds b2JhbC0+YWxsUHJvY3NbaV07CiAJCXVpbnQzMgkJajsKIAogCQlMV0xvY2tBY3F1aXJlKCZw cm9jLT5mcEluZm9Mb2NrLCBMV19FWENMVVNJVkUpOwpAQCAtMzEwMyw3ICszMTAzLDcgQEAg R2V0TG9ja0NvbmZsaWN0cyhjb25zdCBMT0NLVEFHICpsb2NrdGFnLCBMT0NLTU9ERSBsb2Nr bW9kZSwgaW50ICpjb3VudHApCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgUHJvY0dsb2Jh bC0+YWxsUHJvY0NvdW50OyBpKyspCiAJCXsKLQkJCVBHUFJPQwkgICAqcHJvYyA9ICZQcm9j R2xvYmFsLT5hbGxQcm9jc1tpXTsKKwkJCVBHUFJPQwkgICAqcHJvYyA9IFByb2NHbG9iYWwt PmFsbFByb2NzW2ldOwogCQkJdWludDMyCQlqOwogCiAJCQkvKiBBIGJhY2tlbmQgbmV2ZXIg YmxvY2tzIGl0c2VsZiAqLwpAQCAtMzc5MCw3ICszNzkwLDcgQEAgR2V0TG9ja1N0YXR1c0Rh dGEodm9pZCkKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgUHJvY0dsb2JhbC0+YWxsUHJvY0Nv dW50OyArK2kpCiAJewotCQlQR1BST0MJICAgKnByb2MgPSAmUHJvY0dsb2JhbC0+YWxsUHJv Y3NbaV07CisJCVBHUFJPQwkgICAqcHJvYyA9IFByb2NHbG9iYWwtPmFsbFByb2NzW2ldOwog CiAJCS8qIFNraXAgYmFja2VuZHMgd2l0aCBwaWQ9MCwgYXMgdGhleSBkb24ndCBob2xkIGZh c3QtcGF0aCBsb2NrcyAqLwogCQlpZiAocHJvYy0+cGlkID09IDApCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9s bWdyL3Byb2MuYwppbmRleCBlOWVmMGZiZmUzMi4uMTEyNTkxNTFhN2QgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9sbWdyL3Byb2MuYwpAQCAtMjksMjEgKzI5LDI5IEBACiAgKi8KICNpbmNsdWRlICJw b3N0Z3Jlcy5oIgogCisjaW5jbHVkZSA8c2NoZWQuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4K ICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogCisjaWZkZWYg VVNFX0xJQk5VTUEKKyNpbmNsdWRlIDxudW1hLmg+CisjaW5jbHVkZSA8bnVtYWlmLmg+Cisj ZW5kaWYKKwogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3R3b3BoYXNlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvcnQvcGdf bnVtYS5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL3Nsb3RzeW5jLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc3luY3Jl cC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRl ICJzdG9yYWdlL3BnX3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5 LmgiCkBAIC05MCw2ICs5OCwzMSBAQCBzdGF0aWMgdm9pZCBBdXhpbGlhcnlQcm9jS2lsbChp bnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIENoZWNrRGVhZExvY2sodm9pZCk7 CiAKIAorLyogbnVtYmVyIG9mIE5VTUEgbm9kZXMgKGFzIHJldHVybmVkIGJ5IG51bWFfbnVt X2NvbmZpZ3VyZWRfbm9kZXMpICovCitzdGF0aWMgaW50CW51bWFfbm9kZXMgPSAtMTsJLyog bnVtYmVyIG9mIG5vZGVzIHdoZW4gc2l6aW5nICovCitzdGF0aWMgU2l6ZSBudW1hX3BhZ2Vf c2l6ZSA9IDA7IC8qIHBhZ2UgdXNlZCB0byBzaXplIHBhcnRpdGlvbnMgKi8KK3N0YXRpYyBi b29sIG51bWFfY2FuX3BhcnRpdGlvbiA9IGZhbHNlOyAvKiBjYW4gbWFwIHRvIE5VTUEgbm9k ZXM/ICovCitzdGF0aWMgaW50CW51bWFfcHJvY3NfcGVyX25vZGUgPSAtMTsJLyogcGdwcm9j cyBwZXIgbm9kZSAqLworCitzdGF0aWMgU2l6ZSBnZXRfbWVtb3J5X3BhZ2Vfc2l6ZSh2b2lk KTsgLyogWFhYIGR1cGxpY2F0ZSB3aXRoIGJ1ZmlfaW5pdC5jICovCisKK3N0YXRpYyB2b2lk IHBncHJvY19wYXJ0aXRpb25zX3ByZXBhcmUodm9pZCk7CitzdGF0aWMgY2hhciAqcGdwcm9j X3BhcnRpdGlvbl9pbml0KGNoYXIgKnB0ciwgaW50IG51bV9wcm9jcywKKwkJCQkJCQkJICAg aW50IGFsbHByb2NzX2luZGV4LCBpbnQgbm9kZSk7CitzdGF0aWMgY2hhciAqZmFzdHBhdGhf cGFydGl0aW9uX2luaXQoY2hhciAqcHRyLCBpbnQgbnVtX3Byb2NzLAorCQkJCQkJCQkJIGlu dCBhbGxwcm9jc19pbmRleCwgaW50IG5vZGUsCisJCQkJCQkJCQkgU2l6ZSBmcExvY2tCaXRz U2l6ZSwgU2l6ZSBmcFJlbElkU2l6ZSk7CisKK3R5cGVkZWYgc3RydWN0IFBHUHJvY1BhcnRp dGlvbgoreworCWludAkJCW51bV9wcm9jczsKKwlpbnQJCQludW1hX25vZGU7CisJdm9pZAkg ICAqcGdwcm9jX3B0cjsKKwl2b2lkCSAgICpmYXN0cGF0aF9wdHI7Cit9IFBHUHJvY1BhcnRp dGlvbjsKKworc3RhdGljIFBHUHJvY1BhcnRpdGlvbiAqcGFydGl0aW9ucyA9IE5VTEw7CisK IC8qCiAgKiBSZXBvcnQgc2hhcmVkLW1lbW9yeSBzcGFjZSBuZWVkZWQgYnkgUEdQUk9DLgog ICovCkBAIC0xMDAsMTEgKzEzMyw2MyBAQCBQR1Byb2NTaG1lbVNpemUodm9pZCkKIAlTaXpl CQlUb3RhbFByb2NzID0KIAkJYWRkX3NpemUoTWF4QmFja2VuZHMsIGFkZF9zaXplKE5VTV9B VVhJTElBUllfUFJPQ1MsIG1heF9wcmVwYXJlZF94YWN0cykpOwogCisJc2l6ZSA9IGFkZF9z aXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZihQR1BST0MgKikpKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKFBHUFJP QykpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6 ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxf c2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlByb2NHbG9iYWwtPnN1YnhpZFN0YXRlcykpKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQ cm9jR2xvYmFsLT5zdGF0dXNGbGFncykpKTsKIAorCS8qCisJICogVG8gc3VwcG9ydCBOVU1B IHBhcnRpdGlvbmluZywgdGhlIFBHUFJPQyBhcnJheSB3aWxsIGJlIGRpdmlkZWQgaW50bwor CSAqIG11bHRpcGxlIGNodW5rcyAtIG9uZSBwZXIgTlVNQSBub2RlLCBhbmQgb25lIGV4dHJh IGZvciBhdXhpbGlhcnkvMlBDCisJICogZW50cmllcyAod2hpY2ggYXJlIG5vdCBhc3NpZ25l ZCB0byBhbnkgTlVNQSBub2RlKS4KKwkgKgorCSAqIFdlIGNhbid0IHNpbXBseSBtYXAgcGFn ZXMgb2YgYSBzaW5nbGUgY29udGludW91cyBhcnJheSwgYmVjYXVzZSB0aGUKKwkgKiBQR1BS T0MgZW50cmllcyBhcmUgdmVyeSBzbWFsbCBhbmQgdG9vIG1hbnkgb2YgdGhlbSB3b3VsZCBm aXQgb24gYQorCSAqIHNpbmdsZSBwYWdlIChhdCBsZWFzdCB3aXRoIGh1Z2UgcGFnZXMpLiBG YXIgbW9yZSB0aGFuIHJlYXNvbmFibGUgdmFsdWVzCisJICogb2YgbWF4X2Nvbm5lY3Rpb25z LiBTbyBpbnN0ZWFkIHdlIGN1dCB0aGUgYXJyYXkgaW50byBzZXBhcmF0ZSBwaWVjZXMKKwkg KiBmb3IgZWFjaCBub2RlLgorCSAqCisJICogRWFjaCBwaWVjZSBtYXkgbmVlZCB1cCB0byBv bmUgbWVtb3J5IHBhZ2Ugb2YgcGFkZGluZywgdG8gbWFrZSBpdAorCSAqIGFsaWduZWQgd2l0 aCBtZW1vcnkgcGFnZSAoZm9yIE5VTUEpLCBTbyB3ZSBqdXN0IGFkZCBhIHBhZ2UgLSBpdCdz IGEgYml0CisJICogd2FzdGVmdWwsIGJ1dCBzaG91bGQgbm90IG1hdHRlciBtdWNoIC0gTlVN QSBpcyBtZWFudCBmb3IgbGFyZ2UgYm94ZXMsCisJICogc28gYSBjb3VwbGUgcGFnZXMgaXMg bmVnbGlnaWJsZS4KKwkgKgorCSAqIFdlIG9ubHkgZG8gdGhpcyB3aXRoIE5VTUEgcGFydGl0 aW9uaW5nLiBXaXRoIHRoZSBHVUMgZGlzYWJsZWQsIG9yIHdoZW4KKwkgKiB3ZSBmaW5kIHdl IGNhbid0IGRvIHRoYXQgZm9yIHNvbWUgcmVhc29uLCB3ZSBqdXN0IGFsbG9jYXRlIHRoZSBQ R1BST0MKKwkgKiBhcnJheSBhcyBhIHNpbmdsZSBjaHVuay4gVGhpcyBpcyBkZXRlcm1pbmVk IGJ5IHRoZSBlYXJsaWVyIGNhbGwgdG8KKwkgKiBwZ3Byb2NfcGFydGl0aW9uc19wcmVwYXJl KCkuCisJICoKKwkgKiBYWFggSXQgbWlnaHQgYmUgbW9yZSBwYWluZnVsIHdpdGggdmVyeSBs YXJnZSBodWdlIHBhZ2VzIChlLmcuIDFHQikuCisJICovCisKKwkvKgorCSAqIElmIFBHUFJP QyBwYXJ0aXRpb25pbmcgaXMgZW5hYmxlZCwgYW5kIHdlIGRlY2lkZWQgaXQncyBwb3NzaWJs ZSwgd2UKKwkgKiBuZWVkIHRvIGFkZCBvbmUgbWVtb3J5IHBhZ2UgcGVyIE5VTUEgbm9kZSAo YW5kIG9uZSBmb3IgYXV4aWxpYXJ5LzJQQworCSAqIHByb2Nlc3NlcykgdG8gYWxsb3cgcHJv cGVyIGFsaWdubWVudC4KKwkgKgorCSAqIFhYWCBUaGlzIGlzIGEgYSBiaXQgd2FzdGVmdWws IGJlY2F1c2UgaXQgbWlnaHQgYWN0dWFsbHkgYWRkIHBhZ2VzIGV2ZW4KKwkgKiB3aGVuIG5v dCBzdHJpY3RseSBuZWVkZWQgKGlmIGl0J3MgYWxyZWFkeSBhbGlnbmVkKS4gQW5kIHdlIGFs d2F5cworCSAqIGFzc3VtZSB3ZSdsbCBhZGQgYSB3aG9sZSBwYWdlLCBldmVuIGlmIHRoZSBh bGlnbm1lbnQgbmVlZHMgb25seSBsZXNzCisJICogbWVtb3J5LgorCSAqLworCWlmIChudW1h X3Byb2NzX2ludGVybGVhdmUgJiYgbnVtYV9jYW5fcGFydGl0aW9uKQorCXsKKwkJQXNzZXJ0 KG51bWFfbm9kZXMgPiAwKTsKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKChu dW1hX25vZGVzICsgMSksIG51bWFfcGFnZV9zaXplKSk7CisKKwkJLyoKKwkJICogQWxzbyBh Y2NvdW50IGZvciBhIHNtYWxsIHJlZ2lzdHJ5IG9mIHBhcnRpdGlvbnMsIGEgc2ltcGxlIGFy cmF5IG9mCisJCSAqIHBhcnRpdGlvbnMgYXQgdGhlIGJlZ2lubmluZy4KKwkJICovCisJCXNp emUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZSgobnVtYV9ub2RlcyArIDEpLCBzaXplb2Yo UEdQcm9jUGFydGl0aW9uKSkpOworCX0KKwllbHNlCisJeworCQkvKiBvdGhlcndpc2UgYWRk IG9ubHkgYSB0aW55IHJlZ2lzdHJ5LCB3aXRoIGEgc2luZ2xlIHBhcnRpdGlvbiAqLworCQlz aXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9mKFBHUHJvY1BhcnRpdGlvbikpOworCX0KKwog CXJldHVybiBzaXplOwogfQogCkBAIC0xMjksNiArMjE0LDI1IEBAIEZhc3RQYXRoTG9ja1No bWVtU2l6ZSh2b2lkKQogCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFs UHJvY3MsIChmcExvY2tCaXRzU2l6ZSArIGZwUmVsSWRTaXplKSkpOwogCisJLyoKKwkgKiBX aGVuIGFwcGx5aW5nIE5VTUEgdG8gdGhlIGZhc3QtcGF0aCBsb2Nrcywgd2UgZm9sbG93IHRo ZSBzYW1lIGxvZ2ljIGFzCisJICogZm9yIFBHUFJPQyBlbnRyaWVzLiBTZWUgdGhlIGNvbW1l bnRzIGluIFBHUHJvY1NobWVtU2l6ZSgpLgorCSAqCisJICogSWYgUEdQUk9DIHBhcnRpdGlv bmluZyBpcyBlbmFibGVkLCBhbmQgd2UgZGVjaWRlZCBpdCdzIHBvc3NpYmxlLCB3ZQorCSAq IG5lZWQgdG8gYWRkIG9uZSBtZW1vcnkgcGFnZSBwZXIgTlVNQSBub2RlIChhbmQgb25lIGZv ciBhdXhpbGlhcnkvMlBDCisJICogcHJvY2Vzc2VzKSB0byBhbGxvdyBwcm9wZXIgYWxpZ25t ZW50LgorCSAqCisJICogWFhYIFRoaXMgaXMgYSBhIGJpdCB3YXN0ZWZ1bCwgYmVjYXVzZSBp dCBtaWdodCBhY3R1YWxseSBhZGQgcGFnZXMgZXZlbgorCSAqIHdoZW4gbm90IHN0cmljdGx5 IG5lZWRlZCAoaWYgaXQncyBhbHJlYWR5IGFsaWduZWQpLiBBbmQgd2UgYWx3YXlzCisJICog YXNzdW1lIHdlJ2xsIGFkZCBhIHdob2xlIHBhZ2UsIGV2ZW4gaWYgdGhlIGFsaWdubWVudCBu ZWVkcyBvbmx5IGxlc3MKKwkgKiBtZW1vcnkuCisJICovCisJaWYgKG51bWFfcHJvY3NfaW50 ZXJsZWF2ZSAmJiBudW1hX2Nhbl9wYXJ0aXRpb24pCisJeworCQlBc3NlcnQobnVtYV9ub2Rl cyA+IDApOworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoKG51bWFfbm9kZXMg KyAxKSwgbnVtYV9wYWdlX3NpemUpKTsKKwl9CisKIAlyZXR1cm4gc2l6ZTsKIH0KIApAQCAt MTQwLDYgKzI0NCw5IEBAIFByb2NHbG9iYWxTaG1lbVNpemUodm9pZCkKIHsKIAlTaXplCQlz aXplID0gMDsKIAorCS8qIGNhbGN1bGF0ZSBwYXJ0aXRpb24gaW5mbyBmb3IgcGdwcm9jIGVu dHJpZXMgZXRjICovCisJcGdwcm9jX3BhcnRpdGlvbnNfcHJlcGFyZSgpOworCiAJLyogUHJv Y0dsb2JhbCAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBzaXplb2YoUFJPQ19IRFIpKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9mKHNsb2NrX3QpKTsKQEAgLTE5MSw3ICsy OTgsNyBAQCBQcm9jR2xvYmFsU2VtYXModm9pZCkKIHZvaWQKIEluaXRQcm9jR2xvYmFsKHZv aWQpCiB7Ci0JUEdQUk9DCSAgICpwcm9jczsKKwlQR1BST0MJICAqKnByb2NzOwogCWludAkJ CWksCiAJCQkJajsKIAlib29sCQlmb3VuZDsKQEAgLTIwNSw2ICszMTIsOCBAQCBJbml0UHJv Y0dsb2JhbCh2b2lkKQogCVNpemUJCXJlcXVlc3RTaXplOwogCWNoYXIJICAgKnB0cjsKIAor CVNpemUJCW1lbV9wYWdlX3NpemUgPSBnZXRfbWVtb3J5X3BhZ2Vfc2l6ZSgpOworCiAJLyog Q3JlYXRlIHRoZSBQcm9jR2xvYmFsIHNoYXJlZCBzdHJ1Y3R1cmUgKi8KIAlQcm9jR2xvYmFs ID0gKFBST0NfSERSICopCiAJCVNobWVtSW5pdFN0cnVjdCgiUHJvYyBIZWFkZXIiLCBzaXpl b2YoUFJPQ19IRFIpLCAmZm91bmQpOwpAQCAtMjQxLDE5ICszNTAsMTE1IEBAIEluaXRQcm9j R2xvYmFsKHZvaWQpCiAKIAlNZW1TZXQocHRyLCAwLCByZXF1ZXN0U2l6ZSk7CiAKLQlwcm9j cyA9IChQR1BST0MgKikgcHRyOwotCXB0ciA9IChjaGFyICopIHB0ciArIFRvdGFsUHJvY3Mg KiBzaXplb2YoUEdQUk9DKTsKKwkvKiBhbGxwcm9jcyAoYXJyYXkgb2YgcG9pbnRlcnMgdG8g UEdQUk9DIGVudHJpZXMpICovCisJcHJvY3MgPSAoUEdQUk9DICoqKSBwdHI7CisJcHRyID0g KGNoYXIgKikgcHRyICsgVG90YWxQcm9jcyAqIHNpemVvZihQR1BST0MgKik7CiAKIAlQcm9j R2xvYmFsLT5hbGxQcm9jcyA9IHByb2NzOwogCS8qIFhYWCBhbGxQcm9jQ291bnQgaXNuJ3Qg cmVhbGx5IGFsbCBvZiB0aGVtOyBpdCBleGNsdWRlcyBwcmVwYXJlZCB4YWN0cyAqLwogCVBy b2NHbG9iYWwtPmFsbFByb2NDb3VudCA9IE1heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9Q Uk9DUzsKIAorCS8qCisJICogSWYgTlVNQSBwYXJ0aXRpb25pbmcgaXMgZW5hYmxlZCwgYW5k IHdlIGRlY2lkZWQgd2UgYWN0dWFsbHkgY2FuIGRvIHRoZQorCSAqIHBhcnRpdGlvbmluZywg YWxsb2NhdGUgdGhlIGNodW5rcy4KKwkgKgorCSAqIE90aGVyd2lzZSB3ZSdsbCBhbGxvY2F0 ZSBhIHNpbmdsZSBhcnJheSBmb3IgZXZlcnl0aGluZy4gSXQncyBub3QgcXVpdGUKKwkgKiB3 aGF0IHdlIGRpZCB3aXRob3V0IE5VTUEsIGJlY2F1c2UgdGhlcmUncyBhbiBleHRyYSBsZXZl bCBvZgorCSAqIGluZGlyZWN0aW9uLCBidXQgaXQncyB0aGUgYmVzdCB3ZSBjYW4gZG8uCisJ ICovCisJaWYgKG51bWFfcHJvY3NfaW50ZXJsZWF2ZSAmJiBudW1hX2Nhbl9wYXJ0aXRpb24p CisJeworCQlpbnQJCQlub2RlX3Byb2NzOworCQlpbnQJCQl0b3RhbF9wcm9jcyA9IDA7CisK KwkJQXNzZXJ0KG51bWFfcHJvY3NfcGVyX25vZGUgPiAwKTsKKwkJQXNzZXJ0KG51bWFfbm9k ZXMgPiAwKTsKKworCQkvKgorCQkgKiBOb3cgaW5pdGlhbGl6ZSB0aGUgUEdQUk9DIHBhcnRp dGlvbiByZWdpc3RyeSB3aXRoIG9uZSBwYXJ0aXRvaW9uCisJCSAqIHBlciBOVU1BIG5vZGUu CisJCSAqLworCQlwYXJ0aXRpb25zID0gKFBHUHJvY1BhcnRpdGlvbiAqKSBwdHI7CisJCXB0 ciArPSAobnVtYV9ub2RlcyAqIHNpemVvZihQR1Byb2NQYXJ0aXRpb24pKTsKKworCQkvKiBi dWlsZCBQR1BST0MgZW50cmllcyBmb3IgTlVNQSBub2RlcyAqLworCQlmb3IgKGkgPSAwOyBp IDwgbnVtYV9ub2RlczsgaSsrKQorCQl7CisJCQkvKiB0aGUgbGFzdCBOVU1BIG5vZGUgbWF5 IGdldCBmZXdlciBQR1BST0MgZW50cmllcywgYnV0IG1laCAqLworCQkJbm9kZV9wcm9jcyA9 IE1pbihudW1hX3Byb2NzX3Blcl9ub2RlLCBNYXhCYWNrZW5kcyAtIHRvdGFsX3Byb2NzKTsK KworCQkJLyogbWFrZSBzdXJlIHRvIGFsaWduIHRoZSBQR1BST0MgYXJyYXkgdG8gbWVtb3J5 IHBhZ2UgKi8KKwkJCXB0ciA9IChjaGFyICopIFRZUEVBTElHTihudW1hX3BhZ2Vfc2l6ZSwg cHRyKTsKKworCQkJLyogZmlsbCBpbiB0aGUgcGFydGl0aW9uIGluZm8gKi8KKwkJCXBhcnRp dGlvbnNbaV0ubnVtX3Byb2NzID0gbm9kZV9wcm9jczsKKwkJCXBhcnRpdGlvbnNbaV0ubnVt YV9ub2RlID0gaTsKKwkJCXBhcnRpdGlvbnNbaV0ucGdwcm9jX3B0ciA9IHB0cjsKKworCQkJ cHRyID0gcGdwcm9jX3BhcnRpdGlvbl9pbml0KHB0ciwgbm9kZV9wcm9jcywgdG90YWxfcHJv Y3MsIGkpOworCisJCQl0b3RhbF9wcm9jcyArPSBub2RlX3Byb2NzOworCisJCQkvKiBkb24n dCB1bmRlcmZsb3cvb3ZlcmZsb3cgdGhlIGFsbG9jYXRpb24gKi8KKwkJCUFzc2VydCgocHRy ID4gKGNoYXIgKikgcHJvY3MpICYmIChwdHIgPD0gKGNoYXIgKikgcHJvY3MgKyByZXF1ZXN0 U2l6ZSkpOworCQl9CisKKwkJQXNzZXJ0KHRvdGFsX3Byb2NzID09IE1heEJhY2tlbmRzKTsK KworCQkvKgorCQkgKiBBbHNvIGJ1aWxkIFBHUFJPQyBlbnRyaWVzIGZvciBhdXhpbGlhcnkg cHJvY3MgLyBwcmVwYXJlZCB4YWN0cyAod2UKKwkJICogaG93ZXZlciBkb24ndCBhc3NpZ24g dGhvc2UgdG8gYW55IE5VTUEgbm9kZSkuCisJCSAqLworCQlub2RlX3Byb2NzID0gKE5VTV9B VVhJTElBUllfUFJPQ1MgKyBtYXhfcHJlcGFyZWRfeGFjdHMpOworCisJCS8qIG1ha2Ugc3Vy ZSB0byBhbGlnbiB0aGUgUEdQUk9DIGFycmF5IHRvIG1lbW9yeSBwYWdlICovCisJCXB0ciA9 IChjaGFyICopIFRZUEVBTElHTihudW1hX3BhZ2Vfc2l6ZSwgcHRyKTsKKworCQkvKiBmaWxs IGluIHRoZSBwYXJ0aXRpb24gaW5mbyAqLworCQlwYXJ0aXRpb25zW251bWFfbm9kZXNdLm51 bV9wcm9jcyA9IG5vZGVfcHJvY3M7CisJCXBhcnRpdGlvbnNbbnVtYV9ub2Rlc10ubnVtYV9u b2RlID0gLTE7CisJCXBhcnRpdGlvbnNbbnVtYV9ub2Rlc10ucGdwcm9jX3B0ciA9IHB0cjsK KworCQlwdHIgPSBwZ3Byb2NfcGFydGl0aW9uX2luaXQocHRyLCBub2RlX3Byb2NzLCB0b3Rh bF9wcm9jcywgLTEpOworCisJCXRvdGFsX3Byb2NzICs9IG5vZGVfcHJvY3M7CisKKwkJLyog ZG9uJ3Qgb3ZlcmZsb3cgdGhlIGFsbG9jYXRpb24gKi8KKwkJQXNzZXJ0KChwdHIgPiAoY2hh ciAqKSBwcm9jcykgJiYgKHB0ciA8PSAoY2hhciAqKSBwcm9jcyArIHJlcXVlc3RTaXplKSk7 CisKKwkJQXNzZXJ0KHRvdGFsX3Byb2NzID0gVG90YWxQcm9jcyk7CisJfQorCWVsc2UKKwl7 CisJCS8qCisJCSAqIE5vdyBpbml0aWFsaXplIHRoZSBQR1BST0MgcGFydGl0aW9uIHJlZ2lz dHJ5IHdpdGggYSBzaW5nbGUKKwkJICogcGFydGl0aW9uIGZvciBhbGwgdGhlIHByb2NzLgor CQkgKi8KKwkJcGFydGl0aW9ucyA9IChQR1Byb2NQYXJ0aXRpb24gKikgcHRyOworCQlwdHIg Kz0gc2l6ZW9mKFBHUHJvY1BhcnRpdGlvbik7CisKKwkJLyoganVzdCB0cmVhdCBldmVyeXRo aW5nIGFzIGEgc2luZ2xlIGFycmF5LCB3aXRoIG5vIGFsaWdubWVudCAqLworCQlwdHIgPSBw Z3Byb2NfcGFydGl0aW9uX2luaXQocHRyLCBUb3RhbFByb2NzLCAwLCAtMSk7CisKKwkJLyog ZmlsbCBpbiB0aGUgcGFydGl0aW9uIGluZm8gKi8KKwkJcGFydGl0aW9uc1swXS5udW1fcHJv Y3MgPSBUb3RhbFByb2NzOworCQlwYXJ0aXRpb25zWzBdLm51bWFfbm9kZSA9IC0xOworCQlw YXJ0aXRpb25zWzBdLnBncHJvY19wdHIgPSBwdHI7CisKKwkJLyogZG9uJ3Qgb3ZlcmZsb3cg dGhlIGFsbG9jYXRpb24gKi8KKwkJQXNzZXJ0KChwdHIgPiAoY2hhciAqKSBwcm9jcykgJiYg KHB0ciA8PSAoY2hhciAqKSBwcm9jcyArIHJlcXVlc3RTaXplKSk7CisJfQorCiAJLyoKIAkg KiBBbGxvY2F0ZSBhcnJheXMgbWlycm9yaW5nIFBHUFJPQyBmaWVsZHMgaW4gYSBkZW5zZSBt YW5uZXIuIFNlZQogCSAqIFBST0NfSERSLgogCSAqCiAJICogWFhYOiBJdCBtaWdodCBtYWtl IHNlbnNlIHRvIGluY3JlYXNlIHBhZGRpbmcgZm9yIHRoZXNlIGFycmF5cywgZ2l2ZW4KIAkg KiBob3cgaG90bHkgdGhleSBhcmUgYWNjZXNzZWQuCisJICoKKwkgKiBYWFggV291bGQgaXQg bWFrZSBzZW5zZSB0byBOVU1BLXBhcnRpdGlvbiB0aGVzZSBjaHVua3MgdG9vLCBzb21laG93 PworCSAqIEJ1dCB0aG9zZSBhcnJheXMgYXJlIHRpbnksIGZpdCBpbnRvIGEgc2luZ2xlIG1l bW9yeSBwYWdlLCBzbyB3b3VsZCBuZWVkCisJICogdG8gYmUgbWFkZSBtb3JlIGNvbXBsZXgu IE5vdCBzdXJlLgogCSAqLwogCVByb2NHbG9iYWwtPnhpZHMgPSAoVHJhbnNhY3Rpb25JZCAq KSBwdHI7CiAJcHRyID0gKGNoYXIgKikgcHRyICsgKFRvdGFsUHJvY3MgKiBzaXplb2YoKlBy b2NHbG9iYWwtPnhpZHMpKTsKQEAgLTI4NiwyNCArNDkxLDkyIEBAIEluaXRQcm9jR2xvYmFs KHZvaWQpCiAJLyogRm9yIGFzc2VydHMgY2hlY2tpbmcgd2UgZGlkIG5vdCBvdmVyZmxvdy4g Ki8KIAlmcEVuZFB0ciA9IGZwUHRyICsgcmVxdWVzdFNpemU7CiAKLQlmb3IgKGkgPSAwOyBp IDwgVG90YWxQcm9jczsgaSsrKQorCS8qCisJICogTWltaWMgdGhlIGxvZ2ljIHdlIHVzZWQg dG8gcGFydGl0aW9uIFBHUFJPQyBlbnRyaWVzLgorCSAqLworCisJLyoKKwkgKiBJZiBOVU1B IHBhcnRpdGlvbmluZyBpcyBlbmFibGVkLCBhbmQgd2UgZGVjaWRlZCB3ZSBhY3R1YWxseSBj YW4gZG8gdGhlCisJICogcGFydGl0aW9uaW5nLCBhbGxvY2F0ZSB0aGUgY2h1bmtzLgorCSAq CisJICogT3RoZXJ3aXNlIHdlJ2xsIGFsbG9jYXRlIGEgc2luZ2xlIGFycmF5IGZvciBldmVy eXRoaW5nLiBJdCdzIG5vdCBxdWl0ZQorCSAqIHdoYXQgd2UgZGlkIHdpdGhvdXQgTlVNQSwg YmVjYXVzZSB0aGVyZSdzIGFuIGV4dHJhIGxldmVsIG9mCisJICogaW5kaXJlY3Rpb24sIGJ1 dCBpdCdzIHRoZSBiZXN0IHdlIGNhbiBkby4KKwkgKi8KKwlpZiAobnVtYV9wcm9jc19pbnRl cmxlYXZlICYmIG51bWFfY2FuX3BhcnRpdGlvbikKIAl7Ci0JCVBHUFJPQwkgICAqcHJvYyA9 ICZwcm9jc1tpXTsKKwkJaW50CQkJbm9kZV9wcm9jczsKKwkJaW50CQkJdG90YWxfcHJvY3Mg PSAwOworCisJCUFzc2VydChudW1hX3Byb2NzX3Blcl9ub2RlID4gMCk7CisKKwkJLyogYnVp bGQgUEdQUk9DIGVudHJpZXMgZm9yIE5VTUEgbm9kZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8 IG51bWFfbm9kZXM7IGkrKykKKwkJeworCQkJLyogdGhlIGxhc3QgTlVNQSBub2RlIG1heSBn ZXQgZmV3ZXIgUEdQUk9DIGVudHJpZXMsIGJ1dCBtZWggKi8KKwkJCW5vZGVfcHJvY3MgPSBN aW4obnVtYV9wcm9jc19wZXJfbm9kZSwgTWF4QmFja2VuZHMgLSB0b3RhbF9wcm9jcyk7CisK KwkJCS8qIG1ha2Ugc3VyZSB0byBhbGlnbiB0aGUgUEdQUk9DIGFycmF5IHRvIG1lbW9yeSBw YWdlICovCisJCQlmcFB0ciA9IChjaGFyICopIFRZUEVBTElHTihtZW1fcGFnZV9zaXplLCBm cFB0cik7CiAKLQkJLyogQ29tbW9uIGluaXRpYWxpemF0aW9uIGZvciBhbGwgUEdQUk9Dcywg cmVnYXJkbGVzcyBvZiB0eXBlLiAqLworCQkJLyogcmVtZW1iZXIgdGhpcyBwb2ludGVyIHRv byAqLworCQkJcGFydGl0aW9uc1tpXS5mYXN0cGF0aF9wdHIgPSBmcFB0cjsKKwkJCUFzc2Vy dChub2RlX3Byb2NzID09IHBhcnRpdGlvbnNbaV0ubnVtX3Byb2NzKTsKKworCQkJZnBQdHIg PSBmYXN0cGF0aF9wYXJ0aXRpb25faW5pdChmcFB0ciwgbm9kZV9wcm9jcywgdG90YWxfcHJv Y3MsIGksCisJCQkJCQkJCQkJCWZwTG9ja0JpdHNTaXplLCBmcFJlbElkU2l6ZSk7CisKKwkJ CXRvdGFsX3Byb2NzICs9IG5vZGVfcHJvY3M7CisKKwkJCS8qIGRvbid0IG92ZXJmbG93IHRo ZSBhbGxvY2F0aW9uICovCisJCQlBc3NlcnQoZnBQdHIgPD0gZnBFbmRQdHIpOworCQl9CisK KwkJQXNzZXJ0KHRvdGFsX3Byb2NzID09IE1heEJhY2tlbmRzKTsKIAogCQkvKgotCQkgKiBT ZXQgdGhlIGZhc3QtcGF0aCBsb2NrIGFycmF5cywgYW5kIG1vdmUgdGhlIHBvaW50ZXIuIFdl IGludGVybGVhdmUKLQkJICogdGhlIHR3byBhcnJheXMsIHRvIChob3BlZnVsbHkpIGdldCBz b21lIGxvY2FsaXR5IGZvciBlYWNoIGJhY2tlbmQuCisJCSAqIEFsc28gYnVpbGQgUEdQUk9D IGVudHJpZXMgZm9yIGF1eGlsaWFyeSBwcm9jcyAvIHByZXBhcmVkIHhhY3RzICh3ZQorCQkg KiBob3dldmVyIGRvbid0IGFzc2lnbiB0aG9zZSB0byBhbnkgTlVNQSBub2RlKS4KIAkJICov Ci0JCXByb2MtPmZwTG9ja0JpdHMgPSAodWludDY0ICopIGZwUHRyOwotCQlmcFB0ciArPSBm cExvY2tCaXRzU2l6ZTsKKwkJbm9kZV9wcm9jcyA9IChOVU1fQVVYSUxJQVJZX1BST0NTICsg bWF4X3ByZXBhcmVkX3hhY3RzKTsKIAotCQlwcm9jLT5mcFJlbElkID0gKE9pZCAqKSBmcFB0 cjsKLQkJZnBQdHIgKz0gZnBSZWxJZFNpemU7CisJCS8qIG1ha2Ugc3VyZSB0byBhbGlnbiB0 aGUgUEdQUk9DIGFycmF5IHRvIG1lbW9yeSBwYWdlICovCisJCWZwUHRyID0gKGNoYXIgKikg VFlQRUFMSUdOKG51bWFfcGFnZV9zaXplLCBmcFB0cik7CiAKKwkJLyogcmVtZW1iZXIgdGhp cyBwb2ludGVyIHRvbyAqLworCQlwYXJ0aXRpb25zW251bWFfbm9kZXNdLmZhc3RwYXRoX3B0 ciA9IGZwUHRyOworCQlBc3NlcnQobm9kZV9wcm9jcyA9PSBwYXJ0aXRpb25zW251bWFfbm9k ZXNdLm51bV9wcm9jcyk7CisKKwkJZnBQdHIgPSBmYXN0cGF0aF9wYXJ0aXRpb25faW5pdChm cFB0ciwgbm9kZV9wcm9jcywgdG90YWxfcHJvY3MsIC0xLAorCQkJCQkJCQkJCWZwTG9ja0Jp dHNTaXplLCBmcFJlbElkU2l6ZSk7CisKKwkJdG90YWxfcHJvY3MgKz0gbm9kZV9wcm9jczsK KworCQkvKiBkb24ndCBvdmVyZmxvdyB0aGUgYWxsb2NhdGlvbiAqLwogCQlBc3NlcnQoZnBQ dHIgPD0gZnBFbmRQdHIpOwogCisJCUFzc2VydCh0b3RhbF9wcm9jcyA9IFRvdGFsUHJvY3Mp OworCX0KKwllbHNlCisJeworCQkvKiByZW1lbWJlciB0aGlzIHBvaW50ZXIgdG9vICovCisJ CXBhcnRpdGlvbnNbMF0uZmFzdHBhdGhfcHRyID0gZnBQdHI7CisJCUFzc2VydChUb3RhbFBy b2NzID09IHBhcnRpdGlvbnNbMF0ubnVtX3Byb2NzKTsKKworCQkvKiBqdXN0IHRyZWF0IGV2 ZXJ5dGhpbmcgYXMgYSBzaW5nbGUgYXJyYXksIHdpdGggbm8gYWxpZ25tZW50ICovCisJCWZw UHRyID0gZmFzdHBhdGhfcGFydGl0aW9uX2luaXQoZnBQdHIsIFRvdGFsUHJvY3MsIDAsIC0x LAorCQkJCQkJCQkJCWZwTG9ja0JpdHNTaXplLCBmcFJlbElkU2l6ZSk7CisKKwkJLyogZG9u J3Qgb3ZlcmZsb3cgdGhlIGFsbG9jYXRpb24gKi8KKwkJQXNzZXJ0KGZwUHRyIDw9IGZwRW5k UHRyKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVG90YWxQcm9jczsgaSsrKQorCXsKKwkJ UEdQUk9DCSAgICpwcm9jID0gcHJvY3NbaV07CisKKwkJQXNzZXJ0KHByb2MtPnByb2NudW1i ZXIgPT0gaSk7CisKIAkJLyoKIAkJICogU2V0IHVwIHBlci1QR1BST0Mgc2VtYXBob3JlLCBs YXRjaCwgYW5kIGZwSW5mb0xvY2suICBQcmVwYXJlZCB4YWN0CiAJCSAqIGR1bW15IFBHUFJP Q3MgZG9uJ3QgbmVlZCB0aGVzZSB0aG91Z2ggLSB0aGV5J3JlIG5ldmVyIGFzc29jaWF0ZWQK QEAgLTM2NiwxNSArNjM5LDEyIEBAIEluaXRQcm9jR2xvYmFsKHZvaWQpCiAJCXBnX2F0b21p Y19pbml0X3U2NCgmKHByb2MtPndhaXRTdGFydCksIDApOwogCX0KIAotCS8qIFNob3VsZCBo YXZlIGNvbnN1bWVkIGV4YWN0bHkgdGhlIGV4cGVjdGVkIGFtb3VudCBvZiBmYXN0LXBhdGgg bWVtb3J5LiAqLwotCUFzc2VydChmcFB0ciA9PSBmcEVuZFB0cik7Ci0KIAkvKgogCSAqIFNh dmUgcG9pbnRlcnMgdG8gdGhlIGJsb2NrcyBvZiBQR1BST0Mgc3RydWN0dXJlcyByZXNlcnZl ZCBmb3IgYXV4aWxpYXJ5CiAJICogcHJvY2Vzc2VzIGFuZCBwcmVwYXJlZCB0cmFuc2FjdGlv bnMuCiAJICovCi0JQXV4aWxpYXJ5UHJvY3MgPSAmcHJvY3NbTWF4QmFja2VuZHNdOwotCVBy ZXBhcmVkWGFjdFByb2NzID0gJnByb2NzW01heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9Q Uk9DU107CisJQXV4aWxpYXJ5UHJvY3MgPSBwcm9jc1tNYXhCYWNrZW5kc107CisJUHJlcGFy ZWRYYWN0UHJvY3MgPSBwcm9jc1tNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1Nd OwogCiAJLyogQ3JlYXRlIFByb2NTdHJ1Y3RMb2NrIHNwaW5sb2NrLCB0b28gKi8KIAlQcm9j U3RydWN0TG9jayA9IChzbG9ja190ICopIFNobWVtSW5pdFN0cnVjdCgiUHJvY1N0cnVjdExv Y2sgc3BpbmxvY2siLApAQCAtNDM1LDcgKzcwNSw0NSBAQCBJbml0UHJvY2Vzcyh2b2lkKQog CiAJaWYgKCFkbGlzdF9pc19lbXB0eShwcm9jZ2xvYmFsbGlzdCkpCiAJewotCQlNeVByb2Mg PSBkbGlzdF9jb250YWluZXIoUEdQUk9DLCBsaW5rcywgZGxpc3RfcG9wX2hlYWRfbm9kZShw cm9jZ2xvYmFsbGlzdCkpOworCQkvKgorCQkgKiBXaXRoIG51bWEgaW50ZXJsZWF2aW5nIG9m IFBHUFJPQywgdHJ5IHRvIGdldCBhIFBST0MgZW50cnkgZnJvbSB0aGUKKwkJICogcmlnaHQg TlVNQSBub2RlICh3aGVuIHRoZSBwcm9jZXNzIHN0YXJ0cykuCisJCSAqCisJCSAqIFhYWCBU aGUgcHJvY2VzcyBtYXkgbW92ZSB0byBhIGRpZmZlcmVudCBOVU1BIG5vZGUgbGF0ZXIsIGJ1 dAorCQkgKiB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91dCB0aGF0LgorCQkgKi8K KwkJaWYgKG51bWFfcHJvY3NfaW50ZXJsZWF2ZSkKKwkJeworCQkJZGxpc3RfbXV0YWJsZV9p dGVyIGl0ZXI7CisJCQl1bnNpZ25lZAljcHU7CisJCQl1bnNpZ25lZAlub2RlOworCQkJaW50 CQkJcmM7CisKKwkJCXJjID0gZ2V0Y3B1KCZjcHUsICZub2RlKTsKKwkJCWlmIChyYyAhPSAw KQorCQkJCWVsb2coRVJST1IsICJnZXRjcHUgZmFpbGVkOiAlbSIpOworCisJCQlNeVByb2Mg PSBOVUxMOworCisJCQlkbGlzdF9mb3JlYWNoX21vZGlmeShpdGVyLCBwcm9jZ2xvYmFsbGlz dCkKKwkJCXsKKwkJCQlQR1BST0MJICAgKnByb2M7CisKKwkJCQlwcm9jID0gZGxpc3RfY29u dGFpbmVyKFBHUFJPQywgbGlua3MsIGl0ZXIuY3VyKTsKKworCQkJCWlmIChwcm9jLT5udW1h X25vZGUgPT0gbm9kZSkKKwkJCQl7CisJCQkJCU15UHJvYyA9IHByb2M7CisJCQkJCWRsaXN0 X2RlbGV0ZShpdGVyLmN1cik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJ CS8qIGRpZG4ndCBmaW5kIFBHUFJPQyBmcm9tIHRoZSBjb3JyZWN0IE5VTUEgbm9kZSwgcGlj ayBhbnkgZnJlZSBvbmUgKi8KKwkJaWYgKE15UHJvYyA9PSBOVUxMKQorCQkJTXlQcm9jID0g ZGxpc3RfY29udGFpbmVyKFBHUFJPQywgbGlua3MsIGRsaXN0X3BvcF9oZWFkX25vZGUocHJv Y2dsb2JhbGxpc3QpKTsKKwogCQlTcGluTG9ja1JlbGVhc2UoUHJvY1N0cnVjdExvY2spOwog CX0KIAllbHNlCkBAIC0xOTg4LDcgKzIyOTYsNyBAQCBQcm9jU2VuZFNpZ25hbChQcm9jTnVt YmVyIHByb2NOdW1iZXIpCiAJaWYgKHByb2NOdW1iZXIgPCAwIHx8IHByb2NOdW1iZXIgPj0g UHJvY0dsb2JhbC0+YWxsUHJvY0NvdW50KQogCQllbG9nKEVSUk9SLCAicHJvY051bWJlciBv dXQgb2YgcmFuZ2UiKTsKIAotCVNldExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQcm9jc1twcm9j TnVtYmVyXS5wcm9jTGF0Y2gpOworCVNldExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQcm9jc1tw cm9jTnVtYmVyXS0+cHJvY0xhdGNoKTsKIH0KIAogLyoKQEAgLTIwNjMsMyArMjM3MSwyMjIg QEAgQmVjb21lTG9ja0dyb3VwTWVtYmVyKFBHUFJPQyAqbGVhZGVyLCBpbnQgcGlkKQogCiAJ cmV0dXJuIG9rOwogfQorCisvKiBjb3B5IGZyb20gYnVmX2luaXQuYyAqLworc3RhdGljIFNp emUKK2dldF9tZW1vcnlfcGFnZV9zaXplKHZvaWQpCit7CisJU2l6ZQkJb3NfcGFnZV9zaXpl OworCVNpemUJCWh1Z2VfcGFnZV9zaXplOworCisjaWZkZWYgV0lOMzIKKwlTWVNURU1fSU5G TyBzeXNpbmZvOworCisJR2V0U3lzdGVtSW5mbygmc3lzaW5mbyk7CisJb3NfcGFnZV9zaXpl ID0gc3lzaW5mby5kd1BhZ2VTaXplOworI2Vsc2UKKwlvc19wYWdlX3NpemUgPSBzeXNjb25m KF9TQ19QQUdFU0laRSk7CisjZW5kaWYKKworCS8qCisJICogWFhYIFRoaXMgaXMgYSBiaXQg YW5ub3lpbmcvY29uZnVzaW5nLCBiZWNhdXNlIHdlIG1heSBnZXQgYSBkaWZmZXJlbnQKKwkg KiByZXN1bHQgZGVwZW5kaW5nIG9uIHdoZW4gd2UgY2FsbCBpdC4gQmVmb3JlIG1tYXAoKSB3 ZSBkb24ndCBrbm93IGlmIHRoZQorCSAqIGh1Z2UgcGFnZXMgZ2V0IHVzZWQsIHNvIHdlIGFz c3VtZSB0aGV5IHdpbGwuIEFuZCB0aGVuIGlmIHdlIGRvbid0IGdldAorCSAqIGh1Z2UgcGFn ZXMsIHdlJ2xsIHdhc3RlIG1lbW9yeSBldGMuCisJICovCisKKwkvKiBhc3N1bWUgaHVnZSBw YWdlcyBnZXQgdXNlZCwgdW5sZXNzIEhVR0VfUEFHRVNfT0ZGICovCisJaWYgKGh1Z2VfcGFn ZXNfc3RhdHVzID09IEhVR0VfUEFHRVNfT0ZGKQorCQlodWdlX3BhZ2Vfc2l6ZSA9IDA7CisJ ZWxzZQorCQlHZXRIdWdlUGFnZVNpemUoJmh1Z2VfcGFnZV9zaXplLCBOVUxMKTsKKworCXJl dHVybiBNYXgob3NfcGFnZV9zaXplLCBodWdlX3BhZ2Vfc2l6ZSk7Cit9CisKKy8qCisgKiBw Z3Byb2NfcGFydGl0aW9uc19wcmVwYXJlCisgKgkJQ2FsY3VsYXRlIHBhcmFtZXRlcnMgZm9y IHBhcnRpdGlvbmluZyBidWZmZXJzLgorICoKKyAqIE5VTUEgcGFydGl0aW9uaW5nCisgKgor ICogTm93IGJ1aWxkIHRoZSBhY3R1YWwgUEdQUk9DIGFycmF5cywgb25lICJjaHVuayIgcGVy IE5VTUEgbm9kZSAoYW5kIG9uZQorICogZXh0cmEgZm9yIGF1eGlsaWFyeSBwcm9jZXNzZXMg YW5kIDJQQyB0cmFuc2FjdGlvbnMsIG5vdCBhc3NvY2lhdGVkIHdpdGgKKyAqIGFueSBwYXJ0 aWN1bGFyIG5vZGUpLgorICoKKyAqIEZpcnN0IGRldGVybWluZSBob3cgbWFueSAiYmFja2Vu ZCIgcHJvY3MgdG8gYWxsb2NhdGUgcGVyIE5VTUEgbm9kZS4gVGhlCisgKiBjb3VudCBtYXkg bm90IGJlIGV4YWN0bHkgZGl2aXNpYmxlLCBidXQgd2UgbW9zdGx5IGlnbm9yZSB0aGF0LiBU aGUgbGFzdAorICogbm9kZSBtYXkgZ2V0IHNvbWV3aGF0IGZld2VyIFBHUFJPQyBlbnRyaWVz LCBidXQgdGhlIGltYmFsYW5jZSBvdWdodCB0bworICogYmUgcHJldHR5IHNtYWxsIChpZiBN YXhCYWNrZW5kcyA+PiBudW1hX25vZGVzKS4KKyAqCisgKiBYWFggQSBmYWlyZXIgZGlzdHJp YnV0aW9uIGlzIHBvc3NpYmxlLCBidXQgbm90IHdvcnRoIGl0IGZvciBub3cuCisgKi8KK3N0 YXRpYyB2b2lkCitwZ3Byb2NfcGFydGl0aW9uc19wcmVwYXJlKHZvaWQpCit7CisJLyogYmFp bCBvdXQgaWYgYWxyZWFkeSBpbml0aWFsaXplZCAoY2FsY3VsYXRlIG9ubHkgb25jZSkgKi8K KwlpZiAobnVtYV9ub2RlcyAhPSAtMSkKKwkJcmV0dXJuOworCisJLyogWFhYIG9ubHkgZ2l2 ZXMgdXMgdGhlIG51bWJlciwgdGhlIG5vZGVzIG1heSBub3QgYmUgMCwgMSwgMiwgLi4uICov CisJbnVtYV9ub2RlcyA9IG51bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMoKTsKKworCS8qIFhY WCBjYW4gdGhpcyBoYXBwZW4/ICovCisJaWYgKG51bWFfbm9kZXMgPCAxKQorCQludW1hX25v ZGVzID0gMTsKKworCS8qCisJICogWFhYIEEgYml0IHdlaXJkLiBEbyB3ZSBuZWVkIHRvIHdv cnJ5IGFib3V0IHBvc3RtYXN0ZXI/IENvdWxkIHRoaXMgZXZlbgorCSAqIHJ1biBvdXRzaWRl IHBvc3RtYXN0ZXI/IEkgZG9uJ3QgdGhpbmsgc28uCisJICoKKwkgKiBYWFggQW5vdGhlciBp c3N1ZSBpcyB3ZSBtYXkgZ2V0IGRpZmZlcmVudCB2YWx1ZXMgdGhhbiB3aGVuIHNpemluZyB0 aGUKKwkgKiB0aGUgbWVtb3J5LCBiZWNhdXNlIGF0IHRoYXQgcG9pbnQgd2UgZGlkbid0IGtu b3cgaWYgd2UgZ2V0IGh1Z2UgcGFnZXMsCisJICogc28gd2UgYXNzdW1lZCB3ZSB3aWxsLiBT aG91bGRuJ3QgY2F1c2UgY3Jhc2hlcywgYnV0IHdlIG1pZ2h0IGFsbG9jYXRlCisJICogc2hh cmVkIG1lbW9yeSBhbmQgdGhlbiBub3QgdXNlIHNvbWUgb2YgaXQgKGJlY2F1c2Ugb2YgdGhl IGFsaWdubWVudAorCSAqIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCkuIE5vdCBzdXJl IGFib3V0IGJldHRlciB3YXksIGdvb2QgZm9yIG5vdy4KKwkgKi8KKwlpZiAoSXNVbmRlclBv c3RtYXN0ZXIpCisJCW51bWFfcGFnZV9zaXplID0gcGdfZ2V0X3NobWVtX3BhZ2VzaXplKCk7 CisJZWxzZQorCQludW1hX3BhZ2Vfc2l6ZSA9IGdldF9tZW1vcnlfcGFnZV9zaXplKCk7CisK KwludW1hX3Byb2NzX3Blcl9ub2RlID0gKE1heEJhY2tlbmRzICsgKG51bWFfbm9kZXMgLSAx KSkgLyBudW1hX25vZGVzOworCisJZWxvZyhMT0csICJOVU1BOiBwZ3Byb2MgYmFja2VuZHMg JWQgbnVtX25vZGVzICVkIHBlcl9ub2RlICVkIiwKKwkJIE1heEJhY2tlbmRzLCBudW1hX25v ZGVzLCBudW1hX3Byb2NzX3Blcl9ub2RlKTsKKworCUFzc2VydChudW1hX25vZGVzICogbnVt YV9wcm9jc19wZXJfbm9kZSA+PSBNYXhCYWNrZW5kcyk7CisKKwkvKiBzdWNjZXNzICovCisJ bnVtYV9jYW5fcGFydGl0aW9uID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK3BnX251bWFf bW92ZV90b19ub2RlKGNoYXIgKnN0YXJ0cHRyLCBjaGFyICplbmRwdHIsIGludCBub2RlKQor eworCVNpemUJCW1lbV9wYWdlX3NpemU7CisJU2l6ZQkJc3o7CisKKwkvKgorCSAqIEdldCB0 aGUgImFjdHVhbCIgbWVtb3J5IHBhZ2Ugc2l6ZSwgbm90IHRoZSBvbmUgd2UgdXNlZCBmb3Ig c2l6aW5nLiBXZQorCSAqIG1pZ2h0IGhhdmUgdXNlZCBodWdlIHBhZ2UgZm9yIHNpemluZywg YnV0IG9ubHkgZ2V0IHJlZ3VsYXIgcGFnZXMgd2hlbgorCSAqIGFsbG9jYXRpbmcsIHNvIHdl IG11c3QgdXNlIHRoZSBzbWFsbGVyIHBhZ2VzIGhlcmUuCisJICoKKwkgKiBYWFggQSBiaXQg d2VpcmQuIERvIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgcG9zdG1hc3Rlcj8gQ291bGQgdGhp cyBldmVuCisJICogcnVuIG91dHNpZGUgcG9zdG1hc3Rlcj8gSSBkb24ndCB0aGluayBzby4K KwkgKi8KKwlpZiAoSXNVbmRlclBvc3RtYXN0ZXIpCisJCW1lbV9wYWdlX3NpemUgPSBwZ19n ZXRfc2htZW1fcGFnZXNpemUoKTsKKwllbHNlCisJCW1lbV9wYWdlX3NpemUgPSBnZXRfbWVt b3J5X3BhZ2Vfc2l6ZSgpOworCisJQXNzZXJ0KChpbnQ2NCkgc3RhcnRwdHIgJSBtZW1fcGFn ZV9zaXplID09IDApOworCisJc3ogPSAoZW5kcHRyIC0gc3RhcnRwdHIpOworCW51bWFfdG9u b2RlX21lbW9yeShzdGFydHB0ciwgc3osIG5vZGUpOworfQorCisvKgorICogZG9lc24ndCBk byBhbGlnbm1lbnQKKyAqLworc3RhdGljIGNoYXIgKgorcGdwcm9jX3BhcnRpdGlvbl9pbml0 KGNoYXIgKnB0ciwgaW50IG51bV9wcm9jcywgaW50IGFsbHByb2NzX2luZGV4LCBpbnQgbm9k ZSkKK3sKKwlQR1BST0MJICAgKnByb2NzX25vZGU7CisKKwkvKiBhbGxvY2F0ZSB0aGUgUEdQ Uk9DIGNodW5rIGZvciB0aGlzIG5vZGUgKi8KKwlwcm9jc19ub2RlID0gKFBHUFJPQyAqKSBw dHI7CisKKwkvKiBwb2ludGVyIHJpZ2h0IGFmdGVyIHRoaXMgYXJyYXkgKi8KKwlwdHIgPSAo Y2hhciAqKSBwdHIgKyBudW1fcHJvY3MgKiBzaXplb2YoUEdQUk9DKTsKKworCWVsb2coTE9H LCAiTlVNQTogcGdwcm9jX2luaXRfcGFydGl0aW9uIHByb2NzICVwIGVuZHB0ciAlcCBudW1f cHJvY3MgJWQgbm9kZSAlZCIsCisJCSBwcm9jc19ub2RlLCBwdHIsIG51bV9wcm9jcywgbm9k ZSk7CisKKwkvKgorCSAqIGlmIG5vZGUgc3BlY2lmaWVkLCBtb3ZlIHRvIG5vZGUgLSBkbyB0 aGlzIGJlZm9yZSB3ZSBzdGFydCB0b3VjaGluZyB0aGUKKwkgKiBtZW1vcnksIHRvIG1ha2Ug c3VyZSBpdCdzIG5vdCBtYXBwZWQgdG8gYW55IG5vZGUgeWV0CisJICovCisJaWYgKG5vZGUg IT0gLTEpCisJCXBnX251bWFfbW92ZV90b19ub2RlKChjaGFyICopIHByb2NzX25vZGUsIHB0 ciwgbm9kZSk7CisKKwkvKiBhZGQgcG9pbnRlcnMgdG8gdGhlIFBHUFJPQyBlbnRyaWVzIHRv IGFsbFByb2NzICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcHJvY3M7IGkrKykKKwl7 CisJCXByb2NzX25vZGVbaV0ubnVtYV9ub2RlID0gbm9kZTsKKwkJcHJvY3Nfbm9kZVtpXS5w cm9jbnVtYmVyID0gYWxscHJvY3NfaW5kZXg7CisKKwkJUHJvY0dsb2JhbC0+YWxsUHJvY3Nb YWxscHJvY3NfaW5kZXhdID0gJnByb2NzX25vZGVbaV07CisKKwkJYWxscHJvY3NfaW5kZXgr KzsKKwl9CisKKwlyZXR1cm4gcHRyOworfQorCitzdGF0aWMgY2hhciAqCitmYXN0cGF0aF9w YXJ0aXRpb25faW5pdChjaGFyICpwdHIsIGludCBudW1fcHJvY3MsIGludCBhbGxwcm9jc19p bmRleCwgaW50IG5vZGUsCisJCQkJCQlTaXplIGZwTG9ja0JpdHNTaXplLCBTaXplIGZwUmVs SWRTaXplKQoreworCWNoYXIJICAgKmVuZHB0ciA9IHB0ciArIG51bV9wcm9jcyAqIChmcExv Y2tCaXRzU2l6ZSArIGZwUmVsSWRTaXplKTsKKworCS8qCisJICogaWYgbm9kZSBzcGVjaWZp ZWQsIG1vdmUgdG8gbm9kZSAtIGRvIHRoaXMgYmVmb3JlIHdlIHN0YXJ0IHRvdWNoaW5nIHRo ZQorCSAqIG1lbW9yeSwgdG8gbWFrZSBzdXJlIGl0J3Mgbm90IG1hcHBlZCB0byBhbnkgbm9k ZSB5ZXQKKwkgKi8KKwlpZiAobm9kZSAhPSAtMSkKKwkJcGdfbnVtYV9tb3ZlX3RvX25vZGUo cHRyLCBlbmRwdHIsIG5vZGUpOworCisJLyoKKwkgKiBOb3cgcG9pbnQgdGhlIFBHUFJPQyBl bnRyaWVzIHRvIHRoZSBmYXN0LXBhdGggYXJyYXlzLCBhbmQgYWxzbyBhZHZhbmNlCisJICog dGhlIGZwUHRyLgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3Byb2NzOyBpKysp CisJeworCQlQR1BST0MJICAgKnByb2MgPSBQcm9jR2xvYmFsLT5hbGxQcm9jc1thbGxwcm9j c19pbmRleF07CisKKwkJLyogY3Jvc3MtY2hlY2sgd2UgZ290IHRoZSBleHBlY3RlZCBOVU1B IG5vZGUgKi8KKwkJQXNzZXJ0KHByb2MtPm51bWFfbm9kZSA9PSBub2RlKTsKKwkJQXNzZXJ0 KHByb2MtPnByb2NudW1iZXIgPT0gYWxscHJvY3NfaW5kZXgpOworCisJCS8qCisJCSAqIFNl dCB0aGUgZmFzdC1wYXRoIGxvY2sgYXJyYXlzLCBhbmQgbW92ZSB0aGUgcG9pbnRlci4gV2Ug aW50ZXJsZWF2ZQorCQkgKiB0aGUgdHdvIGFycmF5cywgdG8gKGhvcGVmdWxseSkgZ2V0IHNv bWUgbG9jYWxpdHkgZm9yIGVhY2ggYmFja2VuZC4KKwkJICovCisJCXByb2MtPmZwTG9ja0Jp dHMgPSAodWludDY0ICopIHB0cjsKKwkJcHRyICs9IGZwTG9ja0JpdHNTaXplOworCisJCXBy b2MtPmZwUmVsSWQgPSAoT2lkICopIHB0cjsKKwkJcHRyICs9IGZwUmVsSWRTaXplOworCisJ CUFzc2VydChwdHIgPD0gZW5kcHRyKTsKKworCQlhbGxwcm9jc19pbmRleCsrOworCX0KKwor CUFzc2VydChwdHIgPT0gZW5kcHRyKTsKKworCXJldHVybiBlbmRwdHI7Cit9CisKK2ludAor UHJvY1BhcnRpdGlvbkNvdW50KHZvaWQpCit7CisJaWYgKG51bWFfcHJvY3NfaW50ZXJsZWF2 ZSAmJiBudW1hX2Nhbl9wYXJ0aXRpb24pCisJCXJldHVybiAobnVtYV9ub2RlcyArIDEpOwor CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQKK1Byb2NQYXJ0aXRpb25HZXQoaW50IGlkeCwgaW50 ICpub2RlLCBpbnQgKm5wcm9jcywgdm9pZCAqKnByb2NzcHRyLCB2b2lkICoqZnBwdHIpCit7 CisJUEdQcm9jUGFydGl0aW9uICpwYXJ0ID0gJnBhcnRpdGlvbnNbaWR4XTsKKworCUFzc2Vy dCgoaWR4ID49IDApICYmIChpZHggPCBQcm9jUGFydGl0aW9uQ291bnQoKSkpOworCisJKm5w cm9jcyA9IHBhcnQtPm51bV9wcm9jczsKKwkqcHJvY3NwdHIgPSBwYXJ0LT5wZ3Byb2NfcHRy OworCSpmcHB0ciA9IHBhcnQtPmZhc3RwYXRoX3B0cjsKKwkqbm9kZSA9IHBhcnQtPm51bWFf bm9kZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKaW5kZXggYTExYmM3MWEzODYu LjZlZTQ2ODRkMWI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2Jh bHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwpAQCAtMTQ5LDYg KzE0OSw3IEBAIGludAkJCU1heEJhY2tlbmRzID0gMDsKIGJvb2wJCW51bWFfYnVmZmVyc19p bnRlcmxlYXZlID0gZmFsc2U7CiBib29sCQludW1hX2xvY2FsYWxsb2MgPSBmYWxzZTsKIGJv b2wJCW51bWFfcGFydGl0aW9uX2ZyZWVsaXN0ID0gZmFsc2U7Citib29sCQludW1hX3Byb2Nz X2ludGVybGVhdmUgPSBmYWxzZTsKIAogLyogR1VDIHBhcmFtZXRlcnMgZm9yIHZhY3V1bSAq LwogaW50CQkJVmFjdXVtQnVmZmVyVXNhZ2VMaW1pdCA9IDIwNDg7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IDA1NTJlZDYyY2M3Li43YjcxODc2MDI0OCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTIxNDYsNiArMjE0NiwxNiBA QCBzdHJ1Y3QgY29uZmlnX2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQlOVUxMLCBO VUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJudW1hX3Byb2NzX2ludGVybGVhdmUiLCBQR0Nf UE9TVE1BU1RFUiwgREVWRUxPUEVSX09QVElPTlMsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJs ZXMgTlVNQSBpbnRlcmxlYXZpbmcgb2YgUEdQUk9DIGVudHJpZXMuIiksCisJCQlnZXR0ZXh0 X25vb3AoIldoZW4gZW5hYmxlZCwgdGhlIFBHUFJPQyBlbnRyaWVzIGFyZSBpbnRlcmxlYXZl ZCB0byBhbGwgTlVNQSBub2Rlcy4iKSwKKwkJfSwKKwkJJm51bWFfcHJvY3NfaW50ZXJsZWF2 ZSwKKwkJZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7InN5bmNf cmVwbGljYXRpb25fc2xvdHMiLCBQR0NfU0lHSFVQLCBSRVBMSUNBVElPTl9TVEFOREJZLAog CQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGEgcGh5c2ljYWwgc3RhbmRieSB0byBzeW5jaHJv bml6ZSBsb2dpY2FsIGZhaWxvdmVyIHJlcGxpY2F0aW9uIHNsb3RzIGZyb20gdGhlIHByaW1h cnkgc2VydmVyLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9z cmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCA2NmJhZjJiZjMzZS4uY2RlZWU4ZGNjYmEg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRl L21pc2NhZG1pbi5oCkBAIC0xODEsNiArMTgxLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBtYXhfcGFyYWxsZWxfd29ya2VyczsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIG51bWFf YnVmZmVyc19pbnRlcmxlYXZlOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgbnVtYV9sb2Nh bGFsbG9jOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgbnVtYV9wYXJ0aXRpb25fZnJlZWxp c3Q7CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBudW1hX3Byb2NzX2ludGVybGVhdmU7CiAK IGV4dGVybiBQR0RMTElNUE9SVCBpbnQgY29tbWl0X3RpbWVzdGFtcF9idWZmZXJzOwogZXh0 ZXJuIFBHRExMSU1QT1JUIGludCBtdWx0aXhhY3RfbWVtYmVyX2J1ZmZlcnM7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJvYy5oCmluZGV4IGM2ZjVlYmNlZWZkLi5kMmQyNjk5NDFmYyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9j LmgKQEAgLTIwMiw2ICsyMDIsOCBAQCBzdHJ1Y3QgUEdQUk9DCiAJCQkJCQkJCSAqIHZhY3V1 bSBtdXN0IG5vdCByZW1vdmUgdHVwbGVzIGRlbGV0ZWQgYnkKIAkJCQkJCQkJICogeGlkID49 IHhtaW4gISAqLwogCisJaW50CQkJcHJvY251bWJlcjsJCS8qIGluZGV4IGluIFByb2NHbG9i YWwtPmFsbFByb2NzICovCisKIAlpbnQJCQlwaWQ7CQkJLyogQmFja2VuZCdzIHByb2Nlc3Mg SUQ7IDAgaWYgcHJlcGFyZWQgeGFjdCAqLwogCiAJaW50CQkJcGd4YWN0b2ZmOwkJLyogb2Zm c2V0IGludG8gdmFyaW91cyBQcm9jR2xvYmFsLT5hcnJheXMgd2l0aApAQCAtMzI3LDYgKzMy OSw5IEBAIHN0cnVjdCBQR1BST0MKIAlQR1BST0MJICAgKmxvY2tHcm91cExlYWRlcjsJLyog bG9jayBncm91cCBsZWFkZXIsIGlmIEknbSBhIG1lbWJlciAqLwogCWRsaXN0X2hlYWQJbG9j a0dyb3VwTWVtYmVyczsJLyogbGlzdCBvZiBtZW1iZXJzLCBpZiBJJ20gYSBsZWFkZXIgKi8K IAlkbGlzdF9ub2RlCWxvY2tHcm91cExpbms7CS8qIG15IG1lbWJlciBsaW5rLCBpZiBJJ20g YSBtZW1iZXIgKi8KKworCS8qIE5VTUEgbm9kZSAqLworCWludAkJCW51bWFfbm9kZTsKIH07 CiAKIC8qIE5PVEU6ICJ0eXBlZGVmIHN0cnVjdCBQR1BST0MgUEdQUk9DIiBhcHBlYXJzIGlu IHN0b3JhZ2UvbG9jay5oLiAqLwpAQCAtMzkxLDcgKzM5Niw3IEBAIGV4dGVybiBQR0RMTElN UE9SVCBQR1BST0MgKk15UHJvYzsKIHR5cGVkZWYgc3RydWN0IFBST0NfSERSCiB7CiAJLyog QXJyYXkgb2YgUEdQUk9DIHN0cnVjdHVyZXMgKG5vdCBpbmNsdWRpbmcgZHVtbWllcyBmb3Ig cHJlcGFyZWQgdHhucykgKi8KLQlQR1BST0MJICAgKmFsbFByb2NzOworCVBHUFJPQwkgICoq YWxsUHJvY3M7CiAKIAkvKiBBcnJheSBtaXJyb3JpbmcgUEdQUk9DLnhpZCBmb3IgZWFjaCBQ R1BST0MgY3VycmVudGx5IGluIHRoZSBwcm9jYXJyYXkgKi8KIAlUcmFuc2FjdGlvbklkICp4 aWRzOwpAQCAtNDQzLDggKzQ0OCw4IEBAIGV4dGVybiBQR0RMTElNUE9SVCBQR1BST0MgKlBy ZXBhcmVkWGFjdFByb2NzOwogLyoKICAqIEFjY2Vzc29ycyBmb3IgZ2V0dGluZyBQR1BST0Mg Z2l2ZW4gYSBQcm9jTnVtYmVyIGFuZCB2aWNlIHZlcnNhLgogICovCi0jZGVmaW5lIEdldFBH UHJvY0J5TnVtYmVyKG4pICgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbKG4pXSkKLSNkZWZpbmUg R2V0TnVtYmVyRnJvbVBHUHJvYyhwcm9jKSAoKHByb2MpIC0gJlByb2NHbG9iYWwtPmFsbFBy b2NzWzBdKQorI2RlZmluZSBHZXRQR1Byb2NCeU51bWJlcihuKSAoUHJvY0dsb2JhbC0+YWxs UHJvY3NbKG4pXSkKKyNkZWZpbmUgR2V0TnVtYmVyRnJvbVBHUHJvYyhwcm9jKSAoKHByb2Mp LT5wcm9jbnVtYmVyKQogCiAvKgogICogV2Ugc2V0IGFzaWRlIHNvbWUgZXh0cmEgUEdQUk9D IHN0cnVjdHVyZXMgZm9yICJzcGVjaWFsIHdvcmtlciIgcHJvY2Vzc2VzLApAQCAtNTIwLDQg KzUyNSw3IEBAIGV4dGVybiBQR1BST0MgKkF1eGlsaWFyeVBpZEdldFByb2MoaW50IHBpZCk7 CiBleHRlcm4gdm9pZCBCZWNvbWVMb2NrR3JvdXBMZWFkZXIodm9pZCk7CiBleHRlcm4gYm9v bCBCZWNvbWVMb2NrR3JvdXBNZW1iZXIoUEdQUk9DICpsZWFkZXIsIGludCBwaWQpOwogCitl eHRlcm4gaW50CVByb2NQYXJ0aXRpb25Db3VudCh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2NQ YXJ0aXRpb25HZXQoaW50IGlkeCwgaW50ICpub2RlLCBpbnQgKm5wcm9jcywgdm9pZCAqKnBy b2NzcHRyLCB2b2lkICoqZnBwdHIpOworCiAjZW5kaWYJCQkJCQkJLyogX1BST0NfSF8gKi8K ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggODU0MGQ1MzdhM2UuLmRlZDJkYjMw NDIyIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTg3Niw2ICsxODc2LDcg QEAgUEdQX01QSQogUEdQX1B1YktleQogUEdQX1MySwogUEdQaW5nCitQR1Byb2NQYXJ0aXRp b24KIFBHUXVlcnlDbGFzcwogUEdSVXNhZ2UKIFBHU2VtYXBob3JlCi0tIAoyLjUwLjEKCg== --------------8xriSvZLhsgPmdy7CNlM8G85 Content-Type: text/x-patch; charset=UTF-8; name="v20250807-0009-NUMA-weighted-clocksweep-balancing.patch" Content-Disposition: attachment; filename="v20250807-0009-NUMA-weighted-clocksweep-balancing.patch" Content-Transfer-Encoding: base64 RnJvbSAxNzA2NzNkNGZlODliYjk0MzZjMmFmNDEyMTY4ODRmZWZhMGE0OGVlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCA2IEF1ZyAyMDI1IDAxOjA5OjU3ICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNTA4MDcgMDkvMTFdIE5VTUE6IHdlaWdodGVkIGNsb2Nrc3dlZXAgYmFsYW5jaW5nCgpU aGUgcGFydGl0aW9ucyBtYXkgbm90IGJlIG9mIGV4YWN0bHkgdGhlIHNhbWUgc2l6ZSwgc28g Y29uc2lkZXIgdGhhdAp3aGVuIGJhbGFuY2luZyBjbG9ja3N3ZWVwIGFsbG9jYXRpb25zLgot LS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgfCA2MyArKysrKysr KysrKysrKysrKysrKysrLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1MyBpbnNlcnRpb25zKCsp LCAxMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3Qu YwppbmRleCBmMjIwM2NlYmNjOC4uYmJlMjliYzk3MjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtNzM4LDYgKzczOCwyMCBAQCBTdHJhdGVneVN5bmNC YWxhbmNlKHZvaWQpCiAJCQlhdmdfYWxsb2NzLAkJCS8qIGF2ZXJhZ2UgYWxsb2NhdGlvbnMg KHBlciBwYXJ0aXRpb24pICovCiAJCQlkZWx0YV9hbGxvY3MgPSAwOwkvKiBzdW0gb2YgYWxs b2NzIGFib3ZlIGF2ZXJhZ2UgKi8KIAorCS8qCisJICogU2l6ZSBvZiBhIHBhcnRpdGlvbiwg dXNlZCB0byBjYWxjdWxhdGUgd2VpZ2h0ZWQgYXZlcmFnZSAodGhlIGZpcnN0CisJICogcGFy dGl0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIHRoZSBsYXJnZXN0IG9uZSwgYW5kIHNvIHdpbGwg YmUgY291bnRlZAorCSAqIGFzIGEgInVuaXQiIHBhcnRpdGlvbiB3aXRoIHdlaWdodCAxLjAp LgorCSAqLworCWludDMyCW51bV9idWZmZXJzID0gU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNb MF0ubnVtQnVmZmVyczsKKworCS8qCisJICogVG90YWwgd2VpZ2h0IG9mIHBhcnRpdGlvbnMu IElmIHRoZSBwYXJ0aXRpb25zIGhhdmUgdGhlIHNhbWUgc2l6ZSwKKwkgKiB0aGUgd2VpZ2h0 IHNob3VsZCBiZSBlcXVhbCB0aGUgcGFydGl0aW9uIGNvdW50IChtb2R1bG8gcm91bmRpbmcK KwkgKiBlcnJvcnMsIGV0Yy4pCisJICovCisJZG91YmxlCXdlaWdodCA9IDAuMDsKKwogCS8q CiAJICogQ29sbGVjdCB0aGUgbnVtYmVyIG9mIGFsbG9jYXRpb25zIHJlcXVlc3RlZCBpbiB0 aGUgcGFzdCBpbnRlcnZhbC4KIAkgKiBXaGlsZSBhdCBpdCwgcmVzZXQgdGhlIGNvdW50ZXIg dG8gc3RhcnQgdGhlIG5ldyBpbnRlcnZhbC4KQEAgLTc2NCwxNiArNzc4LDI3IEBAIFN0cmF0 ZWd5U3luY0JhbGFuY2Uodm9pZCkKIAkJcGdfYXRvbWljX2ZldGNoX2FkZF91NjQoJnN3ZWVw LT5udW1Ub3RhbFJlcXVlc3RlZEFsbG9jcywgYWxsb2NzW2ldKTsKIAogCQl0b3RhbF9hbGxv Y3MgKz0gYWxsb2NzW2ldOworCisJCS8qIHdlaWdodCBvZiB0aGUgcGFydGl0aW9uLCByZWxh dGl2ZSB0byB0aGUgInVuaXQiIHBhcnRpdGlvbiAqLworCQl3ZWlnaHQgKz0gKHN3ZWVwLT5u dW1CdWZmZXJzICogMS4wIC8gbnVtX2J1ZmZlcnMpOwogCX0KIAogCS8qCi0JICogQ2FsY3Vs YXRlIHRoZSAiZmFpciBzaGFyZSIgb2YgYWxsb2NhdGlvbnMgcGVyIHBhcnRpdGlvbi4KKwkg KiBYWFggTm90IHN1cmUgaWYgdGhlIHRvdGFsX3dlaWdodCBtaWdodCBleGNlZWQgbnVtX3Bh cnRpdGlvbnMgZHVlIHRvCisJICogcm91bmRpbmcgZXJyb3JzLgorCSAqLworCUFzc2VydCgo d2VpZ2h0ID4gMC4wKSAmJiAod2VpZ2h0IDw9IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRp dGlvbnMpKTsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSAiZmFpciBzaGFyZSIgb2YgYWxs b2NhdGlvbnMgcGVyIHBhcnRpdGlvbi4gVGhpcyBpcyB0aGUKKwkgKiBudW1iZXIgb2YgYWxs b2NhdGlvbnMgZm9yIHRoZSAidW5pdCIgcGFydGl0aW9uIHdpdGggbnVtX2J1ZmZlcnMsIHdl J2xsCisJICogbmVlZCB0byBhZGp1c3QgaXQgdXNpbmcgdGhlIHBlci1wYXJ0aXRpb24gd2Vp Z2h0LgogCSAqCiAJICogWFhYIFRoZSBsYXN0IHBhcnRpdGlvbiBjb3VsZCBiZSBzbWFsbGVy LCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZQogCSAqIGV4cGVjdGVkIHRvIGhhbmRsZSBm ZXdlciBhbGxvY2F0aW9ucy4gU28gdGhpcyBzaG91bGQgYmUgYSB3ZWlnaHRlZAogCSAqIGF2 ZXJhZ2UuIEJ1dCBmb3Igbm93IGEgc2ltcGxlIGF2ZXJhZ2UgaXMgZ29vZCBlbm91Z2guCiAJ ICovCi0JYXZnX2FsbG9jcyA9ICh0b3RhbF9hbGxvY3MgLyBTdHJhdGVneUNvbnRyb2wtPm51 bV9wYXJ0aXRpb25zKTsKKwlhdmdfYWxsb2NzID0gKHRvdGFsX2FsbG9jcyAvIHdlaWdodCk7 CiAKIAkvKgogCSAqIENhbGN1bGF0ZSB0aGUgImRlbHRhIiBmcm9tIGJhbGFuY2VkIHN0YXRl LCBpLmUuIGhvdyBtYW55IGFsbG9jYXRpb25zCkBAIC03ODEsOCArODA2LDE0IEBAIFN0cmF0 ZWd5U3luY0JhbGFuY2Uodm9pZCkKIAkgKi8KIAlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0 ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnM7IGkrKykKIAl7Ci0JCWlmIChhbGxvY3NbaV0g PiBhdmdfYWxsb2NzKQotCQkJZGVsdGFfYWxsb2NzICs9IChhbGxvY3NbaV0gLSBhdmdfYWxs b2NzKTsKKwkJQ2xvY2tTd2VlcCAqc3dlZXAgPSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNb aV07CisKKwkJLyogbnVtYmVyIG9mIGFsbG9jYXRpb25zIGV4cGVjdGVkIGZvciB0aGlzIHBh cnRpdGlvbiAqLworCQlkb3VibGUJcGFydF93ZWlnaHQgPSAoc3dlZXAtPm51bUJ1ZmZlcnMg KiAxLjAgLyBudW1fYnVmZmVycyk7CisJCXVpbnQzMglwYXJ0X2FsbG9jcyA9IGF2Z19hbGxv Y3MgKiBwYXJ0X3dlaWdodDsKKworCQlpZiAoYWxsb2NzW2ldID4gcGFydF9hbGxvY3MpCisJ CQlkZWx0YV9hbGxvY3MgKz0gKGFsbG9jc1tpXSAtIHBhcnRfYWxsb2NzKTsKIAl9CiAKIAkv KgpAQCAtODQ1LDYgKzg3NiwxMCBAQCBTdHJhdGVneVN5bmNCYWxhbmNlKHZvaWQpCiAJCUNs b2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ldOwogCQl1aW50 OAkJYmFsYW5jZVtNQVhfQlVGRkVSX1BBUlRJVElPTlNdOwogCisJCS8qIG51bWJlciBvZiBh bGxvY2F0aW9ucyBleHBlY3RlZCBmb3IgdGhpcyBwYXJ0aXRpb24gKi8KKwkJZG91YmxlCXBh cnRfd2VpZ2h0ID0gKHN3ZWVwLT5udW1CdWZmZXJzICogMS4wIC8gbnVtX2J1ZmZlcnMpOwor CQl1aW50MzIJcGFydF9hbGxvY3MgPSBhdmdfYWxsb2NzICogcGFydF93ZWlnaHQ7CisKIAkJ LyogbG9jaywgd2UncmUgZ29pbmcgdG8gbW9kaWZ5IHRoZSBiYWxhbmNlIHdlaWdodHMgKi8K IAkJU3BpbkxvY2tBY3F1aXJlKCZzd2VlcC0+Y2xvY2tfc3dlZXBfbG9jayk7CiAKQEAgLTg1 Miw3ICs4ODcsNyBAQCBTdHJhdGVneVN5bmNCYWxhbmNlKHZvaWQpCiAJCW1lbXNldChiYWxh bmNlLCAwLCBzaXplb2YodWludDgpICogTUFYX0JVRkZFUl9QQVJUSVRJT05TKTsKIAogCQkv KiBkb2VzIHRoaXMgcGFydGl0aW9uIGhhcyBmZXdlciBvciBtb3JlIHRoYW4gYXZnX2FsbG9j cz8gKi8KLQkJaWYgKGFsbG9jc1tpXSA8IGF2Z19hbGxvY3MpCisJCWlmIChhbGxvY3NbaV0g PCBwYXJ0X2FsbG9jcykKIAkJewogCQkJLyogZmV3ZXIgLSBkb24ndCByZWRpcmVjdCBhbnkg YWxsb2NhdGlvbnMgZWxzZXdoZXJlICovCiAJCQliYWxhbmNlW2ldID0gMTAwOwpAQCAtODY2 LDIyICs5MDEsMzAgQEAgU3RyYXRlZ3lTeW5jQmFsYW5jZSh2b2lkKQogCQkJICogYSBmcmFj dGlvbiBwcm9wb3J0aW9uYWwgdG8gKGV4Y2Vzcy9kZWx0YSkgZnJvbSB0aGlzIG9uZS4KIAkJ CSAqLwogCi0JCQkvKiBmcmFjdGlvbiBvZiB0aGUgInRvdGFsIiBkZWx0YSAqLwotCQkJZG91 YmxlCWRlbHRhX2ZyYWMgPSAoYWxsb2NzW2ldIC0gYXZnX2FsbG9jcykgKiAxLjAgLyBkZWx0 YV9hbGxvY3M7CisJCQkvKiBmcmFjdGlvbiBvZiB0aGUgInRvdGFsIiBkZWx0YSByZXByZXNl bnRlZCBieSAiZXhjZXNzIiBhbGxvY2F0aW9ucyAqLworCQkJZG91YmxlCWRlbHRhX2ZyYWMg PSAoYWxsb2NzW2ldIC0gcGFydF9hbGxvY3MpICogMS4wIC8gZGVsdGFfYWxsb2NzOwogCiAJ CQkvKiBrZWVwIGp1c3QgZW5vdWdoIGFsbG9jYXRpb25zIHRvIG1lZXQgdGhlIHRhcmdldCAq LwotCQkJYmFsYW5jZVtpXSA9ICgxMDAuMCAqIGF2Z19hbGxvY3MgLyBhbGxvY3NbaV0pOwor CQkJYmFsYW5jZVtpXSA9ICgxMDAuMCAqIHBhcnRfYWxsb2NzIC8gYWxsb2NzW2ldKTsKIAog CQkJLyogcmVkaXJlY3QgdGhlIGV4dHJhIGFsbG9jYXRpb25zICovCiAJCQlmb3IgKGludCBq ID0gMDsgaiA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnM7IGorKykKIAkJCXsK KwkJCQlDbG9ja1N3ZWVwICpzd2VlcDIgPSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbal07 CisKKwkJCQkvKiBudW1iZXIgb2YgYWxsb2NhdGlvbnMgZXhwZWN0ZWQgZm9yIHRoaXMgcGFy dGl0aW9uICovCisJCQkJZG91YmxlCXBhcnRfd2VpZ2h0XzIgPSAoc3dlZXAyLT5udW1CdWZm ZXJzICogMS4wIC8gbnVtX2J1ZmZlcnMpOworCQkJCXVpbnQzMglwYXJ0X2FsbG9jc18yID0g YXZnX2FsbG9jcyAqIHBhcnRfd2VpZ2h0XzI7CisKIAkJCQkvKiBIb3cgbWFueSBhbGxvY2F0 aW9ucyB0byByZWNlaXZlIGZyb20gaS10aCBwYXJ0aXRpb24/ICovCi0JCQkJdWludDMyCXJl Y2VpdmVfYWxsb2NzID0gZGVsdGFfZnJhYyAqIChhdmdfYWxsb2NzIC0gYWxsb2NzW2pdKTsK KwkJCQl1aW50MzIJcmVjZWl2ZV9hbGxvY3MgPSBkZWx0YV9mcmFjICogKHBhcnRfYWxsb2Nz XzIgLSBhbGxvY3Nbal0pOwogCiAJCQkJLyogaWdub3JlIHBhcnRpdGlvbnMgdGhhdCBkb24n dCBuZWVkIGFkZGl0aW9uYWwgYWxsb2NhdGlvbnMgKi8KLQkJCQlpZiAoYWxsb2NzW2pdID4g YXZnX2FsbG9jcykKKwkJCQlpZiAoYWxsb2NzW2pdID4gcGFydF9hbGxvY3NfMikKIAkJCQkJ Y29udGludWU7CiAKKwkJCQlBc3NlcnQocmVjZWl2ZV9hbGxvY3MgPj0gMCk7CisKIAkJCQkv KiBmcmFjdGlvbiB0byByZWRpcmVjdCAqLwogCQkJCWJhbGFuY2Vbal0gPSAoMTAwLjAgKiBy ZWNlaXZlX2FsbG9jcyAvIGFsbG9jc1tpXSkgKyAwLjU7CiAJCQl9Ci0tIAoyLjUwLjEKCg== --------------8xriSvZLhsgPmdy7CNlM8G85 Content-Type: text/x-patch; charset=UTF-8; name="v20250807-0008-NUMA-clocksweep-allocation-balancing.patch" Content-Disposition: attachment; filename*0="v20250807-0008-NUMA-clocksweep-allocation-balancing.patch" Content-Transfer-Encoding: base64 RnJvbSBmODMyZmVkYjg0NzAwNDk5MGU3ZTgwNjY5MWFiNDMzODc1MmE1ZGI1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAzMSBKdWwgMjAyNSAxOTo1MDowNSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwODA3IDA4LzExXSBOVU1BOiBjbG9ja3N3ZWVwIGFsbG9jYXRpb24gYmFsYW5jaW5n CgpJZiBiYWNrZW5kcyBvbmx5IGFsbG9jYXRlIGJ1ZmZlcnMgZnJvbSB0aGUgImxvY2FsIiBw YXJ0aXRpb24sIHRoaXMgY291bGQKY2F1c2Ugc2lnbmlmaWNhbnQgbWlzYmFsYW5jZSAtIHNv bWUgcGFydGl0aW9ucyBtaWdodCBiZSBvdmVydXNlZCwgd2hpbGUKb3RoZXIgcGFydGl0aW9u cyB3b3VsZCBiZSBsZWZ0IHVudXNlZC4gSW4gb3RoZXIgd29yZHMsIHNoYXJlZCBidWZmZXJz CndvdWxkIG5vdCBiZSB1c2VkIGVmZmljaWVudGx5LgoKV2Ugd2FudCBhbGwgcGFydGl0aW9u cyB0byBiZSB1c2VkIGFib3V0IHRoZSBzYW1lLCBpLmUuIHNlcnZlIGFib3V0IHRoZQpzYW1l IG51bWJlciBvZiBhbGxvY2F0aW9ucy4gVG8gYWNoaWV2ZSB0aGF0LCBhbGxvY2F0aW9ucyBm cm9tIHBhcnRpdGlvbnMKdGhhdCBhcmUgInRvbyBidXN5IiBtYXkgZ2V0IHJlZGlyZWN0ZWQg dG8gb3RoZXIgcGFydGl0aW9ucy4gVGhlIHN5c3RlbQpjb3VudHMgYWxsb2NhdGlvbnMgcmVx dWVzdGVkIGZyb20gZWFjaCBwYXJ0aXRpb24sIGNhbGN1bGF0ZXMgdGhlICJmYWlyCnNoYXJl IiAoYXZlcmFnZSBwZXIgcGFydGl0aW9uKSwgYW5kIHRoZW4gcmVkaXJlY3RzZXhjZXNzIGFs bG9jYXRpb25zIHRvCm90aGVyIHBhcnRpdGlvbnMuCgpFYWNoIHBhcnRpdGlvbiBnZXRzIGEg c2V0IG9mIGNvZWZmaWNpZW50cyBkZXRlcm1pbmluZyB0aGUgZnJhY3Rpb24gb2YKYWxsb2Nh dGlvbnMgdG8gcmVkaXJlY3QgdG8gb3RoZXIgcGFydGl0aW9ucy4gVGhlIGNvZWZmaWNpZW50 cyBtYXkgYmUKaW50ZXJwcmV0ZWQgYXMgYSAiYnVkZ2V0IiBmb3IgZWFjaCBvZiB0aGUgcGFy dGl0aW9uLCBpLmUuIHRoZSBudW1iZXIgb2YKYWxsb2NhdGlvbnMgdG8gc2VydmUgZnJvbSB0 aGF0IHBhcnRpdGlvbiwgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dApwYXJ0aXRpb24gKGlu IGEgcm91bmQtcm9iaW4gbWFubmVyKS4KCkFsbCBvZiB0aGlzIGlzIHRpZWQgdG8gdGhlIHBh cnRpdGlvbiB3aGVyZSB0aGUgYWxsb2NhdGlvbiB3YXMgcmVxdWVzdGVkLgpFYWNoIHBhcnRp dGlvbiBoYXMgYSBzZXBhcmF0ZSBzZXQgb2YgY29lZmZpY2llbnRzLgoKV2UgbWlnaHQgYWxz byB0cmVhdCB0aGUgY29lZmZpY2llbnRzIGFzIHByb2JhYmlsaXRpZXMsIGFuZCB1c2UgUFJO RyB0bwpkZXRlcm1pbmUgd2hlcmUgdG8gZGlyZWN0IGluZGl2aWR1YWwgcmVxdWVzdHMuIEJ1 dCBhIFBSTkcgc2VlbXMgZmFpcmx5CmV4cGVuc2l2ZSwgYW5kIHRoZSBidWRnZXQgYXBwcm9h Y2ggd29ya3Mgd2VsbC4KCldlIGludGVudGlvbmFsbHkga2VlcCB0aGUgImJ1ZGdldCIgZmFp cmx5IGxvdywgd2l0aCB0aGUgc3VtIGZvciBhIGdpdmVuCnBhcnRpdGlvbiAxMDAuIFRoYXQg bWVhbnMgd2UgZ2V0IHRvIHRoZSBzYW1lIHBhcnRpdGlvbiBhZnRlciBvbmx5IDEwMAphbGxv Y2F0aW9ucywga2VlcGluZyBpdCBtb3JlIGJhbGFuY2VkLiBJdCB3b3VsZG4ndCBiZSBoYXJk IHRvIG1ha2UgdGhlCmJ1ZGdldHMgaGlnaGVyIChlLmcuIG1hdGNoaW5nIHRoZSBudW1iZXIg b2YgYWxsb2NhdGlvbnMgcGVyIHJvdW5kKSwgYnV0Cml0IG1pZ2h0IGFsc28gbWFrZSB0aGUg YmVoYXZpb3IgbGVzcyBzbW9vdGggKGxvbmcgcGVyaW9kIG9mIGFsbG9jYXRpb25zCmZyb20g ZWFjaCBwYXJ0aXRpb24pLgoKVGhpcyBpcyB2ZXJ5IHNpbXBsZS9jaGVhcCwgYW5kIG92ZXIg bWFueSBhbGxvY2F0aW9ucyBpdCBoYXMgdGhlIHNhbWUKZWZmZWN0LiBGb3IgcGVyaW9kcyBv ZiBsb3cgYWN0aXZpdHkgaXQgbWF5IGRpdmVyZ2UsIGJ1dCB0aGF0IGRvZXMgbm90Cm1hdHRl ciBtdWNoICh3ZSBjYXJlIGFib3V0IGhpZ2gtYWN0aXZpdHkgcGVyaW9kcyBtdWNoIG1vcmUp LgotLS0KIC4uLi9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsICAgICAgICAgICAgICB8 ICAgNSArLQogY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5j IHwgIDQxICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAg ICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyAgICAg ICAgIHwgMzk2ICsrKysrKysrKysrKysrKystLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZf aW50ZXJuYWxzLmggICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVm bWdyLmggICAgICAgICAgICAgICAgICB8ICAgNSArLQogNiBmaWxlcyBjaGFuZ2VkLCA0MjAg aW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsIGIvY29udHJpYi9w Z19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCmluZGV4IDk5OWJi MjEyOGYwLi41YWNhZTMxYjgzNiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNo ZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVy Y2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNxbApAQCAtMjcsNyArMjcsMTAgQEAg Q1JFQVRFIFZJRVcgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyBBUwogCSBudW1fcGFzc2Vz IGJpZ2ludCwJCQktLSBjbG9ja3N3ZWVwIHBhc3NlcwogCSBuZXh0X2J1ZmZlciBpbnRlZ2Vy LAkJLS0gbmV4dCB2aWN0aW0gYnVmZmVyIGZvciBjbG9ja3N3ZWVwCiAJIHRvdGFsX2FsbG9j cyBiaWdpbnQsCQktLSBoYW5kbGVkIGFsbG9jcyAocnVubmluZyB0b3RhbCkKLQkgbnVtX2Fs bG9jcyBiaWdpbnQpOwkJLS0gaGFuZGxlZCBhbGxvY3MgKGN1cnJlbnQgY3ljbGUpCisJIG51 bV9hbGxvY3MgYmlnaW50LAkJCS0tIGhhbmRsZWQgYWxsb2NzIChjdXJyZW50IGN5Y2xlKQor CSB0b3RhbF9yZXFfYWxsb2NzIGJpZ2ludCwJLS0gcmVxdWVzdGVkIGFsbG9jcyAocnVubmlu ZyB0b3RhbCkKKwkgbnVtX3JlcV9hbGxvY3MgYmlnaW50LAkJLS0gaGFuZGxlZCBhbGxvY3Mg KGN1cnJlbnQgY3ljbGUpCisJIHdlaWdodHMgaW50W10pOwkJCS0tIGJhbGFuY2luZyB3ZWln aHRzCiAKIC0tIERvbid0IHdhbnQgdGhlc2UgdG8gYmUgYXZhaWxhYmxlIHRvIHB1YmxpYy4K IFJFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucygpIEZS T00gUFVCTElDOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZm ZXJjYWNoZV9wYWdlcy5jIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNo ZV9wYWdlcy5jCmluZGV4IDdjYTA3NWU2MTY0Li4xMzAxNDU0OWQwMCAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCisrKyBiL2Nv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYwpAQCAtMTUsNiAr MTUsOCBAQAogI2luY2x1ZGUgInBvcnQvcGdfbnVtYS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv YnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVk ZSAidXRpbHMvYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1 ZGUgInV0aWxzL3JlbC5oIgogCiAKQEAgLTI3LDcgKzI5LDcgQEAKICNkZWZpbmUgTlVNX0JV RkZFUkNBQ0hFX0VWSUNUX0FMTF9FTEVNIDMKIAogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVf TlVNQV9FTEVNCTMKLSNkZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTQkx MgorI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNCTE1CiAKIFBHX01P RFVMRV9NQUdJQ19FWFQoCiAJCQkJCS5uYW1lID0gInBnX2J1ZmZlcmNhY2hlIiwKQEAgLTc4 OSw2ICs3OTEsOCBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FS R1MpCiAKIAlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQogCXsKKwkJVHlwZUNhY2hlRW50cnkg KnR5cGVudHJ5ID0gbG9va3VwX3R5cGVfY2FjaGUoSU5UNE9JRCwgMCk7CisKIAkJZnVuY2N0 eCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOwogCiAJCS8qIFN3aXRjaCBjb250ZXh0IHdoZW4g YWxsb2NhdGluZyBzdHVmZiB0byBiZSB1c2VkIGluIGxhdGVyIGNhbGxzICovCkBAIC04MjYs NiArODMwLDEyIEBAIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoUEdfRlVOQ1RJT05fQVJH UykKIAkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1 cGxlZGVzYywgKEF0dHJOdW1iZXIpIDEyLCAibnVtX2FsbG9jcyIsCiAJCQkJCQkgICBJTlQ4 T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVt YmVyKSAxMywgInRvdGFsX3JlcV9hbGxvY3MiLAorCQkJCQkJICAgSU5UOE9JRCwgLTEsIDAp OworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMTQsICJu dW1fcmVxX2FsbG9jcyIsCisJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisJCVR1cGxlRGVz Y0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSAxNSwgIndlaWd0aHMiLAorCQkJ CQkJICAgdHlwZW50cnktPnR5cGFycmF5LCAtMSwgMCk7CiAKIAkJZnVuY2N0eC0+dXNlcl9m Y3R4ID0gQmxlc3NUdXBsZURlc2ModHVwbGVkZXNjKTsKIApAQCAtODUxLDExICs4NjEsMTcg QEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQli dWZmZXJzX3JlbWFpbiwKIAkJCQkJYnVmZmVyc19mcmVlOwogCi0JCXVpbnQ2NAkJYnVmZmVy X3RvdGFsX2FsbG9jczsKKwkJdWludDY0CQlidWZmZXJfdG90YWxfYWxsb2NzLAorCQkJCQli dWZmZXJfdG90YWxfcmVxX2FsbG9jczsKIAogCQl1aW50MzIJCWNvbXBsZXRlX3Bhc3NlcywK IAkJCQkJbmV4dF92aWN0aW1fYnVmZmVyLAotCQkJCQlidWZmZXJfYWxsb2NzOworCQkJCQli dWZmZXJfYWxsb2NzLAorCQkJCQlidWZmZXJfcmVxX2FsbG9jczsKKworCQlpbnQJCSAgICp3 ZWlnaHRzOworCQlEYXR1bQkgICAqZHdlaWdodHM7CisJCUFycmF5VHlwZSAgKmFycmF5Owog CiAJCURhdHVtCQl2YWx1ZXNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CiAJ CWJvb2wJCW51bGxzW05VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU1dOwpAQCAtODY2 LDcgKzg4MiwxNSBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCUZyZWVsaXN0UGFydGl0aW9uR2V0SW5mbyhpLCAmYnVmZmVyc19jb25zdW1lZCwg JmJ1ZmZlcnNfcmVtYWluLAogCQkJCQkJCQkgJmJ1ZmZlcnNfZnJlZSwKIAkJCQkJCQkJICZj b21wbGV0ZV9wYXNzZXMsICZuZXh0X3ZpY3RpbV9idWZmZXIsCi0JCQkJCQkJCSAmYnVmZmVy X3RvdGFsX2FsbG9jcywgJmJ1ZmZlcl9hbGxvY3MpOworCQkJCQkJCQkgJmJ1ZmZlcl90b3Rh bF9hbGxvY3MsICZidWZmZXJfYWxsb2NzLAorCQkJCQkJCQkgJmJ1ZmZlcl90b3RhbF9yZXFf YWxsb2NzLCAmYnVmZmVyX3JlcV9hbGxvY3MsCisJCQkJCQkJCSAmd2VpZ2h0cyk7CisKKwkJ ZHdlaWdodHMgPSBwYWxsb2NfYXJyYXkoRGF0dW0sIGZ1bmNjdHgtPm1heF9jYWxscyk7CisJ CWZvciAoaW50IGkgPSAwOyBpIDwgZnVuY2N0eC0+bWF4X2NhbGxzOyBpKyspCisJCQlkd2Vp Z2h0c1tpXSA9IEludDMyR2V0RGF0dW0od2VpZ2h0c1tpXSk7CisKKwkJYXJyYXkgPSBjb25z dHJ1Y3RfYXJyYXlfYnVpbHRpbihkd2VpZ2h0cywgZnVuY2N0eC0+bWF4X2NhbGxzLCBJTlQ0 T0lEKTsKIAogCQl2YWx1ZXNbMF0gPSBJbnQzMkdldERhdHVtKGkpOwogCQludWxsc1swXSA9 IGZhbHNlOwpAQCAtOTA0LDYgKzkyOCwxNSBAQCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25z KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXZhbHVlc1sxMV0gPSBJbnQ2NEdldERhdHVtKGJ1ZmZl cl9hbGxvY3MpOwogCQludWxsc1sxMV0gPSBmYWxzZTsKIAorCQl2YWx1ZXNbMTJdID0gSW50 NjRHZXREYXR1bShidWZmZXJfdG90YWxfcmVxX2FsbG9jcyk7CisJCW51bGxzWzEyXSA9IGZh bHNlOworCisJCXZhbHVlc1sxM10gPSBJbnQ2NEdldERhdHVtKGJ1ZmZlcl9yZXFfYWxsb2Nz KTsKKwkJbnVsbHNbMTNdID0gZmFsc2U7CisKKwkJdmFsdWVzWzE0XSA9IFBvaW50ZXJHZXRE YXR1bShhcnJheSk7CisJCW51bGxzWzE0XSA9IGZhbHNlOworCiAJCS8qIEJ1aWxkIGFuZCBy ZXR1cm4gdGhlIHR1cGxlLiAqLwogCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZSgoVHVwbGVE ZXNjKSBmdW5jY3R4LT51c2VyX2ZjdHgsIHZhbHVlcywgbnVsbHMpOwogCQlyZXN1bHQgPSBI ZWFwVHVwbGVHZXREYXR1bSh0dXBsZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1n ci5jCmluZGV4IDdhOGM0NWFjNTljLi45N2I2Zjk3M2MyNiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvYnVmbWdyLmMKQEAgLTM2MjMsNiArMzYyMyw5IEBAIEJnQnVmZmVyU3luYyhX cml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQogCS8qIGFzc3VtZSB3ZSBjYW4gaGliZXJu YXRlLCBhbnkgcGFydGl0aW9uIGNhbiBzZXQgdG8gZmFsc2UgKi8KIAlib29sCQloaWJlcm5h dGUgPSB0cnVlOwogCisJLyogdHJpZ2dlciBwYXJ0aXRpb24gcmViYWxhbmNpbmcgZmlyc3Qg Ki8KKwlTdHJhdGVneVN5bmNCYWxhbmNlKCk7CisKIAkvKiBnZXQgdGhlIG51bWJlciBvZiBj bG9ja3N3ZWVwIHBhcnRpdGlvbnMsIGFuZCB0b3RhbCBhbGxvYyBjb3VudCAqLwogCVN0cmF0 ZWd5U3luY1ByZXBhcmUoJm51bV9wYXJ0aXRpb25zLCAmcmVjZW50X2FsbG9jKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKaW5kZXggMTc5ODhiNGZkNTMuLmYy MjAzY2ViY2M4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVl bGlzdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKQEAg LTUxLDYgKzUxLDIyIEBAIHR5cGVkZWYgc3RydWN0IEJ1ZmZlclN0cmF0ZWd5RnJlZWxpc3QK IAl1aW50NjQJCWNvbnN1bWVkOwogfQkJCUJ1ZmZlclN0cmF0ZWd5RnJlZWxpc3Q7CiAKKy8q CisgKiBYWFggbmVlZGVkIGZvciBtYWtlIENsb2NrU3dlZXAgZml4ZWQtc2l6ZSwgc2hvdWxk IGJlIHRpZWQgdG8gdGhlIG51bWJlcgorICogb2YgYnVmZmVyIHBhcnRpdGlvbnMuCisgKi8K KyNkZWZpbmUgTUFYX0JVRkZFUl9QQVJUSVRJT05TCQkxNgorCisvKgorICogQ29lZmZpY2ll bnQgdXNlZCB0byBjb21iaW5lIHRoZSBvbGQgYW5kIG5ldyBiYWxhbmNlIGNvZWZmaWNpZW50 cywgdXNpbmcKKyAqIHdlaWdodGVkIGF2ZXJhZ2UuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0 aGUgbW9yZSB0aGUgb2xkIHZhbHVlIGFmZmVjdHMgdGhlCisgKiByZXN1bHQuCisgKgorICog WFhYIERvZXNuJ3QgdGhpcyBpbnZhbGlkYXRlIHRoZSBpbnRlcnByZXRhdGlvbiBhcyBhIHBy b2JhYmlsaXR5IHRvIGFsbG9jYXRlCisgKiBmcm9tIGEgZ2l2ZW4gcGFydGl0aW9uPyBEb2Vz IGl0IHN0aWxsIHN1bSB0byAxMDAlPworICovCisjZGVmaW5lIENMT0NLU1dFRVBfSElTVE9S WV9DT0VGRgkwLjUKKwogLyoKICAqIEluZm9ybWF0aW9uIGFib3V0IG9uZSBwYXJ0aXRpb24g b2YgdGhlIENsb2NrU3dlZXAgKG9uIGEgc3Vic2V0IG9mIGJ1ZmZlcnMpLgogICoKQEAgLTgz LDkgKzk5LDI4IEBAIHR5cGVkZWYgc3RydWN0CiAJdWludDMyCQljb21wbGV0ZVBhc3Nlczsg LyogQ29tcGxldGUgY3ljbGVzIG9mIHRoZSBjbG9jayBzd2VlcCAqLwogCXBnX2F0b21pY191 aW50MzIgbnVtQnVmZmVyQWxsb2NzOwkvKiBCdWZmZXJzIGFsbG9jYXRlZCBzaW5jZSBsYXN0 IHJlc2V0ICovCiAKKwkvKgorCSAqIEJ1ZmZlcnMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGFs bG9jYXRlZCBpbiB0aGlzIHBhcnRpdGlvbiAoYnV0IG1pZ2h0CisJICogaGF2ZSBiZWVuIHJl ZGlyZWN0ZWQgdG8ga2VlcCBhbGxvY2F0aW9ucyBiYWxhbmNlZCkuCisJICovCisJcGdfYXRv bWljX3VpbnQzMiBudW1SZXF1ZXN0ZWRBbGxvY3M7CisKIAkvKiBydW5uaW5nIHRvdGFsIG9m IGFsbG9jcyAqLwogCXBnX2F0b21pY191aW50NjQgbnVtVG90YWxBbGxvY3M7CisJcGdfYXRv bWljX3VpbnQ2NCBudW1Ub3RhbFJlcXVlc3RlZEFsbG9jczsKIAorCS8qCisJICogV2VpZ2h0 cyB0byBiYWxhbmNlIGJ1ZmZlciBhbGxvY2F0aW9ucyBmb3IgYWxsIHRoZSBwYXJ0aXRpb25z LiBFYWNoCisJICogcGFydGl0aW9uIGdldHMgYSB2ZWN0b3Igb2Ygd2VpZ2h0cyAwLTEwMCwg ZGV0ZXJtaW5pbmcgd2hhdCBmcmFjdGlvbgorCSAqIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUg ZnJvbSB0aGF0IHBhcnRpY3VsYXIuIFNvIFs3NSwgMTUsIDUsIDVdIHdvdWxkCisJICogbWVh biA3NSUgYWxsb2NhdGlvbnMgc2hvdWxkIGdvIGZyb20gcGFydGl0aW9uIDAsIDE1JSBmcm9t IHBhcnRpdGlvbgorCSAqIDEsIGFuZCA1JSBmcm9tIHBhcnRpdGlvbnMgMiYzLiBFYWNoIHBh cnRpdGlvbiBnZXRzIGEgZGlmZmVyZW50IHZlY3RvcgorCSAqIG9mIHdlaWdodHMuCisJICoK KwkgKiBYWFggQWxsb2NhdGUgYSBmaXhlZC1sZW5ndGggYXJyYXksIHRvIHNpbXBsaWZ5IHdv cmtpbmcgd2l0aCBhcnJheSBvZgorCSAqIHRoZSBzdHJ1Y3RzLCBldGMuCisJICovCisJdWlu dDgJCWJhbGFuY2VbTUFYX0JVRkZFUl9QQVJUSVRJT05TXTsKIH0gQ2xvY2tTd2VlcDsKIAog LyoKQEAgLTE1Myw3ICsxODgsMzMgQEAgc3RhdGljIEJ1ZmZlckRlc2MgKkdldEJ1ZmZlckZy b21SaW5nKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkJIHVpbnQz MiAqYnVmX3N0YXRlKTsKIHN0YXRpYyB2b2lkIEFkZEJ1ZmZlclRvUmluZyhCdWZmZXJBY2Nl c3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCQlCdWZmZXJEZXNjICpidWYpOwotc3RhdGlj IENsb2NrU3dlZXAgKkNob29zZUNsb2NrU3dlZXAodm9pZCk7CitzdGF0aWMgQ2xvY2tTd2Vl cCAqQ2hvb3NlQ2xvY2tTd2VlcChib29sIGJhbGFuY2UpOworCisvKgorICogY2xvY2tzd2Vl cCBhbGxvY2F0aW9uIGJhbGFuY2luZworICoKKyAqIFRvIGJhbGFuY2UgYWxsb2NhdGlvbnMg ZnJvbSBjbG9ja3N3ZWVwIHBhcnRpdGlvbnMsIGVhY2ggcGFydGl0aW9uIGdldHMKKyAqIGEg c2V0IG9mICJ3ZWlnaHRzIiBkZXRlcm1pbmluZyB0aGUgZnJhY3Rpb24gb2YgYWxsb2NhdGlv bnMgdG8gcmVkaXJlY3QKKyAqIHRvIG90aGVyIHBhcnRpdGlvbnMuCisgKgorICogV2UgY291 bGQgZG8gdGhhdCBiYXNlZCBvbiBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLCBidXQgdGhh dCBzZWVtcyB0b28KKyAqIGV4cGVuc2l2ZS4gU28gaW5zdGVhZCB3ZSBzaW1wbHkgdHJlYXQg dGhlIHByb2JhYmlsaXRpZXMgYXMgYSBidWRnZXQsIGkuZS4KKyAqIGEgbnVtYmVyIG9mIGFs bG9jYXRpb25zIHRvIHNlcnZlIGZyb20gdGhhdCBwYXJ0aXRpb24sIGJlZm9yZSBtb3Zpbmcg dG8KKyAqIHRoZSBuZXh0IHBhcnRpdGlvbiAoaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIpLgor ICoKKyAqIFRoaXMgaXMgdmVyeSBzaW1wbGUvY2hlYXAsIGFuZCBvdmVyIG1hbnkgYWxsb2Nh dGlvbnMgaXQgaGFzIHRoZSBzYW1lCisgKiBlZmZlY3QuIEZvciBwZXJpb2RzIG9mIGxvdyBh Y3Rpdml0eSBpdCBtYXkgZGl2ZXJnZSwgYnV0IHRoYXQgZG9lcyBub3QKKyAqIG1hdHRlciBt dWNoICh3ZSBjYXJlIGFib3V0IGhpZ2gtYWN0aXZpdHkgcGVyaW9kcyBtdWNoIG1vcmUpLgor ICoKKyAqIFdlIGludGVudGlvbmFsbHkga2VlcCB0aGUgImJ1ZGdldCIgZmFpcmx5IGxvdywg d2l0aCB0aGUgc3VtIGZvciBhIGdpdmVuCisgKiBwYXJ0aXRpb24gMTAwLiBUaGF0IG1lYW5z IHdlIGdldCB0byB0aGUgc2FtZSBwYXJ0aXRpb24gYWZ0ZXIgb25seSAxMDAKKyAqIGFsbG9j YXRpb25zLCBrZWVwaW5nIGl0IG1vcmUgYmFsYW5jZXMuIEl0IHdvdWxkbid0IGJlIGhhcmQg dG8gbWFrZSB0aGUKKyAqIGJ1ZGdldHMgaGlnaGVyIChzYXksIHRvIG1hdGNoIHRoZSBleHBl Y3RlZCBudW1iZXIgb2YgYWxsb2NhdGlvbnMsIGkuZS4KKyAqIGFib3V0IHRoZSBhdmVyYWdl IG51bWJlciBvZiBhbGxvY2F0aW9ucyBmcm9tIHRoZSBwYXN0IGludGVydmFsKS4KKyAqLwor c3RhdGljIGludCBjbG9ja3N3ZWVwX3BhcnRpdGlvbl9vcHRpbWFsID0gLTE7CitzdGF0aWMg aW50IGNsb2Nrc3dlZXBfcGFydGl0aW9uID0gLTE7CitzdGF0aWMgaW50IGNsb2Nrc3dlZXBf Y291bnQgPSAwOwogCiAvKgogICogQ2xvY2tTd2VlcFRpY2sgLSBIZWxwZXIgcm91dGluZSBm b3IgU3RyYXRlZ3lHZXRCdWZmZXIoKQpAQCAtMTY1LDcgKzIyNiw3IEBAIHN0YXRpYyBpbmxp bmUgdWludDMyCiBDbG9ja1N3ZWVwVGljayh2b2lkKQogewogCXVpbnQzMgkJdmljdGltOwot CUNsb2NrU3dlZXAgKnN3ZWVwID0gQ2hvb3NlQ2xvY2tTd2VlcCgpOworCUNsb2NrU3dlZXAg KnN3ZWVwID0gQ2hvb3NlQ2xvY2tTd2VlcCh0cnVlKTsKIAogCS8qCiAJICogQXRvbWljYWxs eSBtb3ZlIGhhbmQgYWhlYWQgb25lIGJ1ZmZlciAtIGlmIHRoZXJlJ3Mgc2V2ZXJhbCBwcm9j ZXNzZXMKQEAgLTI5NCwzMiArMzU1LDcyIEBAIGNhbGN1bGF0ZV9wYXJ0aXRpb25faW5kZXgo KQogICogYW5kIHRoYXQncyBjaGVhcGVyLiBCdXQgaG93IHdvdWxkIHRoYXQgZGVhbCB3aXRo IG9kZCBudW1iZXIgb2Ygbm9kZXM/CiAgKi8KIHN0YXRpYyBDbG9ja1N3ZWVwICoKLUNob29z ZUNsb2NrU3dlZXAodm9pZCkKK0Nob29zZUNsb2NrU3dlZXAoYm9vbCBiYWxhbmNlKQogewot CWludAkJCWluZGV4ID0gY2FsY3VsYXRlX3BhcnRpdGlvbl9pbmRleCgpOworCS8qIFdoYXQn cyB0aGUgIm9wdGltYWwiIHBhcnRpdGlvbj8gKi8KKwlpbnQJCWluZGV4ID0gY2FsY3VsYXRl X3BhcnRpdGlvbl9pbmRleCgpOworCUNsb2NrU3dlZXAgKnN3ZWVwID0gJlN0cmF0ZWd5Q29u dHJvbC0+c3dlZXBzW2luZGV4XTsKKworCS8qCisJICogRGlkIHdlIG1pZ3JhdGUgdG8gYSBk aWZmZXJlbnQgY29yZSAvIE5VTUEgbm9kZSwgYWZmZWN0aW5nIHRoZQorCSAqIGNsb2Nrc3dl ZXAgcGFydGl0aW9uIHdlIHNob3VsZCB1c2U/IFN3aXRjaCB0byB0aGF0IHBhcnRpdGlvbi4K KwkgKi8KKwlpZiAoY2xvY2tzd2VlcF9wYXJ0aXRpb25fb3B0aW1hbCAhPSBpbmRleCkKKwl7 CisJCWNsb2Nrc3dlZXBfcGFydGl0aW9uX29wdGltYWwgPSBpbmRleDsKKwkJY2xvY2tzd2Vl cF9wYXJ0aXRpb24gPSBpbmRleDsKKwkJY2xvY2tzd2VlcF9jb3VudCA9IHN3ZWVwLT5iYWxh bmNlW2luZGV4XTsKKwl9CisKKwkvKiB3ZSBzaG91bGQgaGF2ZSBhIHZhbGlkIHBhcnRpdGlv biAqLworCUFzc2VydChjbG9ja3N3ZWVwX3BhcnRpdGlvbl9vcHRpbWFsICE9IC0xKTsKKwlB c3NlcnQoY2xvY2tzd2VlcF9wYXJ0aXRpb24gIT0gLTEpOworCisJLyoKKwkgKiBJZiByZWJh bGFuY2luZyBpcyBlbmFibGVkLCB1c2UgdGhlIHdlaWdodHMgdG8gcmVkaXJlY3QgdGhlIGFs bG9jYXRpb25zCisJICogdG8gbWF0Y2ggdGhlIGRlc2lyZWQgZGlzdHJpYnV0aW9uLiBXZSBk byB0aGF0IGJ5IHVzaW5nIHRoZSBwYXJ0aXRpb25zCisJICogaW4gYSByb3VuZC1yb2JpbiB3 YXksIGFmdGVyIGFsbG9jYXRpbmcgdGhlICJ3ZWlnaHQiIG9mIGFsbG9jYXRpb25zCisJICog ZnJvbSBlYWNoIHBhcnRpdGlvbnMuCisJICovCisJaWYgKGJhbGFuY2UpCisJeworCQkvKgor CQkgKiBSYW4gb3V0IG9mIGFsbG9jYXRpb25zIGZyb20gdGhlIGN1cnJlbnQgcGFydGl0aW9u PyBNb3ZlIHRvIHRoZQorCQkgKiBuZXh0IHBhcnRpdGlvbiB3aXRoIG5vbi16ZXJvIHdlaWdo dCwgYW5kIHVzZSB0aGUgd2VpZ2h0IGFzIGEKKwkJICogYnVkZ2V0IGZvciBhbGxvY2F0aW9u cy4KKwkJICovCisJCXdoaWxlIChjbG9ja3N3ZWVwX2NvdW50ID09IDApCisJCXsKKwkJCWNs b2Nrc3dlZXBfcGFydGl0aW9uCisJCQkJPSAoY2xvY2tzd2VlcF9wYXJ0aXRpb24gKyAxKSAl IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnM7CisKKwkJCUFzc2VydCgoY2xvY2tz d2VlcF9wYXJ0aXRpb24gPj0gMCkgJiYKKwkJCQkgICAoY2xvY2tzd2VlcF9wYXJ0aXRpb24g PCBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zKSk7CisKKwkJCWNsb2Nrc3dlZXBf Y291bnQgPSBzd2VlcC0+YmFsYW5jZVtjbG9ja3N3ZWVwX3BhcnRpdGlvbl07CisJCX0KKwor CQkvKiBhY2NvdW50IGZvciB0aGUgYWxsb2NhdGlvbiAtIHRha2UgaXQgZnJvbSB0aGUgYnVk Z2V0ICovCisJCS0tY2xvY2tzd2VlcF9jb3VudDsKIAotCXJldHVybiAmU3RyYXRlZ3lDb250 cm9sLT5zd2VlcHNbaW5kZXhdOworCQkvKiBhY2NvdW50IGZvciB0aGUgYWxsb2MgaW4gdGhl ICJvcHRpbWFsIiAob3JpZ2luYWwpIHBhcnRpdGlvbiAqLworCQlwZ19hdG9taWNfZmV0Y2hf YWRkX3UzMigmc3dlZXAtPm51bVJlcXVlc3RlZEFsbG9jcywgMSk7CisJfQorCisJcmV0dXJu ICZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tjbG9ja3N3ZWVwX3BhcnRpdGlvbl07CiB9CiAK IC8qCiAgKiBDaG9vc2VGcmVlTGlzdAotICoJCVBpY2sgdGhlIGJ1ZmZlciBmcmVlbGlzdCB0 byB1c2UsIGRlcGVuZGluZyBvbiB0aGUgQ1BVIGFuZCBOVU1BIG5vZGUuCi0gKgotICogV2l0 aG91dCBwYXJ0aXRpb25lZCBmcmVlbGlzdHMgKG51bWFfcGFydGl0aW9uX2ZyZWVsaXN0PWZh bHNlKSwgdGhlcmUncyBvbmx5Ci0gKiBhIHNpbmdsZSBmcmVlbGlzdCwgc28gdXNlIHRoYXQu Ci0gKgotICogV2l0aCBwYXJ0aXRpb25lZCBmcmVlbGlzdHMsIHdlIGhhdmUgbXVsdGlwbGUg d2F5cyBob3cgdG8gcGljayB0aGUgZnJlZWxpc3QKLSAqIGZvciB0aGUgYmFja2VuZDoKLSAq Ci0gKiAtIG9uZSBmcmVlbGlzdCBwZXIgQ1BVLCB1c2UgdGhlIGZyZWVsaXN0IGZvciBDUFUg dGhlIHRhc2sgZXhlY3V0ZXMgb24KLSAqCi0gKiAtIG9uZSBmcmVlbGlzdCBwZXIgTlVNQSBu b2RlLCB1c2UgdGhlIGZyZWVsaXN0IGZvciBub2RlIHRhc2sgZXhlY3V0ZXMgb24KKyAqCQlw aWNrIGEgY2xvY2tzd2VlcCBwYXJ0aXRpb24gYmFzZWQgb24gTlVNQSBub2RlIGFuZCBDUFUK ICAqCi0gKiAtIHVzZSBmaXhlZCBudW1iZXIgb2YgZnJlZWxpc3RzLCBtYXAgcHJvY2Vzc2Vz IHRvIGxpc3RzIGJhc2VkIG9uIFBJRAorICogVGhlIG51bWJlciBvZiBmcmVlbGlzdCBwYXJ0 aXRpb25zIG1heSBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBOVU1BCisgKiBub2RlcywgYnV0 IGl0IHNob3VsZCBub3QgYmUgbG93ZXIuIEVhY2ggcGFydGl0aW9uIHNob3VsZCBiZSBtYXBw ZWQgdG8KKyAqIGEgc2luZ2xlIE5VTUEgbm9kZSwgYnV0IGEgbm9kZSBtYXkgaGF2ZSBtdWx0 aXBsZSBwYXJ0aXRpb25zLiBJZiB0aGVyZQorICogYXJlIG11bHRpcGxlIHBhcnRpdGlvbnMg cGVyIG5vZGUgKGFsbCBub2RlcyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZgorICogcGFydGl0 aW9ucyksIHdlIHBpY2sgdGhlIHBhcnRpdGlvbiB1c2luZyBDUFUuCiAgKgotICogVGhlcmUg bWF5IGJlIHNvbWUgb3RoZXIgc3RyYXRlZ2llcywgbm90IHN1cmUuIFRoZSBpbXBvcnRhbnQg dGhpbmcgaXMgdGhpcwotICogbmVlZHMgdG8gYmUgcmVmcmVjbGVkIGR1cmluZyBpbml0aWFs aXphdGlvbiwgaS5lLiB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUKLSAqIHJpZ2h0IG51bWJlciBv ZiBsaXN0cy4KKyAqIFhYWCBNYXliZSB0aGlzIHNob3VsZCB1c2UgdGhlIHNhbWUgYmFsYW5j aW5nIHN0cmF0ZWd5IGFzIGNsb2Nrc3dlZXA/CiAgKi8KIHN0YXRpYyBCdWZmZXJTdHJhdGVn eUZyZWVsaXN0ICoKIENob29zZUZyZWVMaXN0KHZvaWQpCkBAIC00MTcsNyArNTE4LDcgQEAg U3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQz MiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAkgKiB0aGUgcmF0ZSBvZiBidWZmZXIgY29u c3VtcHRpb24uICBOb3RlIHRoYXQgYnVmZmVycyByZWN5Y2xlZCBieSBhCiAJICogc3RyYXRl Z3kgb2JqZWN0IGFyZSBpbnRlbnRpb25hbGx5IG5vdCBjb3VudGVkIGhlcmUuCiAJICovCi0J cGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJkNob29zZUNsb2NrU3dlZXAoKS0+bnVtQnVmZmVy QWxsb2NzLCAxKTsKKwlwZ19hdG9taWNfZmV0Y2hfYWRkX3UzMigmQ2hvb3NlQ2xvY2tTd2Vl cChmYWxzZSktPm51bUJ1ZmZlckFsbG9jcywgMSk7CiAKIAkvKgogCSAqIEZpcnN0IGNoZWNr LCB3aXRob3V0IGFjcXVpcmluZyB0aGUgbG9jaywgd2hldGhlciB0aGVyZSdzIGJ1ZmZlcnMg aW4gdGhlCkBAIC01ODAsNiArNjgxLDIyNCBAQCBTdHJhdGVneUZyZWVCdWZmZXIoQnVmZmVy RGVzYyAqYnVmKQogCVNwaW5Mb2NrUmVsZWFzZSgmZnJlZWxpc3QtPmZyZWVsaXN0X2xvY2sp OwogfQogCisvKgorICogU3RyYXRlZ3lTeW5jQmFsYW5jZQorICoJCXVwZGF0ZSBwYXJ0aXRp b24gd2VpZ2h0cywgdG8gYmFsYW5jZSB0aGUgYnVmZmVyIGFsbG9jYXRpb25zCisgKgorICog V2Ugd2FudCB0byBnaXZlIHByZWZlcmVuY2UgdG8gYWxsb2NhdGluZyBidWZmZXJzIG9uIHRo ZSBzYW1lIE5VTUEgbm9kZSwKKyAqIGJ1dCB0aGF0IG1pZ2h0IGxlYWQgdG8gaW1iYWxhbmNl IC0gYSBzaW5nbGUgcHJvY2VzcyB3b3VsZCBvbmx5IHVzZSBhCisgKiBmcmFjdGlvbiBvZiBz aGFyZWQgYnVmZmVycy4gV2UgZG9uJ3Qgd2FudCB0aGF0LCB3ZSB3YW50IHRvIHV0aWxpemUg dGhlCisgKiB3aG9sZSBzaGFyZWQgYnVmZmVycy4gVGhlIG51bWJlciBvZiBhbGxvY2F0aW9u cyBpbiBlYWNoIHBhcnRpdGlvbiBtYXkKKyAqIGFsc28gY2hhbmdlIG92ZXIgdGltZSwgc28g d2UgbmVlZCB0byBhZGFwdCB0byB0aGF0LgorICoKKyAqIFRvIGFsbG93IHRoaXMgImFkYXB0 aXZlIGJhbGFuY2luZyIsIGVhY2ggcGFydGl0aW9uIGhhcyBhIHNldCBvZiB3ZWlnaHRzLAor ICogZGV0ZXJtaW5pbmcgd2hhdCBmcmFjdGlvbiBvZiBhbGxvY2F0aW9ucyB0byBkaXJlY3Qg dG8gb3RoZXIgcGFydGl0aW9ucy4KKyAqIEZvciBzaW1wbGljaXR5IHRoZSBjb2VmZmljaWVu dHMgYXJlIGludGVnZXJzIDAtMTAwLCBleHByZXNzaW5nIHRoZQorICogcGVyY2VudGFnZSBv ZiBhbGxvY2F0aW9ucyByZWRpcmVjdGVkIHRvIHRoYXQgcGFydGl0aW9uLgorICoKKyAqIENv bnNpZGVyIGZvciBleGFtcGxlIHdlaWdodHMgWzUwLCAyNSwgMjUsIDBdIGZvciBvbmUgb2Yg NCBwYXJ0aXRpb25zLgorICogVGhpcyBtZWFucyA1MCUgb2YgYWxsb2NhdGlvbnMgd2lsbCBi ZSByZWRpcmVjdGVkIHRvIHBhcnRpdGlvbiAwLCAyNSUKKyAqIHRvIHBhcnRpdGlvbnMgMSBh bmQgMiwgYW5kIG5vIGFsbG9jYXRpb25zIHdpbGwgZ28gdG8gcGFydGl0aW9uIDMuCisgKgor ICogVG8gY2FsY3VsYXRlIHRoZXNlIHdlaWdodHMsIGFzc3VtZSB3ZSBrbm93IHRoZSBudW1i ZXIgb2YgYWxsb2NhdGlvbnMKKyAqIHJlcXVlc3RlZCBmb3IgZWFjaCBwYXJ0aXRpb24gaW4g dGhlIHBhc3QgaW50ZXJ2YWwuIFdlIGNhbiB1c2UgdGhpcyB0bworICogY2FsY3VsYXRlIHdl aWdodHMgZm9yIHRoZSBmb2xsb3dpbmcgaW50ZXJ2YWwsIGFpbWluZyB0byBhbGxvY2F0ZSB0 aGUKKyAqIHNhbWUgKGZhaXIgc2hhcmUpIG51bWJlciBvZiBidWZmZXJzIGZyb20gZWFjaCBw YXJ0aXRpb24uCisgKgorICogTm90ZTogVGhpcyBpcyBiYXNlZCBvbiBudW1iZXIgb2YgYWxs b2NhdGlvbnMgIm9yaWdpbmF0aW5nIiBpbiBhIGdpdmVuCisgKiBwYXJ0aXRpb24uIElmIGFu IGFsbG9jYXRpb24gaXMgcmVxdWVzdGVkIGluIGEgcGFydGl0aW9uIEEsIGl0J3MgY291bnRl ZAorICogYXMgYWxsb2NhdGlvbiBmb3IgQSwgZXZlbiBpZiBpdCBnZXRzIHJlZGlyZWN0ZWQg dG8gc29tZSBvdGhlciBwYXJ0aXRpb24uCisgKiBUaGUgcGF0Y2ggYWRkZXMgYSBuZXcgY291 bnRlciB0byB0cmFjayB0aGlzLgorICoKKyAqIFRoZSBtYWluIG9ic2VydmF0aW9uIGlzIHRo YXQgcGFydGl0aW9ucyBnZXQgZGl2aWRlZCBpbnRvIHR3byBncm91cHMsCisgKiBkZXBlbmRp bmcgb24gd2hldGhlciB0aGUgbnVtYmVyIGFsbG9jYXRpb25zIGlzIGhpZ2hlciBvciBsb3dl ciB0aGFuIHRoZQorICogdGFyZ2V0IGF2ZXJhZ2UuIEJ1dCB0aGUgInRvdGFsIGRlbHRhIiBm b3IgdGhlc2UgdHdvIGdyb3VwcyBpcyB0aGUKKyAqIHNhbWUsIGkuZS4gc3VtKGFicyhhbGxv Y3MgLSBhdmdfYWxsb2NzKSkgaXMgdGhlIHNhbWUuIFRoZXJlZm9yZSwgdGhlCisgKiB0YXNr IGlzIHRvICJkaXN0cmlidXRlIiB0aGUgZXhjZXNzIGFsbG9jYXRpb25zIGJldHdlZW4gdGhl IHBhcnRpdGlvbnMKKyAqIHdpdGggbm90IGVub3VnaCBhbGxvY2F0aW9ucy4KKyAqCisgKiBQ YXJ0aXRpb25zIHdpdGggKG5hbGxvY3MgPCBhdmdfbmFsbG9jcykgZG9uJ3QgcmVkaXJlY3Qg YW55IGFsbG9jYXRpb25zLgorICoKKyAqIFBhcnRpdGlvbnMgd2l0aCAobmFsbG9jcyA+IGF2 Z19uYWxsb2NzKSByZWRpcmVjdCB0aGUgZXh0cmEgYWxsb2NhdGlvbnMsCisgKiB3aXRoIGVh Y2ggdGFyZ2V0IGFsbG9jYXRpb24gZ2V0dGluZyBhIHByb3BvcnRpb25hbCBwYXJ0ICh3aXRo IHJlc3BlY3QKKyAqIHRvIHRoZSB0b3RhbCBkZWx0YSkuCisgKgorICogWFhYIEluIHByaW5j aXBsZSB3ZSBtaWdodCBkbyB3aXRob3V0IHRoZSBuZXcgInJlcXVlc3RlZEFsbG9jcyIgY291 bnRlciwKKyAqIGJ1dCB3ZSdkIG5lZWQgdG8gc29sdmUgdGhlIG1hdHJpeCBlcXVhdGlvbiBB eD1iLCB3aXRoIFtBLGJdIGtub3duCisgKiAod2VpZ2h0cyBhbmQgYWxsb2NzKSwgYW5kIGNh bGN1bGF0ZSB4IChyZXF1ZXN0ZWQgYWxsb2NzKS4gQnV0IGl0J3Mgbm90CisgKiBxdWl0ZSBj bGVhciB0aGlzJ2QgYWx3YXlzIGhhdmUgYSBzb2x1dGlvbi4KKyAqLwordm9pZAorU3RyYXRl Z3lTeW5jQmFsYW5jZSh2b2lkKQoreworCS8qIHNuYXBzaG90IG9mIGFsbG9jcyBmb3IgcGFy dGl0aW9ucyAqLworCXVpbnQzMglhbGxvY3NbTUFYX0JVRkZFUl9QQVJUSVRJT05TXTsKKwor CXVpbnQzMgl0b3RhbF9hbGxvY3MgPSAwLAkvKiB0b3RhbCBudW1iZXIgb2YgYWxsb2NhdGlv bnMgKi8KKwkJCWF2Z19hbGxvY3MsCQkJLyogYXZlcmFnZSBhbGxvY2F0aW9ucyAocGVyIHBh cnRpdGlvbikgKi8KKwkJCWRlbHRhX2FsbG9jcyA9IDA7CS8qIHN1bSBvZiBhbGxvY3MgYWJv dmUgYXZlcmFnZSAqLworCisJLyoKKwkgKiBDb2xsZWN0IHRoZSBudW1iZXIgb2YgYWxsb2Nh dGlvbnMgcmVxdWVzdGVkIGluIHRoZSBwYXN0IGludGVydmFsLgorCSAqIFdoaWxlIGF0IGl0 LCByZXNldCB0aGUgY291bnRlciB0byBzdGFydCB0aGUgbmV3IGludGVydmFsLgorCSAqCisJ ICogV2UgbG9jayB0aGUgcGFydGl0aW9ucyBvbmUgYnkgb25lLCBzbyB0aGlzIGlzIG5vdCBl eGFjdGx5IGNvbnNpc3RlbnQKKwkgKiBzbmFwc2hvdCBvZiB0aGUgY291bnRzLCBhbmQgdGhl IHJlc2V0cyBoYXBwZW4gYmVmb3JlIHdlIHVwZGF0ZSB0aGUKKwkgKiB3ZWlnaHRzIHRvby4g QnV0IHdlJ3JlIG9ubHkgbG9va2luZyBmb3IgaGV1cmlzdGljcyBhbnl3YXksIHNvIHRoaXMK KwkgKiBzaG91bGQgYmUgZ29vZCBlbm91Z2guCisJICoKKwkgKiBBIHNpbWlsYXIgaXNzdWUg YXBwbGllcyB0byB0aGUgY291bnRlciByZXNldCAtIHdlIGhhdmVuJ3QgdXBkYXRlZAorCSAq IHRoZSB3ZWlnaHRzIHlldC4gU2hvdWxkIGJlIGZpbmUsIHdlJ2xsIHNpbXBseSBjb25zaWRl ciB0aGlzIGluIHRoZQorCSAqIG5leHQgYmFsYW5jaW5nIGN5Y2xlLgorCSAqCisJICogWFhY IERvZXMgdGhpcyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBjb21wbGV0ZVBhc3NlcyB0b28/ CisJICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0 aXRpb25zOyBpKyspCisJeworCQlDbG9ja1N3ZWVwICpzd2VlcCA9ICZTdHJhdGVneUNvbnRy b2wtPnN3ZWVwc1tpXTsKKworCQkvKiBubyBuZWVkIGZvciBhIHNwaW5sb2NrICovCisJCWFs bG9jc1tpXSA9IHBnX2F0b21pY19leGNoYW5nZV91MzIoJnN3ZWVwLT5udW1SZXF1ZXN0ZWRB bGxvY3MsIDApOworCisJCS8qIGFkZCB0aGUgYWxsb2NzIHRvIHJ1bm5pbmcgdG90YWwgKi8K KwkJcGdfYXRvbWljX2ZldGNoX2FkZF91NjQoJnN3ZWVwLT5udW1Ub3RhbFJlcXVlc3RlZEFs bG9jcywgYWxsb2NzW2ldKTsKKworCQl0b3RhbF9hbGxvY3MgKz0gYWxsb2NzW2ldOworCX0K KworCS8qCisJICogQ2FsY3VsYXRlIHRoZSAiZmFpciBzaGFyZSIgb2YgYWxsb2NhdGlvbnMg cGVyIHBhcnRpdGlvbi4KKwkgKgorCSAqIFhYWCBUaGUgbGFzdCBwYXJ0aXRpb24gY291bGQg YmUgc21hbGxlciwgaW4gd2hpY2ggY2FzZSBpdCBzaG91bGQgYmUKKwkgKiBleHBlY3RlZCB0 byBoYW5kbGUgZmV3ZXIgYWxsb2NhdGlvbnMuIFNvIHRoaXMgc2hvdWxkIGJlIGEgd2VpZ2h0 ZWQKKwkgKiBhdmVyYWdlLiBCdXQgZm9yIG5vdyBhIHNpbXBsZSBhdmVyYWdlIGlzIGdvb2Qg ZW5vdWdoLgorCSAqLworCWF2Z19hbGxvY3MgPSAodG90YWxfYWxsb2NzIC8gU3RyYXRlZ3lD b250cm9sLT5udW1fcGFydGl0aW9ucyk7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgImRl bHRhIiBmcm9tIGJhbGFuY2VkIHN0YXRlLCBpLmUuIGhvdyBtYW55IGFsbG9jYXRpb25zCisJ ICogd2UnZCBuZWVkIHRvIHJlZGlzdHJpYnV0ZS4KKwkgKi8KKwlmb3IgKGludCBpID0gMDsg aSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnM7IGkrKykKKwl7CisJCWlmIChh bGxvY3NbaV0gPiBhdmdfYWxsb2NzKQorCQkJZGVsdGFfYWxsb2NzICs9IChhbGxvY3NbaV0g LSBhdmdfYWxsb2NzKTsKKwl9CisKKwkvKgorCSAqIFNraXAgdGhlIHJlYmFsYW5jaW5nIHdo ZW4gdGhlcmUncyBub3QgZW5vdWdoIGFjdGl2aXR5LiBJbiB0aGlzIGNhc2UKKwkgKiB3ZSBq dXN0IGtlZXAgdGhlIGN1cnJlbnQgd2VpZ2h0cy4KKwkgKgorCSAqIFhYWCBUaGUgdGhyZXNo b2xkIG9mIDEwMCBhbGxvY2F0aW9uIGlzIHByZXR0eSBhcmJpdHJhcnkuCisJICoKKwkgKiBY WFggTWF5YmUgYSBiZXR0ZXIgc3RyYXRlZ3kgd291bGQgYmUgdG8gc2xvd2x5IHJldHVybiB0 byB0aGUgZGVmYXVsdAorCSAqIHdlaWdodHMsIHdpdGggZWFjaCBwYXJ0aXRpb24gYWxsb2Nh dGlvbiBvbmx5IGZyb20gaXRzZWxmPworCSAqCisJICogWFhYIE1heWJlIHdlIHNob3VsZG4n dCBldmVuIHJlc2V0IHRoZSBjb3VudGVycyBpbiB0aGlzIGNhc2U/IEJ1dCBpdAorCSAqIHNo b3VsZCBub3QgbWF0dGVyLCBpZiB0aGUgYWN0aXZpdHkgaXMgbG93LgorCSAqLworCWlmIChh dmdfYWxsb2NzIDwgMTAwKQorCXsKKwkJZWxvZyhMT0csICJyZWJhbGFuY2Ugc2tpcHBlZDog bm90IGVub3VnaCBhbGxvY2F0aW9ucyAoYWxsb2NzOiAldSkiLAorCQkJIGF2Z19hbGxvY3Mp OworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBMaWtld2lzZSwgc2tpcCByZWJhbGFuY2lu ZyBpZiB0aGUgbWlzYmFsYW5jZSBpcyBub3Qgc2lnbmlmaWNhbnQuIFdlCisJICogY29uc2lk ZXIgaXQgYWNjZXB0YWJsZSBpZiB0aGUgYW1vdW50IG9mIGFsbG9jYXRpb25zIHdlJ2QgbmVl ZCB0bworCSAqIHJlZGlzdHJpYnV0ZSBpcyBsZXNzIHRoYW4gMTAlIG9mIHRoZSBhdmVyYWdl LgorCSAqCisJICogWFhYIEFnYWluLCB0aGVzZSB0aHJlc2hvbGQgYXJlIHJhdGhlciBhcmJp dHJhcnkuCisJICovCisJaWYgKGRlbHRhX2FsbG9jcyA8IChhdmdfYWxsb2NzICogMC4xKSkK Kwl7CisJCWVsb2coTE9HLCAicmViYWxhbmNlIHNraXBwZWQ6IGRlbHRhIHdpdGhpbiBsaW1p dCAoZGVsdGE6ICV1LCB0aHJlc2hvbGQ6ICV1KSIsCisJCQkgZGVsdGFfYWxsb2NzLCAodWlu dDMyKSAoYXZnX2FsbG9jcyAqIDAuMSkpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBH b3QgdG8gZG8gdGhlIHJlYmFsYW5jaW5nLiBHbyB0aHJvdWdoIHRoZSBwYXJ0aXRpb25zLCBh bmQgZm9yIGVhY2gKKwkgKiBwYXJ0aXRpb24gZGVjaWRlIGlmIGl0IGdldHMgdG8gcmVkaXJl Y3Qgb3IgcmVjZWl2ZSBhbGxvY2F0aW9ucy4KKwkgKgorCSAqIElmIGEgcGFydGl0aW9uIGhh cyBmZXdlciB0aGFuIGF2ZXJhZ2UgYWxsb2NhdGlvbnMsIGl0IHdvbid0IHJlZGlyZWN0CisJ ICogYW55IGFsbG9jYXRpb25zIHRvIG90aGVyIHBhcnRpdGlvbnMuIFNvIGl0IG9ubHkgaGFz IGEgc2luZ2xlIG5vbi16ZXJvCisJICogd2VpZ2h0LCBhbmQgdGhhdCdzIGZvciBpdHNlbGYu CisJICoKKwkgKiBJZiBhIHBhcnR0aW9uIGhhcyBtb3JlIHRoYW4gYXZlcmFnZSBhbGxvY2F0 aW9ucywgaXQgd29uJ3QgcmVjZWl2ZQorCSAqIGFueSByZWRpcmVjdGVkIGFsbG9jYXRpb25z LiBJbnN0ZWFkLCB0aGUgZXhjZXNzIGFsbG9jYXRpb25zIGFyZQorCSAqIHJlZGlyZWN0ZWQg dG8gdGhlIG90aGVyIHBhcnRpdGlvbnMuCisJICoKKwkgKiBUaGUgcmVkaXN0cmlidXRpb24g aXMgInByb3BvcnRpb25hbCIgLSBpZiB0aGUgZXhjZXNzIGFsbG9jYXRpb25zIG9mCisJICog YSBwYXJ0aXRpb24gcmVwcmVzZW50IDEwJSBvZiB0aGUgImRlbHRhIiwgdGhlbiBlYWNoIHBh cnRpdGlvbiB0aGF0CisJICogbmVlZHMgbW9yZSBhbGxvY2F0aW9ucyB3aWxsIGdldCAxMCUg b2YgdGhlIGdhcCBmcm9tIHRoaXMgb25lLgorCSAqCisJICogWFhYIFdlIHNob3VsZCBhZGQg aHlzdGVyZXNpcywgdG8gImRhbXBlbiIgdGhlIGNoYW5nZXMsIGFuZCBtYWtlCisJICogc3Vy ZSBpdCBkb2VzIG5vdCBvc2NpbGxhdGUgdG9vIG11Y2guCisJICoKKwkgKiBYWFggSWRlYWxs eSwgdGhlIGFsdGVybmF0aXZlIHBhcnRpdGlvbnMgdG8gdXNlIGZpcnN0IHdvdWxkIGJlIHRo ZQorCSAqIG90aGVyIHBhcnRpdGlvbnMgZm9yIHRoZSBzYW1lIG5vZGUgKGlmIGFueSkuCisJ ICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRp b25zOyBpKyspCisJeworCQlDbG9ja1N3ZWVwICpzd2VlcCA9ICZTdHJhdGVneUNvbnRyb2wt PnN3ZWVwc1tpXTsKKwkJdWludDgJCWJhbGFuY2VbTUFYX0JVRkZFUl9QQVJUSVRJT05TXTsK KworCQkvKiBsb2NrLCB3ZSdyZSBnb2luZyB0byBtb2RpZnkgdGhlIGJhbGFuY2Ugd2VpZ2h0 cyAqLworCQlTcGluTG9ja0FjcXVpcmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKKwor CQkvKiByZXNldCB0aGUgd2VpZ2h0cyB0byBzdGFydCBmcm9tIHNjcmF0Y2ggKi8KKwkJbWVt c2V0KGJhbGFuY2UsIDAsIHNpemVvZih1aW50OCkgKiBNQVhfQlVGRkVSX1BBUlRJVElPTlMp OworCisJCS8qIGRvZXMgdGhpcyBwYXJ0aXRpb24gaGFzIGZld2VyIG9yIG1vcmUgdGhhbiBh dmdfYWxsb2NzPyAqLworCQlpZiAoYWxsb2NzW2ldIDwgYXZnX2FsbG9jcykKKwkJeworCQkJ LyogZmV3ZXIgLSBkb24ndCByZWRpcmVjdCBhbnkgYWxsb2NhdGlvbnMgZWxzZXdoZXJlICov CisJCQliYWxhbmNlW2ldID0gMTAwOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAq IG1vcmUgLSByZWRpc3RyaWJ1dGUgdGhlIGV4Y2VzcyBhbGxvY2F0aW9ucworCQkJICoKKwkJ CSAqIEVhY2ggInRhcmdldCIgcGFydGl0aW9uICh3aXRoIGxlc3MgdGhhbiBhdmdfYWxsb2Nz KSBzaG91bGQgZ2V0CisJCQkgKiBhIGZyYWN0aW9uIHByb3BvcnRpb25hbCB0byAoZXhjZXNz L2RlbHRhKSBmcm9tIHRoaXMgb25lLgorCQkJICovCisKKwkJCS8qIGZyYWN0aW9uIG9mIHRo ZSAidG90YWwiIGRlbHRhICovCisJCQlkb3VibGUJZGVsdGFfZnJhYyA9IChhbGxvY3NbaV0g LSBhdmdfYWxsb2NzKSAqIDEuMCAvIGRlbHRhX2FsbG9jczsKKworCQkJLyoga2VlcCBqdXN0 IGVub3VnaCBhbGxvY2F0aW9ucyB0byBtZWV0IHRoZSB0YXJnZXQgKi8KKwkJCWJhbGFuY2Vb aV0gPSAoMTAwLjAgKiBhdmdfYWxsb2NzIC8gYWxsb2NzW2ldKTsKKworCQkJLyogcmVkaXJl Y3QgdGhlIGV4dHJhIGFsbG9jYXRpb25zICovCisJCQlmb3IgKGludCBqID0gMDsgaiA8IFN0 cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnM7IGorKykKKwkJCXsKKwkJCQkvKiBIb3cg bWFueSBhbGxvY2F0aW9ucyB0byByZWNlaXZlIGZyb20gaS10aCBwYXJ0aXRpb24/ICovCisJ CQkJdWludDMyCXJlY2VpdmVfYWxsb2NzID0gZGVsdGFfZnJhYyAqIChhdmdfYWxsb2NzIC0g YWxsb2NzW2pdKTsKKworCQkJCS8qIGlnbm9yZSBwYXJ0aXRpb25zIHRoYXQgZG9uJ3QgbmVl ZCBhZGRpdGlvbmFsIGFsbG9jYXRpb25zICovCisJCQkJaWYgKGFsbG9jc1tqXSA+IGF2Z19h bGxvY3MpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyogZnJhY3Rpb24gdG8gcmVkaXJlY3Qg Ki8KKwkJCQliYWxhbmNlW2pdID0gKDEwMC4wICogcmVjZWl2ZV9hbGxvY3MgLyBhbGxvY3Nb aV0pICsgMC41OworCQkJfQorCQl9CisKKwkJLyogY29tYmluZSB0aGUgb2xkIGFuZCBuZXcg d2VpZ2h0cyAoaHlzdGVyZXNpcykgKi8KKwkJZm9yIChpbnQgaiA9IDA7IGogPCBNQVhfQlVG RkVSX1BBUlRJVElPTlM7IGorKykKKwkJeworCQkJc3dlZXAtPmJhbGFuY2Vbal0KKwkJCQk9 IENMT0NLU1dFRVBfSElTVE9SWV9DT0VGRiAqIHN3ZWVwLT5iYWxhbmNlW2pdICsKKwkJCQkg ICgxLjAgLSBDTE9DS1NXRUVQX0hJU1RPUllfQ09FRkYpICogYmFsYW5jZVtqXTsKKwkJfQor CisJCVNwaW5Mb2NrUmVsZWFzZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOworCX0KK30K KwogLyoKICAqIFN0cmF0ZWd5U3luY1N0YXJ0IC0tIHByZXBhcmUgZm9yIHN5bmMgb2YgYWxs IHBhcnRpdGlvbnMKICAqCkBAIC02MDYsNiArOTI1LDcgQEAgU3RyYXRlZ3lTeW5jUHJlcGFy ZShpbnQgKm51bV9wYXJ0cywgdWludDMyICpudW1fYnVmX2FsbG9jKQogCXsKIAkJQ2xvY2tT d2VlcCAqc3dlZXAgPSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV07CiAKKwkJLyogWFhY IHdlIGRvbid0IG5lZWQgdGhlIHNwaW5sb2NrIHRvIHJlYWQgYXRvbWljcywgbm8/ICovCiAJ CVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOwogCQlpZiAobnVt X2J1Zl9hbGxvYykKIAkJewpAQCAtODUyLDcgKzExNzIsMjEgQEAgU3RyYXRlZ3lJbml0aWFs aXplKGJvb2wgaW5pdCkKIAkJCS8qIENsZWFyIHN0YXRpc3RpY3MgKi8KIAkJCVN0cmF0ZWd5 Q29udHJvbC0+c3dlZXBzW2ldLmNvbXBsZXRlUGFzc2VzID0gMDsKIAkJCXBnX2F0b21pY19p bml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubnVtQnVmZmVyQWxsb2NzLCAw KTsKKwkJCXBnX2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0u bnVtUmVxdWVzdGVkQWxsb2NzLCAwKTsKIAkJCXBnX2F0b21pY19pbml0X3U2NCgmU3RyYXRl Z3lDb250cm9sLT5zd2VlcHNbaV0ubnVtVG90YWxBbGxvY3MsIDApOworCQkJcGdfYXRvbWlj X2luaXRfdTY0KCZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5udW1Ub3RhbFJlcXVlc3Rl ZEFsbG9jcywgMCk7CisKKwkJCS8qCisJCQkgKiBJbml0aWFsaXplIHRoZSB3ZWlnaHRzIC0g c3RhcnQgYnkgYWxsb2NhdGluZyAxMDAlIGJ1ZmZlcnMgZnJvbQorCQkJICogdGhlIGN1cnJl bnQgbm9kZSAvIHBhcnRpdGlvbi4KKwkJCSAqLworCQkJZm9yIChpbnQgaiA9IDA7IGogPCBN QVhfQlVGRkVSX1BBUlRJVElPTlM7IGorKykKKwkJCXsKKwkJCQlpZiAoaSA9PSBqKQorCQkJ CQlTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5iYWxhbmNlW2ldID0gMTAwOworCQkJCWVs c2UKKwkJCQkJU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0uYmFsYW5jZVtqXSA9IDA7CisJ CQl9CiAJCX0KIAogCQkvKiBObyBwZW5kaW5nIG5vdGlmaWNhdGlvbiAqLwpAQCAtMTI0Miw3 ICsxNTc2LDkgQEAgU3RyYXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kg c3RyYXRlZ3ksIEJ1ZmZlckRlc2MgKmJ1ZiwgYm9vbCBmcm9tX3IKIHZvaWQKIEZyZWVsaXN0 UGFydGl0aW9uR2V0SW5mbyhpbnQgaWR4LCB1aW50NjQgKmNvbnN1bWVkLCB1aW50NjQgKnJl bWFpbiwgdWludDY0ICphY3R1YWxseV9mcmVlLAogCQkJCQkJIHVpbnQzMiAqY29tcGxldGVf cGFzc2VzLCB1aW50MzIgKm5leHRfdmljdGltX2J1ZmZlciwKLQkJCQkJCSB1aW50NjQgKmJ1 ZmZlcl90b3RhbF9hbGxvY3MsIHVpbnQzMiAqYnVmZmVyX2FsbG9jcykKKwkJCQkJCSB1aW50 NjQgKmJ1ZmZlcl90b3RhbF9hbGxvY3MsIHVpbnQzMiAqYnVmZmVyX2FsbG9jcywKKwkJCQkJ CSB1aW50NjQgKmJ1ZmZlcl90b3RhbF9yZXFfYWxsb2NzLCB1aW50MzIgKmJ1ZmZlcl9yZXFf YWxsb2NzLAorCQkJCQkJIGludCAqKndlaWdodHMpCiB7CiAJQnVmZmVyU3RyYXRlZ3lGcmVl bGlzdCAqZnJlZWxpc3Q7CiAJQ2xvY2tTd2VlcCAqc3dlZXA7CkBAIC0xMjg4LDExICsxNjI0 LDIxIEBAIEZyZWVsaXN0UGFydGl0aW9uR2V0SW5mbyhpbnQgaWR4LCB1aW50NjQgKmNvbnN1 bWVkLCB1aW50NjQgKnJlbWFpbiwgdWludDY0ICphY3R1CiAKIAkvKiBnZXQgdGhlIGNsb2Nr c3dlZXAgc3RhdHMgdG9vICovCiAJKmNvbXBsZXRlX3Bhc3NlcyA9IHN3ZWVwLT5jb21wbGV0 ZVBhc3NlczsKKworCS8qIGNhbGN1bGF0ZSB0aGUgYWN0dWFsIGJ1ZmZlciBJRCAqLwogCSpu ZXh0X3ZpY3RpbV9idWZmZXIgPSBwZ19hdG9taWNfcmVhZF91MzIoJnN3ZWVwLT5uZXh0Vmlj dGltQnVmZmVyKTsKKwkqbmV4dF92aWN0aW1fYnVmZmVyID0gc3dlZXAtPmZpcnN0QnVmZmVy ICsgKCpuZXh0X3ZpY3RpbV9idWZmZXIgJSBzd2VlcC0+bnVtQnVmZmVycyk7CiAKLQkqYnVm ZmVyX2FsbG9jcyA9IHBnX2F0b21pY19yZWFkX3UzMigmc3dlZXAtPm51bUJ1ZmZlckFsbG9j cyk7CiAJKmJ1ZmZlcl90b3RhbF9hbGxvY3MgPSBwZ19hdG9taWNfcmVhZF91NjQoJnN3ZWVw LT5udW1Ub3RhbEFsbG9jcyk7CisJKmJ1ZmZlcl9hbGxvY3MgPSBwZ19hdG9taWNfcmVhZF91 MzIoJnN3ZWVwLT5udW1CdWZmZXJBbGxvY3MpOwogCi0JLyogY2FsY3VsYXRlIHRoZSBhY3R1 YWwgYnVmZmVyIElEICovCi0JKm5leHRfdmljdGltX2J1ZmZlciA9IHN3ZWVwLT5maXJzdEJ1 ZmZlciArICgqbmV4dF92aWN0aW1fYnVmZmVyICUgc3dlZXAtPm51bUJ1ZmZlcnMpOworCSpi dWZmZXJfdG90YWxfcmVxX2FsbG9jcyA9IHBnX2F0b21pY19yZWFkX3U2NCgmc3dlZXAtPm51 bVRvdGFsUmVxdWVzdGVkQWxsb2NzKTsKKwkqYnVmZmVyX3JlcV9hbGxvY3MgPSBwZ19hdG9t aWNfcmVhZF91MzIoJnN3ZWVwLT5udW1SZXF1ZXN0ZWRBbGxvY3MpOworCisJLyogcmV0dXJu IHRoZSB3ZWlnaHRzIGluIGEgbmV3bHkgYWxsb2NhdGVkIGFycmF5ICovCisJKndlaWdodHMg PSBwYWxsb2NfYXJyYXkoaW50LCBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zKTsK Kwlmb3IgKGludCBpID0gMDsgaSA8IFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnM7 IGkrKykKKwl7CisJCSgqd2VpZ2h0cylbaV0gPSAoaW50KSBzd2VlcC0+YmFsYW5jZVtpXTsK Kwl9CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCmluZGV4IDkwN2IxNjBi NGY3Li4zOGJkNTUxMTA0OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZf aW50ZXJuYWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgK QEAgLTQ0OSw2ICs0NDksNyBAQCBleHRlcm4gdm9pZCBTdHJhdGVneUZyZWVCdWZmZXIoQnVm ZmVyRGVzYyAqYnVmKTsKIGV4dGVybiBib29sIFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkgQnVmZmVyRGVzYyAqYnVmLCBi b29sIGZyb21fcmluZyk7CiAKK2V4dGVybiB2b2lkIFN0cmF0ZWd5U3luY0JhbGFuY2Uodm9p ZCk7CiBleHRlcm4gdm9pZCBTdHJhdGVneVN5bmNQcmVwYXJlKGludCAqbnVtX3BhcnRzLCB1 aW50MzIgKm51bV9idWZfYWxsb2MpOwogZXh0ZXJuIGludAlTdHJhdGVneVN5bmNTdGFydChp bnQgcGFydGl0aW9uLCB1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywKIAkJCQkJCQkgIGludCAq Zmlyc3RfYnVmZmVyLCBpbnQgKm51bV9idWZmZXJzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCmlu ZGV4IGE2Nzk1YzVmZWU5Li5lMTcyOWYwZWUxNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9idWZtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBA IC0zNTMsNyArMzUzLDEwIEBAIGV4dGVybiB2b2lkIEZyZWVsaXN0UGFydGl0aW9uR2V0SW5m byhpbnQgaWR4LAogCQkJCQkJCQkJIHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLAogCQkJCQkJ CQkJIHVpbnQzMiAqbmV4dF92aWN0aW1fYnVmZmVyLAogCQkJCQkJCQkJIHVpbnQ2NCAqYnVm ZmVyX3RvdGFsX2FsbG9jcywKLQkJCQkJCQkJCSB1aW50MzIgKmJ1ZmZlcl9hbGxvY3MpOwor CQkJCQkJCQkJIHVpbnQzMiAqYnVmZmVyX2FsbG9jcywKKwkJCQkJCQkJCSB1aW50NjQgKmJ1 ZmZlcl90b3RhbF9yZXFfYWxsb2NzLAorCQkJCQkJCQkJIHVpbnQzMiAqYnVmZmVyX3JlcV9h bGxvY3MsCisJCQkJCQkJCQkgaW50ICoqd2VpZ2h0cyk7CiAKIC8qIGlubGluZSBmdW5jdGlv bnMgKi8KIAotLSAKMi41MC4xCgo= --------------8xriSvZLhsgPmdy7CNlM8G85 Content-Type: text/x-patch; charset=UTF-8; name="v20250807-0007-NUMA-clockweep-partitioning.patch" Content-Disposition: attachment; filename="v20250807-0007-NUMA-clockweep-partitioning.patch" Content-Transfer-Encoding: base64 RnJvbSBjMmRiZDk5MWJmMjcyMGViNmQ5Mjk1YmZmZDYxNzQ0ZjUyNWExOWM5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogU3VuLCA4IEp1biAyMDI1IDE4OjUzOjEyICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNTA4MDcgMDcvMTFdIE5VTUE6IGNsb2Nrd2VlcCBwYXJ0aXRpb25pbmcKClNpbWlsYXIg dG8gdGhlIGZyZWxpc3QgcGF0Y2ggLSBwYXJ0aXRpb24gdGhlICJjbG9ja3N3ZWVwIiBhbGdv cml0aG0gdG8Kd29yayBvbiB0aGUgc2VxdWVuY2Ugb2Ygc21hbGxlciBwYXJ0aXRpb25zLCBv bmUgYnkgb25lLgoKSXQgZXh0ZW5kcyB0aGUgInBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMi IHZpZXcgdG8gaW5jbHVkZSBpbmZvcm1hdGlvbgphYm91dCB0aGUgY2xvY2tzd2VlcCBhY3Rp dml0eS4KCk5vdGU6IFRoaXMgbmVlZHMgc29tZSBzb3J0IG9mICJiYWxhbmNpbmciIHdoZW4g b25lIG9mIHRoZSBwYXJ0aXRpb25zIGlzCm11Y2ggYnVzaWVyIHRoYW4gdGhlIHJlc3QgKGUu Zy4gYmVjYXVzZSB0aGVyZSdzIGEgc2luZ2xlIGJhY2tlbmQgY29uc3VtaW5nCmEgbG90IG9m IGJ1ZmZlcnMgZnJvbSBpdCkuCi0tLQogLi4uL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5z cWwgICAgICAgICAgICAgIHwgICA4ICstCiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1 ZmZlcmNhY2hlX3BhZ2VzLmMgfCAgMzIgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2J1Zm1nci5jICAgICAgICAgICB8IDQ3NiArKysrKysrKysrLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAgICB8IDIzOCArKysrKysrLS0K IHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oICAgICAgICAgICB8ICAgNCAr LQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgICAgICAgICAgIHwgICA2 ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAg IDEgKwogNyBmaWxlcyBjaGFuZ2VkLCA1MDQgaW5zZXJ0aW9ucygrKSwgMjYxIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2Fj aGUtLTEuNi0tMS43LnNxbCBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2Fj aGUtLTEuNi0tMS43LnNxbAppbmRleCA5NWZkMmQyYTIyNi4uOTk5YmIyMTI4ZjAgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43 LnNxbAorKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjYt LTEuNy5zcWwKQEAgLTIxLDcgKzIxLDEzIEBAIENSRUFURSBWSUVXIHBnX2J1ZmZlcmNhY2hl X3BhcnRpdGlvbnMgQVMKIAkgLS0gZnJlZWxpc3RzCiAJIGxpc3RfY29uc3VtZWQgYmlnaW50 LAkJLS0gYnVmZmVycyBjb25zdW1lZCBmcm9tIGEgZnJlZWxpc3QKIAkgbGlzdF9yZW1haW4g YmlnaW50LAkJLS0gYnVmZmVycyBsZWZ0IGluIGEgZnJlZWxpc3QKLQkgbGlzdF9mcmVlIGJp Z2ludCk7CQkJLS0gbnVtYmVyIG9mIGZyZWUgYnVmZmVycworCSBsaXN0X2ZyZWUgYmlnaW50 LAkJCS0tIG51bWJlciBvZiBmcmVlIGJ1ZmZlcnMKKworCSAtLSBjbG9ja3N3ZWVwIGNvdW50 ZXJzCisJIG51bV9wYXNzZXMgYmlnaW50LAkJCS0tIGNsb2Nrc3dlZXAgcGFzc2VzCisJIG5l eHRfYnVmZmVyIGludGVnZXIsCQktLSBuZXh0IHZpY3RpbSBidWZmZXIgZm9yIGNsb2Nrc3dl ZXAKKwkgdG90YWxfYWxsb2NzIGJpZ2ludCwJCS0tIGhhbmRsZWQgYWxsb2NzIChydW5uaW5n IHRvdGFsKQorCSBudW1fYWxsb2NzIGJpZ2ludCk7CQktLSBoYW5kbGVkIGFsbG9jcyAoY3Vy cmVudCBjeWNsZSkKIAogLS0gRG9uJ3Qgd2FudCB0aGVzZSB0byBiZSBhdmFpbGFibGUgdG8g cHVibGljLgogUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19idWZmZXJjYWNoZV9wYXJ0aXRp b25zKCkgRlJPTSBQVUJMSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2J1ZmZlcmNhY2hl L3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1 ZmZlcmNhY2hlX3BhZ2VzLmMKaW5kZXggNmQ3MzQ0NjRhMjIuLjdjYTA3NWU2MTY0IDEwMDY0 NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMK KysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCkBA IC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9FVklDVF9BTExfRUxF TSAzCiAKICNkZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX05VTUFfRUxFTQkzCi0jZGVmaW5lIE5V TV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU0JOAorI2RlZmluZSBOVU1fQlVGRkVSQ0FD SEVfUEFSVElUSU9OU19FTEVNCTEyCiAKIFBHX01PRFVMRV9NQUdJQ19FWFQoCiAJCQkJCS5u YW1lID0gInBnX2J1ZmZlcmNhY2hlIiwKQEAgLTgxOCw2ICs4MTgsMTQgQEAgcGdfYnVmZmVy Y2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQkJICAgSU5UOE9JRCwg LTEsIDApOwogCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikg OCwgImxpc3RfZnJlZSIsCiAJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisJCVR1cGxlRGVz Y0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA5LCAibnVtX3Bhc3NlcyIsCisJ CQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRl c2MsIChBdHRyTnVtYmVyKSAxMCwgIm5leHRfYnVmZmVyIiwKKwkJCQkJCSAgIElOVDRPSUQs IC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIp IDExLCAidG90YWxfYWxsb2NzIiwKKwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKKwkJVHVw bGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDEyLCAibnVtX2FsbG9j cyIsCisJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CiAKIAkJZnVuY2N0eC0+dXNlcl9mY3R4 ID0gQmxlc3NUdXBsZURlc2ModHVwbGVkZXNjKTsKIApAQCAtODQzLDYgKzg1MSwxMiBAQCBw Z19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCWJ1ZmZl cnNfcmVtYWluLAogCQkJCQlidWZmZXJzX2ZyZWU7CiAKKwkJdWludDY0CQlidWZmZXJfdG90 YWxfYWxsb2NzOworCisJCXVpbnQzMgkJY29tcGxldGVfcGFzc2VzLAorCQkJCQluZXh0X3Zp Y3RpbV9idWZmZXIsCisJCQkJCWJ1ZmZlcl9hbGxvY3M7CisKIAkJRGF0dW0JCXZhbHVlc1tO VU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNXTsKIAkJYm9vbAkJbnVsbHNbTlVNX0JV RkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CiAKQEAgLTg1MCw3ICs4NjQsOSBAQCBwZ19i dWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQkgICAmZmly c3RfYnVmZmVyLCAmbGFzdF9idWZmZXIpOwogCiAJCUZyZWVsaXN0UGFydGl0aW9uR2V0SW5m byhpLCAmYnVmZmVyc19jb25zdW1lZCwgJmJ1ZmZlcnNfcmVtYWluLAotCQkJCQkJCQkgJmJ1 ZmZlcnNfZnJlZSk7CisJCQkJCQkJCSAmYnVmZmVyc19mcmVlLAorCQkJCQkJCQkgJmNvbXBs ZXRlX3Bhc3NlcywgJm5leHRfdmljdGltX2J1ZmZlciwKKwkJCQkJCQkJICZidWZmZXJfdG90 YWxfYWxsb2NzLCAmYnVmZmVyX2FsbG9jcyk7CiAKIAkJdmFsdWVzWzBdID0gSW50MzJHZXRE YXR1bShpKTsKIAkJbnVsbHNbMF0gPSBmYWxzZTsKQEAgLTg3Niw2ICs4OTIsMTggQEAgcGdf YnVmZmVyY2FjaGVfcGFydGl0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQl2YWx1ZXNbN10g PSBJbnQ2NEdldERhdHVtKGJ1ZmZlcnNfZnJlZSk7CiAJCW51bGxzWzddID0gZmFsc2U7CiAK KwkJdmFsdWVzWzhdID0gSW50NjRHZXREYXR1bShjb21wbGV0ZV9wYXNzZXMpOworCQludWxs c1s4XSA9IGZhbHNlOworCisJCXZhbHVlc1s5XSA9IEludDMyR2V0RGF0dW0obmV4dF92aWN0 aW1fYnVmZmVyKTsKKwkJbnVsbHNbOV0gPSBmYWxzZTsKKworCQl2YWx1ZXNbMTBdID0gSW50 NjRHZXREYXR1bShidWZmZXJfdG90YWxfYWxsb2NzKTsKKwkJbnVsbHNbMTBdID0gZmFsc2U7 CisKKwkJdmFsdWVzWzExXSA9IEludDY0R2V0RGF0dW0oYnVmZmVyX2FsbG9jcyk7CisJCW51 bGxzWzExXSA9IGZhbHNlOworCiAJCS8qIEJ1aWxkIGFuZCByZXR1cm4gdGhlIHR1cGxlLiAq LwogCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZSgoVHVwbGVEZXNjKSBmdW5jY3R4LT51c2Vy X2ZjdHgsIHZhbHVlcywgbnVsbHMpOwogCQlyZXN1bHQgPSBIZWFwVHVwbGVHZXREYXR1bSh0 dXBsZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IGJkNTA1MzUz ODVmLi43YThjNDVhYzU5YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMK QEAgLTM1ODQsNiArMzU4NCwyMyBAQCBCdWZmZXJTeW5jKGludCBmbGFncykKIAlUUkFDRV9Q T1NUR1JFU1FMX0JVRkZFUl9TWU5DX0RPTkUoTkJ1ZmZlcnMsIG51bV93cml0dGVuLCBudW1f dG9fc2Nhbik7CiB9CiAKKy8qCisgKiBJbmZvcm1hdGlvbiBzYXZlZCBiZXR3ZWVuIGNhbGxz IHNvIHdlIGNhbiBkZXRlcm1pbmUgdGhlIHN0cmF0ZWd5CisgKiBwb2ludCdzIGFkdmFuY2Ug cmF0ZSBhbmQgYXZvaWQgc2Nhbm5pbmcgYWxyZWFkeS1jbGVhbmVkIGJ1ZmZlcnMuCisgKgor ICogWFhYIE9uZSB2YWx1ZSBwZXIgcGFydGl0aW9uLiBXZSBkb24ndCBrbm93IGhvdyBtYW55 IHBhcnRpdGlvbnMgYXJlCisgKiB0aGVyZSwgc28gYWxsb2NhdGUgMzIsIHNob3VsZCBiZSBl bm91Z2ggZm9yIHRoZSBQb0MgcGF0Y2guCisgKgorICogWFhYIG1pZ2h0IGJlIGJldHRlciB0 byBoYXZlIGEgcGVyLXBhcnRpdGlvbiBzdHJ1Y3Qgd2l0aCBhbGwgdGhlIGluZm8KKyAqLwor I2RlZmluZSBNQVhfQ0xPQ0tTV0VFUF9QQVJUSVRJT05TIDMyCitzdGF0aWMgYm9vbCBzYXZl ZF9pbmZvX3ZhbGlkID0gZmFsc2U7CitzdGF0aWMgaW50CXByZXZfc3RyYXRlZ3lfYnVmX2lk W01BWF9DTE9DS1NXRUVQX1BBUlRJVElPTlNdOworc3RhdGljIHVpbnQzMiBwcmV2X3N0cmF0 ZWd5X3Bhc3Nlc1tNQVhfQ0xPQ0tTV0VFUF9QQVJUSVRJT05TXTsKK3N0YXRpYyBpbnQJbmV4 dF90b19jbGVhbltNQVhfQ0xPQ0tTV0VFUF9QQVJUSVRJT05TXTsKK3N0YXRpYyB1aW50MzIg bmV4dF9wYXNzZXNbTUFYX0NMT0NLU1dFRVBfUEFSVElUSU9OU107CisKKwogLyoKICAqIEJn QnVmZmVyU3luYyAtLSBXcml0ZSBvdXQgc29tZSBkaXJ0eSBidWZmZXJzIGluIHRoZSBwb29s LgogICoKQEAgLTM1OTksNTUgKzM2MTYsMjQgQEAgYm9vbAogQmdCdWZmZXJTeW5jKFdyaXRl YmFja0NvbnRleHQgKndiX2NvbnRleHQpCiB7CiAJLyogaW5mbyBvYnRhaW5lZCBmcm9tIGZy ZWVsaXN0LmMgKi8KLQlpbnQJCQlzdHJhdGVneV9idWZfaWQ7Ci0JdWludDMyCQlzdHJhdGVn eV9wYXNzZXM7CiAJdWludDMyCQlyZWNlbnRfYWxsb2M7CisJdWludDMyCQlyZWNlbnRfYWxs b2NfcGFydGl0aW9uOworCWludAkJCW51bV9wYXJ0aXRpb25zOwogCi0JLyoKLQkgKiBJbmZv cm1hdGlvbiBzYXZlZCBiZXR3ZWVuIGNhbGxzIHNvIHdlIGNhbiBkZXRlcm1pbmUgdGhlIHN0 cmF0ZWd5Ci0JICogcG9pbnQncyBhZHZhbmNlIHJhdGUgYW5kIGF2b2lkIHNjYW5uaW5nIGFs cmVhZHktY2xlYW5lZCBidWZmZXJzLgotCSAqLwotCXN0YXRpYyBib29sIHNhdmVkX2luZm9f dmFsaWQgPSBmYWxzZTsKLQlzdGF0aWMgaW50CXByZXZfc3RyYXRlZ3lfYnVmX2lkOwotCXN0 YXRpYyB1aW50MzIgcHJldl9zdHJhdGVneV9wYXNzZXM7Ci0Jc3RhdGljIGludAluZXh0X3Rv X2NsZWFuOwotCXN0YXRpYyB1aW50MzIgbmV4dF9wYXNzZXM7Ci0KLQkvKiBNb3ZpbmcgYXZl cmFnZXMgb2YgYWxsb2NhdGlvbiByYXRlIGFuZCBjbGVhbi1idWZmZXIgZGVuc2l0eSAqLwot CXN0YXRpYyBmbG9hdCBzbW9vdGhlZF9hbGxvYyA9IDA7Ci0Jc3RhdGljIGZsb2F0IHNtb290 aGVkX2RlbnNpdHkgPSAxMC4wOwotCi0JLyogUG90ZW50aWFsbHkgdGhlc2UgY291bGQgYmUg dHVuYWJsZXMsIGJ1dCBmb3Igbm93LCBub3QgKi8KLQlmbG9hdAkJc21vb3RoaW5nX3NhbXBs ZXMgPSAxNjsKLQlmbG9hdAkJc2Nhbl93aG9sZV9wb29sX21pbGxpc2Vjb25kcyA9IDEyMDAw MC4wOwotCi0JLyogVXNlZCB0byBjb21wdXRlIGhvdyBmYXIgd2Ugc2NhbiBhaGVhZCAqLwot CWxvbmcJCXN0cmF0ZWd5X2RlbHRhOwotCWludAkJCWJ1ZnNfdG9fbGFwOwotCWludAkJCWJ1 ZnNfYWhlYWQ7Ci0JZmxvYXQJCXNjYW5zX3Blcl9hbGxvYzsKLQlpbnQJCQlyZXVzYWJsZV9i dWZmZXJzX2VzdDsKLQlpbnQJCQl1cGNvbWluZ19hbGxvY19lc3Q7Ci0JaW50CQkJbWluX3Nj YW5fYnVmZmVyczsKLQotCS8qIFZhcmlhYmxlcyBmb3IgdGhlIHNjYW5uaW5nIGxvb3AgcHJv cGVyICovCi0JaW50CQkJbnVtX3RvX3NjYW47Ci0JaW50CQkJbnVtX3dyaXR0ZW47Ci0JaW50 CQkJcmV1c2FibGVfYnVmZmVyczsKKwkvKiBhc3N1bWUgd2UgY2FuIGhpYmVybmF0ZSwgYW55 IHBhcnRpdGlvbiBjYW4gc2V0IHRvIGZhbHNlICovCisJYm9vbAkJaGliZXJuYXRlID0gdHJ1 ZTsKIAotCS8qIFZhcmlhYmxlcyBmb3IgZmluYWwgc21vb3RoZWRfZGVuc2l0eSB1cGRhdGUg Ki8KLQlsb25nCQluZXdfc3RyYXRlZ3lfZGVsdGE7Ci0JdWludDMyCQluZXdfcmVjZW50X2Fs bG9jOworCS8qIGdldCB0aGUgbnVtYmVyIG9mIGNsb2Nrc3dlZXAgcGFydGl0aW9ucywgYW5k IHRvdGFsIGFsbG9jIGNvdW50ICovCisJU3RyYXRlZ3lTeW5jUHJlcGFyZSgmbnVtX3BhcnRp dGlvbnMsICZyZWNlbnRfYWxsb2MpOwogCi0JLyoKLQkgKiBGaW5kIG91dCB3aGVyZSB0aGUg ZnJlZWxpc3QgY2xvY2sgc3dlZXAgY3VycmVudGx5IGlzLCBhbmQgaG93IG1hbnkKLQkgKiBi dWZmZXIgYWxsb2NhdGlvbnMgaGF2ZSBoYXBwZW5lZCBzaW5jZSBvdXIgbGFzdCBjYWxsLgot CSAqLwotCXN0cmF0ZWd5X2J1Zl9pZCA9IFN0cmF0ZWd5U3luY1N0YXJ0KCZzdHJhdGVneV9w YXNzZXMsICZyZWNlbnRfYWxsb2MpOworCUFzc2VydChudW1fcGFydGl0aW9ucyA8PSBNQVhf Q0xPQ0tTV0VFUF9QQVJUSVRJT05TKTsKIAogCS8qIFJlcG9ydCBidWZmZXIgYWxsb2MgY291 bnRzIHRvIHBnc3RhdCAqLwogCVBlbmRpbmdCZ1dyaXRlclN0YXRzLmJ1Zl9hbGxvYyArPSBy ZWNlbnRfYWxsb2M7CiAKKwkvKiBhdmVyYWdlIGFsbG9jIGJ1ZmZlcnMgcGVyIHBhcnRpdGlv biAqLworCXJlY2VudF9hbGxvY19wYXJ0aXRpb24gPSAocmVjZW50X2FsbG9jIC8gbnVtX3Bh cnRpdGlvbnMpOworCiAJLyoKIAkgKiBJZiB3ZSdyZSBub3QgcnVubmluZyB0aGUgTFJVIHNj YW4sIGp1c3Qgc3RvcCBhZnRlciBkb2luZyB0aGUgc3RhdHMKIAkgKiBzdHVmZi4gIFdlIG1h cmsgdGhlIHNhdmVkIHN0YXRlIGludmFsaWQgc28gdGhhdCB3ZSBjYW4gcmVjb3ZlciBzYW5l bHkKQEAgLTM2NjAsMjIzICszNjQ2LDI4NSBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29u dGV4dCAqd2JfY29udGV4dCkKIAl9CiAKIAkvKgotCSAqIENvbXB1dGUgc3RyYXRlZ3lfZGVs dGEgPSBob3cgbWFueSBidWZmZXJzIGhhdmUgYmVlbiBzY2FubmVkIGJ5IHRoZQotCSAqIGNs b2NrIHN3ZWVwIHNpbmNlIGxhc3QgdGltZS4gIElmIGZpcnN0IHRpbWUgdGhyb3VnaCwgYXNz dW1lIG5vbmUuIFRoZW4KLQkgKiBzZWUgaWYgd2UgYXJlIHN0aWxsIGFoZWFkIG9mIHRoZSBj bG9jayBzd2VlcCwgYW5kIGlmIHNvLCBob3cgbWFueQotCSAqIGJ1ZmZlcnMgd2UgY291bGQg c2NhbiBiZWZvcmUgd2UnZCBjYXRjaCB1cCB3aXRoIGl0IGFuZCAibGFwIiBpdC4gTm90ZToK LQkgKiB3ZWlyZC1sb29raW5nIGNvZGluZyBvZiB4eHhfcGFzc2VzIGNvbXBhcmlzb25zIGFy ZSB0byBhdm9pZCBib2d1cwotCSAqIGJlaGF2aW9yIHdoZW4gdGhlIHBhc3NlcyBjb3VudHMg d3JhcCBhcm91bmQuCi0JICovCi0JaWYgKHNhdmVkX2luZm9fdmFsaWQpCi0JewotCQlpbnQz MgkJcGFzc2VzX2RlbHRhID0gc3RyYXRlZ3lfcGFzc2VzIC0gcHJldl9zdHJhdGVneV9wYXNz ZXM7Ci0KLQkJc3RyYXRlZ3lfZGVsdGEgPSBzdHJhdGVneV9idWZfaWQgLSBwcmV2X3N0cmF0 ZWd5X2J1Zl9pZDsKLQkJc3RyYXRlZ3lfZGVsdGEgKz0gKGxvbmcpIHBhc3Nlc19kZWx0YSAq IE5CdWZmZXJzOworCSAqIG5vdyBwcm9jZXNzIHRoZSBjbG9ja3N3ZWVwIHBhcnRpdGlvbnMs IG9uZSBieSBvbmUsIHVzaW5nIHRoZSBzYW1lCisJICogY2xlYW51cCB0aGF0IHdlIHVzZWQg Zm9yIGFsbCBidWZmZXJzCisJICoKKwkgKiBYWFggTWF5YmUgd2Ugc2hvdWxkIHJhbmRvbWl6 ZSB0aGUgb3JkZXIgb2YgcGFydGl0aW9ucyBhIGJpdCwgc28gdGhhdCB3ZQorCSAqIGRvbid0 IHN0YXJ0IGZyb20gcGFydGl0aW9uIDAgYWxsIHRoZSB0aW1lPyBQZXJoYXBzIG5vdCBlbnRp cmVseSwgYnV0IGF0CisJICogbGVhc3QgcGljayBhIHJhbmRvbSBzdGFydGluZyBwb2ludD8K KwkgKi8KKwlmb3IgKGludCBwYXJ0aXRpb24gPSAwOyBwYXJ0aXRpb24gPCBudW1fcGFydGl0 aW9uczsgcGFydGl0aW9uKyspCisJeworCQkvKiBpbmZvIG9idGFpbmVkIGZyb20gZnJlZWxp c3QuYyAqLworCQlpbnQJCQlzdHJhdGVneV9idWZfaWQ7CisJCXVpbnQzMgkJc3RyYXRlZ3lf cGFzc2VzOworCisJCS8qIE1vdmluZyBhdmVyYWdlcyBvZiBhbGxvY2F0aW9uIHJhdGUgYW5k IGNsZWFuLWJ1ZmZlciBkZW5zaXR5ICovCisJCXN0YXRpYyBmbG9hdCBzbW9vdGhlZF9hbGxv YyA9IDA7CisJCXN0YXRpYyBmbG9hdCBzbW9vdGhlZF9kZW5zaXR5ID0gMTAuMDsKKworCQkv KiBQb3RlbnRpYWxseSB0aGVzZSBjb3VsZCBiZSB0dW5hYmxlcywgYnV0IGZvciBub3csIG5v dCAqLworCQlmbG9hdAkJc21vb3RoaW5nX3NhbXBsZXMgPSAxNjsKKwkJZmxvYXQJCXNjYW5f d2hvbGVfcG9vbF9taWxsaXNlY29uZHMgPSAxMjAwMDAuMDsKKworCQkvKiBVc2VkIHRvIGNv bXB1dGUgaG93IGZhciB3ZSBzY2FuIGFoZWFkICovCisJCWxvbmcJCXN0cmF0ZWd5X2RlbHRh OworCQlpbnQJCQlidWZzX3RvX2xhcDsKKwkJaW50CQkJYnVmc19haGVhZDsKKwkJZmxvYXQJ CXNjYW5zX3Blcl9hbGxvYzsKKwkJaW50CQkJcmV1c2FibGVfYnVmZmVyc19lc3Q7CisJCWlu dAkJCXVwY29taW5nX2FsbG9jX2VzdDsKKwkJaW50CQkJbWluX3NjYW5fYnVmZmVyczsKKwor CQkvKiBWYXJpYWJsZXMgZm9yIHRoZSBzY2FubmluZyBsb29wIHByb3BlciAqLworCQlpbnQJ CQludW1fdG9fc2NhbjsKKwkJaW50CQkJbnVtX3dyaXR0ZW47CisJCWludAkJCXJldXNhYmxl X2J1ZmZlcnM7CisKKwkJLyogVmFyaWFibGVzIGZvciBmaW5hbCBzbW9vdGhlZF9kZW5zaXR5 IHVwZGF0ZSAqLworCQlsb25nCQluZXdfc3RyYXRlZ3lfZGVsdGE7CisJCXVpbnQzMgkJbmV3 X3JlY2VudF9hbGxvYzsKKworCQkvKiBidWZmZXIgcmFuZ2UgZm9yIHRoZSBjbG9ja3N3ZWVw IHBhcnRpdGlvbiAqLworCQlpbnQJCQlmaXJzdF9idWZmZXI7CisJCWludAkJCW51bV9idWZm ZXJzOwogCi0JCUFzc2VydChzdHJhdGVneV9kZWx0YSA+PSAwKTsKKwkJLyoKKwkJICogRmlu ZCBvdXQgd2hlcmUgdGhlIGZyZWVsaXN0IGNsb2NrIHN3ZWVwIGN1cnJlbnRseSBpcywgYW5k IGhvdyBtYW55CisJCSAqIGJ1ZmZlciBhbGxvY2F0aW9ucyBoYXZlIGhhcHBlbmVkIHNpbmNl IG91ciBsYXN0IGNhbGwuCisJCSAqLworCQlzdHJhdGVneV9idWZfaWQgPSBTdHJhdGVneVN5 bmNTdGFydChwYXJ0aXRpb24sICZzdHJhdGVneV9wYXNzZXMsCisJCQkJCQkJCQkJCSZmaXJz dF9idWZmZXIsICZudW1fYnVmZmVycyk7CiAKLQkJaWYgKChpbnQzMikgKG5leHRfcGFzc2Vz IC0gc3RyYXRlZ3lfcGFzc2VzKSA+IDApCisJCS8qCisJCSAqIENvbXB1dGUgc3RyYXRlZ3lf ZGVsdGEgPSBob3cgbWFueSBidWZmZXJzIGhhdmUgYmVlbiBzY2FubmVkIGJ5IHRoZQorCQkg KiBjbG9jayBzd2VlcCBzaW5jZSBsYXN0IHRpbWUuICBJZiBmaXJzdCB0aW1lIHRocm91Z2gs IGFzc3VtZSBub25lLgorCQkgKiBUaGVuIHNlZSBpZiB3ZSBhcmUgc3RpbGwgYWhlYWQgb2Yg dGhlIGNsb2NrIHN3ZWVwLCBhbmQgaWYgc28sIGhvdworCQkgKiBtYW55IGJ1ZmZlcnMgd2Ug Y291bGQgc2NhbiBiZWZvcmUgd2UnZCBjYXRjaCB1cCB3aXRoIGl0IGFuZCAibGFwIgorCQkg KiBpdC4gTm90ZTogd2VpcmQtbG9va2luZyBjb2Rpbmcgb2YgeHh4X3Bhc3NlcyBjb21wYXJp c29ucyBhcmUgdG8KKwkJICogYXZvaWQgYm9ndXMgYmVoYXZpb3Igd2hlbiB0aGUgcGFzc2Vz IGNvdW50cyB3cmFwIGFyb3VuZC4KKwkJICovCisJCWlmIChzYXZlZF9pbmZvX3ZhbGlkKQog CQl7Ci0JCQkvKiB3ZSdyZSBvbmUgcGFzcyBhaGVhZCBvZiB0aGUgc3RyYXRlZ3kgcG9pbnQg Ki8KLQkJCWJ1ZnNfdG9fbGFwID0gc3RyYXRlZ3lfYnVmX2lkIC0gbmV4dF90b19jbGVhbjsK KwkJCWludDMyCQlwYXNzZXNfZGVsdGEgPSBzdHJhdGVneV9wYXNzZXMgLSBwcmV2X3N0cmF0 ZWd5X3Bhc3Nlc1twYXJ0aXRpb25dOworCisJCQlzdHJhdGVneV9kZWx0YSA9IHN0cmF0ZWd5 X2J1Zl9pZCAtIHByZXZfc3RyYXRlZ3lfYnVmX2lkW3BhcnRpdGlvbl07CisJCQlzdHJhdGVn eV9kZWx0YSArPSAobG9uZykgcGFzc2VzX2RlbHRhICogbnVtX2J1ZmZlcnM7CisKKwkJCUFz c2VydChzdHJhdGVneV9kZWx0YSA+PSAwKTsKKworCQkJaWYgKChpbnQzMikgKG5leHRfcGFz c2VzW3BhcnRpdGlvbl0gLSBzdHJhdGVneV9wYXNzZXMpID4gMCkKKwkJCXsKKwkJCQkvKiB3 ZSdyZSBvbmUgcGFzcyBhaGVhZCBvZiB0aGUgc3RyYXRlZ3kgcG9pbnQgKi8KKwkJCQlidWZz X3RvX2xhcCA9IHN0cmF0ZWd5X2J1Zl9pZCAtIG5leHRfdG9fY2xlYW5bcGFydGl0aW9uXTsK ICNpZmRlZiBCR1dfREVCVUcKLQkJCWVsb2coREVCVUcyLCAiYmd3cml0ZXIgYWhlYWQ6IGJn dyAldS0ldSBzdHJhdGVneSAldS0ldSBkZWx0YT0lbGQgbGFwPSVkIiwKLQkJCQkgbmV4dF9w YXNzZXMsIG5leHRfdG9fY2xlYW4sCi0JCQkJIHN0cmF0ZWd5X3Bhc3Nlcywgc3RyYXRlZ3lf YnVmX2lkLAotCQkJCSBzdHJhdGVneV9kZWx0YSwgYnVmc190b19sYXApOworCQkJCWVsb2co REVCVUcyLCAiYmd3cml0ZXIgYWhlYWQ6IGJndyAldS0ldSBzdHJhdGVneSAldS0ldSBkZWx0 YT0lbGQgbGFwPSVkIiwKKwkJCQkJIG5leHRfcGFzc2VzLCBuZXh0X3RvX2NsZWFuLAorCQkJ CQkgc3RyYXRlZ3lfcGFzc2VzLCBzdHJhdGVneV9idWZfaWQsCisJCQkJCSBzdHJhdGVneV9k ZWx0YSwgYnVmc190b19sYXApOwogI2VuZGlmCi0JCX0KLQkJZWxzZSBpZiAobmV4dF9wYXNz ZXMgPT0gc3RyYXRlZ3lfcGFzc2VzICYmCi0JCQkJIG5leHRfdG9fY2xlYW4gPj0gc3RyYXRl Z3lfYnVmX2lkKQotCQl7Ci0JCQkvKiBvbiBzYW1lIHBhc3MsIGJ1dCBhaGVhZCBvciBhdCBs ZWFzdCBub3QgYmVoaW5kICovCi0JCQlidWZzX3RvX2xhcCA9IE5CdWZmZXJzIC0gKG5leHRf dG9fY2xlYW4gLSBzdHJhdGVneV9idWZfaWQpOworCQkJfQorCQkJZWxzZSBpZiAobmV4dF9w YXNzZXNbcGFydGl0aW9uXSA9PSBzdHJhdGVneV9wYXNzZXMgJiYKKwkJCQkJIG5leHRfdG9f Y2xlYW5bcGFydGl0aW9uXSA+PSBzdHJhdGVneV9idWZfaWQpCisJCQl7CisJCQkJLyogb24g c2FtZSBwYXNzLCBidXQgYWhlYWQgb3IgYXQgbGVhc3Qgbm90IGJlaGluZCAqLworCQkJCWJ1 ZnNfdG9fbGFwID0gbnVtX2J1ZmZlcnMgLSAobmV4dF90b19jbGVhbltwYXJ0aXRpb25dIC0g c3RyYXRlZ3lfYnVmX2lkKTsKKyNpZmRlZiBCR1dfREVCVUcKKwkJCQllbG9nKERFQlVHMiwg ImJnd3JpdGVyIGFoZWFkOiBiZ3cgJXUtJXUgc3RyYXRlZ3kgJXUtJXUgZGVsdGE9JWxkIGxh cD0lZCIsCisJCQkJCSBuZXh0X3Bhc3NlcywgbmV4dF90b19jbGVhbiwKKwkJCQkJIHN0cmF0 ZWd5X3Bhc3Nlcywgc3RyYXRlZ3lfYnVmX2lkLAorCQkJCQkgc3RyYXRlZ3lfZGVsdGEsIGJ1 ZnNfdG9fbGFwKTsKKyNlbmRpZgorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJ ICogV2UncmUgYmVoaW5kLCBzbyBza2lwIGZvcndhcmQgdG8gdGhlIHN0cmF0ZWd5IHBvaW50 IGFuZAorCQkJCSAqIHN0YXJ0IGNsZWFuaW5nIGZyb20gdGhlcmUuCisJCQkJICovCiAjaWZk ZWYgQkdXX0RFQlVHCi0JCQllbG9nKERFQlVHMiwgImJnd3JpdGVyIGFoZWFkOiBiZ3cgJXUt JXUgc3RyYXRlZ3kgJXUtJXUgZGVsdGE9JWxkIGxhcD0lZCIsCi0JCQkJIG5leHRfcGFzc2Vz LCBuZXh0X3RvX2NsZWFuLAotCQkJCSBzdHJhdGVneV9wYXNzZXMsIHN0cmF0ZWd5X2J1Zl9p ZCwKLQkJCQkgc3RyYXRlZ3lfZGVsdGEsIGJ1ZnNfdG9fbGFwKTsKKwkJCQllbG9nKERFQlVH MiwgImJnd3JpdGVyIGJlaGluZDogYmd3ICV1LSV1IHN0cmF0ZWd5ICV1LSV1IGRlbHRhPSVs ZCIsCisJCQkJCSBuZXh0X3Bhc3NlcywgbmV4dF90b19jbGVhbiwKKwkJCQkJIHN0cmF0ZWd5 X3Bhc3Nlcywgc3RyYXRlZ3lfYnVmX2lkLAorCQkJCQkgc3RyYXRlZ3lfZGVsdGEpOwogI2Vu ZGlmCisJCQkJbmV4dF90b19jbGVhbltwYXJ0aXRpb25dID0gc3RyYXRlZ3lfYnVmX2lkOwor CQkJCW5leHRfcGFzc2VzW3BhcnRpdGlvbl0gPSBzdHJhdGVneV9wYXNzZXM7CisJCQkJYnVm c190b19sYXAgPSBudW1fYnVmZmVyczsKKwkJCX0KIAkJfQogCQllbHNlCiAJCXsKIAkJCS8q Ci0JCQkgKiBXZSdyZSBiZWhpbmQsIHNvIHNraXAgZm9yd2FyZCB0byB0aGUgc3RyYXRlZ3kg cG9pbnQgYW5kIHN0YXJ0Ci0JCQkgKiBjbGVhbmluZyBmcm9tIHRoZXJlLgorCQkJICogSW5p dGlhbGl6aW5nIGF0IHN0YXJ0dXAgb3IgYWZ0ZXIgTFJVIHNjYW5uaW5nIGhhZCBiZWVuIG9m Zi4KKwkJCSAqIEFsd2F5cyBzdGFydCBhdCB0aGUgc3RyYXRlZ3kgcG9pbnQuCiAJCQkgKi8K ICNpZmRlZiBCR1dfREVCVUcKLQkJCWVsb2coREVCVUcyLCAiYmd3cml0ZXIgYmVoaW5kOiBi Z3cgJXUtJXUgc3RyYXRlZ3kgJXUtJXUgZGVsdGE9JWxkIiwKLQkJCQkgbmV4dF9wYXNzZXMs IG5leHRfdG9fY2xlYW4sCi0JCQkJIHN0cmF0ZWd5X3Bhc3Nlcywgc3RyYXRlZ3lfYnVmX2lk LAotCQkJCSBzdHJhdGVneV9kZWx0YSk7CisJCQllbG9nKERFQlVHMiwgImJnd3JpdGVyIGlu aXRpYWxpemluZzogc3RyYXRlZ3kgJXUtJXUiLAorCQkJCSBzdHJhdGVneV9wYXNzZXMsIHN0 cmF0ZWd5X2J1Zl9pZCk7CiAjZW5kaWYKLQkJCW5leHRfdG9fY2xlYW4gPSBzdHJhdGVneV9i dWZfaWQ7Ci0JCQluZXh0X3Bhc3NlcyA9IHN0cmF0ZWd5X3Bhc3NlczsKLQkJCWJ1ZnNfdG9f bGFwID0gTkJ1ZmZlcnM7CisJCQlzdHJhdGVneV9kZWx0YSA9IDA7CisJCQluZXh0X3RvX2Ns ZWFuW3BhcnRpdGlvbl0gPSBzdHJhdGVneV9idWZfaWQ7CisJCQluZXh0X3Bhc3Nlc1twYXJ0 aXRpb25dID0gc3RyYXRlZ3lfcGFzc2VzOworCQkJYnVmc190b19sYXAgPSBudW1fYnVmZmVy czsKIAkJfQotCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBJbml0aWFsaXppbmcgYXQgc3Rh cnR1cCBvciBhZnRlciBMUlUgc2Nhbm5pbmcgaGFkIGJlZW4gb2ZmLiBBbHdheXMKLQkJICog c3RhcnQgYXQgdGhlIHN0cmF0ZWd5IHBvaW50LgotCQkgKi8KLSNpZmRlZiBCR1dfREVCVUcK LQkJZWxvZyhERUJVRzIsICJiZ3dyaXRlciBpbml0aWFsaXppbmc6IHN0cmF0ZWd5ICV1LSV1 IiwKLQkJCSBzdHJhdGVneV9wYXNzZXMsIHN0cmF0ZWd5X2J1Zl9pZCk7Ci0jZW5kaWYKLQkJ c3RyYXRlZ3lfZGVsdGEgPSAwOwotCQluZXh0X3RvX2NsZWFuID0gc3RyYXRlZ3lfYnVmX2lk OwotCQluZXh0X3Bhc3NlcyA9IHN0cmF0ZWd5X3Bhc3NlczsKLQkJYnVmc190b19sYXAgPSBO QnVmZmVyczsKLQl9CiAKLQkvKiBVcGRhdGUgc2F2ZWQgaW5mbyBmb3IgbmV4dCB0aW1lICov Ci0JcHJldl9zdHJhdGVneV9idWZfaWQgPSBzdHJhdGVneV9idWZfaWQ7Ci0JcHJldl9zdHJh dGVneV9wYXNzZXMgPSBzdHJhdGVneV9wYXNzZXM7Ci0Jc2F2ZWRfaW5mb192YWxpZCA9IHRy dWU7CisJCS8qIFVwZGF0ZSBzYXZlZCBpbmZvIGZvciBuZXh0IHRpbWUgKi8KKwkJcHJldl9z dHJhdGVneV9idWZfaWRbcGFydGl0aW9uXSA9IHN0cmF0ZWd5X2J1Zl9pZDsKKwkJcHJldl9z dHJhdGVneV9wYXNzZXNbcGFydGl0aW9uXSA9IHN0cmF0ZWd5X3Bhc3NlczsKKwkJLyogRklY TUUgaGFzIHRvIGhhcHBlbiBhZnRlciBhbGwgcGFydGl0aW9ucyAqLworCQkvKiBzYXZlZF9p bmZvX3ZhbGlkID0gdHJ1ZTsgKi8KIAotCS8qCi0JICogQ29tcHV0ZSBob3cgbWFueSBidWZm ZXJzIGhhZCB0byBiZSBzY2FubmVkIGZvciBlYWNoIG5ldyBhbGxvY2F0aW9uLCBpZSwKLQkg KiAxL2RlbnNpdHkgb2YgcmV1c2FibGUgYnVmZmVycywgYW5kIHRyYWNrIGEgbW92aW5nIGF2 ZXJhZ2Ugb2YgdGhhdC4KLQkgKgotCSAqIElmIHRoZSBzdHJhdGVneSBwb2ludCBkaWRuJ3Qg bW92ZSwgd2UgZG9uJ3QgdXBkYXRlIHRoZSBkZW5zaXR5IGVzdGltYXRlCi0JICovCi0JaWYg KHN0cmF0ZWd5X2RlbHRhID4gMCAmJiByZWNlbnRfYWxsb2MgPiAwKQotCXsKLQkJc2NhbnNf cGVyX2FsbG9jID0gKGZsb2F0KSBzdHJhdGVneV9kZWx0YSAvIChmbG9hdCkgcmVjZW50X2Fs bG9jOwotCQlzbW9vdGhlZF9kZW5zaXR5ICs9IChzY2Fuc19wZXJfYWxsb2MgLSBzbW9vdGhl ZF9kZW5zaXR5KSAvCi0JCQlzbW9vdGhpbmdfc2FtcGxlczsKLQl9CisJCS8qCisJCSAqIENv bXB1dGUgaG93IG1hbnkgYnVmZmVycyBoYWQgdG8gYmUgc2Nhbm5lZCBmb3IgZWFjaCBuZXcg YWxsb2NhdGlvbiwKKwkJICogaWUsIDEvZGVuc2l0eSBvZiByZXVzYWJsZSBidWZmZXJzLCBh bmQgdHJhY2sgYSBtb3ZpbmcgYXZlcmFnZSBvZgorCQkgKiB0aGF0LgorCQkgKgorCQkgKiBJ ZiB0aGUgc3RyYXRlZ3kgcG9pbnQgZGlkbid0IG1vdmUsIHdlIGRvbid0IHVwZGF0ZSB0aGUg ZGVuc2l0eQorCQkgKiBlc3RpbWF0ZQorCQkgKi8KKwkJaWYgKHN0cmF0ZWd5X2RlbHRhID4g MCAmJiByZWNlbnRfYWxsb2NfcGFydGl0aW9uID4gMCkKKwkJeworCQkJc2NhbnNfcGVyX2Fs bG9jID0gKGZsb2F0KSBzdHJhdGVneV9kZWx0YSAvIChmbG9hdCkgcmVjZW50X2FsbG9jX3Bh cnRpdGlvbjsKKwkJCXNtb290aGVkX2RlbnNpdHkgKz0gKHNjYW5zX3Blcl9hbGxvYyAtIHNt b290aGVkX2RlbnNpdHkpIC8KKwkJCQlzbW9vdGhpbmdfc2FtcGxlczsKKwkJfQogCi0JLyoK LQkgKiBFc3RpbWF0ZSBob3cgbWFueSByZXVzYWJsZSBidWZmZXJzIHRoZXJlIGFyZSBiZXR3 ZWVuIHRoZSBjdXJyZW50Ci0JICogc3RyYXRlZ3kgcG9pbnQgYW5kIHdoZXJlIHdlJ3ZlIHNj YW5uZWQgYWhlYWQgdG8sIGJhc2VkIG9uIHRoZSBzbW9vdGhlZAotCSAqIGRlbnNpdHkgZXN0 aW1hdGUuCi0JICovCi0JYnVmc19haGVhZCA9IE5CdWZmZXJzIC0gYnVmc190b19sYXA7Ci0J cmV1c2FibGVfYnVmZmVyc19lc3QgPSAoZmxvYXQpIGJ1ZnNfYWhlYWQgLyBzbW9vdGhlZF9k ZW5zaXR5OworCQkvKgorCQkgKiBFc3RpbWF0ZSBob3cgbWFueSByZXVzYWJsZSBidWZmZXJz IHRoZXJlIGFyZSBiZXR3ZWVuIHRoZSBjdXJyZW50CisJCSAqIHN0cmF0ZWd5IHBvaW50IGFu ZCB3aGVyZSB3ZSd2ZSBzY2FubmVkIGFoZWFkIHRvLCBiYXNlZCBvbiB0aGUKKwkJICogc21v b3RoZWQgZGVuc2l0eSBlc3RpbWF0ZS4KKwkJICovCisJCWJ1ZnNfYWhlYWQgPSBudW1fYnVm ZmVycyAtIGJ1ZnNfdG9fbGFwOworCQlyZXVzYWJsZV9idWZmZXJzX2VzdCA9IChmbG9hdCkg YnVmc19haGVhZCAvIHNtb290aGVkX2RlbnNpdHk7CiAKLQkvKgotCSAqIFRyYWNrIGEgbW92 aW5nIGF2ZXJhZ2Ugb2YgcmVjZW50IGJ1ZmZlciBhbGxvY2F0aW9ucy4gIEhlcmUsIHJhdGhl ciB0aGFuCi0JICogYSB0cnVlIGF2ZXJhZ2Ugd2Ugd2FudCBhIGZhc3QtYXR0YWNrLCBzbG93 LWRlY2xpbmUgYmVoYXZpb3I6IHdlCi0JICogaW1tZWRpYXRlbHkgZm9sbG93IGFueSBpbmNy ZWFzZS4KLQkgKi8KLQlpZiAoc21vb3RoZWRfYWxsb2MgPD0gKGZsb2F0KSByZWNlbnRfYWxs b2MpCi0JCXNtb290aGVkX2FsbG9jID0gcmVjZW50X2FsbG9jOwotCWVsc2UKLQkJc21vb3Ro ZWRfYWxsb2MgKz0gKChmbG9hdCkgcmVjZW50X2FsbG9jIC0gc21vb3RoZWRfYWxsb2MpIC8K LQkJCXNtb290aGluZ19zYW1wbGVzOworCQkvKgorCQkgKiBUcmFjayBhIG1vdmluZyBhdmVy YWdlIG9mIHJlY2VudCBidWZmZXIgYWxsb2NhdGlvbnMuICBIZXJlLCByYXRoZXIKKwkJICog dGhhbiBhIHRydWUgYXZlcmFnZSB3ZSB3YW50IGEgZmFzdC1hdHRhY2ssIHNsb3ctZGVjbGlu ZSBiZWhhdmlvcjoKKwkJICogd2UgaW1tZWRpYXRlbHkgZm9sbG93IGFueSBpbmNyZWFzZS4K KwkJICovCisJCWlmIChzbW9vdGhlZF9hbGxvYyA8PSAoZmxvYXQpIHJlY2VudF9hbGxvY19w YXJ0aXRpb24pCisJCQlzbW9vdGhlZF9hbGxvYyA9IHJlY2VudF9hbGxvY19wYXJ0aXRpb247 CisJCWVsc2UKKwkJCXNtb290aGVkX2FsbG9jICs9ICgoZmxvYXQpIHJlY2VudF9hbGxvY19w YXJ0aXRpb24gLSBzbW9vdGhlZF9hbGxvYykgLworCQkJCXNtb290aGluZ19zYW1wbGVzOwog Ci0JLyogU2NhbGUgdGhlIGVzdGltYXRlIGJ5IGEgR1VDIHRvIGFsbG93IG1vcmUgYWdncmVz c2l2ZSB0dW5pbmcuICovCi0JdXBjb21pbmdfYWxsb2NfZXN0ID0gKGludCkgKHNtb290aGVk X2FsbG9jICogYmd3cml0ZXJfbHJ1X211bHRpcGxpZXIpOworCQkvKiBTY2FsZSB0aGUgZXN0 aW1hdGUgYnkgYSBHVUMgdG8gYWxsb3cgbW9yZSBhZ2dyZXNzaXZlIHR1bmluZy4gKi8KKwkJ dXBjb21pbmdfYWxsb2NfZXN0ID0gKGludCkgKHNtb290aGVkX2FsbG9jICogYmd3cml0ZXJf bHJ1X211bHRpcGxpZXIpOwogCi0JLyoKLQkgKiBJZiByZWNlbnRfYWxsb2MgcmVtYWlucyBh dCB6ZXJvIGZvciBtYW55IGN5Y2xlcywgc21vb3RoZWRfYWxsb2Mgd2lsbAotCSAqIGV2ZW50 dWFsbHkgdW5kZXJmbG93IHRvIHplcm8sIGFuZCB0aGUgdW5kZXJmbG93cyBwcm9kdWNlIGFu bm95aW5nCi0JICoga2VybmVsIHdhcm5pbmdzIG9uIHNvbWUgcGxhdGZvcm1zLiAgT25jZSB1 cGNvbWluZ19hbGxvY19lc3QgaGFzIGdvbmUgdG8KLQkgKiB6ZXJvLCB0aGVyZSdzIG5vIHBv aW50IGluIHRyYWNraW5nIHNtYWxsZXIgYW5kIHNtYWxsZXIgdmFsdWVzIG9mCi0JICogc21v b3RoZWRfYWxsb2MsIHNvIGp1c3QgcmVzZXQgaXQgdG8gZXhhY3RseSB6ZXJvIHRvIGF2b2lk IHRoaXMKLQkgKiBzeW5kcm9tZS4gIEl0IHdpbGwgcG9wIGJhY2sgdXAgYXMgc29vbiBhcyBy ZWNlbnRfYWxsb2MgaW5jcmVhc2VzLgotCSAqLwotCWlmICh1cGNvbWluZ19hbGxvY19lc3Qg PT0gMCkKLQkJc21vb3RoZWRfYWxsb2MgPSAwOworCQkvKgorCQkgKiBJZiByZWNlbnRfYWxs b2MgcmVtYWlucyBhdCB6ZXJvIGZvciBtYW55IGN5Y2xlcywgc21vb3RoZWRfYWxsb2MKKwkJ ICogd2lsbCBldmVudHVhbGx5IHVuZGVyZmxvdyB0byB6ZXJvLCBhbmQgdGhlIHVuZGVyZmxv d3MgcHJvZHVjZQorCQkgKiBhbm5veWluZyBrZXJuZWwgd2FybmluZ3Mgb24gc29tZSBwbGF0 Zm9ybXMuICBPbmNlCisJCSAqIHVwY29taW5nX2FsbG9jX2VzdCBoYXMgZ29uZSB0byB6ZXJv LCB0aGVyZSdzIG5vIHBvaW50IGluIHRyYWNraW5nCisJCSAqIHNtYWxsZXIgYW5kIHNtYWxs ZXIgdmFsdWVzIG9mIHNtb290aGVkX2FsbG9jLCBzbyBqdXN0IHJlc2V0IGl0IHRvCisJCSAq IGV4YWN0bHkgemVybyB0byBhdm9pZCB0aGlzIHN5bmRyb21lLiAgSXQgd2lsbCBwb3AgYmFj ayB1cCBhcyBzb29uCisJCSAqIGFzIHJlY2VudF9hbGxvYyBpbmNyZWFzZXMuCisJCSAqLwor CQlpZiAodXBjb21pbmdfYWxsb2NfZXN0ID09IDApCisJCQlzbW9vdGhlZF9hbGxvYyA9IDA7 CiAKLQkvKgotCSAqIEV2ZW4gaW4gY2FzZXMgd2hlcmUgdGhlcmUncyBiZWVuIGxpdHRsZSBv ciBubyBidWZmZXIgYWxsb2NhdGlvbgotCSAqIGFjdGl2aXR5LCB3ZSB3YW50IHRvIG1ha2Ug YSBzbWFsbCBhbW91bnQgb2YgcHJvZ3Jlc3MgdGhyb3VnaCB0aGUgYnVmZmVyCi0JICogY2Fj aGUgc28gdGhhdCBhcyBtYW55IHJldXNhYmxlIGJ1ZmZlcnMgYXMgcG9zc2libGUgYXJlIGNs ZWFuIGFmdGVyIGFuCi0JICogaWRsZSBwZXJpb2QuCi0JICoKLQkgKiAoc2Nhbl93aG9sZV9w b29sX21pbGxpc2Vjb25kcyAvIEJnV3JpdGVyRGVsYXkpIGNvbXB1dGVzIGhvdyBtYW55IHRp bWVzCi0JICogdGhlIEJHVyB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgdGhlIHNjYW5fd2hvbGVf cG9vbCB0aW1lOyBzbGljZSB0aGUKLQkgKiBidWZmZXIgcG9vbCBpbnRvIHRoYXQgbWFueSBz ZWN0aW9ucy4KLQkgKi8KLQltaW5fc2Nhbl9idWZmZXJzID0gKGludCkgKE5CdWZmZXJzIC8g KHNjYW5fd2hvbGVfcG9vbF9taWxsaXNlY29uZHMgLyBCZ1dyaXRlckRlbGF5KSk7CisJCS8q CisJCSAqIEV2ZW4gaW4gY2FzZXMgd2hlcmUgdGhlcmUncyBiZWVuIGxpdHRsZSBvciBubyBi dWZmZXIgYWxsb2NhdGlvbgorCQkgKiBhY3Rpdml0eSwgd2Ugd2FudCB0byBtYWtlIGEgc21h bGwgYW1vdW50IG9mIHByb2dyZXNzIHRocm91Z2ggdGhlCisJCSAqIGJ1ZmZlciBjYWNoZSBz byB0aGF0IGFzIG1hbnkgcmV1c2FibGUgYnVmZmVycyBhcyBwb3NzaWJsZSBhcmUgY2xlYW4K KwkJICogYWZ0ZXIgYW4gaWRsZSBwZXJpb2QuCisJCSAqCisJCSAqIChzY2FuX3dob2xlX3Bv b2xfbWlsbGlzZWNvbmRzIC8gQmdXcml0ZXJEZWxheSkgY29tcHV0ZXMgaG93IG1hbnkKKwkJ ICogdGltZXMgdGhlIEJHVyB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgdGhlIHNjYW5fd2hvbGVf cG9vbCB0aW1lOyBzbGljZQorCQkgKiB0aGUgYnVmZmVyIHBvb2wgaW50byB0aGF0IG1hbnkg c2VjdGlvbnMuCisJCSAqLworCQltaW5fc2Nhbl9idWZmZXJzID0gKGludCkgKG51bV9idWZm ZXJzIC8gKHNjYW5fd2hvbGVfcG9vbF9taWxsaXNlY29uZHMgLyBCZ1dyaXRlckRlbGF5KSk7 CiAKLQlpZiAodXBjb21pbmdfYWxsb2NfZXN0IDwgKG1pbl9zY2FuX2J1ZmZlcnMgKyByZXVz YWJsZV9idWZmZXJzX2VzdCkpCi0JeworCQlpZiAodXBjb21pbmdfYWxsb2NfZXN0IDwgKG1p bl9zY2FuX2J1ZmZlcnMgKyByZXVzYWJsZV9idWZmZXJzX2VzdCkpCisJCXsKICNpZmRlZiBC R1dfREVCVUcKLQkJZWxvZyhERUJVRzIsICJiZ3dyaXRlcjogYWxsb2NfZXN0PSVkIHRvbyBz bWFsbCwgdXNpbmcgbWluPSVkICsgcmV1c2FibGVfZXN0PSVkIiwKLQkJCSB1cGNvbWluZ19h bGxvY19lc3QsIG1pbl9zY2FuX2J1ZmZlcnMsIHJldXNhYmxlX2J1ZmZlcnNfZXN0KTsKKwkJ CWVsb2coREVCVUcyLCAiYmd3cml0ZXI6IGFsbG9jX2VzdD0lZCB0b28gc21hbGwsIHVzaW5n IG1pbj0lZCArIHJldXNhYmxlX2VzdD0lZCIsCisJCQkJIHVwY29taW5nX2FsbG9jX2VzdCwg bWluX3NjYW5fYnVmZmVycywgcmV1c2FibGVfYnVmZmVyc19lc3QpOwogI2VuZGlmCi0JCXVw Y29taW5nX2FsbG9jX2VzdCA9IG1pbl9zY2FuX2J1ZmZlcnMgKyByZXVzYWJsZV9idWZmZXJz X2VzdDsKLQl9Ci0KLQkvKgotCSAqIE5vdyB3cml0ZSBvdXQgZGlydHkgcmV1c2FibGUgYnVm ZmVycywgd29ya2luZyBmb3J3YXJkIGZyb20gdGhlCi0JICogbmV4dF90b19jbGVhbiBwb2lu dCwgdW50aWwgd2UgaGF2ZSBsYXBwZWQgdGhlIHN0cmF0ZWd5IHNjYW4sIG9yIGNsZWFuZWQK LQkgKiBlbm91Z2ggYnVmZmVycyB0byBtYXRjaCBvdXIgZXN0aW1hdGUgb2YgdGhlIG5leHQg Y3ljbGUncyBhbGxvY2F0aW9uCi0JICogcmVxdWlyZW1lbnRzLCBvciBoaXQgdGhlIGJnd3Jp dGVyX2xydV9tYXhwYWdlcyBsaW1pdC4KLQkgKi8KKwkJCXVwY29taW5nX2FsbG9jX2VzdCA9 IG1pbl9zY2FuX2J1ZmZlcnMgKyByZXVzYWJsZV9idWZmZXJzX2VzdDsKKwkJfQogCi0JbnVt X3RvX3NjYW4gPSBidWZzX3RvX2xhcDsKLQludW1fd3JpdHRlbiA9IDA7Ci0JcmV1c2FibGVf YnVmZmVycyA9IHJldXNhYmxlX2J1ZmZlcnNfZXN0OworCQkvKgorCQkgKiBOb3cgd3JpdGUg b3V0IGRpcnR5IHJldXNhYmxlIGJ1ZmZlcnMsIHdvcmtpbmcgZm9yd2FyZCBmcm9tIHRoZQor CQkgKiBuZXh0X3RvX2NsZWFuIHBvaW50LCB1bnRpbCB3ZSBoYXZlIGxhcHBlZCB0aGUgc3Ry YXRlZ3kgc2Nhbiwgb3IKKwkJICogY2xlYW5lZCBlbm91Z2ggYnVmZmVycyB0byBtYXRjaCBv dXIgZXN0aW1hdGUgb2YgdGhlIG5leHQgY3ljbGUncworCQkgKiBhbGxvY2F0aW9uIHJlcXVp cmVtZW50cywgb3IgaGl0IHRoZSBiZ3dyaXRlcl9scnVfbWF4cGFnZXMgbGltaXQuCisJCSAq LwogCi0JLyogRXhlY3V0ZSB0aGUgTFJVIHNjYW4gKi8KLQl3aGlsZSAobnVtX3RvX3NjYW4g PiAwICYmIHJldXNhYmxlX2J1ZmZlcnMgPCB1cGNvbWluZ19hbGxvY19lc3QpCi0JewotCQlp bnQJCQlzeW5jX3N0YXRlID0gU3luY09uZUJ1ZmZlcihuZXh0X3RvX2NsZWFuLCB0cnVlLAot CQkJCQkJCQkJCQkgICB3Yl9jb250ZXh0KTsKKwkJbnVtX3RvX3NjYW4gPSBidWZzX3RvX2xh cDsKKwkJbnVtX3dyaXR0ZW4gPSAwOworCQlyZXVzYWJsZV9idWZmZXJzID0gcmV1c2FibGVf YnVmZmVyc19lc3Q7CiAKLQkJaWYgKCsrbmV4dF90b19jbGVhbiA+PSBOQnVmZmVycykKKwkJ LyogRXhlY3V0ZSB0aGUgTFJVIHNjYW4gKi8KKwkJd2hpbGUgKG51bV90b19zY2FuID4gMCAm JiByZXVzYWJsZV9idWZmZXJzIDwgdXBjb21pbmdfYWxsb2NfZXN0KQogCQl7Ci0JCQluZXh0 X3RvX2NsZWFuID0gMDsKLQkJCW5leHRfcGFzc2VzKys7Ci0JCX0KLQkJbnVtX3RvX3NjYW4t LTsKKwkJCWludAkJCXN5bmNfc3RhdGUgPSBTeW5jT25lQnVmZmVyKG5leHRfdG9fY2xlYW5b cGFydGl0aW9uXSwgdHJ1ZSwKKwkJCQkJCQkJCQkJCSAgIHdiX2NvbnRleHQpOwogCi0JCWlm IChzeW5jX3N0YXRlICYgQlVGX1dSSVRURU4pCi0JCXsKLQkJCXJldXNhYmxlX2J1ZmZlcnMr KzsKLQkJCWlmICgrK251bV93cml0dGVuID49IGJnd3JpdGVyX2xydV9tYXhwYWdlcykKKwkJ CWlmICgrK25leHRfdG9fY2xlYW5bcGFydGl0aW9uXSA+PSAoZmlyc3RfYnVmZmVyICsgbnVt X2J1ZmZlcnMpKQogCQkJewotCQkJCVBlbmRpbmdCZ1dyaXRlclN0YXRzLm1heHdyaXR0ZW5f Y2xlYW4rKzsKLQkJCQlicmVhazsKKwkJCQluZXh0X3RvX2NsZWFuW3BhcnRpdGlvbl0gPSBm aXJzdF9idWZmZXI7CisJCQkJbmV4dF9wYXNzZXNbcGFydGl0aW9uXSsrOworCQkJfQorCQkJ bnVtX3RvX3NjYW4tLTsKKworCQkJaWYgKHN5bmNfc3RhdGUgJiBCVUZfV1JJVFRFTikKKwkJ CXsKKwkJCQlyZXVzYWJsZV9idWZmZXJzKys7CisJCQkJaWYgKCsrbnVtX3dyaXR0ZW4gPj0g KGJnd3JpdGVyX2xydV9tYXhwYWdlcyAvIG51bV9wYXJ0aXRpb25zKSkKKwkJCQl7CisJCQkJ CVBlbmRpbmdCZ1dyaXRlclN0YXRzLm1heHdyaXR0ZW5fY2xlYW4rKzsKKwkJCQkJYnJlYWs7 CisJCQkJfQogCQkJfQorCQkJZWxzZSBpZiAoc3luY19zdGF0ZSAmIEJVRl9SRVVTQUJMRSkK KwkJCQlyZXVzYWJsZV9idWZmZXJzKys7CiAJCX0KLQkJZWxzZSBpZiAoc3luY19zdGF0ZSAm IEJVRl9SRVVTQUJMRSkKLQkJCXJldXNhYmxlX2J1ZmZlcnMrKzsKLQl9CiAKLQlQZW5kaW5n QmdXcml0ZXJTdGF0cy5idWZfd3JpdHRlbl9jbGVhbiArPSBudW1fd3JpdHRlbjsKKwkJUGVu ZGluZ0JnV3JpdGVyU3RhdHMuYnVmX3dyaXR0ZW5fY2xlYW4gKz0gbnVtX3dyaXR0ZW47CiAK ICNpZmRlZiBCR1dfREVCVUcKLQllbG9nKERFQlVHMSwgImJnd3JpdGVyOiByZWNlbnRfYWxs b2M9JXUgc21vb3RoZWQ9JS4yZiBkZWx0YT0lbGQgYWhlYWQ9JWQgZGVuc2l0eT0lLjJmIHJl dXNhYmxlX2VzdD0lZCB1cGNvbWluZ19lc3Q9JWQgc2Nhbm5lZD0lZCB3cm90ZT0lZCByZXVz YWJsZT0lZCIsCi0JCSByZWNlbnRfYWxsb2MsIHNtb290aGVkX2FsbG9jLCBzdHJhdGVneV9k ZWx0YSwgYnVmc19haGVhZCwKLQkJIHNtb290aGVkX2RlbnNpdHksIHJldXNhYmxlX2J1ZmZl cnNfZXN0LCB1cGNvbWluZ19hbGxvY19lc3QsCi0JCSBidWZzX3RvX2xhcCAtIG51bV90b19z Y2FuLAotCQkgbnVtX3dyaXR0ZW4sCi0JCSByZXVzYWJsZV9idWZmZXJzIC0gcmV1c2FibGVf YnVmZmVyc19lc3QpOworCQllbG9nKERFQlVHMSwgImJnd3JpdGVyOiByZWNlbnRfYWxsb2M9 JXUgc21vb3RoZWQ9JS4yZiBkZWx0YT0lbGQgYWhlYWQ9JWQgZGVuc2l0eT0lLjJmIHJldXNh YmxlX2VzdD0lZCB1cGNvbWluZ19lc3Q9JWQgc2Nhbm5lZD0lZCB3cm90ZT0lZCByZXVzYWJs ZT0lZCIsCisJCQkgcmVjZW50X2FsbG9jX3BhcnRpdGlvbiwgc21vb3RoZWRfYWxsb2MsIHN0 cmF0ZWd5X2RlbHRhLCBidWZzX2FoZWFkLAorCQkJIHNtb290aGVkX2RlbnNpdHksIHJldXNh YmxlX2J1ZmZlcnNfZXN0LCB1cGNvbWluZ19hbGxvY19lc3QsCisJCQkgYnVmc190b19sYXAg LSBudW1fdG9fc2NhbiwKKwkJCSBudW1fd3JpdHRlbiwKKwkJCSByZXVzYWJsZV9idWZmZXJz IC0gcmV1c2FibGVfYnVmZmVyc19lc3QpOwogI2VuZGlmCiAKLQkvKgotCSAqIENvbnNpZGVy IHRoZSBhYm92ZSBzY2FuIGFzIGJlaW5nIGxpa2UgYSBuZXcgYWxsb2NhdGlvbiBzY2FuLgot CSAqIENoYXJhY3Rlcml6ZSBpdHMgZGVuc2l0eSBhbmQgdXBkYXRlIHRoZSBzbW9vdGhlZCBv bmUgYmFzZWQgb24gaXQuIFRoaXMKLQkgKiBlZmZlY3RpdmVseSBoYWx2ZXMgdGhlIG1vdmlu ZyBhdmVyYWdlIHBlcmlvZCBpbiBjYXNlcyB3aGVyZSBib3RoIHRoZQotCSAqIHN0cmF0ZWd5 IGFuZCB0aGUgYmFja2dyb3VuZCB3cml0ZXIgYXJlIGRvaW5nIHNvbWUgdXNlZnVsIHNjYW5u aW5nLAotCSAqIHdoaWNoIGlzIGhlbHBmdWwgYmVjYXVzZSBhIGxvbmcgbWVtb3J5IGlzbid0 IGFzIGRlc2lyYWJsZSBvbiB0aGUKLQkgKiBkZW5zaXR5IGVzdGltYXRlcy4KLQkgKi8KLQlu ZXdfc3RyYXRlZ3lfZGVsdGEgPSBidWZzX3RvX2xhcCAtIG51bV90b19zY2FuOwotCW5ld19y ZWNlbnRfYWxsb2MgPSByZXVzYWJsZV9idWZmZXJzIC0gcmV1c2FibGVfYnVmZmVyc19lc3Q7 Ci0JaWYgKG5ld19zdHJhdGVneV9kZWx0YSA+IDAgJiYgbmV3X3JlY2VudF9hbGxvYyA+IDAp Ci0JewotCQlzY2Fuc19wZXJfYWxsb2MgPSAoZmxvYXQpIG5ld19zdHJhdGVneV9kZWx0YSAv IChmbG9hdCkgbmV3X3JlY2VudF9hbGxvYzsKLQkJc21vb3RoZWRfZGVuc2l0eSArPSAoc2Nh bnNfcGVyX2FsbG9jIC0gc21vb3RoZWRfZGVuc2l0eSkgLwotCQkJc21vb3RoaW5nX3NhbXBs ZXM7CisJCS8qCisJCSAqIENvbnNpZGVyIHRoZSBhYm92ZSBzY2FuIGFzIGJlaW5nIGxpa2Ug YSBuZXcgYWxsb2NhdGlvbiBzY2FuLgorCQkgKiBDaGFyYWN0ZXJpemUgaXRzIGRlbnNpdHkg YW5kIHVwZGF0ZSB0aGUgc21vb3RoZWQgb25lIGJhc2VkIG9uIGl0LgorCQkgKiBUaGlzIGVm ZmVjdGl2ZWx5IGhhbHZlcyB0aGUgbW92aW5nIGF2ZXJhZ2UgcGVyaW9kIGluIGNhc2VzIHdo ZXJlCisJCSAqIGJvdGggdGhlIHN0cmF0ZWd5IGFuZCB0aGUgYmFja2dyb3VuZCB3cml0ZXIg YXJlIGRvaW5nIHNvbWUgdXNlZnVsCisJCSAqIHNjYW5uaW5nLCB3aGljaCBpcyBoZWxwZnVs IGJlY2F1c2UgYSBsb25nIG1lbW9yeSBpc24ndCBhcyBkZXNpcmFibGUKKwkJICogb24gdGhl IGRlbnNpdHkgZXN0aW1hdGVzLgorCQkgKi8KKwkJbmV3X3N0cmF0ZWd5X2RlbHRhID0gYnVm c190b19sYXAgLSBudW1fdG9fc2NhbjsKKwkJbmV3X3JlY2VudF9hbGxvYyA9IHJldXNhYmxl X2J1ZmZlcnMgLSByZXVzYWJsZV9idWZmZXJzX2VzdDsKKwkJaWYgKG5ld19zdHJhdGVneV9k ZWx0YSA+IDAgJiYgbmV3X3JlY2VudF9hbGxvYyA+IDApCisJCXsKKwkJCXNjYW5zX3Blcl9h bGxvYyA9IChmbG9hdCkgbmV3X3N0cmF0ZWd5X2RlbHRhIC8gKGZsb2F0KSBuZXdfcmVjZW50 X2FsbG9jOworCQkJc21vb3RoZWRfZGVuc2l0eSArPSAoc2NhbnNfcGVyX2FsbG9jIC0gc21v b3RoZWRfZGVuc2l0eSkgLworCQkJCXNtb290aGluZ19zYW1wbGVzOwogCiAjaWZkZWYgQkdX X0RFQlVHCi0JCWVsb2coREVCVUcyLCAiYmd3cml0ZXI6IGNsZWFuZXIgZGVuc2l0eSBhbGxv Yz0ldSBzY2FuPSVsZCBkZW5zaXR5PSUuMmYgbmV3IHNtb290aGVkPSUuMmYiLAotCQkJIG5l d19yZWNlbnRfYWxsb2MsIG5ld19zdHJhdGVneV9kZWx0YSwKLQkJCSBzY2Fuc19wZXJfYWxs b2MsIHNtb290aGVkX2RlbnNpdHkpOworCQkJZWxvZyhERUJVRzIsICJiZ3dyaXRlcjogY2xl YW5lciBkZW5zaXR5IGFsbG9jPSV1IHNjYW49JWxkIGRlbnNpdHk9JS4yZiBuZXcgc21vb3Ro ZWQ9JS4yZiIsCisJCQkJIG5ld19yZWNlbnRfYWxsb2MsIG5ld19zdHJhdGVneV9kZWx0YSwK KwkJCQkgc2NhbnNfcGVyX2FsbG9jLCBzbW9vdGhlZF9kZW5zaXR5KTsKICNlbmRpZgorCQl9 CisKKwkJLyogaGliZXJuYXRlIGlmIGFsbCBwYXJ0aXRpb25zIGNhbiBoaWJlcm5hdGUgKi8K KwkJaGliZXJuYXRlICY9IChidWZzX3RvX2xhcCA9PSAwICYmIHJlY2VudF9hbGxvY19wYXJ0 aXRpb24gPT0gMCk7CiAJfQogCisJLyogbm93IHRoYXQgd2UndmUgc2Nhbm5lZCBhbGwgcGFy dGl0aW9ucywgbWFyayB0aGUgY2FjaGVkIGluZm8gYXMgdmFsaWQgKi8KKwlzYXZlZF9pbmZv X3ZhbGlkID0gdHJ1ZTsKKwogCS8qIFJldHVybiB0cnVlIGlmIE9LIHRvIGhpYmVybmF0ZSAq LwotCXJldHVybiAoYnVmc190b19sYXAgPT0gMCAmJiByZWNlbnRfYWxsb2MgPT0gMCk7CisJ cmV0dXJuIGhpYmVybmF0ZTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9m cmVlbGlzdC5jCmluZGV4IDVhNjNkYWQ3ZjJjLi4xNzk4OGI0ZmQ1MyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCkBAIC01MiwxNyArNTIsMjcgQEAgdHlwZWRl ZiBzdHJ1Y3QgQnVmZmVyU3RyYXRlZ3lGcmVlbGlzdAogfQkJCUJ1ZmZlclN0cmF0ZWd5RnJl ZWxpc3Q7CiAKIC8qCi0gKiBUaGUgc2hhcmVkIGZyZWVsaXN0IGNvbnRyb2wgaW5mb3JtYXRp b24uCisgKiBJbmZvcm1hdGlvbiBhYm91dCBvbmUgcGFydGl0aW9uIG9mIHRoZSBDbG9ja1N3 ZWVwIChvbiBhIHN1YnNldCBvZiBidWZmZXJzKS4KKyAqCisgKiBYWFggU2hvdWxkIGJlIGNh cmVmdWwgdG8gYWxpZ24gdGhpcyB0byBjYWNoZWxpbmVzLCBldGMuCiAgKi8KIHR5cGVkZWYg c3RydWN0CiB7CiAJLyogU3BpbmxvY2s6IHByb3RlY3RzIHRoZSB2YWx1ZXMgYmVsb3cgKi8K LQlzbG9ja190CQlidWZmZXJfc3RyYXRlZ3lfbG9jazsKKwlzbG9ja190CQljbG9ja19zd2Vl cF9sb2NrOworCisJLyogcmFuZ2UgZm9yIHRoaXMgY2xvY2sgd2VlcCBwYXJ0aXRpb24gKi8K KwlpbnQzMgkJZmlyc3RCdWZmZXI7CisJaW50MzIJCW51bUJ1ZmZlcnM7CiAKIAkvKgogCSAq IENsb2NrIHN3ZWVwIGhhbmQ6IGluZGV4IG9mIG5leHQgYnVmZmVyIHRvIGNvbnNpZGVyIGdy YWJiaW5nLiBOb3RlIHRoYXQKIAkgKiB0aGlzIGlzbid0IGEgY29uY3JldGUgYnVmZmVyIC0g d2Ugb25seSBldmVyIGluY3JlYXNlIHRoZSB2YWx1ZS4gU28sIHRvCiAJICogZ2V0IGFuIGFj dHVhbCBidWZmZXIsIGl0IG5lZWRzIHRvIGJlIHVzZWQgbW9kdWxvIE5CdWZmZXJzLgorCSAq CisJICogWFhYIFRoaXMgaXMgcmVsYXRpdmUgdG8gZmlyc3RCdWZmZXIsIHNvIG5lZWRzIHRv IGJlIG9mZnNldCBwcm9wZXJseS4KKwkgKgorCSAqIFhYWCBmaXJzdEJ1ZmZlciArIChuZXh0 VmljdGltQnVmZmVyICUgbnVtQnVmZmVycykKIAkgKi8KIAlwZ19hdG9taWNfdWludDMyIG5l eHRWaWN0aW1CdWZmZXI7CiAKQEAgLTczLDYgKzgzLDE5IEBAIHR5cGVkZWYgc3RydWN0CiAJ dWludDMyCQljb21wbGV0ZVBhc3NlczsgLyogQ29tcGxldGUgY3ljbGVzIG9mIHRoZSBjbG9j ayBzd2VlcCAqLwogCXBnX2F0b21pY191aW50MzIgbnVtQnVmZmVyQWxsb2NzOwkvKiBCdWZm ZXJzIGFsbG9jYXRlZCBzaW5jZSBsYXN0IHJlc2V0ICovCiAKKwkvKiBydW5uaW5nIHRvdGFs IG9mIGFsbG9jcyAqLworCXBnX2F0b21pY191aW50NjQgbnVtVG90YWxBbGxvY3M7CisKK30g Q2xvY2tTd2VlcDsKKworLyoKKyAqIFRoZSBzaGFyZWQgZnJlZWxpc3QgY29udHJvbCBpbmZv cm1hdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwkvKiBTcGlubG9jazogcHJvdGVj dHMgdGhlIHZhbHVlcyBiZWxvdyAqLworCXNsb2NrX3QJCWJ1ZmZlcl9zdHJhdGVneV9sb2Nr OworCiAJLyoKIAkgKiBCZ3dvcmtlciBwcm9jZXNzIHRvIGJlIG5vdGlmaWVkIHVwb24gYWN0 aXZpdHkgb3IgLTEgaWYgbm9uZS4gU2VlCiAJICogU3RyYXRlZ3lOb3RpZnlCZ1dyaXRlci4K QEAgLTg4LDYgKzExMSw5IEBAIHR5cGVkZWYgc3RydWN0CiAJaW50CQkJbnVtX3BhcnRpdGlv bnM7CiAJaW50CQkJbnVtX3BhcnRpdGlvbnNfcGVyX25vZGU7CiAKKwkvKiBjbG9ja3N3ZWVw IHBhcnRpdGlvbnMgKi8KKwlDbG9ja1N3ZWVwICpzd2VlcHM7CisKIAlCdWZmZXJTdHJhdGVn eUZyZWVsaXN0IGZyZWVsaXN0c1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfSBCdWZmZXJT dHJhdGVneUNvbnRyb2w7CiAKQEAgLTEyNyw2ICsxNTMsNyBAQCBzdGF0aWMgQnVmZmVyRGVz YyAqR2V0QnVmZmVyRnJvbVJpbmcoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJ CQkJCQkJCQkgdWludDMyICpidWZfc3RhdGUpOwogc3RhdGljIHZvaWQgQWRkQnVmZmVyVG9S aW5nKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCUJ1ZmZlckRlc2Mg KmJ1Zik7CitzdGF0aWMgQ2xvY2tTd2VlcCAqQ2hvb3NlQ2xvY2tTd2VlcCh2b2lkKTsKIAog LyoKICAqIENsb2NrU3dlZXBUaWNrIC0gSGVscGVyIHJvdXRpbmUgZm9yIFN0cmF0ZWd5R2V0 QnVmZmVyKCkKQEAgLTEzOCw2ICsxNjUsNyBAQCBzdGF0aWMgaW5saW5lIHVpbnQzMgogQ2xv Y2tTd2VlcFRpY2sodm9pZCkKIHsKIAl1aW50MzIJCXZpY3RpbTsKKwlDbG9ja1N3ZWVwICpz d2VlcCA9IENob29zZUNsb2NrU3dlZXAoKTsKIAogCS8qCiAJICogQXRvbWljYWxseSBtb3Zl IGhhbmQgYWhlYWQgb25lIGJ1ZmZlciAtIGlmIHRoZXJlJ3Mgc2V2ZXJhbCBwcm9jZXNzZXMK QEAgLTE0NSwxNCArMTczLDE0IEBAIENsb2NrU3dlZXBUaWNrKHZvaWQpCiAJICogYXBwYXJl bnQgb3JkZXIuCiAJICovCiAJdmljdGltID0KLQkJcGdfYXRvbWljX2ZldGNoX2FkZF91MzIo JlN0cmF0ZWd5Q29udHJvbC0+bmV4dFZpY3RpbUJ1ZmZlciwgMSk7CisJCXBnX2F0b21pY19m ZXRjaF9hZGRfdTMyKCZzd2VlcC0+bmV4dFZpY3RpbUJ1ZmZlciwgMSk7CiAKLQlpZiAodmlj dGltID49IE5CdWZmZXJzKQorCWlmICh2aWN0aW0gPj0gc3dlZXAtPm51bUJ1ZmZlcnMpCiAJ ewogCQl1aW50MzIJCW9yaWdpbmFsVmljdGltID0gdmljdGltOwogCiAJCS8qIGFsd2F5cyB3 cmFwIHdoYXQgd2UgbG9vayB1cCBpbiBCdWZmZXJEZXNjcmlwdG9ycyAqLwotCQl2aWN0aW0g PSB2aWN0aW0gJSBOQnVmZmVyczsKKwkJdmljdGltID0gdmljdGltICUgc3dlZXAtPm51bUJ1 ZmZlcnM7CiAKIAkJLyoKIAkJICogSWYgd2UncmUgdGhlIG9uZSB0aGF0IGp1c3QgY2F1c2Vk IGEgd3JhcGFyb3VuZCwgZm9yY2UKQEAgLTE3OCwxOSArMjA2LDIzIEBAIENsb2NrU3dlZXBU aWNrKHZvaWQpCiAJCQkJICogY291bGQgbGVhZCB0byBhbiBvdmVyZmxvdyBvZiBuZXh0Vmlj dGltQnVmZmVycywgYnV0IHRoYXQncwogCQkJCSAqIGhpZ2hseSB1bmxpa2VseSBhbmQgd291 bGRuJ3QgYmUgcGFydGljdWxhcmx5IGhhcm1mdWwuCiAJCQkJICovCi0JCQkJU3BpbkxvY2tB Y3F1aXJlKCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsKKwkJCQlT cGluTG9ja0FjcXVpcmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKIAotCQkJCXdyYXBw ZWQgPSBleHBlY3RlZCAlIE5CdWZmZXJzOworCQkJCXdyYXBwZWQgPSBleHBlY3RlZCAlIHN3 ZWVwLT5udW1CdWZmZXJzOwogCi0JCQkJc3VjY2VzcyA9IHBnX2F0b21pY19jb21wYXJlX2V4 Y2hhbmdlX3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLAorCQkJCXN1 Y2Nlc3MgPSBwZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91MzIoJnN3ZWVwLT5uZXh0Vmlj dGltQnVmZmVyLAogCQkJCQkJCQkJCQkJCQkgJmV4cGVjdGVkLCB3cmFwcGVkKTsKIAkJCQlp ZiAoc3VjY2VzcykKLQkJCQkJU3RyYXRlZ3lDb250cm9sLT5jb21wbGV0ZVBhc3NlcysrOwot CQkJCVNwaW5Mb2NrUmVsZWFzZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lf bG9jayk7CisJCQkJCXN3ZWVwLT5jb21wbGV0ZVBhc3NlcysrOworCQkJCVNwaW5Mb2NrUmVs ZWFzZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOwogCQkJfQogCQl9CiAJfQotCXJldHVy biB2aWN0aW07CisKKwkvKiBYWFggYnVmZmVyIElEcyBhcmUgMS1iYXNlZCwgd2UncmUgY2Fs Y3VsYXRpbmcgMC1iYXNlZCBpbmRleGVzICovCisJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoMSAr IHN3ZWVwLT5maXJzdEJ1ZmZlciArICh2aWN0aW0gJSBzd2VlcC0+bnVtQnVmZmVycykpKTsK KworCXJldHVybiBzd2VlcC0+Zmlyc3RCdWZmZXIgKyB2aWN0aW07CiB9CiAKIHN0YXRpYyBp bnQKQEAgLTI0Nyw2ICsyNzksMjggQEAgY2FsY3VsYXRlX3BhcnRpdGlvbl9pbmRleCgpCiAJ cmV0dXJuIGluZGV4OwogfQogCisvKgorICogQ2hvb3NlQ2xvY2tTd2VlcAorICoJCXBpY2sg YSBjbG9ja3N3ZWVwIHBhcnRpdGlvbiBiYXNlZCBvbiBOVU1BIG5vZGUgYW5kIENQVQorICoK KyAqIFRoZSBudW1iZXIgb2YgY2xvY2tzd2VlcCBwYXJ0aXRpb25zIG1heSBub3QgbWF0Y2gg dGhlIG51bWJlciBvZiBOVU1BCisgKiBub2RlcywgYnV0IGl0IHNob3VsZCBub3QgYmUgbG93 ZXIuIEVhY2ggcGFydGl0aW9uIHNob3VsZCBiZSBtYXBwZWQgdG8KKyAqIGEgc2luZ2xlIE5V TUEgbm9kZSwgYnV0IGEgbm9kZSBtYXkgaGF2ZSBtdWx0aXBsZSBwYXJ0aXRpb25zLiBJZiB0 aGVyZQorICogYXJlIG11bHRpcGxlIHBhcnRpdGlvbnMgcGVyIG5vZGUgKGFsbCBub2RlcyBo YXZlIHRoZSBzYW1lIG51bWJlciBvZgorICogcGFydGl0aW9ucyksIHdlIHBpY2sgdGhlIHBh cnRpdGlvbiB1c2luZyBDUFUuCisgKgorICogWFhYIE1heWJlIHdlIHNob3VsZCBkbyBib3Ro IHRoZSB0b3RhbCBhbmQgInBlciBncm91cCIgY291bnRzIGEgcG93ZXIgb2YKKyAqIHR3bz8g VGhhdCdkIGFsbG93IHVzaW5nIHNoaWZ0cyBpbnN0ZWFkIG9mIGRpdmlzaW9ucyBpbiB0aGUg Y2FsY3VsYXRpb24sCisgKiBhbmQgdGhhdCdzIGNoZWFwZXIuIEJ1dCBob3cgd291bGQgdGhh dCBkZWFsIHdpdGggb2RkIG51bWJlciBvZiBub2Rlcz8KKyAqLworc3RhdGljIENsb2NrU3dl ZXAgKgorQ2hvb3NlQ2xvY2tTd2VlcCh2b2lkKQoreworCWludAkJCWluZGV4ID0gY2FsY3Vs YXRlX3BhcnRpdGlvbl9pbmRleCgpOworCisJcmV0dXJuICZTdHJhdGVneUNvbnRyb2wtPnN3 ZWVwc1tpbmRleF07Cit9CisKIC8qCiAgKiBDaG9vc2VGcmVlTGlzdAogICoJCVBpY2sgdGhl IGJ1ZmZlciBmcmVlbGlzdCB0byB1c2UsIGRlcGVuZGluZyBvbiB0aGUgQ1BVIGFuZCBOVU1B IG5vZGUuCkBAIC0zNjMsNyArNDE3LDcgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNj ZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IK IAkgKiB0aGUgcmF0ZSBvZiBidWZmZXIgY29uc3VtcHRpb24uICBOb3RlIHRoYXQgYnVmZmVy cyByZWN5Y2xlZCBieSBhCiAJICogc3RyYXRlZ3kgb2JqZWN0IGFyZSBpbnRlbnRpb25hbGx5 IG5vdCBjb3VudGVkIGhlcmUuCiAJICovCi0JcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJlN0 cmF0ZWd5Q29udHJvbC0+bnVtQnVmZmVyQWxsb2NzLCAxKTsKKwlwZ19hdG9taWNfZmV0Y2hf YWRkX3UzMigmQ2hvb3NlQ2xvY2tTd2VlcCgpLT5udW1CdWZmZXJBbGxvY3MsIDEpOwogCiAJ LyoKIAkgKiBGaXJzdCBjaGVjaywgd2l0aG91dCBhY3F1aXJpbmcgdGhlIGxvY2ssIHdoZXRo ZXIgdGhlcmUncyBidWZmZXJzIGluIHRoZQpAQCAtNDM0LDEzICs0ODgsMTcgQEAgU3RyYXRl Z3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVm X3N0YXRlLCBib29sICpmcm9tX3IKIAkvKgogCSAqIE5vdGhpbmcgb24gdGhlIGZyZWVsaXN0 LCBzbyBydW4gdGhlICJjbG9jayBzd2VlcCIgYWxnb3JpdGhtCiAJICoKLQkgKiBYWFggU2hv dWxkIHdlIGFsc28gbWFrZSB0aGlzIE5VTUEtYXdhcmUsIHRvIG9ubHkgYWNjZXNzIGJ1ZmZl cnMgZnJvbQotCSAqIHRoZSBzYW1lIE5VTUEgbm9kZT8gVGhhdCdkIHByb2JhYmx5IG1lYW4g d2UgbmVlZCB0byBtYWtlIHRoZSBjbG9jawotCSAqIHN3ZWVwIE5VTUEtYXdhcmUsIHBlcmhh cHMgYnkgaGF2aW5nIG11bHRpcGxlIGNsb2NrIHN3ZWVwcywgZWFjaCBmb3IgYQotCSAqIHN1 YnNldCBvZiBidWZmZXJzLiBCdXQgdGhhdCBhbHNvIG1lYW5zIGVhY2ggcHJvY2VzcyBjb3Vs ZCAic3dlZXAiIG9ubHkKLQkgKiBhIGZyYWN0aW9uIG9mIGJ1ZmZlcnMsIGV2ZW4gaWYgdGhl IG90aGVyIGJ1ZmZlcnMgYXJlIGJldHRlciBjYW5kaWRhdGVzCi0JICogZm9yIGV2aWN0aW9u LiBXb3VsZCB0aGF0IGFsc28gbWVhbiB3ZSdkIGhhdmUgbXVsdGlwbGUgYmd3cml0ZXJzLCBv bmUKLQkgKiBmb3IgZWFjaCBub2RlLCBvciB3b3VsZCBvbmUgYmd3cml0ZXIgaGFuZGxlIGFs bCBvZiB0aGF0PworCSAqIFhYWCBOb3RlIHRoYXQgQ2xvY2tTd2VlcFRpY2soKSBpcyBOVU1B LWF3YXJlLCBpLmUuIGl0IG9ubHkgbG9va3MgYXQKKwkgKiBidWZmZXJzIGZyb20gYSBzaW5n bGUgcGFydGl0aW9uLCBhbGlnbmVkIHdpdGggdGhlIE5VTUEgbm9kZS4gVGhhdCBtZWFucwor CSAqIGl0IG9ubHkgYWNjZXNzZXMgYnVmZmVycyBmcm9tIHRoZSBzYW1lIE5VTUEgbm9kZS4K KwkgKgorCSAqIFhYWCBUaGF0IGFsc28gbWVhbnMgZWFjaCBwcm9jZXNzICJzd2VlcHMiIG9u bHkgYSBmcmFjdGlvbiBvZiBidWZmZXJzLAorCSAqIGV2ZW4gaWYgdGhlIG90aGVyIGJ1ZmZl cnMgYXJlIGJldHRlciBjYW5kaWRhdGVzIGZvciBldmljdGlvbi4gTWF5YmUKKwkgKiB0aGVy ZSBzaG91bGQgYmUgc29tZSBsb2dpYyB0byAic3RlYWwiIGJ1ZmZlcnMgZnJvbSBvdGhlciBm cmVlbGlzdHMgb3IKKwkgKiBvdGhlciBub2Rlcz8KKwkgKgorCSAqIFhYWCBXb3VsZCB0aGF0 IGFsc28gbWVhbiB3ZSdkIGhhdmUgbXVsdGlwbGUgYmd3cml0ZXJzLCBvbmUgZm9yIGVhY2gK KwkgKiBub2RlLCBvciB3b3VsZCBvbmUgYmd3cml0ZXIgaGFuZGxlIGFsbCBvZiB0aGF0Pwog CSAqLwogCXRyeWNvdW50ZXIgPSBOQnVmZmVyczsKIAlmb3IgKDs7KQpAQCAtNTIyLDYgKzU4 MCw0NiBAQCBTdHJhdGVneUZyZWVCdWZmZXIoQnVmZmVyRGVzYyAqYnVmKQogCVNwaW5Mb2Nr UmVsZWFzZSgmZnJlZWxpc3QtPmZyZWVsaXN0X2xvY2spOwogfQogCisvKgorICogU3RyYXRl Z3lTeW5jU3RhcnQgLS0gcHJlcGFyZSBmb3Igc3luYyBvZiBhbGwgcGFydGl0aW9ucworICoK KyAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGNsb2Nrc3dlZXAgcGFydGl0aW9ucywgYW5k IGNhbGN1bGF0ZSB0aGUgcmVjZW50CisgKiBidWZmZXJzIGFsbG9jcyAoYXMgYSBzdW0gb2Yg YWxsIHRoZSBwYXJ0aXRpb25zKS4gVGhpcyBhbGxvd3MgQmdCdWZmZXJTeW5jCisgKiB0byBj YWxjdWxhdGUgYXZlcmFnZSBudW1iZXIgb2YgYWxsb2NhdGlvbnMgcGVyIHBhcnRpdGlvbiBm b3IgdGhlIG5leHQKKyAqIHN5bmMgY3ljbGUuCisgKgorICogSW4gYWRkaXRpb24gaXQgcmV0 dXJucyB0aGUgY291bnQgb2YgcmVjZW50IGJ1ZmZlciBhbGxvY3MsIHdoaWNoIGlzIGEgdG90 YWwKKyAqIHN1bW1lZCBmcm9tIGFsbCBwYXJ0aXRpb25zLiBUaGUgYWxsb2MgY291bnRzIGFy ZSByZXNldCBhZnRlciBiZWluZyByZWFkLAorICogYXMgdGhlIHBhcnRpdGlvbnMgYXJlIHdh bGtlZC4KKyAqLwordm9pZAorU3RyYXRlZ3lTeW5jUHJlcGFyZShpbnQgKm51bV9wYXJ0cywg dWludDMyICpudW1fYnVmX2FsbG9jKQoreworCSpudW1fYnVmX2FsbG9jID0gMDsKKwkqbnVt X3BhcnRzID0gU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsKKworCS8qCisJICog V2UgbG9jayB0aGUgcGFydGl0aW9ucyBvbmUgYnkgb25lLCBzbyBub3QgZXhhY2x5IGluIHN5 bmMsIGJ1dCB0aGF0CisJICogc2hvdWxkIGJlIGZpbmUuIFdlJ3JlIG9ubHkgbG9va2luZyBm b3IgaGV1cmlzdGljcyBhbnl3YXkuCisJICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBTdHJh dGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zOyBpKyspCisJeworCQlDbG9ja1N3ZWVwICpz d2VlcCA9ICZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXTsKKworCQlTcGluTG9ja0FjcXVp cmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsKKwkJaWYgKG51bV9idWZfYWxsb2MpCisJ CXsKKwkJCXVpbnQzMglhbGxvY3MgPSBwZ19hdG9taWNfZXhjaGFuZ2VfdTMyKCZzd2VlcC0+ bnVtQnVmZmVyQWxsb2NzLCAwKTsKKworCQkJLyogaW5jbHVkZSB0aGUgY291bnQgaW4gdGhl IHJ1bm5pbmcgdG90YWwgKi8KKwkJCXBnX2F0b21pY19mZXRjaF9hZGRfdTY0KCZzd2VlcC0+ bnVtVG90YWxBbGxvY3MsIGFsbG9jcyk7CisKKwkJCSpudW1fYnVmX2FsbG9jICs9IGFsbG9j czsKKwkJfQorCQlTcGluTG9ja1JlbGVhc2UoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsK Kwl9Cit9CisKIC8qCiAgKiBTdHJhdGVneVN5bmNTdGFydCAtLSB0ZWxsIEJnQnVmZmVyU3lu YyB3aGVyZSB0byBzdGFydCBzeW5jaW5nCiAgKgpAQCAtNTI5LDM3ICs2MjcsNDQgQEAgU3Ry YXRlZ3lGcmVlQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZikKICAqIEJnQnVmZmVyU3luYygpIHdp bGwgcHJvY2VlZCBjaXJjdWxhcmx5IGFyb3VuZCB0aGUgYnVmZmVyIGFycmF5IGZyb20gdGhl cmUuCiAgKgogICogSW4gYWRkaXRpb24sIHdlIHJldHVybiB0aGUgY29tcGxldGVkLXBhc3Mg Y291bnQgKHdoaWNoIGlzIGVmZmVjdGl2ZWx5Ci0gKiB0aGUgaGlnaGVyLW9yZGVyIGJpdHMg b2YgbmV4dFZpY3RpbUJ1ZmZlcikgYW5kIHRoZSBjb3VudCBvZiByZWNlbnQgYnVmZmVyCi0g KiBhbGxvY3MgaWYgbm9uLU5VTEwgcG9pbnRlcnMgYXJlIHBhc3NlZC4gIFRoZSBhbGxvYyBj b3VudCBpcyByZXNldCBhZnRlcgotICogYmVpbmcgcmVhZC4KKyAqIHRoZSBoaWdoZXItb3Jk ZXIgYml0cyBvZiBuZXh0VmljdGltQnVmZmVyKS4KKyAqCisgKiBUaGlzIG9ubHkgY29uc2lk ZXJzIGEgc2luZ2xlIGNsb2Nrc3dlZXAgcGFydGl0aW9uLCBhcyBCZ0J1ZmZlclN5bmMgbG9v a3MKKyAqIGF0IHRoZW0gb25lIGJ5IG9uZS4KICAqLwogaW50Ci1TdHJhdGVneVN5bmNTdGFy dCh1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywgdWludDMyICpudW1fYnVmX2FsbG9jKQorU3Ry YXRlZ3lTeW5jU3RhcnQoaW50IHBhcnRpdGlvbiwgdWludDMyICpjb21wbGV0ZV9wYXNzZXMs CisJCQkJICBpbnQgKmZpcnN0X2J1ZmZlciwgaW50ICpudW1fYnVmZmVycykKIHsKIAl1aW50 MzIJCW5leHRWaWN0aW1CdWZmZXI7CiAJaW50CQkJcmVzdWx0OworCUNsb2NrU3dlZXAgKnN3 ZWVwID0gJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW3BhcnRpdGlvbl07CiAKLQlTcGluTG9j a0FjcXVpcmUoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOwotCW5l eHRWaWN0aW1CdWZmZXIgPSBwZ19hdG9taWNfcmVhZF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+ bmV4dFZpY3RpbUJ1ZmZlcik7Ci0JcmVzdWx0ID0gbmV4dFZpY3RpbUJ1ZmZlciAlIE5CdWZm ZXJzOworCUFzc2VydCgocGFydGl0aW9uID49IDApICYmIChwYXJ0aXRpb24gPCBTdHJhdGVn eUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zKSk7CisKKwlTcGluTG9ja0FjcXVpcmUoJnN3ZWVw LT5jbG9ja19zd2VlcF9sb2NrKTsKKwluZXh0VmljdGltQnVmZmVyID0gcGdfYXRvbWljX3Jl YWRfdTMyKCZzd2VlcC0+bmV4dFZpY3RpbUJ1ZmZlcik7CisJcmVzdWx0ID0gbmV4dFZpY3Rp bUJ1ZmZlciAlIHN3ZWVwLT5udW1CdWZmZXJzOworCisJKmZpcnN0X2J1ZmZlciA9IHN3ZWVw LT5maXJzdEJ1ZmZlcjsKKwkqbnVtX2J1ZmZlcnMgPSBzd2VlcC0+bnVtQnVmZmVyczsKIAog CWlmIChjb21wbGV0ZV9wYXNzZXMpCiAJewotCQkqY29tcGxldGVfcGFzc2VzID0gU3RyYXRl Z3lDb250cm9sLT5jb21wbGV0ZVBhc3NlczsKKwkJKmNvbXBsZXRlX3Bhc3NlcyA9IHN3ZWVw LT5jb21wbGV0ZVBhc3NlczsKIAogCQkvKgogCQkgKiBBZGRpdGlvbmFsbHkgYWRkIHRoZSBu dW1iZXIgb2Ygd3JhcGFyb3VuZHMgdGhhdCBoYXBwZW5lZCBiZWZvcmUKIAkJICogY29tcGxl dGVQYXNzZXMgY291bGQgYmUgaW5jcmVtZW50ZWQuIEMuZi4gQ2xvY2tTd2VlcFRpY2soKS4K IAkJICovCi0JCSpjb21wbGV0ZV9wYXNzZXMgKz0gbmV4dFZpY3RpbUJ1ZmZlciAvIE5CdWZm ZXJzOworCQkqY29tcGxldGVfcGFzc2VzICs9IG5leHRWaWN0aW1CdWZmZXIgLyBzd2VlcC0+ bnVtQnVmZmVyczsKIAl9CisJU3BpbkxvY2tSZWxlYXNlKCZzd2VlcC0+Y2xvY2tfc3dlZXBf bG9jayk7CiAKLQlpZiAobnVtX2J1Zl9hbGxvYykKLQl7Ci0JCSpudW1fYnVmX2FsbG9jID0g cGdfYXRvbWljX2V4Y2hhbmdlX3UzMigmU3RyYXRlZ3lDb250cm9sLT5udW1CdWZmZXJBbGxv Y3MsIDApOwotCX0KLQlTcGluTG9ja1JlbGVhc2UoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVy X3N0cmF0ZWd5X2xvY2spOwotCXJldHVybiByZXN1bHQ7CisJLyogWFhYIGJ1ZmZlciBJRHMg c3RhcnQgYXQgMSwgd2UncmUgY2FsY3VsYXRpbmcgMC1iYXNlZCBpbmRleGVzICovCisJQXNz ZXJ0KEJ1ZmZlcklzVmFsaWQoMSArIHN3ZWVwLT5maXJzdEJ1ZmZlciArIHJlc3VsdCkpOwor CisJcmV0dXJuIHN3ZWVwLT5maXJzdEJ1ZmZlciArIHJlc3VsdDsKIH0KIAogLyoKQEAgLTY0 Nyw2ICs3NTIsMTAgQEAgU3RyYXRlZ3lTaG1lbVNpemUodm9pZCkKIAlzaXplID0gYWRkX3Np emUoc2l6ZSwgTUFYQUxJR04obXVsX3NpemUoc2l6ZW9mKEJ1ZmZlclN0cmF0ZWd5RnJlZWxp c3QpLAogCQkJCQkJCQkJCQludW1fcGFydGl0aW9ucykpKTsKIAorCS8qIHNpemUgb2YgY2xv Y2tzd2VlcCBwYXJ0aXRpb25zIChhdCBsZWFzdCBvbmUgcGVyIE5VTUEgbm9kZSkgKi8KKwlz aXplID0gYWRkX3NpemUoc2l6ZSwgTUFYQUxJR04obXVsX3NpemUoc2l6ZW9mKENsb2NrU3dl ZXApLAorCQkJCQkJCQkJCQludW1fcGFydGl0aW9ucykpKTsKKwogCXJldHVybiBzaXplOwog fQogCkBAIC02NjUsNiArNzc0LDcgQEAgU3RyYXRlZ3lJbml0aWFsaXplKGJvb2wgaW5pdCkK IAlpbnQJCQludW1fbm9kZXM7CiAJaW50CQkJbnVtX3BhcnRpdGlvbnM7CiAJaW50CQkJbnVt X3BhcnRpdGlvbnNfcGVyX25vZGU7CisJY2hhcgkgICAqcHRyOwogCiAJLyogKi8KIAlCdWZm ZXJQYXJ0aXRpb25QYXJhbXMoJm51bV9wYXJ0aXRpb25zLCAmbnVtX25vZGVzKTsKQEAgLTY5 Miw3ICs4MDIsOCBAQCBTdHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0KQogCVN0cmF0ZWd5 Q29udHJvbCA9IChCdWZmZXJTdHJhdGVneUNvbnRyb2wgKikKIAkJU2htZW1Jbml0U3RydWN0 KCJCdWZmZXIgU3RyYXRlZ3kgU3RhdHVzIiwKIAkJCQkJCU1BWEFMSUdOKG9mZnNldG9mKEJ1 ZmZlclN0cmF0ZWd5Q29udHJvbCwgZnJlZWxpc3RzKSkgKwotCQkJCQkJTUFYQUxJR04oc2l6 ZW9mKEJ1ZmZlclN0cmF0ZWd5RnJlZWxpc3QpICogbnVtX3BhcnRpdGlvbnMpLAorCQkJCQkJ TUFYQUxJR04oc2l6ZW9mKEJ1ZmZlclN0cmF0ZWd5RnJlZWxpc3QpICogbnVtX3BhcnRpdGlv bnMpICsKKwkJCQkJCU1BWEFMSUdOKHNpemVvZihDbG9ja1N3ZWVwKSAqIG51bV9wYXJ0aXRp b25zKSwKIAkJCQkJCSZmb3VuZCk7CiAKIAlpZiAoIWZvdW5kKQpAQCAtNzA3LDEyICs4MTgs NDIgQEAgU3RyYXRlZ3lJbml0aWFsaXplKGJvb2wgaW5pdCkKIAogCQlTcGluTG9ja0luaXQo JlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOwogCi0JCS8qIEluaXRp YWxpemUgdGhlIGNsb2NrIHN3ZWVwIHBvaW50ZXIgKi8KLQkJcGdfYXRvbWljX2luaXRfdTMy KCZTdHJhdGVneUNvbnRyb2wtPm5leHRWaWN0aW1CdWZmZXIsIDApOworCQkvKiBoYXZlIHRv IHBvaW50IHRoZSBzd2VlcHMgYXJyYXkgdG8gcmlnaHQgYWZ0ZXIgdGhlIGZyZWVsaXN0cyAq LworCQlwdHIgPSAoY2hhciAqKSBTdHJhdGVneUNvbnRyb2wgKworCQkJTUFYQUxJR04ob2Zm c2V0b2YoQnVmZmVyU3RyYXRlZ3lDb250cm9sLCBmcmVlbGlzdHMpKSArCisJCQlNQVhBTElH TihzaXplb2YoQnVmZmVyU3RyYXRlZ3lGcmVlbGlzdCkgKiBudW1fcGFydGl0aW9ucyk7CisJ CVN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzID0gKENsb2NrU3dlZXAgKikgcHRyOworCisJCS8q IEluaXRpYWxpemUgdGhlIGNsb2NrIHN3ZWVwIHBvaW50ZXJzIChmb3IgYWxsIHBhcnRpdGlv bnMpICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3BhcnRpdGlvbnM7IGkrKykKKwkJ eworCQkJaW50CQkJbm9kZSwKKwkJCQkJCW51bV9idWZmZXJzLAorCQkJCQkJZmlyc3RfYnVm ZmVyLAorCQkJCQkJbGFzdF9idWZmZXI7CisKKwkJCVNwaW5Mb2NrSW5pdCgmU3RyYXRlZ3lD b250cm9sLT5zd2VlcHNbaV0uY2xvY2tfc3dlZXBfbG9jayk7CiAKLQkJLyogQ2xlYXIgc3Rh dGlzdGljcyAqLwotCQlTdHJhdGVneUNvbnRyb2wtPmNvbXBsZXRlUGFzc2VzID0gMDsKLQkJ cGdfYXRvbWljX2luaXRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm51bUJ1ZmZlckFsbG9jcywg MCk7CisJCQlwZ19hdG9taWNfaW5pdF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+c3dlZXBzW2ld Lm5leHRWaWN0aW1CdWZmZXIsIDApOworCisJCQkvKiBnZXQgaW5mbyBhYm91dCB0aGUgYnVm ZmVyIHBhcnRpdGlvbiAqLworCQkJQnVmZmVyUGFydGl0aW9uR2V0KGksICZub2RlLCAmbnVt X2J1ZmZlcnMsCisJCQkJCQkJICAgJmZpcnN0X2J1ZmZlciwgJmxhc3RfYnVmZmVyKTsKKwor CQkJLyoKKwkJCSAqIEZJWE1FIFRoaXMgbWF5IG5vdCBxdWl0ZSByaWdodCwgYmVjYXVzZSBp ZiBOQnVmZmVycyBpcyBub3QgYQorCQkJICogcGVyZmVjdCBtdWx0aXBsZSBvZiBudW1CdWZm ZXJzLCB0aGUgbGFzdCBwYXJ0aXRpb24gd2lsbCBoYXZlCisJCQkgKiBudW1CdWZmZXJzIHNl dCB0b28gaGlnaC4gYnVmX2luaXQgaGFuZGxlcyB0aGlzIGJ5IHRyYWNraW5nIHRoZQorCQkJ ICogcmVtYWluaW5nIG51bWJlciBvZiBidWZmZXJzLCBhbmQgbm90IG92ZXJmbG93aW5nLgor CQkJICovCisJCQlTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5udW1CdWZmZXJzID0gbnVt X2J1ZmZlcnM7CisJCQlTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5maXJzdEJ1ZmZlciA9 IGZpcnN0X2J1ZmZlcjsKKworCQkJLyogQ2xlYXIgc3RhdGlzdGljcyAqLworCQkJU3RyYXRl Z3lDb250cm9sLT5zd2VlcHNbaV0uY29tcGxldGVQYXNzZXMgPSAwOworCQkJcGdfYXRvbWlj X2luaXRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5udW1CdWZmZXJBbGxvY3Ms IDApOworCQkJcGdfYXRvbWljX2luaXRfdTY0KCZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tp XS5udW1Ub3RhbEFsbG9jcywgMCk7CisJCX0KIAogCQkvKiBObyBwZW5kaW5nIG5vdGlmaWNh dGlvbiAqLwogCQlTdHJhdGVneUNvbnRyb2wtPmJnd3Byb2NubyA9IC0xOwpAQCAtNzYwLDcg KzkwMSw2IEBAIFN0cmF0ZWd5SW5pdGlhbGl6ZShib29sIGluaXQpCiAJCQkJYnVmLT5mcmVl TmV4dCA9IGZyZWVsaXN0LT5maXJzdEZyZWVCdWZmZXI7CiAJCQkJZnJlZWxpc3QtPmZpcnN0 RnJlZUJ1ZmZlciA9IGk7CiAJCQl9Ci0KIAkJfQogCX0KIAllbHNlCkBAIC0xMTAwLDkgKzEy NDAsMTIgQEAgU3RyYXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3ksIEJ1ZmZlckRlc2MgKmJ1ZiwgYm9vbCBmcm9tX3IKIH0KIAogdm9pZAotRnJlZWxp c3RQYXJ0aXRpb25HZXRJbmZvKGludCBpZHgsIHVpbnQ2NCAqY29uc3VtZWQsIHVpbnQ2NCAq cmVtYWluLCB1aW50NjQgKmFjdHVhbGx5X2ZyZWUpCitGcmVlbGlzdFBhcnRpdGlvbkdldElu Zm8oaW50IGlkeCwgdWludDY0ICpjb25zdW1lZCwgdWludDY0ICpyZW1haW4sIHVpbnQ2NCAq YWN0dWFsbHlfZnJlZSwKKwkJCQkJCSB1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywgdWludDMy ICpuZXh0X3ZpY3RpbV9idWZmZXIsCisJCQkJCQkgdWludDY0ICpidWZmZXJfdG90YWxfYWxs b2NzLCB1aW50MzIgKmJ1ZmZlcl9hbGxvY3MpCiB7CiAJQnVmZmVyU3RyYXRlZ3lGcmVlbGlz dCAqZnJlZWxpc3Q7CisJQ2xvY2tTd2VlcCAqc3dlZXA7CiAJaW50CQkJY3VyOwogCiAJLyog c3RhdHMgKi8KQEAgLTExMTIsNiArMTI1NSw3IEBAIEZyZWVsaXN0UGFydGl0aW9uR2V0SW5m byhpbnQgaWR4LCB1aW50NjQgKmNvbnN1bWVkLCB1aW50NjQgKnJlbWFpbiwgdWludDY0ICph Y3R1CiAJQXNzZXJ0KChpZHggPj0gMCkgJiYgKGlkeCA8IFN0cmF0ZWd5Q29udHJvbC0+bnVt X3BhcnRpdGlvbnMpKTsKIAogCWZyZWVsaXN0ID0gJlN0cmF0ZWd5Q29udHJvbC0+ZnJlZWxp c3RzW2lkeF07CisJc3dlZXAgPSAmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaWR4XTsKIAog CS8qIHN0YXQgKi8KIAlTcGluTG9ja0FjcXVpcmUoJmZyZWVsaXN0LT5mcmVlbGlzdF9sb2Nr KTsKQEAgLTExNDEsNCArMTI4NSwxNCBAQCBGcmVlbGlzdFBhcnRpdGlvbkdldEluZm8oaW50 IGlkeCwgdWludDY0ICpjb25zdW1lZCwgdWludDY0ICpyZW1haW4sIHVpbnQ2NCAqYWN0dQog CiAJKnJlbWFpbiA9IGNudF9yZW1haW47CiAJKmFjdHVhbGx5X2ZyZWUgPSBjbnRfZnJlZTsK KworCS8qIGdldCB0aGUgY2xvY2tzd2VlcCBzdGF0cyB0b28gKi8KKwkqY29tcGxldGVfcGFz c2VzID0gc3dlZXAtPmNvbXBsZXRlUGFzc2VzOworCSpuZXh0X3ZpY3RpbV9idWZmZXIgPSBw Z19hdG9taWNfcmVhZF91MzIoJnN3ZWVwLT5uZXh0VmljdGltQnVmZmVyKTsKKworCSpidWZm ZXJfYWxsb2NzID0gcGdfYXRvbWljX3JlYWRfdTMyKCZzd2VlcC0+bnVtQnVmZmVyQWxsb2Nz KTsKKwkqYnVmZmVyX3RvdGFsX2FsbG9jcyA9IHBnX2F0b21pY19yZWFkX3U2NCgmc3dlZXAt Pm51bVRvdGFsQWxsb2NzKTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgYWN0dWFsIGJ1ZmZlciBJ RCAqLworCSpuZXh0X3ZpY3RpbV9idWZmZXIgPSBzd2VlcC0+Zmlyc3RCdWZmZXIgKyAoKm5l eHRfdmljdGltX2J1ZmZlciAlIHN3ZWVwLT5udW1CdWZmZXJzKTsKIH0KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9idWZfaW50ZXJuYWxzLmgKaW5kZXggOWRmYmVjYjlmZTQuLjkwN2IxNjBiNGY3IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAorKysgYi9z cmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaApAQCAtNDQ5LDcgKzQ0OSw5IEBA IGV4dGVybiB2b2lkIFN0cmF0ZWd5RnJlZUJ1ZmZlcihCdWZmZXJEZXNjICpidWYpOwogZXh0 ZXJuIGJvb2wgU3RyYXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3ksCiAJCQkJCQkJCSBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJvbV9yaW5nKTsKIAot ZXh0ZXJuIGludAlTdHJhdGVneVN5bmNTdGFydCh1aW50MzIgKmNvbXBsZXRlX3Bhc3Nlcywg dWludDMyICpudW1fYnVmX2FsbG9jKTsKK2V4dGVybiB2b2lkIFN0cmF0ZWd5U3luY1ByZXBh cmUoaW50ICpudW1fcGFydHMsIHVpbnQzMiAqbnVtX2J1Zl9hbGxvYyk7CitleHRlcm4gaW50 CVN0cmF0ZWd5U3luY1N0YXJ0KGludCBwYXJ0aXRpb24sIHVpbnQzMiAqY29tcGxldGVfcGFz c2VzLAorCQkJCQkJCSAgaW50ICpmaXJzdF9idWZmZXIsIGludCAqbnVtX2J1ZmZlcnMpOwog ZXh0ZXJuIHZvaWQgU3RyYXRlZ3lOb3RpZnlCZ1dyaXRlcihpbnQgYmd3cHJvY25vKTsKIAog ZXh0ZXJuIFNpemUgU3RyYXRlZ3lTaG1lbVNpemUodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aAppbmRleCBkZjEyNzI3NDE5MC4uYTY3OTVjNWZlZTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aApAQCAtMzQ5LDcgKzM0OSwxMSBAQCBleHRlcm4gaW50CUdldEFjY2Vzc1N0cmF0ZWd5UGlu TGltaXQoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOwogZXh0ZXJuIHZvaWQgRnJl ZUFjY2Vzc1N0cmF0ZWd5KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KTsKIGV4dGVy biB2b2lkIEZyZWVsaXN0UGFydGl0aW9uR2V0SW5mbyhpbnQgaWR4LAogCQkJCQkJCQkJIHVp bnQ2NCAqY29uc3VtZWQsIHVpbnQ2NCAqcmVtYWluLAotCQkJCQkJCQkJIHVpbnQ2NCAqYWN0 dWFsbHlfZnJlZSk7CisJCQkJCQkJCQkgdWludDY0ICphY3R1YWxseV9mcmVlLAorCQkJCQkJ CQkJIHVpbnQzMiAqY29tcGxldGVfcGFzc2VzLAorCQkJCQkJCQkJIHVpbnQzMiAqbmV4dF92 aWN0aW1fYnVmZmVyLAorCQkJCQkJCQkJIHVpbnQ2NCAqYnVmZmVyX3RvdGFsX2FsbG9jcywK KwkJCQkJCQkJCSB1aW50MzIgKmJ1ZmZlcl9hbGxvY3MpOwogCiAvKiBpbmxpbmUgZnVuY3Rp b25zICovCiAKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMDNjYTNiN2M4YmMu Ljg1NDBkNTM3YTNlIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNDI3LDYg KzQyNyw3IEBAIENsaWVudENlcnROYW1lCiBDbGllbnRDb25uZWN0aW9uSW5mbwogQ2xpZW50 RGF0YQogQ2xpZW50U29ja2V0CitDbG9ja1N3ZWVwCiBDbG9uZVB0clR5cGUKIENsb3NlUG9y dGFsU3RtdAogQ2xvc2VQdHJUeXBlCi0tIAoyLjUwLjEKCg== --------------8xriSvZLhsgPmdy7CNlM8G85 Content-Type: text/x-patch; charset=UTF-8; name="v20250807-0006-NUMA-partition-buffer-freelist.patch" Content-Disposition: attachment; filename="v20250807-0006-NUMA-partition-buffer-freelist.patch" Content-Transfer-Encoding: base64 RnJvbSBhNTA1YzRlMjNkNjBkNWFhYzkxMWMyNDM5MTQ0NGJhMWI4MzIwYmYwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyMiBNYXkgMjAyNSAxODozODo0MSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwODA3IDA2LzExXSBOVU1BOiBwYXJ0aXRpb24gYnVmZmVyIGZyZWVsaXN0CgpJbnN0 ZWFkIG9mIGEgc2luZ2xlIGJ1ZmZlciBmcmVlbGlzdCwgcGFydGl0aW9uIGludG8gbXVsdGlw bGUgc21hbGxlcgpsaXN0cywgdG8gcmVkdWNlIGxvY2sgY29udGVudGlvbiwgYW5kIHRvIHNw cmVhZCB0aGUgYnVmZmVycyBvdmVyIGFsbApOVU1BIG5vZGVzIG1vcmUgZXZlbmx5LgoKVGhp cyB1c2VzIHRoZSBidWZmZXIgcGFydGl0aW9uaW5nIHNjaGVtZSBpbnRyb2R1Y2VkIGJ5IHRo ZSBlYXJsaWVyCnBhdGNoLCBpLmUuIHRoZSBwYXJ0aXRpb25zIHdpbGwgImFsaWduIiB3aXRo IE5VTUEgbm9kZXMsIGV0Yy4KCkl0IGFsc28gZXh0ZW5kcyB0aGUgInBnX2J1ZmZlcmNhY2hl X3BhcnRpdGlvbnMiIHZpZXcsIHRvIGluY2x1ZGUKaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBm cmVlbGlzdCAobnVtYmVyIG9mIGNvbnN1bWVkZCBidWZmZXJzLCAuLi4pLgoKV2hlbiBhbGxv Y2F0aW5nIGEgYnVmZmVyLCBpdCdzIHRha2VuIGZyb20gdGhlIGNvcnJlY3QgZnJlZWxpc3Qg KHNhbWUKTlVNQSBub2RlKS4KCk5vdGU6IFRoaXMgaXMgKHByb2JhYmx5KSBtb3JlIGltcG9y dGFudCB0aGFuIHBhcnRpdGlvbmluZyBQcm9jQXJyYXkuCi0tLQogLi4uL3BnX2J1ZmZlcmNh Y2hlLS0xLjYtLTEuNy5zcWwgICAgICAgICAgICAgIHwgICA3ICstCiBjb250cmliL3BnX2J1 ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMgfCAgMjQgKy0KIHNyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAgICB8IDM0OSArKysrKysrKysrKysr KysrLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgICAgICAgICAgICB8 ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAgICAgICAg fCAgMTAgKwogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggICAgICAgICAgICAgICAg ICB8ICAgNCArLQogNyBmaWxlcyBjaGFuZ2VkLCAzNjYgaW5zZXJ0aW9ucygrKSwgMzAgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZm ZXJjYWNoZS0tMS42LS0xLjcuc3FsIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZm ZXJjYWNoZS0tMS42LS0xLjcuc3FsCmluZGV4IGZiOTAwM2MwMTFlLi45NWZkMmQyYTIyNiAx MDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42 LS0xLjcuc3FsCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUt LTEuNi0tMS43LnNxbApAQCAtMTYsNyArMTYsMTIgQEAgQ1JFQVRFIFZJRVcgcGdfYnVmZmVy Y2FjaGVfcGFydGl0aW9ucyBBUwogCSBudW1hX25vZGUgaW50ZWdlciwJCQktLSBOVU1BIG5v ZGUgb2YgdGhlIHBhcnRpdGlvb24KIAkgbnVtX2J1ZmZlcnMgaW50ZWdlciwJCS0tIG51bWJl ciBvZiBidWZmZXJzIGluIHRoZSBwYXJ0aXRpb24KIAkgZmlyc3RfYnVmZmVyIGludGVnZXIs CQktLSBmaXJzdCBidWZmZXIgb2YgcGFydGl0aW9uCi0JIGxhc3RfYnVmZmVyIGludGVnZXIp OwkJLS0gbGFzdCBidWZmZXIgb2YgcGFydGl0aW9uCisJIGxhc3RfYnVmZmVyIGludGVnZXIs CQktLSBsYXN0IGJ1ZmZlciBvZiBwYXJ0aXRpb24KKworCSAtLSBmcmVlbGlzdHMKKwkgbGlz dF9jb25zdW1lZCBiaWdpbnQsCQktLSBidWZmZXJzIGNvbnN1bWVkIGZyb20gYSBmcmVlbGlz dAorCSBsaXN0X3JlbWFpbiBiaWdpbnQsCQktLSBidWZmZXJzIGxlZnQgaW4gYSBmcmVlbGlz dAorCSBsaXN0X2ZyZWUgYmlnaW50KTsJCQktLSBudW1iZXIgb2YgZnJlZSBidWZmZXJzCiAK IC0tIERvbid0IHdhbnQgdGhlc2UgdG8gYmUgYXZhaWxhYmxlIHRvIHB1YmxpYy4KIFJFVk9L RSBBTEwgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucygpIEZST00gUFVC TElDOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNo ZV9wYWdlcy5jIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdl cy5jCmluZGV4IDhiYWE3YzdiNTQzLi42ZDczNDQ2NGEyMiAxMDA2NDQKLS0tIGEvY29udHJp Yi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCisrKyBiL2NvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYwpAQCAtMjcsNyArMjcsNyBA QAogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfRVZJQ1RfQUxMX0VMRU0gMwogCiAjZGVmaW5l IE5VTV9CVUZGRVJDQUNIRV9OVU1BX0VMRU0JMwotI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVf UEFSVElUSU9OU19FTEVNCTUKKyNkZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNf RUxFTQk4CiAKIFBHX01PRFVMRV9NQUdJQ19FWFQoCiAJCQkJCS5uYW1lID0gInBnX2J1ZmZl cmNhY2hlIiwKQEAgLTgxMiw2ICs4MTIsMTIgQEAgcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9u cyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOwogCQlUdXBs ZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgNSwgImxhc3RfYnVmZmVy IiwKIAkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1 cGxlZGVzYywgKEF0dHJOdW1iZXIpIDYsICJsaXN0X2NvbnN1bWVkIiwKKwkJCQkJCSAgIElO VDhPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJO dW1iZXIpIDcsICJsaXN0X3JlbWFpbiIsCisJCQkJCQkgICBJTlQ4T0lELCAtMSwgMCk7CisJ CVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2MsIChBdHRyTnVtYmVyKSA4LCAibGlzdF9m cmVlIiwKKwkJCQkJCSAgIElOVDhPSUQsIC0xLCAwKTsKIAogCQlmdW5jY3R4LT51c2VyX2Zj dHggPSBCbGVzc1R1cGxlRGVzYyh0dXBsZWRlc2MpOwogCkBAIC04MzMsMTIgKzgzOSwxOSBA QCBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCWZp cnN0X2J1ZmZlciwKIAkJCQkJbGFzdF9idWZmZXI7CiAKKwkJdWludDY0CQlidWZmZXJzX2Nv bnN1bWVkLAorCQkJCQlidWZmZXJzX3JlbWFpbiwKKwkJCQkJYnVmZmVyc19mcmVlOworCiAJ CURhdHVtCQl2YWx1ZXNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CiAJCWJv b2wJCW51bGxzW05VTV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU1dOwogCiAJCUJ1ZmZl clBhcnRpdGlvbkdldChpLCAmbnVtYV9ub2RlLCAmbnVtX2J1ZmZlcnMsCiAJCQkJCQkgICAm Zmlyc3RfYnVmZmVyLCAmbGFzdF9idWZmZXIpOwogCisJCUZyZWVsaXN0UGFydGl0aW9uR2V0 SW5mbyhpLCAmYnVmZmVyc19jb25zdW1lZCwgJmJ1ZmZlcnNfcmVtYWluLAorCQkJCQkJCQkg JmJ1ZmZlcnNfZnJlZSk7CisKIAkJdmFsdWVzWzBdID0gSW50MzJHZXREYXR1bShpKTsKIAkJ bnVsbHNbMF0gPSBmYWxzZTsKIApAQCAtODU0LDYgKzg2NywxNSBAQCBwZ19idWZmZXJjYWNo ZV9wYXJ0aXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXZhbHVlc1s0XSA9IEludDMyR2V0 RGF0dW0obGFzdF9idWZmZXIpOwogCQludWxsc1s0XSA9IGZhbHNlOwogCisJCXZhbHVlc1s1 XSA9IEludDY0R2V0RGF0dW0oYnVmZmVyc19jb25zdW1lZCk7CisJCW51bGxzWzVdID0gZmFs c2U7CisKKwkJdmFsdWVzWzZdID0gSW50NjRHZXREYXR1bShidWZmZXJzX3JlbWFpbik7CisJ CW51bGxzWzZdID0gZmFsc2U7CisKKwkJdmFsdWVzWzddID0gSW50NjRHZXREYXR1bShidWZm ZXJzX2ZyZWUpOworCQludWxsc1s3XSA9IGZhbHNlOworCiAJCS8qIEJ1aWxkIGFuZCByZXR1 cm4gdGhlIHR1cGxlLiAqLwogCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZSgoVHVwbGVEZXNj KSBmdW5jY3R4LT51c2VyX2ZjdHgsIHZhbHVlcywgbnVsbHMpOwogCQlyZXN1bHQgPSBIZWFw VHVwbGVHZXREYXR1bSh0dXBsZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2J1ZmZlci9mcmVlbGlzdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxp c3QuYwppbmRleCBlMDQ2NTI2YzE0OS4uNWE2M2RhZDdmMmMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvZnJlZWxpc3QuYwpAQCAtMTUsMTQgKzE1LDQxIEBACiAgKi8KICNpbmNs dWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzeXMv c3lzaW5mby5oPgorCisjaWZkZWYgVVNFX0xJQk5VTUEKKyNpbmNsdWRlIDxudW1hLmg+Cisj aW5jbHVkZSA8bnVtYWlmLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgInBnc3RhdC5oIgogI2lu Y2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFs cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9p cGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKIAogI2RlZmluZSBJTlRfQUNDRVNT X09OQ0UodmFyKQkoKGludCkoKigodm9sYXRpbGUgaW50ICopJih2YXIpKSkpCiAKKy8qCisg KiBSZXByZXNlbnRzIG9uZSBmcmVlbGlzdCBwYXJ0aXRpb24uCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEJ1ZmZlclN0cmF0ZWd5RnJlZWxpc3QKK3sKKwkvKiBTcGlubG9jazogcHJvdGVjdHMg dGhlIHZhbHVlcyBiZWxvdyAqLworCXNsb2NrX3QJCWZyZWVsaXN0X2xvY2s7CisKKwkvKgor CSAqIFhYWCBOb3Qgc3VyZSB3aHkgdGhpcyBuZWVkcyB0byBiZSBhbGlnbmVkIGxpa2UgdGhp cy4gTmVlZCB0byBhc2sKKwkgKiBBbmRyZXMuCisJICovCisJaW50CQkJZmlyc3RGcmVlQnVm ZmVyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSk7CS8qIEhlYWQgb2YgbGlzdCBvZgor CQkJCQkJCQkJCQkJCQkJCSAqIHVudXNlZCBidWZmZXJzICovCisKKwkvKiBOdW1iZXIgb2Yg YnVmZmVycyBjb25zdW1lZCBmcm9tIHRoaXMgbGlzdC4gKi8KKwl1aW50NjQJCWNvbnN1bWVk OworfQkJCUJ1ZmZlclN0cmF0ZWd5RnJlZWxpc3Q7CiAKIC8qCiAgKiBUaGUgc2hhcmVkIGZy ZWVsaXN0IGNvbnRyb2wgaW5mb3JtYXRpb24uCkBAIC0zOSw4ICs2Niw2IEBAIHR5cGVkZWYg c3RydWN0CiAJICovCiAJcGdfYXRvbWljX3VpbnQzMiBuZXh0VmljdGltQnVmZmVyOwogCi0J aW50CQkJZmlyc3RGcmVlQnVmZmVyOwkvKiBIZWFkIG9mIGxpc3Qgb2YgdW51c2VkIGJ1ZmZl cnMgKi8KLQogCS8qCiAJICogU3RhdGlzdGljcy4gIFRoZXNlIGNvdW50ZXJzIHNob3VsZCBi ZSB3aWRlIGVub3VnaCB0aGF0IHRoZXkgY2FuJ3QKIAkgKiBvdmVyZmxvdyBkdXJpbmcgYSBz aW5nbGUgYmd3cml0ZXIgY3ljbGUuCkBAIC01MSw4ICs3NiwxOSBAQCB0eXBlZGVmIHN0cnVj dAogCS8qCiAJICogQmd3b3JrZXIgcHJvY2VzcyB0byBiZSBub3RpZmllZCB1cG9uIGFjdGl2 aXR5IG9yIC0xIGlmIG5vbmUuIFNlZQogCSAqIFN0cmF0ZWd5Tm90aWZ5QmdXcml0ZXIuCisJ ICoKKwkgKiBYWFggTm90IHN1cmUgd2h5IHRoaXMgbmVlZHMgdG8gYmUgYWxpZ25lZCBsaWtl IHRoaXMuIE5lZWQgdG8gYXNrCisJICogQW5kcmVzLiBBbHNvLCBzaG91bGRuJ3QgdGhlIGFs aWdubWVudCBiZSBzcGVjaWZpZWQgYWZ0ZXIsIGxpa2UgZm9yCisJICogImNvbnN1bWVkIj8K IAkgKi8KLQlpbnQJCQliZ3dwcm9jbm87CisJaW50CQkJX19hdHRyaWJ1dGVfXygoYWxpZ25l ZCg2NCkpKSBiZ3dwcm9jbm87CisKKwkvKiBpbmZvIGFib3V0IGZyZWVsaXN0IHBhcnRpdGlv bmluZyAqLworCWludAkJCW51bV9ub2RlczsJCS8qIGVmZmVjdGl2ZWx5IG51bWJlciBvZiBO VU1BIG5vZGVzICovCisJaW50CQkJbnVtX3BhcnRpdGlvbnM7CisJaW50CQkJbnVtX3BhcnRp dGlvbnNfcGVyX25vZGU7CisKKwlCdWZmZXJTdHJhdGVneUZyZWVsaXN0IGZyZWVsaXN0c1tG TEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfSBCdWZmZXJTdHJhdGVneUNvbnRyb2w7CiAKIC8q IFBvaW50ZXJzIHRvIHNoYXJlZCBzdGF0ZSAqLwpAQCAtMTU3LDYgKzE5Myw4OCBAQCBDbG9j a1N3ZWVwVGljayh2b2lkKQogCXJldHVybiB2aWN0aW07CiB9CiAKK3N0YXRpYyBpbnQKK2Nh bGN1bGF0ZV9wYXJ0aXRpb25faW5kZXgoKQoreworCWludAkJCXJjOworCXVuc2lnbmVkCWNw dTsKKwl1bnNpZ25lZAlub2RlOworCWludAkJCWluZGV4OworCisJQXNzZXJ0KFN0cmF0ZWd5 Q29udHJvbC0+bnVtX3BhcnRpdGlvbnMgPT0KKwkJICAgKFN0cmF0ZWd5Q29udHJvbC0+bnVt X25vZGVzICogU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uc19wZXJfbm9kZSkpOwor CisJLyoKKwkgKiBmcmVlbGlzdCBpcyBwYXJ0aXRpb25lZCwgc28gZGV0ZXJtaW5lIHRoZSBD UFUvTlVNQSBub2RlLCBhbmQgcGljayBhCisJICogbGlzdCBiYXNlZCBvbiB0aGF0LgorCSAq LworCXJjID0gZ2V0Y3B1KCZjcHUsICZub2RlKTsKKwlpZiAocmMgIT0gMCkKKwkJZWxvZyhF UlJPUiwgImdldGNwdSBmYWlsZWQ6ICVtIik7CisKKwkvKgorCSAqIFhYWCBXZSBzaG91bGQn dCBnZXQgbm9kZXMgdGhhdCB3ZSBoYXZlbid0IGNvbnNpZGVyZWQgd2hpbGUgYnVpbGRpbmcg dGhlCisJICogcGFydGl0aW9ucy4gTWF5YmUgaWYgd2UgYWxsb3cgdGhpcyAoZS5nLiBkdWUg dG8gc3VwcG9ydCBhZGp1c3RpbmcgdGhlCisJICogTlVNQSBzdHVmZiBhdCBydW50aW1lKSwg d2Ugc2hvdWxkIGp1c3QgZG8gb3VyIGJlc3QgdG8gbWluaW1pemUgdGhlCisJICogY29uZmxp Y3RzIHNvbWVob3cuIEJ1dCBpdCdsbCBtYWtlIHRoZSBtYXBwaW5nIGhhcmRlciwgc28gZm9y IG5vdyB3ZQorCSAqIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAobm9kZSA+IFN0cmF0ZWd5Q29u dHJvbC0+bnVtX25vZGVzKQorCQllbG9nKEVSUk9SLCAibm9kZSBvdXQgb2YgcmFuZ2U6ICVk ID4gJXUiLCBjcHUsIFN0cmF0ZWd5Q29udHJvbC0+bnVtX25vZGVzKTsKKworCS8qCisJICog RmluZCB0aGUgcGFydGl0aW9uLiBJZiB3ZSBoYXZlIGEgc2luZ2xlIHBhcnRpdGlvbiBwZXIg bm9kZSwgd2UgY2FuCisJICogY2FsY3VsYXRlIHRoZSBpbmRleCBkaXJlY3RseSBmcm9tIG5v ZGUuIE90aGVyd2lzZSB3ZSBuZWVkIHRvIGRvIHR3bworCSAqIHN0ZXBzLCB1c2luZyBub2Rl IGFuZCB0aGVuIGNwdS4KKwkgKi8KKwlpZiAoU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0 aW9uc19wZXJfbm9kZSA9PSAxKQorCXsKKwkJaW5kZXggPSAobm9kZSAlIFN0cmF0ZWd5Q29u dHJvbC0+bnVtX3BhcnRpdGlvbnMpOworCX0KKwllbHNlCisJeworCQlpbnQJCQlpbmRleF9n cm91cCwKKwkJCQkJaW5kZXhfcGFydDsKKworCQkvKiB0d28gc3RlcHMgLSBjYWxjdWxhdGUg Z3JvdXAgZnJvbSBub2RlLCBwYXJ0aXRpb24gZnJvbSBjcHUgKi8KKwkJaW5kZXhfZ3JvdXAg PSAobm9kZSAlIFN0cmF0ZWd5Q29udHJvbC0+bnVtX25vZGVzKTsKKwkJaW5kZXhfcGFydCA9 IChjcHUgJSBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKTsKKwor CQlpbmRleCA9IChpbmRleF9ncm91cCAqIFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlv bnNfcGVyX25vZGUpCisJCQkrIGluZGV4X3BhcnQ7CisJfQorCisJcmV0dXJuIGluZGV4Owor fQorCisvKgorICogQ2hvb3NlRnJlZUxpc3QKKyAqCQlQaWNrIHRoZSBidWZmZXIgZnJlZWxp c3QgdG8gdXNlLCBkZXBlbmRpbmcgb24gdGhlIENQVSBhbmQgTlVNQSBub2RlLgorICoKKyAq IFdpdGhvdXQgcGFydGl0aW9uZWQgZnJlZWxpc3RzIChudW1hX3BhcnRpdGlvbl9mcmVlbGlz dD1mYWxzZSksIHRoZXJlJ3Mgb25seQorICogYSBzaW5nbGUgZnJlZWxpc3QsIHNvIHVzZSB0 aGF0LgorICoKKyAqIFdpdGggcGFydGl0aW9uZWQgZnJlZWxpc3RzLCB3ZSBoYXZlIG11bHRp cGxlIHdheXMgaG93IHRvIHBpY2sgdGhlIGZyZWVsaXN0CisgKiBmb3IgdGhlIGJhY2tlbmQ6 CisgKgorICogLSBvbmUgZnJlZWxpc3QgcGVyIENQVSwgdXNlIHRoZSBmcmVlbGlzdCBmb3Ig Q1BVIHRoZSB0YXNrIGV4ZWN1dGVzIG9uCisgKgorICogLSBvbmUgZnJlZWxpc3QgcGVyIE5V TUEgbm9kZSwgdXNlIHRoZSBmcmVlbGlzdCBmb3Igbm9kZSB0YXNrIGV4ZWN1dGVzIG9uCisg KgorICogLSB1c2UgZml4ZWQgbnVtYmVyIG9mIGZyZWVsaXN0cywgbWFwIHByb2Nlc3NlcyB0 byBsaXN0cyBiYXNlZCBvbiBQSUQKKyAqCisgKiBUaGVyZSBtYXkgYmUgc29tZSBvdGhlciBz dHJhdGVnaWVzLCBub3Qgc3VyZS4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGlzCisgKiBu ZWVkcyB0byBiZSByZWZyZWNsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCBpLmUuIHdlIG5l ZWQgdG8gY3JlYXRlIHRoZQorICogcmlnaHQgbnVtYmVyIG9mIGxpc3RzLgorICovCitzdGF0 aWMgQnVmZmVyU3RyYXRlZ3lGcmVlbGlzdCAqCitDaG9vc2VGcmVlTGlzdCh2b2lkKQorewor CWludAkJCWluZGV4ID0gY2FsY3VsYXRlX3BhcnRpdGlvbl9pbmRleCgpOworCisJcmV0dXJu ICZTdHJhdGVneUNvbnRyb2wtPmZyZWVsaXN0c1tpbmRleF07Cit9CisKIC8qCiAgKiBoYXZl X2ZyZWVfYnVmZmVyIC0tIGEgbG9ja2xlc3MgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEg ZnJlZSBidWZmZXIgaW4KICAqCQkJCQkgICBidWZmZXIgcG9vbC4KQEAgLTE2OCwxMCArMjg2 LDEzIEBAIENsb2NrU3dlZXBUaWNrKHZvaWQpCiBib29sCiBoYXZlX2ZyZWVfYnVmZmVyKHZv aWQpCiB7Ci0JaWYgKFN0cmF0ZWd5Q29udHJvbC0+Zmlyc3RGcmVlQnVmZmVyID49IDApCi0J CXJldHVybiB0cnVlOwotCWVsc2UKLQkJcmV0dXJuIGZhbHNlOworCWZvciAoaW50IGkgPSAw OyBpIDwgU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uczsgaSsrKQorCXsKKwkJaWYg KFN0cmF0ZWd5Q29udHJvbC0+ZnJlZWxpc3RzW2ldLmZpcnN0RnJlZUJ1ZmZlciA+PSAwKQor CQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtMTkz LDYgKzMxNCw3IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0 cmF0ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJaW50CQkJYmd3cHJv Y25vOwogCWludAkJCXRyeWNvdW50ZXI7CiAJdWludDMyCQlsb2NhbF9idWZfc3RhdGU7CS8q IHRvIGF2b2lkIHJlcGVhdGVkIChkZS0pcmVmZXJlbmNpbmcgKi8KKwlCdWZmZXJTdHJhdGVn eUZyZWVsaXN0ICpmcmVlbGlzdDsKIAogCSpmcm9tX3JpbmcgPSBmYWxzZTsKIApAQCAtMjU5 LDMxICszODEsMzUgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kg c3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAkgKiBidWZmZXJf c3RyYXRlZ3lfbG9jayBub3QgdGhlIGluZGl2aWR1YWwgYnVmZmVyIHNwaW5sb2Nrcywgc28g aXQncyBPSyB0bwogCSAqIG1hbmlwdWxhdGUgdGhlbSB3aXRob3V0IGhvbGRpbmcgdGhlIHNw aW5sb2NrLgogCSAqLwotCWlmIChTdHJhdGVneUNvbnRyb2wtPmZpcnN0RnJlZUJ1ZmZlciA+ PSAwKQorCWZyZWVsaXN0ID0gQ2hvb3NlRnJlZUxpc3QoKTsKKwlpZiAoZnJlZWxpc3QtPmZp cnN0RnJlZUJ1ZmZlciA+PSAwKQogCXsKIAkJd2hpbGUgKHRydWUpCiAJCXsKIAkJCS8qIEFj cXVpcmUgdGhlIHNwaW5sb2NrIHRvIHJlbW92ZSBlbGVtZW50IGZyb20gdGhlIGZyZWVsaXN0 ICovCi0JCQlTcGluTG9ja0FjcXVpcmUoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0 ZWd5X2xvY2spOworCQkJU3BpbkxvY2tBY3F1aXJlKCZmcmVlbGlzdC0+ZnJlZWxpc3RfbG9j ayk7CiAKLQkJCWlmIChTdHJhdGVneUNvbnRyb2wtPmZpcnN0RnJlZUJ1ZmZlciA8IDApCisJ CQlpZiAoZnJlZWxpc3QtPmZpcnN0RnJlZUJ1ZmZlciA8IDApCiAJCQl7Ci0JCQkJU3Bpbkxv Y2tSZWxlYXNlKCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsKKwkJ CQlTcGluTG9ja1JlbGVhc2UoJmZyZWVsaXN0LT5mcmVlbGlzdF9sb2NrKTsKIAkJCQlicmVh azsKIAkJCX0KIAotCQkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihTdHJhdGVneUNvbnRy b2wtPmZpcnN0RnJlZUJ1ZmZlcik7CisJCQlidWYgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGZy ZWVsaXN0LT5maXJzdEZyZWVCdWZmZXIpOwogCQkJQXNzZXJ0KGJ1Zi0+ZnJlZU5leHQgIT0g RlJFRU5FWFRfTk9UX0lOX0xJU1QpOwogCiAJCQkvKiBVbmNvbmRpdGlvbmFsbHkgcmVtb3Zl IGJ1ZmZlciBmcm9tIGZyZWVsaXN0ICovCi0JCQlTdHJhdGVneUNvbnRyb2wtPmZpcnN0RnJl ZUJ1ZmZlciA9IGJ1Zi0+ZnJlZU5leHQ7CisJCQlmcmVlbGlzdC0+Zmlyc3RGcmVlQnVmZmVy ID0gYnVmLT5mcmVlTmV4dDsKIAkJCWJ1Zi0+ZnJlZU5leHQgPSBGUkVFTkVYVF9OT1RfSU5f TElTVDsKIAorCQkJLyogaW5jcmVtZW50IG51bWJlciBvZiBidWZmZXJzIHdlIGNvbnN1bWVk IGZyb20gdGhpcyBsaXN0ICovCisJCQlmcmVlbGlzdC0+Y29uc3VtZWQrKzsKKwogCQkJLyoK IAkJCSAqIFJlbGVhc2UgdGhlIGxvY2sgc28gc29tZW9uZSBlbHNlIGNhbiBhY2Nlc3MgdGhl IGZyZWVsaXN0IHdoaWxlCiAJCQkgKiB3ZSBjaGVjayBvdXQgdGhpcyBidWZmZXIuCiAJCQkg Ki8KLQkJCVNwaW5Mb2NrUmVsZWFzZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRl Z3lfbG9jayk7CisJCQlTcGluTG9ja1JlbGVhc2UoJmZyZWVsaXN0LT5mcmVlbGlzdF9sb2Nr KTsKIAogCQkJLyoKIAkJCSAqIElmIHRoZSBidWZmZXIgaXMgcGlubmVkIG9yIGhhcyBhIG5v bnplcm8gdXNhZ2VfY291bnQsIHdlIGNhbm5vdApAQCAtMzA1LDcgKzQzMSwxNyBAQCBTdHJh dGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgdWludDMyICpi dWZfc3RhdGUsIGJvb2wgKmZyb21fcgogCQl9CiAJfQogCi0JLyogTm90aGluZyBvbiB0aGUg ZnJlZWxpc3QsIHNvIHJ1biB0aGUgImNsb2NrIHN3ZWVwIiBhbGdvcml0aG0gKi8KKwkvKgor CSAqIE5vdGhpbmcgb24gdGhlIGZyZWVsaXN0LCBzbyBydW4gdGhlICJjbG9jayBzd2VlcCIg YWxnb3JpdGhtCisJICoKKwkgKiBYWFggU2hvdWxkIHdlIGFsc28gbWFrZSB0aGlzIE5VTUEt YXdhcmUsIHRvIG9ubHkgYWNjZXNzIGJ1ZmZlcnMgZnJvbQorCSAqIHRoZSBzYW1lIE5VTUEg bm9kZT8gVGhhdCdkIHByb2JhYmx5IG1lYW4gd2UgbmVlZCB0byBtYWtlIHRoZSBjbG9jawor CSAqIHN3ZWVwIE5VTUEtYXdhcmUsIHBlcmhhcHMgYnkgaGF2aW5nIG11bHRpcGxlIGNsb2Nr IHN3ZWVwcywgZWFjaCBmb3IgYQorCSAqIHN1YnNldCBvZiBidWZmZXJzLiBCdXQgdGhhdCBh bHNvIG1lYW5zIGVhY2ggcHJvY2VzcyBjb3VsZCAic3dlZXAiIG9ubHkKKwkgKiBhIGZyYWN0 aW9uIG9mIGJ1ZmZlcnMsIGV2ZW4gaWYgdGhlIG90aGVyIGJ1ZmZlcnMgYXJlIGJldHRlciBj YW5kaWRhdGVzCisJICogZm9yIGV2aWN0aW9uLiBXb3VsZCB0aGF0IGFsc28gbWVhbiB3ZSdk IGhhdmUgbXVsdGlwbGUgYmd3cml0ZXJzLCBvbmUKKwkgKiBmb3IgZWFjaCBub2RlLCBvciB3 b3VsZCBvbmUgYmd3cml0ZXIgaGFuZGxlIGFsbCBvZiB0aGF0PworCSAqLwogCXRyeWNvdW50 ZXIgPSBOQnVmZmVyczsKIAlmb3IgKDs7KQogCXsKQEAgLTM1Niw3ICs0OTIsMjIgQEAgU3Ry YXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAq YnVmX3N0YXRlLCBib29sICpmcm9tX3IKIHZvaWQKIFN0cmF0ZWd5RnJlZUJ1ZmZlcihCdWZm ZXJEZXNjICpidWYpCiB7Ci0JU3BpbkxvY2tBY3F1aXJlKCZTdHJhdGVneUNvbnRyb2wtPmJ1 ZmZlcl9zdHJhdGVneV9sb2NrKTsKKwlCdWZmZXJTdHJhdGVneUZyZWVsaXN0ICpmcmVlbGlz dDsKKworCS8qCisJICogV2UgZG9uJ3Qgd2FudCB0byBjYWxsIENob29zZUZyZWVMaXN0KCkg YWdhaW4sIGJlY2F1c2Ugd2UgbWlnaHQgZ2V0IGEKKwkgKiBjb21wbGV0ZWx5IGRpZmZlcmVu dCBmcmVlbGlzdCAtIGVpdGhlciBhIGRpZmZlcmVudCBwYXJ0aXRpb24gaW4gdGhlCisJICog c2FtZSBncm91cCwgb3IgZXZlbiBhIGRpZmZlcmVudCBncm91cCBpZiB0aGUgTlVNQSBub2Rl IGNoYW5nZWQuIEJ1dCB3ZQorCSAqIGNhbiBjYWxjdWxhdGUgdGhlIHByb3BlciBmcmVlbGlz dCBmcm9tIHRoZSBidWZmZXIgaWQuCisJICovCisJaW50CQkJaW5kZXggPSAoQnVmZmVyR2V0 Tm9kZShidWYtPmJ1Zl9pZCkgKiBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zX3Bl cl9ub2RlKQorCQkrIChidWYtPmJ1Zl9pZCAlIFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRp dGlvbnNfcGVyX25vZGUpOworCisJQXNzZXJ0KChpbmRleCA+PSAwKSAmJiAoaW5kZXggPCBT dHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zKSk7CisKKwlmcmVlbGlzdCA9ICZTdHJh dGVneUNvbnRyb2wtPmZyZWVsaXN0c1tpbmRleF07CisKKwlTcGluTG9ja0FjcXVpcmUoJmZy ZWVsaXN0LT5mcmVlbGlzdF9sb2NrKTsKIAogCS8qCiAJICogSXQgaXMgcG9zc2libGUgdGhh dCB3ZSBhcmUgdG9sZCB0byBwdXQgc29tZXRoaW5nIGluIHRoZSBmcmVlbGlzdCB0aGF0CkBA IC0zNjQsMTEgKzUxNSwxMSBAQCBTdHJhdGVneUZyZWVCdWZmZXIoQnVmZmVyRGVzYyAqYnVm KQogCSAqLwogCWlmIChidWYtPmZyZWVOZXh0ID09IEZSRUVORVhUX05PVF9JTl9MSVNUKQog CXsKLQkJYnVmLT5mcmVlTmV4dCA9IFN0cmF0ZWd5Q29udHJvbC0+Zmlyc3RGcmVlQnVmZmVy OwotCQlTdHJhdGVneUNvbnRyb2wtPmZpcnN0RnJlZUJ1ZmZlciA9IGJ1Zi0+YnVmX2lkOwor CQlidWYtPmZyZWVOZXh0ID0gZnJlZWxpc3QtPmZpcnN0RnJlZUJ1ZmZlcjsKKwkJZnJlZWxp c3QtPmZpcnN0RnJlZUJ1ZmZlciA9IGJ1Zi0+YnVmX2lkOwogCX0KIAotCVNwaW5Mb2NrUmVs ZWFzZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7CisJU3Bpbkxv Y2tSZWxlYXNlKCZmcmVlbGlzdC0+ZnJlZWxpc3RfbG9jayk7CiB9CiAKIC8qCkBAIC00MzIs NiArNTgzLDQyIEBAIFN0cmF0ZWd5Tm90aWZ5QmdXcml0ZXIoaW50IGJnd3Byb2NubykKIAlT cGluTG9ja1JlbGVhc2UoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2sp OwogfQogCisvKiBwcmludHMgc29tZSBkZWJ1ZyBpbmZvIC8gc3RhdHMgYWJvdXQgZnJlZWxp c3RzIGF0IHNodXRkb3duICovCitzdGF0aWMgdm9pZAorZnJlZWxpc3RfYmVmb3JlX3NobWVt X2V4aXQoaW50IGNvZGUsIERhdHVtIGFyZykKK3sKKwlmb3IgKGludCBwID0gMDsgcCA8IFN0 cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnM7IHArKykKKwl7CisJCUJ1ZmZlclN0cmF0 ZWd5RnJlZWxpc3QgKmZyZWVsaXN0ID0gJlN0cmF0ZWd5Q29udHJvbC0+ZnJlZWxpc3RzW3Bd OworCQl1aW50NjQJCXJlbWFpbiA9IDA7CisJCXVpbnQ2NAkJYWN0dWFsbHlfZnJlZSA9IDA7 CisJCWludAkJCWN1ciA9IGZyZWVsaXN0LT5maXJzdEZyZWVCdWZmZXI7CisKKwkJd2hpbGUg KGN1ciA+PSAwKQorCQl7CisJCQl1aW50MzIJCWxvY2FsX2J1Zl9zdGF0ZTsKKwkJCUJ1ZmZl ckRlc2MgKmJ1ZjsKKworCQkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihjdXIpOworCisJ CQlyZW1haW4rKzsKKworCQkJbG9jYWxfYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihidWYpOwor CisJCQlpZiAoIShsb2NhbF9idWZfc3RhdGUgJiBCTV9UQUdfVkFMSUQpKQorCQkJCWFjdHVh bGx5X2ZyZWUrKzsKKworCQkJVW5sb2NrQnVmSGRyKGJ1ZiwgbG9jYWxfYnVmX3N0YXRlKTsK KworCQkJY3VyID0gYnVmLT5mcmVlTmV4dDsKKwkJfQorCQllbG9nKExPRywgIk5VTUE6IGZy ZWVsaXN0IHBhcnRpdGlvbiAlZCwgZmlyc3RGOiAlZDogY29uc3VtZWQ6ICVsdSwgcmVtYWlu OiAlbHUsIGFjdHVhbGx5IGZyZWU6ICVsdSIsCisJCQkgcCwKKwkJCSBmcmVlbGlzdC0+Zmly c3RGcmVlQnVmZmVyLAorCQkJIGZyZWVsaXN0LT5jb25zdW1lZCwKKwkJCSByZW1haW4sIGFj dHVhbGx5X2ZyZWUpOworCX0KK30KIAogLyoKICAqIFN0cmF0ZWd5U2htZW1TaXplCkBAIC00 NDUsMTIgKzYzMiwyMCBAQCBTaXplCiBTdHJhdGVneVNobWVtU2l6ZSh2b2lkKQogewogCVNp emUJCXNpemUgPSAwOworCWludAkJCW51bV9wYXJ0aXRpb25zOworCWludAkJCW51bV9ub2Rl czsKKworCUJ1ZmZlclBhcnRpdGlvblBhcmFtcygmbnVtX3BhcnRpdGlvbnMsICZudW1fbm9k ZXMpOwogCiAJLyogc2l6ZSBvZiBsb29rdXAgaGFzaCB0YWJsZSAuLi4gc2VlIGNvbW1lbnQg aW4gU3RyYXRlZ3lJbml0aWFsaXplICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEJ1ZlRh YmxlU2htZW1TaXplKE5CdWZmZXJzICsgTlVNX0JVRkZFUl9QQVJUSVRJT05TKSk7CiAKIAkv KiBzaXplIG9mIHRoZSBzaGFyZWQgcmVwbGFjZW1lbnQgc3RyYXRlZ3kgY29udHJvbCBibG9j ayAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBNQVhBTElHTihzaXplb2YoQnVmZmVyU3Ry YXRlZ3lDb250cm9sKSkpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBNQVhBTElHTihvZmZz ZXRvZihCdWZmZXJTdHJhdGVneUNvbnRyb2wsIGZyZWVsaXN0cykpKTsKKworCS8qIHNpemUg b2YgZnJlZWxpc3QgcGFydGl0aW9ucyAoYXQgbGVhc3Qgb25lIHBlciBOVU1BIG5vZGUpICov CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE1BWEFMSUdOKG11bF9zaXplKHNpemVvZihCdWZm ZXJTdHJhdGVneUZyZWVsaXN0KSwKKwkJCQkJCQkJCQkJbnVtX3BhcnRpdGlvbnMpKSk7CiAK IAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTQ2Nyw2ICs2NjIsMTggQEAgU3RyYXRlZ3lJbml0aWFs aXplKGJvb2wgaW5pdCkKIHsKIAlib29sCQlmb3VuZDsKIAorCWludAkJCW51bV9ub2RlczsK KwlpbnQJCQludW1fcGFydGl0aW9uczsKKwlpbnQJCQludW1fcGFydGl0aW9uc19wZXJfbm9k ZTsKKworCS8qICovCisJQnVmZmVyUGFydGl0aW9uUGFyYW1zKCZudW1fcGFydGl0aW9ucywg Jm51bV9ub2Rlcyk7CisKKwkvKiBhbHdheXMgYSBtdWx0aXBsZSBvZiBOVU1BIG5vZGVzICov CisJQXNzZXJ0KG51bV9wYXJ0aXRpb25zICUgbnVtX25vZGVzID09IDApOworCisJbnVtX3Bh cnRpdGlvbnNfcGVyX25vZGUgPSAobnVtX3BhcnRpdGlvbnMgLyBudW1fbm9kZXMpOworCiAJ LyoKIAkgKiBJbml0aWFsaXplIHRoZSBzaGFyZWQgYnVmZmVyIGxvb2t1cCBoYXNodGFibGUu CiAJICoKQEAgLTQ4NCw3ICs2OTEsOCBAQCBTdHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0 KQogCSAqLwogCVN0cmF0ZWd5Q29udHJvbCA9IChCdWZmZXJTdHJhdGVneUNvbnRyb2wgKikK IAkJU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgU3RyYXRlZ3kgU3RhdHVzIiwKLQkJCQkJCXNp emVvZihCdWZmZXJTdHJhdGVneUNvbnRyb2wpLAorCQkJCQkJTUFYQUxJR04ob2Zmc2V0b2Yo QnVmZmVyU3RyYXRlZ3lDb250cm9sLCBmcmVlbGlzdHMpKSArCisJCQkJCQlNQVhBTElHTihz aXplb2YoQnVmZmVyU3RyYXRlZ3lGcmVlbGlzdCkgKiBudW1fcGFydGl0aW9ucyksCiAJCQkJ CQkmZm91bmQpOwogCiAJaWYgKCFmb3VuZCkKQEAgLTQ5NCwxMyArNzAyLDEwIEBAIFN0cmF0 ZWd5SW5pdGlhbGl6ZShib29sIGluaXQpCiAJCSAqLwogCQlBc3NlcnQoaW5pdCk7CiAKLQkJ U3BpbkxvY2tJbml0KCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsK KwkJLyogcmVnaXN0ZXIgY2FsbGJhY2sgdG8gZHVtcCBzb21lIHN0YXRzIG9uIGV4aXQgKi8K KwkJYmVmb3JlX3NobWVtX2V4aXQoZnJlZWxpc3RfYmVmb3JlX3NobWVtX2V4aXQsIDApOwog Ci0JCS8qCi0JCSAqIEdyYWIgdGhlIHdob2xlIGxpbmtlZCBsaXN0IG9mIGZyZWUgYnVmZmVy cyBmb3Igb3VyIHN0cmF0ZWd5LiBXZQotCQkgKiBhc3N1bWUgaXQgd2FzIHByZXZpb3VzbHkg c2V0IHVwIGJ5IEJ1ZmZlck1hbmFnZXJTaG1lbUluaXQoKS4KLQkJICovCi0JCVN0cmF0ZWd5 Q29udHJvbC0+Zmlyc3RGcmVlQnVmZmVyID0gMDsKKwkJU3BpbkxvY2tJbml0KCZTdHJhdGVn eUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsKIAogCQkvKiBJbml0aWFsaXplIHRo ZSBjbG9jayBzd2VlcCBwb2ludGVyICovCiAJCXBnX2F0b21pY19pbml0X3UzMigmU3RyYXRl Z3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLCAwKTsKQEAgLTUxMSw2ICs3MTYsNTIgQEAg U3RyYXRlZ3lJbml0aWFsaXplKGJvb2wgaW5pdCkKIAogCQkvKiBObyBwZW5kaW5nIG5vdGlm aWNhdGlvbiAqLwogCQlTdHJhdGVneUNvbnRyb2wtPmJnd3Byb2NubyA9IC0xOworCisJCS8q IGluaXRpYWxpemUgdGhlIHBhcnRpdGlvbmVkIGNsb2Nrc3dlZXAgKi8KKwkJU3RyYXRlZ3lD b250cm9sLT5udW1fcGFydGl0aW9ucyA9IG51bV9wYXJ0aXRpb25zOworCQlTdHJhdGVneUNv bnRyb2wtPm51bV9ub2RlcyA9IG51bV9ub2RlczsKKwkJU3RyYXRlZ3lDb250cm9sLT5udW1f cGFydGl0aW9uc19wZXJfbm9kZSA9IG51bV9wYXJ0aXRpb25zX3Blcl9ub2RlOworCisJCS8q CisJCSAqIFJlYnVpbGQgdGhlIGZyZWVsaXN0IC0gcmlnaHQgbm93IGFsbCBidWZmZXJzIGFy ZSBpbiBvbmUgaHVnZSBsaXN0LAorCQkgKiB3ZSB3YW50IHRvIHJld29yayB0aGF0IGludG8g bXVsdGlwbGUgbGlzdHMuIFN0YXJ0IGJ5IGluaXRpYWxpemluZworCQkgKiB0aGUgc3RyYXRl Z3kgdG8gaGF2ZSBlbXB0eSBsaXN0cy4KKwkJICovCisJCWZvciAoaW50IG5mcmVlbGlzdCA9 IDA7IG5mcmVlbGlzdCA8IG51bV9wYXJ0aXRpb25zOyBuZnJlZWxpc3QrKykKKwkJeworCQkJ aW50CQkJbm9kZSwKKwkJCQkJCW51bV9idWZmZXJzLAorCQkJCQkJZmlyc3RfYnVmZmVyLAor CQkJCQkJbGFzdF9idWZmZXI7CisKKwkJCUJ1ZmZlclN0cmF0ZWd5RnJlZWxpc3QgKmZyZWVs aXN0OworCisJCQlmcmVlbGlzdCA9ICZTdHJhdGVneUNvbnRyb2wtPmZyZWVsaXN0c1tuZnJl ZWxpc3RdOworCisJCQlmcmVlbGlzdC0+Zmlyc3RGcmVlQnVmZmVyID0gRlJFRU5FWFRfRU5E X09GX0xJU1Q7CisKKwkJCVNwaW5Mb2NrSW5pdCgmZnJlZWxpc3QtPmZyZWVsaXN0X2xvY2sp OworCisJCQkvKiBnZXQgaW5mbyBhYm91dCB0aGUgYnVmZmVyIHBhcnRpdGlvbiAqLworCQkJ QnVmZmVyUGFydGl0aW9uR2V0KG5mcmVlbGlzdCwgJm5vZGUsCisJCQkJCQkJICAgJm51bV9i dWZmZXJzLCAmZmlyc3RfYnVmZmVyLCAmbGFzdF9idWZmZXIpOworCisJCQkvKgorCQkJICog V2FsayB0aHJvdWdoIGJ1ZmZlcnMgZm9yIGVhY2ggcGFydGl0aW9uLCBhZGQgdGhlbSB0byB0 aGUgbGlzdC4KKwkJCSAqIFdhbGsgZnJvbSB0aGUgZW5kLCBiZWNhdXNlIHdlJ3JlIGFkZGlu ZyB0aGUgYnVmZmVycyB0byB0aGUKKwkJCSAqIGJlZ2lubmluZy4KKwkJCSAqLworCisJCQlm b3IgKGludCBpID0gbGFzdF9idWZmZXI7IGkgPj0gZmlyc3RfYnVmZmVyOyBpLS0pCisJCQl7 CisJCQkJQnVmZmVyRGVzYyAqYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihpKTsKKworCQkJ CS8qIGFkZCB0byB0aGUgZnJlZWxpc3QgKi8KKwkJCQlidWYtPmZyZWVOZXh0ID0gZnJlZWxp c3QtPmZpcnN0RnJlZUJ1ZmZlcjsKKwkJCQlmcmVlbGlzdC0+Zmlyc3RGcmVlQnVmZmVyID0g aTsKKwkJCX0KKworCQl9CiAJfQogCWVsc2UKIAkJQXNzZXJ0KCFpbml0KTsKQEAgLTg0Nywz ICsxMDk4LDQ3IEBAIFN0cmF0ZWd5UmVqZWN0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IHN0cmF0ZWd5LCBCdWZmZXJEZXNjICpidWYsIGJvb2wgZnJvbV9yCiAKIAlyZXR1cm4gdHJ1 ZTsKIH0KKwordm9pZAorRnJlZWxpc3RQYXJ0aXRpb25HZXRJbmZvKGludCBpZHgsIHVpbnQ2 NCAqY29uc3VtZWQsIHVpbnQ2NCAqcmVtYWluLCB1aW50NjQgKmFjdHVhbGx5X2ZyZWUpCit7 CisJQnVmZmVyU3RyYXRlZ3lGcmVlbGlzdCAqZnJlZWxpc3Q7CisJaW50CQkJY3VyOworCisJ Lyogc3RhdHMgKi8KKwl1aW50NjQJCWNudF9yZW1haW4gPSAwOworCXVpbnQ2NAkJY250X2Zy ZWUgPSAwOworCisJQXNzZXJ0KChpZHggPj0gMCkgJiYgKGlkeCA8IFN0cmF0ZWd5Q29udHJv bC0+bnVtX3BhcnRpdGlvbnMpKTsKKworCWZyZWVsaXN0ID0gJlN0cmF0ZWd5Q29udHJvbC0+ ZnJlZWxpc3RzW2lkeF07CisKKwkvKiBzdGF0ICovCisJU3BpbkxvY2tBY3F1aXJlKCZmcmVl bGlzdC0+ZnJlZWxpc3RfbG9jayk7CisKKwkqY29uc3VtZWQgPSBmcmVlbGlzdC0+Y29uc3Vt ZWQ7CisKKwljdXIgPSBmcmVlbGlzdC0+Zmlyc3RGcmVlQnVmZmVyOworCXdoaWxlIChjdXIg Pj0gMCkKKwl7CisJCXVpbnQzMgkJbG9jYWxfYnVmX3N0YXRlOworCQlCdWZmZXJEZXNjICpi dWY7CisKKwkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihjdXIpOworCisJCWNudF9yZW1h aW4rKzsKKworCQlsb2NhbF9idWZfc3RhdGUgPSBMb2NrQnVmSGRyKGJ1Zik7CisKKwkJaWYg KCEobG9jYWxfYnVmX3N0YXRlICYgQk1fVEFHX1ZBTElEKSkKKwkJCWNudF9mcmVlKys7CisK KwkJVW5sb2NrQnVmSGRyKGJ1ZiwgbG9jYWxfYnVmX3N0YXRlKTsKKworCQljdXIgPSBidWYt PmZyZWVOZXh0OworCX0KKwlTcGluTG9ja1JlbGVhc2UoJmZyZWVsaXN0LT5mcmVlbGlzdF9s b2NrKTsKKworCSpyZW1haW4gPSBjbnRfcmVtYWluOworCSphY3R1YWxseV9mcmVlID0gY250 X2ZyZWU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IGY1MzU5ZGIzNjU2 Li5hMTFiYzcxYTM4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9i YWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTE0OCw2 ICsxNDgsNyBAQCBpbnQJCQlNYXhCYWNrZW5kcyA9IDA7CiAvKiBOVU1BIHN0dWZmICovCiBi b29sCQludW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZSA9IGZhbHNlOwogYm9vbAkJbnVtYV9sb2Nh bGFsbG9jID0gZmFsc2U7Citib29sCQludW1hX3BhcnRpdGlvbl9mcmVlbGlzdCA9IGZhbHNl OwogCiAvKiBHVUMgcGFyYW1ldGVycyBmb3IgdmFjdXVtICovCiBpbnQJCQlWYWN1dW1CdWZm ZXJVc2FnZUxpbWl0ID0gMjA0ODsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMK aW5kZXggYTIxZjIwODAwZmIuLjA1NTJlZDYyY2M3IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYwpAQCAtMjEzNiw2ICsyMTM2LDE2IEBAIHN0cnVjdCBjb25maWdfYm9v bCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJ eworCQl7Im51bWFfcGFydGl0aW9uX2ZyZWVsaXN0IiwgUEdDX1BPU1RNQVNURVIsIERFVkVM T1BFUl9PUFRJT05TLAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGJ1ZmZlciBmcmVlbGlz dHMgdG8gYmUgcGFydGl0aW9uZWQgcGVyIE5VTUEgbm9kZS4iKSwKKwkJCWdldHRleHRfbm9v cCgiV2hlbiBlbmFibGVkLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBmcmVlbGlzdCBwZXIgTlVN QSBub2RlLiIpLAorCQl9LAorCQkmbnVtYV9wYXJ0aXRpb25fZnJlZWxpc3QsCisJCWZhbHNl LAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwogCXsKIAkJeyJzeW5jX3JlcGxpY2F0aW9u X3Nsb3RzIiwgUEdDX1NJR0hVUCwgUkVQTElDQVRJT05fU1RBTkRCWSwKIAkJCWdldHRleHRf bm9vcCgiRW5hYmxlcyBhIHBoeXNpY2FsIHN0YW5kYnkgdG8gc3luY2hyb25pemUgbG9naWNh bCBmYWlsb3ZlciByZXBsaWNhdGlvbiBzbG90cyBmcm9tIHRoZSBwcmltYXJ5IHNlcnZlci4i KSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUv bWlzY2FkbWluLmgKaW5kZXggNjkyODcxYTQwMWYuLjY2YmFmMmJmMzNlIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4u aApAQCAtMTgwLDYgKzE4MCw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3BhcmFs bGVsX3dvcmtlcnM7CiAKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIG51bWFfYnVmZmVyc19p bnRlcmxlYXZlOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgbnVtYV9sb2NhbGFsbG9jOwor ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgbnVtYV9wYXJ0aXRpb25fZnJlZWxpc3Q7CiAKIGV4 dGVybiBQR0RMTElNUE9SVCBpbnQgY29tbWl0X3RpbWVzdGFtcF9idWZmZXJzOwogZXh0ZXJu IFBHRExMSU1QT1JUIGludCBtdWx0aXhhY3RfbWVtYmVyX2J1ZmZlcnM7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9i dWZtZ3IuaAppbmRleCBkZWFmNGYxOWZhNC4uZGYxMjcyNzQxOTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9i dWZtZ3IuaApAQCAtMzQ3LDcgKzM0Nyw5IEBAIGV4dGVybiBpbnQJR2V0QWNjZXNzU3RyYXRl Z3lCdWZmZXJDb3VudChCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CiBleHRlcm4g aW50CUdldEFjY2Vzc1N0cmF0ZWd5UGluTGltaXQoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3kpOwogCiBleHRlcm4gdm9pZCBGcmVlQWNjZXNzU3RyYXRlZ3koQnVmZmVyQWNjZXNz U3RyYXRlZ3kgc3RyYXRlZ3kpOwotCitleHRlcm4gdm9pZCBGcmVlbGlzdFBhcnRpdGlvbkdl dEluZm8oaW50IGlkeCwKKwkJCQkJCQkJCSB1aW50NjQgKmNvbnN1bWVkLCB1aW50NjQgKnJl bWFpbiwKKwkJCQkJCQkJCSB1aW50NjQgKmFjdHVhbGx5X2ZyZWUpOwogCiAvKiBpbmxpbmUg ZnVuY3Rpb25zICovCiAKLS0gCjIuNTAuMQoK --------------8xriSvZLhsgPmdy7CNlM8G85 Content-Type: text/x-patch; charset=UTF-8; name="v20250807-0005-freelist-Don-t-track-tail-of-a-freelist.patch" Content-Disposition: attachment; filename*0="v20250807-0005-freelist-Don-t-track-tail-of-a-freelist.patch" Content-Transfer-Encoding: base64 RnJvbSBlMGZhNzcxNTMxYjkyZGMwOTZmZDVhMTU4MGRlZDMyMjQ1MjRmYTY1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwu ZGU+CkRhdGU6IE1vbiwgMTQgT2N0IDIwMjQgMTQ6MTA6MTMgLTA0MDAKU3ViamVjdDogW1BB VENIIHYyMDI1MDgwNyAwNS8xMV0gZnJlZWxpc3Q6IERvbid0IHRyYWNrIHRhaWwgb2YgYSBm cmVlbGlzdAoKVGhlIGZyZWVsaXN0IHRhaWwgaXNuJ3QgY3VycmVudGx5IHVzZWQsIG1ha2lu ZyBpdCB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4KU28ganVzdCBkb24ndCBkbyB0aGF0LgotLS0K IHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgfCA5IC0tLS0tLS0tLQog MSBmaWxlIGNoYW5nZWQsIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL2ZyZWVsaXN0LmMKaW5kZXggMDE5MDliZTAyNzIuLmUwNDY1MjZjMTQ5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKQEAgLTQwLDEyICs0MCw2IEBAIHR5 cGVkZWYgc3RydWN0CiAJcGdfYXRvbWljX3VpbnQzMiBuZXh0VmljdGltQnVmZmVyOwogCiAJ aW50CQkJZmlyc3RGcmVlQnVmZmVyOwkvKiBIZWFkIG9mIGxpc3Qgb2YgdW51c2VkIGJ1ZmZl cnMgKi8KLQlpbnQJCQlsYXN0RnJlZUJ1ZmZlcjsgLyogVGFpbCBvZiBsaXN0IG9mIHVudXNl ZCBidWZmZXJzICovCi0KLQkvKgotCSAqIE5PVEU6IGxhc3RGcmVlQnVmZmVyIGlzIHVuZGVm aW5lZCB3aGVuIGZpcnN0RnJlZUJ1ZmZlciBpcyAtMSAodGhhdCBpcywKLQkgKiB3aGVuIHRo ZSBsaXN0IGlzIGVtcHR5KQotCSAqLwogCiAJLyoKIAkgKiBTdGF0aXN0aWNzLiAgVGhlc2Ug Y291bnRlcnMgc2hvdWxkIGJlIHdpZGUgZW5vdWdoIHRoYXQgdGhleSBjYW4ndApAQCAtMzcx LDggKzM2NSw2IEBAIFN0cmF0ZWd5RnJlZUJ1ZmZlcihCdWZmZXJEZXNjICpidWYpCiAJaWYg KGJ1Zi0+ZnJlZU5leHQgPT0gRlJFRU5FWFRfTk9UX0lOX0xJU1QpCiAJewogCQlidWYtPmZy ZWVOZXh0ID0gU3RyYXRlZ3lDb250cm9sLT5maXJzdEZyZWVCdWZmZXI7Ci0JCWlmIChidWYt PmZyZWVOZXh0IDwgMCkKLQkJCVN0cmF0ZWd5Q29udHJvbC0+bGFzdEZyZWVCdWZmZXIgPSBi dWYtPmJ1Zl9pZDsKIAkJU3RyYXRlZ3lDb250cm9sLT5maXJzdEZyZWVCdWZmZXIgPSBidWYt PmJ1Zl9pZDsKIAl9CiAKQEAgLTUwOSw3ICs1MDEsNiBAQCBTdHJhdGVneUluaXRpYWxpemUo Ym9vbCBpbml0KQogCQkgKiBhc3N1bWUgaXQgd2FzIHByZXZpb3VzbHkgc2V0IHVwIGJ5IEJ1 ZmZlck1hbmFnZXJTaG1lbUluaXQoKS4KIAkJICovCiAJCVN0cmF0ZWd5Q29udHJvbC0+Zmly c3RGcmVlQnVmZmVyID0gMDsKLQkJU3RyYXRlZ3lDb250cm9sLT5sYXN0RnJlZUJ1ZmZlciA9 IE5CdWZmZXJzIC0gMTsKIAogCQkvKiBJbml0aWFsaXplIHRoZSBjbG9jayBzd2VlcCBwb2lu dGVyICovCiAJCXBnX2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0Vmlj dGltQnVmZmVyLCAwKTsKLS0gCjIuNTAuMQoK --------------8xriSvZLhsgPmdy7CNlM8G85 Content-Type: text/x-patch; charset=UTF-8; name="v20250807-0004-NUMA-localalloc.patch" Content-Disposition: attachment; filename="v20250807-0004-NUMA-localalloc.patch" Content-Transfer-Encoding: base64 RnJvbSA3ZmVjM2IzMzY1MmU5MjkwM2EyMDI3NjUzNjQ3N2RmMzNiZTcyMmM4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyMiBNYXkgMjAyNSAxODoyNzowNiArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwODA3IDA0LzExXSBOVU1BOiBsb2NhbGFsbG9jCgpTZXQgdGhlIGRlZmF1bHQgYWxs b2NhdGlvbiBwb2xpY3kgdG8gImxvY2FsYWxsb2MiLCB3aGljaCBtZWFucyBmcm9tIHRoZQps b2NhbCBOVU1BIG5vZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBwcm9jZXNzLXByaXZhdGUgbWVt b3J5LCB3aGljaCBpcyBub3QKZ29pbmcgdG8gYmUgc2hhcmVkIHdpdGggb3RoZXIgbm9kZXMs IGFuZCBpcyByZWxhdGl2ZWx5IHNob3J0LWxpdmVkIChzbwp3ZSdyZSB1bmxpa2VseSB0byBo YXZlIGlzc3VlcyBpZiB0aGUgcHJvY2VzcyBnZXRzIG1vdmVkIGJ5IHNjaGVkdWxlcikuCgpU aGlzIHNldHMgZGVmYXVsdCBmb3IgdGhlIHdob2xlIHByb2Nlc3MsIGZvciBhbGwgZnV0dXJl IGFsbG9jYXRpb25zLiBCdXQKdGhhdCdzIGZpbmUsIHdlJ3ZlIGFscmVhZHkgcG9wdWxhdGVk IHRoZSBzaGFyZWQgbWVtb3J5IGVhcmxpZXIgKGJ5CmludGVybGVhdmluZyBpdCBleHBsaWNp dGx5KS4gT3RoZXJ3aXNlIHdlJ2QgdHJpZ2dlciBwYWdlIGZhdWx0IGFuZCBpdCdkCmJlIGFs bG9jYXRlZCBvbiBsb2NhbCBub2RlLgoKWFhYIFRoaXMgcGF0Y2ggbWF5IG5vdCBiZSBuZWNl c3NhcnksIGFzIHdlIG5vdyBsb2NhdGUgbWVtb3J5IHRvIG5vZGVzCnVzaW5nIGV4cGxpY2l0 IG51bWFfdG9ub2RlX21lbW9yeSgpIGNhbGxzLCBhbmQgbm90IGJ5IGludGVybGVhdmluZy4g QnV0Cml0J3MgdXNlZnVsIGZvciBleHBlcmltZW50cyBkdXJpbmcgZGV2ZWxvcG1lbnQsIHNv IEknbSBrZWVwaW5nIGl0LgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5j ICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jICAgfCAxNyAr KysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMg fCAxMCArKysrKysrKysrCiBzcmMvaW5jbHVkZS9taXNjYWRtaW4uaCAgICAgICAgICAgICB8 ICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv aW5pdC9nbG9iYWxzLmMKaW5kZXggODc2Y2I2NGNmNjYuLmY1MzU5ZGIzNjU2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9pbml0L2dsb2JhbHMuYwpAQCAtMTQ3LDYgKzE0Nyw3IEBAIGludAkJCU1heEJh Y2tlbmRzID0gMDsKIAogLyogTlVNQSBzdHVmZiAqLwogYm9vbAkJbnVtYV9idWZmZXJzX2lu dGVybGVhdmUgPSBmYWxzZTsKK2Jvb2wJCW51bWFfbG9jYWxhbGxvYyA9IGZhbHNlOwogCiAv KiBHVUMgcGFyYW1ldGVycyBmb3IgdmFjdXVtICovCiBpbnQJCQlWYWN1dW1CdWZmZXJVc2Fn ZUxpbWl0ID0gMjA0ODsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlz Y2luaXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwppbmRleCA2NWQ4 Y2JmYWVkNS4uZDk4NmExZDE4Y2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2lu aXQvbWlzY2luaXQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMK QEAgLTI4LDYgKzI4LDEwIEBACiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiAjaW5jbHVkZSA8 dXRpbWUuaD4KIAorI2lmZGVmIFVTRV9MSUJOVU1BCisjaW5jbHVkZSA8bnVtYS5oPgorI2Vu ZGlmCisKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKQEAgLTE2 NCw2ICsxNjgsMTkgQEAgSW5pdFBvc3RtYXN0ZXJDaGlsZCh2b2lkKQogCQkJCShlcnJjb2Rl X2Zvcl9zb2NrZXRfYWNjZXNzKCksCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiY291bGQgbm90 IHNldCBwb3N0bWFzdGVyIGRlYXRoIG1vbml0b3JpbmcgcGlwZSB0byBGRF9DTE9FWEVDIG1v ZGU6ICVtIikpKTsKICNlbmRpZgorCisjaWZkZWYgVVNFX0xJQk5VTUEKKworCS8qCisJICog U2V0IHRoZSBkZWZhdWx0IGFsbG9jYXRpb24gcG9saWN5IHRvIGxvY2FsIG5vZGUsIHdoZXJl IHRoZSB0YXNrIGlzCisJICogZXhlY3V0aW5nIGF0IHRoZSB0aW1lIG9mIGEgcGFnZSBmYXVs dC4KKwkgKgorCSAqIFhYWCBJIGJlbGlldmUgdGhpcyBpcyBub3QgbmVjZXNzYXJ5LCBub3cg dGhhdCB3ZSBkb24ndCB1c2UgYXV0b21hdGljCisJICogaW50ZXJsZWF2aW5nIChudW1hX3Nl dF9pbnRlcmxlYXZlX21hc2spLgorCSAqLworCWlmIChudW1hX2xvY2FsYWxsb2MpCisJCW51 bWFfc2V0X2xvY2FsYWxsb2MoKTsKKyNlbmRpZgogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y190YWJsZXMuYwppbmRleCA5NTcwMDg3YWE2MC4uYTIxZjIwODAwZmIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC0yMTI2LDYgKzIxMjYsMTYgQEAg c3RydWN0IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJTlVMTCwgTlVM TCwgTlVMTAogCX0sCiAKKwl7CisJCXsibnVtYV9sb2NhbGFsbG9jIiwgUEdDX1BPU1RNQVNU RVIsIERFVkVMT1BFUl9PUFRJT05TLAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHNldHRp bmcgdGhlIGRlZmF1bHQgYWxsb2NhdGlvbiBwb2xpY3kgdG8gbG9jYWwgbm9kZS4iKSwKKwkJ CWdldHRleHRfbm9vcCgiV2hlbiBlbmFibGVkLCBhbGxvY2F0ZSBmcm9tIHRoZSBub2RlIHdo ZXJlIHRoZSB0YXNrIGlzIGV4ZWN1dGluZy4iKSwKKwkJfSwKKwkJJm51bWFfbG9jYWxhbGxv YywKKwkJZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7InN5bmNf cmVwbGljYXRpb25fc2xvdHMiLCBQR0NfU0lHSFVQLCBSRVBMSUNBVElPTl9TVEFOREJZLAog CQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGEgcGh5c2ljYWwgc3RhbmRieSB0byBzeW5jaHJv bml6ZSBsb2dpY2FsIGZhaWxvdmVyIHJlcGxpY2F0aW9uIHNsb3RzIGZyb20gdGhlIHByaW1h cnkgc2VydmVyLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9z cmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCAwMTRhNjA3OWFmMi4uNjkyODcxYTQwMWYg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRl L21pc2NhZG1pbi5oCkBAIC0xNzksNiArMTc5LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBtYXhfd29ya2VyX3Byb2Nlc3NlczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3Bh cmFsbGVsX3dvcmtlcnM7CiAKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIG51bWFfYnVmZmVy c19pbnRlcmxlYXZlOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgbnVtYV9sb2NhbGFsbG9j OwogCiBleHRlcm4gUEdETExJTVBPUlQgaW50IGNvbW1pdF90aW1lc3RhbXBfYnVmZmVyczsK IGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbXVsdGl4YWN0X21lbWJlcl9idWZmZXJzOwotLSAK Mi41MC4xCgo= --------------8xriSvZLhsgPmdy7CNlM8G85 Content-Type: text/x-patch; charset=UTF-8; name="v20250807-0003-NUMA-interleaving-buffers.patch" Content-Disposition: attachment; filename="v20250807-0003-NUMA-interleaving-buffers.patch" Content-Transfer-Encoding: base64 RnJvbSBiYmU2NDI3YjRlMGU4NzFiY2I3YjJjYzRjZTExYWQ4YWJhNjI3OTljIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAyOCBKdWwgMjAyNSAxNDowMTozNyArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwODA3IDAzLzExXSBOVU1BOiBpbnRlcmxlYXZpbmcgYnVmZmVycwoKRW5zdXJlIHNo YXJlZCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgZnJvbSBhbGwgTlVNQSBub2RlcywgaW4gYSBi YWxhbmNlZAp3YXksIGluc3RlYWQgb2YganVzdCB1c2luZyB0aGUgbm9kZSB3aGVyZSBQb3N0 Z3JlcyBpbml0aWFsbHkgc3RhcnRzLCBvcgp3aGVyZSB0aGUga2VybmVsIGRlY2lkZXMgdG8g bWlncmF0ZSB0aGUgcGFnZSwgZXRjLiBXaXRoIHByZS13YXJtaW5nCnBlcmZvcm1lZCBieSBh IHNpbmdsZSBiYWNrZW5kLCB0aGlzIGNhbiBlYXNpbHkgcmVzdWx0IGluIHNldmVyZWx5CnVu YmFsYW5jZWQgbWVtb3J5IGRpc3RyaWJ1dGlvbiAod2l0aCBtb3N0IGZyb20gYSBzaW5nbGUg TlVNQSBub2RlKS4KClRoZSBrZXJuZWwgd291bGQgZXZlbnR1YWxseSBtb3ZlIHNvbWUgb2Yg dGhlIG1lbW9yeSB0byBvdGhlciBub2RlcwoodGhhbmtzIHRvIHpvbmVfcmVjbGFpbSksIGJ1 dCB0aGF0IHRlbmRzIHRvIHRha2UgYSBsb25nIHRpbWUuIFNvIHRoaXMKcGF0Y2ggaW1wcm92 ZXMgcHJlZGljdGFiaWxpdHksIHJlZHVjZXMgdGhlIHRpbWUgbmVlZGVkIGZvciB3YXJtdXAK ZHVyaW5nIGJlbmNobWFya2luZywgZXRjLiAgSXQncyBsZXNzIGRlcGVuZGVudCBvbiB3aGF0 IHRoZSBDUFUKc2NoZWR1bGVyIGRvZXMsIGV0Yy4KCkZ1cnRoZXJtb3JlLCB0aGUgYnVmZmVy cyBhcmUgbWFwcGVkIHRvIE5VTUEgbm9kZXMgaW4gYSBkZXRlcm1pbmlzdGljCndheSwgc28g dGhpcyBhbHNvIGFsbG93cyBmdXJ0aGVyIGltcHJvdmVtZW50cyBsaWtlIGJhY2tlbmRzIHVz aW5nCmJ1ZmZlcnMgZnJvbSB0aGUgc2FtZSBOVU1BIG5vZGUuCgpUaGUgZWZmZWN0IGlzIHNp bWlsYXIgdG8KCiAgICAgbnVtYWN0bCAtLWludGVybGVhdmU9YWxsCgpidXQgdGhlcmUncyBh IG51bWJlciBvZiBpbXBvcnRhbnQgZGlmZmVyZW5jZXMuCgpGaXJzdGx5LCBpdCdzIGFwcGxp ZWQgb25seSB0byBzaGFyZWQgYnVmZmVycyAoYW5kIGFsc28gdG8gZGVzY3JpcHRvcnMpLApu b3QgdG8gdGhlIHdob2xlIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4gSXQncyBub3QgY2xlYXIg d2UnZCB3YW50IHRvIHVzZQppbnRlcmxlYXZpbmcgZm9yIGFsbCBwYXJ0cywgc3RvcmluZyBl bnRyaWVzIHdpdGggZGlmZmVyZW50IHNpemVzIGFuZApsaWZlIGN5Y2xlcyAoZS5nLiBQcm9j QXJyYXkgbWF5IG5lZWQgZGlmZmVyZW50IGFwcHJvYWNoKS4KClNlY29uZGx5LCBpdCBjb25z aWRlcnMgdGhlIHBhZ2UgYW5kIGJsb2NrIHNpemUsIGFuZCBtYWtlcyBzdXJlIHRvIGFsd2F5 cwpwdXQgdGhlIHdob2xlIGJ1ZmZlciBvbiBhIHNpbmdsZSBOVU1BIG5vZGUgKGV2ZW4gaWYg aXQgaGFwcGVucyB0byB1c2UKbXVsdGlwbGUgbWVtb3J5IHBhZ2VzKSwgYW5kIHRvIGtlZXAg dGhlIGJ1ZmZlciBhbmQgaXQncyBkZXNjcmlwdG9yIG9uCnRoZSBzYW1lIE5VTUEgbm9kZS4g VGhlIHNlcmlvdXNuZXNzL2xpa2VsaWhvb2Qgb2YgdGhlc2UgaXNzdWVzIGRlcGVuZHMKb24g dGhlIG1lbW9yeSBwYWdlIHNpemUgKHJlZ3VsYXIgdnMuIGh1Z2UgcGFnZXMpLgoKVGhlIG1h cHBpbmcgb2YgbWVtb3J5IHRvIE5VTUEgbm9kZXMgaGFwcGVucyBpbiBsYXJnZXIgY2h1bmtz LiBUaGlzIGlzCnJlcXVpcmVkIHRvIGhhbmRsZSBidWZmZXIgZGVzY3JpcHRvcnMgKHdoaWNo IGFyZSBzbWFsbGVyIHRoYW4gYnVmZmVycyksCmFuZCBzbyBtYW55IG1vcmUgZml0IG9udG8g YSBzaW5nbGUgbWVtb3J5IHBhZ2UuCgpUaGUgbnVtYmVyIG9mIGJ1ZmZlciBkZXNjcmlwdG9y cyBwZXIgbWVtb3J5IHBhZ2UgZGV0ZXJtaW5lcyB0aGUgc21hbGxlc3QKbnVtYmVyIG9mIGJ1 ZmZlcnMgdGhhdCBjYW4gYmUgcGxhY2VkIG9uIGEgTlVNQSBub2RlLiBXaXRoIDJNQiBodWdl IHBhZ2VzCnRoaXMgaXMgMjU2TUIsIHdpdGggNEtCIHBhZ2VzIHRoaXMgaXMgNTEyS0IpLiBO b2RlcyBnZXQgYSBtdWx0aXBsZSBvZgp0aGlzLCBhbmQgd2UgdHJ5IHRvIGtlZXAgdGhlIG5v ZGVzIGJhbGFuY2VkIC0gdGhlIGxhc3Qgbm9kZSBjYW4gZ2V0IGxlc3MKbWVtb3J5LCB0aG91 Z2guCgpUaGUgImJ1ZmZlciBwYXJ0aXRpb25zIiBtYXkgbm90IGJlIDE6MSB3aXRoIE5VTUEg bm9kZXMuIFRoZXJlJ3MgYQptaW5pbWFsIG51bWJlciBvZiBwYXJ0aXRpb25zIChkZWZhdWx0 OiA0KSB0aGF0IHdpbGwgYmUgY3JlYXRlZCBldmVuIHdpdGgKZmV3ZXIgTlVNQSBub2Rlcywg b3Igbm8gTlVNQSBhdCBhbGwuIEVhY2ggbm9kZSBnZXRzIHRoZSBzYW1lIG51bWJlciBvZgpw YXJ0aXRpb25zLCB0byBrZWVwIHRoaW5ncyBzaW1wbGUuIEZvciBleGFtcGxlLCB3aXRoIDIg bm9kZXMgdGhlcmUnbGwgYmUKNCBwYXJ0aXRpb25zLCB3aXRoIGVhY2ggbm9kZSBnZXR0aW5n IDIgb2YgdGhlbS4gV2l0aCAzIG5vZGVzIHRoZXJlJ2xsIGJlCjYgcGFydGl0aW9ucyAoYWdh aW4sIDIgcGVyIG5vZGUpLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaW1wbGUgInJlZ2lz dHJ5IiBvZiBidWZmZXIgcGFydGl0aW9ucywga2VlcGluZwp0cmFjayBvZiB0aGUgZmlyc3Qv bGFzdCBidWZmZXIsIE5VTUEgbm9kZSwgZXRjLiBUaGlzIHNlcnZlcyBhcyBhIHNvdXJjZQpv ZiB0cnV0aCwgYm90aCBmb3IgdGhpcyBwYXRjaCBhbmQgZm9yIGxhdGVyIHBhdGNoZXMgYnVp bGRpbmcgb24gdGhpcwpzYW1lIGJ1ZmZlciBwYXJ0aXRpb24gc3RydWN0dXJlLgoKV2l0aCB0 aGUgZmVhdHVyZSBkaXNhYmxlZCAoR1VDIHNldCB0byAnb2ZmJyksIHRoZXJlJ2xsIGJlIGEg c2luZ2xlCnBhcnRpdGlvbiBmb3IgYWxsIHRoZSBidWZmZXJzIChhbmQgaXQgd29uJ3QgYmUg bWFwcGVkIHRvIGEgTlVNQSBub2RlKS4KCk5vdGVzOgoKKiBUaGUgZmVhdHVyZSBpcyBlbmFi bGVkIGJ5IG51bWFfYnVmZmVyc19pbnRlcmxlYXZlIEdVQyAoZGVmYXVsdDogZmFsc2UpCgoq IEl0J3Mgbm90IGNsZWFyIHdlIHdhbnQgdG8gZW5hYmxlIGludGVybGVhdmluZyBmb3IgYWxs IHNoYXJlZCBtZW1vcnkuCiAgV2UgcHJvYmFibHkgd2FudCB0aGF0IGZvciBzaGFyZWQgYnVm ZmVycywgYnV0IG1heWJlIG5vdCBmb3IgUHJvY0FycmF5CiAgb3IgZnJlZWxpc3RzLgoKKiBT aW1pbGFyIHF1ZXN0aW9ucyBhcmUgYWJvdXQgaHVnZSBwYWdlcyAtIGluIGdlbmVyYWwgaXQn cyBhIGdvb2QgaWRlYSwKICBidXQgbWF5YmUgaXQncyBub3QgcXVpdGUgZ29vZCBmb3IgUHJv Y0FycmF5LiBJdCdzIHNvbWV3aGF0ZSBzZXBhcmF0ZQogIGZyb20gTlVNQSwgYnV0IG5vdCBl bnRpcmVseSBiZWNhdXNlIE5VTUEgd29ya3Mgb24gcGFnZSBncmFudWxhcml0eS4KICBQR1BS T0MgZW50cmllcyBhcmUgfjhLQiwgc28gdG9vIGxhcmdlIGZvciBpbnRlcmxlYXZpbmcgd2l0 aCA0SyBwYWdlcywKICBhcyB3ZSBkb24ndCB3YW50IHRvIHNwbGl0IHRoZSBlbnRyeSB0byBt dWx0aXBsZSBub2Rlcy4gQnV0IGNvdWxkIGJlCiAgZG9uZSBleHBsaWNpdGx5LCBieSBzcGVj aWZ5aW5nIHdoaWNoIG5vZGUgdG8gdXNlIGZvciB0aGUgcGFnZXMuCgoqIFdlIGNvdWxkIHBh cnRpdGlvbiBQcm9jQXJyYXksIHdpdGggb25lIHBhcnRpdGlvbiBwZXIgTlVNQSBub2RlLCBh bmQKICB0aGVuIGF0IGNvbm5lY3Rpb24gdGltZSBwaWNrIGEgbm9kZSBmcm9tIHRoZSBzYW1l IG5vZGUuIFRoZSBwcm9jZXNzCiAgY291bGQgbWlncmF0ZSB0byBzb21lIG90aGVyIG5vZGUg bGF0ZXIsIGVzcGVjaWFsbHkgZm9yIGxvbmctbGl2ZWQKICBjb25uZWN0aW9ucywgYnV0IHRo ZXJlJ3Mgbm8gcGVyZmVjdCBzb2x1dGlvbiwgTWF5YmUgd2UgY291bGQgc2V0CiAgYWZmaW5p dHkgdG8gY29yZXMgZnJvbSB0aGUgc2FtZSBub2RlLCBvciBzb21ldGhpbmcgbGlrZSB0aGF0 PwotLS0KIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFrZWZpbGUgICAgICAgICAgICAgICB8 ICAgMiArLQogLi4uL3BnX2J1ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwgICAgICAgICAgICAg IHwgIDI2ICsKIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUuY29udHJv bCB8ICAgMiArLQogY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdl cy5jIHwgIDkyICsrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyAg ICAgICAgIHwgNjI2ICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9nbG9iYWxzLmMgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAxMCArCiBzcmMvaW5jbHVkZS9taXNjYWRt aW4uaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZfaW50ZXJuYWxzLmggICAgICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmbWdyLmggICAgICAgICAgICAgICAgICB8ICAxNSArCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDIgKwogMTEgZmlsZXMgY2hhbmdl ZCwgNzc1IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0tMS43LnNx bAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFrZWZpbGUgYi9jb250 cmliL3BnX2J1ZmZlcmNhY2hlL01ha2VmaWxlCmluZGV4IDVmNzQ4NTQzZTJlLi4wZTYxOGY2 NmFlYyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9NYWtlZmlsZQorKysg Yi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL01ha2VmaWxlCkBAIC05LDcgKzksNyBAQCBFWFRF TlNJT04gPSBwZ19idWZmZXJjYWNoZQogREFUQSA9IHBnX2J1ZmZlcmNhY2hlLS0xLjIuc3Fs IHBnX2J1ZmZlcmNhY2hlLS0xLjItLTEuMy5zcWwgXAogCXBnX2J1ZmZlcmNhY2hlLS0xLjEt LTEuMi5zcWwgcGdfYnVmZmVyY2FjaGUtLTEuMC0tMS4xLnNxbCBcCiAJcGdfYnVmZmVyY2Fj aGUtLTEuMy0tMS40LnNxbCBwZ19idWZmZXJjYWNoZS0tMS40LS0xLjUuc3FsIFwKLQlwZ19i dWZmZXJjYWNoZS0tMS41LS0xLjYuc3FsCisJcGdfYnVmZmVyY2FjaGUtLTEuNS0tMS42LnNx bCBwZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsCiBQR0ZJTEVERVNDID0gInBnX2J1ZmZl cmNhY2hlIC0gbW9uaXRvcmluZyBvZiBzaGFyZWQgYnVmZmVyIGNhY2hlIGluIHJlYWwtdGlt ZSIKIAogUkVHUkVTUyA9IHBnX2J1ZmZlcmNhY2hlIHBnX2J1ZmZlcmNhY2hlX251bWEKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0t MS43LnNxbCBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNi0t MS43LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmI5MDAz YzAxMWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1 ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwKQEAgLTAsMCArMSwyNiBAQAorLyogY29udHJpYi9w Z19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsICovCisKKy0tIGNv bXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBD UkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkFMVEVSIEVYVEVOU0lPTiBwZ19idWZmZXJj YWNoZSBVUERBVEUgVE8gJzEuNyciIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCistLSBS ZWdpc3RlciB0aGUgbmV3IGZ1bmN0aW9ucy4KK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9O IHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoKQorUkVUVVJOUyBTRVRPRiBSRUNPUkQKK0FT ICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucycKK0xBTkdV QUdFIEMgUEFSQUxMRUwgU0FGRTsKKworLS0gQ3JlYXRlIGEgdmlldyBmb3IgY29udmVuaWVu dCBhY2Nlc3MuCitDUkVBVEUgVklFVyBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zIEFTCisJ U0VMRUNUIFAuKiBGUk9NIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMoKSBBUyBQCisJKHBh cnRpdGlvbiBpbnRlZ2VyLAkJCS0tIHBhcnRpdGlvbiBpbmRleAorCSBudW1hX25vZGUgaW50 ZWdlciwJCQktLSBOVU1BIG5vZGUgb2YgdGhlIHBhcnRpdGlvb24KKwkgbnVtX2J1ZmZlcnMg aW50ZWdlciwJCS0tIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBwYXJ0aXRpb24KKwkgZmly c3RfYnVmZmVyIGludGVnZXIsCQktLSBmaXJzdCBidWZmZXIgb2YgcGFydGl0aW9uCisJIGxh c3RfYnVmZmVyIGludGVnZXIpOwkJLS0gbGFzdCBidWZmZXIgb2YgcGFydGl0aW9uCisKKy0t IERvbid0IHdhbnQgdGhlc2UgdG8gYmUgYXZhaWxhYmxlIHRvIHB1YmxpYy4KK1JFVk9LRSBB TEwgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcGFydGl0aW9ucygpIEZST00gUFVCTElD OworUkVWT0tFIEFMTCBPTiBwZ19idWZmZXJjYWNoZV9wYXJ0aXRpb25zIEZST00gUFVCTElD OworCitHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlv bnMoKSBUTyBwZ19tb25pdG9yOworR1JBTlQgU0VMRUNUIE9OIHBnX2J1ZmZlcmNhY2hlX3Bh cnRpdGlvbnMgVE8gcGdfbW9uaXRvcjsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVy Y2FjaGUvcGdfYnVmZmVyY2FjaGUuY29udHJvbCBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUv cGdfYnVmZmVyY2FjaGUuY29udHJvbAppbmRleCBiMDMwYmEzYTZmYS4uMTE0OTk1NTA5NDUg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUuY29u dHJvbAorKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLmNvbnRy b2wKQEAgLTEsNSArMSw1IEBACiAjIHBnX2J1ZmZlcmNhY2hlIGV4dGVuc2lvbgogY29tbWVu dCA9ICdleGFtaW5lIHRoZSBzaGFyZWQgYnVmZmVyIGNhY2hlJwotZGVmYXVsdF92ZXJzaW9u ID0gJzEuNicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjcnCiBtb2R1bGVfcGF0aG5hbWUgPSAn JGxpYmRpci9wZ19idWZmZXJjYWNoZScKIHJlbG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jIGIvY29u dHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCmluZGV4IGFlMDI5 MWU2ZTk2Li44YmFhN2M3YjU0MyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNo ZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCisrKyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUv cGdfYnVmZmVyY2FjaGVfcGFnZXMuYwpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBOVU1f QlVGRkVSQ0FDSEVfRVZJQ1RfQUxMX0VMRU0gMwogCiAjZGVmaW5lIE5VTV9CVUZGRVJDQUNI RV9OVU1BX0VMRU0JMworI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVN CTUKIAogUEdfTU9EVUxFX01BR0lDX0VYVCgKIAkJCQkJLm5hbWUgPSAicGdfYnVmZmVyY2Fj aGUiLApAQCAtMTAwLDYgKzEwMSw3IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfYnVmZmVy Y2FjaGVfdXNhZ2VfY291bnRzKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfYnVmZmVyY2Fj aGVfZXZpY3QpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19idWZmZXJjYWNoZV9ldmljdF9y ZWxhdGlvbik7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hlX2V2aWN0X2Fs bCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hlX3BhcnRpdGlvbnMpOwog CiAKIC8qIE9ubHkgbmVlZCB0byB0b3VjaCBtZW1vcnkgb25jZSBwZXIgYmFja2VuZCBwcm9j ZXNzIGxpZmV0aW1lICovCkBAIC03NzEsMyArNzczLDkzIEBAIHBnX2J1ZmZlcmNhY2hlX2V2 aWN0X2FsbChQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJOX0RBVFVNKHJlc3VsdCk7 CiB9CisKKy8qCisgKiBJbnF1aXJlIGFib3V0IHBhcnRpdGlvbmluZyBvZiBidWZmZXJzIGJl dHdlZW4gTlVNQSBub2Rlcy4KKyAqLworRGF0dW0KK3BnX2J1ZmZlcmNhY2hlX3BhcnRpdGlv bnMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVR1cGxlRGVzYwl0dXBsZWRlc2M7CisJVHVw bGVEZXNjCWV4cGVjdGVkX3R1cGxlZGVzYzsKKwlIZWFwVHVwbGUJdHVwbGU7CisJRGF0dW0J CXJlc3VsdDsKKworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlmdW5jY3R4ID0g U1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisKKwkJLyogU3dpdGNoIGNvbnRleHQgd2hlbiBhbGxv Y2F0aW5nIHN0dWZmIHRvIGJlIHVzZWQgaW4gbGF0ZXIgY2FsbHMgKi8KKwkJb2xkY29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9j dHgpOworCisJCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShmY2luZm8sIE5VTEwsICZleHBl Y3RlZF90dXBsZWRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkKKwkJCWVsb2coRVJST1Is ICJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsKKworCQlpZiAoZXhwZWN0ZWRf dHVwbGVkZXNjLT5uYXR0cyAhPSBOVU1fQlVGRkVSQ0FDSEVfUEFSVElUSU9OU19FTEVNKQor CQkJZWxvZyhFUlJPUiwgImluY29ycmVjdCBudW1iZXIgb2Ygb3V0cHV0IGFyZ3VtZW50cyIp OworCisJCS8qIENvbnN0cnVjdCBhIHR1cGxlIGRlc2NyaXB0b3IgZm9yIHRoZSByZXN1bHQg cm93cy4gKi8KKwkJdHVwbGVkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoZXhwZWN0 ZWRfdHVwbGVkZXNjLT5uYXR0cyk7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBsZWRlc2Ms IChBdHRyTnVtYmVyKSAxLCAicGFydGl0aW9uIiwKKwkJCQkJCSAgIElOVDRPSUQsIC0xLCAw KTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIDIsICJu dW1hX25vZGUiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0 RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgMywgIm51bV9idWZmZXJzIiwKKwkJCQkJ CSAgIElOVDRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywg KEF0dHJOdW1iZXIpIDQsICJmaXJzdF9idWZmZXIiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEs IDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwbGVkZXNjLCAoQXR0ck51bWJlcikgNSwg Imxhc3RfYnVmZmVyIiwKKwkJCQkJCSAgIElOVDRPSUQsIC0xLCAwKTsKKworCQlmdW5jY3R4 LT51c2VyX2ZjdHggPSBCbGVzc1R1cGxlRGVzYyh0dXBsZWRlc2MpOworCisJCS8qIFJldHVy biB0byBvcmlnaW5hbCBjb250ZXh0IHdoZW4gYWxsb2NhdGluZyB0cmFuc2llbnQgbWVtb3J5 ICovCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCQkvKiBTZXQg bWF4IGNhbGxzIGFuZCByZW1lbWJlciB0aGUgdXNlciBmdW5jdGlvbiBjb250ZXh0LiAqLwor CQlmdW5jY3R4LT5tYXhfY2FsbHMgPSBCdWZmZXJQYXJ0aXRpb25Db3VudCgpOworCX0KKwor CWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCisJaWYgKGZ1bmNjdHgtPmNhbGxf Y250ciA8IGZ1bmNjdHgtPm1heF9jYWxscykKKwl7CisJCXVpbnQzMgkJaSA9IGZ1bmNjdHgt PmNhbGxfY250cjsKKworCQlpbnQJCQludW1hX25vZGUsCisJCQkJCW51bV9idWZmZXJzLAor CQkJCQlmaXJzdF9idWZmZXIsCisJCQkJCWxhc3RfYnVmZmVyOworCisJCURhdHVtCQl2YWx1 ZXNbTlVNX0JVRkZFUkNBQ0hFX1BBUlRJVElPTlNfRUxFTV07CisJCWJvb2wJCW51bGxzW05V TV9CVUZGRVJDQUNIRV9QQVJUSVRJT05TX0VMRU1dOworCisJCUJ1ZmZlclBhcnRpdGlvbkdl dChpLCAmbnVtYV9ub2RlLCAmbnVtX2J1ZmZlcnMsCisJCQkJCQkgICAmZmlyc3RfYnVmZmVy LCAmbGFzdF9idWZmZXIpOworCisJCXZhbHVlc1swXSA9IEludDMyR2V0RGF0dW0oaSk7CisJ CW51bGxzWzBdID0gZmFsc2U7CisKKwkJdmFsdWVzWzFdID0gSW50MzJHZXREYXR1bShudW1h X25vZGUpOworCQludWxsc1sxXSA9IGZhbHNlOworCisJCXZhbHVlc1syXSA9IEludDMyR2V0 RGF0dW0obnVtX2J1ZmZlcnMpOworCQludWxsc1syXSA9IGZhbHNlOworCisJCXZhbHVlc1sz XSA9IEludDMyR2V0RGF0dW0oZmlyc3RfYnVmZmVyKTsKKwkJbnVsbHNbM10gPSBmYWxzZTsK KworCQl2YWx1ZXNbNF0gPSBJbnQzMkdldERhdHVtKGxhc3RfYnVmZmVyKTsKKwkJbnVsbHNb NF0gPSBmYWxzZTsKKworCQkvKiBCdWlsZCBhbmQgcmV0dXJuIHRoZSB0dXBsZS4gKi8KKwkJ dHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUoKFR1cGxlRGVzYykgZnVuY2N0eC0+dXNlcl9mY3R4 LCB2YWx1ZXMsIG51bGxzKTsKKwkJcmVzdWx0ID0gSGVhcFR1cGxlR2V0RGF0dW0odHVwbGUp OworCisJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCByZXN1bHQpOworCX0KKwllbHNlCisJ CVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9idWZfaW5pdC5jCmluZGV4IGVkMWRjNDg4YTQyLi41YjY1YTg1NWIyOSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCkBAIC0xNCw5ICsxNCwxNyBAQAogICov CiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2lmZGVmIFVTRV9MSUJOVU1BCisjaW5jbHVk ZSA8bnVtYS5oPgorI2luY2x1ZGUgPG51bWFpZi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJw b3J0L3BnX251bWEuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Fpby5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisj aW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5o IgogCiBCdWZmZXJEZXNjUGFkZGVkICpCdWZmZXJEZXNjcmlwdG9yczsKIGNoYXIJICAgKkJ1 ZmZlckJsb2NrczsKQEAgLTI0LDYgKzMyLDE5IEBAIENvbmRpdGlvblZhcmlhYmxlTWluaW1h bGx5UGFkZGVkICpCdWZmZXJJT0NWQXJyYXk7CiBXcml0ZWJhY2tDb250ZXh0IEJhY2tlbmRX cml0ZWJhY2tDb250ZXh0OwogQ2twdFNvcnRJdGVtICpDa3B0QnVmZmVySWRzOwogCitCdWZm ZXJQYXJ0aXRpb25zICpCdWZmZXJQYXJ0aXRpb25zQXJyYXk7CisKK3N0YXRpYyBTaXplIGdl dF9tZW1vcnlfcGFnZV9zaXplKHZvaWQpOworc3RhdGljIHZvaWQgYnVmZmVyX3BhcnRpdGlv bnNfcHJlcGFyZSh2b2lkKTsKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9wYXJ0aXRpb25zX2luaXQo dm9pZCk7CisKKy8qIG51bWJlciBvZiBOVU1BIG5vZGVzIChhcyByZXR1cm5lZCBieSBudW1h X251bV9jb25maWd1cmVkX25vZGVzKSAqLworc3RhdGljIGludAludW1hX25vZGVzID0gLTE7 CS8qIG51bWJlciBvZiBub2RlcyB3aGVuIHNpemluZyAqLworc3RhdGljIFNpemUgbnVtYV9w YWdlX3NpemUgPSAwOyAvKiBwYWdlIHVzZWQgdG8gc2l6ZSBwYXJ0aXRpb25zICovCitzdGF0 aWMgYm9vbCBudW1hX2Nhbl9wYXJ0aXRpb24gPSBmYWxzZTsgLyogY2FuIG1hcCB0byBOVU1B IG5vZGVzPyAqLworc3RhdGljIGludAludW1hX2J1ZmZlcnNfcGVyX25vZGUgPSAtMTsgLyog YnVmZmVycyBwZXIgbm9kZSAqLworc3RhdGljIGludAludW1hX3BhcnRpdGlvbnMgPSAwOwkv KiB0b3RhbCAobXVsdGlwbGUgb2Ygbm9kZXMpICovCisKIAogLyoKICAqIERhdGEgU3RydWN0 dXJlczoKQEAgLTcwLDE5ICs5MSw4OSBAQCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQp CiAJYm9vbAkJZm91bmRCdWZzLAogCQkJCWZvdW5kRGVzY3MsCiAJCQkJZm91bmRJT0NWLAot CQkJCWZvdW5kQnVmQ2twdDsKKwkJCQlmb3VuZEJ1ZkNrcHQsCisJCQkJZm91bmRQYXJ0czsK KwlTaXplCQltZW1fcGFnZV9zaXplOworCVNpemUJCWJ1ZmZlcl9hbGlnbjsKKworCS8qCisJ ICogWFhYIEEgYml0IHdlaXJkLiBEbyB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IHBvc3RtYXN0 ZXI/IENvdWxkIHRoaXMgZXZlbgorCSAqIHJ1biBvdXRzaWRlIHBvc3RtYXN0ZXI/IEkgZG9u J3QgdGhpbmsgc28uCisJICoKKwkgKiBYWFggQW5vdGhlciBpc3N1ZSBpcyB3ZSBtYXkgZ2V0 IGRpZmZlcmVudCB2YWx1ZXMgdGhhbiB3aGVuIHNpemluZyB0aGUKKwkgKiB0aGUgbWVtb3J5 LCBiZWNhdXNlIGF0IHRoYXQgcG9pbnQgd2UgZGlkbid0IGtub3cgaWYgd2UgZ2V0IGh1Z2Ug cGFnZXMsCisJICogc28gd2UgYXNzdW1lZCB3ZSB3aWxsLiBTaG91bGRuJ3QgY2F1c2UgY3Jh c2hlcywgYnV0IHdlIG1pZ2h0IGFsbG9jYXRlCisJICogc2hhcmVkIG1lbW9yeSBhbmQgdGhl biBub3QgdXNlIHNvbWUgb2YgaXQgKGJlY2F1c2Ugb2YgdGhlIGFsaWdubWVudAorCSAqIHRo YXQgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCkuIE5vdCBzdXJlIGFib3V0IGJldHRlciB3YXks IGdvb2QgZm9yIG5vdy4KKwkgKi8KKwlpZiAoSXNVbmRlclBvc3RtYXN0ZXIpCisJCW1lbV9w YWdlX3NpemUgPSBwZ19nZXRfc2htZW1fcGFnZXNpemUoKTsKKwllbHNlCisJCW1lbV9wYWdl X3NpemUgPSBnZXRfbWVtb3J5X3BhZ2Vfc2l6ZSgpOworCisJLyoKKwkgKiBXaXRoIE5VTUEg d2UgbmVlZCB0byBlbnN1cmUgdGhlIGJ1ZmZlcnMgYXJlIHByb3Blcmx5IGFsaWduZWQgbm90 IGp1c3QKKwkgKiB0byBQR19JT19BTElHTl9TSVpFLCBidXQgYWxzbyB0byBtZW1vcnkgcGFn ZSBzaXplLCBiZWNhdXNlIE5VTUEgd29ya3MKKwkgKiBvbiBwYWdlIGdyYW51bGFyaXR5LCBh bmQgd2UgZG9uJ3Qgd2FudCBhIGJ1ZmZlciB0byBnZXQgc3BsaXQgdG8KKwkgKiBtdWx0aXBs ZSBub2RlcyAod2hlbiB1c2luZyBtdWx0aXBsZSBtZW1vcnkgcGFnZXMpLgorCSAqCisJICog V2UgYWxzbyBkb24ndCB3YW50IHRvIGludGVyZmVyZSB3aXRoIG90aGVyIHBhcnRzIG9mIHNo YXJlZCBtZW1vcnksCisJICogd2hpY2ggY291bGQgZWFzaWx5IGhhcHBlbiB3aXRoIGh1Z2Ug cGFnZXMgKGUuZy4gd2l0aCBkYXRhIHN0b3JlZCBiZWZvcmUKKwkgKiBidWZmZXJzKS4KKwkg KgorCSAqIFdlIGRvIHRoaXMgYnkgYWxpZ25pbmcgdG8gdGhlIGxhcmdlciBvZiB0aGUgdHdv IHZhbHVlcyAod2Uga25vdyBib3RoCisJICogYXJlIHBvd2VyLW9mLXR3byB2YWx1ZXMsIHNv IHRoZSBsYXJnZXIgdmFsdWUgaXMgYXV0b21hdGljYWxseSBhCisJICogbXVsdGlwbGUgb2Yg dGhlIGxlc3NlciBvbmUpLgorCSAqCisJICogWFhYIE1heWJlIHRoZXJlJ3MgYSB3YXkgdG8g dXNlIGxlc3MgYWxpZ25tZW50PworCSAqCisJICogWFhYIE1heWJlIHdpdGggKG1lbV9wYWdl X3NpemUgPiBQR19JT19BTElHTl9TSVpFKSwgd2UgZG9uJ3QgbmVlZCB0bworCSAqIGFsaWdu IHRvIG1lbV9wYWdlX3NpemU/IEVzcGVjaWFsbHkgZm9yIHZlcnkgbGFyZ2UgaHVnZSBwYWdl cyAoZS5nLiAxR0IpCisJICogdGhhdCBkb2Vzbid0IHNlZW0gcXVpdGUgd29ydGggaXQuIE1h eWJlIHdlIHNob3VsZCBzaW1wbHkgYWxpZ24gdG8KKwkgKiBCTENLU1osIHNvIHRoYXQgYnVm ZmVycyBkb24ndCBnZXQgc3BsaXQ/IFN0aWxsLCB3ZSBtaWdodCBpbnRlcmZlcmUgd2l0aAor CSAqIG90aGVyIHN0dWZmIHN0b3JlZCBpbiBzaGFyZWQgbWVtb3J5IHRoYXQgd2Ugd2FudCB0 byBhbGxvY2F0ZSBvbiBhCisJICogcGFydGljdWxhciBOVU1BIG5vZGUgKGUuZy4gUHJvY0Fy cmF5KS4KKwkgKgorCSAqIFhYWCBNYXliZSB3aXRoICJ0b28gbGFyZ2UiIGh1Z2UgcGFnZXMg d2Ugc2hvdWxkIGp1c3Qgbm90IGRvIHRoaXMsIG9yCisJICogbWF5YmUgZG8gdGhpcyBvbmx5 IGZvciBzdWZmaWNpZW50bHkgbGFyZ2UgYXJlYXMgKGUuZy4gc2hhcmVkIGJ1ZmZlcnMsCisJ ICogYnV0IG5vdCBQcm9jQXJyYXkpLgorCSAqLworCWJ1ZmZlcl9hbGlnbiA9IE1heChtZW1f cGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKTsKKworCS8qIG9uZSBwYWdlIGlzIGEgbXVs dGlwbGUgb2YgdGhlIG90aGVyICovCisJQXNzZXJ0KCgobWVtX3BhZ2Vfc2l6ZSAlIFBHX0lP X0FMSUdOX1NJWkUpID09IDApIHx8CisJCSAgICgoUEdfSU9fQUxJR05fU0laRSAlIG1lbV9w YWdlX3NpemUpID09IDApKTsKKworCS8qIGFsbG9jYXRlIHRoZSBwYXJ0aXRpb24gcmVnaXN0 cnkgZmlyc3QgKi8KKwlCdWZmZXJQYXJ0aXRpb25zQXJyYXkgPSAoQnVmZmVyUGFydGl0aW9u cyAqKQorCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBQYXJ0aXRpb25zIiwKKwkJCQkJCW9m ZnNldG9mKEJ1ZmZlclBhcnRpdGlvbnMsIHBhcnRpdGlvbnMpICsKKwkJCQkJCW11bF9zaXpl KHNpemVvZihCdWZmZXJQYXJ0aXRpb24pLCBudW1hX3BhcnRpdGlvbnMpLAorCQkJCQkJJmZv dW5kUGFydHMpOwogCi0JLyogQWxpZ24gZGVzY3JpcHRvcnMgdG8gYSBjYWNoZWxpbmUgYm91 bmRhcnkuICovCisJLyoKKwkgKiBBbGlnbiBkZXNjcmlwdG9ycyB0byBhIGNhY2hlbGluZSBi b3VuZGFyeSwgYW5kIG1lbW9yeSBwYWdlLgorCSAqCisJICogV2Ugd2FudCB0byBkaXN0cmli dXRlIGJvdGggdG8gTlVNQSBub2Rlcywgc28gdGhhdCBlYWNoIGJ1ZmZlciBhbmQgaXQncwor CSAqIGRlc2NyaXB0b3IgYXJlIG9uIHRoZSBzYW1lIE5VTUEgbm9kZS4gU28gd2UgYWxpZ24g Ym90aCB0aGUgc2FtZSB3YXkuCisJICoKKwkgKiBYWFggVGhlIG1lbW9yeSBwYWdlIGlzIGFs d2F5cyBsYXJnZXIgdGhhbiBjYWNoZWxpbmUsIHNvIHRoZSBjYWNoZWxpbmUKKwkgKiByZWZl cmVuY2UgaXMgYSBiaXQgdW5uZWNlc3NhcnkuCisJICoKKwkgKiBYWFggSW4gcHJpbmNpcGxl IHdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIHdpdGggTlVNQSwgb3RoZXJ3aXNlIHdlIGNvdWxk CisJICogc3RpbGwgYWxpZ24ganVzdCB0byBjYWNoZWxpbmUsIGFzIGJlZm9yZS4KKwkgKi8K IAlCdWZmZXJEZXNjcmlwdG9ycyA9IChCdWZmZXJEZXNjUGFkZGVkICopCi0JCVNobWVtSW5p dFN0cnVjdCgiQnVmZmVyIERlc2NyaXB0b3JzIiwKLQkJCQkJCU5CdWZmZXJzICogc2l6ZW9m KEJ1ZmZlckRlc2NQYWRkZWQpLAotCQkJCQkJJmZvdW5kRGVzY3MpOworCQlUWVBFQUxJR04o YnVmZmVyX2FsaWduLAorCQkJCSAgU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgRGVzY3JpcHRv cnMiLAorCQkJCQkJCQkgIE5CdWZmZXJzICogc2l6ZW9mKEJ1ZmZlckRlc2NQYWRkZWQpICsg YnVmZmVyX2FsaWduLAorCQkJCQkJCQkgICZmb3VuZERlc2NzKSk7CiAKIAkvKiBBbGlnbiBi dWZmZXIgcG9vbCBvbiBJTyBwYWdlIHNpemUgYm91bmRhcnkuICovCiAJQnVmZmVyQmxvY2tz ID0gKGNoYXIgKikKLQkJVFlQRUFMSUdOKFBHX0lPX0FMSUdOX1NJWkUsCisJCVRZUEVBTElH TihidWZmZXJfYWxpZ24sCiAJCQkJICBTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBCbG9ja3Mi LAotCQkJCQkJCQkgIE5CdWZmZXJzICogKFNpemUpIEJMQ0tTWiArIFBHX0lPX0FMSUdOX1NJ WkUsCisJCQkJCQkJCSAgTkJ1ZmZlcnMgKiAoU2l6ZSkgQkxDS1NaICsgYnVmZmVyX2FsaWdu LAogCQkJCQkJCQkgICZmb3VuZEJ1ZnMpKTsKIAogCS8qIEFsaWduIGNvbmRpdGlvbiB2YXJp YWJsZXMgdG8gY2FjaGVsaW5lIGJvdW5kYXJ5LiAqLwpAQCAtMTEyLDYgKzIwMywxMiBAQCBC dWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQpCiAJewogCQlpbnQJCQlpOwogCisJCS8qCisJ CSAqIEluaXRpYWxpemUgdGhlIHJlZ2lzdHJ5IG9mIGJ1ZmZlciBwYXJ0aXRpb25zLCBhbmQg YWxzbyBtb3ZlIHRoZQorCQkgKiBtZW1vcnkgdG8gZGlmZmVyZW50IE5VTUEgbm9kZXMgKGlm IGVuYWJsZWQgYnkgR1VDKQorCQkgKi8KKwkJYnVmZmVyX3BhcnRpdGlvbnNfaW5pdCgpOwor CiAJCS8qCiAJCSAqIEluaXRpYWxpemUgYWxsIHRoZSBidWZmZXIgaGVhZGVycy4KIAkJICov CkBAIC0xNDQsNiArMjQxLDExIEBAIEJ1ZmZlck1hbmFnZXJTaG1lbUluaXQodm9pZCkKIAkJ R2V0QnVmZmVyRGVzY3JpcHRvcihOQnVmZmVycyAtIDEpLT5mcmVlTmV4dCA9IEZSRUVORVhU X0VORF9PRl9MSVNUOwogCX0KIAorCS8qCisJICogQXMgdGhpcyBwb2ludCB3ZSBoYXZlIGFs bCB0aGUgYnVmZmVycyBpbiBhIHNpbmdsZSBsb25nIGZyZWVsaXN0LiBXaXRoCisJICogZnJl ZWxpc3QgcGFydGl0aW9uaW5nIHdlIHJlYnVpbGQgdGhlbSBpbiBTdHJhdGVneUluaXRpYWxp emUuCisJICovCisKIAkvKiBJbml0IG90aGVyIHNoYXJlZCBidWZmZXItbWFuYWdlbWVudCBz dHVmZiAqLwogCVN0cmF0ZWd5SW5pdGlhbGl6ZSghZm91bmREZXNjcyk7CiAKQEAgLTE1Miwy NCArMjU0LDY4IEBAIEJ1ZmZlck1hbmFnZXJTaG1lbUluaXQodm9pZCkKIAkJCQkJCSAmYmFj a2VuZF9mbHVzaF9hZnRlcik7CiB9CiAKKy8qCisgKiBEZXRlcm1pbmUgdGhlIHNpemUgb2Yg bWVtb3J5IHBhZ2UuCisgKgorICogWFhYIFRoaXMgaXMgYSBiaXQgdHJpY2t5LCBiZWNhdXNl IHRoZSByZXN1bHQgZGVwZW5kcyBhdCB3aGljaCBwb2ludCB3ZSBjYWxsCisgKiB0aGlzLiBC ZWZvcmUgdGhlIGFsbG9jYXRpb24gd2UgZG9uJ3Qga25vdyBpZiB3ZSBzdWNjZWVkIGluIGFs bG9jYXRpbmcgaHVnZQorICogcGFnZXMgLSBidXQgd2UgaGF2ZSB0byBzaXplIGV2ZXJ5dGhp bmcgZm9yIHRoZSBjaGFuY2UgdGhhdCB3ZSB3aWxsLiBBbmQgdGhlbgorICogaWYgdGhlIGh1 Z2UgcGFnZXMgZmFpbCAod2l0aCAnaHVnZV9wYWdlcz10cnknKSwgd2UnbGwgdXNlIHRoZSBy ZWd1bGFyIG1lbW9yeQorICogcGFnZXMuIEJ1dCBhdCB0aGF0IHBvaW50IHdlIGNhbid0IGFk anVzdCB0aGUgc2l6aW5nLgorICoKKyAqIFhYWCBNYXliZSB3aXRoIGh1Z2VfcGFnZXM9dHJ5 IHdlIHNob3VsZCBkbyB0aGUgc2l6aW5nIHR3aWNlIC0gZmlyc3Qgd2l0aAorICogaHVnZSBw YWdlcywgYW5kIGlmIHRoYXQgZmFpbHMsIHRoZW4gd2l0aG91dCB0aGVtLiBCdXQgbm90IGZv ciB0aGlzIHBhdGNoLgorICogVXAgdG8gdGhpcyBwb2ludCB0aGVyZSB3YXMgbm8gc3VjaCBk ZXBlbmRlbmN5IG9uIGh1Z2UgcGFnZXMuCisgKi8KK3N0YXRpYyBTaXplCitnZXRfbWVtb3J5 X3BhZ2Vfc2l6ZSh2b2lkKQoreworCVNpemUJCW9zX3BhZ2Vfc2l6ZTsKKwlTaXplCQlodWdl X3BhZ2Vfc2l6ZTsKKworI2lmZGVmIFdJTjMyCisJU1lTVEVNX0lORk8gc3lzaW5mbzsKKwor CUdldFN5c3RlbUluZm8oJnN5c2luZm8pOworCW9zX3BhZ2Vfc2l6ZSA9IHN5c2luZm8uZHdQ YWdlU2l6ZTsKKyNlbHNlCisJb3NfcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUp OworI2VuZGlmCisKKwkvKiBhc3N1bWUgaHVnZSBwYWdlcyBnZXQgdXNlZCwgdW5sZXNzIEhV R0VfUEFHRVNfT0ZGICovCisJaWYgKGh1Z2VfcGFnZXNfc3RhdHVzICE9IEhVR0VfUEFHRVNf T0ZGKQorCQlHZXRIdWdlUGFnZVNpemUoJmh1Z2VfcGFnZV9zaXplLCBOVUxMKTsKKwllbHNl CisJCWh1Z2VfcGFnZV9zaXplID0gMDsKKworCXJldHVybiBNYXgob3NfcGFnZV9zaXplLCBo dWdlX3BhZ2Vfc2l6ZSk7Cit9CisKIC8qCiAgKiBCdWZmZXJNYW5hZ2VyU2htZW1TaXplCiAg KgogICogY29tcHV0ZSB0aGUgc2l6ZSBvZiBzaGFyZWQgbWVtb3J5IGZvciB0aGUgYnVmZmVy IHBvb2wgaW5jbHVkaW5nCiAgKiBkYXRhIHBhZ2VzLCBidWZmZXIgZGVzY3JpcHRvcnMsIGhh c2ggdGFibGVzLCBldGMuCisgKgorICogWFhYIENhbGxlZCBiZWZvcmUgYWxsb2NhdGlvbiwg c28gd2UgZG9uJ3Qga25vdyBpZiBodWdlIHBhZ2VzIGdldCB1c2VkIHlldC4KKyAqIFNvIHdl IG5lZWQgdG8gYXNzdW1lIGh1Z2UgcGFnZXMgZ2V0IHVzZWQsIGFuZCB1c2UgZ2V0X21lbW9y eV9wYWdlX3NpemUoKQorICogdG8gY2FsY3VsYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIG1l bW9yeSBwYWdlLgogICovCiBTaXplCiBCdWZmZXJNYW5hZ2VyU2htZW1TaXplKHZvaWQpCiB7 CiAJU2l6ZQkJc2l6ZSA9IDA7CiAKKwkvKiBjYWxjdWxhdGUgcGFydGl0aW9uIGluZm8gZm9y IGJ1ZmZlcnMgKi8KKwlidWZmZXJfcGFydGl0aW9uc19wcmVwYXJlKCk7CisKIAkvKiBzaXpl IG9mIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxf c2l6ZShOQnVmZmVycywgc2l6ZW9mKEJ1ZmZlckRlc2NQYWRkZWQpKSk7CiAJLyogdG8gYWxs b3cgYWxpZ25pbmcgYnVmZmVyIGRlc2NyaXB0b3JzICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIFBHX0NBQ0hFX0xJTkVfU0laRSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE1heChu dW1hX3BhZ2Vfc2l6ZSwgUEdfSU9fQUxJR05fU0laRSkpOwogCiAJLyogc2l6ZSBvZiBkYXRh IHBhZ2VzLCBwbHVzIGFsaWdubWVudCBwYWRkaW5nICovCi0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIFBHX0lPX0FMSUdOX1NJWkUpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBNYXgobnVt YV9wYWdlX3NpemUsIFBHX0lPX0FMSUdOX1NJWkUpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6 ZSwgbXVsX3NpemUoTkJ1ZmZlcnMsIEJMQ0tTWikpOwogCiAJLyogc2l6ZSBvZiBzdHVmZiBj b250cm9sbGVkIGJ5IGZyZWVsaXN0LmMgKi8KQEAgLTE4NCw1ICszMzAsNDY3IEBAIEJ1ZmZl ck1hbmFnZXJTaG1lbVNpemUodm9pZCkKIAkvKiBzaXplIG9mIGNoZWNrcG9pbnQgc29ydCBh cnJheSBpbiBidWZtZ3IuYyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShO QnVmZmVycywgc2l6ZW9mKENrcHRTb3J0SXRlbSkpKTsKIAorCS8qIGFjY291bnQgZm9yIHJl Z2lzdHJ5IG9mIE5VTUEgcGFydGl0aW9ucyAqLworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBN QVhBTElHTihvZmZzZXRvZihCdWZmZXJQYXJ0aXRpb25zLCBwYXJ0aXRpb25zKSArCisJCQkJ CQkJCSAgIG11bF9zaXplKHNpemVvZihCdWZmZXJQYXJ0aXRpb24pLCBudW1hX3BhcnRpdGlv bnMpKSk7CisKIAlyZXR1cm4gc2l6ZTsKIH0KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgTlVN QSBub2RlIGZvciBhIGdpdmVuIGJ1ZmZlci4KKyAqLworaW50CitCdWZmZXJHZXROb2RlKEJ1 ZmZlciBidWZmZXIpCit7CisJLyogbm90IE5VTUEgaW50ZXJsZWF2aW5nICovCisJaWYgKG51 bWFfYnVmZmVyc19wZXJfbm9kZSA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKGJ1 ZmZlciAvIG51bWFfYnVmZmVyc19wZXJfbm9kZSk7Cit9CisKKy8qCisgKiBwZ19udW1hX2lu dGVybGVhdmVfbWVtb3J5CisgKgkJbW92ZSBtZW1vcnkgdG8gZGlmZmVyZW50IE5VTUEgbm9k ZXMgaW4gbGFyZ2VyIGNodW5rcworICoKKyAqIHN0YXJ0cHRyIC0gc3RhcnQgb2YgdGhlIHJl Z2lvbiAoc2hvdWxkIGJlIGFsaWduZWQgdG8gcGFnZSBzaXplKQorICogZW5kcHRyIC0gZW5k IG9mIHRoZSByZWdpb24gKGRvZXNuJ3QgbmVlZCB0byBiZSBhbGlnbmVkKQorICogbWVtX3Bh Z2Vfc2l6ZSAtIHNpemUgb2YgdGhlIG1lbW9yeSBwYWdlIHNpemUKKyAqIGNodW5rX3NpemUg LSBzaXplIG9mIHRoZSBjaHVuayB0byBtb3ZlIHRvIGEgc2luZ2xlIG5vZGUgKHNob3VsZCBi ZSBtdWx0aXBsZQorICogICAgICAgICAgICAgIG9mIHBhZ2Ugc2l6ZQorICogbnVtX25vZGVz IC0gbnVtYmVyIG9mIG5vZGVzIHRvIGFsbG9jYXRlIG1lbW9yeSB0bworICoKKyAqIFhYWCBN YXliZSB0aGlzIHNob3VsZCB1c2UgbnVtYV90b25vZGVfbWVtb3J5IGFuZCBudW1hX3BvbGlj ZV9tZW1vcnkgaW5zdGVhZD8KKyAqIFRoYXQgbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgdGhh biBudW1hX21vdmVfcGFnZXMsIGFzIGl0IHdvcmtzIG9uIGxhcmdlcgorICogY2h1bmtzIG9m IG1lbW9yeSwgbm90IGluZGl2aWR1YWwgc3lzdGVtIHBhZ2VzLCBJIHRoaW5rLgorICoKKyAq IFhYWCBUaGUgImludGVybGVhdmUiIG5hbWUgaXMgbm90IHF1aXRlIGFjY3VyYXRlLCBJIGd1 ZXNzLgorICovCitzdGF0aWMgdm9pZAorcGdfbnVtYV9tb3ZlX3RvX25vZGUoY2hhciAqc3Rh cnRwdHIsIGNoYXIgKmVuZHB0ciwgaW50IG5vZGUpCit7CisJU2l6ZQkJbWVtX3BhZ2Vfc2l6 ZTsKKwlTaXplCQlzejsKKworCS8qCisJICogR2V0IHRoZSAiYWN0dWFsIiBtZW1vcnkgcGFn ZSBzaXplLCBub3QgdGhlIG9uZSB3ZSB1c2VkIGZvciBzaXppbmcuIFdlCisJICogbWlnaHQg aGF2ZSB1c2VkIGh1Z2UgcGFnZSBmb3Igc2l6aW5nLCBidXQgb25seSBnZXQgcmVndWxhciBw YWdlcyB3aGVuCisJICogYWxsb2NhdGluZywgc28gd2UgbXVzdCB1c2UgdGhlIHNtYWxsZXIg cGFnZXMgaGVyZS4KKwkgKgorCSAqIFhYWCBBIGJpdCB3ZWlyZC4gRG8gd2UgbmVlZCB0byB3 b3JyeSBhYm91dCBwb3N0bWFzdGVyPyBDb3VsZCB0aGlzIGV2ZW4KKwkgKiBydW4gb3V0c2lk ZSBwb3N0bWFzdGVyPyBJIGRvbid0IHRoaW5rIHNvLgorCSAqLworCWlmIChJc1VuZGVyUG9z dG1hc3RlcikKKwkJbWVtX3BhZ2Vfc2l6ZSA9IHBnX2dldF9zaG1lbV9wYWdlc2l6ZSgpOwor CWVsc2UKKwkJbWVtX3BhZ2Vfc2l6ZSA9IGdldF9tZW1vcnlfcGFnZV9zaXplKCk7CisKKwlB c3NlcnQoKGludDY0KSBzdGFydHB0ciAlIG1lbV9wYWdlX3NpemUgPT0gMCk7CisKKwlzeiA9 IChlbmRwdHIgLSBzdGFydHB0cik7CisJbnVtYV90b25vZGVfbWVtb3J5KHN0YXJ0cHRyLCBz eiwgbm9kZSk7Cit9CisKKworI2RlZmluZSBNSU5fQlVGRkVSX1BBUlRJVElPTlMJNAorCisv KgorICogYnVmZmVyX3BhcnRpdGlvbnNfcHJlcGFyZQorICoJCUNhbGN1bGF0ZSBwYXJhbWV0 ZXJzIGZvciBwYXJ0aXRpb25pbmcgYnVmZmVycy4KKyAqCisgKiBXZSB3YW50IHRvIHNwbGl0 IHRoZSBzaGFyZWQgYnVmZmVycyBpbnRvIG11bHRpcGxlIHBhcnRpdGlvbnMsIG9mIHJvdWdo bHkKKyAqIHRoZSBzYW1lIHNpemUuIFRoaXMgaXMgbWVhbnQgdG8gc2VydmUgbXVsdGlwbGUg cHVycG9zZXMuIFdlIHdhbnQgdG8gbWFwCisgKiB0aGUgcGFydGl0aW9ucyB0byBkaWZmZXJl bnQgTlVNQSBub2RlcywgdG8gYmFsYW5jZSBtZW1vcnkgdXNhZ2UsIGFuZAorICogYWxsb3cg cGFydGl0aW9uaW5nIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzIGJ1aWx0IG9uIHRvcCBvZiBidWZm ZXJzLCB0byBnaXZlCisgKiBwcmVmZXJlbmNlIHRvIGxvY2FsIGFjY2VzcyAoYnVmZmVycyBv biB0aGUgc2FtZSBOVU1BIG5vZGUpLiBUaGlzIGFwcGxpZXMKKyAqIG1vc3RseSB0byBmcmVl bGlzdHMgYW5kIGNsb2Nrc3dlZXAuCisgKgorICogV2UgbWF5IHdhbnQgdG8gdXNlIHBhcnRp dGlvbmluZyBldmVuIG9uIG5vbi1OVU1BIHN5c3RlbXMsIG9yIHdoZW4gcnVubmluZworICog b24gYSBzaW5nbGUgTlVNQSBub2RlLiBQYXJ0aXRpb25pbmcgdGhlIGZyZWVsaXN0L2Nsb2Nr c3dlZXAgaXMgYmVuZWZpY2lhbAorICogZXZlbiB3aXRob3V0IHRoZSBOVU1BIGVmZmVjdHMu CisgKgorICogU28gd2UgdHJ5IHRvIGFsd2F5cyBidWlsZCBhdCBsZWFzdCA0IHBhcnRpdGlv bnMgKE1JTl9CVUZGRVJfUEFSVElUSU9OUykKKyAqIGluIHRvdGFsLCBvciBhdCBsZWFzdCBv bmUgcGFydGl0aW9uIHBlciBOVU1BIG5vZGUuIFdlIGFsd2F5cyBjcmVhdGUgdGhlCisgKiBz YW1lIG51bWJlciBvZiBwYXJ0aXRpb25zIHBlciBOVU1BIG5vZGUuCisgKgorICogU29tZSBl eGFtcGxlczoKKyAqCisgKiAtIG5vbi1OVU1BIHN5c3RlbSAob3IgMSBOVU1BIG5vZGUpOiA0 IHBhcnRpdGlvbnMgZm9yIHRoZSBzaW5nbGUgbm9kZQorICoKKyAqIC0gMiBOVU1BIG5vZGVz OiA0IHBhcnRpdGlvbnMsIDIgZm9yIGVhY2ggbm9kZQorICoKKyAqIC0gMyBOVU1BIG5vZGVz OiA2IHBhcnRpdGlvbnMsIDIgZm9yIGVhY2ggbm9kZQorICoKKyAqIC0gNCsgTlVNQSBub2Rl czogb25lIHBhcnRpdGlvbiBwZXIgbm9kZQorICoKKyAqIE5VTUEgd29ya3Mgb24gdGhlIG1l bW9yeS1wYWdlIGdyYW51bGFyaXR5LCB3aGljaCBkZXRlcm1pbmVzIHRoZSBzbWFsbGVzdAor ICogYW1vdW50IG9mIG1lbW9yeSB3ZSBjYW4gYWxsb2NhdGUgdG8gc2luZ2xlIG5vZGUuIFRo aXMgaXMgZGV0ZXJtaW5lZCBieQorICogaG93IG1hbnkgQnVmZmVyRGVzY3JpcHRvcnMgZml0 IG9udG8gYSBzaW5nbGUgbWVtb3J5IHBhZ2UsIHNvIHRoaXMgZGVwZW5kcworICogb24gaHVn ZSBwYWdlIHN1cHBvcnQuIFdpdGggMk1CIGh1Z2UgcGFnZXMgKHR5cGljYWwgb24geDg2IExp bnV4KSwgdGhpcyBpcworICogMzI3NjggYnVmZmVycyAoMjU2TUIpLiBXaXRoIHJlZ3VsYXIg NGtCIHBhZ2VzLCBpdCdzIDY0IGJ1ZmZlcnMgKDUxMktCKS4KKyAqCisgKiBOb3RlOiBUaGlz IGlzIGRldGVybWluZWQgYmVmb3JlIHRoZSBhbGxvY2F0aW9uLCBpLmUuIHdlIGRvbid0IGtu b3cgaWYgdGhlCisgKiBhbGxvY2F0aW9uIGdvdCB0byB1c2UgaHVnZSBwYWdlcy4gU28gdW5s ZXNzIGh1Z2VfcGFnZXM9b2ZmIHdlIGFzc3VtZSB3ZSdyZQorICogdXNpbmcgaHVnZSBwYWdl cy4KKyAqCisgKiBUaGlzIG1pbmltYWwgc2l6ZSByZXF1aXJlbWVudCBvbmx5IG1hdHRlcnMg Zm9yIHRoZSBwZXItbm9kZSBhbW91bnQgb2YKKyAqIG1lbW9yeSwgbm90IGZvciB0aGUgaW5k aXZpZHVhbCBwYXJ0aXRpb25zLiBUaGUgcGFydGl0aW9ucyBmb3IgdGhlIHNhbWUKKyAqIG5v ZGUgYXJlIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnksIHdoaWNoIGNhbiBiZSBzcGxp dCBhcmJpdHJhcmlseSwKKyAqIGl0J3MgaW5kZXBlbmRlbnQgb2YgdGhlIE5VTUEgZ3JhbnVs YXJpdHkuCisgKgorICogWFhYIFRoaXMgcGF0Y2ggb25seSBpbXBsZW1lbnRzIHBsYWNpbmcg dGhlIGJ1ZmZlcnMgb250byBkaWZmZXJlbnQgTlVNQQorICogbm9kZXMuIFRoZSBmcmVlbGlz dC9jbG9ja3N3ZWVwIHBhcnRpdGlvbmluZyBpcyBpbXBsZW1lbnRlZCBpbiBzZXBhcmF0ZQor ICogcGF0Y2hlcyBsYXRlciBpbiB0aGUgcGF0Y2ggc2VyaWVzLiBUaG9zZSBwYXRjaGVzIGhv d2V2ZXIgdXNlIHRoZSBzYW1lCisgKiBidWZmZXIgcGFydGl0aW9uIHJlZ2lzdHJ5LCB0byBh bGlnbiB0aGUgcGFydGl0aW9ucy4KKyAqCisgKgorICogWFhYIFRoaXMgbmVlZHMgdG8gY29u c2lkZXIgdGhlIG1pbmltdW0gY2h1bmsgc2l6ZSwgaS5lLiB3ZSBjYW4ndCBzcGxpdAorICog YnVmZmVycyBiZXlvbmQgc29tZSBwb2ludCwgYXQgc29tZSBwb2ludCBpdCBnZXRzIHdlIHJ1 biBpbnRvIHRoZSBzaXplIG9mCisgKiBidWZmZXIgZGVzY3JpcHRvcnMuIE5vdCBzdXJlIGlm IHdlIHNob3VsZCBnaXZlIHByZWZlcmVuY2UgdG8gb25lIG9mIHRoZXNlCisgKiAocHJvYmFi bHkgYXQgbGVhc3QgcHJpbnQgYSB3YXJuaW5nKS4KKyAqCisgKiBYWFggV2Ugd2FudCB0byBk byB0aGlzIGV2ZW4gd2l0aCBudW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZT1mYWxzZSwgc28gdGhh dCB0aGUKKyAqIG90aGVyIHBhdGNoZXMgY2FuIGRvIHRoZWlyIHBhcnRpdGlvbmluZy4gQnV0 IGluIHRoYXQgY2FzZSB3ZSBkb24ndCBuZWVkIHRvCisgKiBlbmZvcmNlIHRoZSBtaW4gY2h1 bmsgc2l6ZSAocHJvYmFibHkpPworICoKKyAqIFhYWCBXZSBuZWVkIHRvIG9ubHkgY2FsbCB0 aGlzIG9uY2UsIHdoZW4gc2l6aW5nIHRoZSBtZW1vcnkuIEJ1dCBhdCB0aGF0CisgKiBwb2lu dCB3ZSBkb24ndCBrbm93IGlmIHdlIGdldCB0byB1c2UgaHVnZSBwYWdlcyBvciBub3QgKHVu bGVzcyB3aGVuIGh1Z2UKKyAqIHBhZ2VzIGFyZSBkaXNhYmxlZCkuIFdlJ2xsIHByb2NlZWQg YXMgaWYgdGhlIGh1Z2UgcGFnZXMgd2VyZSB1c2VkLCBhbmQgd2UKKyAqIG1heSBoYXZlIHRv IHVzZSBsYXJnZXIgcGFydGl0aW9ucy4gTWF5YmUgdGhlcmUncyBzb21lIHNvcnQgb2YgZmFs bGJhY2ssCisgKiBidXQgZm9yIG5vdyB3ZSBzaW1wbHkgZGlzYWJsZSB0aGUgTlVNQSBwYXJ0 aXRpb25pbmcgLSBpdCBzaW1wbHkgbWVhbnMgdGhlCisgKiBzaGFyZWQgYnVmZmVycyBhcmUg dG9vIHNtYWxsLgorICoKKyAqIFhYWCBXZSBkb24ndCBuZWVkIHRvIG1ha2UgZWFjaCBwYXJ0 aXRpb24gYSBtdWx0aXBsZSBvZiBtaW5fcGFydGl0aW9uX3NpemUuCisgKiBUaGF0J3Mgc29t ZXRoaW5nIHdlIG5lZWQgdG8gZG8gZm9yIGEgbm9kZSAoYmVjYXVzZSBOVU1BIHdvcmtzIGF0 IGdyYW51bGFyaXR5CisgKiBvZiBwYWdlcyksIGJ1dCBwYXJ0aXRpb25zIGZvciBhIHNpbmds ZSBub2RlIGNhbiBzcGxpdCB0aGF0IGFyYml0cmFyaWx5LgorICogQWx0aG91Z2gga2VlcGlu ZyB0aGUgc2l6ZXMgcG93ZXItb2YtdHdvIHdvdWxkIGFsbG93IGNhbGN1bGF0aW5nIGV2ZXJ5 dGhpbmcKKyAqIGFzIHNoaWZ0L21hc2ssIHdpdGhvdXQgZXhwZW5zaXZlIGRpdmlzaW9uL21v ZHVsbyBvcGVyYXRpb25zLgorICovCitzdGF0aWMgdm9pZAorYnVmZmVyX3BhcnRpdGlvbnNf cHJlcGFyZSh2b2lkKQoreworCS8qCisJICogTWluaW11bSBudW1iZXIgb2YgYnVmZmVycyB3 ZSBjYW4gYWxsb2NhdGUgdG8gYSBOVU1BIG5vZGUgKGRldGVybWluZWQgYnkKKwkgKiBob3cg bWFueSBCdWZmZXJEZXNjcmlwdG9ycyBmaXQgb250byBhIG1lbW9yeSBwYWdlKS4KKwkgKi8K KwlpbnQJCQltaW5fbm9kZV9idWZmZXJzOworCisJLyoKKwkgKiBNYXhpbXVtIG51bWJlciBv ZiBub2RlcyB3ZSBjYW4gc3BsaXQgc2hhcmVkIGJ1ZmZlcnMgdG8sIGFzc3VtaW5nIGVhY2gK KwkgKiBub2RlIGdldHMgdGhlIHNtYWxsZXN0IGFsbG9jYXRhYmxlIGNodW5rICh0aGUgbGFz dCBub2RlIGNhbiBnZXQgYQorCSAqIHNtYWxsZXIgYW1vdW50IG9mIG1lbW9yeSwgbm90IHRo ZSBmdWxsIGNodW5rKS4KKwkgKi8KKwlpbnQJCQltYXhfbm9kZXM7CisKKwkvKgorCSAqIEhv dyBtYW55IHBhcnRpdGlvbnMgdG8gY3JlYXRlIHBlciBub2RlLiBDb3VsZCBiZSBtb3JlIHRo YW4gMSBmb3Igc21hbGwKKwkgKiBudW1iZXIgb2Ygbm9kZXMgKG9mIG5vbi1OVU1BIHN5c3Rl bXMpLgorCSAqLworCWludAkJCW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlOworCisJLyogYmFp bCBvdXQgaWYgYWxyZWFkeSBpbml0aWFsaXplZCAoY2FsY3VsYXRlIG9ubHkgb25jZSkgKi8K KwlpZiAobnVtYV9ub2RlcyAhPSAtMSkKKwkJcmV0dXJuOworCisJLyogWFhYIG9ubHkgZ2l2 ZXMgdXMgdGhlIG51bWJlciwgdGhlIG5vZGVzIG1heSBub3QgYmUgMCwgMSwgMiwgLi4uICov CisJbnVtYV9ub2RlcyA9IG51bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMoKTsKKworCS8qIFhY WCBjYW4gdGhpcyBoYXBwZW4/ICovCisJaWYgKG51bWFfbm9kZXMgPCAxKQorCQludW1hX25v ZGVzID0gMTsKKworCWVsb2coV0FSTklORywgIklzVW5kZXJQb3N0bWFzdGVyICVkIiwgSXNV bmRlclBvc3RtYXN0ZXIpOworCisJLyoKKwkgKiBYWFggQSBiaXQgd2VpcmQuIERvIHdlIG5l ZWQgdG8gd29ycnkgYWJvdXQgcG9zdG1hc3Rlcj8gQ291bGQgdGhpcyBldmVuCisJICogcnVu IG91dHNpZGUgcG9zdG1hc3Rlcj8gSSBkb24ndCB0aGluayBzby4KKwkgKgorCSAqIFhYWCBB bm90aGVyIGlzc3VlIGlzIHdlIG1heSBnZXQgZGlmZmVyZW50IHZhbHVlcyB0aGFuIHdoZW4g c2l6aW5nIHRoZQorCSAqIHRoZSBtZW1vcnksIGJlY2F1c2UgYXQgdGhhdCBwb2ludCB3ZSBk aWRuJ3Qga25vdyBpZiB3ZSBnZXQgaHVnZSBwYWdlcywKKwkgKiBzbyB3ZSBhc3N1bWVkIHdl IHdpbGwuIFNob3VsZG4ndCBjYXVzZSBjcmFzaGVzLCBidXQgd2UgbWlnaHQgYWxsb2NhdGUK KwkgKiBzaGFyZWQgbWVtb3J5IGFuZCB0aGVuIG5vdCB1c2Ugc29tZSBvZiBpdCAoYmVjYXVz ZSBvZiB0aGUgYWxpZ25tZW50CisJICogdGhhdCB3ZSBkb24ndCBhY3R1YWxseSBuZWVkKS4g Tm90IHN1cmUgYWJvdXQgYmV0dGVyIHdheSwgZ29vZCBmb3Igbm93LgorCSAqLworCWlmIChJ c1VuZGVyUG9zdG1hc3RlcikKKwkJbnVtYV9wYWdlX3NpemUgPSBwZ19nZXRfc2htZW1fcGFn ZXNpemUoKTsKKwllbHNlCisJCW51bWFfcGFnZV9zaXplID0gZ2V0X21lbW9yeV9wYWdlX3Np emUoKTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgY2h1bmtzIHdpbGwgYWxpZ24gbmljZWx5ICov CisJQXNzZXJ0KEJMQ0tTWiAlIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSA9PSAwKTsKKwlB c3NlcnQobnVtYV9wYWdlX3NpemUgJSBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCkgPT0gMCk7 CisJQXNzZXJ0KCgoQkxDS1NaICUgbnVtYV9wYWdlX3NpemUpID09IDApIHx8ICgobnVtYV9w YWdlX3NpemUgJSBCTENLU1opID09IDApKTsKKworCS8qCisJICogVGhlIG1pbmltdW0gbnVt YmVyIG9mIGJ1ZmZlcnMgd2UgY2FuIGFsbG9jYXRlIGZyb20gYSBzaW5nbGUgbm9kZSwgdXNp bmcKKwkgKiB0aGUgbWVtb3J5IHBhZ2Ugc2l6ZSAoZGV0ZXJtaW5lZCBieSBidWZmZXIgZGVz Y3JpcHRvcnMpLiBOVU1BIGFsbG9jYXRlcworCSAqIG1lbW9yeSBpbiBwYWdlcywgYW5kIHdl IG5lZWQgdG8gZG8gdGhhdCBmb3IgYm90aCBidWZmZXJzIGFuZAorCSAqIGRlc2NyaXB0b3Jz IGF0IHRoZSBzYW1lIHRpbWUuCisJICoKKwkgKiBJbiBwcmFjdGljZSB0aGUgQkxDS1NaIGRv ZXNuJ3QgcmVhbGx5IG1hdHRlciwgYmVjYXVzZSBpdCdzIG11Y2ggbGFyZ2VyCisJICogdGhh biBCdWZmZXJEZXNjUGFkZGVkLCBzbyB0aGUgcmVzdWx0IGlzIGRldGVybWluZWQgYnVmZmVy IGRlc2NyaXB0b3JzLgorCSAqLworCW1pbl9ub2RlX2J1ZmZlcnMgPSAobnVtYV9wYWdlX3Np emUgLyBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCkpOworCisJLyoKKwkgKiBNYXhpbXVtIG51 bWJlciBvZiBub2RlcyAoZWFjaCBnZXR0aW5nIG1pbl9ub2RlX2J1ZmZlcnMpIHdlIGNhbiBo YW5kbGUKKwkgKiBnaXZlbiB0aGUgY3VycmVudCBzaGFyZWQgYnVmZmVycyBzaXplLiBUaGUg bGFzdCBub2RlIGlzIGFsbG93ZWQgdG8gYmUKKwkgKiBzbWFsbGVyIChoYWxmIG9mIHRoZSBv dGhlciBub2RlcykuCisJICovCisJbWF4X25vZGVzID0gKE5CdWZmZXJzICsgKG1pbl9ub2Rl X2J1ZmZlcnMgLyAyKSkgLyBtaW5fbm9kZV9idWZmZXJzOworCisJLyoKKwkgKiBDYW4gd2Ug YWN0dWFsbHkgZG8gTlVNQSBwYXJ0aXRpb25pbmcgd2l0aCB0aGVzZSBzZXR0aW5ncz8gSWYg d2UgY2FuJ3QKKwkgKiBoYW5kbGUgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIG5vZGVzLCB0aGVu IG5vLgorCSAqCisJICogWFhYIFRoaXMgc2hvdWxkbid0IGJlIGEgYmlnIGlzc3VlIGluIHBy YWN0aWNlLiBOVU1BIHN5c3RlbXMgdHlwaWNhbGx5CisJICogcnVuIHdpdGggbGFyZ2Ugc2hh cmVkIGJ1ZmZlcnMsIHdoaWNoIGFsc28gbWFrZXMgdGhlIGltYmFsYW5jZSBpc3N1ZXMKKwkg KiBmYWlybHkgc2lnbmlmaWNhbnQgKGl0J3MgcXVpY2sgdG8gcmViYWxhbmNlIDEyOE1CLCBt dWNoIHNsb3dlciB0byBkbworCSAqIHRoYXQgZm9yIDI1NkdCKS4KKwkgKi8KKwludW1hX2Nh bl9wYXJ0aXRpb24gPSB0cnVlOwkvKiBhc3N1bWUgd2UgY2FuIGFsbG9jYXRlIHRvIG5vZGVz ICovCisJaWYgKG51bWFfbm9kZXMgPiBtYXhfbm9kZXMpCisJeworCQllbG9nKFdBUk5JTkcs ICJzaGFyZWQgYnVmZmVycyB0b28gc21hbGwgZm9yICVkIG5vZGVzIChtYXggbm9kZXMgJWQp IiwKKwkJCSBudW1hX25vZGVzLCBtYXhfbm9kZXMpOworCQludW1hX2Nhbl9wYXJ0aXRpb24g PSBmYWxzZTsKKwl9CisKKwkvKgorCSAqIFdlIGtub3cgd2UgY2FuIHBhcnRpdGlvbiB0byB0 aGUgZGVzaXJlZCBudW1iZXIgb2Ygbm9kZXMsIG5vdyBpdCdzIHRpbWUKKwkgKiB0byBmaWd1 cmUgb3V0IGhvdyBtYW55IHBhcnRpdGlvbnMgd2UgbmVlZCBwZXIgbm9kZS4gV2Ugc2ltcGx5 IGFkZAorCSAqIHBhcnRpdGlvbnMgcGVyIG5vZGUgdW50aWwgd2UgcmVhY2ggTUlOX0JVRkZF Ul9QQVJUSVRJT05TLgorCSAqCisJICogWFhYIE1heWJlIHdlIHNob3VsZCBtYWtlIHN1cmUg dG8ga2VlcCB0aGUgYWN0dWFsIHBhcnRpdGlvbiBzaXplIGEgcG93ZXIKKwkgKiBvZiAyLCB0 byBtYWtlIHRoZSBjYWxjdWxhdGlvbnMgc2ltcGxlciAoc2hpZnQgaW5zdGVhZCBvZiBtb2Qp LgorCSAqLworCW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlID0gMTsKKworCXdoaWxlIChudW1h X25vZGVzICogbnVtX3BhcnRpdGlvbnNfcGVyX25vZGUgPCBNSU5fQlVGRkVSX1BBUlRJVElP TlMpCisJCW51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKys7CisKKwkvKiBub3cgd2Uga25vdyB0 aGUgdG90YWwgbnVtYmVyIG9mIHBhcnRpdGlvbnMgKi8KKwludW1hX3BhcnRpdGlvbnMgPSAo bnVtYV9ub2RlcyAqIG51bV9wYXJ0aXRpb25zX3Blcl9ub2RlKTsKKworCS8qCisJICogRmlu YWxseSwgY2FsY3VsYXRlIGhvdyBtYW55IGJ1ZmZlcnMgd2UnbGwgYXNzaWduIHRvIGEgc2lu Z2xlIE5VTUEgbm9kZS4KKwkgKiBJZiB3ZSBoYXZlIG9ubHkgYSBzaW5nbGUgbm9kZSwgb3Ig Y2FuJ3QgbWFwIHRvIHRoYXQgbWFueSBub2RlcywganVzdAorCSAqIHRha2UgYSAiZmFpciBz aGFyZSIgb2YgYnVmZmVycy4KKwkgKgorCSAqIFhYWCBJbiBib3RoIGNhc2VzIHRoZSBsYXN0 IG5vZGUgY2FuIGdldCBmZXdlciBidWZmZXJzLgorCSAqLworCWlmICghbnVtYV9jYW5fcGFy dGl0aW9uKQorCXsKKwkJbnVtYV9idWZmZXJzX3Blcl9ub2RlID0gKE5CdWZmZXJzICsgKG51 bWFfbm9kZXMgLSAxKSkgLyBudW1hX25vZGVzOworCX0KKwllbHNlCisJeworCQludW1hX2J1 ZmZlcnNfcGVyX25vZGUgPSBtaW5fbm9kZV9idWZmZXJzOworCQl3aGlsZSAobnVtYV9idWZm ZXJzX3Blcl9ub2RlICogbnVtYV9ub2RlcyA8IE5CdWZmZXJzKQorCQkJbnVtYV9idWZmZXJz X3Blcl9ub2RlICs9IG1pbl9ub2RlX2J1ZmZlcnM7CisKKwkJLyogdGhlIGxhc3Qgbm9kZSBz aG91bGQgZ2V0IGF0IGxlYXN0IHNvbWUgYnVmZmVycyAqLworCQlBc3NlcnQoTkJ1ZmZlcnMg LSAobnVtYV9ub2RlcyAtIDEpICogbnVtYV9idWZmZXJzX3Blcl9ub2RlID4gMCk7CisJfQor CisJZWxvZyhMT0csICJOVU1BOiBidWZmZXJzICVkIHBhcnRpdGlvbnMgJWQgbnVtX25vZGVz ICVkIHBlcl9ub2RlICVkIGJ1ZmZlcnNfcGVyX25vZGUgJWQgKG1pbiAlZCkiLAorCQkgTkJ1 ZmZlcnMsIG51bWFfcGFydGl0aW9ucywgbnVtYV9ub2RlcywgbnVtX3BhcnRpdGlvbnNfcGVy X25vZGUsCisJCSBudW1hX2J1ZmZlcnNfcGVyX25vZGUsIG1pbl9ub2RlX2J1ZmZlcnMpOwor fQorCitzdGF0aWMgdm9pZAorQXNzZXJ0Q2hlY2tCdWZmZXJQYXJ0aXRpb25zKHZvaWQpCit7 CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCWludAkJCW51bV9idWZmZXJzID0gMDsK KworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtYV9wYXJ0aXRpb25zOyBpKyspCisJeworCQlC dWZmZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVmZmVyUGFydGl0aW9uc0FycmF5LT5wYXJ0aXRp b25zW2ldOworCisJCS8qCisJCSAqIFdlIGNhbiBnZXQgYSBzaW5nbGUtYnVmZmVyIHBhcnRp dGlvbiwgaWYgdGhlIHNpemluZyBmb3JjZXMgdGhlIGxhc3QKKwkJICogcGFydGl0aW9uIHRv IGJlIGp1c3Qgb25lIGJ1ZmZlci4gQnV0IGl0J3MgdW5saWtlbHkgKGFuZAorCQkgKiB1bmRl c2lyYWJsZSkuCisJCSAqLworCQlBc3NlcnQocGFydC0+Zmlyc3RfYnVmZmVyIDw9IHBhcnQt Pmxhc3RfYnVmZmVyKTsKKwkJQXNzZXJ0KChwYXJ0LT5sYXN0X2J1ZmZlciAtIHBhcnQtPmZp cnN0X2J1ZmZlciArIDEpID09IHBhcnQtPm51bV9idWZmZXJzKTsKKworCQludW1fYnVmZmVy cyArPSBwYXJ0LT5udW1fYnVmZmVyczsKKworCQkvKgorCQkgKiBUaGUgZmlyc3QgcGFydGl0 aW9uIG5lZWRzIHRvIHN0YXJ0IG9uIGJ1ZmZlciAwLiBMYXRlciBwYXJ0aXRpb25zCisJCSAq IG5lZWQgdG8gYmUgY29udGlndW91cywgd2l0aG91dCBza2lwcGluZyBhbnkgYnVmZmVycy4K KwkJICovCisJCWlmIChpID09IDApCisJCXsKKwkJCUFzc2VydChwYXJ0LT5maXJzdF9idWZm ZXIgPT0gMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlCdWZmZXJQYXJ0aXRpb24gKnByZXYg PSAmQnVmZmVyUGFydGl0aW9uc0FycmF5LT5wYXJ0aXRpb25zW2kgLSAxXTsKKworCQkJQXNz ZXJ0KChwYXJ0LT5maXJzdF9idWZmZXIgLSAxKSA9PSBwcmV2LT5sYXN0X2J1ZmZlcik7CisJ CX0KKworCQkvKiB0aGUgbGFzdCBwYXJ0aXRpb24gbmVlZHMgdG8gZW5kIG9uIGJ1ZmZlciAo TkJ1ZmZlcnMgLSAxKSAqLworCQlpZiAoaSA9PSAobnVtYV9wYXJ0aXRpb25zIC0gMSkpCisJ CXsKKwkJCUFzc2VydChwYXJ0LT5sYXN0X2J1ZmZlciA9PSAoTkJ1ZmZlcnMgLSAxKSk7CisJ CX0KKwl9CisKKwlBc3NlcnQobnVtX2J1ZmZlcnMgPT0gTkJ1ZmZlcnMpOworI2VuZGlmCit9 CisKK3N0YXRpYyB2b2lkCitidWZmZXJfcGFydGl0aW9uc19pbml0KHZvaWQpCit7CisJaW50 CQkJcmVtYWluaW5nX2J1ZmZlcnMgPSBOQnVmZmVyczsKKwlpbnQJCQlidWZmZXIgPSAwOwor CWludAkJCXBhcnRzX3Blcl9ub2RlID0gKG51bWFfcGFydGl0aW9ucyAvIG51bWFfbm9kZXMp OworCWNoYXIJICAgKmJ1ZmZlcnNfcHRyLAorCQkJICAgKmRlc2NyaXB0b3JzX3B0cjsKKwor CUJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+bnBhcnRpdGlvbnMgPSBudW1hX3BhcnRpdGlvbnM7 CisKKwlmb3IgKGludCBuID0gMDsgbiA8IG51bWFfbm9kZXM7IG4rKykKKwl7CisJCS8qIGJ1 ZmZlcnMgdGhpcyBub2RlIHNob3VsZCBnZXQgKGxhc3Qgbm9kZSBjYW4gZ2V0IGZld2VyKSAq LworCQlpbnQJCQlub2RlX2J1ZmZlcnMgPSBNaW4ocmVtYWluaW5nX2J1ZmZlcnMsIG51bWFf YnVmZmVyc19wZXJfbm9kZSk7CisKKwkJLyogc3BsaXQgbm9kZSBidWZmZXJzIG5ldHdlZW4g cGFydGl0aW9ucyAobGFzdCBvbmUgY2FuIGdldCBmZXdlcikgKi8KKwkJaW50CQkJcGFydF9i dWZmZXJzID0gKG5vZGVfYnVmZmVycyArIChwYXJ0c19wZXJfbm9kZSAtIDEpKSAvIHBhcnRz X3Blcl9ub2RlOworCisJCXJlbWFpbmluZ19idWZmZXJzIC09IG5vZGVfYnVmZmVyczsKKwor CQlBc3NlcnQoKG5vZGVfYnVmZmVycyA+IDApICYmIChub2RlX2J1ZmZlcnMgPD0gTkJ1ZmZl cnMpKTsKKwkJQXNzZXJ0KChuID49IDApICYmIChuIDwgbnVtYV9ub2RlcykpOworCisJCWZv ciAoaW50IHAgPSAwOyBwIDwgcGFydHNfcGVyX25vZGU7IHArKykKKwkJeworCQkJaW50CQkJ aWR4ID0gKG4gKiBwYXJ0c19wZXJfbm9kZSkgKyBwOworCQkJQnVmZmVyUGFydGl0aW9uICpw YXJ0ID0gJkJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+cGFydGl0aW9uc1tpZHhdOworCQkJaW50 CQkJbnVtX2J1ZmZlcnMgPSBNaW4obm9kZV9idWZmZXJzLCBwYXJ0X2J1ZmZlcnMpOworCisJ CQlBc3NlcnQoKGlkeCA+PSAwKSAmJiAoaWR4IDwgbnVtYV9wYXJ0aXRpb25zKSk7CisJCQlB c3NlcnQoKGJ1ZmZlciA+PSAwKSAmJiAoYnVmZmVyIDwgTkJ1ZmZlcnMpKTsKKwkJCUFzc2Vy dCgobnVtX2J1ZmZlcnMgPiAwKSAmJiAobnVtX2J1ZmZlcnMgPD0gcGFydF9idWZmZXJzKSk7 CisKKwkJCS8qIFhYWCB3ZSBzaG91bGQgZ2V0IHRoZSBhY3R1YWwgbm9kZSBJRCBmcm9tIHRo ZSBtYXNrICovCisJCQlwYXJ0LT5udW1hX25vZGUgPSBuOworCisJCQlwYXJ0LT5udW1fYnVm ZmVycyA9IG51bV9idWZmZXJzOworCQkJcGFydC0+Zmlyc3RfYnVmZmVyID0gYnVmZmVyOwor CQkJcGFydC0+bGFzdF9idWZmZXIgPSBidWZmZXIgKyAobnVtX2J1ZmZlcnMgLSAxKTsKKwor CQkJZWxvZyhMT0csICJOVU1BOiBidWZmZXIgJWQgbm9kZSAlZCBwYXJ0aXRpb24gJWQgYnVm ZmVycyAlZCBmaXJzdCAlZCBsYXN0ICVkIiwgaWR4LCBuLCBwLCBudW1fYnVmZmVycywgYnVm ZmVyLCBidWZmZXIgKyAobnVtX2J1ZmZlcnMgLSAxKSk7CisKKwkJCWJ1ZmZlciArPSBudW1f YnVmZmVyczsKKwkJCW5vZGVfYnVmZmVycyAtPSBwYXJ0X2J1ZmZlcnM7CisJCX0KKwl9CisK KwlBc3NlcnRDaGVja0J1ZmZlclBhcnRpdGlvbnMoKTsKKworCS8qCisJICogV2l0aCBidWZm ZXJzIGludGVybGVhdmluZyBkaXNhYmxlZCAob3IgY2FuJ3QgcGFydGl0aW9uLCBiZWNhdXNl IG9mCisJICogc2hhcmVkIGJ1ZmZlcnMgYmVpbmcgdG9vIHNtYWxsKSwgd2UncmUgZG9uZS4K KwkgKi8KKwlpZiAoIW51bWFfYnVmZmVyc19pbnRlcmxlYXZlIHx8ICFudW1hX2Nhbl9wYXJ0 aXRpb24pCisJCXJldHVybjsKKworCS8qCisJICogQXNzaWduIGNodW5rcyBvZiBidWZmZXJz IGFuZCBidWZmZXIgZGVzY3JpcHRvcnMgdG8gdGhlIGF2YWlsYWJsZSBOVU1BCisJICogbm9k ZXMuIFdlIGNhbid0IHVzZSB0aGUgcmVndWxhciBpbnRlcmxlYXZpbmcsIGJlY2F1c2Ugd2l0 aCByZWd1bGFyCisJICogbWVtb3J5IHBhZ2VzIChzbWFsbGVyIHRoYW4gQkxDS1NaKSB3ZSdk IHNwbGl0IGFsbCBidWZmZXJzIHRvIG11bHRpcGxlCisJICogTlVNQSBub2Rlcy4gQW5kIHdl IGRvbid0IHdhbnQgdGhhdC4KKwkgKgorCSAqIEJ1dCBldmVuIHdpdGggaHVnZSBwYWdlcyBp dCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvIG5vdCBoYXZlIG1hcHBpbmcKKwkgKiBmb3Ig ZWFjaCBwYWdlLgorCSAqCisJICogU28gd2UgYWx3YXlzIGFzc2lnbiBhIGxhcmdlciBjb250 aWd1b3VzIGNodW5rIG9mIGJ1ZmZlcnMgdG8gdGhlIHNhbWUKKwkgKiBOVU1BIG5vZGUsIGFz IGNhbGN1bGF0ZWQgYnkgY2hvb3NlX2NodW5rX2J1ZmZlcnMoKS4gV2UgdHJ5IHRvIGtlZXAg dGhlCisJICogY2h1bmtzIGxhcmdlIGVub3VnaCB0byB3b3JrIGJvdGggZm9yIGJ1ZmZlcnMg YW5kIGJ1ZmZlciBkZXNjcmlwdG9ycywKKwkgKiBidXQgbm90IHRvbyBsYXJnZS4gU2VlIHRo ZSBjb21tZW50cyBhdCBjaG9vc2VfY2h1bmtfYnVmZmVycygpIGZvcgorCSAqIGRldGFpbHMu CisJICoKKwkgKiBUaGFua3MgdG8gdGhlIGVhcmxpZXIgYWxpZ25tZW50ICh0byBtZW1vcnkg cGFnZSBldGMuKSwgd2Uga25vdyB0aGUKKwkgKiBidWZmZXJzIHdvbid0IGdldCBzcGxpdCwg ZXRjLgorCSAqCisJICogVGhpcyBhbHNvIG1ha2VzIGl0IGVhc2llciAvIHN0cmFpZ2h0Zm9y d2FyZCB0byBjYWxjdWxhdGUgd2hpY2ggTlVNQQorCSAqIG5vZGUgYSBidWZmZXIgYmVsb25n cyB0byAoaXQncyBhIG1hdHRlciBvZiBkaXZpZGUgKyBtb2QpLiBTZWUKKwkgKiBCdWZmZXJH ZXROb2RlKCkuCisJICoKKwkgKiBXZSBuZWVkIHRvIGFjY291bnQgZm9yIHBhcnRpdGlvbnMg YmVpbmcgb2YgZGlmZmVyZW50IGxlbmd0aCwgd2hlbiB0aGUKKwkgKiBOQnVmZmVycyBpcyBu b3QgbmljZWx5IGRpdmlzaWJsZS4gVG8gZG8gdGhhdCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBz dGFydAorCSAqIG9mIHRoZSBuZXh0IHBhcnRpdGlvbi4KKwkgKi8KKwlidWZmZXJzX3B0ciA9 IEJ1ZmZlckJsb2NrczsKKwlkZXNjcmlwdG9yc19wdHIgPSAoY2hhciAqKSBCdWZmZXJEZXNj cmlwdG9yczsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtYV9wYXJ0aXRpb25zOyBpKysp CisJeworCQlCdWZmZXJQYXJ0aXRpb24gKnBhcnQgPSAmQnVmZmVyUGFydGl0aW9uc0FycmF5 LT5wYXJ0aXRpb25zW2ldOworCQljaGFyCSAgICpzdGFydHB0ciwKKwkJCQkgICAqZW5kcHRy OworCisJCS8qIGZpcnN0IG1hcCBidWZmZXJzICovCisJCXN0YXJ0cHRyID0gYnVmZmVyc19w dHI7CisJCWVuZHB0ciA9IHN0YXJ0cHRyICsgKChTaXplKSBwYXJ0LT5udW1fYnVmZmVycyAq IEJMQ0tTWik7CisJCWJ1ZmZlcnNfcHRyID0gZW5kcHRyOwkvKiBzdGFydCBvZiB0aGUgbmV4 dCBwYXJ0aXRpb24gKi8KKworCQllbG9nKExPRywgIk5VTUE6IGJ1ZmZlcl9wYXJ0aXRpb25z X2luaXQ6ICVkID0+ICVkIGJ1ZmZlcnMgJWQgc3RhcnQgJXAgZW5kICVwIChzaXplICVsZCki LAorCQkJIGksIHBhcnQtPm51bWFfbm9kZSwgcGFydC0+bnVtX2J1ZmZlcnMsIHN0YXJ0cHRy LCBlbmRwdHIsIChlbmRwdHIgLSBzdGFydHB0cikpOworCisJCXBnX251bWFfbW92ZV90b19u b2RlKHN0YXJ0cHRyLCBlbmRwdHIsIHBhcnQtPm51bWFfbm9kZSk7CisKKwkJLyogbm93IGRv IHRoZSBzYW1lIGZvciBidWZmZXIgZGVzY3JpcHRvcnMgKi8KKwkJc3RhcnRwdHIgPSBkZXNj cmlwdG9yc19wdHI7CisJCWVuZHB0ciA9IHN0YXJ0cHRyICsgKChTaXplKSBwYXJ0LT5udW1f YnVmZmVycyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSk7CisJCWRlc2NyaXB0b3JzX3B0 ciA9IGVuZHB0cjsKKworCQllbG9nKExPRywgIk5VTUE6IGJ1ZmZlcl9wYXJ0aXRpb25zX2lu aXQ6ICVkID0+ICVkIGRlc2NyaXB0b3JzICVkIHN0YXJ0ICVwIGVuZCAlcCAoc2l6ZSAlbGQp IiwKKwkJCSBpLCBwYXJ0LT5udW1hX25vZGUsIHBhcnQtPm51bV9idWZmZXJzLCBzdGFydHB0 ciwgZW5kcHRyLCAoZW5kcHRyIC0gc3RhcnRwdHIpKTsKKworCQlwZ19udW1hX21vdmVfdG9f bm9kZShzdGFydHB0ciwgZW5kcHRyLCBwYXJ0LT5udW1hX25vZGUpOworCX0KKworCS8qIHdl IHNob3VsZCBoYXZlIGNvbnN1bWVkIHRoZSBhcnJheXMgZXhhY3RseSAqLworCUFzc2VydChi dWZmZXJzX3B0ciA9PSBCdWZmZXJCbG9ja3MgKyAoU2l6ZSkgTkJ1ZmZlcnMgKiBCTENLU1op OworCUFzc2VydChkZXNjcmlwdG9yc19wdHIgPT0gKGNoYXIgKikgQnVmZmVyRGVzY3JpcHRv cnMgKyAoU2l6ZSkgTkJ1ZmZlcnMgKiBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCkpOworfQor CitpbnQKK0J1ZmZlclBhcnRpdGlvbkNvdW50KHZvaWQpCit7CisJcmV0dXJuIEJ1ZmZlclBh cnRpdGlvbnNBcnJheS0+bnBhcnRpdGlvbnM7Cit9CisKK3ZvaWQKK0J1ZmZlclBhcnRpdGlv bkdldChpbnQgaWR4LCBpbnQgKm5vZGUsIGludCAqbnVtX2J1ZmZlcnMsCisJCQkJICAgaW50 ICpmaXJzdF9idWZmZXIsIGludCAqbGFzdF9idWZmZXIpCit7CisJaWYgKChpZHggPj0gMCkg JiYgKGlkeCA8IEJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+bnBhcnRpdGlvbnMpKQorCXsKKwkJ QnVmZmVyUGFydGl0aW9uICpwYXJ0ID0gJkJ1ZmZlclBhcnRpdGlvbnNBcnJheS0+cGFydGl0 aW9uc1tpZHhdOworCisJCSpub2RlID0gcGFydC0+bnVtYV9ub2RlOworCQkqbnVtX2J1ZmZl cnMgPSBwYXJ0LT5udW1fYnVmZmVyczsKKwkJKmZpcnN0X2J1ZmZlciA9IHBhcnQtPmZpcnN0 X2J1ZmZlcjsKKwkJKmxhc3RfYnVmZmVyID0gcGFydC0+bGFzdF9idWZmZXI7CisKKwkJcmV0 dXJuOworCX0KKworCWVsb2coRVJST1IsICJpbnZhbGlkIHBhcnRpdGlvbiBpbmRleCIpOwor fQorCit2b2lkCitCdWZmZXJQYXJ0aXRpb25QYXJhbXMoaW50ICpudW1fcGFydGl0aW9ucywg aW50ICpudW1fbm9kZXMpCit7CisJKm51bV9wYXJ0aXRpb25zID0gbnVtYV9wYXJ0aXRpb25z OworCSpudW1fbm9kZXMgPSBudW1hX25vZGVzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2Jh bHMuYwppbmRleCBkMzFjYjQ1YTA1OC4uODc2Y2I2NGNmNjYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2lu aXQvZ2xvYmFscy5jCkBAIC0xNDUsNiArMTQ1LDkgQEAgaW50CQkJbWF4X3dvcmtlcl9wcm9j ZXNzZXMgPSA4OwogaW50CQkJbWF4X3BhcmFsbGVsX3dvcmtlcnMgPSA4OwogaW50CQkJTWF4 QmFja2VuZHMgPSAwOwogCisvKiBOVU1BIHN0dWZmICovCitib29sCQludW1hX2J1ZmZlcnNf aW50ZXJsZWF2ZSA9IGZhbHNlOworCiAvKiBHVUMgcGFyYW1ldGVycyBmb3IgdmFjdXVtICov CiBpbnQJCQlWYWN1dW1CdWZmZXJVc2FnZUxpbWl0ID0gMjA0ODsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYwppbmRleCBkMTRiMTY3OGU3Zi4uOTU3MDA4N2FhNjAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC0yMTE2LDYgKzIxMTYsMTYg QEAgc3RydWN0IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJTlVMTCwg TlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsibnVtYV9idWZmZXJzX2ludGVybGVhdmUiLCBQ R0NfUE9TVE1BU1RFUiwgREVWRUxPUEVSX09QVElPTlMsCisJCQlnZXR0ZXh0X25vb3AoIkVu YWJsZXMgTlVNQSBpbnRlcmxlYXZpbmcgb2Ygc2hhcmVkIGJ1ZmZlcnMuIiksCisJCQlnZXR0 ZXh0X25vb3AoIldoZW4gZW5hYmxlZCwgdGhlIGJ1ZmZlcnMgaW4gc2hhcmVkIG1lbW9yeSBh cmUgaW50ZXJsZWF2ZWQgdG8gYWxsIE5VTUEgbm9kZXMuIiksCisJCX0sCisJCSZudW1hX2J1 ZmZlcnNfaW50ZXJsZWF2ZSwKKwkJZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAor CiAJewogCQl7InN5bmNfcmVwbGljYXRpb25fc2xvdHMiLCBQR0NfU0lHSFVQLCBSRVBMSUNB VElPTl9TVEFOREJZLAogCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGEgcGh5c2ljYWwgc3Rh bmRieSB0byBzeW5jaHJvbml6ZSBsb2dpY2FsIGZhaWxvdmVyIHJlcGxpY2F0aW9uIHNsb3Rz IGZyb20gdGhlIHByaW1hcnkgc2VydmVyLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCAxYmVmOTg0NzFj My4uMDE0YTYwNzlhZjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisr KyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBAIC0xNzgsNiArMTc4LDggQEAgZXh0ZXJu IFBHRExMSU1QT1JUIGludCBNYXhDb25uZWN0aW9uczsKIGV4dGVybiBQR0RMTElNUE9SVCBp bnQgbWF4X3dvcmtlcl9wcm9jZXNzZXM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9w YXJhbGxlbF93b3JrZXJzOwogCitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBudW1hX2J1ZmZl cnNfaW50ZXJsZWF2ZTsKKwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb21taXRfdGltZXN0 YW1wX2J1ZmZlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG11bHRpeGFjdF9tZW1iZXJf YnVmZmVyczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbXVsdGl4YWN0X29mZnNldF9idWZm ZXJzOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAppbmRleCA1MmE3MWIxMzhm Ny4uOWRmYmVjYjlmZTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2lu dGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCkBA IC0zMjMsNiArMzIzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgV3JpdGViYWNrQ29udGV4dAogCiAv KiBpbiBidWZfaW5pdC5jICovCiBleHRlcm4gUEdETExJTVBPUlQgQnVmZmVyRGVzY1BhZGRl ZCAqQnVmZmVyRGVzY3JpcHRvcnM7CitleHRlcm4gUEdETExJTVBPUlQgQnVmZmVyUGFydGl0 aW9ucyAqQnVmZmVyUGFydGl0aW9uc0FycmF5OwogZXh0ZXJuIFBHRExMSU1QT1JUIENvbmRp dGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkICpCdWZmZXJJT0NWQXJyYXk7CiBleHRlcm4g UEdETExJTVBPUlQgV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNrQ29udGV4dDsK IApAQCAtNDkxLDQgKzQ5Miw5IEBAIGV4dGVybiB2b2lkIERyb3BSZWxhdGlvbkxvY2FsQnVm ZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvciwKIGV4dGVybiB2b2lkIERyb3BSZWxhdGlv bkFsbExvY2FsQnVmZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvcik7CiBleHRlcm4gdm9p ZCBBdEVPWGFjdF9Mb2NhbEJ1ZmZlcnMoYm9vbCBpc0NvbW1pdCk7CiAKK2V4dGVybiBpbnQJ QnVmZmVyUGFydGl0aW9uQ291bnQodm9pZCk7CitleHRlcm4gdm9pZCBCdWZmZXJQYXJ0aXRp b25HZXQoaW50IGlkeCwgaW50ICpub2RlLCBpbnQgKm51bV9idWZmZXJzLAorCQkJCQkJCSAg IGludCAqZmlyc3RfYnVmZmVyLCBpbnQgKmxhc3RfYnVmZmVyKTsKK2V4dGVybiB2b2lkIEJ1 ZmZlclBhcnRpdGlvblBhcmFtcyhpbnQgKm51bV9wYXJ0aXRpb25zLCBpbnQgKm51bV9ub2Rl cyk7CisKICNlbmRpZgkJCQkJCQkvKiBCVUZNR1JfSU5URVJOQUxTX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdl L2J1Zm1nci5oCmluZGV4IDQxZmRjMWU3NjkzLi5kZWFmNGYxOWZhNCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdl L2J1Zm1nci5oCkBAIC0xNDMsNiArMTQzLDIwIEBAIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJh dGlvbgogCiB0eXBlZGVmIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJhdGlvbiBSZWFkQnVmZmVy c09wZXJhdGlvbjsKIAordHlwZWRlZiBzdHJ1Y3QgQnVmZmVyUGFydGl0aW9uCit7CisJaW50 CQkJbnVtYV9ub2RlOworCWludAkJCW51bV9idWZmZXJzOworCWludAkJCWZpcnN0X2J1ZmZl cjsKKwlpbnQJCQlsYXN0X2J1ZmZlcjsKK30gQnVmZmVyUGFydGl0aW9uOworCit0eXBlZGVm IHN0cnVjdCBCdWZmZXJQYXJ0aXRpb25zCit7CisJaW50CQkJbnBhcnRpdGlvbnM7CisJQnVm ZmVyUGFydGl0aW9uIHBhcnRpdGlvbnNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30gQnVm ZmVyUGFydGl0aW9uczsKKwogLyogZm9yd2FyZCBkZWNsYXJlZCwgdG8gYXZvaWQgaGF2aW5n IHRvIGV4cG9zZSBidWZfaW50ZXJuYWxzLmggaGVyZSAqLwogc3RydWN0IFdyaXRlYmFja0Nv bnRleHQ7CiAKQEAgLTMxOSw2ICszMzMsNyBAQCBleHRlcm4gdm9pZCBFdmljdFJlbFVucGlu bmVkQnVmZmVycyhSZWxhdGlvbiByZWwsCiAvKiBpbiBidWZfaW5pdC5jICovCiBleHRlcm4g dm9pZCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIFNpemUgQnVmZmVy TWFuYWdlclNobWVtU2l6ZSh2b2lkKTsKK2V4dGVybiBpbnQJQnVmZmVyR2V0Tm9kZShCdWZm ZXIgYnVmZmVyKTsKIAogLyogaW4gbG9jYWxidWYuYyAqLwogZXh0ZXJuIHZvaWQgQXRQcm9j RXhpdF9Mb2NhbEJ1ZmZlcnModm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cmlu ZGV4IGU2ZjJlOTNiMmQ2Li4wM2NhM2I3YzhiYyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTM0Niw2ICszNDYsOCBAQCBCdWZmZXJEZXNjUGFkZGVkCiBCdWZmZXJIZWFw VHVwbGVUYWJsZVNsb3QKIEJ1ZmZlckxvb2t1cEVudAogQnVmZmVyTWFuYWdlclJlbGF0aW9u CitCdWZmZXJQYXJ0aXRpb24KK0J1ZmZlclBhcnRpdGlvbnMKIEJ1ZmZlclN0cmF0ZWd5Q29u dHJvbAogQnVmZmVyVGFnCiBCdWZmZXJVc2FnZQotLSAKMi41MC4xCgo= --------------8xriSvZLhsgPmdy7CNlM8G85 Content-Type: text/x-patch; charset=UTF-8; name="v20250807-0002-nbtree-Use-ReadRecentBuffer-in_bt_getroot.patch" Content-Disposition: attachment; filename*0="v20250807-0002-nbtree-Use-ReadRecentBuffer-in_bt_getroot.pat"; filename*1="ch" Content-Transfer-Encoding: base64 RnJvbSA3MzA0NjdjZmNmMWQxYjdmMGEyMmY2MWJkNDhhMzczNzFmODBjY2U5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwu ZGU+CkRhdGU6IFR1ZSwgMjcgSnVuIDIwMjMgMTQ6MDc6MzQgLTA3MDAKU3ViamVjdDogW1BB VENIIHYyMDI1MDgwNyAwMi8xMV0gbmJ0cmVlOiBVc2UgUmVhZFJlY2VudEJ1ZmZlcigpCiBp bl9idF9nZXRyb290KCkKCldlIHRlbmQgdG8gYWNjZXNzIHRoZSBidHJlZSByb290IHBhZ2Ug b3ZlciBhbmQgb3Zlciwgd2hlbiBkZXNjZW5kaW5nIHRoZQppbmRleC4gSXQncyBxdWl0ZSBl eHBlbnNpdmUuIE5vdCByZWFsbHkgc3BlY2lmaWMgdG8gTlVNQSwgYnV0IGl0IGh1cnRzCnRo ZXJlIG11Y2ggbW9yZS4KClRob21hcyBNdW5ybyB3b3JrZWQgb24gdGhpcy4KCkRpc2N1c3Np b246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvMjAyMzA2MjcwMjA1 NDYudDZ6NHRudG1qN3dtanJmaCU0MGF3b3JrMy5hbmFyYXplbC5kZQpEaXNjdXNzaW9uOiBo dHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBJTJCaFVLR0o4Tl9EUlNC MFlpb2luV2pTMnljTXBtT0x5MzJtYkJxVlZ6dHdCdlhneUpBJTQwbWFpbC5nbWFpbC5jb20K LS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgIHwgMjEgKysrKysr KysrKysrKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyB8IDE3 ICsrKysrKysrKy0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jICAg fCAzNSArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3V0aWxzL2Jh Y2tlbmRfc3RhdHVzLmggICAgfCAgNCArKysKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAg ICAgICAgICAgICAgfCAgNCArKysKIDUgZmlsZXMgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygr KSwgMzYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwpp bmRleCBjNzlkZDM4ZWUxOC4uM2NjMjY0OTBmMDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0cGFnZS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9j YXJyYXkuaCIKICNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWxz L21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMv c25hcG1nci5oIgogCiBzdGF0aWMgQlRNZXRhUGFnZURhdGEgKl9idF9nZXRtZXRhKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYpOwpAQCAtMzQ0LDcgKzM0NSw3IEBAIEJ1ZmZlcgog X2J0X2dldHJvb3QoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBpbnQgYWNjZXNz KQogewogCUJ1ZmZlcgkJbWV0YWJ1ZjsKLQlCdWZmZXIJCXJvb3RidWY7CisJQnVmZmVyCQly b290YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAlQYWdlCQlyb290cGFnZTsKIAlCVFBhZ2VPcGFx dWUgcm9vdG9wYXF1ZTsKIAlCbG9ja051bWJlciByb290Ymxrbm87CkBAIC0zNzMsNyArMzc0 LDIwIEBAIF9idF9nZXRyb290KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgaW50 IGFjY2VzcykKIAkJQXNzZXJ0KHJvb3RibGtubyAhPSBQX05PTkUpOwogCQlyb290bGV2ZWwg PSBtZXRhZC0+YnRtX2Zhc3RsZXZlbDsKIAotCQlyb290YnVmID0gX2J0X2dldGJ1ZihyZWws IHJvb3RibGtubywgQlRfUkVBRCk7CisKKwkJaWYgKEJ1ZmZlcklzVmFsaWQocmVsLT5yZF9y ZWNlbnRfcm9vdCkpCisJCXsKKwkJCWlmIChSZWFkUmVjZW50QnVmZmVyKHJlbC0+cmRfbG9j YXRvciwgTUFJTl9GT1JLTlVNLCByb290Ymxrbm8sCisJCQkJCQkJCSByZWwtPnJkX3JlY2Vu dF9yb290KSkKKwkJCXsKKwkJCQlyb290YnVmID0gcmVsLT5yZF9yZWNlbnRfcm9vdDsKKwkJ CQlfYnRfbG9ja2J1ZihyZWwsIHJvb3RidWYsIEJUX1JFQUQpOworCQkJCV9idF9jaGVja3Bh Z2UocmVsLCByb290YnVmKTsKKwkJCX0KKwkJfQorCisJCWlmIChyb290YnVmID09IEludmFs aWRCdWZmZXIpCisJCQlyb290YnVmID0gX2J0X2dldGJ1ZihyZWwsIHJvb3RibGtubywgQlRf UkVBRCk7CiAJCXJvb3RwYWdlID0gQnVmZmVyR2V0UGFnZShyb290YnVmKTsKIAkJcm9vdG9w YXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShyb290cGFnZSk7CiAKQEAgLTM5MCw2ICs0MDQsNyBA QCBfYnRfZ2V0cm9vdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIGludCBhY2Nl c3MpCiAJCQlQX1JJR0hUTU9TVChyb290b3BhcXVlKSkKIAkJewogCQkJLyogT0ssIGFjY2Vw dCBjYWNoZWQgcGFnZSBhcyB0aGUgcm9vdCAqLworCQkJcmVsLT5yZF9yZWNlbnRfcm9vdCA9 IHJvb3RidWY7CiAJCQlyZXR1cm4gcm9vdGJ1ZjsKIAkJfQogCQlfYnRfcmVsYnVmKHJlbCwg cm9vdGJ1Zik7CkBAIC01NTUsNiArNTcwLDggQEAgX2J0X2dldHJvb3QoUmVsYXRpb24gcmVs LCBSZWxhdGlvbiBoZWFwcmVsLCBpbnQgYWNjZXNzKQogCQkJCSByb290b3BhcXVlLT5idHBv X2xldmVsLCByb290bGV2ZWwpOwogCX0KIAorCXJlbC0+cmRfcmVjZW50X3Jvb3QgPSByb290 YnVmOworCiAJLyoKIAkgKiBCeSBoZXJlLCB3ZSBoYXZlIGEgcGluIGFuZCByZWFkIGxvY2sg b24gdGhlIHJvb3QgcGFnZSwgYW5kIG5vIGxvY2sgc2V0CiAJICogb24gdGhlIG1ldGFkYXRh IHBhZ2UuICBSZXR1cm4gdGhlIHJvb3QgcGFnZSdzIGJ1ZmZlci4KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNlYXJjaC5jCmluZGV4IGQ2OTc5ODc5NWI0Li5lMWU3M2I0YWFmMyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0xNjgsMTEgKzE2 OCwxNyBAQCBfYnRfc2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRT Y2FuSW5zZXJ0IGtleSwgQnVmZmVyICpidWZQLAogCQkgKiBzdGFjayBlbnRyeSBmb3IgdGhp cyBwYWdlL2xldmVsLiAgSWYgY2FsbGVyIGVuZHMgdXAgc3BsaXR0aW5nIGEKIAkJICogcGFn ZSBvbmUgbGV2ZWwgZG93biwgaXQgdXN1YWxseSBlbmRzIHVwIGluc2VydGluZyBhIG5ldyBw aXZvdAogCQkgKiB0dXBsZS9kb3dubGluayBpbW1lZGlhdGVseSBhZnRlciB0aGUgbG9jYXRp b24gcmVjb3JkZWQgaGVyZS4KKwkJICoKKwkJICogRklYTUU6IFVuZm9ydHVuYXRlbHkgdGhp cyBpc24ndCBhIHVzYWJsZSBnYXRpbmcgY29uZGl0aW9uLCBhcworCQkgKiB2YWN1dW0gdXNl cyBCVF9SRUFEIGFuZCBuZWVkcyB0aGUgc3RhY2suCiAJCSAqLwotCQluZXdfc3RhY2sgPSAo QlRTdGFjaykgcGFsbG9jKHNpemVvZihCVFN0YWNrRGF0YSkpOwotCQluZXdfc3RhY2stPmJ0 c19ibGtubyA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKCpidWZQKTsKLQkJbmV3X3N0YWNrLT5i dHNfb2Zmc2V0ID0gb2ZmbnVtOwotCQluZXdfc3RhY2stPmJ0c19wYXJlbnQgPSBzdGFja19p bjsKKwkJaWYgKGZhbHNlICYmIGFjY2VzcyA9PSBCVF9XUklURSkKKwkJeworCQkJbmV3X3N0 YWNrID0gKEJUU3RhY2spIHBhbGxvYyhzaXplb2YoQlRTdGFja0RhdGEpKTsKKwkJCW5ld19z dGFjay0+YnRzX2Jsa25vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoKmJ1ZlApOworCQkJbmV3 X3N0YWNrLT5idHNfb2Zmc2V0ID0gb2ZmbnVtOworCQkJbmV3X3N0YWNrLT5idHNfcGFyZW50 ID0gc3RhY2tfaW47CisJCX0KIAogCQkvKgogCQkgKiBQYWdlIGxldmVsIDEgaXMgbG93ZXN0 IG5vbi1sZWFmIHBhZ2UgbGV2ZWwgcHJpb3IgdG8gbGVhdmVzLiAgU28sIGlmCkBAIC0xODYs NyArMTkyLDggQEAgX2J0X3NlYXJjaChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWws IEJUU2Nhbkluc2VydCBrZXksIEJ1ZmZlciAqYnVmUCwKIAkJKmJ1ZlAgPSBfYnRfcmVsYW5k Z2V0YnVmKHJlbCwgKmJ1ZlAsIGNoaWxkLCBwYWdlX2FjY2Vzcyk7CiAKIAkJLyogb2theSwg YWxsIHNldCB0byBtb3ZlIGRvd24gYSBsZXZlbCAqLwotCQlzdGFja19pbiA9IG5ld19zdGFj azsKKwkJaWYgKGZhbHNlICYmIGFjY2VzcyA9PSBCVF9XUklURSkKKwkJCXN0YWNrX2luID0g bmV3X3N0YWNrOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CmluZGV4IDY3NDMxMjA4ZTdmLi5iZDUwNTM1Mzg1ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvYnVmbWdyLmMKQEAgLTY4NSw3ICs2ODUsNiBAQCBSZWFkUmVjZW50QnVmZmVyKFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVy IGJsb2NrTgogCUJ1ZmZlckRlc2MgKmJ1ZkhkcjsKIAlCdWZmZXJUYWcJdGFnOwogCXVpbnQz MgkJYnVmX3N0YXRlOwotCWJvb2wJCWhhdmVfcHJpdmF0ZV9yZWY7CiAKIAlBc3NlcnQoQnVm ZmVySXNWYWxpZChyZWNlbnRfYnVmZmVyKSk7CiAKQEAgLTcxMywzOCArNzEyLDE2IEBAIFJl YWRSZWNlbnRCdWZmZXIoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9y a051bSwgQmxvY2tOdW1iZXIgYmxvY2tOCiAJZWxzZQogCXsKIAkJYnVmSGRyID0gR2V0QnVm ZmVyRGVzY3JpcHRvcihyZWNlbnRfYnVmZmVyIC0gMSk7Ci0JCWhhdmVfcHJpdmF0ZV9yZWYg PSBHZXRQcml2YXRlUmVmQ291bnQocmVjZW50X2J1ZmZlcikgPiAwOwogCi0JCS8qCi0JCSAq IERvIHdlIGFscmVhZHkgaGF2ZSB0aGlzIGJ1ZmZlciBwaW5uZWQgd2l0aCBhIHByaXZhdGUg cmVmZXJlbmNlPyAgSWYKLQkJICogc28sIGl0IG11c3QgYmUgdmFsaWQgYW5kIGl0IGlzIHNh ZmUgdG8gY2hlY2sgdGhlIHRhZyB3aXRob3V0Ci0JCSAqIGxvY2tpbmcuICBJZiBub3QsIHdl IGhhdmUgdG8gbG9jayB0aGUgaGVhZGVyIGZpcnN0IGFuZCB0aGVuIGNoZWNrLgotCQkgKi8K LQkJaWYgKGhhdmVfcHJpdmF0ZV9yZWYpCi0JCQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVh ZF91MzIoJmJ1Zkhkci0+c3RhdGUpOwotCQllbHNlCi0JCQlidWZfc3RhdGUgPSBMb2NrQnVm SGRyKGJ1Zkhkcik7Ci0KLQkJaWYgKChidWZfc3RhdGUgJiBCTV9WQUxJRCkgJiYgQnVmZmVy VGFnc0VxdWFsKCZ0YWcsICZidWZIZHItPnRhZykpCisJCWlmICghUGluQnVmZmVyKGJ1Zkhk ciwgTlVMTCkgfHwKKwkJCSFCdWZmZXJUYWdzRXF1YWwoJnRhZywgJmJ1Zkhkci0+dGFnKSkK IAkJewotCQkJLyoKLQkJCSAqIEl0J3Mgbm93IHNhZmUgdG8gcGluIHRoZSBidWZmZXIuICBX ZSBjYW4ndCBwaW4gZmlyc3QgYW5kIGFzawotCQkJICogcXVlc3Rpb25zIGxhdGVyLCBiZWNh dXNlIGl0IG1pZ2h0IGNvbmZ1c2UgY29kZSBwYXRocyBsaWtlCi0JCQkgKiBJbnZhbGlkYXRl QnVmZmVyKCkgaWYgd2UgcGlubmVkIGEgcmFuZG9tIG5vbi1tYXRjaGluZyBidWZmZXIuCi0J CQkgKi8KLQkJCWlmIChoYXZlX3ByaXZhdGVfcmVmKQotCQkJCVBpbkJ1ZmZlcihidWZIZHIs IE5VTEwpOwkvKiBidW1wIHBpbiBjb3VudCAqLwotCQkJZWxzZQotCQkJCVBpbkJ1ZmZlcl9M b2NrZWQoYnVmSGRyKTsJLyogcGluIGZvciBmaXJzdCB0aW1lICovCi0KLQkJCXBnQnVmZmVy VXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0Kys7Ci0KLQkJCXJldHVybiB0cnVlOworCQkJVW5waW5C dWZmZXIoYnVmSGRyKTsKKwkJCXJldHVybiBmYWxzZTsKIAkJfQogCi0JCS8qIElmIHdlIGxv Y2tlZCB0aGUgaGVhZGVyIGFib3ZlLCBub3cgdW5sb2NrLiAqLwotCQlpZiAoIWhhdmVfcHJp dmF0ZV9yZWYpCi0JCQlVbmxvY2tCdWZIZHIoYnVmSGRyLCBidWZfc3RhdGUpOworCQlwZ0J1 ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2hpdCsrOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKIAly ZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3N0 YXR1cy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYmFja2VuZF9zdGF0dXMuaAppbmRleCAzMDE2 NTAxYWMwNS4uNDQzYzQ5MmNmMzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2Jh Y2tlbmRfc3RhdHVzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvYmFja2VuZF9zdGF0dXMu aApAQCAtOTcsNiArOTcsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdCYWNrZW5kR1NTU3RhdHVz CiAgKi8KIHR5cGVkZWYgc3RydWN0IFBnQmFja2VuZFN0YXR1cwogeworI2lmZGVmIHBnX2F0 dHJpYnV0ZV9hbGlnbmVkCisJcGdfYXR0cmlidXRlX2FsaWduZWQoUEdfQ0FDSEVfTElORV9T SVpFKQorI2VuZGlmCisKIAkvKgogCSAqIFRvIGF2b2lkIGxvY2tpbmcgb3ZlcmhlYWQsIHdl IHVzZSB0aGUgZm9sbG93aW5nIHByb3RvY29sOiBhIGJhY2tlbmQKIAkgKiBpbmNyZW1lbnRz IHN0X2NoYW5nZWNvdW50IGJlZm9yZSBtb2RpZnlpbmcgaXRzIGVudHJ5LCBhbmQgYWdhaW4g YWZ0ZXIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oIGIvc3JjL2luY2x1 ZGUvdXRpbHMvcmVsLmgKaW5kZXggYjU1MjM1OTkxNWYuLjdhYzJmYjE1MTJmIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9y ZWwuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgInJld3JpdGUvcHJzMmxvY2suaCIK ICNpbmNsdWRlICJzdG9yYWdlL2Jsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxl bG9jYXRvci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9zbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKICNpbmNsdWRlICJ1dGls cy9yZWx0cmlnZ2VyLmgiCkBAIC0xNTksNiArMTYwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVs YXRpb25EYXRhCiAKIAkvKiBkYXRhIG1hbmFnZWQgYnkgUmVsYXRpb25HZXRJbmRleEF0dHJC aXRtYXA6ICovCiAJYm9vbAkJcmRfYXR0cnN2YWxpZDsJLyogYXJlIGJpdG1hcHMgb2YgYXR0 cnMgdmFsaWQ/ICovCisKKwlCdWZmZXIJCXJkX3JlY2VudF9yb290OworCiAJQml0bWFwc2V0 ICAqcmRfa2V5YXR0cjsJCS8qIGNvbHMgdGhhdCBjYW4gYmUgcmVmJ2QgYnkgZm9yZWlnbiBr ZXlzICovCiAJQml0bWFwc2V0ICAqcmRfcGthdHRyOwkJLyogY29scyBpbmNsdWRlZCBpbiBw cmltYXJ5IGtleSAqLwogCUJpdG1hcHNldCAgKnJkX2lkYXR0cjsJCS8qIGluY2x1ZGVkIGlu IHJlcGxpY2EgaWRlbnRpdHkgaW5kZXggKi8KLS0gCjIuNTAuMQoK --------------8xriSvZLhsgPmdy7CNlM8G85 Content-Type: text/x-patch; charset=UTF-8; name="v20250807-0001-allow-pgbench-to-pin-backends-threads.patch" Content-Disposition: attachment; filename*0="v20250807-0001-allow-pgbench-to-pin-backends-threads.patch" Content-Transfer-Encoding: base64 RnJvbSA5MDk3ZjA0MDY5YWI2MDQxNDY2MDZhN2Y2ZWFiZTlhMmVhNzhkY2EwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBVYnVudHUKIDxhenVyZXVzZXJAaGIxNzYub3NkdjIz anh6dnh1dHB2b2ZteTR1azVoY2QuYnguaW50ZXJuYWwuY2xvdWRhcHAubmV0PgpEYXRlOiBT YXQsIDMxIE1heSAyMDI1IDAwOjQ1OjQ3ICswMDAwClN1YmplY3Q6IFtQQVRDSCB2MjAyNTA4 MDcgMDEvMTFdIGFsbG93IHBnYmVuY2ggdG8gcGluIGJhY2tlbmRzL3RocmVhZHMKClN1cHBv cnRlZCBwb2xpY2llcyBhcmUgIm5vbmUiIChkZWZhdWx0KSwgImNvbG9jYXRlZCIgKGJvdGgg cHJvY2Vzc2VzIG9uCnRoZSBzYW1lIHJhbmRvbSBjb3JlKSBhbmQgInJhbmRvbSIgKGJvdGgg cHJvY2Vzc2VzIG9uIGRpZmZlcmVudCBjb3JlcykuCi0tLQogc3JjL2Jpbi9wZ2JlbmNoL3Bn YmVuY2guYyB8IDM0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MSBmaWxlIGNoYW5nZWQsIDM0OCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ2JlbmNoL3BnYmVuY2guYyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXgg MTI1ZjNjN2JiYmUuLjk1NDc5ODYxMTc3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gv cGdiZW5jaC5jCisrKyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKQEAgLTQxLDYgKzQx LDcgQEAKICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNpbmNs dWRlIDxzeXMvcmVzb3VyY2UuaD4JCS8qIGZvciBnZXRybGltaXQgKi8KKyNpbmNsdWRlIDxz eXMvc3lzaW5mby5oPgogCiAvKiBGb3IgdGVzdGluZywgUEdCRU5DSF9VU0VfU0VMRUNUIGNh biBiZSBkZWZpbmVkIHRvIGZvcmNlIHVzZSBvZiB0aGF0IGNvZGUgKi8KICNpZiBkZWZpbmVk KEhBVkVfUFBPTEwpICYmICFkZWZpbmVkKFBHQkVOQ0hfVVNFX1NFTEVDVCkKQEAgLTMwMCw2 ICszMDEsMTIgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmRiTmFtZSA9IE5VTEw7CiBzdGF0aWMg Y2hhciAqbG9nZmlsZV9wcmVmaXggPSBOVUxMOwogc3RhdGljIGNvbnN0IGNoYXIgKnByb2du YW1lOwogCisjZGVmaW5lCUNQVV9QSU5OSU5HX05PTkUJCTAKKyNkZWZpbmUJQ1BVX1BJTk5J TkdfUkFORE9NCQkxCisjZGVmaW5lCUNQVV9QSU5OSU5HX0NPTE9DQVRFRAkyCisKK3N0YXRp YyBpbnQJcGlubmluZ19tb2RlID0gQ1BVX1BJTk5JTkdfTk9ORTsKKwogI2RlZmluZSBXU0VQ ICdAJwkJCQkvKiB3ZWlnaHQgc2VwYXJhdG9yICovCiAKIHN0YXRpYyB2b2xhdGlsZSBzaWdf YXRvbWljX3QgdGltZXJfZXhjZWVkZWQgPSBmYWxzZTsJLyogZmxhZyBmcm9tIHNpZ25hbApA QCAtNjM5LDYgKzY0Niw4IEBAIHR5cGVkZWYgc3RydWN0CiAJaW50NjQJCWNudDsJCQkvKiBj bGllbnQgdHJhbnNhY3Rpb24gY291bnQsIGZvciAtdDsgc2tpcHBlZAogCQkJCQkJCQkgKiBh bmQgZmFpbGVkIHRyYW5zYWN0aW9ucyBhcmUgYWxzbyBjb3VudGVkCiAJCQkJCQkJCSAqIGhl cmUgKi8KKworCWludAkJCWNwdTsJCQkvKiBDUFUgdG8gcGluIHRvLCAtMSA9IG5vIHBpbm5p bmcgKi8KIH0gQ1N0YXRlOwogCiAvKgpAQCAtNjcyLDYgKzY4MSw4IEBAIHR5cGVkZWYgc3Ry dWN0CiAKIAlTdGF0c0RhdGEJc3RhdHM7CiAJaW50NjQJCWxhdGVuY3lfbGF0ZTsJLyogY291 bnQgZXhlY3V0ZWQgYnV0IGxhdGUgdHJhbnNhY3Rpb25zICovCisKKwlpbnQJCQljcHU7CQkJ LyogQ1BVIHRvIHBpbiB0bywgLTEgPSBubyBwaW5uaW5nICovCiB9IFRTdGF0ZTsKIAogLyoK QEAgLTg0MSw2ICs4NTIsNDUgQEAgc3RhdGljIHZvaWQgYWRkX3NvY2tldF90b19zZXQoc29j a2V0X3NldCAqc2EsIGludCBmZCwgaW50IGlkeCk7CiBzdGF0aWMgaW50CXdhaXRfb25fc29j a2V0X3NldChzb2NrZXRfc2V0ICpzYSwgaW50NjQgdXNlY3MpOwogc3RhdGljIGJvb2wgc29j a2V0X2hhc19pbnB1dChzb2NrZXRfc2V0ICpzYSwgaW50IGZkLCBpbnQgaWR4KTsKIAorLyoK KyAqIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvciBhc3NpZ25pbmcgQ1BVcyB0byBwcm9j ZXNzZXMvdGhyZWFkcworICoKKyAqIFRoaXMgaXMgbm90IGEgc2ltcGxlIGdlbmVyYXRvciwg YmVjYXVzZSB3ZSB3YW50IHRvIGtlZXAgdGhlIG91dGNvbWUKKyAqIGJhbGFuY2VkIC0gaXQn cyBub3QganVzdCBhYm91dCB0aGUgdG90YWwgbnVtYmVyIG9mIHRocmVhZHMvcHJvY2Vzc2Vz CisgKiBhc3NpZ25lZCB0byBlYWNoIGNvcmUsIGJlY2F1c2UgYSB0aHJlYWQgaXMgbGlrZWx5 IG11Y2ggbGlnaHRlciB0aGFuIGEKKyAqIGJhY2tlbmQuIFNvIHdlIHdhbnQgdG8gZGlzdHJp YnV0ZSBlYWNoIG9mIHRob3NlIHVuaWZvcm1seS4KKyAqCisgKiBGb3IgZXhhbXBsZSwgYXNz dW1lIHdlIGhhdmUgMiBjb3JlcywgYW5kIHdhbnQgdG8gcGluIDIgdGhyZWFkcyBhbmQgMgor ICogYmFja2VuZHMuIFdlIGNvdWxkIHBpbiAyIHRocmVhZHMgdG8gY29yZSAwIGFuZCAyIGJh Y2tlbmRzIHRvIGNvcmUgMS4KKyAqIEJ1dCB0aGF0IHdvdWxkIG5vdCBiZSBiYWxhbmNlZCwg YmVjYXVzZSBjb3JlIDEgd2lsbCBoYXZlIHRvIGV4ZWN1dGUKKyAqIG11Y2ggbW9yZSB3b3Jr LiBJbnN0ZWFkLCB3ZSB3YW50IHRvIGFzc2lnbiAxKzEgdG8gZWFjaCBjb3JlLgorICoKKyAq IEFub3RoZXIgcmVzdHJpY3Rpb24gaXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGFzc2lnbiBi b3RoIHNpZGVzIG9mCisgKiBhIGNvbm5lY3Rpb24gdG8gdGhlIHNhbWUgY29yZS4KKyAqCisg KiBBbGwgb2YgdGhhdCBob3dldmVyIGFwcGxpZXMgdG8gdGhlICdyYW5kb20nIG1vZGUuIElu IHRoZSAnY29sb2NhdGVkJworICogbW9kZSwgd2Ugd2FudCB0byBhc3NpZ24gYm90aCBzaWRl cyBvZiBhIGNvbm5lY3Rpb24gdG8gdGhlIHNhbWUgY29yZS4KKyAqIEJ1dCB3ZSBzdGlsbCBw aWNrIHRoZSBjb3JlIHJhbmRvbWx5LgorICovCit0eXBlZGVmIHN0cnVjdCBjcHVfZ2VuZXJh dG9yX3N0YXRlCit7CisJaW50CQkJbmNwdXM7CQkJLyogbnVtYmVyIG9mIENQVXMgYXZhaWxh YmxlICovCisJaW50CQkJbml0ZW1zOwkJCS8qIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgcXVl dWUgKi8KKwlpbnQJCSAgICpudGhyZWFkczsJCS8qIG51bWJlciBvZiB0aHJlYWRzIGZvciBl YWNoIENQVSAqLworCWludAkJICAgKm5jbGllbnRzOwkJLyogbnVtYmVyIG9mIHByb2Nlc3Nl cyBmb3IgZWFjaCBDUFUgKi8KKwlpbnQJCSAgICppdGVtczsJCQkvKiBxdWV1ZSBvZiBDUFVz IHRvIHBpY2sgZnJvbSAqLworfQkJCWNwdV9nZW5lcmF0b3Jfc3RhdGU7CisKK3N0YXRpYyBj cHVfZ2VuZXJhdG9yX3N0YXRlIGNwdV9nZW5lcmF0b3JfaW5pdChpbnQgbmNwdXMpOworc3Rh dGljIHZvaWQgY3B1X2dlbmVyYXRvcl9yZWZpbGwoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqIHN0 YXRlKTsKK3N0YXRpYyB2b2lkIGNwdV9nZW5lcmF0b3JfcmVzZXQoY3B1X2dlbmVyYXRvcl9z dGF0ZSAqIHN0YXRlKTsKK3N0YXRpYyBpbnQJY3B1X2dlbmVyYXRvcl90aHJlYWQoY3B1X2dl bmVyYXRvcl9zdGF0ZSAqIHN0YXRlKTsKK3N0YXRpYyBpbnQJY3B1X2dlbmVyYXRvcl9jbGll bnQoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqIHN0YXRlLCBpbnQgdGhyZWFkX2NwdSk7CitzdGF0 aWMgdm9pZCBjcHVfZ2VuZXJhdG9yX3ByaW50KGNwdV9nZW5lcmF0b3Jfc3RhdGUgKiBzdGF0 ZSk7CitzdGF0aWMgYm9vbCBjcHVfZ2VuZXJhdG9yX2NoZWNrKGNwdV9nZW5lcmF0b3Jfc3Rh dGUgKiBzdGF0ZSk7CisKK3N0YXRpYyB2b2lkIHJlc2V0X3Bpbm5pbmcoVFN0YXRlICp0aHJl YWRzLCBpbnQgbnRocmVhZHMpOworCiAvKiBjYWxsYmFjayB1c2VkIHRvIGJ1aWxkIHJvd3Mg Zm9yIENPUFkgZHVyaW5nIGRhdGEgbG9hZGluZyAqLwogdHlwZWRlZiB2b2lkICgqaW5pdFJv d01ldGhvZCkgKFBRRXhwQnVmZmVyRGF0YSAqc3FsLCBpbnQ2NCBjdXJyKTsKIApAQCAtOTU5 LDYgKzEwMDksNyBAQCB1c2FnZSh2b2lkKQogCQkgICAiICAtLXNhbXBsaW5nLXJhdGU9TlVN ICAgICAgZnJhY3Rpb24gb2YgdHJhbnNhY3Rpb25zIHRvIGxvZyAoZS5nLiwgMC4wMSBmb3Ig MSUlKVxuIgogCQkgICAiICAtLXNob3ctc2NyaXB0PU5BTUUgICAgICAgc2hvdyBidWlsdGlu IHNjcmlwdCBjb2RlLCB0aGVuIGV4aXRcbiIKIAkJICAgIiAgLS12ZXJib3NlLWVycm9ycyAg ICAgICAgIHByaW50IG1lc3NhZ2VzIG9mIGFsbCBlcnJvcnNcbiIKKwkJICAgIiAgLS1waW4t Y3B1cyBNT0RFICAgICAgICAgIHBpbiB0aHJlYWRzIGFuZCBiYWNrZW5kcyB0byBDUFUgKHJh bmRvbSBvciBjb2xvY2F0ZWQpXG4iCiAJCSAgICJcbkNvbW1vbiBvcHRpb25zOlxuIgogCQkg ICAiICAtLWRlYnVnICAgICAgICAgICAgICAgICAgcHJpbnQgZGVidWdnaW5nIG91dHB1dFxu IgogCQkgICAiICAtZCwgLS1kYm5hbWU9REJOQU1FICAgICAgZGF0YWJhc2UgbmFtZSB0byBj b25uZWN0IHRvXG4iCkBAIC02NzE4LDYgKzY3NjksNyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAkJeyJ2ZXJib3NlLWVycm9ycyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAxNX0s CiAJCXsiZXhpdC1vbi1hYm9ydCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAxNn0sCiAJCXsiZGVi dWciLCBub19hcmd1bWVudCwgTlVMTCwgMTd9LAorCQl7InBpbi1jcHVzIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsIDE4fSwKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJfTsKIApAQCAt NzA3MSw2ICs3MTIzLDE1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJY2Fz ZSAxNzoJCQkvKiBkZWJ1ZyAqLwogCQkJCXBnX2xvZ2dpbmdfaW5jcmVhc2VfdmVyYm9zaXR5 KCk7CiAJCQkJYnJlYWs7CisJCQljYXNlIDE4OgkJCS8qIHBpbiBDUFVzICovCisJCQkJaWYg KHBnX3N0cmNhc2VjbXAob3B0YXJnLCAicmFuZG9tIikgPT0gMCkKKwkJCQkJcGlubmluZ19t b2RlID0gQ1BVX1BJTk5JTkdfUkFORE9NOworCQkJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAo b3B0YXJnLCAiY29sb2NhdGVkIikgPT0gMCkKKwkJCQkJcGlubmluZ19tb2RlID0gQ1BVX1BJ Tk5JTkdfQ09MT0NBVEVEOworCQkJCWVsc2UKKwkJCQkJcGdfZmF0YWwoImludmFsaWQgcGlu bmluZyBtZXRob2QsIGV4cGVjdGluZyBcInJhbmRvbVwiIG9yIFwiY29sb2NhdGVkXCIsIGdv dDogXCIlc1wiIiwKKwkJCQkJCQkgb3B0YXJnKTsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6 CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCiAJ CQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9y bWF0aW9uLiIsIHByb2duYW1lKTsKQEAgLTczNjgsNiArNzQyOSw5NiBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAkJbmNsaWVudHNfZGVhbHQgKz0gdGhyZWFkLT5uc3RhdGU7 CiAJfQogCisJLyogcmVzZXQgdGhlIENQVSBhc3NpZ25tZW50LCBpLmUuIG5vIHBpbm5pbmcg YnkgZGVmYXVsdCAqLworCXJlc2V0X3Bpbm5pbmcodGhyZWFkcywgbnRocmVhZHMpOworCisJ LyogdHJ5IHRvIGFzc2lnbiB0aHJlYWRzL2NsaWVudHMgdG8gQ1BVcyAqLworCWlmIChwaW5u aW5nX21vZGUgIT0gQ1BVX1BJTk5JTkdfTk9ORSkKKwl7CisJCWludAkJCW5wcm9jcyA9IGdl dF9ucHJvY3MoKTsKKwkJY3B1X2dlbmVyYXRvcl9zdGF0ZSBzdGF0ZSA9IGNwdV9nZW5lcmF0 b3JfaW5pdChucHJvY3MpOworCityZXRyeToKKwkJLyogc3RhcnQgZnJvbSBzY3JhdGNoICov CisJCWNwdV9nZW5lcmF0b3JfcmVzZXQoJnN0YXRlKTsKKworCQkvKiBhc3NpZ24gQ1BVIHRv IGFsbCB0aHJlYWRzICovCisJCWZvciAoaSA9IDA7IGkgPCBudGhyZWFkczsgaSsrKQorCQl7 CisJCQlUU3RhdGUJICAgKnRocmVhZCA9ICZ0aHJlYWRzW2ldOworCisJCQl0aHJlYWQtPmNw dSA9IGNwdV9nZW5lcmF0b3JfdGhyZWFkKCZzdGF0ZSk7CisJCX0KKworCQkvKgorCQkgKiBh c3NpZ24gQ1BVcyB0byBiYWNrZW5kcywgb25lIGF0IGEgdGltZSAoZm9yIGVhY2ggdGhyZWFk KQorCQkgKgorCQkgKiBUaGlzIGhlbHBzIHRvIGtlZXAgaXQgYmFsYW5jZWQgaW4gdGhlICdy YW5kb20nIG1vZGUuCisJCSAqLworCQl3aGlsZSAodHJ1ZSkKKwkJeworCQkJLyogZGlkIHdl IGZpbmQgYW55IHVuYXNzaWduZWQgYmFja2VuZD8gKi8KKwkJCWJvb2wJCWZvdW5kID0gZmFs c2U7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBudGhyZWFkczsgaSsrKQorCQkJeworCQkJCVRT dGF0ZQkgICAqdGhyZWFkID0gJnRocmVhZHNbaV07CisKKwkJCQlmb3IgKGludCBqID0gMDsg aiA8IHRocmVhZC0+bnN0YXRlOyBqKyspCisJCQkJeworCQkJCQkvKiBza2lwIGJhY2tlbmRz IHdpdGggYWxyZWFkeSBhc3NpZ25lZCBDUFVzICovCisJCQkJCWlmICh0aHJlYWQtPnN0YXRl W2pdLmNwdSAhPSAtMSkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCWlmIChwaW5uaW5nX21v ZGUgPT0gQ1BVX1BJTk5JTkdfUkFORE9NKQorCQkJCQkJdGhyZWFkLT5zdGF0ZVtqXS5jcHUg PSBjcHVfZ2VuZXJhdG9yX2NsaWVudCgmc3RhdGUsIHRocmVhZC0+Y3B1KTsKKwkJCQkJZWxz ZQorCQkJCQl7CisJCQkJCQlzdGF0ZS5uY2xpZW50c1t0aHJlYWQtPmNwdV0rKzsKKwkJCQkJ CXRocmVhZC0+c3RhdGVbal0uY3B1ID0gdGhyZWFkLT5jcHU7CisJCQkJCX0KKworCQkJCQkv KiBtb3ZlIHRvIHRoZSBuZXh0IHRocmVhZCAqLworCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJ CWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyogaWYgd2UgaGF2ZW4ndCBmb3VuZCBhbnkg dW5hc3NpZ25lZCBiYWNrZW5kLCB3ZSdyZSBkb25lICovCisJCQlpZiAoIWZvdW5kKQorCQkJ CWJyZWFrOworCQl9CisKKwkJLyogdmFsaWRhdGUgdGhlIGFzc2lnbm1lbnRzIGRvbid0IHZp b2xhdGUgYW55IG9mIHRoZSByZXN0cmljdGlvbnMgKi8KKwkJaWYgKChwaW5uaW5nX21vZGUg PT0gQ1BVX1BJTk5JTkdfUkFORE9NKSAmJgorCQkJIWNwdV9nZW5lcmF0b3JfY2hlY2soJnN0 YXRlKSkKKwkJeworCQkJcmVzZXRfcGlubmluZyh0aHJlYWRzLCBudGhyZWFkcyk7CisJCQln b3RvIHJldHJ5OworCQl9CisKKwkJLyogcHJpbnQgaW5mbyBhYm91dCBDUFUgYXNzaWdubWVu dHMgKi8KKwkJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwor CQljcHVfZ2VuZXJhdG9yX3ByaW50KCZzdGF0ZSk7CisKKwkJcHJpbnRmKCItLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnRocmVhZHM7 IGkrKykKKwkJeworCQkJVFN0YXRlCSAgICp0aHJlYWQgPSAmdGhyZWFkc1tpXTsKKworCQkJ cHJpbnRmKCJ0aHJlYWQgJWQgQ1BVICVkXG4iLCBpLCB0aHJlYWQtPmNwdSk7CisKKwkJCWZv ciAoaW50IGogPSAwOyBqIDwgdGhyZWFkLT5uc3RhdGU7IGorKykKKwkJCXsKKwkJCQlwcmlu dGYoIiAgY2xpZW50ICVkIENQVSAlZFxuIiwgaiwgdGhyZWFkLT5zdGF0ZVtqXS5jcHUpOwor CQkJfQorCQl9CisKKwkJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4i KTsKKwl9CisKIAkvKiBhbGwgY2xpZW50cyBtdXN0IGJlIGFzc2lnbmVkIHRvIGEgdGhyZWFk ICovCiAJQXNzZXJ0KG5jbGllbnRzX2RlYWx0ID09IG5jbGllbnRzKTsKIApAQCAtNzUxOSw2 ICs3NjcwLDM5IEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAJCX0KIAl9CiAKKwkvKiBwaW4g dGhlIHRocmVhZCBhbmQgYmFja2VuZHMgZm9yIGl0J3MgY29ubmVjdGlvbnMgdG8gdGhlIHNh bWUgQ1BVICovCisJaWYgKHBpbm5pbmdfbW9kZSAhPSBDUFVfUElOTklOR19OT05FKQorCXsK KwkJY3B1X3NldF90ICAqY3B1c2V0cDsKKwkJc2l6ZV90CQljcHVzZXRzaXplOworCQlzaXpl X3QJCW5wcm9jcyA9IGdldF9ucHJvY3MoKTsKKworCQljcHVzZXRwID0gQ1BVX0FMTE9DKG5w cm9jcyk7CisJCWNwdXNldHNpemUgPSBDUFVfQUxMT0NfU0laRShucHJvY3MpOworCisJCUNQ VV9aRVJPX1MoY3B1c2V0c2l6ZSwgY3B1c2V0cCk7CisJCUNQVV9TRVRfUyh0aHJlYWQtPmNw dSwgY3B1c2V0c2l6ZSwgY3B1c2V0cCk7CisKKwkJLyogdGhyZWFkIDAgZGVzcyBub3QgaGF2 ZSBhbiBhY3R1YWwgcHRocmVhZCAqLworCQlpZiAodGhyZWFkLT50aHJlYWQpCisJCQlwdGhy ZWFkX3NldGFmZmluaXR5X25wKHRocmVhZC0+dGhyZWFkLCBjcHVzZXRzaXplLCBjcHVzZXRw KTsKKwkJZWxzZQorCQkJc2NoZWRfc2V0YWZmaW5pdHkoZ2V0cGlkKCksIGNwdXNldHNpemUs IGNwdXNldHApOworCisJCS8qIGRldGVybWluZSBQSUQgb2YgdGhlIGJhY2tlbmQsIHBpbiBp dCB0byB0aGUgc2FtZSBDUFUgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuc3RhdGU7IGkr KykKKwkJeworCQkJcGlkX3QJCXBpZCA9IFBRYmFja2VuZFBJRChzdGF0ZVtpXS5jb24pOwor CisJCQlDUFVfWkVST19TKGNwdXNldHNpemUsIGNwdXNldHApOworCQkJQ1BVX1NFVF9TKHN0 YXRlW2ldLmNwdSwgY3B1c2V0c2l6ZSwgY3B1c2V0cCk7CisKKwkJCXNjaGVkX3NldGFmZmlu aXR5KHBpZCwgY3B1c2V0c2l6ZSwgY3B1c2V0cCk7CisJCX0KKworCQlDUFVfRlJFRShjcHVz ZXRwKTsKKwl9CisKIAkvKiBHTyAqLwogCVRIUkVBRF9CQVJSSUVSX1dBSVQoJmJhcnJpZXIp OwogCkBAIC03OTkyLDMgKzgxNzYsMTY3IEBAIHNvY2tldF9oYXNfaW5wdXQoc29ja2V0X3Nl dCAqc2EsIGludCBmZCwgaW50IGlkeCkKIH0KIAogI2VuZGlmCQkJCQkJCS8qIFBPTExfVVNJ TkdfU0VMRUNUICovCisKK3N0YXRpYyBjcHVfZ2VuZXJhdG9yX3N0YXRlCitjcHVfZ2VuZXJh dG9yX2luaXQoaW50IG5jcHVzKQoreworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJY3B1X2dl bmVyYXRvcl9zdGF0ZSBzdGF0ZTsKKworCXN0YXRlLm5jcHVzID0gbmNwdXM7CisKKwlzdGF0 ZS5udGhyZWFkcyA9IHBnX21hbGxvYyhzaXplb2YoaW50KSAqIG5jcHVzKTsKKwlzdGF0ZS5u Y2xpZW50cyA9IHBnX21hbGxvYyhzaXplb2YoaW50KSAqIG5jcHVzKTsKKworCXN0YXRlLm5p dGVtcyA9IG5jcHVzOworCXN0YXRlLml0ZW1zID0gcGdfbWFsbG9jKHNpemVvZihpbnQpICog bmNwdXMpOworCWZvciAoaW50IGkgPSAwOyBpIDwgbmNwdXM7IGkrKykKKwl7CisJCXN0YXRl Lm50aHJlYWRzW2ldID0gMDsKKwkJc3RhdGUubmNsaWVudHNbaV0gPSAwOworCQlzdGF0ZS5p dGVtc1tpXSA9IGk7CisJfQorCisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisJc3JhbmQ0 OCh0di50dl91c2VjKTsKKworCXJldHVybiBzdGF0ZTsKK30KKworc3RhdGljIHZvaWQKK2Nw dV9nZW5lcmF0b3JfcmVmaWxsKGNwdV9nZW5lcmF0b3Jfc3RhdGUgKiBzdGF0ZSkKK3sKKwlz dHJ1Y3QgdGltZXZhbCB0djsKKworCXN0YXRlLT5pdGVtcyA9IHBnX3JlYWxsb2Moc3RhdGUt Pml0ZW1zLAorCQkJCQkJCSAgKHN0YXRlLT5uaXRlbXMgKyBzdGF0ZS0+bmNwdXMpICogc2l6 ZW9mKGludCkpOworCisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisKKwlzcmFuZDQ4KHR2 LnR2X3VzZWMpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0ZS0+bmNwdXM7IGkrKykK KwkJc3RhdGUtPml0ZW1zW3N0YXRlLT5uaXRlbXMrK10gPSBpOworfQorCitzdGF0aWMgdm9p ZAorY3B1X2dlbmVyYXRvcl9yZXNldChjcHVfZ2VuZXJhdG9yX3N0YXRlICogc3RhdGUpCit7 CisJc3RhdGUtPm5pdGVtcyA9IDA7CisJY3B1X2dlbmVyYXRvcl9yZWZpbGwoc3RhdGUpOwor CisJZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0ZS0+bmNwdXM7IGkrKykKKwl7CisJCXN0YXRl LT5udGhyZWFkc1tpXSA9IDA7CisJCXN0YXRlLT5uY2xpZW50c1tpXSA9IDA7CisJfQorfQor CitzdGF0aWMgaW50CitjcHVfZ2VuZXJhdG9yX3RocmVhZChjcHVfZ2VuZXJhdG9yX3N0YXRl ICogc3RhdGUpCit7CisJaWYgKHN0YXRlLT5uaXRlbXMgPT0gMCkKKwkJY3B1X2dlbmVyYXRv cl9yZWZpbGwoc3RhdGUpOworCisJd2hpbGUgKHRydWUpCisJeworCQlpbnQJCQlpZHggPSBs cmFuZDQ4KCkgJSBzdGF0ZS0+bml0ZW1zOworCQlpbnQJCQljcHUgPSBzdGF0ZS0+aXRlbXNb aWR4XTsKKworCQlzdGF0ZS0+aXRlbXNbaWR4XSA9IHN0YXRlLT5pdGVtc1tzdGF0ZS0+bml0 ZW1zIC0gMV07CisJCXN0YXRlLT5uaXRlbXMtLTsKKworCQlzdGF0ZS0+bnRocmVhZHNbY3B1 XSsrOworCisJCXJldHVybiBjcHU7CisJfQorfQorCitzdGF0aWMgaW50CitjcHVfZ2VuZXJh dG9yX2NsaWVudChjcHVfZ2VuZXJhdG9yX3N0YXRlICogc3RhdGUsIGludCB0aHJlYWRfY3B1 KQoreworCWludAkJCW1pbl9jbGllbnRzOworCWJvb2wJCWhhc192YWxpZF9jcHVzID0gZmFs c2U7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHN0YXRlLT5uaXRlbXM7IGkrKykKKwl7CisJ CWlmIChzdGF0ZS0+aXRlbXNbaV0gIT0gdGhyZWFkX2NwdSkKKwkJeworCQkJaGFzX3ZhbGlk X2NwdXMgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWhhc192YWxpZF9j cHVzKQorCQljcHVfZ2VuZXJhdG9yX3JlZmlsbChzdGF0ZSk7CisKKwltaW5fY2xpZW50cyA9 IElOVF9NQVg7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0ZS0+bml0ZW1zOyBpKyspCisJ eworCQlpZiAoc3RhdGUtPml0ZW1zW2ldID09IHRocmVhZF9jcHUpCisJCQljb250aW51ZTsK KworCQltaW5fY2xpZW50cyA9IE1pbihtaW5fY2xpZW50cywgc3RhdGUtPm5jbGllbnRzW3N0 YXRlLT5pdGVtc1tpXV0pOworCX0KKworCXdoaWxlICh0cnVlKQorCXsKKwkJaW50CQkJaWR4 ID0gbHJhbmQ0OCgpICUgc3RhdGUtPm5pdGVtczsKKwkJaW50CQkJY3B1ID0gc3RhdGUtPml0 ZW1zW2lkeF07CisKKwkJaWYgKGNwdSA9PSB0aHJlYWRfY3B1KQorCQkJY29udGludWU7CisK KwkJaWYgKHN0YXRlLT5uY2xpZW50c1tjcHVdICE9IG1pbl9jbGllbnRzKQorCQkJY29udGlu dWU7CisKKwkJc3RhdGUtPml0ZW1zW2lkeF0gPSBzdGF0ZS0+aXRlbXNbc3RhdGUtPm5pdGVt cyAtIDFdOworCQlzdGF0ZS0+bml0ZW1zLS07CisKKwkJc3RhdGUtPm5jbGllbnRzW2NwdV0r KzsKKworCQlyZXR1cm4gY3B1OworCX0KK30KKworc3RhdGljIHZvaWQKK2NwdV9nZW5lcmF0 b3JfcHJpbnQoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqIHN0YXRlKQoreworCWZvciAoaW50IGkg PSAwOyBpIDwgc3RhdGUtPm5jcHVzOyBpKyspCisJeworCQlwcmludGYoIkNQVSAlZCB0aHJl YWRzICVkIGNsaWVudHMgJWRcbiIsIGksIHN0YXRlLT5udGhyZWFkc1tpXSwgc3RhdGUtPm5j bGllbnRzW2ldKTsKKwl9Cit9CisKK3N0YXRpYyBib29sCitjcHVfZ2VuZXJhdG9yX2NoZWNr KGNwdV9nZW5lcmF0b3Jfc3RhdGUgKiBzdGF0ZSkKK3sKKwlpbnQJCQltaW5fY291bnQgPSBJ TlRfTUFYLAorCQkJCW1heF9jb3VudCA9IDA7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHN0 YXRlLT5uY3B1czsgaSsrKQorCXsKKwkJbWluX2NvdW50ID0gTWluKG1pbl9jb3VudCwgc3Rh dGUtPm50aHJlYWRzW2ldICsgc3RhdGUtPm5jbGllbnRzW2ldKTsKKwkJbWF4X2NvdW50ID0g TWF4KG1heF9jb3VudCwgc3RhdGUtPm50aHJlYWRzW2ldICsgc3RhdGUtPm5jbGllbnRzW2ld KTsKKwl9CisKKwlyZXR1cm4gKG1heF9jb3VudCAtIG1pbl9jb3VudCA8PSAxKTsKK30KKwor c3RhdGljIHZvaWQKK3Jlc2V0X3Bpbm5pbmcoVFN0YXRlICp0aHJlYWRzLCBpbnQgbnRocmVh ZHMpCit7CisJLyogcmVzZXQgdGhlIENQVSBhc3NpZ25tZW50LCBpLmUuIG5vIHBpbm5pbmcg YnkgZGVmYXVsdCAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbnRocmVhZHM7IGkrKykKKwl7 CisJCVRTdGF0ZQkgICAqdGhyZWFkID0gJnRocmVhZHNbaV07CisKKwkJdGhyZWFkLT5jcHUg PSAtMTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IHRocmVhZC0+bnN0YXRlOyBqKyspCisJ CXsKKwkJCXRocmVhZC0+c3RhdGVbal0uY3B1ID0gLTE7CisJCX0KKwl9Cit9Ci0tIAoyLjUw LjEKCg== --------------8xriSvZLhsgPmdy7CNlM8G85--