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.96) (envelope-from ) id 1vJxuw-00A47C-2A for pgsql-hackers@arkaria.postgresql.org; Fri, 14 Nov 2025 17:49:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vJxuu-007OUC-09 for pgsql-hackers@arkaria.postgresql.org; Fri, 14 Nov 2025 17:49:00 +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.96) (envelope-from ) id 1vJxut-007OU4-09 for pgsql-hackers@lists.postgresql.org; Fri, 14 Nov 2025 17:48:59 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1vJxuk-0078cg-0r for pgsql-hackers@lists.postgresql.org; Fri, 14 Nov 2025 17:48:58 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4d7Pkw5lYsz49PyD; Fri, 14 Nov 2025 19:48:40 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1763142521; 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=4dokboVaTMBlm60GUB78/hpx+DrANcB+pKCifjZ57bg=; b=Y9uY4oT8hWOB+n6D94sQxAOiSM4H0qHIEAF69CvGrrnOnf7POJHn2WNg27LRHO31YvvT8J LjoyN8Z+euKXuQF41ogss1dvAbWbJnnkv2Px8eea7Fp/at9bp8BTJYYqTVc5k2uNOQbyBI mwl9nipYdDxkh/2/K8LV0nRO4vb5CUJ23SPB27O6p5M+ws/KnqLtCYp58p1SMwlRQ9ptTg O8U/HtBN5w0FefsODxKWP4pGidYIxUCQ5jhkV3vC68JUrQ4dhwy2k8GJx+A+6uyM1V05Zf +pWQPI88q39ZGgWPPb2mwEY801DWsDWRNX6YBxe//r8wirwueU5cw5YHE3WckQ== ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1763142521; b=rbxsP2rAFxaT8WIXLdkN26+KWTGeQxMmoSVn/Ww8EU4ndAPsYtHI9KQWNk/vCJRfejeQR2 BzIB+vt+jABMxOhmvw7AFLEAcSL2kbkdwtG2o6LYMu4xLsTYXh/fHJ5UQHS4hcr1oFiT1X p+wqEQ9inH0HKx17XLinNmKPz2HLeh4r1WEEkghq6YiUJCwRV3pLk1qJZ+2TeU/+IMw77F amjZotUxtjLvbUkGbFj8vYfPs2IrZ0bC5Of84onm+PSlW0nrLiP4qrvlR6pJg1ODyMwpRs ulmiYKSFBmxwNkQDMaGGTYxKG+m99eh9/vK2CfD+3kZRRsxd0bU7fE9mEaY0QQ== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1763142521; 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=4dokboVaTMBlm60GUB78/hpx+DrANcB+pKCifjZ57bg=; b=T1NfWhYJwIe/aNQvq9fU/HYuJ4sbGQ2bJHzeC2cVME9/eiol2sMyGIl1DfCNCZv1EiGZ9a WTQu/QOiS7Zoy/7yV/E+YNdW0Ez4u7Yut2otM5hb6qfTxxfMXIPC1A+/YzgLqE92ymreKC Iq9Ofk1pKcjGZEp3RxUL5TXeJDDh6F4efTQbue1C3xsRA8Z966ws7c/2f75bnENwdrLuGP j3B5euRUv2ySKdiPXK3PmKyizjtV78m8sZ+CRnJVxIOrcUyNKAw/wbyKmZUEiFJaFrkQtC fy+Po2fENndil9sQyS+LfUAHNUuHw6a76s1ZwKwLbMje/q/e6K6wXsdcZgX22A== Content-Type: multipart/mixed; boundary="------------MsYmZqOqmhDH81OSlLXN4Y7x" Message-ID: <4a9dda70-0af7-41a4-9636-b168f2fc48ef@iki.fi> Date: Fri, 14 Nov 2025 19:48:39 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC: make mxidoff 64 bits To: Maxim Orlov Cc: wenhui qiu , Alexander Korotkov , Postgres hackers References: <4535f3aa-3220-4760-b1f5-2bc91f248e03@iki.fi> <2bc58592-9d74-4af0-bdd1-1a88e8683f7c@iki.fi> <36531c0e-292c-409d-bbc7-a252cf6e910a@iki.fi> <54aa8f65-f0e4-4464-b543-e0399c1cab1e@iki.fi> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: 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. --------------MsYmZqOqmhDH81OSlLXN4Y7x Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable On 14/11/2025 17:40, Maxim Orlov wrote: > On Wed, 12 Nov 2025 at 16:00, Heikki Linnakangas =20 >> I kept all the new test cases for now. We need to decide which >> ones are worth keeping, and polish and speed up the ones we decide >> to keep. Attached is a new patch version, with more work on the tests. The=20 pg_upgrade patch=20 (v26-0004-Add-pg_upgrade-for-64-bit-multixact-offsets.patch) now=20 includes a test case. I'm proposing to commit that test along with these=20 patches. It's a heavily-modified version of the test cases you wrote. I tested that test using old installations, all the way down to version=20 9.4. That required a bunch of changes to the test perl modules, to make=20 them work with such old versions. Without any extra changes, the test=20 works down to v11. Later patches in the patch set add more tests, labelled with the TEST:=20 prefix. Those are the tests you posted earlier, with little to no=20 modifications. I'm just carrying those around, so that I can easily run=20 them now during development. But I don't think they're adding much value=20 and I plan to leave them out of the final commit. > I think of two cases here. > A) Upgrade from "new cluster": > =C2=A0 =C2=A0 *=C2=A0created cluster with pre 32-bit overflow mxoff > =C2=A0 =C2=A0 * consume around of 2k of mxacts (1k before=C2=A032-bit = overflow > =C2=A0 =C2=A0 =C2=A0 and 1k after) > =C2=A0 =C2=A0 * run pg_upgrade > =C2=A0 =C2=A0 * check upgraded cluster is working > =C2=A0 =C2=A0 * check data invariant > B)=C2=A0 Same as A), but for an "old cluster" with oldinstall env. Makes sense. The 007_multixact_conversion.pl test in the attached patches includes=20 two test scenarios: "basic" and "wraparound" test. In the basic=20 scenario there's no overflow or wraparound involved, but it can be run=20 without an old installation, i.e. in a "new -> new upgrade". The=20 "wraparound" scenario is the same, but the old cluster is reset with=20 pg_resetwal so that the mxoff wraps around. The "wraparound" requires a=20 pre-19 old installation, because the pg_resetwal logic requires pre-v19=20 layout. If we enhance the reset_mxoff() perl function in the test so that it=20 also works with v19, we could run the "wraparound" scenario in new->new=20 upgrades too. That would essentially the case A) that you listed above. I think it's already pretty good as it is though. I don't expect the=20 point where we cross offset 2^32 in the new version to be very=20 interesting now that we use 64-bit offsets everywhere. - Heikki --------------MsYmZqOqmhDH81OSlLXN4Y7x Content-Type: text/x-patch; charset=UTF-8; name="v26-0001-Move-pg_multixact-SLRU-page-format-definitions-t.patch" Content-Disposition: attachment; filename*0="v26-0001-Move-pg_multixact-SLRU-page-format-definitions-t.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5MzBmOTRkM2FlNjZlZDA1NGRkYzJhYWVhNWIyNDdhMzdjNmIzYmEzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTIgTm92IDIwMjUgMTQ6MTk6MzIgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyNiAwMS8xMF0gTW92ZSBwZ19tdWx0aXhhY3QgU0xSVSBwYWdl IGZvcm1hdCBkZWZpbml0aW9ucyB0bwogc2VwYXJhdGUgaGVhZGVyCgotLS0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jICB8IDExOSAtLS0tLS0tLS0tLS0tLS0t LS0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oIHwgMTQwICsr KysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxNDAgaW5zZXJ0aW9u cygrKSwgMTE5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRl L2FjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vbXVsdGl4YWN0LmMKaW5kZXggOWQ1ZjEzMGFmN2UuLmFjYjJhNjc4OGY5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtODksMTI1ICs4OSw2IEBA CiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKIAogCi0vKgotICogRGVmaW5lcyBmb3Ig TXVsdGlYYWN0T2Zmc2V0IHBhZ2Ugc2l6ZXMuICBBIHBhZ2UgaXMgdGhlIHNhbWUgQkxDS1Na IGFzIGlzCi0gKiB1c2VkIGV2ZXJ5d2hlcmUgZWxzZSBpbiBQb3N0Z3Jlcy4KLSAqCi0gKiBO b3RlOiBiZWNhdXNlIE11bHRpWGFjdE9mZnNldHMgYXJlIDMyIGJpdHMgYW5kIHdyYXAgYXJv dW5kIGF0IDB4RkZGRkZGRkYsCi0gKiBNdWx0aVhhY3QgcGFnZSBudW1iZXJpbmcgYWxzbyB3 cmFwcyBhcm91bmQgYXQKLSAqIDB4RkZGRkZGRkYvTVVMVElYQUNUX09GRlNFVFNfUEVSX1BB R0UsIGFuZCBzZWdtZW50IG51bWJlcmluZyBhdAotICogMHhGRkZGRkZGRi9NVUxUSVhBQ1Rf T0ZGU0VUU19QRVJfUEFHRS9TTFJVX1BBR0VTX1BFUl9TRUdNRU5ULiAgV2UgbmVlZAotICog dGFrZSBubyBleHBsaWNpdCBub3RpY2Ugb2YgdGhhdCBmYWN0IGluIHRoaXMgbW9kdWxlLCBl eGNlcHQgd2hlbiBjb21wYXJpbmcKLSAqIHNlZ21lbnQgYW5kIHBhZ2UgbnVtYmVycyBpbiBU cnVuY2F0ZU11bHRpWGFjdCAoc2VlCi0gKiBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMp LgotICovCi0KLS8qIFdlIG5lZWQgZm91ciBieXRlcyBwZXIgb2Zmc2V0ICovCi0jZGVmaW5l IE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFIChCTENLU1ogLyBzaXplb2YoTXVsdGlYYWN0 T2Zmc2V0KSkKLQotc3RhdGljIGlubGluZSBpbnQ2NAotTXVsdGlYYWN0SWRUb09mZnNldFBh Z2UoTXVsdGlYYWN0SWQgbXVsdGkpCi17Ci0JcmV0dXJuIG11bHRpIC8gTVVMVElYQUNUX09G RlNFVFNfUEVSX1BBR0U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1NdWx0aVhhY3RJZFRv T2Zmc2V0RW50cnkoTXVsdGlYYWN0SWQgbXVsdGkpCi17Ci0JcmV0dXJuIG11bHRpICUgTVVM VElYQUNUX09GRlNFVFNfUEVSX1BBR0U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50NjQKLU11 bHRpWGFjdElkVG9PZmZzZXRTZWdtZW50KE11bHRpWGFjdElkIG11bHRpKQotewotCXJldHVy biBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShtdWx0aSkgLyBTTFJVX1BBR0VTX1BFUl9TRUdN RU5UOwotfQotCi0vKgotICogVGhlIHNpdHVhdGlvbiBmb3IgbWVtYmVycyBpcyBhIGJpdCBt b3JlIGNvbXBsZXg6IHdlIHN0b3JlIG9uZSBieXRlIG9mCi0gKiBhZGRpdGlvbmFsIGZsYWcg Yml0cyBmb3IgZWFjaCBUcmFuc2FjdGlvbklkLiAgVG8gZG8gdGhpcyB3aXRob3V0IGdldHRp bmcKLSAqIGludG8gYWxpZ25tZW50IGlzc3Vlcywgd2Ugc3RvcmUgZm91ciBieXRlcyBvZiBm bGFncywgYW5kIHRoZW4gdGhlCi0gKiBjb3JyZXNwb25kaW5nIDQgWGlkcy4gIEVhY2ggc3Vj aCA1LXdvcmQgKDIwLWJ5dGUpIHNldCB3ZSBjYWxsIGEgImdyb3VwIiwgYW5kCi0gKiBhcmUg c3RvcmVkIGFzIGEgd2hvbGUgaW4gcGFnZXMuICBUaHVzLCB3aXRoIDhrQiBCTENLU1osIHdl IGtlZXAgNDA5IGdyb3VwcwotICogcGVyIHBhZ2UuICBUaGlzIHdhc3RlcyAxMiBieXRlcyBw ZXIgcGFnZSwgYnV0IHRoYXQncyBPSyAtLSBzaW1wbGljaXR5IChhbmQKLSAqIHBlcmZvcm1h bmNlKSB0cnVtcHMgc3BhY2UgZWZmaWNpZW5jeSBoZXJlLgotICoKLSAqIE5vdGUgdGhhdCB0 aGUgIm9mZnNldCIgbWFjcm9zIHdvcmsgd2l0aCBieXRlIG9mZnNldCwgbm90IGFycmF5IGlu ZGV4ZXMsIHNvCi0gKiBhcml0aG1ldGljIG11c3QgYmUgZG9uZSB1c2luZyAiY2hhciAqIiBw b2ludGVycy4KLSAqLwotLyogV2UgbmVlZCBlaWdodCBiaXRzIHBlciB4YWN0LCBzbyBvbmUg eGFjdCBmaXRzIGluIGEgYnl0ZSAqLwotI2RlZmluZSBNWEFDVF9NRU1CRVJfQklUU19QRVJf WEFDVAkJCTgKLSNkZWZpbmUgTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRFCQkJMQotI2Rl ZmluZSBNWEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNLCSgoMSA8PCBNWEFDVF9NRU1CRVJfQklU U19QRVJfWEFDVCkgLSAxKQotCi0vKiBob3cgbWFueSBmdWxsIGJ5dGVzIG9mIGZsYWdzIGFy ZSB0aGVyZSBpbiBhIGdyb3VwPyAqLwotI2RlZmluZSBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BF Ul9HUk9VUAkJNAotI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVAJ XAotCShNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCAqIE1YQUNUX01FTUJFUl9GTEFH U19QRVJfQllURSkKLS8qIHNpemUgaW4gYnl0ZXMgb2YgYSBjb21wbGV0ZSBncm91cCAqLwot I2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSBcCi0JKHNpemVvZihUcmFuc2Fj dGlvbklkKSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCArIE1VTFRJWEFD VF9GTEFHQllURVNfUEVSX0dST1VQKQotI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBT X1BFUl9QQUdFIChCTENLU1ogLyBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkKLSNkZWZp bmUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UJXAotCShNVUxUSVhBQ1RfTUVNQkVSR1JP VVBTX1BFUl9QQUdFICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQKQotCi0v KgotICogQmVjYXVzZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlIGlzIG5vdCBhIGRp dmlzb3Igb2YgdGhlIGxhc3QgaXRlbQotICogbnVtYmVyIChtZW1iZXIgMHhGRkZGRkZGRiks IHRoZSBsYXN0IHNlZ21lbnQgZG9lcyBub3QgdXNlIHRoZSBtYXhpbXVtIG51bWJlcgotICog b2YgcGFnZXMsIGFuZCBtb3Jlb3ZlciB0aGUgbGFzdCB1c2VkIHBhZ2UgdGhlcmVpbiBkb2Vz IG5vdCB1c2UgdGhlIHNhbWUKLSAqIG51bWJlciBvZiBpdGVtcyBhcyBwcmV2aW91cyBwYWdl cy4gIChBbm90aGVyIHdheSB0byBzYXkgaXQgaXMgdGhhdCB0aGUKLSAqIDB4RkZGRkZGRkYg bWVtYmVyIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsYXN0IHBhZ2UsIHNv IHRoZSBwYWdlCi0gKiBoYXMgc29tZSBlbXB0eSBzcGFjZSBhZnRlciB0aGF0IGl0ZW0uKQot ICoKLSAqIFRoaXMgY29uc3RhbnQgaXMgdGhlIG51bWJlciBvZiBtZW1iZXJzIGluIHRoZSBs YXN0IHBhZ2Ugb2YgdGhlIGxhc3Qgc2VnbWVudC4KLSAqLwotI2RlZmluZSBNQVhfTUVNQkVS U19JTl9MQVNUX01FTUJFUlNfUEFHRSBcCi0JCSgodWludDMyKSAoKDB4RkZGRkZGRkYgJSBN VUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRSkgKyAxKSkKLQotLyogcGFnZSBpbiB3aGljaCBh IG1lbWJlciBpcyB0byBiZSBmb3VuZCAqLwotc3RhdGljIGlubGluZSBpbnQ2NAotTVhPZmZz ZXRUb01lbWJlclBhZ2UoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKLXsKLQlyZXR1cm4gb2Zm c2V0IC8gTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg aW50NjQKLU1YT2Zmc2V0VG9NZW1iZXJTZWdtZW50KE11bHRpWGFjdE9mZnNldCBvZmZzZXQp Ci17Ci0JcmV0dXJuIE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNldCkgLyBTTFJVX1BBR0VT X1BFUl9TRUdNRU5UOwotfQotCi0vKiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBh Z2UpIG9mIGZsYWcgd29yZCBmb3IgYSBnaXZlbiBtZW1iZXIgKi8KLXN0YXRpYyBpbmxpbmUg aW50Ci1NWE9mZnNldFRvRmxhZ3NPZmZzZXQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKLXsK LQlNdWx0aVhhY3RPZmZzZXQgZ3JvdXAgPSBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19Q RVJfTUVNQkVSR1JPVVA7Ci0JaW50CQkJZ3JvdXBvbnBnID0gZ3JvdXAgJSBNVUxUSVhBQ1Rf TUVNQkVSR1JPVVBTX1BFUl9QQUdFOwotCWludAkJCWJ5dGVvZmYgPSBncm91cG9ucGcgKiBN VUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRTsKLQotCXJldHVybiBieXRlb2ZmOwotfQotCi1z dGF0aWMgaW5saW5lIGludAotTVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQoTXVsdGlYYWN0T2Zm c2V0IG9mZnNldCkKLXsKLQlpbnQJCQltZW1iZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxU SVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVA7Ci0JaW50CQkJYnNoaWZ0ID0gbWVtYmVy X2luX2dyb3VwICogTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1Q7Ci0KLQlyZXR1cm4gYnNo aWZ0OwotfQotCi0vKiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9mIFRy YW5zYWN0aW9uSWQgb2YgZ2l2ZW4gbWVtYmVyICovCi1zdGF0aWMgaW5saW5lIGludAotTVhP ZmZzZXRUb01lbWJlck9mZnNldChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQotewotCWludAkJ CW1lbWJlcl9pbl9ncm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1C RVJHUk9VUDsKLQotCXJldHVybiBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KSArCi0J CU1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQICsKLQkJbWVtYmVyX2luX2dyb3VwICog c2l6ZW9mKFRyYW5zYWN0aW9uSWQpOwotfQotCiAvKiBNdWx0aXhhY3QgbWVtYmVycyB3cmFw YXJvdW5kIHRocmVzaG9sZHMuICovCiAjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9U SFJFU0hPTEQJCShNYXhNdWx0aVhhY3RPZmZzZXQgLyAyKQogI2RlZmluZSBNVUxUSVhBQ1Rf TUVNQkVSX0RBTkdFUl9USFJFU0hPTEQJXApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFj dF9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45 YjU2ZGVhZWYzMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0 aXhhY3RfaW50ZXJuYWwuaApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIG11bHRpeGFjdF9p bnRlcm5hbC5oCisgKgorICogUG9zdGdyZVNRTCBtdWx0aS10cmFuc2FjdGlvbi1sb2cgbWFu YWdlciBpbnRlcm5hbCBkZWNsYXJhdGlvbnMKKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgYW5k IGRlZmluaXRpb25zIGFyZSBmb3IgZGVhbGluZyB3aXRoIHBnX211bHRpeGFjdCBwYWdlcy4K KyAqIFRoZXkgYXJlIGludGVybmFsIHRvIG11bHRpeGFjdC5jLCBidXQgdGhleSBhcmUgZXhw b3J0ZWQgaGVyZSB0byBhbGxvdworICogcGdfdXBncmFkZSB0byB3cml0ZSBwZ19tdWx0aXhh Y3QgZmlsZXMgZGlyZWN0bHkuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2 LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwu aAorICovCisjaWZuZGVmIE1VTFRJWEFDVF9JTlRFUk5BTF9ICisjZGVmaW5lIE1VTFRJWEFD VF9JTlRFUk5BTF9ICisKKyNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCisKKworLyoK KyAqIERlZmluZXMgZm9yIE11bHRpWGFjdE9mZnNldCBwYWdlIHNpemVzLiAgQSBwYWdlIGlz IHRoZSBzYW1lIEJMQ0tTWiBhcyBpcworICogdXNlZCBldmVyeXdoZXJlIGVsc2UgaW4gUG9z dGdyZXMuCisgKgorICogTm90ZTogYmVjYXVzZSBNdWx0aVhhY3RPZmZzZXRzIGFyZSAzMiBi aXRzIGFuZCB3cmFwIGFyb3VuZCBhdCAweEZGRkZGRkZGLAorICogTXVsdGlYYWN0IHBhZ2Ug bnVtYmVyaW5nIGFsc28gd3JhcHMgYXJvdW5kIGF0CisgKiAweEZGRkZGRkZGL01VTFRJWEFD VF9PRkZTRVRTX1BFUl9QQUdFLCBhbmQgc2VnbWVudCBudW1iZXJpbmcgYXQKKyAqIDB4RkZG RkZGRkYvTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UvU0xSVV9QQUdFU19QRVJfU0VHTUVO VC4gIFdlIG5lZWQKKyAqIHRha2Ugbm8gZXhwbGljaXQgbm90aWNlIG9mIHRoYXQgZmFjdCBp biB0aGlzIG1vZHVsZSwgZXhjZXB0IHdoZW4gY29tcGFyaW5nCisgKiBzZWdtZW50IGFuZCBw YWdlIG51bWJlcnMgaW4gVHJ1bmNhdGVNdWx0aVhhY3QgKHNlZQorICogTXVsdGlYYWN0T2Zm c2V0UGFnZVByZWNlZGVzKS4KKyAqLworCisvKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9m ZnNldCAqLworI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxDS1NaIC8g c2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpCisKK3N0YXRpYyBpbmxpbmUgaW50NjQKK011bHRp WGFjdElkVG9PZmZzZXRQYWdlKE11bHRpWGFjdElkIG11bHRpKQoreworCXJldHVybiBtdWx0 aSAvIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFOworfQorCitzdGF0aWMgaW5saW5lIGlu dAorTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KE11bHRpWGFjdElkIG11bHRpKQoreworCXJl dHVybiBtdWx0aSAlIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFOworfQorCitzdGF0aWMg aW5saW5lIGludDY0CitNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChNdWx0aVhhY3RJZCBt dWx0aSkKK3sKKwlyZXR1cm4gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpIC8gU0xS VV9QQUdFU19QRVJfU0VHTUVOVDsKK30KKworLyoKKyAqIFRoZSBzaXR1YXRpb24gZm9yIG1l bWJlcnMgaXMgYSBiaXQgbW9yZSBjb21wbGV4OiB3ZSBzdG9yZSBvbmUgYnl0ZSBvZgorICog YWRkaXRpb25hbCBmbGFnIGJpdHMgZm9yIGVhY2ggVHJhbnNhY3Rpb25JZC4gIFRvIGRvIHRo aXMgd2l0aG91dCBnZXR0aW5nCisgKiBpbnRvIGFsaWdubWVudCBpc3N1ZXMsIHdlIHN0b3Jl IGZvdXIgYnl0ZXMgb2YgZmxhZ3MsIGFuZCB0aGVuIHRoZQorICogY29ycmVzcG9uZGluZyA0 IFhpZHMuICBFYWNoIHN1Y2ggNS13b3JkICgyMC1ieXRlKSBzZXQgd2UgY2FsbCBhICJncm91 cCIsIGFuZAorICogYXJlIHN0b3JlZCBhcyBhIHdob2xlIGluIHBhZ2VzLiAgVGh1cywgd2l0 aCA4a0IgQkxDS1NaLCB3ZSBrZWVwIDQwOSBncm91cHMKKyAqIHBlciBwYWdlLiAgVGhpcyB3 YXN0ZXMgMTIgYnl0ZXMgcGVyIHBhZ2UsIGJ1dCB0aGF0J3MgT0sgLS0gc2ltcGxpY2l0eSAo YW5kCisgKiBwZXJmb3JtYW5jZSkgdHJ1bXBzIHNwYWNlIGVmZmljaWVuY3kgaGVyZS4KKyAq CisgKiBOb3RlIHRoYXQgdGhlICJvZmZzZXQiIG1hY3JvcyB3b3JrIHdpdGggYnl0ZSBvZmZz ZXQsIG5vdCBhcnJheSBpbmRleGVzLCBzbworICogYXJpdGhtZXRpYyBtdXN0IGJlIGRvbmUg dXNpbmcgImNoYXIgKiIgcG9pbnRlcnMuCisgKi8KKy8qIFdlIG5lZWQgZWlnaHQgYml0cyBw ZXIgeGFjdCwgc28gb25lIHhhY3QgZml0cyBpbiBhIGJ5dGUgKi8KKyNkZWZpbmUgTVhBQ1Rf TUVNQkVSX0JJVFNfUEVSX1hBQ1QJCQk4CisjZGVmaW5lIE1YQUNUX01FTUJFUl9GTEFHU19Q RVJfQllURQkJCTEKKyNkZWZpbmUgTVhBQ1RfTUVNQkVSX1hBQ1RfQklUTUFTSwkoKDEgPDwg TVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QpIC0gMSkKKworLyogaG93IG1hbnkgZnVsbCBi eXRlcyBvZiBmbGFncyBhcmUgdGhlcmUgaW4gYSBncm91cD8gKi8KKyNkZWZpbmUgTVVMVElY QUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAJCTQKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNf UEVSX01FTUJFUkdST1VQCVwKKwkoTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKiBN WEFDVF9NRU1CRVJfRkxBR1NfUEVSX0JZVEUpCisvKiBzaXplIGluIGJ5dGVzIG9mIGEgY29t cGxldGUgZ3JvdXAgKi8KKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQX1NJWkUgXAor CShzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVS R1JPVVAgKyBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCkKKyNkZWZpbmUgTVVMVElY QUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAoQkxDS1NaIC8gTVVMVElYQUNUX01FTUJFUkdS T1VQX1NJWkUpCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFCVwKKwkoTVVM VElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9N RU1CRVJHUk9VUCkKKworLyoKKyAqIEJlY2F1c2UgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIg cGFnZSBpcyBub3QgYSBkaXZpc29yIG9mIHRoZSBsYXN0IGl0ZW0KKyAqIG51bWJlciAobWVt YmVyIDB4RkZGRkZGRkYpLCB0aGUgbGFzdCBzZWdtZW50IGRvZXMgbm90IHVzZSB0aGUgbWF4 aW11bSBudW1iZXIKKyAqIG9mIHBhZ2VzLCBhbmQgbW9yZW92ZXIgdGhlIGxhc3QgdXNlZCBw YWdlIHRoZXJlaW4gZG9lcyBub3QgdXNlIHRoZSBzYW1lCisgKiBudW1iZXIgb2YgaXRlbXMg YXMgcHJldmlvdXMgcGFnZXMuICAoQW5vdGhlciB3YXkgdG8gc2F5IGl0IGlzIHRoYXQgdGhl CisgKiAweEZGRkZGRkZGIG1lbWJlciBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0 aGUgbGFzdCBwYWdlLCBzbyB0aGUgcGFnZQorICogaGFzIHNvbWUgZW1wdHkgc3BhY2UgYWZ0 ZXIgdGhhdCBpdGVtLikKKyAqCisgKiBUaGlzIGNvbnN0YW50IGlzIHRoZSBudW1iZXIgb2Yg bWVtYmVycyBpbiB0aGUgbGFzdCBwYWdlIG9mIHRoZSBsYXN0IHNlZ21lbnQuCisgKi8KKyNk ZWZpbmUgTUFYX01FTUJFUlNfSU5fTEFTVF9NRU1CRVJTX1BBR0UgXAorCQkoKHVpbnQzMikg KCgweEZGRkZGRkZGICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UpICsgMSkpCisKKy8q IHBhZ2UgaW4gd2hpY2ggYSBtZW1iZXIgaXMgdG8gYmUgZm91bmQgKi8KK3N0YXRpYyBpbmxp bmUgaW50NjQKK01YT2Zmc2V0VG9NZW1iZXJQYWdlKE11bHRpWGFjdE9mZnNldCBvZmZzZXQp Cit7CisJcmV0dXJuIG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOworfQor CitzdGF0aWMgaW5saW5lIGludDY0CitNWE9mZnNldFRvTWVtYmVyU2VnbWVudChNdWx0aVhh Y3RPZmZzZXQgb2Zmc2V0KQoreworCXJldHVybiBNWE9mZnNldFRvTWVtYmVyUGFnZShvZmZz ZXQpIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKK30KKworLyogTG9jYXRpb24gKGJ5dGUg b2Zmc2V0IHdpdGhpbiBwYWdlKSBvZiBmbGFnIHdvcmQgZm9yIGEgZ2l2ZW4gbWVtYmVyICov CitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KE11bHRpWGFjdE9m ZnNldCBvZmZzZXQpCit7CisJTXVsdGlYYWN0T2Zmc2V0IGdyb3VwID0gb2Zmc2V0IC8gTVVM VElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCWludAkJCWdyb3Vwb25wZyA9IGdy b3VwICUgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRTsKKwlpbnQJCQlieXRlb2Zm ID0gZ3JvdXBvbnBnICogTVVMVElYQUNUX01FTUJFUkdST1VQX1NJWkU7CisKKwlyZXR1cm4g Ynl0ZW9mZjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0VG9GbGFnc0JpdFNo aWZ0KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJaW50CQkJbWVtYmVyX2luX2dyb3Vw ID0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCWludAkJ CWJzaGlmdCA9IG1lbWJlcl9pbl9ncm91cCAqIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNU OworCisJcmV0dXJuIGJzaGlmdDsKK30KKworLyogTG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdp dGhpbiBwYWdlKSBvZiBUcmFuc2FjdGlvbklkIG9mIGdpdmVuIG1lbWJlciAqLworc3RhdGlj IGlubGluZSBpbnQKK01YT2Zmc2V0VG9NZW1iZXJPZmZzZXQoTXVsdGlYYWN0T2Zmc2V0IG9m ZnNldCkKK3sKKwlpbnQJCQltZW1iZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1Rf TUVNQkVSU19QRVJfTUVNQkVSR1JPVVA7CisKKwlyZXR1cm4gTVhPZmZzZXRUb0ZsYWdzT2Zm c2V0KG9mZnNldCkgKworCQlNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCArCisJCW1l bWJlcl9pbl9ncm91cCAqIHNpemVvZihUcmFuc2FjdGlvbklkKTsKK30KKworI2VuZGlmCQkJ CQkJCS8qIE1VTFRJWEFDVF9JTlRFUk5BTF9IICovCi0tIAoyLjQ3LjMKCg== --------------MsYmZqOqmhDH81OSlLXN4Y7x Content-Type: text/x-patch; charset=UTF-8; name="v26-0002-Use-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v26-0002-Use-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 RnJvbSA2OTM4YjI4MzEzYWRkYzYyMTE4ZDIzOGIzYzc2ODM2MGViOGY1ZTE3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgNyBBdWcgMjAyNCAxNjozNToyMiArMDMwMApTdWJqZWN0OiBbUEFUQ0gg djI2IDAyLzEwXSBVc2UgNjQtYml0IG11bHRpeGFjdCBvZmZzZXRzCgpTd2l0Y2hpbmcgdG8g NjQtYml0IG11bHRpdHJhbnNhY3Rpb24gb2Zmc2V0cyByZW1vdmVzIHdyYXBhcm91bmQgYW5k IHRoZQoyXjMyIGxpbWl0IG9uIHRoZWlyIHRvdGFsIG51bWJlci4KCkF1dGhvcjogTWF4aW0g T3Jsb3YgPG9ybG92bWdAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBGSVhNRQotLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYyAgIHwgICA0ICstCiBzcmMvYmFj a2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYyAgICB8ICAgMiArLQogc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgICAgfCAzOTAgKysrKy0tLS0tLS0tLS0t LS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICAgICAgfCAg IDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jIHwgICAy ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgICAgICAgfCAgIDQgKy0K IHNyYy9iaW4vcGdfY29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYyAgIHwgICAyICstCiBz cmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMgICAgICAgICB8ICAzMCArLQogc3Jj L2Jpbi9wZ19yZXNldHdhbC90LzAwMV9iYXNpYy5wbCAgICAgICAgfCAgIDQgKy0KIHNyYy9p bmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaCAgICAgICAgICAgIHwgICAzIC0KIHNyYy9pbmNs dWRlL2FjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaCAgIHwgIDI0ICstCiBzcmMvaW5jbHVk ZS9jLmggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogMTMgZmlsZXMgY2hh bmdlZCwgOTUgaW5zZXJ0aW9ucygrKSwgMzc2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYwppbmRleCAzY2EwNTgyZGIzNi4uMDUyZGQw YTRjZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRl c2MuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbXhhY3RkZXNjLmMKQEAg LTY1LDcgKzY1LDcgQEAgbXVsdGl4YWN0X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFk ZXJTdGF0ZSAqcmVjb3JkKQogCQl4bF9tdWx0aXhhY3RfY3JlYXRlICp4bHJlYyA9ICh4bF9t dWx0aXhhY3RfY3JlYXRlICopIHJlYzsKIAkJaW50CQkJaTsKIAotCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIiV1IG9mZnNldCAldSBubWVtYmVycyAlZDogIiwgeGxyZWMtPm1pZCwKKwkJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICIldSBvZmZzZXQgJSIgUFJJdTY0ICIgbm1lbWJlcnMg JWQ6ICIsIHhscmVjLT5taWQsCiAJCQkJCQkgeGxyZWMtPm1vZmYsIHhscmVjLT5ubWVtYmVy cyk7CiAJCWZvciAoaSA9IDA7IGkgPCB4bHJlYy0+bm1lbWJlcnM7IGkrKykKIAkJCW91dF9t ZW1iZXIoYnVmLCAmeGxyZWMtPm1lbWJlcnNbaV0pOwpAQCAtNzQsNyArNzQsNyBAQCBtdWx0 aXhhY3RfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJ ewogCQl4bF9tdWx0aXhhY3RfdHJ1bmNhdGUgKnhscmVjID0gKHhsX211bHRpeGFjdF90cnVu Y2F0ZSAqKSByZWM7CiAKLQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJvZmZzZXRzIFsldSwg JXUpLCBtZW1iZXJzIFsldSwgJXUpIiwKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJvZmZz ZXRzIFsldSwgJXUpLCBtZW1iZXJzIFslIiBQUkl1NjQgIiwgJSIgUFJJdTY0ICIpIiwKIAkJ CQkJCSB4bHJlYy0+c3RhcnRUcnVuY09mZiwgeGxyZWMtPmVuZFRydW5jT2ZmLAogCQkJCQkJ IHhscmVjLT5zdGFydFRydW5jTWVtYiwgeGxyZWMtPmVuZFRydW5jTWVtYik7CiAJfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYwppbmRleCBjZDZjMmEyZjY1MC4u NDQxMDM0ZjU5MjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94 bG9nZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5j CkBAIC02Niw3ICs2Niw3IEBAIHhsb2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCiAJCUNoZWNrUG9pbnQgKmNoZWNrcG9pbnQgPSAoQ2hlY2tQb2lu dCAqKSByZWM7CiAKIAkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJyZWRvICVYLyUwOFg7ICIK LQkJCQkJCSAidGxpICV1OyBwcmV2IHRsaSAldTsgZnB3ICVzOyB3YWxfbGV2ZWwgJXM7IHhp ZCAldToldTsgb2lkICV1OyBtdWx0aSAldTsgb2Zmc2V0ICV1OyAiCisJCQkJCQkgInRsaSAl dTsgcHJldiB0bGkgJXU7IGZwdyAlczsgd2FsX2xldmVsICVzOyB4aWQgJXU6JXU7IG9pZCAl dTsgbXVsdGkgJXU7IG9mZnNldCAlIiBQUkl1NjQgIjsgIgogCQkJCQkJICJvbGRlc3QgeGlk ICV1IGluIERCICV1OyBvbGRlc3QgbXVsdGkgJXUgaW4gREIgJXU7ICIKIAkJCQkJCSAib2xk ZXN0L25ld2VzdCBjb21taXQgdGltZXN0YW1wIHhpZDogJXUvJXU7ICIKIAkJCQkJCSAib2xk ZXN0IHJ1bm5pbmcgeGlkICV1OyAlcyIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tdWx0aXhhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211 bHRpeGFjdC5jCmluZGV4IGFjYjJhNjc4OGY5Li4zNGE3NDVjMDdiZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNs dWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgorI2lu Y2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJhY2Nlc3Mv c2xydS5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUgImFjY2Vz cy90d29waGFzZV9ybWdyLmgiCkBAIC04OSwxMCArOTAsMTQgQEAKICNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgogCiAKLS8qIE11bHRpeGFjdCBtZW1iZXJzIHdyYXBhcm91bmQgdGhy ZXNob2xkcy4gKi8KLSNkZWZpbmUgTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRAkJ KE1heE11bHRpWGFjdE9mZnNldCAvIDIpCi0jZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJfREFO R0VSX1RIUkVTSE9MRAlcCi0JKE1heE11bHRpWGFjdE9mZnNldCAtIE1heE11bHRpWGFjdE9m ZnNldCAvIDQpCisvKgorICogTXVsdGl4YWN0IG1lbWJlcnMgd2FybmluZyB0aHJlc2hvbGQu CisgKgorICogSWYgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBuZXh0T2Zmc2V0IGFuZCBvbGRl c3RPZmZzZXQgZXhjZWVkcyB0aGlzIHZhbHVlLAorICogd2UgdHJpZ2dlciBhdXRvdmFjdXVt IGluIG9yZGVyIHRvIHJlbGVhc2UgZGlzayBzcGFjZSBjb25zdW1lZCBieSB0aGUKKyAqIG1l bWJlcnMgU0xSVS4KKyAqLworI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSX0FVVE9WQUNfVEhS RVNIT0xECQlVSU5UNjRDT05TVCg0MDAwMDAwMDAwKQogCiBzdGF0aWMgaW5saW5lIE11bHRp WGFjdElkCiBQcmV2aW91c011bHRpWGFjdElkKE11bHRpWGFjdElkIG11bHRpKQpAQCAtMTQ5 LDkgKzE1NCw2IEBAIHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdFN0YXRlRGF0YQogCU11bHRp WGFjdElkIG11bHRpU3RvcExpbWl0OwogCU11bHRpWGFjdElkIG11bHRpV3JhcExpbWl0Owog Ci0JLyogc3VwcG9ydCBmb3IgbWVtYmVycyBhbnRpLXdyYXBhcm91bmQgbWVhc3VyZXMgKi8K LQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0U3RvcExpbWl0OwkvKiBrbm93biBpZiBvbGRlc3RP ZmZzZXRLbm93biAqLwotCiAJLyoKIAkgKiBUaGlzIGlzIHVzZWQgdG8gc2xlZXAgdW50aWwg YSBtdWx0aXhhY3Qgb2Zmc2V0IGlzIHdyaXR0ZW4gd2hlbiB3ZSB3YW50CiAJICogdG8gY3Jl YXRlIHRoZSBuZXh0IG9uZS4KQEAgLTI4Miw4ICsyODQsNiBAQCBzdGF0aWMgYm9vbCBNdWx0 aVhhY3RPZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MSwKIAkJCQkJCQkJ CU11bHRpWGFjdE9mZnNldCBvZmZzZXQyKTsKIHN0YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFj dE9mZnNldChNdWx0aVhhY3RJZCBtdWx0aSk7CiBzdGF0aWMgdm9pZCBFeHRlbmRNdWx0aVhh Y3RNZW1iZXIoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwgaW50IG5tZW1iZXJzKTsKLXN0YXRp YyBib29sIE11bHRpWGFjdE9mZnNldFdvdWxkV3JhcChNdWx0aVhhY3RPZmZzZXQgYm91bmRh cnksCi0JCQkJCQkJCQkgTXVsdGlYYWN0T2Zmc2V0IHN0YXJ0LCB1aW50MzIgZGlzdGFuY2Up Owogc3RhdGljIGJvb2wgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKTsK IHN0YXRpYyBib29sIGZpbmRfbXVsdGl4YWN0X3N0YXJ0KE11bHRpWGFjdElkIG11bHRpLCBN dWx0aVhhY3RPZmZzZXQgKnJlc3VsdCk7CiBzdGF0aWMgdm9pZCBXcml0ZU1UcnVuY2F0ZVhs b2dSZWMoT2lkIG9sZGVzdE11bHRpREIsCkBAIC0xMDIzLDkwICsxMDIzLDIyIEBAIEdldE5l d011bHRpWGFjdElkKGludCBubWVtYmVycywgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpCiAJ RXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KHJlc3VsdCk7CiAKIAkvKgotCSAqIFJlc2VydmUgdGhl IG1lbWJlcnMgc3BhY2UsIHNpbWlsYXJseSB0byBhYm92ZS4gIEFsc28sIGJlIGNhcmVmdWwg bm90IHRvCi0JICogcmV0dXJuIHplcm8gYXMgdGhlIHN0YXJ0aW5nIG9mZnNldCBmb3IgYW55 IG11bHRpeGFjdC4gU2VlCi0JICogR2V0TXVsdGlYYWN0SWRNZW1iZXJzKCkgZm9yIG1vdGl2 YXRpb24uCisJICogUmVzZXJ2ZSB0aGUgbWVtYmVycyBzcGFjZSwgc2ltaWxhcmx5IHRvIGFi b3ZlLgogCSAqLwogCW5leHRPZmZzZXQgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldDsK LQlpZiAobmV4dE9mZnNldCA9PSAwKQotCXsKLQkJKm9mZnNldCA9IDE7Ci0JCW5tZW1iZXJz Kys7CQkJCS8qIGFsbG9jYXRlIG1lbWJlciBzbG90IDAgdG9vICovCi0JfQotCWVsc2UKLQkJ Km9mZnNldCA9IG5leHRPZmZzZXQ7Ci0KLQkvKi0tLS0tLS0tLS0KLQkgKiBQcm90ZWN0IGFn YWluc3Qgb3ZlcnJ1biBvZiB0aGUgbWVtYmVycyBzcGFjZSBhcyB3ZWxsLCB3aXRoIHRoZQot CSAqIGZvbGxvd2luZyBydWxlczoKLQkgKgotCSAqIElmIHdlJ3JlIHBhc3Qgb2Zmc2V0U3Rv cExpbWl0LCByZWZ1c2UgdG8gZ2VuZXJhdGUgbW9yZSBtdWx0aXMuCi0JICogSWYgd2UncmUg Y2xvc2UgdG8gb2Zmc2V0U3RvcExpbWl0LCBlbWl0IGEgd2FybmluZy4KLQkgKgotCSAqIEFy Yml0cmFyaWx5LCB3ZSBzdGFydCBlbWl0dGluZyB3YXJuaW5ncyB3aGVuIHdlJ3JlIDIwIHNl Z21lbnRzIG9yIGxlc3MKLQkgKiBmcm9tIG9mZnNldFN0b3BMaW1pdC4KLQkgKgotCSAqIE5v dGUgd2UgaGF2ZW4ndCB1cGRhdGVkIHRoZSBzaGFyZWQgc3RhdGUgeWV0LCBzbyBpZiB3ZSBm YWlsIGF0IHRoaXMKLQkgKiBwb2ludCwgdGhlIG11bHRpeGFjdCBJRCB3ZSBncmFiYmVkIGNh biBzdGlsbCBiZSB1c2VkIGJ5IHRoZSBuZXh0IGd1eS4KLQkgKgotCSAqIE5vdGUgdGhhdCB0 aGVyZSBpcyBubyBwb2ludCBpbiBmb3JjaW5nIGF1dG92YWN1dW0gcnVucyBoZXJlOiB0aGUK LQkgKiBtdWx0aXhhY3QgZnJlZXplIHNldHRpbmdzIHdvdWxkIGhhdmUgdG8gYmUgcmVkdWNl ZCBmb3IgdGhhdCB0byBoYXZlIGFueQotCSAqIGVmZmVjdC4KLQkgKi0tLS0tLS0tLS0KLQkg Ki8KLSNkZWZpbmUgT0ZGU0VUX1dBUk5fU0VHTUVOVFMJMjAKLQlpZiAoTXVsdGlYYWN0U3Rh dGUtPm9sZGVzdE9mZnNldEtub3duICYmCi0JCU11bHRpWGFjdE9mZnNldFdvdWxkV3JhcChN dWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0LCBuZXh0T2Zmc2V0LAotCQkJCQkJCQkg bm1lbWJlcnMpKQotCXsKLQkJLyogc2VlIGNvbW1lbnQgaW4gdGhlIGNvcnJlc3BvbmRpbmcg b2Zmc2V0cyB3cmFwYXJvdW5kIGNhc2UgKi8KLQkJU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1T SUdOQUxfU1RBUlRfQVVUT1ZBQ19MQVVOQ0hFUik7Ci0KLQkJZXJlcG9ydChFUlJPUiwKLQkJ CQkoZXJyY29kZShFUlJDT0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAotCQkJCSBlcnJt c2coIm11bHRpeGFjdCBcIm1lbWJlcnNcIiBsaW1pdCBleGNlZWRlZCIpLAotCQkJCSBlcnJk ZXRhaWxfcGx1cmFsKCJUaGlzIGNvbW1hbmQgd291bGQgY3JlYXRlIGEgbXVsdGl4YWN0IHdp dGggJXUgbWVtYmVycywgYnV0IHRoZSByZW1haW5pbmcgc3BhY2UgaXMgb25seSBlbm91Z2gg Zm9yICV1IG1lbWJlci4iLAotCQkJCQkJCQkgICJUaGlzIGNvbW1hbmQgd291bGQgY3JlYXRl IGEgbXVsdGl4YWN0IHdpdGggJXUgbWVtYmVycywgYnV0IHRoZSByZW1haW5pbmcgc3BhY2Ug aXMgb25seSBlbm91Z2ggZm9yICV1IG1lbWJlcnMuIiwKLQkJCQkJCQkJICBNdWx0aVhhY3RT dGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCAtIDEsCi0JCQkJCQkJCSAgbm1l bWJlcnMsCi0JCQkJCQkJCSAgTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdCAtIG5l eHRPZmZzZXQgLSAxKSwKLQkJCQkgZXJyaGludCgiRXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUg VkFDVVVNIGluIGRhdGFiYXNlIHdpdGggT0lEICV1IHdpdGggcmVkdWNlZCBcInZhY3V1bV9t dWx0aXhhY3RfZnJlZXplX21pbl9hZ2VcIiBhbmQgXCJ2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6 ZV90YWJsZV9hZ2VcIiBzZXR0aW5ncy4iLAotCQkJCQkJIE11bHRpWGFjdFN0YXRlLT5vbGRl c3RNdWx0aVhhY3REQikpKTsKLQl9CiAKIAkvKgotCSAqIENoZWNrIHdoZXRoZXIgd2Ugc2hv dWxkIGtpY2sgYXV0b3ZhY3V1bSBpbnRvIGFjdGlvbiwgdG8gcHJldmVudCBtZW1iZXJzCi0J ICogd3JhcGFyb3VuZC4gTkIgd2UgdXNlIGEgbXVjaCBsYXJnZXIgd2luZG93IHRvIHRyaWdn ZXIgYXV0b3ZhY3V1bSB0aGFuCi0JICoganVzdCB0aGUgd2FybmluZyBsaW1pdC4gVGhlIHdh cm5pbmcgaXMganVzdCBhIG1lYXN1cmUgb2YgbGFzdCByZXNvcnQgLQotCSAqIHRoaXMgaXMg aW4gbGluZSB3aXRoIEdldE5ld1RyYW5zYWN0aW9uSWQncyBiZWhhdmlvdXIuCisJICogT2Zm c2V0cyBhcmUgNjQtYml0IGludGVnZXJzIGFuZCB3aWxsIG5ldmVyIHdyYXAgYXJvdW5kLiAg Rmlyc3RseSwgaXQKKwkgKiB3b3VsZCB0YWtlIGFuIHVucmVhbGlzdGljIGFtb3VudCBvZiB0 aW1lIGFuZCByZXNvdXJjZXMgdG8gY29uc3VtZSAyXjY0CisJICogb2Zmc2V0cy4gIFNlY29u ZGx5LCBtdWx0aXhpZCBjcmVhdGlvbiBpcyBXQUwtbG9nZ2VkLCBzbyB5b3Ugd291bGQgcnVu CisJICogb3V0IG9mIExTTnMgYmVmb3JlIHJlYWNoaW5nIG9mZnNldCB3cmFwYXJvdW5kLiAg TmV2ZXJ0aGVsZXNzLCBjaGVjayBmb3IKKwkgKiB3cmFwYXJvdW5kIGFzIGEgc2FuaXR5IGNo ZWNrLgogCSAqLwotCWlmICghTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duIHx8 Ci0JCShNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldCAtIE11bHRpWGFjdFN0YXRlLT5vbGRl c3RPZmZzZXQKLQkJID4gTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRCkpCi0Jewot CQkvKgotCQkgKiBUbyBhdm9pZCBzd2FtcGluZyB0aGUgcG9zdG1hc3RlciB3aXRoIHNpZ25h bHMsIHdlIGlzc3VlIHRoZSBhdXRvdmFjCi0JCSAqIHJlcXVlc3Qgb25seSB3aGVuIGNyb3Nz aW5nIGEgc2VnbWVudCBib3VuZGFyeS4gV2l0aCBkZWZhdWx0Ci0JCSAqIGNvbXBpbGF0aW9u IHNldHRpbmdzIHRoYXQncyByb3VnaGx5IGFmdGVyIDUwayBtZW1iZXJzLiAgVGhpcyBzdGls bAotCQkgKiBnaXZlcyBwbGVudHkgb2YgY2hhbmNlcyBiZWZvcmUgd2UgZ2V0IGludG8gcmVh bCB0cm91YmxlLgotCQkgKi8KLQkJaWYgKChNWE9mZnNldFRvTWVtYmVyUGFnZShuZXh0T2Zm c2V0KSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpICE9Ci0JCQkoTVhPZmZzZXRUb01lbWJl clBhZ2UobmV4dE9mZnNldCArIG5tZW1iZXJzKSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQp KQotCQkJU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfU1RBUlRfQVVUT1ZBQ19MQVVO Q0hFUik7Ci0JfQotCi0JaWYgKE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93biAm JgotCQlNdWx0aVhhY3RPZmZzZXRXb3VsZFdyYXAoTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0 b3BMaW1pdCwKLQkJCQkJCQkJIG5leHRPZmZzZXQsCi0JCQkJCQkJCSBubWVtYmVycyArIE1V TFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFICogU0xSVV9QQUdFU19QRVJfU0VHTUVOVCAqIE9G RlNFVF9XQVJOX1NFR01FTlRTKSkKLQkJZXJlcG9ydChXQVJOSU5HLAorCWlmIChuZXh0T2Zm c2V0ICsgbm1lbWJlcnMgPCBuZXh0T2Zmc2V0KQorCQllcmVwb3J0KEVSUk9SLAogCQkJCShl cnJjb2RlKEVSUkNPREVfUFJPR1JBTV9MSU1JVF9FWENFRURFRCksCi0JCQkJIGVycm1zZ19w bHVyYWwoImRhdGFiYXNlIHdpdGggT0lEICV1IG11c3QgYmUgdmFjdXVtZWQgYmVmb3JlICVk IG1vcmUgbXVsdGl4YWN0IG1lbWJlciBpcyB1c2VkIiwKLQkJCQkJCQkgICAiZGF0YWJhc2Ug d2l0aCBPSUQgJXUgbXVzdCBiZSB2YWN1dW1lZCBiZWZvcmUgJWQgbW9yZSBtdWx0aXhhY3Qg bWVtYmVycyBhcmUgdXNlZCIsCi0JCQkJCQkJICAgTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0 b3BMaW1pdCAtIG5leHRPZmZzZXQgKyBubWVtYmVycywKLQkJCQkJCQkgICBNdWx0aVhhY3RT dGF0ZS0+b2xkZXN0TXVsdGlYYWN0REIsCi0JCQkJCQkJICAgTXVsdGlYYWN0U3RhdGUtPm9m ZnNldFN0b3BMaW1pdCAtIG5leHRPZmZzZXQgKyBubWVtYmVycyksCi0JCQkJIGVycmhpbnQo IkV4ZWN1dGUgYSBkYXRhYmFzZS13aWRlIFZBQ1VVTSBpbiB0aGF0IGRhdGFiYXNlIHdpdGgg cmVkdWNlZCBcInZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21pbl9hZ2VcIiBhbmQgXCJ2YWN1 dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2VcIiBzZXR0aW5ncy4iKSkpOworCQkJCSBl cnJtc2coIk11bHRpWGFjdCBtZW1iZXJzIHdvdWxkIHdyYXAgYXJvdW5kIikpKTsKKwkqb2Zm c2V0ID0gbmV4dE9mZnNldDsKIAogCUV4dGVuZE11bHRpWGFjdE1lbWJlcihuZXh0T2Zmc2V0 LCBubWVtYmVycyk7CiAKQEAgLTExMjcsOCArMTA1OSw3IEBAIEdldE5ld011bHRpWGFjdElk KGludCBubWVtYmVycywgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpCiAJICogdGhlIG5leHQg aXRlcmF0aW9uLiAgQnV0IG5vdGUgdGhhdCBuZXh0TVhhY3QgbWF5IGJlIEludmFsaWRNdWx0 aVhhY3RJZAogCSAqIG9yIHRoZSBmaXJzdCB2YWx1ZSBvbiBhIHNlZ21lbnQtYmVnaW5uaW5n IHBhZ2UgYWZ0ZXIgdGhpcyByb3V0aW5lCiAJICogZXhpdHMsIHNvIGFueW9uZSBlbHNlIGxv b2tpbmcgYXQgdGhlIHZhcmlhYmxlIG11c3QgYmUgcHJlcGFyZWQgdG8gZGVhbAotCSAqIHdp dGggZWl0aGVyIGNhc2UuICBTaW1pbGFybHksIG5leHRPZmZzZXQgbWF5IGJlIHplcm8sIGJ1 dCB3ZSB3b24ndCB1c2UKLQkgKiB0aGF0IGFzIHRoZSBhY3R1YWwgc3RhcnQgb2Zmc2V0IG9m IHRoZSBuZXh0IG11bHRpeGFjdC4KKwkgKiB3aXRoIGVpdGhlciBjYXNlLgogCSAqLwogCShN dWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0KSsrOwogCkBAIC0xMTM2LDcgKzEwNjcsOCBAQCBH ZXROZXdNdWx0aVhhY3RJZChpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0 KQogCiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAotCWRlYnVnX2Vsb2c0 KERFQlVHMiwgIkdldE5ldzogcmV0dXJuaW5nICV1IG9mZnNldCAldSIsIHJlc3VsdCwgKm9m ZnNldCk7CisJZGVidWdfZWxvZzQoREVCVUcyLCAiR2V0TmV3OiByZXR1cm5pbmcgJXUgb2Zm c2V0ICUiIFBSSXU2NCwgcmVzdWx0LAorCQkJCSpvZmZzZXQpOwogCXJldHVybiByZXN1bHQ7 CiB9CiAKQEAgLTExNzgsNyArMTExMCw2IEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0 aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAlNdWx0aVhhY3RP ZmZzZXQgKm9mZnB0cjsKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0OwogCWludAkJCWxlbmd0 aDsKLQlpbnQJCQl0cnVlbGVuZ3RoOwogCU11bHRpWGFjdElkIG9sZGVzdE1YYWN0OwogCU11 bHRpWGFjdElkIG5leHRNWGFjdDsKIAlNdWx0aVhhY3RJZCB0bXBNWGFjdDsKQEAgLTEyNzcs MTYgKzEyMDgsNyBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGks IE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJICogd2UgaGF2ZSBqdXN0IGZvciB0aGlz OyB0aGUgcHJvY2VzcyBpbiBjaGFyZ2Ugd2lsbCBzaWduYWwgdGhlIENWIGFzIHNvb24KIAkg KiBhcyBpdCBoYXMgZmluaXNoZWQgd3JpdGluZyB0aGUgbXVsdGl4YWN0IG9mZnNldC4KIAkg KgotCSAqIDMuIEJlY2F1c2UgR2V0TmV3TXVsdGlYYWN0SWQgaW5jcmVtZW50cyBvZmZzZXQg emVybyB0byBvZmZzZXQgb25lIHRvCi0JICogaGFuZGxlIGNhc2UgIzIsIHRoZXJlIGlzIGFu IGFtYmlndWl0eSBuZWFyIHRoZSBwb2ludCBvZiBvZmZzZXQKLQkgKiB3cmFwYXJvdW5kLiAg SWYgd2Ugc2VlIG5leHQgbXVsdGl4YWN0J3Mgb2Zmc2V0IGlzIG9uZSwgaXMgdGhhdCBvdXIK LQkgKiBtdWx0aXhhY3QncyBhY3R1YWwgZW5kcG9pbnQsIG9yIGRpZCBpdCBlbmQgYXQgemVy byB3aXRoIGEgc3Vic2VxdWVudAotCSAqIGluY3JlbWVudD8gIFdlIGhhbmRsZSB0aGlzIHVz aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBpZiB0aGUgemVybyd0aAotCSAqIG1lbWJlciBzbG90 IHdhc24ndCBmaWxsZWQsIGl0J2xsIGNvbnRhaW4gemVybywgYW5kIHplcm8gaXNuJ3QgYSB2 YWxpZAotCSAqIHRyYW5zYWN0aW9uIElEIHNvIGl0IGNhbid0IGJlIGEgbXVsdGl4YWN0IG1l bWJlci4gIFRoZXJlZm9yZSwgaWYgd2UKLQkgKiByZWFkIGEgemVybyBmcm9tIHRoZSBtZW1i ZXJzIGFycmF5LCBqdXN0IGlnbm9yZSBpdC4KLQkgKgotCSAqIFRoaXMgaXMgYWxsIHByZXR0 eSBtZXNzeSwgYnV0IHRoZSBtZXNzIG9jY3VycyBvbmx5IGluIGluZnJlcXVlbnQgY29ybmVy CisJICogVGhpcyBpcyBhIGxpdHRsZSBtZXNzeSwgYnV0IHRoZSBtZXNzIG9jY3VycyBvbmx5 IGluIGluZnJlcXVlbnQgY29ybmVyCiAJICogY2FzZXMsIHNvIGl0IHNlZW1zIGJldHRlciB0 aGFuIGhvbGRpbmcgdGhlIE11bHRpWGFjdEdlbkxvY2sgZm9yIGEgbG9uZwogCSAqIHRpbWUg b24gZXZlcnkgbXVsdGl4YWN0IGNyZWF0aW9uLgogCSAqLwpAQCAtMTM3Miw2ICsxMjk0LDkg QEAgcmV0cnk6CiAJTFdMb2NrUmVsZWFzZShsb2NrKTsKIAlsb2NrID0gTlVMTDsKIAorCS8q IEEgbXVsdGl4aWQgd2l0aCB6ZXJvIG1lbWJlcnMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwlB c3NlcnQobGVuZ3RoID4gMCk7CisKIAkvKgogCSAqIElmIHdlIHNsZXB0IGFib3ZlLCBjbGVh biB1cCBzdGF0ZTsgaXQncyBubyBsb25nZXIgbmVlZGVkLgogCSAqLwpAQCAtMTM4MCw3ICsx MzA1LDYgQEAgcmV0cnk6CiAKIAlwdHIgPSAoTXVsdGlYYWN0TWVtYmVyICopIHBhbGxvYyhs ZW5ndGggKiBzaXplb2YoTXVsdGlYYWN0TWVtYmVyKSk7CiAKLQl0cnVlbGVuZ3RoID0gMDsK IAlwcmV2X3BhZ2VubyA9IC0xOwogCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyss IG9mZnNldCsrKQogCXsKQEAgLTE0MTcsMzcgKzEzNDEsMjcgQEAgcmV0cnk6CiAKIAkJeGFj dHB0ciA9IChUcmFuc2FjdGlvbklkICopCiAJCQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFy ZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBtZW1iZXJvZmYpOwotCi0JCWlmICghVHJhbnNh Y3Rpb25JZElzVmFsaWQoKnhhY3RwdHIpKQotCQl7Ci0JCQkvKiBDb3JuZXIgY2FzZSAzOiB3 ZSBtdXN0IGJlIGxvb2tpbmcgYXQgdW51c2VkIHNsb3QgemVybyAqLwotCQkJQXNzZXJ0KG9m ZnNldCA9PSAwKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJCUFzc2VydChUcmFuc2FjdGlvbklk SXNWYWxpZCgqeGFjdHB0cikpOwogCiAJCWZsYWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zm c2V0KG9mZnNldCk7CiAJCWJzaGlmdCA9IE1YT2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KG9mZnNl dCk7CiAJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFy ZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBmbGFnc29mZik7CiAKLQkJcHRyW3RydWVsZW5n dGhdLnhpZCA9ICp4YWN0cHRyOwotCQlwdHJbdHJ1ZWxlbmd0aF0uc3RhdHVzID0gKCpmbGFn c3B0ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVNQkVSX1hBQ1RfQklUTUFTSzsKLQkJdHJ1ZWxl bmd0aCsrOworCQlwdHJbaV0ueGlkID0gKnhhY3RwdHI7CisJCXB0cltpXS5zdGF0dXMgPSAo KmZsYWdzcHRyID4+IGJzaGlmdCkgJiBNWEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNLOwogCX0K IAogCUxXTG9ja1JlbGVhc2UobG9jayk7CiAKLQkvKiBBIG11bHRpeGlkIHdpdGggemVybyBt ZW1iZXJzIHNob3VsZCBub3QgaGFwcGVuICovCi0JQXNzZXJ0KHRydWVsZW5ndGggPiAwKTsK LQogCS8qCiAJICogQ29weSB0aGUgcmVzdWx0IGludG8gdGhlIGxvY2FsIGNhY2hlLgogCSAq LwotCW1YYWN0Q2FjaGVQdXQobXVsdGksIHRydWVsZW5ndGgsIHB0cik7CisJbVhhY3RDYWNo ZVB1dChtdWx0aSwgbGVuZ3RoLCBwdHIpOwogCiAJZGVidWdfZWxvZzMoREVCVUcyLCAiR2V0 TWVtYmVyczogbm8gY2FjaGUgZm9yICVzIiwKLQkJCQlteGlkX3RvX3N0cmluZyhtdWx0aSwg dHJ1ZWxlbmd0aCwgcHRyKSk7CisJCQkJbXhpZF90b19zdHJpbmcobXVsdGksIGxlbmd0aCwg cHRyKSk7CiAJKm1lbWJlcnMgPSBwdHI7Ci0JcmV0dXJuIHRydWVsZW5ndGg7CisJcmV0dXJu IGxlbmd0aDsKIH0KIAogLyoKQEAgLTE4NTQsNyArMTc2OCw3IEBAIE11bHRpWGFjdFNobWVt SW5pdCh2b2lkKQogCQkJCSAgInBnX211bHRpeGFjdC9tZW1iZXJzIiwgTFdUUkFOQ0hFX01V TFRJWEFDVE1FTUJFUl9CVUZGRVIsCiAJCQkJICBMV1RSQU5DSEVfTVVMVElYQUNUTUVNQkVS X1NMUlUsCiAJCQkJICBTWU5DX0hBTkRMRVJfTVVMVElYQUNUX01FTUJFUiwKLQkJCQkgIGZh bHNlKTsKKwkJCQkgIHRydWUpOwogCS8qIGRvZXNuJ3QgY2FsbCBTaW1wbGVMcnVUcnVuY2F0 ZSgpIG9yIG1lZXQgY3JpdGVyaWEgZm9yIHVuaXQgdGVzdHMgKi8KIAogCS8qIEluaXRpYWxp emUgb3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3QgKi8KQEAgLTIwMzEsNyArMTk0NSw2IEBAIFRy aW1NdWx0aVhhY3Qodm9pZCkKIAkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlY YWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIG5leHRNWGFjdCk7CiAJCW9mZnB0ciA9IChN dWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVm ZmVyW3Nsb3Rub107CiAJCW9mZnB0ciArPSBlbnRyeW5vOwotCiAJCU1lbVNldChvZmZwdHIs IDAsIEJMQ0tTWiAtIChlbnRyeW5vICogc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpKTsKIAog CQlNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1 ZTsKQEAgLTIxMDQsNyArMjAxNyw3IEBAIE11bHRpWGFjdEdldENoZWNrcHRNdWx0aShib29s IGlzX3NodXRkb3duLAogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKIAlk ZWJ1Z19lbG9nNihERUJVRzIsCi0JCQkJIk11bHRpWGFjdDogY2hlY2twb2ludCBpcyBuZXh0 TXVsdGkgJXUsIG5leHRPZmZzZXQgJXUsIG9sZGVzdE11bHRpICV1IGluIERCICV1IiwKKwkJ CQkiTXVsdGlYYWN0OiBjaGVja3BvaW50IGlzIG5leHRNdWx0aSAldSwgbmV4dE9mZnNldCAl IiBQUkl1NjQgIiwgb2xkZXN0TXVsdGkgJXUgaW4gREIgJXUiLAogCQkJCSpuZXh0TXVsdGks ICpuZXh0TXVsdGlPZmZzZXQsICpvbGRlc3RNdWx0aSwgKm9sZGVzdE11bHRpREIpOwogfQog CkBAIC0yMTM5LDcgKzIwNTIsNyBAQCB2b2lkCiBNdWx0aVhhY3RTZXROZXh0TVhhY3QoTXVs dGlYYWN0SWQgbmV4dE11bHRpLAogCQkJCQkgIE11bHRpWGFjdE9mZnNldCBuZXh0TXVsdGlP ZmZzZXQpCiB7Ci0JZGVidWdfZWxvZzQoREVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5l eHQgbXVsdGkgdG8gJXUgb2Zmc2V0ICV1IiwKKwlkZWJ1Z19lbG9nNChERUJVRzIsICJNdWx0 aVhhY3Q6IHNldHRpbmcgbmV4dCBtdWx0aSB0byAldSBvZmZzZXQgJSIgUFJJdTY0LAogCQkJ CW5leHRNdWx0aSwgbmV4dE11bHRpT2Zmc2V0KTsKIAlMV0xvY2tBY3F1aXJlKE11bHRpWGFj dEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCA9 IG5leHRNdWx0aTsKQEAgLTIzMzAsNyArMjI0Myw3IEBAIE11bHRpWGFjdEFkdmFuY2VOZXh0 TVhhY3QoTXVsdGlYYWN0SWQgbWluTXVsdGksCiAJfQogCWlmIChNdWx0aVhhY3RPZmZzZXRQ cmVjZWRlcyhNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldCwgbWluTXVsdGlPZmZzZXQpKQog CXsKLQkJZGVidWdfZWxvZzMoREVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5leHQgb2Zm c2V0IHRvICV1IiwKKwkJZGVidWdfZWxvZzMoREVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0aW5n IG5leHQgb2Zmc2V0IHRvICUiIFBSSVU2NCwKIAkJCQkJbWluTXVsdGlPZmZzZXQpOwogCQlN dWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldCA9IG1pbk11bHRpT2Zmc2V0OwogCX0KQEAgLTI0 MzIsMjMgKzIzNDUsOCBAQCBFeHRlbmRNdWx0aVhhY3RNZW1iZXIoTXVsdGlYYWN0T2Zmc2V0 IG9mZnNldCwgaW50IG5tZW1iZXJzKQogCQkJTFdMb2NrUmVsZWFzZShsb2NrKTsKIAkJfQog Ci0JCS8qCi0JCSAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBpdGVtcyB0aWxsIGVuZCBvZiBj dXJyZW50IHBhZ2UuICBDYXJlZnVsOiBpZgotCQkgKiBhZGRpdGlvbiBvZiB1bnNpZ25lZCBp bnRzIHdyYXBzIGFyb3VuZCwgd2UncmUgYXQgdGhlIGxhc3QgcGFnZSBvZgotCQkgKiB0aGUg bGFzdCBzZWdtZW50OyBzaW5jZSB0aGF0IHBhZ2UgaG9sZHMgYSBkaWZmZXJlbnQgbnVtYmVy IG9mIGl0ZW1zCi0JCSAqIHRoYW4gb3RoZXIgcGFnZXMsIHdlIG5lZWQgdG8gZG8gaXQgZGlm ZmVyZW50bHkuCi0JCSAqLwotCQlpZiAob2Zmc2V0ICsgTUFYX01FTUJFUlNfSU5fTEFTVF9N RU1CRVJTX1BBR0UgPCBvZmZzZXQpCi0JCXsKLQkJCS8qCi0JCQkgKiBUaGlzIGlzIHRoZSBs YXN0IHBhZ2Ugb2YgdGhlIGxhc3Qgc2VnbWVudDsgd2UgY2FuIGNvbXB1dGUgdGhlCi0JCQkg KiBudW1iZXIgb2YgaXRlbXMgbGVmdCB0byBhbGxvY2F0ZSBpbiBpdCB3aXRob3V0IG1vZHVs bwotCQkJICogYXJpdGhtZXRpYy4KLQkJCSAqLwotCQkJZGlmZmVyZW5jZSA9IE1heE11bHRp WGFjdE9mZnNldCAtIG9mZnNldCArIDE7Ci0JCX0KLQkJZWxzZQotCQkJZGlmZmVyZW5jZSA9 IE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFIC0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJF UlNfUEVSX1BBR0U7CisJCS8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBpdGVtcyB0aWxsIGVu ZCBvZiBjdXJyZW50IHBhZ2UuICovCisJCWRpZmZlcmVuY2UgPSBNVUxUSVhBQ1RfTUVNQkVS U19QRVJfUEFHRSAtIG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOwogCiAJ CS8qCiAJCSAqIEFkdmFuY2UgdG8gbmV4dCBwYWdlLCB0YWtpbmcgY2FyZSB0byBwcm9wZXJs eSBoYW5kbGUgdGhlIHdyYXBhcm91bmQKQEAgLTI1MTQsMTUgKzI0MTIsMTQgQEAgR2V0T2xk ZXN0TXVsdGlYYWN0SWQodm9pZCkKIH0KIAogLyoKLSAqIERldGVybWluZSBob3cgYWdncmVz c2l2ZWx5IHdlIG5lZWQgdG8gdmFjdXVtIGluIG9yZGVyIHRvIHByZXZlbnQgbWVtYmVyCi0g KiB3cmFwYXJvdW5kLgorICogRGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gdmFjdXVtIHRvIGtl ZXAgdGhlIHNpemUgb2YgdGhlIG1lbWJlcnMgU0xSVSBpbgorICogY2hlY2suCiAgKgogICog VG8gZG8gc28gZGV0ZXJtaW5lIHdoYXQncyB0aGUgb2xkZXN0IG1lbWJlciBvZmZzZXQgYW5k IGluc3RhbGwgdGhlIGxpbWl0CiAgKiBpbmZvIGluIE11bHRpWGFjdFN0YXRlLCB3aGVyZSBp dCBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IG92ZXJydW4gb2Ygb2xkIGRhdGEKICAqIGluIHRo ZSBtZW1iZXJzIFNMUlUgYXJlYS4KICAqCi0gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRydWUg aWYgZW1lcmdlbmN5IGF1dG92YWN1dW0gaXMgcmVxdWlyZWQgYW5kIGZhbHNlCi0gKiBvdGhl cndpc2UuCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRydWUgaWYgYXV0b3ZhY3V1bSBpcyBy ZXF1aXJlZCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICovCiBzdGF0aWMgYm9vbAogU2V0T2Zm c2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQpAQCAtMjUzNCw4ICsyNDMxLDYgQEAg U2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCU11bHRpWGFjdE9mZnNl dCBuZXh0T2Zmc2V0OwogCWJvb2wJCW9sZGVzdE9mZnNldEtub3duID0gZmFsc2U7CiAJYm9v bAkJcHJldk9sZGVzdE9mZnNldEtub3duOwotCU11bHRpWGFjdE9mZnNldCBvZmZzZXRTdG9w TGltaXQgPSAwOwotCU11bHRpWGFjdE9mZnNldCBwcmV2T2Zmc2V0U3RvcExpbWl0OwogCiAJ LyoKIAkgKiBOQjogSGF2ZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgdHJ1bmNhdGlvbiwgd2Ug bWlnaHQgb3RoZXJ3aXNlIHRyeSB0bwpAQCAtMjU1MCw3ICsyNDQ1LDYgQEAgU2V0T2Zmc2V0 VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCW5leHRPZmZzZXQgPSBNdWx0aVhhY3RT dGF0ZS0+bmV4dE9mZnNldDsKIAlwcmV2T2xkZXN0T2Zmc2V0S25vd24gPSBNdWx0aVhhY3RT dGF0ZS0+b2xkZXN0T2Zmc2V0S25vd247CiAJcHJldk9sZGVzdE9mZnNldCA9IE11bHRpWGFj dFN0YXRlLT5vbGRlc3RPZmZzZXQ7Ci0JcHJldk9mZnNldFN0b3BMaW1pdCA9IE11bHRpWGFj dFN0YXRlLT5vZmZzZXRTdG9wTGltaXQ7CiAJQXNzZXJ0KE11bHRpWGFjdFN0YXRlLT5maW5p c2hlZFN0YXJ0dXApOwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKQEAg LTI1ODEsMTMgKzI0NzUsOSBAQCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0 dXApCiAJCW9sZGVzdE9mZnNldEtub3duID0KIAkJCWZpbmRfbXVsdGl4YWN0X3N0YXJ0KG9s ZGVzdE11bHRpWGFjdElkLCAmb2xkZXN0T2Zmc2V0KTsKIAotCQlpZiAob2xkZXN0T2Zmc2V0 S25vd24pCi0JCQllcmVwb3J0KERFQlVHMSwKLQkJCQkJKGVycm1zZ19pbnRlcm5hbCgib2xk ZXN0IE11bHRpWGFjdElkIG1lbWJlciBpcyBhdCBvZmZzZXQgJXUiLAotCQkJCQkJCQkJIG9s ZGVzdE9mZnNldCkpKTsKLQkJZWxzZQorCQlpZiAoIW9sZGVzdE9mZnNldEtub3duKQogCQkJ ZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2coIk11bHRpWGFjdCBtZW1iZXIgd3JhcGFyb3Vu ZCBwcm90ZWN0aW9ucyBhcmUgZGlzYWJsZWQgYmVjYXVzZSBvbGRlc3QgY2hlY2twb2ludGVk IE11bHRpWGFjdCAldSBkb2VzIG5vdCBleGlzdCBvbiBkaXNrIiwKKwkJCQkJKGVycm1zZygi b2xkZXN0IGNoZWNrcG9pbnRlZCBNdWx0aVhhY3QgJXUgZG9lcyBub3QgZXhpc3Qgb24gZGlz ayIsCiAJCQkJCQkJb2xkZXN0TXVsdGlYYWN0SWQpKSk7CiAJfQogCkBAIC0yNTk3LDk3ICsy NDg3LDMyIEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKIAkgKiBJ ZiB3ZSBjYW4sIGNvbXB1dGUgbGltaXRzIChhbmQgaW5zdGFsbCB0aGVtIE11bHRpWGFjdFN0 YXRlKSB0byBwcmV2ZW50CiAJICogb3ZlcnJ1biBvZiBvbGQgZGF0YSBpbiB0aGUgbWVtYmVy cyBTTFJVIGFyZWEuIFdlIGNhbiBvbmx5IGRvIHNvIGlmIHRoZQogCSAqIG9sZGVzdCBvZmZz ZXQgaXMga25vd24gdGhvdWdoLgorCSAqCisJICogRklYTUU6IElzICFvbGRlc3RPZmZzZXRL bm93biBwb3NzaWJsZSBhbnltb3JlPyBBdCBsZWFzdCB1cGRhdGUgdGhlIGNvbW1lbnQ6CisJ ICogd2Ugd29uJ3Qgb3ZlcnJ1biBtZW1iZXJzIGFueW1vcmUuCiAJICovCi0JaWYgKG9sZGVz dE9mZnNldEtub3duKQotCXsKLQkJLyogbW92ZSBiYWNrIHRvIHN0YXJ0IG9mIHRoZSBjb3Jy ZXNwb25kaW5nIHNlZ21lbnQgKi8KLQkJb2Zmc2V0U3RvcExpbWl0ID0gb2xkZXN0T2Zmc2V0 IC0gKG9sZGVzdE9mZnNldCAlCi0JCQkJCQkJCQkJICAoTVVMVElYQUNUX01FTUJFUlNfUEVS X1BBR0UgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSk7Ci0KLQkJLyogYWx3YXlzIGxlYXZl IG9uZSBzZWdtZW50IGJlZm9yZSB0aGUgd3JhcGFyb3VuZCBwb2ludCAqLwotCQlvZmZzZXRT dG9wTGltaXQgLT0gKE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFICogU0xSVV9QQUdFU19Q RVJfU0VHTUVOVCk7Ci0KLQkJaWYgKCFwcmV2T2xkZXN0T2Zmc2V0S25vd24gJiYgIWlzX3N0 YXJ0dXApCi0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiTXVsdGlYYWN0IG1lbWJl ciB3cmFwYXJvdW5kIHByb3RlY3Rpb25zIGFyZSBub3cgZW5hYmxlZCIpKSk7Ci0KLQkJZXJl cG9ydChERUJVRzEsCi0JCQkJKGVycm1zZ19pbnRlcm5hbCgiTXVsdGlYYWN0IG1lbWJlciBz dG9wIGxpbWl0IGlzIG5vdyAldSBiYXNlZCBvbiBNdWx0aVhhY3QgJXUiLAotCQkJCQkJCQkg b2Zmc2V0U3RvcExpbWl0LCBvbGRlc3RNdWx0aVhhY3RJZCkpKTsKLQl9Ci0JZWxzZSBpZiAo cHJldk9sZGVzdE9mZnNldEtub3duKQorCWlmIChwcmV2T2xkZXN0T2Zmc2V0S25vd24pCiAJ ewogCQkvKgogCQkgKiBJZiB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSBvbGRlc3Qgb2Zmc2V0IHRo aXMgdGltZSwgYnV0IHdlIGhhdmUgYQogCQkgKiB2YWx1ZSBmcm9tIGEgcHJldmlvdXMgcGFz cyB0aHJvdWdoIHRoaXMgZnVuY3Rpb24sIHVzZSB0aGUgb2xkCi0JCSAqIHZhbHVlcyByYXRo ZXIgdGhhbiBhdXRvbWF0aWNhbGx5IGZvcmNpbmcgYW4gZW1lcmdlbmN5IGF1dG92YWN1dW0K LQkJICogY3ljbGUgYWdhaW4uCisJCSAqIHZhbHVlcyByYXRoZXIgdGhhbiBhdXRvbWF0aWNh bGx5IGZvcmNpbmcgYW4gYXV0b3ZhY3V1bSBjeWNsZSBhZ2Fpbi4KIAkJICovCiAJCW9sZGVz dE9mZnNldCA9IHByZXZPbGRlc3RPZmZzZXQ7CiAJCW9sZGVzdE9mZnNldEtub3duID0gdHJ1 ZTsKLQkJb2Zmc2V0U3RvcExpbWl0ID0gcHJldk9mZnNldFN0b3BMaW1pdDsKIAl9CiAKIAkv KiBJbnN0YWxsIHRoZSBjb21wdXRlZCB2YWx1ZXMgKi8KIAlMV0xvY2tBY3F1aXJlKE11bHRp WGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9m ZnNldCA9IG9sZGVzdE9mZnNldDsKIAlNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25v d24gPSBvbGRlc3RPZmZzZXRLbm93bjsKLQlNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExp bWl0ID0gb2Zmc2V0U3RvcExpbWl0OwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9j ayk7CiAKIAkvKgotCSAqIERvIHdlIG5lZWQgYW4gZW1lcmdlbmN5IGF1dG92YWN1dW0/CUlm IHdlJ3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVzLgorCSAqIERvIHdlIG5lZWQgYXV0b3ZhY3V1 bT8JSWYgd2UncmUgbm90IHN1cmUsIGFzc3VtZSB5ZXMuCiAJICovCiAJcmV0dXJuICFvbGRl c3RPZmZzZXRLbm93biB8fAotCQkobmV4dE9mZnNldCAtIG9sZGVzdE9mZnNldCA+IE1VTFRJ WEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpOwotfQotCi0vKgotICogUmV0dXJuIHdoZXRo ZXIgYWRkaW5nICJkaXN0YW5jZSIgdG8gInN0YXJ0IiB3b3VsZCBtb3ZlIHBhc3QgImJvdW5k YXJ5Ii4KLSAqCi0gKiBXZSB1c2UgdGhpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgYWRk aXRpb24gaXMgIndyYXBwaW5nIGFyb3VuZCIgdGhlCi0gKiBib3VuZGFyeSBwb2ludCwgaGVu Y2UgdGhlIG5hbWUuICBUaGUgcmVhc29uIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSByZWd1 bGFyCi0gKiAyXjMxLW1vZHVsbyBhcml0aG1ldGljIGhlcmUgaXMgdGhhdCB3ZSB3YW50IHRv IGJlIGFibGUgdG8gdXNlIHRoZSB3aG9sZSBvZgotICogdGhlIDJeMzItMSBzcGFjZSBoZXJl LCBhbGxvd2luZyBmb3IgbW9yZSBtdWx0aXhhY3RzIHRoYW4gd291bGQgZml0Ci0gKiBvdGhl cndpc2UuCi0gKi8KLXN0YXRpYyBib29sCi1NdWx0aVhhY3RPZmZzZXRXb3VsZFdyYXAoTXVs dGlYYWN0T2Zmc2V0IGJvdW5kYXJ5LCBNdWx0aVhhY3RPZmZzZXQgc3RhcnQsCi0JCQkJCQkg dWludDMyIGRpc3RhbmNlKQotewotCU11bHRpWGFjdE9mZnNldCBmaW5pc2g7Ci0KLQkvKgot CSAqIE5vdGUgdGhhdCBvZmZzZXQgbnVtYmVyIDAgaXMgbm90IHVzZWQgKHNlZSBHZXRNdWx0 aVhhY3RJZE1lbWJlcnMpLCBzbwotCSAqIGlmIHRoZSBhZGRpdGlvbiB3cmFwcyBhcm91bmQg dGhlIFVJTlRfTUFYIGJvdW5kYXJ5LCBza2lwIHRoYXQgdmFsdWUuCi0JICovCi0JZmluaXNo ID0gc3RhcnQgKyBkaXN0YW5jZTsKLQlpZiAoZmluaXNoIDwgc3RhcnQpCi0JCWZpbmlzaCsr OwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqIFdoZW4gdGhlIGJvdW5kYXJ5IGlzIG51 bWVyaWNhbGx5IGdyZWF0ZXIgdGhhbiB0aGUgc3RhcnRpbmcgcG9pbnQsIGFueQotCSAqIHZh bHVlIG51bWVyaWNhbGx5IGJldHdlZW4gdGhlIHR3byBpcyBub3Qgd3JhcHBlZDoKLQkgKgot CSAqCTwtLS0tUy0tLS1CLS0tLT4KLQkgKglbLS0tKQkJCSA9IEYgd3JhcHBlZCBwYXN0IEIg KGFuZCBVSU5UX01BWCkKLQkgKgkJIFstLS0pCQkgPSBGIG5vdCB3cmFwcGVkCi0JICoJCQkg IFstLS0tXSA9IEYgd3JhcHBlZCBwYXN0IEIKLQkgKgotCSAqIFdoZW4gdGhlIGJvdW5kYXJ5 IGlzIG51bWVyaWNhbGx5IGxlc3MgdGhhbiB0aGUgc3RhcnRpbmcgcG9pbnQgKGkuZS4gdGhl Ci0JICogVUlOVF9NQVggd3JhcGFyb3VuZCBvY2N1cnMgc29tZXdoZXJlIGluIGJldHdlZW4p IHRoZW4gYWxsIHZhbHVlcyBpbgotCSAqIGJldHdlZW4gYXJlIHdyYXBwZWQ6Ci0JICoKLQkg Kgk8LS0tLUItLS0tUy0tLS0+Ci0JICoJWy0tLSkJCQkgPSBGIG5vdCB3cmFwcGVkIHBhc3Qg QiAoYnV0IHdyYXBwZWQgcGFzdCBVSU5UX01BWCkKLQkgKgkJIFstLS0pCQkgPSBGIHdyYXBw ZWQgcGFzdCBCIChhbmQgVUlOVF9NQVgpCi0JICoJCQkgIFstLS0tXSA9IEYgbm90IHdyYXBw ZWQKLQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICovCi0JaWYgKHN0YXJ0IDwgYm91bmRhcnkp Ci0JCXJldHVybiBmaW5pc2ggPj0gYm91bmRhcnkgfHwgZmluaXNoIDwgc3RhcnQ7Ci0JZWxz ZQotCQlyZXR1cm4gZmluaXNoID49IGJvdW5kYXJ5ICYmIGZpbmlzaCA8IHN0YXJ0OworCQko bmV4dE9mZnNldCAtIG9sZGVzdE9mZnNldCA+IE1VTFRJWEFDVF9NRU1CRVJfQVVUT1ZBQ19U SFJFU0hPTEQpOwogfQogCiAvKgpAQCAtMjcyNyw2ICsyNTUyLDcgQEAgZmluZF9tdWx0aXhh Y3Rfc3RhcnQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0KQog CW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFy ZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CiAJb2ZmcHRyICs9IGVudHJ5bm87CiAJb2Zmc2V0 ID0gKm9mZnB0cjsKKwogCUxXTG9ja1JlbGVhc2UoU2ltcGxlTHJ1R2V0QmFua0xvY2soTXVs dGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKTsKIAogCSpyZXN1bHQgPSBvZmZzZXQ7CkBAIC0y Nzc0LDczICsyNjAwLDYgQEAgR2V0TXVsdGlYYWN0SW5mbyh1aW50MzIgKm11bHRpeGFjdHMs IE11bHRpWGFjdE9mZnNldCAqbWVtYmVycywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoKLSAq IE11bHRpeGFjdCBtZW1iZXJzIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhlIG11bHRpeGFjdHMg dGhhdCByZWZlciB0byB0aGVtCi0gKiBhcmUgb2xkZXIgdGhhbiBldmVyeSBkYXRtaW5teGlk LiAgYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgYW5kCi0gKiB2YWN1dW1f bXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2Ugd29yayB0b2dldGhlciB0byBtYWtlIHN1cmUg d2UgbmV2ZXIgaGF2ZQotICogdG9vIG1hbnkgbXVsdGl4YWN0czsgd2UgaG9wZSB0aGF0LCBh dCBsZWFzdCB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywKLSAqIHRoaXMgd2lsbCBhbHNv IGJlIHN1ZmZpY2llbnQgdG8ga2VlcCB1cyBmcm9tIHVzaW5nIHRvbyBtYW55IG9mZnNldHMu Ci0gKiBIb3dldmVyLCBpZiB0aGUgYXZlcmFnZSBtdWx0aXhhY3QgaGFzIG1hbnkgbWVtYmVy cywgd2UgbWlnaHQgZXhoYXVzdCB0aGUKLSAqIG1lbWJlcnMgc3BhY2Ugd2hpbGUgc3RpbGwg dXNpbmcgZmV3IGVub3VnaCBtZW1iZXJzIHRoYXQgdGhlc2UgbGltaXRzIGZhaWwKLSAqIHRv IHRyaWdnZXIgcmVsbWlubXhpZCBhZHZhbmNlbWVudCBieSBWQUNVVU0uICBBdCB0aGF0IHBv aW50LCB3ZSdkIGhhdmUgbm8KLSAqIGNob2ljZSBidXQgdG8gc3RhcnQgZmFpbGluZyBtdWx0 aXhhY3QtY3JlYXRpbmcgb3BlcmF0aW9ucyB3aXRoIGFuIGVycm9yLgotICoKLSAqIFRvIHBy ZXZlbnQgdGhhdCwgaWYgbW9yZSB0aGFuIGEgdGhyZXNob2xkIHBvcnRpb24gb2YgdGhlIG1l bWJlcnMgc3BhY2UgaXMKLSAqIHVzZWQsIHdlIGVmZmVjdGl2ZWx5IHJlZHVjZSBhdXRvdmFj dXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSBhbmQKLSAqIHRvIGEgdmFsdWUganVzdCBs ZXNzIHRoYW4gdGhlIG51bWJlciBvZiBtdWx0aXhhY3RzIGluIHVzZS4gIFdlIGhvcGUgdGhh dAotICogdGhpcyB3aWxsIHF1aWNrbHkgdHJpZ2dlciBhdXRvdmFjdXVtaW5nIG9uIHRoZSB0 YWJsZSBvciB0YWJsZXMgd2l0aCB0aGUKLSAqIG9sZGVzdCByZWxtaW5teGlkLCB0aHVzIGFs bG93aW5nIGRhdG1pbm14aWQgdmFsdWVzIHRvIGFkdmFuY2UgYW5kIHJlbW92aW5nCi0gKiBz b21lIG1lbWJlcnMuCi0gKgotICogQXMgdGhlIGZyYWN0aW9uIG9mIHRoZSBtZW1iZXIgc3Bh Y2UgY3VycmVudGx5IGluIHVzZSBncm93cywgd2UgYmVjb21lCi0gKiBtb3JlIGFnZ3Jlc3Np dmUgaW4gY2xhbXBpbmcgdGhpcyB2YWx1ZS4gIFRoYXQgbm90IG9ubHkgY2F1c2VzIGF1dG92 YWN1dW0KLSAqIHRvIHJhbXAgdXAsIGJ1dCBhbHNvIG1ha2VzIGFueSBtYW51YWwgdmFjdXVt cyB0aGUgdXNlciBpc3N1ZXMgbW9yZQotICogYWdncmVzc2l2ZS4gIFRoaXMgaGFwcGVucyBi ZWNhdXNlIHZhY3V1bV9nZXRfY3V0b2ZmcygpIHdpbGwgY2xhbXAgdGhlCi0gKiBmcmVlemUg dGFibGUgYW5kIHRoZSBtaW5pbXVtIGZyZWV6ZSBhZ2UgY3V0b2ZmcyBiYXNlZCBvbiB0aGUg ZWZmZWN0aXZlCi0gKiBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSB0aGlz IGZ1bmN0aW9uIHJldHVybnMuICBJbiB0aGUgd29yc3QKLSAqIGNhc2UsIHdlJ2xsIGNsYWlt IHRoZSBmcmVlemVfbWF4X2FnZSB0byB6ZXJvLCBhbmQgZXZlcnkgdmFjdXVtIG9mIGFueQot ICogdGFibGUgd2lsbCBmcmVlemUgZXZlcnkgbXVsdGl4YWN0LgotICovCi1pbnQKLU11bHRp WGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCh2b2lkKQotewotCU11bHRpWGFjdE9mZnNldCBt ZW1iZXJzOwotCXVpbnQzMgkJbXVsdGl4YWN0czsKLQl1aW50MzIJCXZpY3RpbV9tdWx0aXhh Y3RzOwotCWRvdWJsZQkJZnJhY3Rpb247Ci0JaW50CQkJcmVzdWx0OwotCU11bHRpWGFjdElk IG9sZGVzdE11bHRpWGFjdElkOwotCU11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7Ci0K LQkvKiBJZiB3ZSBjYW4ndCBkZXRlcm1pbmUgbWVtYmVyIHNwYWNlIHV0aWxpemF0aW9uLCBh c3N1bWUgdGhlIHdvcnN0LiAqLwotCWlmICghR2V0TXVsdGlYYWN0SW5mbygmbXVsdGl4YWN0 cywgJm1lbWJlcnMsICZvbGRlc3RNdWx0aVhhY3RJZCwgJm9sZGVzdE9mZnNldCkpCi0JCXJl dHVybiAwOwotCi0JLyogSWYgbWVtYmVyIHNwYWNlIHV0aWxpemF0aW9uIGlzIGxvdywgbm8g c3BlY2lhbCBhY3Rpb24gaXMgcmVxdWlyZWQuICovCi0JaWYgKG1lbWJlcnMgPD0gTVVMVElY QUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRCkKLQkJcmV0dXJuIGF1dG92YWN1dW1fbXVsdGl4 YWN0X2ZyZWV6ZV9tYXhfYWdlOwotCi0JLyoKLQkgKiBDb21wdXRlIGEgdGFyZ2V0IGZvciBy ZWxtaW5teGlkIGFkdmFuY2VtZW50LiAgVGhlIG51bWJlciBvZiBtdWx0aXhhY3RzCi0JICog d2UgdHJ5IHRvIGVsaW1pbmF0ZSBmcm9tIHRoZSBzeXN0ZW0gaXMgYmFzZWQgb24gaG93IGZh ciB3ZSBhcmUgcGFzdAotCSAqIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQuCi0J ICovCi0JZnJhY3Rpb24gPSAoZG91YmxlKSAobWVtYmVycyAtIE1VTFRJWEFDVF9NRU1CRVJf U0FGRV9USFJFU0hPTEQpIC8KLQkJKE1VTFRJWEFDVF9NRU1CRVJfREFOR0VSX1RIUkVTSE9M RCAtIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpOwotCXZpY3RpbV9tdWx0aXhh Y3RzID0gbXVsdGl4YWN0cyAqIGZyYWN0aW9uOwotCi0JLyogZnJhY3Rpb24gY291bGQgYmUg PiAxLjAsIGJ1dCBsb3dlc3QgcG9zc2libGUgZnJlZXplIGFnZSBpcyB6ZXJvICovCi0JaWYg KHZpY3RpbV9tdWx0aXhhY3RzID4gbXVsdGl4YWN0cykKLQkJcmV0dXJuIDA7Ci0JcmVzdWx0 ID0gbXVsdGl4YWN0cyAtIHZpY3RpbV9tdWx0aXhhY3RzOwotCi0JLyoKLQkgKiBDbGFtcCB0 byBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwgc28gdGhhdCB3ZSBuZXZl ciBtYWtlCi0JICogYXV0b3ZhY3V1bSBsZXNzIGFnZ3Jlc3NpdmUgdGhhbiBpdCB3b3VsZCBv dGhlcndpc2UgYmUuCi0JICovCi0JcmV0dXJuIE1pbihyZXN1bHQsIGF1dG92YWN1dW1fbXVs dGl4YWN0X2ZyZWV6ZV9tYXhfYWdlKTsKLX0KLQogdHlwZWRlZiBzdHJ1Y3QgbXh0cnVuY2lu Zm8KIHsKIAlpbnQ2NAkJZWFybGllc3RFeGlzdGluZ1BhZ2U7CkBAIC0yODY3LDM2ICsyNjI2 LDEyIEBAIFNscnVTY2FuRGlyQ2JGaW5kRWFybGllc3QoU2xydUN0bCBjdGwsIGNoYXIgKmZp bGVuYW1lLCBpbnQ2NCBzZWdwYWdlLCB2b2lkICpkYXRhCiAKIC8qCiAgKiBEZWxldGUgbWVt YmVycyBzZWdtZW50cyBbb2xkZXN0LCBuZXdPbGRlc3QpCi0gKgotICogVGhlIG1lbWJlcnMg U0xSVSBjYW4sIGluIGNvbnRyYXN0IHRvIHRoZSBvZmZzZXRzIG9uZSwgYmUgZmlsbGVkIHRv IGFsbW9zdAotICogdGhlIGZ1bGwgcmFuZ2UgYXQgb25jZS4gVGhpcyBtZWFucyBTaW1wbGVM cnVUcnVuY2F0ZSgpIGNhbid0IHRyaXZpYWxseSBiZQotICogdXNlZCAtIGluc3RlYWQgdGhl IHRvLWJlLWRlbGV0ZWQgcmFuZ2UgaXMgY29tcHV0ZWQgdXNpbmcgdGhlIG9mZnNldHMKLSAq IFNMUlUuIEMuZi4gVHJ1bmNhdGVNdWx0aVhhY3QoKS4KICAqLwogc3RhdGljIHZvaWQKIFBl cmZvcm1NZW1iZXJzVHJ1bmNhdGlvbihNdWx0aVhhY3RPZmZzZXQgb2xkZXN0T2Zmc2V0LCBN dWx0aVhhY3RPZmZzZXQgbmV3T2xkZXN0T2Zmc2V0KQogewotCWNvbnN0IGludDY0IG1heHNl Z21lbnQgPSBNWE9mZnNldFRvTWVtYmVyU2VnbWVudChNYXhNdWx0aVhhY3RPZmZzZXQpOwot CWludDY0CQlzdGFydHNlZ21lbnQgPSBNWE9mZnNldFRvTWVtYmVyU2VnbWVudChvbGRlc3RP ZmZzZXQpOwotCWludDY0CQllbmRzZWdtZW50ID0gTVhPZmZzZXRUb01lbWJlclNlZ21lbnQo bmV3T2xkZXN0T2Zmc2V0KTsKLQlpbnQ2NAkJc2VnbWVudCA9IHN0YXJ0c2VnbWVudDsKLQot CS8qCi0JICogRGVsZXRlIGFsbCB0aGUgc2VnbWVudHMgYnV0IHRoZSBsYXN0IG9uZS4gVGhl IGxhc3Qgc2VnbWVudCBjYW4gc3RpbGwKLQkgKiBjb250YWluLCBwb3NzaWJseSBwYXJ0aWFs bHksIHZhbGlkIGRhdGEuCi0JICovCi0Jd2hpbGUgKHNlZ21lbnQgIT0gZW5kc2VnbWVudCkK LQl7Ci0JCWVsb2coREVCVUcyLCAidHJ1bmNhdGluZyBtdWx0aXhhY3QgbWVtYmVycyBzZWdt ZW50ICUiIFBSSXg2NCwKLQkJCSBzZWdtZW50KTsKLQkJU2xydURlbGV0ZVNlZ21lbnQoTXVs dGlYYWN0TWVtYmVyQ3RsLCBzZWdtZW50KTsKLQotCQkvKiBtb3ZlIHRvIG5leHQgc2VnbWVu dCwgaGFuZGxpbmcgd3JhcGFyb3VuZCBjb3JyZWN0bHkgKi8KLQkJaWYgKHNlZ21lbnQgPT0g bWF4c2VnbWVudCkKLQkJCXNlZ21lbnQgPSAwOwotCQllbHNlCi0JCQlzZWdtZW50ICs9IDE7 Ci0JfQorCVNpbXBsZUxydVRydW5jYXRlKE11bHRpWGFjdE1lbWJlckN0bCwKKwkJCQkJICBN WE9mZnNldFRvTWVtYmVyUGFnZShuZXdPbGRlc3RPZmZzZXQpKTsKIH0KIAogLyoKQEAgLTMw NDAsNyArMjc3NSw3IEBAIFRydW5jYXRlTXVsdGlYYWN0KE11bHRpWGFjdElkIG5ld09sZGVz dE11bHRpLCBPaWQgbmV3T2xkZXN0TXVsdGlEQikKIAogCWVsb2coREVCVUcxLCAicGVyZm9y bWluZyBtdWx0aXhhY3QgdHJ1bmNhdGlvbjogIgogCQkgIm9mZnNldHMgWyV1LCAldSksIG9m ZnNldHMgc2VnbWVudHMgWyUiIFBSSXg2NCAiLCAlIiBQUkl4NjQgIiksICIKLQkJICJtZW1i ZXJzIFsldSwgJXUpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0 ICIpIiwKKwkJICJtZW1iZXJzIFslIiBQUkl1NjQgIiwgJSIgUFJJdTY0ICIpLCBtZW1iZXJz IHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIpIiwKIAkJIG9sZGVzdE11bHRp LCBuZXdPbGRlc3RNdWx0aSwKIAkJIE11bHRpWGFjdElkVG9PZmZzZXRTZWdtZW50KG9sZGVz dE11bHRpKSwKIAkJIE11bHRpWGFjdElkVG9PZmZzZXRTZWdtZW50KG5ld09sZGVzdE11bHRp KSwKQEAgLTMxMjAsMjAgKzI4NTUsMTMgQEAgTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVz KGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMikKIAogLyoKICAqIERlY2lkZSB3aGV0aGVyIGEg TXVsdGlYYWN0TWVtYmVyIHBhZ2UgbnVtYmVyIGlzICJvbGRlciIgZm9yIHRydW5jYXRpb24K LSAqIHB1cnBvc2VzLiAgVGhlcmUgaXMgbm8gImludmFsaWQgb2Zmc2V0IG51bWJlciIgc28g dXNlIHRoZSBudW1iZXJzIHZlcmJhdGltLgorICogcHVycG9zZXMuICBUaGVyZSBpcyBubyAi aW52YWxpZCBvZmZzZXQgbnVtYmVyIiBhbmQgbWVtYmVycyBuZXZlciB3cmFwCisgKiBhcm91 bmQsIHNvIHVzZSB0aGUgbnVtYmVycyB2ZXJiYXRpbS4KICAqLwogc3RhdGljIGJvb2wKIE11 bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRlcyhpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpCiB7 Ci0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDE7Ci0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDI7 Ci0KLQlvZmZzZXQxID0gKChNdWx0aVhhY3RPZmZzZXQpIHBhZ2UxKSAqIE1VTFRJWEFDVF9N RU1CRVJTX1BFUl9QQUdFOwotCW9mZnNldDIgPSAoKE11bHRpWGFjdE9mZnNldCkgcGFnZTIp ICogTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7Ci0KLQlyZXR1cm4gKE11bHRpWGFjdE9m ZnNldFByZWNlZGVzKG9mZnNldDEsIG9mZnNldDIpICYmCi0JCQlNdWx0aVhhY3RPZmZzZXRQ cmVjZWRlcyhvZmZzZXQxLAotCQkJCQkJCQkJb2Zmc2V0MiArIE1VTFRJWEFDVF9NRU1CRVJT X1BFUl9QQUdFIC0gMSkpOworCXJldHVybiBwYWdlMSA8IHBhZ2UyOwogfQogCiAvKgpAQCAt MzE3MSw3ICsyODk5LDcgQEAgTXVsdGlYYWN0SWRQcmVjZWRlc09yRXF1YWxzKE11bHRpWGFj dElkIG11bHRpMSwgTXVsdGlYYWN0SWQgbXVsdGkyKQogc3RhdGljIGJvb2wKIE11bHRpWGFj dE9mZnNldFByZWNlZGVzKE11bHRpWGFjdE9mZnNldCBvZmZzZXQxLCBNdWx0aVhhY3RPZmZz ZXQgb2Zmc2V0MikKIHsKLQlpbnQzMgkJZGlmZiA9IChpbnQzMikgKG9mZnNldDEgLSBvZmZz ZXQyKTsKKwlpbnQ2NAkJZGlmZiA9IChpbnQ2NCkgKG9mZnNldDEgLSBvZmZzZXQyKTsKIAog CXJldHVybiAoZGlmZiA8IDApOwogfQpAQCAtMzI2OCw3ICsyOTk2LDcgQEAgbXVsdGl4YWN0 X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJZWxvZyhERUJVRzEsICJyZXBs YXlpbmcgbXVsdGl4YWN0IHRydW5jYXRpb246ICIKIAkJCSAib2Zmc2V0cyBbJXUsICV1KSwg b2Zmc2V0cyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSwgIgotCQkJICJt ZW1iZXJzIFsldSwgJXUpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJ eDY0ICIpIiwKKwkJCSAibWVtYmVycyBbJSIgUFJJdTY0ICIsICUiIFBSSXU2NCAiKSwgbWVt YmVycyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSIsCiAJCQkgeGxyZWMu c3RhcnRUcnVuY09mZiwgeGxyZWMuZW5kVHJ1bmNPZmYsCiAJCQkgTXVsdGlYYWN0SWRUb09m ZnNldFNlZ21lbnQoeGxyZWMuc3RhcnRUcnVuY09mZiksCiAJCQkgTXVsdGlYYWN0SWRUb09m ZnNldFNlZ21lbnQoeGxyZWMuZW5kVHJ1bmNPZmYpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZy5jCmluZGV4IDIyZDBhMmU4YzNhLi5lZjQwNWQ2NmIzYiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2cuYwpAQCAtNTEzOSw3ICs1MTM5LDcgQEAgQm9vdFN0cmFwWExPRyh1 aW50MzIgZGF0YV9jaGVja3N1bV92ZXJzaW9uKQogCQlGdWxsVHJhbnNhY3Rpb25JZEZyb21F cG9jaEFuZFhpZCgwLCBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQpOwogCWNoZWNrUG9pbnQu bmV4dE9pZCA9IEZpcnN0R2VuYmtpT2JqZWN0SWQ7CiAJY2hlY2tQb2ludC5uZXh0TXVsdGkg PSBGaXJzdE11bHRpWGFjdElkOwotCWNoZWNrUG9pbnQubmV4dE11bHRpT2Zmc2V0ID0gMDsK KwljaGVja1BvaW50Lm5leHRNdWx0aU9mZnNldCA9IDE7CiAJY2hlY2tQb2ludC5vbGRlc3RY aWQgPSBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQ7CiAJY2hlY2tQb2ludC5vbGRlc3RYaWRE QiA9IFRlbXBsYXRlMURiT2lkOwogCWNoZWNrUG9pbnQub2xkZXN0TXVsdGkgPSBGaXJzdE11 bHRpWGFjdElkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3Zlcnku YwppbmRleCAyMWI4ZjE3OWJhMC4uNTFkZWEzNDJhNGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC04ODYsNyArODg2LDcgQEAgSW5pdFdh bFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndhc1NodXRk b3duX3B0ciwKIAkJCQkJCQkgVTY0RnJvbUZ1bGxUcmFuc2FjdGlvbklkKGNoZWNrUG9pbnQu bmV4dFhpZCksCiAJCQkJCQkJIGNoZWNrUG9pbnQubmV4dE9pZCkpKTsKIAllcmVwb3J0KERF QlVHMSwKLQkJCShlcnJtc2dfaW50ZXJuYWwoIm5leHQgTXVsdGlYYWN0SWQ6ICV1OyBuZXh0 IE11bHRpWGFjdE9mZnNldDogJXUiLAorCQkJKGVycm1zZ19pbnRlcm5hbCgibmV4dCBNdWx0 aVhhY3RJZDogJXU7IG5leHQgTXVsdGlYYWN0T2Zmc2V0OiAlIiBQUkl1NjQsCiAJCQkJCQkJ IGNoZWNrUG9pbnQubmV4dE11bHRpLCBjaGVja1BvaW50Lm5leHRNdWx0aU9mZnNldCkpKTsK IAllcmVwb3J0KERFQlVHMSwKIAkJCShlcnJtc2dfaW50ZXJuYWwoIm9sZGVzdCB1bmZyb3pl biB0cmFuc2FjdGlvbiBJRDogJXUsIGluIGRhdGFiYXNlICV1IiwKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFj dXVtLmMKaW5kZXggZTc4NWRkNTVjZTUuLjEwMGUxYTcyYzIyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92 YWN1dW0uYwpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAgdmFjdXVtX2dldF9jdXRvZmZzKFJlbGF0 aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAkgKiBub3JtYWxseSBhdXRv dmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwgYnV0IG1heSBiZSBsZXNzIGlmIHdl IGFyZQogCSAqIHNob3J0IG9mIG11bHRpeGFjdCBtZW1iZXIgc3BhY2UuCiAJICovCi0JZWZm ZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSA9IE11bHRpWGFjdE1lbWJlckZyZWV6 ZVRocmVzaG9sZCgpOworCWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgPSBh dXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZTsKIAogCS8qCiAJICogQWxtb3N0 IHJlYWR5IHRvIHNldCBmcmVlemUgb3V0cHV0IHBhcmFtZXRlcnM7IGNoZWNrIGlmIE9sZGVz dFhtaW4gb3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1 bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKaW5kZXggMWMzODQ4 OGYyY2IuLmJmNjZmNDk0ZTNhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0u YwpAQCAtMTE1MSw3ICsxMTUxLDcgQEAgZG9fc3RhcnRfd29ya2VyKHZvaWQpCiAKIAkvKiBB bHNvIGRldGVybWluZSB0aGUgb2xkZXN0IGRhdG1pbm14aWQgd2Ugd2lsbCBjb25zaWRlci4g Ki8KIAlyZWNlbnRNdWx0aSA9IFJlYWROZXh0TXVsdGlYYWN0SWQoKTsKLQltdWx0aUZvcmNl TGltaXQgPSByZWNlbnRNdWx0aSAtIE11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCgp OworCW11bHRpRm9yY2VMaW1pdCA9IHJlY2VudE11bHRpIC0gYXV0b3ZhY3V1bV9tdWx0aXhh Y3RfZnJlZXplX21heF9hZ2U7CiAJaWYgKG11bHRpRm9yY2VMaW1pdCA8IEZpcnN0TXVsdGlY YWN0SWQpCiAJCW11bHRpRm9yY2VMaW1pdCAtPSBGaXJzdE11bHRpWGFjdElkOwogCkBAIC0x OTM5LDcgKzE5MzksNyBAQCBkb19hdXRvdmFjdXVtKHZvaWQpCiAJICogbm9ybWFsbHkgYXV0 b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsIGJ1dCBtYXkgYmUgbGVzcyBpZiB3 ZSBhcmUKIAkgKiBzaG9ydCBvZiBtdWx0aXhhY3QgbWVtYmVyIHNwYWNlLgogCSAqLwotCWVm ZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgPSBNdWx0aVhhY3RNZW1iZXJGcmVl emVUaHJlc2hvbGQoKTsKKwllZmZlY3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlID0g YXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2U7CiAKIAkvKgogCSAqIEZpbmQg dGhlIHBnX2RhdGFiYXNlIGVudHJ5IGFuZCBzZWxlY3QgdGhlIGRlZmF1bHQgZnJlZXplIGFn ZXMuIFdlIHVzZQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250 cm9sZGF0YS5jIGIvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jCmlu ZGV4IDMwYWQ0NjkxMmUxLi5hNDA2MDMwOWFlMCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19j b250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jCisrKyBiL3NyYy9iaW4vcGdfY29udHJvbGRh dGEvcGdfY29udHJvbGRhdGEuYwpAQCAtMjcxLDcgKzI3MSw3IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm5leHRP aWQpOwogCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aVhhY3RJZDog ICV1XG4iKSwKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aSk7 Ci0JcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJXVc biIpLAorCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDog ICUiIFBSSXU2NCAiXG4iKSwKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm5l eHRNdWx0aU9mZnNldCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3Mgb2xkZXN0 WElEOiAgICAgICAgJXVcbiIpLAogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHku b2xkZXN0WGlkKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3 YWwuYyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYwppbmRleCBhMzFlNzY0 M2NmMC4uN2M2YzI3NDFhMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdf cmVzZXR3YWwuYworKysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMKQEAg LTkyLDYgKzkyLDcgQEAgc3RhdGljIHZvaWQgS2lsbEV4aXN0aW5nQXJjaGl2ZVN0YXR1cyh2 b2lkKTsKIHN0YXRpYyB2b2lkIEtpbGxFeGlzdGluZ1dBTFN1bW1hcmllcyh2b2lkKTsKIHN0 YXRpYyB2b2lkIFdyaXRlRW1wdHlYTE9HKHZvaWQpOwogc3RhdGljIHZvaWQgdXNhZ2Uodm9p ZCk7CitzdGF0aWMgdWludDY0IHN0cnRvdTY0X3N0cmljdChjb25zdCBjaGFyICpzLCBjaGFy ICoqZW5kcHRyLCBpbnQgYmFzZSk7CiAKIAogaW50CkBAIC0xMjAsNyArMTIxLDYgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCU11bHRpWGFjdElkIHNldF9vbGRlc3RteGlk ID0gMDsKIAljaGFyCSAgICplbmRwdHI7CiAJY2hhcgkgICAqZW5kcHRyMjsKLQlpbnQ2NAkJ dG1waTY0OwogCWNoYXIJICAgKkRhdGFEaXIgPSBOVUxMOwogCWNoYXIJICAgKmxvZ19mbmFt ZSA9IE5VTEw7CiAJaW50CQkJZmQ7CkBAIC0yNjksMTcgKzI2OSwxNCBAQCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCiAKIAkJCWNhc2UgJ08nOgogCQkJCWVycm5vID0gMDsKLQkJ CQl0bXBpNjQgPSBzdHJ0b2k2NChvcHRhcmcsICZlbmRwdHIsIDApOworCQkJCXNldF9teG9m ZiA9IHN0cnRvdTY0X3N0cmljdChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJCWlmIChlbmRw dHIgPT0gb3B0YXJnIHx8ICplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJCXsK IAkJCQkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gJXMiLCAi LU8iKTsKIAkJCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBt b3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKIAkJCQkJZXhpdCgxKTsKIAkJCQl9Ci0J CQkJaWYgKHRtcGk2NCA8IDAgfHwgdG1waTY0ID4gKGludDY0KSBNYXhNdWx0aVhhY3RPZmZz ZXQpCi0JCQkJCXBnX2ZhdGFsKCJtdWx0aXRyYW5zYWN0aW9uIG9mZnNldCAoLU8pIG11c3Qg YmUgYmV0d2VlbiAwIGFuZCAldSIsIE1heE11bHRpWGFjdE9mZnNldCk7CiAKLQkJCQlzZXRf bXhvZmYgPSAoTXVsdGlYYWN0T2Zmc2V0KSB0bXBpNjQ7CiAJCQkJbXhvZmZfZ2l2ZW4gPSB0 cnVlOwogCQkJCWJyZWFrOwogCkBAIC03NDksNyArNzQ2LDcgQEAgUHJpbnRDb250cm9sVmFs dWVzKGJvb2wgZ3Vlc3NlZCkKIAkJICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4 dE9pZCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpWGFjdElk OiAgJXVcbiIpLAogCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0TXVsdGkp OwotCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDogICV1 XG4iKSwKKwlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6 ICAlIiBQUkl1NjQgIlxuIiksCiAJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5l eHRNdWx0aU9mZnNldCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3Mgb2xkZXN0 WElEOiAgICAgICAgJXVcbiIpLAogCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5v bGRlc3RYaWQpOwpAQCAtODI1LDcgKzgyMiw3IEBAIFByaW50TmV3Q29udHJvbFZhbHVlcyh2 b2lkKQogCiAJaWYgKG14b2ZmX2dpdmVuKQogCXsKLQkJcHJpbnRmKF8oIk5leHRNdWx0aU9m ZnNldDogICAgICAgICAgICAgICAgICAgICAgJXVcbiIpLAorCQlwcmludGYoXygiTmV4dE11 bHRpT2Zmc2V0OiAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1NjQgIlxuIiksCiAJCQkg ICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0TXVsdGlPZmZzZXQpOwogCX0KIApA QCAtMTIxMCwzICsxMjA3LDIyIEBAIHVzYWdlKHZvaWQpCiAJcHJpbnRmKF8oIlxuUmVwb3J0 IGJ1Z3MgdG8gPCVzPi5cbiIpLCBQQUNLQUdFX0JVR1JFUE9SVCk7CiAJcHJpbnRmKF8oIiVz IGhvbWUgcGFnZTogPCVzPlxuIiksIFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9VUkwpOwogfQor CisvKiBMaWtlIHN0cnRvdTY0KCksIGJ1dCBuZWdhdGl2ZSB2YWx1ZXMgYXJlIG5vdCBhY2Nl cHRlZC4gKi8KK3N0YXRpYyB1aW50NjQKK3N0cnRvdTY0X3N0cmljdChjb25zdCBjaGFyICpz LCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwkvKiBza2lwIGxlYWRpbmcgd2hpdGVz cGFjZSAqLworCXdoaWxlIChpc3NwYWNlKCpzKSkKKwkJcysrOworCisJLyogcmVqZWN0IG5l Z2F0aXZlIHZhbHVlcyAqLworCWlmICgqcyA9PSAnLScpCisJeworCQkqZW5kcHRyID0gKGNo YXIgKikgczsKKwkJZXJybm8gPSBFUkFOR0U7CisJCXJldHVybiBVSU5UNjRfTUFYOworCX0K KworCXJldHVybiBzdHJ0b3U2NChzLCBlbmRwdHIsIGJhc2UpOworfQpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdfcmVzZXR3 YWwvdC8wMDFfYmFzaWMucGwKaW5kZXggOTBlY2I4YWZlMTguLjVhMTc1ZTI4NWQxIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9i aW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwKQEAgLTE0NSw3ICsxNDUsNyBAQCBjb21t YW5kX2ZhaWxzX2xpa2UoCiAJJ2ZhaWxzIHdpdGggaW5jb3JyZWN0IC1PIG9wdGlvbicpOwog Y29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3BnX3Jlc2V0d2FsJywgJy1PJyA9PiAnLTEnLCAk bm9kZS0+ZGF0YV9kaXIgXSwKLQlxci9tdXN0IGJlIGJldHdlZW4gMCBhbmQgNDI5NDk2NzI5 NS8sCisJcXIvZXJyb3I6IGludmFsaWQgYXJndW1lbnQgZm9yIG9wdGlvbiAtTy8sCiAJJ2Zh aWxzIHdpdGggLU8gdmFsdWUgLTEnKTsKICMgLS13YWwtc2Vnc2l6ZQogY29tbWFuZF9mYWls c19saWtlKApAQCAtMjE1LDcgKzIxNSw3IEBAIHB1c2ggQGNtZCwKICAgc3ByaW50ZigiJWQs JWQiLCBoZXgoJGZpbGVzWzBdKSA9PSAwID8gMyA6IGhleCgkZmlsZXNbMF0pLCBoZXgoJGZp bGVzWy0xXSkpOwogCiBAZmlsZXMgPSBnZXRfc2xydV9maWxlcygncGdfbXVsdGl4YWN0L29m ZnNldHMnKTsKLSRtdWx0ID0gMzIgKiAkYmxja3N6IC8gNDsKKyRtdWx0ID0gMzIgKiAkYmxj a3N6IC8gODsKICMgLS1tdWx0aXhhY3QtaWRzIGFyZ3VtZW50IGlzICJuZXcsb2xkIgogcHVz aCBAY21kLAogICAnLS1tdWx0aXhhY3QtaWRzJyA9PiBzcHJpbnRmKCIlZCwlZCIsCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvbXVsdGl4YWN0LmgKaW5kZXggODJlNGJiOTBkZDUuLjdkOThmZTBmZTMyIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL211bHRpeGFjdC5oCkBAIC0yOCw4ICsyOCw2IEBACiAKICNkZWZpbmUgTXVs dGlYYWN0SWRJc1ZhbGlkKG11bHRpKSAoKG11bHRpKSAhPSBJbnZhbGlkTXVsdGlYYWN0SWQp CiAKLSNkZWZpbmUgTWF4TXVsdGlYYWN0T2Zmc2V0CSgoTXVsdGlYYWN0T2Zmc2V0KSAweEZG RkZGRkZGKQotCiAvKgogICogUG9zc2libGUgbXVsdGl4YWN0IGxvY2sgbW9kZXMgKCJzdGF0 dXMiKS4gIFRoZSBmaXJzdCBmb3VyIG1vZGVzIGFyZSBmb3IKICAqIHR1cGxlIGxvY2tzIChG T1IgS0VZIFNIQVJFLCBGT1IgU0hBUkUsIEZPUiBOTyBLRVkgVVBEQVRFLCBGT1IgVVBEQVRF KTsgdGhlCkBAIC0xNDcsNyArMTQ1LDYgQEAgZXh0ZXJuIHZvaWQgTXVsdGlYYWN0U2V0TmV4 dE1YYWN0KE11bHRpWGFjdElkIG5leHRNdWx0aSwKIGV4dGVybiB2b2lkIE11bHRpWGFjdEFk dmFuY2VOZXh0TVhhY3QoTXVsdGlYYWN0SWQgbWluTXVsdGksCiAJCQkJCQkJCQkgIE11bHRp WGFjdE9mZnNldCBtaW5NdWx0aU9mZnNldCk7CiBleHRlcm4gdm9pZCBNdWx0aVhhY3RBZHZh bmNlT2xkZXN0KE11bHRpWGFjdElkIG9sZGVzdE11bHRpLCBPaWQgb2xkZXN0TXVsdGlEQik7 Ci1leHRlcm4gaW50CU11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCh2b2lkKTsKIAog ZXh0ZXJuIHZvaWQgbXVsdGl4YWN0X3R3b3BoYXNlX3JlY292ZXIoRnVsbFRyYW5zYWN0aW9u SWQgZnhpZCwgdWludDE2IGluZm8sCiAJCQkJCQkJCQkgICB2b2lkICpyZWNkYXRhLCB1aW50 MzIgbGVuKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3RfaW50 ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaAppbmRl eCA5YjU2ZGVhZWYzMS4uYjAyMjc3NTllMzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVs dGl4YWN0X2ludGVybmFsLmgKQEAgLTE3LDIxICsxNywxMiBAQAogCiAjaW5jbHVkZSAiYWNj ZXNzL211bHRpeGFjdC5oIgogCi0KIC8qCiAgKiBEZWZpbmVzIGZvciBNdWx0aVhhY3RPZmZz ZXQgcGFnZSBzaXplcy4gIEEgcGFnZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMKICAqIHVz ZWQgZXZlcnl3aGVyZSBlbHNlIGluIFBvc3RncmVzLgotICoKLSAqIE5vdGU6IGJlY2F1c2Ug TXVsdGlYYWN0T2Zmc2V0cyBhcmUgMzIgYml0cyBhbmQgd3JhcCBhcm91bmQgYXQgMHhGRkZG RkZGRiwKLSAqIE11bHRpWGFjdCBwYWdlIG51bWJlcmluZyBhbHNvIHdyYXBzIGFyb3VuZCBh dAotICogMHhGRkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSwgYW5kIHNlZ21l bnQgbnVtYmVyaW5nIGF0Ci0gKiAweEZGRkZGRkZGL01VTFRJWEFDVF9PRkZTRVRTX1BFUl9Q QUdFL1NMUlVfUEFHRVNfUEVSX1NFR01FTlQuICBXZSBuZWVkCi0gKiB0YWtlIG5vIGV4cGxp Y2l0IG5vdGljZSBvZiB0aGF0IGZhY3QgaW4gdGhpcyBtb2R1bGUsIGV4Y2VwdCB3aGVuIGNv bXBhcmluZwotICogc2VnbWVudCBhbmQgcGFnZSBudW1iZXJzIGluIFRydW5jYXRlTXVsdGlY YWN0IChzZWUKLSAqIE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcykuCiAgKi8KIAotLyog V2UgbmVlZCBmb3VyIGJ5dGVzIHBlciBvZmZzZXQgKi8KKy8qIFdlIG5lZWQgOCBieXRlcyBw ZXIgb2Zmc2V0ICovCiAjZGVmaW5lIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFIChCTENL U1ogLyBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkKIAogc3RhdGljIGlubGluZSBpbnQ2NApA QCAtODAsMTkgKzcxLDYgQEAgTXVsdGlYYWN0SWRUb09mZnNldFNlZ21lbnQoTXVsdGlYYWN0 SWQgbXVsdGkpCiAjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFCVwKIAkoTVVM VElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9N RU1CRVJHUk9VUCkKIAotLyoKLSAqIEJlY2F1c2UgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIg cGFnZSBpcyBub3QgYSBkaXZpc29yIG9mIHRoZSBsYXN0IGl0ZW0KLSAqIG51bWJlciAobWVt YmVyIDB4RkZGRkZGRkYpLCB0aGUgbGFzdCBzZWdtZW50IGRvZXMgbm90IHVzZSB0aGUgbWF4 aW11bSBudW1iZXIKLSAqIG9mIHBhZ2VzLCBhbmQgbW9yZW92ZXIgdGhlIGxhc3QgdXNlZCBw YWdlIHRoZXJlaW4gZG9lcyBub3QgdXNlIHRoZSBzYW1lCi0gKiBudW1iZXIgb2YgaXRlbXMg YXMgcHJldmlvdXMgcGFnZXMuICAoQW5vdGhlciB3YXkgdG8gc2F5IGl0IGlzIHRoYXQgdGhl Ci0gKiAweEZGRkZGRkZGIG1lbWJlciBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0 aGUgbGFzdCBwYWdlLCBzbyB0aGUgcGFnZQotICogaGFzIHNvbWUgZW1wdHkgc3BhY2UgYWZ0 ZXIgdGhhdCBpdGVtLikKLSAqCi0gKiBUaGlzIGNvbnN0YW50IGlzIHRoZSBudW1iZXIgb2Yg bWVtYmVycyBpbiB0aGUgbGFzdCBwYWdlIG9mIHRoZSBsYXN0IHNlZ21lbnQuCi0gKi8KLSNk ZWZpbmUgTUFYX01FTUJFUlNfSU5fTEFTVF9NRU1CRVJTX1BBR0UgXAotCQkoKHVpbnQzMikg KCgweEZGRkZGRkZGICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UpICsgMSkpCi0KIC8q IHBhZ2UgaW4gd2hpY2ggYSBtZW1iZXIgaXMgdG8gYmUgZm91bmQgKi8KIHN0YXRpYyBpbmxp bmUgaW50NjQKIE1YT2Zmc2V0VG9NZW1iZXJQYWdlKE11bHRpWGFjdE9mZnNldCBvZmZzZXQp CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jLmggYi9zcmMvaW5jbHVkZS9jLmgKaW5kZXgg NzU3ZGZmZjQ3ODIuLmJjOTJhNmY0NTY1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jLmgK KysrIGIvc3JjL2luY2x1ZGUvYy5oCkBAIC02NzAsNyArNjcwLDcgQEAgdHlwZWRlZiB1aW50 MzIgU3ViVHJhbnNhY3Rpb25JZDsKIC8qIE11bHRpWGFjdElkIG11c3QgYmUgZXF1aXZhbGVu dCB0byBUcmFuc2FjdGlvbklkLCB0byBmaXQgaW4gdF94bWF4ICovCiB0eXBlZGVmIFRyYW5z YWN0aW9uSWQgTXVsdGlYYWN0SWQ7CiAKLXR5cGVkZWYgdWludDMyIE11bHRpWGFjdE9mZnNl dDsKK3R5cGVkZWYgdWludDY0IE11bHRpWGFjdE9mZnNldDsKIAogdHlwZWRlZiB1aW50MzIg Q29tbWFuZElkOwogCi0tIAoyLjQ3LjMKCg== --------------MsYmZqOqmhDH81OSlLXN4Y7x Content-Type: text/x-patch; charset=UTF-8; name="v26-0003-TEST-bump-catversion.patch" Content-Disposition: attachment; filename="v26-0003-TEST-bump-catversion.patch" Content-Transfer-Encoding: base64 RnJvbSBkYTVlYWFkMTgzZDRlMjdhMTkxNWQwNTk0NjQ1YzU0ZWY1ZDgyMGM4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjQgT2N0IDIwMjUgMTE6NDc6NTAgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyNiAwMy8xMF0gVEVTVDogYnVtcCBjYXR2ZXJzaW9uCgpUbyBhdm9pZCBjb25zdGFudCBD Ri1ib3QgY29tcGxhaW5zLCBtYWtlIGNhdHZlcnNpb24gYnVtcCBpbiBhIHNlcGFyYXRlCmNv bW1pdC4KCk5PVEU6IGtlZXAgaXQgaW4gc3luYyB3aXRoIE1VTFRJWEFDVE9GRlNFVF9GT1JN QVRDSEFOR0VfQ0FUX1ZFUgotLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5o IHwgMyArKy0KIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCmluZGV4IDdlZWZjYTFhZTQyLi5iMDE2 MmMyYmY2MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgK KysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKQEAgLTU3LDYgKzU3LDcg QEAKICAqLwogCiAvKgkJCQkJCQl5eXl5bW1kZE4gKi8KLSNkZWZpbmUgQ0FUQUxPR19WRVJT SU9OX05PCTIwMjUxMTEwMQorLy8gRklYTUU6IGJ1bXAgaXQKKyNkZWZpbmUgQ0FUQUxPR19W RVJTSU9OX05PCTk5OTk5OTk5OQogCiAjZW5kaWYKLS0gCjIuNDcuMwoK --------------MsYmZqOqmhDH81OSlLXN4Y7x Content-Type: text/x-patch; charset=UTF-8; name="v26-0004-Add-pg_upgrade-for-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename*0="v26-0004-Add-pg_upgrade-for-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 RnJvbSBhOTA3MzA4MzY3MTY4OWY2NGFlMjViOTViNGRlZDgwODNkODcwZGUyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTIgTm92IDIwMjUgMjE6NDc6NDQgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyNiAwNC8xMF0gQWRkIHBnX3VwZ3JhZGUgZm9yIDY0IGJpdCBt dWx0aXhhY3Qgb2Zmc2V0cwoKQXV0aG9yOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5j b20+CkF1dGhvcjogSGVpa2tpIExpbm5ha2FuZ2FzIDxobGlubmFrYUBpa2kuZmk+Ci0tLQog c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgICAgICAgIHwgIDU2IC0t LQogc3JjL2Jpbi9wZ191cGdyYWRlL01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwgICAz ICsKIHNyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICB8ICAg NCArCiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5jICAgICAgICAgICAgfCAx MDEgKysrKysrCiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5oICAgICAgICAg ICAgfCAgMjMgKysKIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmMgICAgICAg ICAgICB8IDI5NyArKysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4 YWN0X29sZC5oICAgICAgICAgICAgfCAgMjkgKysKIHNyYy9iaW4vcGdfdXBncmFkZS9wZ191 cGdyYWRlLmMgICAgICAgICAgICAgICB8IDEwOCArKysrKy0KIHNyYy9iaW4vcGdfdXBncmFk ZS9wZ191cGdyYWRlLmggICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmluL3BnX3VwZ3Jh ZGUvc2xydV9pby5jICAgICAgICAgICAgICAgICAgfCAyNDIgKysrKysrKysrKysrKwogc3Jj L2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaCAgICAgICAgICAgICAgICAgIHwgIDUyICsrKwog Li4uL3BnX3VwZ3JhZGUvdC8wMDdfbXVsdGl4YWN0X2NvbnZlcnNpb24ucGwgIHwgMzI5ICsr KysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rl ci5wbSAgICAgIHwgIDIxICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICAgICAgICAgICAgfCAgIDMgKwogMTQgZmlsZXMgY2hhbmdlZCwgMTIwNCBpbnNlcnRpb25z KCspLCA2OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3Vw Z3JhZGUvbXVsdGl4YWN0X25ldy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ191 cGdyYWRlL211bHRpeGFjdF9uZXcuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdf dXBncmFkZS9tdWx0aXhhY3Rfb2xkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3Bn X3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9w Z191cGdyYWRlL3NscnVfaW8uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBn cmFkZS9zbHJ1X2lvLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUv dC8wMDdfbXVsdGl4YWN0X2NvbnZlcnNpb24ucGwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL211bHRpeGFjdC5jCmluZGV4IDM0YTc0NWMwN2JlLi5lMDMyM2VjMTAxNCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTE4MjQsNDggKzE4MjQs NiBAQCBCb290U3RyYXBNdWx0aVhhY3Qodm9pZCkKIAlTaW1wbGVMcnVaZXJvQW5kV3JpdGVQ YWdlKE11bHRpWGFjdE1lbWJlckN0bCwgMCk7CiB9CiAKLS8qCi0gKiBNYXliZUV4dGVuZE9m ZnNldFNscnUKLSAqCQlFeHRlbmQgdGhlIG9mZnNldHMgU0xSVSBhcmVhLCBpZiBuZWNlc3Nh cnkKLSAqCi0gKiBBZnRlciBhIGJpbmFyeSB1cGdyYWRlIGZyb20gPD0gOS4yLCB0aGUgcGdf bXVsdGl4YWN0L29mZnNldHMgU0xSVSBhcmVhIG1pZ2h0Ci0gKiBjb250YWluIGZpbGVzIHRo YXQgYXJlIHNob3J0ZXIgdGhhbiBuZWNlc3Nhcnk7IHRoaXMgd291bGQgb2NjdXIgaWYgdGhl IG9sZAotICogaW5zdGFsbGF0aW9uIGhhZCB1c2VkIG11bHRpeGFjdHMgYmV5b25kIHRoZSBm aXJzdCBwYWdlIChmaWxlcyBjYW5ub3QgYmUKLSAqIGNvcGllZCwgYmVjYXVzZSB0aGUgb24t ZGlzayByZXByZXNlbnRhdGlvbiBpcyBkaWZmZXJlbnQpLiAgcGdfdXBncmFkZSB3b3VsZAot ICogdXBkYXRlIHBnX2NvbnRyb2wgdG8gc2V0IHRoZSBuZXh0IG9mZnNldCB2YWx1ZSB0byBi ZSBhdCB0aGF0IHBvc2l0aW9uLCBzbwotICogdGhhdCB0dXBsZXMgbWFya2VkIGFzIGxvY2tl ZCBieSBzdWNoIE11bHRpWGFjdHMgd291bGQgYmUgc2VlbiBhcyB2aXNpYmxlCi0gKiB3aXRo b3V0IGhhdmluZyB0byBjb25zdWx0IG11bHRpeGFjdC4gIEhvd2V2ZXIsIHRyeWluZyB0byBj cmVhdGUgYW5kIHVzZSBhCi0gKiBuZXcgTXVsdGlYYWN0SWQgd291bGQgcmVzdWx0IGluIGFu IGVycm9yIGJlY2F1c2UgdGhlIHBhZ2Ugb24gd2hpY2ggdGhlIG5ldwotICogdmFsdWUgd291 bGQgcmVzaWRlIGRvZXMgbm90IGV4aXN0LiAgVGhpcyByb3V0aW5lIGlzIGluIGNoYXJnZSBv ZiBjcmVhdGluZwotICogc3VjaCBwYWdlcy4KLSAqLwotc3RhdGljIHZvaWQKLU1heWJlRXh0 ZW5kT2Zmc2V0U2xydSh2b2lkKQotewotCWludDY0CQlwYWdlbm87Ci0JTFdMb2NrCSAgICps b2NrOwotCi0JcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoTXVsdGlYYWN0U3Rh dGUtPm5leHRNWGFjdCk7Ci0JbG9jayA9IFNpbXBsZUxydUdldEJhbmtMb2NrKE11bHRpWGFj dE9mZnNldEN0bCwgcGFnZW5vKTsKLQotCUxXTG9ja0FjcXVpcmUobG9jaywgTFdfRVhDTFVT SVZFKTsKLQotCWlmICghU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KE11bHRpWGFj dE9mZnNldEN0bCwgcGFnZW5vKSkKLQl7Ci0JCWludAkJCXNsb3RubzsKLQotCQkvKgotCQkg KiBGb3J0dW5hdGVseSBmb3IgdXMsIFNpbXBsZUxydVdyaXRlUGFnZSBpcyBhbHJlYWR5IHBy ZXBhcmVkIHRvIGRlYWwKLQkJICogd2l0aCBjcmVhdGluZyBhIG5ldyBzZWdtZW50IGZpbGUg ZXZlbiBpZiB0aGUgcGFnZSB3ZSdyZSB3cml0aW5nIGlzCi0JCSAqIG5vdCB0aGUgZmlyc3Qg aW4gaXQsIHNvIHRoaXMgaXMgZW5vdWdoLgotCQkgKi8KLQkJc2xvdG5vID0gU2ltcGxlTHJ1 WmVyb1BhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pOwotCQlTaW1wbGVMcnVXcml0 ZVBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBzbG90bm8pOwotCX0KLQotCUxXTG9ja1JlbGVh c2UobG9jayk7Ci19Ci0KIC8qCiAgKiBUaGlzIG11c3QgYmUgY2FsbGVkIE9OQ0UgZHVyaW5n IHBvc3RtYXN0ZXIgb3Igc3RhbmRhbG9uZS1iYWNrZW5kIHN0YXJ0dXAuCiAgKgpAQCAtMjA1 OCwyMCArMjAxNiw2IEBAIE11bHRpWGFjdFNldE5leHRNWGFjdChNdWx0aVhhY3RJZCBuZXh0 TXVsdGksCiAJTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCA9IG5leHRNdWx0aTsKIAlNdWx0 aVhhY3RTdGF0ZS0+bmV4dE9mZnNldCA9IG5leHRNdWx0aU9mZnNldDsKIAlMV0xvY2tSZWxl YXNlKE11bHRpWGFjdEdlbkxvY2spOwotCi0JLyoKLQkgKiBEdXJpbmcgYSBiaW5hcnkgdXBn cmFkZSwgbWFrZSBzdXJlIHRoYXQgdGhlIG9mZnNldHMgU0xSVSBpcyBsYXJnZQotCSAqIGVu b3VnaCB0byBjb250YWluIHRoZSBuZXh0IHZhbHVlIHRoYXQgd291bGQgYmUgY3JlYXRlZC4K LQkgKgotCSAqIFdlIG5lZWQgdG8gZG8gdGhpcyBwcmV0dHkgZWFybHkgZHVyaW5nIHRoZSBm aXJzdCBzdGFydHVwIGluIGJpbmFyeQotCSAqIHVwZ3JhZGUgbW9kZTogYmVmb3JlIFN0YXJ0 dXBNdWx0aVhhY3QoKSBpbiBmYWN0LCBiZWNhdXNlIHRoaXMgcm91dGluZQotCSAqIGlzIGNh bGxlZCBldmVuIGJlZm9yZSB0aGF0IGJ5IFN0YXJ0dXBYTE9HKCkuICBBbmQgd2UgY2FuJ3Qg ZG8gaXQKLQkgKiBlYXJsaWVyIHRoYW4gYXQgdGhpcyBwb2ludCwgYmVjYXVzZSBkdXJpbmcg dGhhdCBmaXJzdCBjYWxsIG9mIHRoaXMKLQkgKiByb3V0aW5lIHdlIGRldGVybWluZSB0aGUg TXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCB2YWx1ZSB0aGF0Ci0JICogTWF5YmVFeHRlbmRP ZmZzZXRTbHJ1IG5lZWRzLgotCSAqLwotCWlmIChJc0JpbmFyeVVwZ3JhZGUpCi0JCU1heWJl RXh0ZW5kT2Zmc2V0U2xydSgpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191 cGdyYWRlL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ191cGdyYWRlL01ha2VmaWxlCmluZGV4IDY5 ZmNmNTkzY2FlLi40Mjk5NWQ1M2IwYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRl L01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9NYWtlZmlsZQpAQCAtMTgsMTEg KzE4LDE0IEBAIE9CSlMgPSBcCiAJZmlsZS5vIFwKIAlmdW5jdGlvbi5vIFwKIAlpbmZvLm8g XAorCW11bHRpeGFjdF9uZXcubyBcCisJbXVsdGl4YWN0X29sZC5vIFwKIAlvcHRpb24ubyBc CiAJcGFyYWxsZWwubyBcCiAJcGdfdXBncmFkZS5vIFwKIAlyZWxmaWxlbnVtYmVyLm8gXAog CXNlcnZlci5vIFwKKwlzbHJ1X2lvLm8gXAogCXRhYmxlc3BhY2UubyBcCiAJdGFzay5vIFwK IAl1dGlsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxk IGIvc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxkCmluZGV4IGFjOTkyZjBkMTRiLi5m ZmYwZGIzYjU2MCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxk CisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZApAQCAtOCwxMSArOCwxNCBA QCBwZ191cGdyYWRlX3NvdXJjZXMgPSBmaWxlcygKICAgJ2ZpbGUuYycsCiAgICdmdW5jdGlv bi5jJywKICAgJ2luZm8uYycsCisgICdtdWx0aXhhY3RfbmV3LmMnLAorICAnbXVsdGl4YWN0 X29sZC5jJywKICAgJ29wdGlvbi5jJywKICAgJ3BhcmFsbGVsLmMnLAogICAncGdfdXBncmFk ZS5jJywKICAgJ3JlbGZpbGVudW1iZXIuYycsCiAgICdzZXJ2ZXIuYycsCisgICdzbHJ1X2lv LmMnLAogICAndGFibGVzcGFjZS5jJywKICAgJ3Rhc2suYycsCiAgICd1dGlsLmMnLApAQCAt NDcsNiArNTAsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDRfc3Vic2NyaXB0aW9uLnBs JywKICAgICAgICd0LzAwNV9jaGFyX3NpZ25lZG5lc3MucGwnLAogICAgICAgJ3QvMDA2X3Ry YW5zZmVyX21vZGVzLnBsJywKKyAgICAgICd0LzAwN19tdWx0aXhhY3RfY29udmVyc2lvbi5w bCcsCiAgICAgXSwKICAgICAndGVzdF9rd2FyZ3MnOiB7J3ByaW9yaXR5JzogNDB9LCAjIHBn X3VwZ3JhZGUgdGVzdHMgYXJlIHNsb3cKICAgfSwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf dXBncmFkZS9tdWx0aXhhY3RfbmV3LmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0 X25ldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44Mjg0YTIw MTVmYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rf bmV3LmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBtdWx0aXhhY3RfbmV3LmMKKyAqCisg KiBGdW5jdGlvbnMgdG8gd3JpdGUgbXVsdGl4YWN0cyBpbiB0aGUgdjE5IGZvcm1hdCB3aXRo IDY0LWJpdAorICogTXVsdGlYYWN0T2Zmc2V0cworICoKKyAqIENvcHlyaWdodCAoYykgMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdf dXBncmFkZS9tdWx0aXhhY3RfbmV3LmMKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUu aCIKKworI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaCIKKyNpbmNsdWRl ICJtdWx0aXhhY3RfbmV3LmgiCisKK011bHRpWGFjdFdyaXRlciAqCitBbGxvY011bHRpWGFj dFdyaXRlKGNvbnN0IGNoYXIgKnBnZGF0YSwgTXVsdGlYYWN0SWQgZmlyc3RNdWx0aSwKKwkJ CQkJTXVsdGlYYWN0T2Zmc2V0IGZpcnN0T2Zmc2V0KQoreworCU11bHRpWGFjdFdyaXRlciAq c3RhdGUgPSBwZ19tYWxsb2Moc2l6ZW9mKCpzdGF0ZSkpOworCWNoYXIJCWRpcltNQVhQR1BB VEhdID0gezB9OworCisJcGdfc3ByaW50ZihkaXIsICIlcy9wZ19tdWx0aXhhY3Qvb2Zmc2V0 cyIsIHBnZGF0YSk7CisJc3RhdGUtPm9mZnNldCA9IEFsbG9jU2xydVdyaXRlKGRpciwgZmFs c2UpOworCVNscnVXcml0ZVN3aXRjaFBhZ2Uoc3RhdGUtPm9mZnNldCwgTXVsdGlYYWN0SWRU b09mZnNldFBhZ2UoZmlyc3RNdWx0aSkpOworCisJcGdfc3ByaW50ZihkaXIsICIlcy9wZ19t dWx0aXhhY3QvbWVtYmVycyIsIHBnZGF0YSk7CisJc3RhdGUtPm1lbWJlcnMgPSBBbGxvY1Ns cnVXcml0ZShkaXIsIHRydWUgLyogdXNlIGxvbmcgc2VnbWVudCBuYW1lcyAqLyApOworCVNs cnVXcml0ZVN3aXRjaFBhZ2Uoc3RhdGUtPm1lbWJlcnMsIE1YT2Zmc2V0VG9NZW1iZXJQYWdl KGZpcnN0T2Zmc2V0KSk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qCisgKiBXcml0ZSBh IG5ldyBtdWx0aXhhY3Qgd2l0aCBtZW1iZXJzLgorICoKKyAqIFNpbXBsaWZpZWQgdmVyc2lv biBvZiB0aGUgY29ycmVzcG9kaW5nIHNlcnZlciBmdW5jdGlvbiwgaGVuY2UgdGhlIG5hbWUu CisgKi8KK3ZvaWQKK1JlY29yZE5ld011bHRpWGFjdChNdWx0aVhhY3RXcml0ZXIgKnN0YXRl LCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAorCQkJCSAgIE11bHRpWGFjdElkIG11bHRpLCBp bnQgbm1lbWJlcnMsIE11bHRpWGFjdE1lbWJlciAqbWVtYmVycykKK3sKKwlpbnQ2NAkJcGFn ZW5vOworCWludDY0CQlwcmV2X3BhZ2VubzsKKwlpbnQJCQllbnRyeW5vOworCWNoYXIJICAg KmJ1ZjsKKwlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKKworCXBhZ2VubyA9IE11bHRpWGFj dElkVG9PZmZzZXRQYWdlKG11bHRpKTsKKwllbnRyeW5vID0gTXVsdGlYYWN0SWRUb09mZnNl dEVudHJ5KG11bHRpKTsKKworCS8qIFN0b3JlIHRoZSBvZmZzZXQgKi8KKwlidWYgPSBTbHJ1 V3JpdGVTd2l0Y2hQYWdlKHN0YXRlLT5vZmZzZXQsIHBhZ2Vubyk7CisJb2ZmcHRyID0gKE11 bHRpWGFjdE9mZnNldCAqKSBidWY7CisJb2ZmcHRyW2VudHJ5bm9dID0gb2Zmc2V0OworCisJ LyogU3RvcmUgdGhlIG1lbWJlcnMgKi8KKwlwcmV2X3BhZ2VubyA9IC0xOworCWZvciAoaW50 IGkgPSAwOyBpIDwgbm1lbWJlcnM7IGkrKywgb2Zmc2V0KyspCisJeworCQlUcmFuc2FjdGlv bklkICptZW1iZXJwdHI7CisJCXVpbnQzMgkgICAqZmxhZ3NwdHI7CisJCXVpbnQzMgkJZmxh Z3N2YWw7CisJCWludAkJCWJzaGlmdDsKKwkJaW50CQkJZmxhZ3NvZmY7CisJCWludAkJCW1l bWJlcm9mZjsKKworCQlBc3NlcnQobWVtYmVyc1tpXS5zdGF0dXMgPD0gTXVsdGlYYWN0U3Rh dHVzVXBkYXRlKTsKKworCQlwYWdlbm8gPSBNWE9mZnNldFRvTWVtYmVyUGFnZShvZmZzZXQp OworCQltZW1iZXJvZmYgPSBNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KG9mZnNldCk7CisJCWZs YWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCk7CisJCWJzaGlmdCA9IE1Y T2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KG9mZnNldCk7CisKKwkJaWYgKHBhZ2VubyAhPSBwcmV2 X3BhZ2VubykKKwkJeworCQkJYnVmID0gU2xydVdyaXRlU3dpdGNoUGFnZShzdGF0ZS0+bWVt YmVycywgcGFnZW5vKTsKKwkJCXByZXZfcGFnZW5vID0gcGFnZW5vOworCQl9CisKKwkJbWVt YmVycHRyID0gKFRyYW5zYWN0aW9uSWQgKikgKGJ1ZiArIG1lbWJlcm9mZik7CisKKwkJKm1l bWJlcnB0ciA9IG1lbWJlcnNbaV0ueGlkOworCisJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAo YnVmICsgZmxhZ3NvZmYpOworCisJCWZsYWdzdmFsID0gKmZsYWdzcHRyOworCQlmbGFnc3Zh bCAmPSB+KCgoMSA8PCBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVCkgLSAxKSA8PCBic2hp ZnQpOworCQlmbGFnc3ZhbCB8PSAobWVtYmVyc1tpXS5zdGF0dXMgPDwgYnNoaWZ0KTsKKwkJ KmZsYWdzcHRyID0gZmxhZ3N2YWw7CisJfQorfQorCit2b2lkCitGcmVlTXVsdGlYYWN0V3Jp dGUoTXVsdGlYYWN0V3JpdGVyICpzdGF0ZSkKK3sKKwlGcmVlU2xydVdyaXRlKHN0YXRlLT5v ZmZzZXQpOworCUZyZWVTbHJ1V3JpdGUoc3RhdGUtPm1lbWJlcnMpOworCisJcGZyZWUoc3Rh dGUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcu aCBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY2NmU2YWY3ZTQ1Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuaApAQCAtMCwwICsxLDIzIEBA CisvKgorICogbXVsdGl4YWN0X25ldy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191cGdy YWRlL211bHRpeGFjdF9uZXcuaAorICovCisjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5o IgorCisjaW5jbHVkZSAic2xydV9pby5oIgorCit0eXBlZGVmIHN0cnVjdCBNdWx0aVhhY3RX cml0ZXIKK3sKKwlTbHJ1U2VnU3RhdGUgKm9mZnNldDsKKwlTbHJ1U2VnU3RhdGUgKm1lbWJl cnM7Cit9IE11bHRpWGFjdFdyaXRlcjsKKworZXh0ZXJuIE11bHRpWGFjdFdyaXRlciAqQWxs b2NNdWx0aVhhY3RXcml0ZShjb25zdCBjaGFyICpwZ2RhdGEsCisJCQkJCQkJCQkJCU11bHRp WGFjdElkIGZpcnN0TXVsdGksCisJCQkJCQkJCQkJCU11bHRpWGFjdE9mZnNldCBmaXJzdE9m ZnNldCk7CitleHRlcm4gdm9pZCBSZWNvcmROZXdNdWx0aVhhY3QoTXVsdGlYYWN0V3JpdGVy ICpzdGF0ZSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKKwkJCQkJCQkgICBNdWx0aVhhY3RJ ZCBtdWx0aSwgaW50IG5tZW1iZXJzLAorCQkJCQkJCSAgIE11bHRpWGFjdE1lbWJlciAqbWVt YmVycyk7CitleHRlcm4gdm9pZCBGcmVlTXVsdGlYYWN0V3JpdGUoTXVsdGlYYWN0V3JpdGVy ICp3cml0ZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9v bGQuYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdiZjdkYjRiMDA5Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuYwpAQCAtMCwwICsxLDI5 NyBAQAorLyoKKyAqIG11bHRpeGFjdF9vbGQuYworICoKKyAqIEZ1bmN0aW9ucyB0byByZWFk IHByZS12MTkgbXVsdGl4YWN0cworICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9t dWx0aXhhY3Rfb2xkLmMKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2lu Y2x1ZGUgIm11bHRpeGFjdF9vbGQuaCIKKyNpbmNsdWRlICJwZ191cGdyYWRlLmgiCisKKy8q CisgKiBOT1RFOiBiZWxvdyBhcmUgYSBidW5jaCBvZiBkZWZpbml0aW9ucyB0aGF0IGFyZSBj b3B5LXBhc3RlZCBmcm9tCisgKiBtdWx0aXhhY3QuYyBmcm9tIHZlcnNpb24gMTguICBUaGUg b25seSBkaWZmZXJlbmNlIGlzIHRoYXQgd2UgdXNlIHRoZQorICogT2xkTXVsdGlYYWN0T2Zm c2V0IHR5cGUgZXF1YWwgdG8gdWludDMyIGluc3RlYWQgb2YgTXVsdGlYYWN0T2Zmc2V0IHdo aWNoCisgKiBiZWNhbWUgdWludDY0LgorICovCisKKy8qIFdlIG5lZWQgZm91ciBieXRlcyBw ZXIgb2Zmc2V0IGFuZCA4IGJ5dGVzIHBlciBiYXNlIGZvciBlYWNoIHBhZ2UuICovCisjZGVm aW5lIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFIChCTENLU1ogLyBzaXplb2YoT2xkTXVs dGlYYWN0T2Zmc2V0KSkKKworc3RhdGljIGlubGluZSBpbnQ2NAorTXVsdGlYYWN0SWRUb09m ZnNldFBhZ2UoTXVsdGlYYWN0SWQgbXVsdGkpCit7CisJcmV0dXJuIG11bHRpIC8gTVVMVElY QUNUX09GRlNFVFNfUEVSX1BBR0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitNdWx0aVhh Y3RJZFRvT2Zmc2V0RW50cnkoTXVsdGlYYWN0SWQgbXVsdGkpCit7CisJcmV0dXJuIG11bHRp ICUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0U7Cit9CisKKy8qCisgKiBUaGUgc2l0dWF0 aW9uIGZvciBtZW1iZXJzIGlzIGEgYml0IG1vcmUgY29tcGxleDogd2Ugc3RvcmUgb25lIGJ5 dGUgb2YKKyAqIGFkZGl0aW9uYWwgZmxhZyBiaXRzIGZvciBlYWNoIFRyYW5zYWN0aW9uSWQu ICBUbyBkbyB0aGlzIHdpdGhvdXQgZ2V0dGluZworICogaW50byBhbGlnbm1lbnQgaXNzdWVz LCB3ZSBzdG9yZSBmb3VyIGJ5dGVzIG9mIGZsYWdzLCBhbmQgdGhlbiB0aGUKKyAqIGNvcnJl c3BvbmRpbmcgNCBYaWRzLiAgRWFjaCBzdWNoIDUtd29yZCAoMjAtYnl0ZSkgc2V0IHdlIGNh bGwgYSAiZ3JvdXAiLCBhbmQKKyAqIGFyZSBzdG9yZWQgYXMgYSB3aG9sZSBpbiBwYWdlcy4g IFRodXMsIHdpdGggOGtCIEJMQ0tTWiwgd2Uga2VlcCA0MDkgZ3JvdXBzCisgKiBwZXIgcGFn ZS4gIFRoaXMgd2FzdGVzIDEyIGJ5dGVzIHBlciBwYWdlLCBidXQgdGhhdCdzIE9LIC0tIHNp bXBsaWNpdHkgKGFuZAorICogcGVyZm9ybWFuY2UpIHRydW1wcyBzcGFjZSBlZmZpY2llbmN5 IGhlcmUuCisgKgorICogTm90ZSB0aGF0IHRoZSAib2Zmc2V0IiBtYWNyb3Mgd29yayB3aXRo IGJ5dGUgb2Zmc2V0LCBub3QgYXJyYXkgaW5kZXhlcywgc28KKyAqIGFyaXRobWV0aWMgbXVz dCBiZSBkb25lIHVzaW5nICJjaGFyICoiIHBvaW50ZXJzLgorICovCisvKiBXZSBuZWVkIGVp Z2h0IGJpdHMgcGVyIHhhY3QsIHNvIG9uZSB4YWN0IGZpdHMgaW4gYSBieXRlICovCisjZGVm aW5lIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUCQkJOAorI2RlZmluZSBNWEFDVF9NRU1C RVJfRkxBR1NfUEVSX0JZVEUJCQkxCisjZGVmaW5lIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1B U0sJKCgxIDw8IE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUKSAtIDEpCisKKy8qIGhvdyBt YW55IGZ1bGwgYnl0ZXMgb2YgZmxhZ3MgYXJlIHRoZXJlIGluIGEgZ3JvdXA/ICovCisjZGVm aW5lIE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQCQk0CisjZGVmaW5lIE1VTFRJWEFD VF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUAlcCisJKE1VTFRJWEFDVF9GTEFHQllURVNfUEVS X0dST1VQICogTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRFKQorLyogc2l6ZSBpbiBieXRl cyBvZiBhIGNvbXBsZXRlIGdyb3VwICovCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9V UF9TSVpFIFwKKwkoc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogTVVMVElYQUNUX01FTUJFUlNf UEVSX01FTUJFUkdST1VQICsgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVApCisjZGVm aW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKEJMQ0tTWiAvIE1VTFRJWEFD VF9NRU1CRVJHUk9VUF9TSVpFKQorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFH RQlcCisJKE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKiBNVUxUSVhBQ1RfTUVN QkVSU19QRVJfTUVNQkVSR1JPVVApCisKKy8qIHBhZ2UgaW4gd2hpY2ggYSBtZW1iZXIgaXMg dG8gYmUgZm91bmQgKi8KK3N0YXRpYyBpbmxpbmUgaW50NjQKK01YT2Zmc2V0VG9NZW1iZXJQ YWdlKE9sZE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJcmV0dXJuIG9mZnNldCAvIE1V TFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOworfQorCisvKiBMb2NhdGlvbiAoYnl0ZSBvZmZz ZXQgd2l0aGluIHBhZ2UpIG9mIGZsYWcgd29yZCBmb3IgYSBnaXZlbiBtZW1iZXIgKi8KK3N0 YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvRmxhZ3NPZmZzZXQoTXVsdGlYYWN0T2Zmc2V0 IG9mZnNldCkKK3sKKwlPbGRNdWx0aVhhY3RPZmZzZXQgZ3JvdXAgPSBvZmZzZXQgLyBNVUxU SVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVA7CisJaW50CQkJZ3JvdXBvbnBnID0gZ3Jv dXAgJSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFOworCWludAkJCWJ5dGVvZmYg PSBncm91cG9ucGcgKiBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRTsKKworCXJldHVybiBi eXRlb2ZmOworfQorCisvKiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9m IFRyYW5zYWN0aW9uSWQgb2YgZ2l2ZW4gbWVtYmVyICovCitzdGF0aWMgaW5saW5lIGludAor TVhPZmZzZXRUb01lbWJlck9mZnNldChPbGRNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQorewor CWludAkJCW1lbWJlcl9pbl9ncm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BF Ul9NRU1CRVJHUk9VUDsKKworCXJldHVybiBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0 KSArCisJCU1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQICsKKwkJbWVtYmVyX2luX2dy b3VwICogc2l6ZW9mKFRyYW5zYWN0aW9uSWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAor TVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQoT2xkTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sK KwlpbnQJCQltZW1iZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19Q RVJfTUVNQkVSR1JPVVA7CisJaW50CQkJYnNoaWZ0ID0gbWVtYmVyX2luX2dyb3VwICogTVhB Q1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1Q7CisKKwlyZXR1cm4gYnNoaWZ0OworfQorCisvKgor ICogQ29uc3RydWN0IHJlYWRlciBvZiBvbGQgbXVsdGl4YWN0cy4KKyAqCisgKiBSZXR1cm5z IHRoZSBtYWxsb2NlZCBtZW1vcnkgdXNlZCBieSB0aGUgYWxsIG90aGVyIGNhbGxzIGluIHRo aXMgbW9kdWxlLgorICovCitPbGRNdWx0aVhhY3RSZWFkZXIgKgorQWxsb2NPbGRNdWx0aVhh Y3RSZWFkKGNoYXIgKnBnZGF0YSwgTXVsdGlYYWN0SWQgbmV4dE11bHRpLAorCQkJCQkgIE9s ZE11bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0KQoreworCU9sZE11bHRpWGFjdFJlYWRlciAq c3RhdGUgPSBzdGF0ZSA9IHBnX21hbGxvYyhzaXplb2YoKnN0YXRlKSk7CisJY2hhcgkJZGly W01BWFBHUEFUSF0gPSB7MH07CisKKwlzdGF0ZS0+bmV4dE1YYWN0ID0gbmV4dE11bHRpOwor CXN0YXRlLT5uZXh0T2Zmc2V0ID0gbmV4dE9mZnNldDsKKworCXBnX3NwcmludGYoZGlyLCAi JXMvcGdfbXVsdGl4YWN0L29mZnNldHMiLCBwZ2RhdGEpOworCXN0YXRlLT5vZmZzZXQgPSBB bGxvY1NscnVSZWFkKGRpciwgZmFsc2UpOworCisJcGdfc3ByaW50ZihkaXIsICIlcy9wZ19t dWx0aXhhY3QvbWVtYmVycyIsIHBnZGF0YSk7CisJc3RhdGUtPm1lbWJlcnMgPSBBbGxvY1Ns cnVSZWFkKGRpciwgZmFsc2UpOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogVGhp cyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgR2V0TXVsdGlYYWN0SWRNZW1iZXJz KCkgc2VydmVyIGZ1bmN0aW9uLgorICoKKyAqIC0gT25seSByZXR1cm4gdGhlIHVwZGF0aW5n IG1lbWJlciwgaWYgYW55LiBVcGdyYWRlIG9ubHkgY2FyZXMgYWJvdXQgdGhlCisgKiAgIHVw ZGF0ZXJzLiBJZiB0aGVyZSBpcyBubyB1cGRhdGluZyBtZW1iZXIsIHJldHVybiB0aGUgZmly c3QgbG9ja2luZy1vbmx5CisgKiAgIG1lbWJlci4gV2UgZG9uJ3QgaGF2ZSBhbnkgd2F5IHRv IHJlcHJlc2VudCAibm8gbWVtYmVycyIsIGJ1dCB3ZSBhbHNvIGRvbid0CisgKiAgIG5lZWQg dG8gcHJlc2VydmUgYWxsIHRoZSBsb2NraW5nIG1lbWJlcnMuCisgKgorICogLSBXZSBkb24n dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGxvY2tpbmcgYW5kIHNvbWUgY29ybmVyIGNhc2VzIGJl Y2F1c2UgdGhlcmUncworICogICBubyBjb25jdXJyZW50IGFjdGl2aXR5LgorICovCit2b2lk CitHZXRPbGRNdWx0aVhhY3RJZFNpbmdsZU1lbWJlcihPbGRNdWx0aVhhY3RSZWFkZXIgKnN0 YXRlLCBNdWx0aVhhY3RJZCBtdWx0aSwKKwkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgKnJlc3Vs dCwgTXVsdGlYYWN0U3RhdHVzICpzdGF0dXMpCit7CisJTXVsdGlYYWN0SWQgbmV4dE1YYWN0 LAorCQkJCW5leHRPZmZzZXQsCisJCQkJdG1wTVhhY3Q7CisJaW50NjQJCXBhZ2VubywKKwkJ CQlwcmV2X3BhZ2VubzsKKwlpbnQJCQllbnRyeW5vLAorCQkJCWxlbmd0aDsKKwljaGFyCSAg ICpidWY7CisJT2xkTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHIsCisJCQkJb2Zmc2V0OworCVRy YW5zYWN0aW9uSWQgcmVzdWx0X3hpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCWJvb2wJ CXJlc3VsdF9pc3VwZGF0ZSA9IGZhbHNlOworCisJbmV4dE1YYWN0ID0gc3RhdGUtPm5leHRN WGFjdDsKKwluZXh0T2Zmc2V0ID0gc3RhdGUtPm5leHRPZmZzZXQ7CisKKwkvKgorCSAqIFNl ZSBHZXRNdWx0aVhhY3RJZE1lbWJlcnMgaW4gbXVsdGl4YWN0LmMKKwkgKgorCSAqIEZpbmQg b3V0IHRoZSBvZmZzZXQgYXQgd2hpY2ggd2UgbmVlZCB0byBzdGFydCByZWFkaW5nIE11bHRp WGFjdE1lbWJlcnMKKwkgKiBhbmQgdGhlIG51bWJlciBvZiBtZW1iZXJzIGluIHRoZSBtdWx0 aXhhY3QuICBXZSBkZXRlcm1pbmUgdGhlIGxhdHRlciBhcworCSAqIHRoZSBkaWZmZXJlbmNl IGJldHdlZW4gdGhpcyBtdWx0aXhhY3QncyBzdGFydGluZyBvZmZzZXQgYW5kIHRoZSBuZXh0 CisJICogb25lJ3MuICBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgdG8g d29ycnkgYWJvdXQ6CisJICoKKwkgKiAxLiBUaGlzIG11bHRpeGFjdCBtYXkgYmUgdGhlIGxh dGVzdCBvbmUgY3JlYXRlZCwgaW4gd2hpY2ggY2FzZSB0aGVyZSBpcworCSAqIG5vIG5leHQg b25lIHRvIGxvb2sgYXQuICBJbiB0aGlzIGNhc2UgdGhlIG5leHRPZmZzZXQgdmFsdWUgd2Ug anVzdAorCSAqIHNhdmVkIGlzIHRoZSBjb3JyZWN0IGVuZHBvaW50LgorCSAqCisJICogMi4g VGhlIG5leHQgbXVsdGl4YWN0IG1heSBzdGlsbCBiZSBpbiBwcm9jZXNzIG9mIGJlaW5nIGZp bGxlZCBpbi4uLgorCSAqIFRoaXMgY2Fubm90IGhhcHBlbiBkdXJpbmcgdXBncmFkZS4KKwkg KgorCSAqIDMuIEJlY2F1c2UgR2V0TmV3TXVsdGlYYWN0SWQgaW5jcmVtZW50cyBvZmZzZXQg emVybyB0byBvZmZzZXQgb25lIHRvCisJICogaGFuZGxlIGNhc2UgIzIsIHRoZXJlIGlzIGFu IGFtYmlndWl0eSBuZWFyIHRoZSBwb2ludCBvZiBvZmZzZXQKKwkgKiB3cmFwYXJvdW5kLiAg SWYgd2Ugc2VlIG5leHQgbXVsdGl4YWN0J3Mgb2Zmc2V0IGlzIG9uZSwgaXMgdGhhdCBvdXIK KwkgKiBtdWx0aXhhY3QncyBhY3R1YWwgZW5kcG9pbnQsIG9yIGRpZCBpdCBlbmQgYXQgemVy byB3aXRoIGEgc3Vic2VxdWVudAorCSAqIGluY3JlbWVudD8gIFdlIGhhbmRsZSB0aGlzIHVz aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBpZiB0aGUgemVybyd0aAorCSAqIG1lbWJlciBzbG90 IHdhc24ndCBmaWxsZWQsIGl0J2xsIGNvbnRhaW4gemVybywgYW5kIHplcm8gaXNuJ3QgYSB2 YWxpZAorCSAqIHRyYW5zYWN0aW9uIElEIHNvIGl0IGNhbid0IGJlIGEgbXVsdGl4YWN0IG1l bWJlci4gIFRoZXJlZm9yZSwgaWYgd2UKKwkgKiByZWFkIGEgemVybyBmcm9tIHRoZSBtZW1i ZXJzIGFycmF5LCBqdXN0IGlnbm9yZSBpdC4KKwkgKi8KKworCXBhZ2VubyA9IE11bHRpWGFj dElkVG9PZmZzZXRQYWdlKG11bHRpKTsKKwllbnRyeW5vID0gTXVsdGlYYWN0SWRUb09mZnNl dEVudHJ5KG11bHRpKTsKKworCWJ1ZiA9IFNscnVSZWFkU3dpdGNoUGFnZShzdGF0ZS0+b2Zm c2V0LCBwYWdlbm8pOworCW9mZnB0ciA9IChPbGRNdWx0aVhhY3RPZmZzZXQgKikgYnVmOwor CW9mZnB0ciArPSBlbnRyeW5vOworCW9mZnNldCA9ICpvZmZwdHI7CisKKwlBc3NlcnQob2Zm c2V0ICE9IDApOworCisJLyoKKwkgKiBVc2UgdGhlIHNhbWUgaW5jcmVtZW50IHJ1bGUgYXMg R2V0TmV3TXVsdGlYYWN0SWQoKSwgdGhhdCBpcywgZG9uJ3QKKwkgKiBoYW5kbGUgd3JhcGFy b3VuZCBleHBsaWNpdGx5IHVudGlsIG5lZWRlZC4KKwkgKi8KKwl0bXBNWGFjdCA9IG11bHRp ICsgMTsKKworCWlmIChuZXh0TVhhY3QgPT0gdG1wTVhhY3QpCisJeworCQkvKiBDb3JuZXIg Y2FzZSAxOiB0aGVyZSBpcyBubyBuZXh0IG11bHRpeGFjdCAqLworCQlsZW5ndGggPSBuZXh0 T2Zmc2V0IC0gb2Zmc2V0OworCX0KKwllbHNlCisJeworCQlPbGRNdWx0aVhhY3RPZmZzZXQg bmV4dE1YT2Zmc2V0OworCisJCS8qIGhhbmRsZSB3cmFwYXJvdW5kIGlmIG5lZWRlZCAqLwor CQlpZiAodG1wTVhhY3QgPCBGaXJzdE11bHRpWGFjdElkKQorCQkJdG1wTVhhY3QgPSBGaXJz dE11bHRpWGFjdElkOworCisJCXByZXZfcGFnZW5vID0gcGFnZW5vOworCisJCXBhZ2VubyA9 IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKHRtcE1YYWN0KTsKKwkJZW50cnlubyA9IE11bHRp WGFjdElkVG9PZmZzZXRFbnRyeSh0bXBNWGFjdCk7CisKKwkJaWYgKHBhZ2VubyAhPSBwcmV2 X3BhZ2VubykKKwkJCWJ1ZiA9IFNscnVSZWFkU3dpdGNoUGFnZShzdGF0ZS0+b2Zmc2V0LCBw YWdlbm8pOworCisJCW9mZnB0ciA9IChPbGRNdWx0aVhhY3RPZmZzZXQgKikgYnVmOworCQlv ZmZwdHIgKz0gZW50cnlubzsKKwkJbmV4dE1YT2Zmc2V0ID0gKm9mZnB0cjsKKworCQkvKgor CQkgKiBDb3JuZXIgY2FzZSAyOiBuZXh0IG11bHRpeGFjdCBpcyBzdGlsbCBiZWluZyBmaWxs ZWQgaW4sIHRoaXMgbXVzdAorCQkgKiBub3QgaGFwcGVuIGR1cmluZyB1cGdyYWRlLgorCQkg Ki8KKwkJQXNzZXJ0KG5leHRNWE9mZnNldCAhPSAwKTsKKworCQlsZW5ndGggPSBuZXh0TVhP ZmZzZXQgLSBvZmZzZXQ7CisJfQorCisJcHJldl9wYWdlbm8gPSAtMTsKKwlmb3IgKGludCBp ID0gMDsgaSA8IGxlbmd0aDsgaSsrLCBvZmZzZXQrKykKKwl7CisJCVRyYW5zYWN0aW9uSWQg KnhhY3RwdHI7CisJCXVpbnQzMgkgICAqZmxhZ3NwdHI7CisJCWludAkJCWZsYWdzb2ZmOwor CQlpbnQJCQlic2hpZnQ7CisJCWludAkJCW1lbWJlcm9mZjsKKwkJTXVsdGlYYWN0U3RhdHVz IHN0OworCisJCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7CisJCW1l bWJlcm9mZiA9IE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQob2Zmc2V0KTsKKworCQlpZiAocGFn ZW5vICE9IHByZXZfcGFnZW5vKQorCQl7CisJCQlidWYgPSBTbHJ1UmVhZFN3aXRjaFBhZ2Uo c3RhdGUtPm1lbWJlcnMsIHBhZ2Vubyk7CisJCQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsKKwkJ fQorCisJCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoYnVmICsgbWVtYmVyb2ZmKTsK KwkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFjdHB0cikpCisJCXsKKwkJCS8qIENv cm5lciBjYXNlIDM6IHdlIG11c3QgYmUgbG9va2luZyBhdCB1bnVzZWQgc2xvdCB6ZXJvICov CisJCQlBc3NlcnQob2Zmc2V0ID09IDApOworCQkJY29udGludWU7CisJCX0KKworCQlmbGFn c29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOworCQlic2hpZnQgPSBNWE9m ZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQpOworCQlmbGFnc3B0ciA9ICh1aW50MzIgKikg KGJ1ZiArIGZsYWdzb2ZmKTsKKworCQlzdCA9ICgqZmxhZ3NwdHIgPj4gYnNoaWZ0KSAmIE1Y QUNUX01FTUJFUl9YQUNUX0JJVE1BU0s7CisKKwkJLyogVmVyaWZ5IHRoYXQgdGhlcmUgaXMg YSBzaW5nbGUgdXBkYXRlIFhpZCBhbW9uZyB0aGUgZ2l2ZW4gbWVtYmVycy4gKi8KKwkJaWYg KElTVVBEQVRFX2Zyb21fbXhzdGF0dXMoc3QpKQorCQl7CisJCQlpZiAocmVzdWx0X2lzdXBk YXRlKQorCQkJCXBnX2ZhdGFsKCJtdWx0aXhhY3QgJXUgaGFzIG1vcmUgdGhhbiBvbmUgdXBk YXRpbmcgbWVtYmVyIiwKKwkJCQkJCSBtdWx0aSk7CisJCQlyZXN1bHRfeGlkID0gKnhhY3Rw dHI7CisJCQlyZXN1bHRfaXN1cGRhdGUgPSB0cnVlOworCQl9CisJCWVsc2UgaWYgKCFUcmFu c2FjdGlvbklkSXNWYWxpZChyZXN1bHRfeGlkKSkKKwkJCXJlc3VsdF94aWQgPSAqeGFjdHB0 cjsKKwl9CisKKwkvKiBBIG11bHRpeGlkIHdpdGggemVybyBtZW1iZXJzIHNob3VsZCBub3Qg aGFwcGVuICovCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHJlc3VsdF94aWQpKTsK KworCSpyZXN1bHQgPSByZXN1bHRfeGlkOworCSpzdGF0dXMgPSByZXN1bHRfaXN1cGRhdGUg PyBNdWx0aVhhY3RTdGF0dXNVcGRhdGUgOgorCQlNdWx0aVhhY3RTdGF0dXNGb3JLZXlTaGFy ZTsKK30KKworLyoKKyAqIEZyZWVzIHRoZSBtYWxsb2NlZCByZWFkZXIuCisgKi8KK3ZvaWQK K0ZyZWVPbGRNdWx0aVhhY3RSZWFkZXIoT2xkTXVsdGlYYWN0UmVhZGVyICpzdGF0ZSkKK3sK KwlGcmVlU2xydVJlYWQoc3RhdGUtPm9mZnNldCk7CisJRnJlZVNscnVSZWFkKHN0YXRlLT5t ZW1iZXJzKTsKKworCXBmcmVlKHN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf dXBncmFkZS9tdWx0aXhhY3Rfb2xkLmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0 X29sZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZWI1YWYy Y2NhZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rf b2xkLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIG11bHRpeGFjdF9vbGQuaAorICoKKyAq IENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmgKKyAqLworCisjaW5j bHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgorI2luY2x1ZGUgInNscnVfaW8uaCIKKwordHlw ZWRlZiB1aW50MzIgT2xkTXVsdGlYYWN0T2Zmc2V0OworCit0eXBlZGVmIHN0cnVjdCBPbGRN dWx0aVhhY3RSZWFkZXIKK3sKKwlNdWx0aVhhY3RJZCBuZXh0TVhhY3Q7CisJT2xkTXVsdGlY YWN0T2Zmc2V0IG5leHRPZmZzZXQ7CisKKwlTbHJ1U2VnU3RhdGUgKm9mZnNldDsKKwlTbHJ1 U2VnU3RhdGUgKm1lbWJlcnM7Cit9IE9sZE11bHRpWGFjdFJlYWRlcjsKKworZXh0ZXJuIE9s ZE11bHRpWGFjdFJlYWRlciAqQWxsb2NPbGRNdWx0aVhhY3RSZWFkKGNoYXIgKnBnZGF0YSwK KwkJCQkJCQkJCQkJCSBNdWx0aVhhY3RJZCBuZXh0TXVsdGksCisJCQkJCQkJCQkJCQkgT2xk TXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQpOworZXh0ZXJuIHZvaWQgR2V0T2xkTXVsdGlY YWN0SWRTaW5nbGVNZW1iZXIoT2xkTXVsdGlYYWN0UmVhZGVyICpzdGF0ZSwKKwkJCQkJCQkJ CQkgIE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCAqcmVz dWx0LAorCQkJCQkJCQkJCSAgTXVsdGlYYWN0U3RhdHVzICpzdGF0dXMpOworZXh0ZXJuIHZv aWQgRnJlZU9sZE11bHRpWGFjdFJlYWRlcihPbGRNdWx0aVhhY3RSZWFkZXIgKnJlYWRlcik7 CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jIGIvc3JjL2Jp bi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYwppbmRleCA0OTBlOThmYTI2Zi4uMGZkZDA1YzEy N2MgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKKysrIGIv c3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYwpAQCAtNDgsNiArNDgsOCBAQAogI2lu Y2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiY29tbW9uL3Jlc3RyaWN0ZWRf dG9rZW4uaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKKyNpbmNsdWRl ICJtdWx0aXhhY3Rfb2xkLmgiCisjaW5jbHVkZSAibXVsdGl4YWN0X25ldy5oIgogI2luY2x1 ZGUgInBnX3VwZ3JhZGUuaCIKIAogLyoKQEAgLTc2OSw2ICs3NzEsODEgQEAgY29weV9zdWJk aXJfZmlsZXMoY29uc3QgY2hhciAqb2xkX3N1YmRpciwgY29uc3QgY2hhciAqbmV3X3N1YmRp cikKIAljaGVja19vaygpOwogfQogCisvKgorICogQ29udmVydCBwZ19tdWx0aXhhY3Qvb2Zm c2V0IGFuZCAvbWVtYmVycyB0byBuZXcgZm9ybWF0IHdpdGggNjQtYml0IG9mZnNldHMuCisg Ki8KK3N0YXRpYyB2b2lkCitjb252ZXJ0X211bHRpeGFjdHMoTXVsdGlYYWN0SWQgKm5ld19u eHRtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpuZXdfbnh0bXhvZmYpCit7CisJTXVsdGlYYWN0 SWQgb2xkZXN0X211bHRpLAorCQkJCW5leHRfbXVsdGk7CisJT2xkTXVsdGlYYWN0UmVhZGVy ICpvbGRfcmVhZGVyOworCU11bHRpWGFjdFdyaXRlciAqbmV3X3dyaXRlcjsKKwlNdWx0aVhh Y3RPZmZzZXQgbmV4dF9vZmZzZXQ7CisKKwkvKgorCSAqIFRoZSByYW5nZSBvZiB2YWxpZCBt dWx0aSBYSURzIGlzIHVuY2hhbmdlZCBieSB0aGUgY29udmVyc2lvbiAodGhleSBhcmUKKwkg KiByZWZlcmVuY2VkIGZyb20gdGhlIGhlYXAgdGFibGVzKSwgYnV0IHRoZSBtZW1iZXJzIFNM UlUgaXMgcmV3cml0dGVuIHRvCisJICogc3RhcnQgZnJvbSBvZmZzZXQgMS4KKwkgKi8KKwlv bGRlc3RfbXVsdGkgPSBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfb2xkc3RNdWx0 aTsKKwluZXh0X211bHRpID0gb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11 bHRpOworCW5leHRfb2Zmc2V0ID0gMTsKKworCW9sZF9yZWFkZXIgPSBBbGxvY09sZE11bHRp WGFjdFJlYWQob2xkX2NsdXN0ZXIucGdkYXRhLAorCQkJCQkJCQkJICAgb2xkX2NsdXN0ZXIu Y29udHJvbGRhdGEuY2hrcG50X254dG11bHRpLAorCQkJCQkJCQkJICAgb2xkX2NsdXN0ZXIu Y29udHJvbGRhdGEuY2hrcG50X254dG14b2ZmKTsKKwluZXdfd3JpdGVyID0gQWxsb2NNdWx0 aVhhY3RXcml0ZShuZXdfY2x1c3Rlci5wZ2RhdGEsCisJCQkJCQkJCQkgb2xkZXN0X211bHRp LCBuZXh0X29mZnNldCk7CisKKwkvKiBoYW5kbGUgd3JhcGFyb3VuZCAqLworCWlmIChuZXh0 X211bHRpIDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJbmV4dF9tdWx0aSA9IEZpcnN0TXVsdGlY YWN0SWQ7CisKKwkvKgorCSAqIFJlYWQgbXVsdGl4aWRzIGZyb20gb2xkIGZpbGVzIG9uZSBi eSBvbmUsIGFuZCB3cml0ZSB0aGVtIGJhY2sgaW4gdGhlCisJICogbmV3IGZvcm1hdC4KKwkg Ki8KKwlmb3IgKE11bHRpWGFjdElkIG11bHRpID0gb2xkZXN0X211bHRpOyBtdWx0aSAhPSBu ZXh0X211bHRpOykKKwl7CisJCVRyYW5zYWN0aW9uSWQgeGlkOworCQlNdWx0aVhhY3RTdGF0 dXMgc3RhdHVzOworCQlNdWx0aVhhY3RNZW1iZXIgbWVtYmVyOworCisJCS8qCisJCSAqIFJl YWQgdGhlIG9sZCBtdWx0aXhpZC4gIFRoZSBsb2NraW5nLW9ubHkgWElEcyB0aGF0IG1heSBi ZSBwYXJ0IG9mCisJCSAqIG11bHRpLXhpZHMgZG9uJ3QgbWF0dGVyIGFmdGVyIHVwZ3JhZGUs IGFzIHRoZXJlIGNhbiBiZSBubworCQkgKiB0cmFuc2FjdGlvbnMgcnVubmluZyBhY3Jvc3Mg dXBncmFkZS4gIFNvIGFzIGEgbGl0dGxlIG9wdGltaXphdGlvbiwKKwkJICogd2Ugb25seSBy ZWFkIG9uZSBtZW1iZXIgZnJvbSBlYWNoIG11bHRpeGlkOiB0aGUgb25lIHVwZGF0aW5nIG9u ZSwKKwkJICogb3IgaWYgdGhlcmUgd2FzIG5vIHVwZGF0ZSwgYXJiaXRyYXJpbHkgdGhlIGZp cnN0IGxvY2tpbmcgeGlkLgorCQkgKi8KKwkJR2V0T2xkTXVsdGlYYWN0SWRTaW5nbGVNZW1i ZXIob2xkX3JlYWRlciwgbXVsdGksICZ4aWQsICZzdGF0dXMpOworCisJCS8qIFdyaXRlIGl0 IG91dCBpbiBuZXcgZm9ybWF0ICovCisJCW1lbWJlci54aWQgPSB4aWQ7CisJCW1lbWJlci5z dGF0dXMgPSBzdGF0dXM7CisJCVJlY29yZE5ld011bHRpWGFjdChuZXdfd3JpdGVyLCBuZXh0 X29mZnNldCwgbXVsdGksIDEsICZtZW1iZXIpOworCisJCW5leHRfb2Zmc2V0ICs9IDE7CisJ CW11bHRpKys7CisJCS8qIGhhbmRsZSB3cmFwYXJvdW5kICovCisJCWlmIChtdWx0aSA8IEZp cnN0TXVsdGlYYWN0SWQpCisJCQltdWx0aSA9IEZpcnN0TXVsdGlYYWN0SWQ7CisJfQorCisJ LyoKKwkgKiBVcGRhdGUgdGhlIG5leHRNWGFjdC9PZmZzZXQgdmFsdWVzIGluIHRoZSBjb250 cm9sIGZpbGUgdG8gbWF0Y2ggd2hhdCB3ZQorCSAqIHdyb3RlLiAgVGhlIG5leHRNWGFjdCBp cyB1bmNoYW5nZWQsIGJ1dCBuZXh0T2Zmc2V0IHdpbGwgYmUgZGlmZmVyZW50LgorCSAqLwor CUFzc2VydChuZXh0X211bHRpID09IG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9u eHRtdWx0aSk7CisJKm5ld19ueHRtdWx0aSA9IG5leHRfbXVsdGk7CisJKm5ld19ueHRteG9m ZiA9IG5leHRfb2Zmc2V0OworCisJLyogUmVsZWFzZSByZXNvdXJjZXMgKi8KKwlGcmVlTXVs dGlYYWN0V3JpdGUobmV3X3dyaXRlcik7CisJRnJlZU9sZE11bHRpWGFjdFJlYWRlcihvbGRf cmVhZGVyKTsKK30KKwogc3RhdGljIHZvaWQKIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKQog ewpAQCAtODE2LDggKzg5MywyOSBAQCBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCkKIAlpZiAo b2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RfRk9STUFUQ0hB TkdFX0NBVF9WRVIgJiYKIAkJbmV3X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBN VUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIpCiAJewotCQljb3B5X3N1YmRpcl9maWxl cygicGdfbXVsdGl4YWN0L29mZnNldHMiLCAicGdfbXVsdGl4YWN0L29mZnNldHMiKTsKLQkJ Y29weV9zdWJkaXJfZmlsZXMoInBnX211bHRpeGFjdC9tZW1iZXJzIiwgInBnX211bHRpeGFj dC9tZW1iZXJzIik7CisJCU11bHRpWGFjdElkIG5ld19ueHRtdWx0aSA9IG9sZF9jbHVzdGVy LmNvbnRyb2xkYXRhLmNoa3BudF9ueHRtdWx0aTsKKwkJTXVsdGlYYWN0T2Zmc2V0IG5ld19u eHRteG9mZiA9IG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRteG9mZjsKKwor CQkvKgorCQkgKiBJZiB0aGUgb2xkIHNlcnZlciBpcyBiZWZvcmUgdGhlCisJCSAqIE1VTFRJ WEFDVE9GRlNFVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUiBpdCBtdXN0IGhhdmUgMzItYml0IG11 bHRpeGlkCisJCSAqIG9mZnNldHMsIHRodXMgaXQgc2hvdWxkIGJlIGNvbnZlcnRlZC4KKwkJ ICovCisJCWlmIChvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyIDwgTVVMVElYQUNU T0ZGU0VUX0ZPUk1BVENIQU5HRV9DQVRfVkVSICYmCisJCQluZXdfY2x1c3Rlci5jb250cm9s ZGF0YS5jYXRfdmVyID49IE1VTFRJWEFDVE9GRlNFVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUikK KwkJeworCQkJcmVtb3ZlX25ld19zdWJkaXIoInBnX211bHRpeGFjdC9tZW1iZXJzIiwgZmFs c2UpOworCQkJcmVtb3ZlX25ld19zdWJkaXIoInBnX211bHRpeGFjdC9vZmZzZXRzIiwgZmFs c2UpOworCisJCQlwcmVwX3N0YXR1cygiQ29udmVydGluZyBwZ19tdWx0aXhhY3Qvb2Zmc2V0 cyB0byA2NC1iaXQiKTsKKwkJCWNvbnZlcnRfbXVsdGl4YWN0cygmbmV3X254dG11bHRpLCAm bmV3X254dG14b2ZmKTsKKwkJCWNoZWNrX29rKCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlj b3B5X3N1YmRpcl9maWxlcygicGdfbXVsdGl4YWN0L29mZnNldHMiLCAicGdfbXVsdGl4YWN0 L29mZnNldHMiKTsKKwkJCWNvcHlfc3ViZGlyX2ZpbGVzKCJwZ19tdWx0aXhhY3QvbWVtYmVy cyIsICJwZ19tdWx0aXhhY3QvbWVtYmVycyIpOworCQl9CiAKIAkJcHJlcF9zdGF0dXMoIlNl dHRpbmcgbmV4dCBtdWx0aXhhY3QgSUQgYW5kIG9mZnNldCBmb3IgbmV3IGNsdXN0ZXIiKTsK IApAQCAtODI2LDEwICs5MjQsOCBAQCBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCkKIAkJICog Y291bnRlcnMgaGVyZSBhbmQgdGhlIG9sZGVzdCBtdWx0aSBwcmVzZW50IG9uIHN5c3RlbS4K IAkJICovCiAJCWV4ZWNfcHJvZyhVVElMSVRZX0xPR19GSUxFLCBOVUxMLCB0cnVlLCB0cnVl LAotCQkJCSAgIlwiJXMvcGdfcmVzZXR3YWxcIiAtTyAldSAtbSAldSwldSBcIiVzXCIiLAot CQkJCSAgbmV3X2NsdXN0ZXIuYmluZGlyLAotCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRh dGEuY2hrcG50X254dG14b2ZmLAotCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hr cG50X254dG11bHRpLAorCQkJCSAgIlwiJXMvcGdfcmVzZXR3YWxcIiAtTyAlIiBQUkl1NjQg IiAtbSAldSwldSBcIiVzXCIiLAorCQkJCSAgbmV3X2NsdXN0ZXIuYmluZGlyLCBuZXdfbnh0 bXhvZmYsIG5ld19ueHRtdWx0aSwKIAkJCQkgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNo a3BudF9vbGRzdE11bHRpLAogCQkJCSAgbmV3X2NsdXN0ZXIucGdkYXRhKTsKIAkJY2hlY2tf b2soKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmggYi9z cmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCmluZGV4IGU4NjMzNmY0YmU5Li4xMjdi MmNiMDBmYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaAor KysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCkBAIC0xMTQsNiArMTE0LDEx IEBAIGV4dGVybiBjaGFyICpvdXRwdXRfZmlsZXNbXTsKICAqLwogI2RlZmluZSBNVUxUSVhB Q1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIgMjAxMzAxMjMxCiAKKy8qCisgKiBTd2ljdGggZnJv bSAzMi1iaXQgdG8gNjQtYml0IGZvciBtdWx0aXhpZCBvZmZzZXRzLgorICovCisjZGVmaW5l IE1VTFRJWEFDVE9GRlNFVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUiA5OTk5OTk5OTkKKwogLyoK ICAqIGxhcmdlIG9iamVjdCBjaHVuayBzaXplIGFkZGVkIHRvIHBnX2NvbnRyb2xkYXRhLAog ICogY29tbWl0IDVmOTNjMzc4MDVlNzQ4NTQ4ODQ4MDkxNmI0NTg1ZTA5OGQzY2M4ODMKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMgYi9zcmMvYmluL3BnX3Vw Z3JhZGUvc2xydV9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li4wMTAwOTQxODRiZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9z bHJ1X2lvLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBzbHJ1X2lvLmMKKyAqCisgKiBS b3V0aW5lcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBTTFJVIGZpbGVzIGR1cmluZyB1cGdy YWRlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNp bmNsdWRlICJjb21tb24vZmVfbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vZmlsZV9w ZXJtLmgiCisjaW5jbHVkZSAiY29tbW9uL2ZpbGVfdXRpbHMuaCIKKyNpbmNsdWRlICJwb3J0 L3BnX2lvdmVjLmgiCisjaW5jbHVkZSAicGdfdXBncmFkZS5oIgorI2luY2x1ZGUgInNscnVf aW8uaCIKKworc3RhdGljIFNscnVTZWdTdGF0ZSAqQWxsb2NTbHJ1U2VnU3RhdGUoY29uc3Qg Y2hhciAqZGlyKTsKK3N0YXRpYyBjaGFyICpTbHJ1RmlsZU5hbWUoU2xydVNlZ1N0YXRlICpz dGF0ZSwgaW50NjQgc2Vnbm8pOworc3RhdGljIHZvaWQgU2xydUZsdXNoKFNscnVTZWdTdGF0 ZSAqc3RhdGUpOworCitzdGF0aWMgU2xydVNlZ1N0YXRlICoKK0FsbG9jU2xydVNlZ1N0YXRl KGNvbnN0IGNoYXIgKmRpcikKK3sKKwlTbHJ1U2VnU3RhdGUgKnN0YXRlID0gcGdfbWFsbG9j KHNpemVvZigqc3RhdGUpKTsKKworCXN0YXRlLT5kaXIgPSBwc3RyZHVwKGRpcik7CisJc3Rh dGUtPmZuID0gTlVMTDsKKwlzdGF0ZS0+ZmQgPSAtMTsKKwlzdGF0ZS0+c2Vnbm8gPSAtMTsK KwlzdGF0ZS0+cGFnZW5vID0gMDsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyogc2ltaWxh ciB0byB0aGUgYmFja2VuZCBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgKi8KK3N0YXRp YyBjaGFyICoKK1NscnVGaWxlTmFtZShTbHJ1U2VnU3RhdGUgKnN0YXRlLCBpbnQ2NCBzZWdu bykKK3sKKwlpZiAoc3RhdGUtPmxvbmdfc2VnbWVudF9uYW1lcykKKwl7CisJCUFzc2VydChz ZWdubyA+PSAwICYmIHNlZ25vIDw9IElOVDY0Q09OU1QoMHhGRkZGRkZGRkZGRkZGRkYpKTsK KwkJcmV0dXJuIHBzcHJpbnRmKCIlcy8lMDE1IiBQUklYNjQsIHN0YXRlLT5kaXIsIHNlZ25v KTsKKwl9CisJZWxzZQorCXsKKwkJQXNzZXJ0KHNlZ25vID49IDAgJiYgc2Vnbm8gPD0gSU5U NjRDT05TVCgweEZGRkZGRikpOworCQlyZXR1cm4gcHNwcmludGYoIiVzLyUwNFgiLCBzdGF0 ZS0+ZGlyLCAodW5zaWduZWQgaW50KSBzZWdubyk7CisJfQorfQorCisvKgorICogQ3JlYXRl IHNscnUgcmVhZGVyIGZvciBkaXIuCisgKgorICogUmV0dXJucyB0aGUgbWFsbG9jZWQgbWVt b3J5IHVzZWQgYnkgdGhlIGFsbCBvdGhlciByZWFkIGNhbGxzIGluIHRoaXMgbW9kdWxlLgor ICovCitTbHJ1U2VnU3RhdGUgKgorQWxsb2NTbHJ1UmVhZChjb25zdCBjaGFyICpkaXIsIGJv b2wgbG9uZ19zZWdtZW50X25hbWVzKQoreworCVNscnVTZWdTdGF0ZSAqc3RhdGUgPSBBbGxv Y1NscnVTZWdTdGF0ZShkaXIpOworCisJc3RhdGUtPndyaXRpbmcgPSBmYWxzZTsKKwlzdGF0 ZS0+bG9uZ19zZWdtZW50X25hbWVzID0gbG9uZ19zZWdtZW50X25hbWVzOworCisJcmV0dXJu IHN0YXRlOworfQorCisvKgorICogT3BlbiBnaXZlbiBwYWdlIGZvciByZWFkaW5nLgorICoK KyAqIFJlYWRpbmcgY2FuIGJlIGRvbmUgaW4gcmFuZG9tIG9yZGVyLgorICovCitjaGFyICoK K1NscnVSZWFkU3dpdGNoUGFnZVNsb3coU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBh Z2VubykKK3sKKwlpbnQ2NAkJc2Vnbm87CisKKwlBc3NlcnQoIXN0YXRlLT53cml0aW5nKTsJ LyogcmVhZCBvbmx5IG1vZGUgKi8KKworCWlmIChzdGF0ZS0+c2Vnbm8gIT0gLTEgJiYgcGFn ZW5vID09IHN0YXRlLT5wYWdlbm8pCisJCXJldHVybiBzdGF0ZS0+YnVmLmRhdGE7CisKKwlz ZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CisJaWYgKHNlZ25vICE9 IHN0YXRlLT5zZWdubykKKwl7CisJCWlmIChzdGF0ZS0+c2Vnbm8gIT0gLTEpCisJCXsKKwkJ CWNsb3NlKHN0YXRlLT5mZCk7CisJCQlzdGF0ZS0+ZmQgPSAtMTsKKworCQkJcGdfZnJlZShz dGF0ZS0+Zm4pOworCQkJc3RhdGUtPmZuID0gTlVMTDsKKworCQkJc3RhdGUtPnNlZ25vID0g LTE7CisJCX0KKworCQkvKiBPcGVuIG5ldyBzZWdtZW50ICovCisJCXN0YXRlLT5mbiA9IFNs cnVGaWxlTmFtZShzdGF0ZSwgc2Vnbm8pOworCQlpZiAoKHN0YXRlLT5mZCA9IG9wZW4oc3Rh dGUtPmZuLCBPX1JET05MWSB8IFBHX0JJTkFSWSwgMCkpIDwgMCkKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBzdGF0ZS0+Zm4pOworCX0KKworCXN0 YXRlLT5zZWdubyA9IHNlZ25vOworCisJeworCQlzdHJ1Y3QgaW92ZWMgaW92ZWMgPSB7CisJ CQkuaW92X2Jhc2UgPSAmc3RhdGUtPmJ1ZiwKKwkJCS5pb3ZfbGVuID0gQkxDS1NaLAorCQl9 OworCQlvZmZfdAkJb2Zmc2V0ID0gKHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQp ICogQkxDS1NaOworCisJCWlmIChwZ19wcmVhZHYoc3RhdGUtPmZkLCAmaW92ZWMsIDEsIG9m ZnNldCkgPCAwKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wiOiAl bSIsIHN0YXRlLT5mbik7CisKKwkJc3RhdGUtPnBhZ2VubyA9IHBhZ2VubzsKKwl9CisKKwly ZXR1cm4gc3RhdGUtPmJ1Zi5kYXRhOworfQorCisvKgorICogRnJlZXMgdGhlIG1hbGxvY2Vk IHJlYWRlci4KKyAqLwordm9pZAorRnJlZVNscnVSZWFkKFNscnVTZWdTdGF0ZSAqc3RhdGUp Cit7CisJQXNzZXJ0KCFzdGF0ZS0+d3JpdGluZyk7CS8qIHJlYWQgb25seSBtb2RlICovCisK KwlpZiAoc3RhdGUtPmZkICE9IC0xKQorCQljbG9zZShzdGF0ZS0+ZmQpOworCXBnX2ZyZWUo c3RhdGUpOworfQorCisvKgorICogQ3JlYXRlIHNscnUgd3JpdGVyIGZvciBkaXIuCisgKgor ICogUmV0dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVzZWQgYnkgdGhlIGFsbCBvdGhlciB3 cml0ZSBjYWxscyBpbiB0aGlzIG1vZHVsZS4KKyAqLworU2xydVNlZ1N0YXRlICoKK0FsbG9j U2xydVdyaXRlKGNvbnN0IGNoYXIgKmRpciwgYm9vbCBsb25nX3NlZ21lbnRfbmFtZXMpCit7 CisJU2xydVNlZ1N0YXRlICpzdGF0ZSA9IEFsbG9jU2xydVNlZ1N0YXRlKGRpcik7CisKKwlz dGF0ZS0+d3JpdGluZyA9IHRydWU7CisJc3RhdGUtPmxvbmdfc2VnbWVudF9uYW1lcyA9IGxv bmdfc2VnbWVudF9uYW1lczsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyoKKyAqIE9wZW4g dGhlIGdpdmVuIHBhZ2UgZm9yIHdyaXRpbmcuCisgKgorICogTk9URTogVGhpcyB1c2VzIE9f RVhDTCB3aGVuIHN0ZXBwaW5nIHRvIGEgbmV3IHNlZ21lbnQsIHNvIHRoaXMgYXNzdW1lcyB0 aGF0CisgKiBlYWNoIHNlZ21lbnQgaXMgd3JpdHRlbiBpbiBmdWxsIGJlZm9yZSBtb3Zpbmcg b24gdG8gbmV4dCBvbmUuICBUaGlzCisgKiBsaW1pdGF0aW9uIHdvdWxkIGJlIGVhc3kgdG8g bGlmdCBpZiBuZWVkZWQsIGJ1dCBpdCBmaXRzIHRoZSB1c2FnZSBwYXR0ZXJuIG9mCisgKiBj dXJyZW50IGNhbGxlcnMuCisgKi8KK2NoYXIgKgorU2xydVdyaXRlU3dpdGNoUGFnZVNsb3co U2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2VubykKK3sKKwlpbnQ2NAkJc2Vnbm87 CisJb2ZmX3QJCW9mZnNldDsKKworCWlmIChzdGF0ZS0+c2Vnbm8gIT0gLTEgJiYgcGFnZW5v ID09IHN0YXRlLT5wYWdlbm8pCisJCXJldHVybiBzdGF0ZS0+YnVmLmRhdGE7CisKKwlzZWdu byA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CisJb2Zmc2V0ID0gKHBhZ2Vu byAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpICogQkxDS1NaOworCisJU2xydUZsdXNoKHN0 YXRlKTsKKwltZW1zZXQoc3RhdGUtPmJ1Zi5kYXRhLCAwLCBCTENLU1opOworCisJaWYgKHNl Z25vICE9IHN0YXRlLT5zZWdubykKKwl7CisJCWlmIChzdGF0ZS0+c2Vnbm8gIT0gLTEpCisJ CXsKKwkJCWNsb3NlKHN0YXRlLT5mZCk7CisJCQlzdGF0ZS0+ZmQgPSAtMTsKKworCQkJcGdf ZnJlZShzdGF0ZS0+Zm4pOworCQkJc3RhdGUtPmZuID0gTlVMTDsKKworCQkJc3RhdGUtPnNl Z25vID0gLTE7CisJCX0KKworCQkvKiBDcmVhdGUgdGhlIHNlZ21lbnQgKi8KKwkJc3RhdGUt PmZuID0gU2xydUZpbGVOYW1lKHN0YXRlLCBzZWdubyk7CisJCWlmICgoc3RhdGUtPmZkID0g b3BlbihzdGF0ZS0+Zm4sIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX0VYQ0wgfCBQR19CSU5BUlks CisJCQkJCQkJICBwZ19maWxlX2NyZWF0ZV9tb2RlKSkgPCAwKQorCQl7CisJCQlwZ19mYXRh bCgiY291bGQgbm90IGNyZWF0ZSBmaWxlIFwiJXNcIjogJW0iLCBzdGF0ZS0+Zm4pOworCQl9 CisKKwkJc3RhdGUtPnNlZ25vID0gc2Vnbm87CisKKwkJaWYgKG9mZnNldCA+IDApCisJCXsK KwkJCWlmIChwZ19wd3JpdGVfemVyb3Moc3RhdGUtPmZkLCBvZmZzZXQsIDApIDwgMCkKKwkJ CQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIGZpbGUgXCIlc1wiOiAlbSIsIHN0YXRlLT5m bik7CisJCX0KKwl9CisKKwlzdGF0ZS0+cGFnZW5vID0gcGFnZW5vOworCisJcmV0dXJuIHN0 YXRlLT5idWYuZGF0YTsKK30KKworc3RhdGljIHZvaWQKK1NscnVGbHVzaChTbHJ1U2VnU3Rh dGUgKnN0YXRlKQoreworCXN0cnVjdCBpb3ZlYyBpb3ZlYyA9IHsKKwkJLmlvdl9iYXNlID0g JnN0YXRlLT5idWYsCisJCS5pb3ZfbGVuID0gQkxDS1NaLAorCX07CisJb2ZmX3QJCW9mZnNl dDsKKworCWlmIChzdGF0ZS0+c2Vnbm8gPT0gLTEpCisJCXJldHVybjsKKworCW9mZnNldCA9 IChzdGF0ZS0+cGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkgKiBCTENLU1o7CisK KwlpZiAocGdfcHdyaXRldl93aXRoX3JldHJ5KHN0YXRlLT5mZCwgJmlvdmVjLCAxLCBvZmZz ZXQpIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSBmaWxlIFwiJXNcIjogJW0i LCBzdGF0ZS0+Zm4pOworfQorCisvKgorICogRnJlZXMgdGhlIG1hbGxvY2VkIHdyaXRlci4K KyAqLwordm9pZAorRnJlZVNscnVXcml0ZShTbHJ1U2VnU3RhdGUgKnN0YXRlKQoreworCUFz c2VydChzdGF0ZS0+d3JpdGluZyk7CisKKwlTbHJ1Rmx1c2goc3RhdGUpOworCisJaWYgKHN0 YXRlLT5mZCAhPSAtMSkKKwkJY2xvc2Uoc3RhdGUtPmZkKTsKKwlwZ19mcmVlKHN0YXRlKTsK K30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmggYi9zcmMvYmlu L3BnX3VwZ3JhZGUvc2xydV9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi41YzgwYTY3OWI0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBn cmFkZS9zbHJ1X2lvLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIHNscnVfaW8uaAorICoK KyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmgKKyAqLworCisjaWZuZGVm IFNMUlVfSU9fSAorI2RlZmluZSBTTFJVX0lPX0gKKworLyoKKyAqIFN0YXRlIGZvciByZWFk aW5nIG9yIHdyaXRpbmcgYW4gU0xSVSwgd2l0aCBhIG9uZSBwYWdlIGJ1ZmZlci4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgU2xydVNlZ1N0YXRlCit7CisJYm9vbAkJd3JpdGluZzsKKwlib29s CQlsb25nX3NlZ21lbnRfbmFtZXM7CisKKwljaGFyCSAgICpkaXI7CisJY2hhcgkgICAqZm47 CisJaW50CQkJZmQ7CisJaW50NjQJCXNlZ25vOworCXVpbnQ2NAkJcGFnZW5vOworCisJUEdB bGlnbmVkQmxvY2sgYnVmOworfSBTbHJ1U2VnU3RhdGU7CisKK2V4dGVybiBTbHJ1U2VnU3Rh dGUgKkFsbG9jU2xydVJlYWQoY29uc3QgY2hhciAqZGlyLCBib29sIGxvbmdfc2VnbWVudF9u YW1lcyk7CitleHRlcm4gY2hhciAqU2xydVJlYWRTd2l0Y2hQYWdlU2xvdyhTbHJ1U2VnU3Rh dGUgKnN0YXRlLCB1aW50NjQgcGFnZW5vKTsKK2V4dGVybiB2b2lkIEZyZWVTbHJ1UmVhZChT bHJ1U2VnU3RhdGUgKnN0YXRlKTsKKworc3RhdGljIGlubGluZSBjaGFyICoKK1NscnVSZWFk U3dpdGNoUGFnZShTbHJ1U2VnU3RhdGUgKnN0YXRlLCB1aW50NjQgcGFnZW5vKQoreworCWlm IChzdGF0ZS0+c2Vnbm8gIT0gLTEgJiYgcGFnZW5vID09IHN0YXRlLT5wYWdlbm8pCisJCXJl dHVybiBzdGF0ZS0+YnVmLmRhdGE7CisJcmV0dXJuIFNscnVSZWFkU3dpdGNoUGFnZVNsb3co c3RhdGUsIHBhZ2Vubyk7Cit9CisKK2V4dGVybiBTbHJ1U2VnU3RhdGUgKkFsbG9jU2xydVdy aXRlKGNvbnN0IGNoYXIgKmRpciwgYm9vbCBsb25nX3NlZ21lbnRfbmFtZXMpOworZXh0ZXJu IGNoYXIgKlNscnVXcml0ZVN3aXRjaFBhZ2VTbG93KFNscnVTZWdTdGF0ZSAqc3RhdGUsIHVp bnQ2NCBwYWdlbm8pOworZXh0ZXJuIHZvaWQgRnJlZVNscnVXcml0ZShTbHJ1U2VnU3RhdGUg KnN0YXRlKTsKKworc3RhdGljIGlubGluZSBjaGFyICoKK1NscnVXcml0ZVN3aXRjaFBhZ2Uo U2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2VubykKK3sKKwlpZiAoc3RhdGUtPnNl Z25vICE9IC0xICYmIHBhZ2VubyA9PSBzdGF0ZS0+cGFnZW5vKQorCQlyZXR1cm4gc3RhdGUt PmJ1Zi5kYXRhOworCXJldHVybiBTbHJ1V3JpdGVTd2l0Y2hQYWdlU2xvdyhzdGF0ZSwgcGFn ZW5vKTsKK30KKworI2VuZGlmCQkJCQkJCS8qIFNMUlVfSU9fSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA3X211bHRpeGFjdF9jb252ZXJzaW9uLnBsIGIvc3Jj L2Jpbi9wZ191cGdyYWRlL3QvMDA3X211bHRpeGFjdF9jb252ZXJzaW9uLnBsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZThkYTlhZGVkMgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS90LzAwN19tdWx0aXhhY3RfY29udmVyc2lv bi5wbApAQCAtMCwwICsxLDMyOSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVmVyc2lvbiAxOSBleHBhbmRlZCBN dWx0aVhhY3RPZmZzZXQgZnJvbSAzMiB0byA2NCBiaXRzLiBVcGdyYWRpbmcKKyMgYWNyb3Nz IHRoYXQgcmVxdWlyZXMgcmV3cml0aW5nIHRoZSBTTFJVIGZpbGVzIHRvIHRoZSBuZXcgZm9y bWF0LgorIyBUaGlzIGZpbGUgY29udGFpbnMgdGVzdHMgZm9yIHRoZSBjb252ZXJzaW9uLgor IworIyBUbyBydW4sIHNldCAnb2xkaW5zdGFsbCcgRU5WIHZhcmlhYmxlIHRvIHBvaW50IHRv IGEgcHJlLXYxOQorIyBpbnN0YWxsYXRpb24uIElmIGl0J3Mgbm90IHNldCwgb3IgaWYgaXQg cG9pbnRzIHRvIGEgdjE5IG9yIGFib3ZlCisjIGluc3RhbGxhdGlvbiwgdGhpcyBzdGlsbCBw ZXJmb3JtcyBhIHZlcnkgYmFzaWMgdGVzdCwgdXBncmFkaW5nIGEKKyMgY2x1c3RlciB3aXRo IHNvbWUgbXVsdGl4YWN0cy4gSXQncyBub3QgdmVyeSBpbnRlcmVzdGluZywgaG93ZXZlciwK KyMgYmVjYXVzZSB0aGVyZSdzIG5vIGNvbnZlcnNpb24gaW52b2x2ZWQgaW4gdGhhdCBjYXNl LgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2Ug TWF0aDo6QmlnSW50OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBUZW1wIGRpciBm b3IgYSBkdW1wcy4KK215ICR0ZW1wZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRl bXBkaXI7CisKKyMgQSB3b3JrbG9hZCB0aGF0IGNvbnN1bWVzIG11bHRpeGlkcy4gVGhlIHB1 cnBvc2Ugb2YgdGhpcyBpcyB0bworIyBnZW5lcmF0ZSBzb21lIG11bHRpeGlkcyBpbiB0aGUg b2xkIGNsdXN0ZXIsIHNvIHRoYXQgd2UgY2FuIHRlc3QKKyMgdXBncmFkaW5nIHRoZW0uIFRo ZSB3b3JrbG9hZCBpcyBhIG1peCBvZiBLRVkgU0hBUkUgbG9ja2luZyBxdWVyaWVzCisjIGFu ZCBVUERBVEVzLCBhbmQgY29tbWl0cyBhbmQgYWJvcnRzLiBJdCBjb25zdW1lcyBhcm91bmQg MzAwMAorIyBtdWx0aXhpZHMgd2l0aCAzMDAwMCBtZW1iZXJzLiBUaGF0J3MgZW5vdWdoIHRv IHNwYW4gbW9yZSB0aGFuIG9uZQorIyBtdWx0aXhpZHMgJ29mZnNldHMnIHBhZ2UsIGFuZCBt b3JlIHRoYW4gb25lICdtZW1iZXJzJyBzZWdtZW50LgorIworIyBUaGUgd29ya2xvYWQgbGVh dmVzIGJlaGluZCBhIHRhYmxlIGNhbGxlZCAnbXhvZmZ0ZXN0JyBjb250YWluaW5nIGEKKyMg c21hbGwgbnVtYmVyIG9mIHJvd3MgcmVmZXJlbmNpbmcgc29tZSBvZiB0aGUgZ2VuZXJhdGVk IG11bHRpeGlkcy4KKyMKKyMgQmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2Vu ZXJhdGUgdGVzdCBkYXRhIG9uIHRoZSBvbGQKKyMgaW5zdGFsbGF0aW9uLCBpdCBuZWVkcyB0 byB3b3JrIHdpdGggb2xkZXIgUG9zdGdyZVNRTCBzZXJ2ZXIKKyMgdmVyc2lvbnMuCisjCisj IFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2x1c3RlciB0byBjb25uZWN0IHRvLCB0aGUg c2Vjb25kIGFyZ3VtZW50CisjIGlzIGEgY2x1c3RlciB1c2luZyB0aGUgbmV3IHZlcnNpb24u IFdlIG5lZWQgdGhlICdwc3FsJyBiaW5hcnkgZnJvbQorIyB0aGUgbmV3IHZlcnNpb24sIHRo ZSBuZXcgY2x1c3RlciBpcyBvdGhlcndpc2UgdW51c2VkLiAoV2UgbmVlZCB0bworIyB1c2Ug dGhlIG5ldyAncHNxbCcgYmVjYXVzZSBzb21lIG9mIHRoZSBtb3JlIGFkdmFuY2VkIGJhY2tn cm91bmQgcHNxbAorIyBwZXJsIG1vZHVsZSBmZWF0dXJlcyBkZXBlbmQgb24gYSBmYWlybHkg cmVjZW50IHBzcWwgdmVyc2lvbi4pCitzdWIgbXhhY3Rfd29ya2xvYWQKK3sKKwlteSAkbm9k ZSA9IHNoaWZ0OyAgICAgICAjIENsdXN0ZXIgdG8gY29ubmVjdCB0bworCW15ICRiaW5ub2Rl ID0gc2hpZnQ7ICAgICMgVXNlIHRoZSBwc3FsIGJpbmFyeSBmcm9tIHRoaXMgY2x1c3Rlcgor CisJbXkgJGNvbm5zdHIgPSAkbm9kZS0+Y29ubnN0cigncG9zdGdyZXMnKTsKKworCSRub2Rl LT5zdGFydDsKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworCQlDUkVBVEUg VEFCTEUgbXhvZmZ0ZXN0IChpZCBJTlQgUFJJTUFSWSBLRVksIG5fdXBkYXRlZCBJTlQpCisJ CSAgV0lUSCAoQVVUT1ZBQ1VVTV9FTkFCTEVEPUZBTFNFKTsKKwkJSU5TRVJUIElOVE8gbXhv ZmZ0ZXN0IFNFTEVDVCBHLCAwIEZST00gR0VORVJBVEVfU0VSSUVTKDEsIDUwKSBHOworCV0p OworCisJbXkgJG5jbGllbnRzID0gMjA7CisJbXkgJHVwZGF0ZV9ldmVyeSA9IDEzOworCW15 ICRhYm9ydF9ldmVyeSA9IDExOworCW15IEBjb25uZWN0aW9ucyA9ICgpOworCisJIyBPcGVu IG11bHRpcGxlIGNvbm5lY3Rpb25zIHRvIHRoZSBkYXRhYmFzZS4gU3RhcnQgYSB0cmFuc2Fj dGlvbgorCSMgaW4gZWFjaCBjb25uZWN0aW9uLgorCWZvciAoMCAuLiAkbmNsaWVudHMpCisJ eworCQkjIFVzZSB0aGUgcHNxbCBiaW5hcnkgZnJvbSB0aGUgbmV3IGluc3RhbGxhdGlvbi4g VGhlCisJCSMgQmFja2dyb3VuZFBzcWwgZnVuY3Rpb25hbGl0eSBkb2Vzbid0IHdvcmsgd2l0 aCBvbGRlciBwc3FsCisJCSMgdmVyc2lvbnMuCisJCW15ICRjb25uID0gJGJpbm5vZGUtPmJh Y2tncm91bmRfcHNxbCgnJywKKwkJCWNvbm5zdHIgPT4gJG5vZGUtPmNvbm5zdHIoJ3Bvc3Rn cmVzJykpOworCQkkY29ubi0+cXVlcnlfc2FmZSgiU0VUIGVuYWJsZV9zZXFzY2FuPW9mZiIp OworCQkkY29ubi0+cXVlcnlfc2FmZSgiQkVHSU4iKTsKKworCQlwdXNoKEBjb25uZWN0aW9u cywgJGNvbm4pOworCX0KKworCSMgUnVuIHF1ZXJpZXMgdXNpbmcgY3ljbGluZyB0aHJvdWdo IHRoZSBjb25uZWN0aW9ucyBpbiBhCisJIyByb3VuZC1yb2JpbiBmYXNoaW9uLiBXZSBrZWVw IGEgdHJhbnNhY3Rpb24gb3BlbiBpbiBlYWNoCisJIyBjb25uZWN0aW9uIGF0IGFsbCB0aW1l cywgYW5kIGxvY2svdXBkYXRlIHRoZSByb3dzLiBXaXRoIDEwCisJIyBjb25uZWN0aW9ucywg ZWFjaCBTRUxFQ1QgRk9SIEtFWSBTSEFSRSBxdWVyeSBnZW5lcmF0ZXMgYSBuZXcKKwkjIG11 bHRpeGlkLCBjb250YWluaW5nIHRoZSAxMCBYSURzIG9mIGFsbCB0aGUgdHJhbnNhY3Rpb25z IHJ1bm5pbmcKKwkjIGF0IHRoZSB0aW1lLgorCWZvciAobXkgJGkgPSAwOyAkaSA8IDMwMDA7 ICRpKyspCisJeworCQlteSAkY29ubiA9ICRjb25uZWN0aW9uc1sgJGkgJSAkbmNsaWVudHMg XTsKKworCQlteSAkc3FsOworCQlpZiAoJGkgJSAkYWJvcnRfZXZlcnkgPT0gMCkKKwkJewor CQkJJHNxbCA9ICJBQk9SVDsgIjsKKwkJfQorCQllbHNlCisJCXsKKwkJCSRzcWwgPSAiQ09N TUlUOyAiOworCQl9CisJCSRzcWwgLj0gIkJFR0lOOyAiOworCisJCWlmICgkaSAlICR1cGRh dGVfZXZlcnkgPT0gMCkKKwkJeworCQkJJHNxbCAuPSBxcVsKKwkJCSAgVVBEQVRFIG14b2Zm dGVzdCBTRVQgbl91cGRhdGVkID0gbl91cGRhdGVkICsgMSBXSEVSRSBpZCA9ICR7aX0gJSA1 MDsKKwkJCV07CisJCX0KKwkJZWxzZQorCQl7CisJCQlteSAkdGhyZXNob2xkID0gaW50KCRp IC8gMzAwMCAqIDUwKTsKKwkJCSRzcWwgLj0gcXFbCisJCQkgIHNlbGVjdCBjb3VudCgqKSBm cm9tICgKKwkJCQlTRUxFQ1QgKiBGUk9NIG14b2ZmdGVzdCBXSEVSRSBpZCA+PSAkdGhyZXNo b2xkIEZPUiBLRVkgU0hBUkUKKwkJCSAgKSBhcyB4CisJCQldOworCQl9CisJCSRjb25uLT5x dWVyeV9zYWZlKCRzcWwpOworCX0KKworCWZvciBteSAkY29ubiAoQGNvbm5lY3Rpb25zKQor CXsKKwkJJGNvbm4tPnF1aXQoKTsKKwl9CisKKwkkbm9kZS0+c3RvcDsKKwlyZXR1cm47Cit9 CisKKyMgUmVhZCBOZXh0TXVsdGlPZmZzZXQgZnJvbSB0aGUgY29udHJvbCBmaWxlCisjCisj IE5vdGU6IFRoaXMgaXMgdXNlZCBvbiBib3RoIHRoZSBvbGQgYW5kIHRoZSBuZXcgaW5zdGFs bGF0aW9uLCBzbyB0aGUKKyMgY29tbWFuZCBhcmd1bWVudHMgYW5kIHRoZSBvdXRwdXQgcGFy c2luZyB1c2VkIGhlcmUgbXVzdCB3b3JrIHdpdGgKKyMgYWxsIFBvc3RncmVTUUwgdmVyc2lv bnMgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0Lgorc3ViIHJlYWRfbmV4dF9teG9mZgoreworCW15 ICRub2RlID0gc2hpZnQ7CisKKwlteSAkcGdfY29udHJvbGRhdGFfcGF0aCA9ICRub2RlLT5p bnN0YWxsZWRfY29tbWFuZCgncGdfY29udHJvbGRhdGEnKTsKKwlteSAoJHN0ZG91dCwgJHN0 ZGVycikgPQorCSAgcnVuX2NvbW1hbmQoWyAkcGdfY29udHJvbGRhdGFfcGF0aCwgJG5vZGUt PmRhdGFfZGlyIF0pOworCSRzdGRvdXQgPX4gL15MYXRlc3QgY2hlY2twb2ludCdzIE5leHRN dWx0aU9mZnNldDpccyooLiopJC9tCisJICBvciBkaWUgImNvdWxkIG5vdCByZWFkIE5leHRN dWx0aU9mZnNldCBmcm9tIHBnX2NvbnRyb2xkYXRhIjsKKwlyZXR1cm4gJDE7Cit9CisKKyMg UmVzZXQgYSBjbHVzdGVyJ3Mgb2xkZXN0IG11bHRpeGFjdC1vZmZzZXQgdG8gZ2l2ZW4gb2Zm c2V0LgorIworIyBOb3RlOiBUaGlzIGlzIHVzZWQgb24gYm90aCB0aGUgb2xkIGFuZCB0aGUg bmV3IGluc3RhbGxhdGlvbiwgc28gdGhlCisjIGNvbW1hbmQgYXJndW1lbnRzIGFuZCB0aGUg b3V0cHV0IHBhcnNpbmcgdXNlZCBoZXJlIG11c3Qgd29yayB3aXRoCisjIGFsbCBQb3N0Z3Jl U1FMIHZlcnNpb25zIHN1cHBvcnRlZCBieSB0aGUgdGVzdC4KK3N1YiByZXNldF9teG9mZl9w cmVfdjE5Cit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkb2Zmc2V0ID0gc2hpZnQ7CisK KwlteSAkcGdfcmVzZXR3YWxfcGF0aCA9ICRub2RlLT5pbnN0YWxsZWRfY29tbWFuZCgncGdf cmVzZXR3YWwnKTsKKwkjIEdldCBibG9jayBzaXplCisJbXkgKCRvdXQsICRlcnIpID0KKwkg IHJ1bl9jb21tYW5kKFsgJHBnX3Jlc2V0d2FsX3BhdGgsICctLWRyeS1ydW4nLCAkbm9kZS0+ ZGF0YV9kaXIgXSk7CisJJG91dCA9fiAvXkRhdGFiYXNlIGJsb2NrIHNpemU6ICooXGQrKSQv bSBvciBkaWU7CisJbXkgJGJsY2tzeiA9ICQxOworCSMgU0xSVV9QQUdFU19QRVJfU0VHTUVO VCBpcyBhbHdheXMgMzIgb24gcHJlLTE5IHZlcnNpb24KKwlteSAkc2xydV9wYWdlc19wZXJf c2VnbWVudCA9IDMyOworCisJIyBWZXJpZnkgdGhhdCBubyBtdWx0aXhpZHMgYXJlIGN1cnJl bnRseSBpbiB1c2UuIFJlc2V0dGluZyB3b3VsZAorCSMgZGVzdHJveSB0aGVtLiAoQSBmcmVz aGx5IGluaXRpYWxpemVkIGNsdXN0ZXIgaGFzIG5vIG11bHRpeGlkcy4pCisJJG91dCA9fiAv XkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpWGFjdElkOiAqKFxkKykkL20gb3IgZGll OworCW15ICRuZXh0X214aWQgPSAkMTsKKwkkb3V0ID1+IC9eTGF0ZXN0IGNoZWNrcG9pbnQn cyBvbGRlc3RNdWx0aVhpZDogKihcZCspJC9tIG9yIGRpZTsKKwlteSAkb2xkZXN0X214aWQg PSAkMTsKKwlkaWUgImNsdXN0ZXIgaGFzIHNvbWUgbXVsdGl4aWRzIGluIHVzZSIgdW5sZXNz ICRuZXh0X214aWQgPT0gJG9sZGVzdF9teGlkOworCisJIyBSZXNldCB0byBuZXcgb2Zmc2V0 IHVzaW5nIHBnX3Jlc2V0d2FsCisJbXkgQGNtZCA9ICgKKwkJJHBnX3Jlc2V0d2FsX3BhdGgs CisJCSctLXBnZGF0YScgPT4gJG5vZGUtPmRhdGFfZGlyLAorCQknLS1tdWx0aXhhY3Qtb2Zm c2V0JyA9PiAkb2Zmc2V0KTsKKwljb21tYW5kX29rKFxAY21kLCAnc2V0IG9sZGVzdCBtdWx0 aXhhY3Qtb2Zmc2V0Jyk7CisKKwkjIHBnX3Jlc2V0d2FsIGp1c3QgdXBkYXRlcyB0aGUgY29u dHJvbCBmaWxlLiBUaGUgY2x1c3RlciB3aWxsCisJIyByZWZ1c2UgdG8gc3RhcnQgdXAsIGlm IHRoZSBTTFJVIHNlZ21lbnQgY29ycmVzcG9uZGluZyB0byB0aGUKKwkjIG9mZnNldCBkb2Vz IG5vdCBleGlzdC4gQ3JlYXRlIGEgZHVtbXkgc2VnbWVudCB0aGF0IGNvdmVycyB0aGUKKwkj IGdpdmVuIG9mZnNldCwgZmlsbGVkIHdpdGggemVyb3MuIEJ1dCBmaXJzdCByZW1vdmUgYW55 IG9sZAorCSMgc2VnbWVudHMuCisJdW5saW5rIGdsb2IgJG5vZGUtPmRhdGFfZGlyIC4gIi9w Z19tdWx0aXhhY3QvbWVtYmVycy8qIjsKKworCW15ICRtdWx0ID0gMzIgKiBpbnQoJGJsY2tz eiAvIDIwKSAqIDQ7CisJbXkgJHNlZ25hbWUgPSBzcHJpbnRmICIlMDRYIiwgJG9mZnNldCAv ICRtdWx0OworCisJbXkgJHBhdGggPSAkbm9kZS0+ZGF0YV9kaXIgLiAiL3BnX211bHRpeGFj dC9tZW1iZXJzLyIgLiAkc2VnbmFtZTsKKworCW15ICRudWxsX2Jsb2NrID0gIlx4MDAiIHgg JGJsY2tzejsKKwlvcGVuKG15ICRkaCwgJz4nLCAkcGF0aCkKKwkgIHx8IGRpZSAiY291bGQg bm90IG9wZW4gJHBhdGggZm9yIHdyaXRpbmcgJCEiOworCWZvciAoMCAuLiAkc2xydV9wYWdl c19wZXJfc2VnbWVudCkKKwl7CisJCXByaW50ICRkaCAkbnVsbF9ibG9jazsKKwl9CisJY2xv c2UoJGRoKTsKK30KKworIyBEdW1wIGNvbnRlbnRzIG9mIHRoZSAnbXhvZmZ0ZXN0JyB0YWJs ZSwgY3JlYXRlZCBieSBteGFjdF93b3JrbG9hZAorc3ViIGdldF9kdW1wX2Zvcl9jb21wYXJp c29uCit7CisJbXkgKCRub2RlLCAkZmlsZV9wcmVmaXgpID0gQF87CisKKwlteSAkY29udGVu dHMgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY3RpZCwgeG1p biwgeG1heCwgKiBGUk9NIG14b2ZmdGVzdCIpOworCisJbXkgJGR1bXBmaWxlID0gJHRlbXBk aXIgLiAnLycgLiAkZmlsZV9wcmVmaXggLiAnLnNxbCc7CisJb3BlbihteSAkZGgsICc+Jywg JGR1bXBmaWxlKQorCSAgfHwgZGllICJjb3VsZCBub3Qgb3BlbiAkZHVtcGZpbGUgZm9yIHdy aXRpbmcgJCEiOworCXByaW50ICRkaCAkY29udGVudHM7CisJY2xvc2UoJGRoKTsKKworCXJl dHVybiAkZHVtcGZpbGU7Cit9CisKKyMgTWFpbiB0ZXN0IHdvcmtob3JzZSByb3V0aW5lLgor IyBEdW1wIGRhdGEgb24gb2xkIHZlcnNpb24sIHJ1biBwZ191cGdyYWRlLCBjb21wYXJlIGRh dGEgYWZ0ZXIgdXBncmFkZS4KK3N1YiB1cGdyYWRlX2FuZF9jb21wYXJlCit7CisJbXkgJHRh ZyA9IHNoaWZ0OworCW15ICRvbGRub2RlID0gc2hpZnQ7CisJbXkgJG5ld25vZGUgPSBzaGlm dDsKKworCWNvbW1hbmRfb2soCisJCVsKKwkJCSdwZ191cGdyYWRlJywgJy0tbm8tc3luYycs CisJCQknLS1vbGQtZGF0YWRpcicgPT4gJG9sZG5vZGUtPmRhdGFfZGlyLAorCQkJJy0tbmV3 LWRhdGFkaXInID0+ICRuZXdub2RlLT5kYXRhX2RpciwKKwkJCSctLW9sZC1iaW5kaXInID0+ ICRvbGRub2RlLT5jb25maWdfZGF0YSgnLS1iaW5kaXInKSwKKwkJCSctLW5ldy1iaW5kaXIn ID0+ICRuZXdub2RlLT5jb25maWdfZGF0YSgnLS1iaW5kaXInKSwKKwkJCSctLXNvY2tldGRp cicgPT4gJG5ld25vZGUtPmhvc3QsCisJCQknLS1vbGQtcG9ydCcgPT4gJG9sZG5vZGUtPnBv cnQsCisJCQknLS1uZXctcG9ydCcgPT4gJG5ld25vZGUtPnBvcnQsCisJCV0sCisJCSdydW4g b2YgcGdfdXBncmFkZSBmb3IgbmV3IGluc3RhbmNlJyk7CisKKwkjIE5vdGU6IHdlIGRvIHRo aXMgKmFmdGVyKiBydW5uaW5nIHBnX3VwZ3JhZGUsIHRvIGVuc3VyZSB0aGF0IHdlCisJIyBk b24ndCBzZXQgYWxsIHRoZSBoaW50IGJpdHMgYmVmb3JlIHVwZ3JhZGUgYnkgZG9pbmcgdGhl IFNFTEVDVAorCSMgb24gdGhlIHRhYmxlLgorCSRvbGRub2RlLT5zdGFydDsKKwlteSAkb2xk X2R1bXAgPSBnZXRfZHVtcF9mb3JfY29tcGFyaXNvbigkb2xkbm9kZSwgIm9sZG5vZGVfJHt0 YWd9X2R1bXAiKTsKKwkkb2xkbm9kZS0+c3RvcDsKKworCSRuZXdub2RlLT5zdGFydDsKKwlt eSAkbmV3X2R1bXAgPSBnZXRfZHVtcF9mb3JfY29tcGFyaXNvbigkbmV3bm9kZSwgIm5ld25v ZGVfJHt0YWd9X2R1bXAiKTsKKwkkbmV3bm9kZS0+c3RvcDsKKworCWNvbXBhcmVfZmlsZXMo JG9sZF9kdW1wLCAkbmV3X2R1bXAsCisJCSdkdW1wIG91dHB1dHMgZnJvbSBvcmlnaW5hbCBh bmQgcmVzdG9yZWQgcmVncmVzc2lvbiBkYXRhYmFzZXMgbWF0Y2gnKTsKK30KKworbXkgJG9s ZF92ZXJzaW9uOworCisjIEJhc2ljIHNjZW5hcmlvOiBDcmVhdGUgYSBjbHVzdGVyIHVzaW5n IG9sZCBpbnN0YWxsYXRpb24sIHJ1bgorIyBtdWx0aXhpZC1jcmVhdGluZyB3b3JrbG9hZCBv biBpdCwgdGhlbiB1cGdyYWRlLgorIworIyBUaGlzIHdvcmtzIGV2ZW4gZXZlbiBpZiB0aGUg b2xkIGFuZCBuZXcgdmVyc2lvbiBpcyB0aGUgc2FtZSwKKyMgYWx0aG91Z2ggaXQncyBub3Qg dmVyeSBpbnRlcmVzdGluZyBhcyB0aGUgY29udmVyc2lvbiByb3V0aW5lcyBvbmx5CisjIHJ1 biB3aGVuIHVwZ3JhZGluZyBmcm9tIGEgcHJlLXYxOSBjbHVzdGVyLgoreworCW15ICR0YWcg PSAnYmFzaWMnOworCW15ICRvbGQgPQorCSAgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCIke3RhZ31fb2xkbm9kZSIsCisJCWluc3RhbGxfcGF0aCA9PiAkRU5We29sZGluc3Rh bGx9KTsKKwlteSAkbmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCIke3Rh Z31fbmV3bm9kZSIpOworCisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCisJJG9s ZF92ZXJzaW9uID0gJG9sZC0+cGdfdmVyc2lvbjsKKwlub3RlICJvbGQgaW5zdGFsbGF0aW9u IGlzIHZlcnNpb24gJG9sZF92ZXJzaW9uXG4iOworCisJIyBSdW4gdGhlIHdvcmtsb2FkCisJ bXkgJHN0YXJ0X214b2ZmID0gcmVhZF9uZXh0X214b2ZmKCRvbGQpOworCW14YWN0X3dvcmts b2FkKCRvbGQsICRuZXcpOworCW15ICRmaW5pc2hfbXhvZmYgPSByZWFkX25leHRfbXhvZmYo JG9sZCk7CisKKwkkbmV3LT5pbml0OworCXVwZ3JhZGVfYW5kX2NvbXBhcmUoJHRhZywgJG9s ZCwgJG5ldyk7CisKKwlteSAkbmV3X25leHRfbXhvZmYgPSByZWFkX25leHRfbXhvZmYoJG5l dyk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iCisJICAuICIgb2xkbm9kZSBteG9m ZiBmcm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxuIgorCSAgLiAiIG5l d25vZGUgbXhvZmYgJHtuZXdfbmV4dF9teG9mZn1cbiI7Cit9CisKKyMgV3JhcGFyb3VuZCBz Y2VuYXJpbzogVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgYmFzaWMgc2NlbmFyaW8sIGJ1dCB0 aGUKKyMgb2xkIGNsdXN0ZXIgZ29lcyB0aHJvdWdoIG14b2Zmc2V0IHdyYXBhcm91bmQuCisj CisjIFRoaXMgcmVxdWlyZXMgdGhlIG9sZCBpbnN0YWxsYXRpb24gdG8gYmUgdmVyc2lvbiAx OSBvZiBvbGRlciwKKyMgYmVjYXVzZSB0aGUgaGFja3Mgd2UgdXNlIHRvIHJlc2V0IHRoZSBv bGQgY2x1c3RlciB0byBhIHN0YXRlIGp1c3QKKyMgYmVmb3JlIHRoZSB3cmFwYXJvdW5kIHJl bHkgb24gdGhlIHByZS12MTkgZmlsZSBmb3JtYXQuIEluIHZlcnNpb24KKyMgMTksIG9mZnNl dHMgbm8gbG9uZ2VyIHdyYXAgYXJvdW5kIGFueXdheS4KK1NLSVA6Cit7CisJc2tpcAorCSAg InNraXBwaW5nIG14b2Zmc2V0IGNvbnZlcnNpb24gdGVzdHMgYmVjYXVzZSB1cGdyYWRpbmcg ZnJvbSB0aGUgb2xkIHZlcnNpb24gZG9lcyBub3QgcmVxdWlyZSBjb252ZXJzaW9uIgorCSAg aWYgKCRvbGRfdmVyc2lvbiA+PSAnMTlkZXZlbCcpOworCisJbXkgJHRhZyA9ICd3cmFwYXJv dW5kJzsKKwlteSAkb2xkID0KKwkgIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygi JHt0YWd9X29sZG5vZGUiLAorCQlpbnN0YWxsX3BhdGggPT4gJEVOVntvbGRpbnN0YWxsfSk7 CisJbXkgJG5ldyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygiJHt0YWd9X25l d25vZGUiKTsKKworCSRvbGQtPmluaXQoZXh0cmEgPT4gWyctayddKTsKKworCSMgUmVzZXQg dGhlIE5leHRNdWx0aU9mZnNldCB2YWx1ZSBpbiB0aGUgIG9sZCBjbHVzdGVyIHRvIGp1c3Qg YmVmb3JlIDMyLWJpdCB3cmFwYXJvdW5kLgorCXJlc2V0X214b2ZmX3ByZV92MTkoJG9sZCwg MHhGRkZGRUM3Nyk7CisKKwkjIFJ1biB0aGUgd29ya2xvYWQuIFRoaXMgY3Jvc3NlcyB0aGUg d3JhcGFyb3VuZC4KKwlteSAkc3RhcnRfbXhvZmYgPSByZWFkX25leHRfbXhvZmYoJG9sZCk7 CisJbXhhY3Rfd29ya2xvYWQoJG9sZCwgJG5ldyk7CisJbXkgJGZpbmlzaF9teG9mZiA9IHJl YWRfbmV4dF9teG9mZigkb2xkKTsKKworCSMgVmVyaWZ5IHRoYXQgd3JhcGFyb3VuZCBoYXBw ZW5lZC4KKwljbXBfb2soJGZpbmlzaF9teG9mZiwgJzwnLCAkc3RhcnRfbXhvZmYsCisJCSJt eG9mZiB3cmFwcGVkIGFyb3VuZCBpbiBvbGQgY2x1c3RlciIpOworCisJJG5ldy0+aW5pdDsK Kwl1cGdyYWRlX2FuZF9jb21wYXJlKCR0YWcsICRvbGQsICRuZXcpOworCisJbXkgJG5ld19u ZXh0X214b2ZmID0gcmVhZF9uZXh0X214b2ZmKCRuZXcpOworCisJbm90ZSAiPj4+IGNhc2Ug IyR7dGFnfVxuIgorCSAgLiAiIG9sZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0X214b2ZmfSB0 byAke2ZpbmlzaF9teG9mZn1cbiIKKwkgIC4gIiBuZXdub2RlIG14b2ZmICR7bmV3X25leHRf bXhvZmZ9XG4iOworfQorCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0gYi9zcmMvdGVzdC9wZXJsL1Bvc3Rn cmVTUUwvVGVzdC9DbHVzdGVyLnBtCmluZGV4IDM1NDEzZjE0MDE5Li4zNGYwN2Q1MmNkOCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbQor KysgYi9zcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtCkBAIC0xNzkz LDEzICsxNzkzLDIwIEBAIHN1YiBfZ2V0X2VudgogCXJldHVybiAoJWluc3RfZW52KTsKIH0K IAotIyBQcml2YXRlIHJvdXRpbmUgdG8gZ2V0IGFuIGluc3RhbGxhdGlvbiBwYXRoIHF1YWxp ZmllZCBjb21tYW5kLgotIwotIyBJUEM6OlJ1biBtYWludGFpbnMgYSBjYWNoZSwgJWNtZF9j YWNoZSwgbWFwcGluZyBjb21tYW5kcyB0byBwYXRocy4gIFRlc3RzCi0jIHdoaWNoIHVzZSBu b2RlcyBzcGFubmluZyBtb3JlIHRoYW4gb25lIHBvc3RncmVzIGluc3RhbGxhdGlvbiBwYXRo IG5lZWQgdG8KLSMgYXZvaWQgY29uZnVzaW5nIHdoaWNoIGluc3RhbGxhdGlvbidzIGJpbmFy aWVzIGdldCBydW4uICBTZXR0aW5nICRFTlZ7UEFUSH0gaXMKLSMgaW5zdWZmaWNpZW50LCBh cyBJUEM6OlJ1biBkb2VzIG5vdCBjaGVjayB0byBzZWUgaWYgdGhlIHBhdGggaGFzIGNoYW5n ZWQgc2luY2UKLSMgY2FjaGluZyBhIGNvbW1hbmQuCis9cG9kCisKKz1pdGVtICRub2RlLT5p bnN0YWxsZWRfY29tbWFuZChjbWQpCisKK0dldCBhbiBpbnN0YWxsYXRpb24gcGF0aCBxdWFs aWZpZWQgY29tbWFuZC4KKworSVBDOjpSdW4gbWFpbnRhaW5zIGEgY2FjaGUsICVjbWRfY2Fj aGUsIG1hcHBpbmcgY29tbWFuZHMgdG8gcGF0aHMuICBUZXN0cword2hpY2ggdXNlIG5vZGVz IHNwYW5uaW5nIG1vcmUgdGhhbiBvbmUgcG9zdGdyZXMgaW5zdGFsbGF0aW9uIHBhdGggbmVl ZCB0bworYXZvaWQgY29uZnVzaW5nIHdoaWNoIGluc3RhbGxhdGlvbidzIGJpbmFyaWVzIGdl dCBydW4uICBTZXR0aW5nICRFTlZ7UEFUSH0gaXMKK2luc3VmZmljaWVudCwgYXMgSVBDOjpS dW4gZG9lcyBub3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBwYXRoIGhhcyBjaGFuZ2VkIHNpbmNl CitjYWNoaW5nIGEgY29tbWFuZC4KKworPWN1dAorCiBzdWIgaW5zdGFsbGVkX2NvbW1hbmQK IHsKIAlteSAoJHNlbGYsICRjbWQpID0gQF87CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CmluZGV4IDIzYmNlNzJhZTY0Li5mOWRkZDA2ZWMxZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTE3MjUsNiArMTcyNSw3IEBAIE11bHRpWGFjdE1lbWJlcgogTXVsdGlY YWN0T2Zmc2V0CiBNdWx0aVhhY3RTdGF0ZURhdGEKIE11bHRpWGFjdFN0YXR1cworTXVsdGlY YWN0V3JpdGVyCiBNdWx0aXJhbmdlSU9EYXRhCiBNdWx0aXJhbmdlUGFyc2VTdGF0ZQogTXVs dGlyYW5nZVR5cGUKQEAgLTE4MDgsNiArMTgwOSw3IEBAIE9mZnNldFZhck5vZGVzX2NvbnRl eHQKIE9pZAogT2lkT3B0aW9ucwogT2tleXNTdGF0ZQorT2xkTXVsdGlYYWN0UmVhZGVyCiBP bGRUb05ld01hcHBpbmcKIE9sZFRvTmV3TWFwcGluZ0RhdGEKIE9uQ29tbWl0QWN0aW9uCkBA IC0yODA0LDYgKzI4MDYsNyBAQCBTbHJ1Q3RsRGF0YQogU2xydUVycm9yQ2F1c2UKIFNscnVQ YWdlU3RhdHVzCiBTbHJ1U2NhbkNhbGxiYWNrCitTbHJ1U2VnU3RhdGUKIFNscnVTaGFyZWQK IFNscnVTaGFyZWREYXRhCiBTbHJ1V3JpdGVBbGwKLS0gCjIuNDcuMwoK --------------MsYmZqOqmhDH81OSlLXN4Y7x Content-Type: text/x-patch; charset=UTF-8; name="v26-0005-Remove-oldestOffset-oldestOffsetKnown-from-multi.patch" Content-Disposition: attachment; filename*0="v26-0005-Remove-oldestOffset-oldestOffsetKnown-from-multi.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkYmMxYTc1OTU0MDNlMjZmYTg5ZTYxNGRhNzc1OTBmMjA4YzI2NzU1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IFRodSwgNiBOb3YgMjAyNSAxNjoyMDoxOCArMDMwMApTdWJqZWN0OiBbUEFUQ0gg djI2IDA1LzEwXSBSZW1vdmUgb2xkZXN0T2Zmc2V0L29sZGVzdE9mZnNldEtub3duIGZyb20K IG11bHRpeGFjdAoKU2luY2Ugd2UgcmV3cml0ZSBhbGwgbXVsdGl0cmFuc2FjdGlvbnMgZHVy aW5nIHBnX3VwZ3JhZGUsIHRoZSBvbGRlc3QKb2Zmc2V0IGZvciBhIG5ldyBjbHVzdGVyIHdp bGwgbm8gbG9uZ2VyIGJlIG1pc3Npbmcgb24gZGlzYy4KLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tdWx0aXhhY3QuYyB8IDEwMSArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiBzcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggICAgICAgICB8ICAgMyAtCiAyIGZp bGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgOTkgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwppbmRleCBlMDMyM2VjMTAxNC4uNzhi YTZkNzJhOTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRp eGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBA IC0xNDAsMTQgKzE0MCw2IEBAIHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdFN0YXRlRGF0YQog CU11bHRpWGFjdElkIG9sZGVzdE11bHRpWGFjdElkOwogCU9pZAkJCW9sZGVzdE11bHRpWGFj dERCOwogCi0JLyoKLQkgKiBPbGRlc3QgbXVsdGl4YWN0IG9mZnNldCB0aGF0IGlzIHBvdGVu dGlhbGx5IHJlZmVyZW5jZWQgYnkgYSBtdWx0aXhhY3QKLQkgKiByZWZlcmVuY2VkIGJ5IGEg cmVsYXRpb24uICBXZSBkb24ndCBhbHdheXMga25vdyB0aGlzIHZhbHVlLCBzbyB0aGVyZSdz Ci0JICogYSBmbGFnIGhlcmUgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3Qgd2UgY3VycmVu dGx5IGRvLgotCSAqLwotCU11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7Ci0JYm9vbAkJ b2xkZXN0T2Zmc2V0S25vd247Ci0KIAkvKiBzdXBwb3J0IGZvciBhbnRpLXdyYXBhcm91bmQg bWVhc3VyZXMgKi8KIAlNdWx0aVhhY3RJZCBtdWx0aVZhY0xpbWl0OwogCU11bHRpWGFjdElk IG11bHRpV2FybkxpbWl0OwpAQCAtMjM3MSwxMCArMjM2Myw3IEBAIFNldE9mZnNldFZhY3V1 bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKIAlNdWx0aVhhY3RJZCBvbGRlc3RNdWx0aVhhY3RJ ZDsKIAlNdWx0aVhhY3RJZCBuZXh0TVhhY3Q7CiAJTXVsdGlYYWN0T2Zmc2V0IG9sZGVzdE9m ZnNldCA9IDA7CS8qIHBsYWNhdGUgY29tcGlsZXIgKi8KLQlNdWx0aVhhY3RPZmZzZXQgcHJl dk9sZGVzdE9mZnNldDsKIAlNdWx0aVhhY3RPZmZzZXQgbmV4dE9mZnNldDsKLQlib29sCQlv bGRlc3RPZmZzZXRLbm93biA9IGZhbHNlOwotCWJvb2wJCXByZXZPbGRlc3RPZmZzZXRLbm93 bjsKIAogCS8qCiAJICogTkI6IEhhdmUgdG8gcHJldmVudCBjb25jdXJyZW50IHRydW5jYXRp b24sIHdlIG1pZ2h0IG90aGVyd2lzZSB0cnkgdG8KQEAgLTIzODcsOCArMjM3Niw2IEBAIFNl dE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKIAlvbGRlc3RNdWx0aVhhY3RJ ZCA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3RJZDsKIAluZXh0TVhhY3QgPSBN dWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0OwogCW5leHRPZmZzZXQgPSBNdWx0aVhhY3RTdGF0 ZS0+bmV4dE9mZnNldDsKLQlwcmV2T2xkZXN0T2Zmc2V0S25vd24gPSBNdWx0aVhhY3RTdGF0 ZS0+b2xkZXN0T2Zmc2V0S25vd247Ci0JcHJldk9sZGVzdE9mZnNldCA9IE11bHRpWGFjdFN0 YXRlLT5vbGRlc3RPZmZzZXQ7CiAJQXNzZXJ0KE11bHRpWGFjdFN0YXRlLT5maW5pc2hlZFN0 YXJ0dXApOwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKQEAgLTI0MDYs NTcgKzIzOTMsMjAgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQog CQkgKiBvZmZzZXQuCiAJCSAqLwogCQlvbGRlc3RPZmZzZXQgPSBuZXh0T2Zmc2V0OwotCQlv bGRlc3RPZmZzZXRLbm93biA9IHRydWU7CiAJfQotCWVsc2UKKwllbHNlIGlmICghZmluZF9t dWx0aXhhY3Rfc3RhcnQob2xkZXN0TXVsdGlYYWN0SWQsICZvbGRlc3RPZmZzZXQpKQogCXsK LQkJLyoKLQkJICogRmlndXJlIG91dCB3aGVyZSB0aGUgb2xkZXN0IGV4aXN0aW5nIG11bHRp eGFjdCdzIG9mZnNldHMgYXJlCi0JCSAqIHN0b3JlZC4gRHVlIHRvIGJ1Z3MgaW4gZWFybHkg cmVsZWFzZSBvZiBQb3N0Z3JlU1FMIDkuMy5YIGFuZCA5LjQuWCwKLQkJICogdGhlIHN1cHBv c2VkbHktZWFybGllc3QgbXVsdGl4YWN0IG1pZ2h0IG5vdCByZWFsbHkgZXhpc3QuICBXZSBh cmUKLQkJICogY2FyZWZ1bCBub3QgdG8gZmFpbCBpbiB0aGF0IGNhc2UuCi0JCSAqLwotCQlv bGRlc3RPZmZzZXRLbm93biA9Ci0JCQlmaW5kX211bHRpeGFjdF9zdGFydChvbGRlc3RNdWx0 aVhhY3RJZCwgJm9sZGVzdE9mZnNldCk7Ci0KLQkJaWYgKCFvbGRlc3RPZmZzZXRLbm93bikK LQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJvbGRlc3QgY2hlY2twb2ludGVkIE11 bHRpWGFjdCAldSBkb2VzIG5vdCBleGlzdCBvbiBkaXNrIiwKLQkJCQkJCQlvbGRlc3RNdWx0 aVhhY3RJZCkpKTsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1zZygib2xkZXN0IGNoZWNr cG9pbnRlZCBNdWx0aVhhY3QgJXUgZG9lcyBub3QgZXhpc3Qgb24gZGlzayIsCisJCQkJCQlv bGRlc3RNdWx0aVhhY3RJZCkpKTsKIAl9CiAKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdFRy dW5jYXRpb25Mb2NrKTsKIAotCS8qCi0JICogSWYgd2UgY2FuLCBjb21wdXRlIGxpbWl0cyAo YW5kIGluc3RhbGwgdGhlbSBNdWx0aVhhY3RTdGF0ZSkgdG8gcHJldmVudAotCSAqIG92ZXJy dW4gb2Ygb2xkIGRhdGEgaW4gdGhlIG1lbWJlcnMgU0xSVSBhcmVhLiBXZSBjYW4gb25seSBk byBzbyBpZiB0aGUKLQkgKiBvbGRlc3Qgb2Zmc2V0IGlzIGtub3duIHRob3VnaC4KLQkgKgot CSAqIEZJWE1FOiBJcyAhb2xkZXN0T2Zmc2V0S25vd24gcG9zc2libGUgYW55bW9yZT8gQXQg bGVhc3QgdXBkYXRlIHRoZSBjb21tZW50OgotCSAqIHdlIHdvbid0IG92ZXJydW4gbWVtYmVy cyBhbnltb3JlLgotCSAqLwotCWlmIChwcmV2T2xkZXN0T2Zmc2V0S25vd24pCi0JewotCQkv KgotCQkgKiBJZiB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSBvbGRlc3Qgb2Zmc2V0IHRoaXMgdGlt ZSwgYnV0IHdlIGhhdmUgYQotCQkgKiB2YWx1ZSBmcm9tIGEgcHJldmlvdXMgcGFzcyB0aHJv dWdoIHRoaXMgZnVuY3Rpb24sIHVzZSB0aGUgb2xkCi0JCSAqIHZhbHVlcyByYXRoZXIgdGhh biBhdXRvbWF0aWNhbGx5IGZvcmNpbmcgYW4gYXV0b3ZhY3V1bSBjeWNsZSBhZ2Fpbi4KLQkJ ICovCi0JCW9sZGVzdE9mZnNldCA9IHByZXZPbGRlc3RPZmZzZXQ7Ci0JCW9sZGVzdE9mZnNl dEtub3duID0gdHJ1ZTsKLQl9Ci0KLQkvKiBJbnN0YWxsIHRoZSBjb21wdXRlZCB2YWx1ZXMg Ki8KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0J TXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldCA9IG9sZGVzdE9mZnNldDsKLQlNdWx0aVhh Y3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gPSBvbGRlc3RPZmZzZXRLbm93bjsKLQlMV0xv Y2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwotCiAJLyoKIAkgKiBEbyB3ZSBuZWVkIGF1 dG92YWN1dW0/CUlmIHdlJ3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVzLgogCSAqLwotCXJldHVy biAhb2xkZXN0T2Zmc2V0S25vd24gfHwKLQkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQg PiBNVUxUSVhBQ1RfTUVNQkVSX0FVVE9WQUNfVEhSRVNIT0xEKTsKKwlyZXR1cm4gbmV4dE9m ZnNldCAtIG9sZGVzdE9mZnNldCA+IE1VTFRJWEFDVF9NRU1CRVJfQVVUT1ZBQ19USFJFU0hP TEQ7CiB9CiAKIC8qCkBAIC0yNTAzLDQ3ICsyNDUzLDYgQEAgZmluZF9tdWx0aXhhY3Rfc3Rh cnQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0KQogCXJldHVy biB0cnVlOwogfQogCi0vKgotICogR2V0TXVsdGlYYWN0SW5mbwotICoKLSAqIFJldHVybnMg aW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgTXVsdGlYYWN0IHN0YXRlLCBhcyBvZjoK LSAqIG11bHRpeGFjdHM6IE51bWJlciBvZiBNdWx0aVhhY3RzIChuZXh0TXVsdGlYYWN0SWQg LSBvbGRlc3RNdWx0aVhhY3RJZCkKLSAqIG1lbWJlcnM6IE51bWJlciBvZiBtZW1iZXIgZW50 cmllcyAobmV4dE9mZnNldCAtIG9sZGVzdE9mZnNldCkKLSAqIG9sZGVzdE11bHRpWGFjdElk OiBPbGRlc3QgTXVsdGlYYWN0IElEIHN0aWxsIGluIHVzZQotICogb2xkZXN0T2Zmc2V0OiBP bGRlc3Qgb2Zmc2V0IHN0aWxsIGluIHVzZQotICoKLSAqIFJldHVybnMgZmFsc2UgaWYgdW5h YmxlIHRvIGRldGVybWluZSwgdGhlIG9sZGVzdCBvZmZzZXQgYmVpbmcgdW5rbm93bi4KLSAq LwotYm9vbAotR2V0TXVsdGlYYWN0SW5mbyh1aW50MzIgKm11bHRpeGFjdHMsIE11bHRpWGFj dE9mZnNldCAqbWVtYmVycywKLQkJCQkgTXVsdGlYYWN0SWQgKm9sZGVzdE11bHRpWGFjdElk LCBNdWx0aVhhY3RPZmZzZXQgKm9sZGVzdE9mZnNldCkKLXsKLQlNdWx0aVhhY3RPZmZzZXQg bmV4dE9mZnNldDsKLQlNdWx0aVhhY3RJZCBuZXh0TXVsdGlYYWN0SWQ7Ci0JYm9vbAkJb2xk ZXN0T2Zmc2V0S25vd247Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExX X1NIQVJFRCk7Ci0JbmV4dE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0Owot CSpvbGRlc3RNdWx0aVhhY3RJZCA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3RJ ZDsKLQluZXh0TXVsdGlYYWN0SWQgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0OwotCSpv bGRlc3RPZmZzZXQgPSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0OwotCW9sZGVzdE9m ZnNldEtub3duID0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duOwotCUxXTG9j a1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7Ci0KLQlpZiAoIW9sZGVzdE9mZnNldEtub3du KQotCXsKLQkJKm1lbWJlcnMgPSAwOwotCQkqbXVsdGl4YWN0cyA9IDA7Ci0JCSpvbGRlc3RN dWx0aVhhY3RJZCA9IEludmFsaWRNdWx0aVhhY3RJZDsKLQkJKm9sZGVzdE9mZnNldCA9IDA7 Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkqbWVtYmVycyA9IG5leHRPZmZzZXQgLSAqb2xk ZXN0T2Zmc2V0OwotCSptdWx0aXhhY3RzID0gbmV4dE11bHRpWGFjdElkIC0gKm9sZGVzdE11 bHRpWGFjdElkOwotCXJldHVybiB0cnVlOwotfQotCiB0eXBlZGVmIHN0cnVjdCBteHRydW5j aW5mbwogewogCWludDY0CQllYXJsaWVzdEV4aXN0aW5nUGFnZTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0 aXhhY3QuaAppbmRleCA3ZDk4ZmUwZmUzMi4uZDY4OGI1NDdjNTQgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv bXVsdGl4YWN0LmgKQEAgLTEwOSw5ICsxMDksNiBAQCBleHRlcm4gYm9vbCBNdWx0aVhhY3RJ ZElzUnVubmluZyhNdWx0aVhhY3RJZCBtdWx0aSwgYm9vbCBpc0xvY2tPbmx5KTsKIGV4dGVy biB2b2lkIE11bHRpWGFjdElkU2V0T2xkZXN0TWVtYmVyKHZvaWQpOwogZXh0ZXJuIGludAlH ZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJl ciAqKm1lbWJlcnMsCiAJCQkJCQkJCSAgYm9vbCBmcm9tX3BndXBncmFkZSwgYm9vbCBpc0xv Y2tPbmx5KTsKLWV4dGVybiBib29sIEdldE11bHRpWGFjdEluZm8odWludDMyICptdWx0aXhh Y3RzLCBNdWx0aVhhY3RPZmZzZXQgKm1lbWJlcnMsCi0JCQkJCQkJIE11bHRpWGFjdElkICpv bGRlc3RNdWx0aVhhY3RJZCwKLQkJCQkJCQkgTXVsdGlYYWN0T2Zmc2V0ICpvbGRlc3RPZmZz ZXQpOwogZXh0ZXJuIGJvb2wgTXVsdGlYYWN0SWRQcmVjZWRlcyhNdWx0aVhhY3RJZCBtdWx0 aTEsIE11bHRpWGFjdElkIG11bHRpMik7CiBleHRlcm4gYm9vbCBNdWx0aVhhY3RJZFByZWNl ZGVzT3JFcXVhbHMoTXVsdGlYYWN0SWQgbXVsdGkxLAogCQkJCQkJCQkJCU11bHRpWGFjdElk IG11bHRpMik7Ci0tIAoyLjQ3LjMKCg== --------------MsYmZqOqmhDH81OSlLXN4Y7x Content-Type: text/x-patch; charset=UTF-8; name="v26-0006-Reintroduce-MultiXactMemberFreezeThreshold.patch" Content-Disposition: attachment; filename*0="v26-0006-Reintroduce-MultiXactMemberFreezeThreshold.patch" Content-Transfer-Encoding: base64 RnJvbSA0ZDMwOWM4MjQwNzczYzI5YTJjN2QyMjJkYjgwNjA4ZjgyODY4YjQ3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMTMgTm92IDIwMjUgMTI6Mzg6NDEgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyNiAwNi8xMF0gUmVpbnRyb2R1Y2UgTXVsdGlYYWN0TWVtYmVy RnJlZXplVGhyZXNob2xkCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRp eGFjdC5jIHwgMjAyICsrKysrKysrKysrKysrKysrKysrLS0tLS0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9jb21tYW5k cy92YWN1dW0uYyAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9h dXRvdmFjdXVtLmMgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3Qu aCAgICAgICAgIHwgICA0ICstCiA1IGZpbGVzIGNoYW5nZWQsIDE3MCBpbnNlcnRpb25zKCsp LCA1MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9tdWx0aXhhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFj dC5jCmluZGV4IDc4YmE2ZDcyYTkyLi5jNzJiMmNkNzA5MCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTkxLDEzICs5MSwxMyBAQAogCiAKIC8qCi0g KiBNdWx0aXhhY3QgbWVtYmVycyB3YXJuaW5nIHRocmVzaG9sZC4KLSAqCi0gKiBJZiB0aGUg ZGlmZmVyZW5jZSBiZXR3ZWVuIG5leHRPZmZzZXQgYW5kIG9sZGVzdE9mZnNldCBleGNlZWRz IHRoaXMgdmFsdWUsCi0gKiB3ZSB0cmlnZ2VyIGF1dG92YWN1dW0gaW4gb3JkZXIgdG8gcmVs ZWFzZSBkaXNrIHNwYWNlIGNvbnN1bWVkIGJ5IHRoZQotICogbWVtYmVycyBTTFJVLgorICog VGhyZXNob2xkcyB1c2VkIHRvIGtlZXAgbWVtYmVycyBkaXNrIHVzYWdlIGluIGNoZWNrIHdo ZW4gbXVsdGl4aWRzIGhhdmUgYQorICogbG90IG9mIG1lbWJlcnMuICBXaGVuIE1VTFRJWEFD VF9NRU1CRVJfTE9XX1RIUkVTSE9MRCBpcyByZWFjaGVkLCB2YWN1dW0KKyAqIHN0YXJ0cyBm cmVlemluZyBtdWx0aXhpZHMgbW9yZSBhZ2dyZXNzaXZlbHksIGV2ZW4gaWYgdGhlIG5vcm1h bCBtdWx0aXhpZAorICogYWdlIGxpbWl0cyBoYXZlbid0IGJlZW4gcmVhY2hlZCB5ZXQuCiAg Ki8KLSNkZWZpbmUgTVVMVElYQUNUX01FTUJFUl9BVVRPVkFDX1RIUkVTSE9MRAkJVUlOVDY0 Q09OU1QoNDAwMDAwMDAwMCkKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUl9MT1dfVEhSRVNI T0xECQlVSU5UNjRDT05TVCgyMDAwMDAwMDAwKQorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVS X0hJR0hfVEhSRVNIT0xECQlVSU5UNjRDT05TVCg0MDAwMDAwMDAwKQogCiBzdGF0aWMgaW5s aW5lIE11bHRpWGFjdElkCiBQcmV2aW91c011bHRpWGFjdElkKE11bHRpWGFjdElkIG11bHRp KQpAQCAtMTQwLDYgKzE0MCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBNdWx0aVhhY3RTdGF0ZURh dGEKIAlNdWx0aVhhY3RJZCBvbGRlc3RNdWx0aVhhY3RJZDsKIAlPaWQJCQlvbGRlc3RNdWx0 aVhhY3REQjsKIAorCS8qCisJICogT2xkZXN0IG11bHRpeGFjdCBvZmZzZXQgdGhhdCBpcyBw b3RlbnRpYWxseSByZWZlcmVuY2VkIGJ5IGEgbXVsdGl4YWN0CisJICogcmVmZXJlbmNlZCBi eSBhIHJlbGF0aW9uLgorCSAqLworCU11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7CisK IAkvKiBzdXBwb3J0IGZvciBhbnRpLXdyYXBhcm91bmQgbWVhc3VyZXMgKi8KIAlNdWx0aVhh Y3RJZCBtdWx0aVZhY0xpbWl0OwogCU11bHRpWGFjdElkIG11bHRpV2FybkxpbWl0OwpAQCAt Mjc2LDcgKzI4Miw3IEBAIHN0YXRpYyBib29sIE11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11 bHRpWGFjdE9mZnNldCBvZmZzZXQxLAogCQkJCQkJCQkJTXVsdGlYYWN0T2Zmc2V0IG9mZnNl dDIpOwogc3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11 bHRpKTsKIHN0YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZz ZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMpOwotc3RhdGljIGJvb2wgU2V0T2Zmc2V0VmFjdXVt TGltaXQoYm9vbCBpc19zdGFydHVwKTsKK3N0YXRpYyB2b2lkIFNldE9mZnNldFZhY3V1bUxp bWl0KHZvaWQpOwogc3RhdGljIGJvb2wgZmluZF9tdWx0aXhhY3Rfc3RhcnQoTXVsdGlYYWN0 SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0KTsKIHN0YXRpYyB2b2lkIFdyaXRl TVRydW5jYXRlWGxvZ1JlYyhPaWQgb2xkZXN0TXVsdGlEQiwKIAkJCQkJCQkJICBNdWx0aVhh Y3RJZCBzdGFydFRydW5jT2ZmLApAQCAtMTk0NSw4ICsxOTUxLDggQEAgVHJpbU11bHRpWGFj dCh2b2lkKQogCU11bHRpWGFjdFN0YXRlLT5maW5pc2hlZFN0YXJ0dXAgPSB0cnVlOwogCUxX TG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKLQkvKiBOb3cgY29tcHV0ZSBob3cg ZmFyIGF3YXkgdGhlIG5leHQgbWVtYmVycyB3cmFwYXJvdW5kIGlzLiAqLwotCVNldE11bHRp WGFjdElkTGltaXQob2xkZXN0TVhhY3QsIG9sZGVzdE1YYWN0REIsIHRydWUpOworCS8qIE5v dyBjb21wdXRlIGhvdyBmYXIgYXdheSB0aGUgbmV4dCBtdWx0aXhpZCB3cmFwYXJvdW5kIGlz LiAqLworCVNldE11bHRpWGFjdElkTGltaXQob2xkZXN0TVhhY3QsIG9sZGVzdE1YYWN0REIp OwogfQogCiAvKgpAQCAtMjAxNSwyOCArMjAyMSwyNCBAQCBNdWx0aVhhY3RTZXROZXh0TVhh Y3QoTXVsdGlYYWN0SWQgbmV4dE11bHRpLAogICogZGF0bWlubXhpZCAoaWUsIHRoZSBvbGRl c3QgTXVsdGlYYWN0SWQgdGhhdCBtaWdodCBleGlzdCBpbiBhbnkgZGF0YWJhc2UKICAqIG9m IG91ciBjbHVzdGVyKSwgYW5kIHRoZSBPSUQgb2YgdGhlIChvciBhKSBkYXRhYmFzZSB3aXRo IHRoYXQgdmFsdWUuCiAgKgotICogaXNfc3RhcnR1cCBpcyB0cnVlIHdoZW4gd2UgYXJlIGp1 c3Qgc3RhcnRpbmcgdGhlIGNsdXN0ZXIsIGZhbHNlIHdoZW4gd2UKLSAqIGFyZSB1cGRhdGlu ZyBzdGF0ZSBpbiBhIHJ1bm5pbmcgY2x1c3Rlci4gIFRoaXMgb25seSBhZmZlY3RzIGxvZyBt ZXNzYWdlcy4KKyAqIFRoaXMgYWxzbyB1cGRhdGVzIE11bHRpWGFjdFN0YXRlLT5vbGRlc3RP ZmZzZXQsIGJ5IGxvb2tpbmcgdXAgdGhlIG9mZnNldCBvZgorICogTXVsdGlYYWN0U3RhdGUt Pm9sZGVzdE11bHRpWGFjdElkLgogICovCiB2b2lkCi1TZXRNdWx0aVhhY3RJZExpbWl0KE11 bHRpWGFjdElkIG9sZGVzdF9kYXRtaW5teGlkLCBPaWQgb2xkZXN0X2RhdG9pZCwKLQkJCQkJ Ym9vbCBpc19zdGFydHVwKQorU2V0TXVsdGlYYWN0SWRMaW1pdChNdWx0aVhhY3RJZCBvbGRl c3RfZGF0bWlubXhpZCwgT2lkIG9sZGVzdF9kYXRvaWQpCiB7CiAJTXVsdGlYYWN0SWQgbXVs dGlWYWNMaW1pdDsKIAlNdWx0aVhhY3RJZCBtdWx0aVdhcm5MaW1pdDsKIAlNdWx0aVhhY3RJ ZCBtdWx0aVN0b3BMaW1pdDsKIAlNdWx0aVhhY3RJZCBtdWx0aVdyYXBMaW1pdDsKIAlNdWx0 aVhhY3RJZCBjdXJNdWx0aTsKLQlib29sCQluZWVkc19vZmZzZXRfdmFjdXVtOwogCiAJQXNz ZXJ0KE11bHRpWGFjdElkSXNWYWxpZChvbGRlc3RfZGF0bWlubXhpZCkpOwogCiAJLyoKIAkg KiBXZSBwcmV0ZW5kIHRoYXQgYSB3cmFwIHdpbGwgaGFwcGVuIGhhbGZ3YXkgdGhyb3VnaCB0 aGUgbXVsdGl4YWN0IElECiAJICogc3BhY2UsIGJ1dCB0aGF0J3Mgbm90IHJlYWxseSB0cnVl LCBiZWNhdXNlIG11bHRpeGFjdHMgd3JhcCBkaWZmZXJlbnRseQotCSAqIGZyb20gdHJhbnNh Y3Rpb24gSURzLiAgTm90ZSB0aGF0LCBzZXBhcmF0ZWx5IGZyb20gYW55IGNvbmNlcm4gYWJv dXQKLQkgKiBtdWx0aXhhY3QgSURzIHdyYXBwaW5nLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IG11 bHRpeGFjdCBtZW1iZXJzIGRvIG5vdAotCSAqIHdyYXAuICBMaW1pdHMgZm9yIHRoYXQgYXJl IHNldCBpbiBTZXRPZmZzZXRWYWN1dW1MaW1pdCwgbm90IGhlcmUuCisJICogZnJvbSB0cmFu c2FjdGlvbiBJRHMuCiAJICovCiAJbXVsdGlXcmFwTGltaXQgPSBvbGRlc3RfZGF0bWlubXhp ZCArIChNYXhNdWx0aVhhY3RJZCA+PiAxKTsKIAlpZiAobXVsdGlXcmFwTGltaXQgPCBGaXJz dE11bHRpWGFjdElkKQpAQCAtMjEwNCw4ICsyMTA2LDEzIEBAIFNldE11bHRpWGFjdElkTGlt aXQoTXVsdGlYYWN0SWQgb2xkZXN0X2RhdG1pbm14aWQsIE9pZCBvbGRlc3RfZGF0b2lkLAog CiAJQXNzZXJ0KCFJblJlY292ZXJ5KTsKIAotCS8qIFNldCBsaW1pdHMgZm9yIG9mZnNldCB2 YWN1dW0uICovCi0JbmVlZHNfb2Zmc2V0X3ZhY3V1bSA9IFNldE9mZnNldFZhY3V1bUxpbWl0 KGlzX3N0YXJ0dXApOworCS8qCisJICogT2Zmc2V0cyBhcmUgNjQtYml0cyB3aWRlIGFuZCBu ZXZlciB3cmFwIGFyb3VuZCwgc28gd2UgZG9uJ3QgbmVlZCB0bworCSAqIGNvbnNpZGVyIHRo ZW0gZm9yIGVtZXJnZW5jeSBhdXRvdmFjdXVtIHB1cnBvc2VzLiAgQnV0IG5vdyB0aGF0IHdl J3JlIGluCisJICogYSBjb25zaXN0ZW50IHN0YXRlLCBkZXRlcm1pbmUgTXVsdGlYYWN0U3Rh dGUtPm9sZGVzdE9mZnNldCwgdG8gYmUgdXNlZAorCSAqIHRvIGNhbGN1bGF0ZSBmcmVlemlu ZyBjdXRvZmYgdG8ga2VlcCB0aGUgb2Zmc2V0cyBkaXNrIHVzYWdlIGluIGNoZWNrLgorCSAq LworCVNldE9mZnNldFZhY3V1bUxpbWl0KCk7CiAKIAkvKgogCSAqIElmIHBhc3QgdGhlIGF1 dG92YWN1dW0gZm9yY2UgcG9pbnQsIGltbWVkaWF0ZWx5IHNpZ25hbCBhbiBhdXRvdmFjCkBA IC0yMTE0LDggKzIxMjEsNyBAQCBTZXRNdWx0aVhhY3RJZExpbWl0KE11bHRpWGFjdElkIG9s ZGVzdF9kYXRtaW5teGlkLCBPaWQgb2xkZXN0X2RhdG9pZCwKIAkgKiBkYXRhYmFzZSwgaXQn bGwgY2FsbCBoZXJlLCBhbmQgd2UnbGwgc2lnbmFsIHRoZSBwb3N0bWFzdGVyIHRvIHN0YXJ0 CiAJICogYW5vdGhlciBpdGVyYXRpb24gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIHN0aWxs IGFueSBvbGQgZGF0YWJhc2VzLgogCSAqLwotCWlmICgoTXVsdGlYYWN0SWRQcmVjZWRlcyht dWx0aVZhY0xpbWl0LCBjdXJNdWx0aSkgfHwKLQkJIG5lZWRzX29mZnNldF92YWN1dW0pICYm IElzVW5kZXJQb3N0bWFzdGVyKQorCWlmIChNdWx0aVhhY3RJZFByZWNlZGVzKG11bHRpVmFj TGltaXQsIGN1ck11bHRpKSAmJiBJc1VuZGVyUG9zdG1hc3RlcikKIAkJU2VuZFBvc3RtYXN0 ZXJTaWduYWwoUE1TSUdOQUxfU1RBUlRfQVVUT1ZBQ19MQVVOQ0hFUik7CiAKIAkvKiBHaXZl IGFuIGltbWVkaWF0ZSB3YXJuaW5nIGlmIHBhc3QgdGhlIHdyYXAgd2FybiBwb2ludCAqLwpA QCAtMjE5OCw3ICsyMjA0LDcgQEAgTXVsdGlYYWN0QWR2YW5jZU9sZGVzdChNdWx0aVhhY3RJ ZCBvbGRlc3RNdWx0aSwgT2lkIG9sZGVzdE11bHRpREIpCiAJQXNzZXJ0KEluUmVjb3Zlcnkp OwogCiAJaWYgKE11bHRpWGFjdElkUHJlY2VkZXMoTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11 bHRpWGFjdElkLCBvbGRlc3RNdWx0aSkpCi0JCVNldE11bHRpWGFjdElkTGltaXQob2xkZXN0 TXVsdGksIG9sZGVzdE11bHRpREIsIGZhbHNlKTsKKwkJU2V0TXVsdGlYYWN0SWRMaW1pdChv bGRlc3RNdWx0aSwgb2xkZXN0TXVsdGlEQik7CiB9CiAKIC8qCkBAIC0yMzQ4LDIyICsyMzU0 LDE3IEBAIEdldE9sZGVzdE11bHRpWGFjdElkKHZvaWQpCiB9CiAKIC8qCi0gKiBEZXRlcm1p bmUgaWYgd2UgbmVlZCB0byB2YWN1dW0gdG8ga2VlcCB0aGUgc2l6ZSBvZiB0aGUgbWVtYmVy cyBTTFJVIGluCi0gKiBjaGVjay4KLSAqCi0gKiBUbyBkbyBzbyBkZXRlcm1pbmUgd2hhdCdz IHRoZSBvbGRlc3QgbWVtYmVyIG9mZnNldCBhbmQgaW5zdGFsbCB0aGUgbGltaXQKLSAqIGlu Zm8gaW4gTXVsdGlYYWN0U3RhdGUsIHdoZXJlIGl0IGNhbiBiZSB1c2VkIHRvIHByZXZlbnQg b3ZlcnJ1biBvZiBvbGQgZGF0YQotICogaW4gdGhlIG1lbWJlcnMgU0xSVSBhcmVhLgotICoK LSAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSBpZiBhdXRvdmFjdXVtIGlzIHJlcXVpcmVk IGFuZCBmYWxzZSBvdGhlcndpc2UuCisgKiBEZXRlcm1pbmUgd2hhdCdzIHRoZSBvbGRlc3Qg bWVtYmVyIG9mZnNldCBhbmQgaW5zdGFsbCBpdCBpbiBNdWx0aVhhY3RTdGF0ZSwKKyAqIHdo ZXJlIGl0IGNhbiBiZSB1c2VkIHRvIGFkanVzdCBtdWx0aXhpZCBmcmVlemluZyBjdXRvZmZz LgogICovCi1zdGF0aWMgYm9vbAotU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFy dHVwKQorc3RhdGljIHZvaWQKK1NldE9mZnNldFZhY3V1bUxpbWl0KHZvaWQpCiB7CiAJTXVs dGlYYWN0SWQgb2xkZXN0TXVsdGlYYWN0SWQ7CiAJTXVsdGlYYWN0SWQgbmV4dE1YYWN0Owog CU11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQgPSAwOwkvKiBwbGFjYXRlIGNvbXBpbGVy ICovCiAJTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQ7CisJYm9vbAkJb2xkZXN0T2Zmc2V0 S25vd24gPSBmYWxzZTsKIAogCS8qCiAJICogTkI6IEhhdmUgdG8gcHJldmVudCBjb25jdXJy ZW50IHRydW5jYXRpb24sIHdlIG1pZ2h0IG90aGVyd2lzZSB0cnkgdG8KQEAgLTIzOTMsMjAg KzIzOTQsMzcgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCQkg KiBvZmZzZXQuCiAJCSAqLwogCQlvbGRlc3RPZmZzZXQgPSBuZXh0T2Zmc2V0OworCQlvbGRl c3RPZmZzZXRLbm93biA9IHRydWU7CiAJfQotCWVsc2UgaWYgKCFmaW5kX211bHRpeGFjdF9z dGFydChvbGRlc3RNdWx0aVhhY3RJZCwgJm9sZGVzdE9mZnNldCkpCisJZWxzZQogCXsKLQkJ ZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygib2xkZXN0IGNoZWNrcG9pbnRlZCBNdWx0aVhh Y3QgJXUgZG9lcyBub3QgZXhpc3Qgb24gZGlzayIsCi0JCQkJCQlvbGRlc3RNdWx0aVhhY3RJ ZCkpKTsKKwkJLyoKKwkJICogRmlndXJlIG91dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIG9sZGVz dCBleGlzdGluZyBtdWx0aXhhY3QncyBtZW1iZXJzCisJCSAqIGFyZSBzdG9yZWQuICBJZiB3 ZSBjYW5ub3QgZmluZCBpdCwgYmUgY2FyZWZ1bCBub3QgdG8gZmFpbC4gIChXZSBoYWQKKwkJ ICogYnVncyBpbiBlYXJseSByZWxlYXNlcyBvZiBQb3N0Z3JlU1FMIDkuMy5YIGFuZCA5LjQu WCwgdGhlCisJCSAqIHN1cHBvc2VkbHktZWFybGllc3QgbXVsdGl4YWN0IG1pZ2h0IG5vdCBy ZWFsbHkgZXhpc3QuICBUaG9zZSBzaG91bGQKKwkJICogYmUgbG9uZyBnb25lIGJ5IG5vdywg YnV0IGxldCdzIG5ldmVydGhlbGVzcyBiZSBjYXJlZnVsIG5vdCB0byBmYWlsCisJCSAqIGlu IHRoYXQgY2FzZS4pCisJCSAqLworCQlvbGRlc3RPZmZzZXRLbm93biA9CisJCQlmaW5kX211 bHRpeGFjdF9zdGFydChvbGRlc3RNdWx0aVhhY3RJZCwgJm9sZGVzdE9mZnNldCk7CisKKwkJ aWYgKCFvbGRlc3RPZmZzZXRLbm93bikKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNn KCJvbGRlc3QgY2hlY2twb2ludGVkIE11bHRpWGFjdCAldSBkb2VzIG5vdCBleGlzdCBvbiBk aXNrIiwKKwkJCQkJCQlvbGRlc3RNdWx0aVhhY3RJZCkpKTsKKwkJcmV0dXJuOwogCX0KIAog CUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0VHJ1bmNhdGlvbkxvY2spOwogCi0JLyoKLQkgKiBE byB3ZSBuZWVkIGF1dG92YWN1dW0/CUlmIHdlJ3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVzLgot CSAqLwotCXJldHVybiBuZXh0T2Zmc2V0IC0gb2xkZXN0T2Zmc2V0ID4gTVVMVElYQUNUX01F TUJFUl9BVVRPVkFDX1RIUkVTSE9MRDsKKwkvKiBJbnN0YWxsIHRoZSBjb21wdXRlZCB2YWx1 ZSAqLworCWlmIChvbGRlc3RPZmZzZXRLbm93bikKKwl7CisJCUxXTG9ja0FjcXVpcmUoTXVs dGlYYWN0R2VuTG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJTXVsdGlYYWN0U3RhdGUtPm9sZGVz dE9mZnNldCA9IG9sZGVzdE9mZnNldDsKKwkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5M b2NrKTsKKwl9CiB9CiAKIC8qCkBAIC0yNDUzLDYgKzI0NzEsMTA3IEBAIGZpbmRfbXVsdGl4 YWN0X3N0YXJ0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCkK IAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIERldGVybWluZSBob3cgbWFueSBtdWx0aXhh Y3RzLCBhbmQgaG93IG1hbnkgbXVsdGl4YWN0IG1lbWJlcnMsIGN1cnJlbnRseQorICogZXhp c3QuCisgKi8KK3N0YXRpYyB2b2lkCitSZWFkTXVsdGlYYWN0Q291bnRzKHVpbnQzMiAqbXVs dGl4YWN0cywgTXVsdGlYYWN0T2Zmc2V0ICptZW1iZXJzKQoreworCU11bHRpWGFjdE9mZnNl dCBuZXh0T2Zmc2V0OworCU11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7CisJTXVsdGlY YWN0SWQgb2xkZXN0TXVsdGlYYWN0SWQ7CisJTXVsdGlYYWN0SWQgbmV4dE11bHRpWGFjdElk OworCisJTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RHZW5Mb2NrLCBMV19TSEFSRUQpOworCW5l eHRPZmZzZXQgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldDsKKwlvbGRlc3RNdWx0aVhh Y3RJZCA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3RJZDsKKwluZXh0TXVsdGlY YWN0SWQgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0OworCW9sZGVzdE9mZnNldCA9IE11 bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXQ7CisJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RH ZW5Mb2NrKTsKKworCSptZW1iZXJzID0gbmV4dE9mZnNldCAtIG9sZGVzdE9mZnNldDsKKwkq bXVsdGl4YWN0cyA9IG5leHRNdWx0aVhhY3RJZCAtIG9sZGVzdE11bHRpWGFjdElkOworfQor CisvKgorICogTXVsdGl4YWN0IG1lbWJlcnMgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGUgbXVs dGl4YWN0cyB0aGF0IHJlZmVyIHRvIHRoZW0gYXJlCisgKiBvbGRlciB0aGFuIGV2ZXJ5IGRh dG1pbm14aWQuICBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSBhbmQKKyAq IHZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX3RhYmxlX2FnZSB3b3JrIHRvZ2V0aGVyIHRvIG1h a2Ugc3VyZSB3ZSBuZXZlciBoYXZlCisgKiB0b28gbWFueSBtdWx0aXhhY3RzOyB3ZSBob3Bl IHRoYXQsIGF0IGxlYXN0IHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLAorICogdGhpcyB3 aWxsIGFsc28gYmUgc3VmZmljaWVudCB0byBrZWVwIHVzIGZyb20gdXNpbmcgdG9vIG1hbnkg b2Zmc2V0cy4KKyAqIEhvd2V2ZXIsIGlmIHRoZSBhdmVyYWdlIG11bHRpeGFjdCBoYXMgbWFu eSBtZW1iZXJzLCB3ZSBtaWdodCBhY2N1bXVsYXRlIGEKKyAqIGh1Z2UgYW1vdW50IG9mIG1l bWJlcnMsIGNvbnN1bWluZyBkaXNrIHNwYWNlLCB3aGlsZSBzdGlsbCB1c2luZyBmZXcgZW5v dWdoCisgKiBtdWx0aXhpZHMgdGhhdCB0aGUgbXVsdGl4aWQgbGltaXRzIGZhaWwgdG8gdHJp Z2dlciByZWxtaW5teGlkIGFkdmFuY2VtZW50CisgKiBieSBWQUNVVU0uCisgKgorICogVG8g cHJldmVudCB0aGF0LCBpZiBtb3JlIHRoYW4gYSBjZXJ0YWluIGFtb3VudCBvZiBtZW1iZXJz IHNwYWNlIGlzIHVzZWQKKyAqIChNVUxUSVhBQ1RfTUVNQkVSX0xPV19USFJFU0hPTEQpLCB3 ZSBlZmZlY3RpdmVseSByZWR1Y2UKKyAqIGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9t YXhfYWdlIHRvIGEgdmFsdWUganVzdCBsZXNzIHRoYW4gdGhlIG51bWJlciBvZgorICogbXVs dGl4YWN0cyBpbiB1c2UuICBXZSBob3BlIHRoYXQgdGhpcyB3aWxsIHF1aWNrbHkgdHJpZ2dl ciBhdXRvdmFjdXVtaW5nIG9uCisgKiB0aGUgdGFibGUgb3IgdGFibGVzIHdpdGggdGhlIG9s ZGVzdCByZWxtaW5teGlkLCB0aHVzIGFsbG93aW5nIGRhdG1pbm14aWQKKyAqIHZhbHVlcyB0 byBhZHZhbmNlIGFuZCByZW1vdmluZyBzb21lIG1lbWJlcnMuCisgKgorICogQXMgdGhlIGFt b3VudCBvZiB0aGUgbWVtYmVyIHNwYWNlIGluIHVzZSBncm93cywgd2UgYmVjb21lIG1vcmUg YWdncmVzc2l2ZQorICogaW4gY2xhbXBpbmcgdGhpcyB2YWx1ZS4gIFRoYXQgbm90IG9ubHkg Y2F1c2VzIGF1dG92YWN1dW0gdG8gcmFtcCB1cCwgYnV0CisgKiBhbHNvIG1ha2VzIGFueSBt YW51YWwgdmFjdXVtcyB0aGUgdXNlciBpc3N1ZXMgbW9yZSBhZ2dyZXNzaXZlLiAgVGhpcwor ICogaGFwcGVucyBiZWNhdXNlIHZhY3V1bV9nZXRfY3V0b2ZmcygpIHdpbGwgY2xhbXAgdGhl IGZyZWV6ZSB0YWJsZSBhbmQgdGhlCisgKiBtaW5pbXVtIGZyZWV6ZSBhZ2UgY3V0b2ZmcyBi YXNlZCBvbiB0aGUgZWZmZWN0aXZlCisgKiBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVf bWF4X2FnZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMuICBBdCB0aGUgZXh0cmVtZSwKKyAqIHdo ZW4gdGhlIG1lbWJlcnMgdXNhZ2UgcmVhY2hlcyBNVUxUSVhBQ1RfTUVNQkVSX0hJR0hfVEhS RVNIT0xELCB3ZSdsbCBjbGFtcAorICogZnJlZXplX21heF9hZ2UgdG8gemVybywgYW5kIGV2 ZXJ5IHZhY3V1bSBvZiBhbnkgdGFibGUgd2lsbCBmcmVlemUgZXZlcnkKKyAqIG11bHRpeGFj dC4KKyAqLworaW50CitNdWx0aVhhY3RNZW1iZXJGcmVlemVUaHJlc2hvbGQodm9pZCkKK3sK KwlNdWx0aVhhY3RPZmZzZXQgbWVtYmVyczsKKwl1aW50MzIJCW11bHRpeGFjdHM7CisJdWlu dDMyCQl2aWN0aW1fbXVsdGl4YWN0czsKKwlkb3VibGUJCWZyYWN0aW9uOworCWludAkJCXJl c3VsdDsKKworCS8qCisJICogUmVhZCB0aGUgY3VycmVudCBvZmZzZXRzIGFuZCBtZW1iZXJz IHVzYWdlLgorCSAqCisJICogTm90ZTogSW4gdGhlIGNhc2UgdGhhdCB3ZSBoYXZlIGJlZW4g dW5hYmxlIHRvIGNhbGN1bGF0ZSBvbGRlc3RPZmZzZXQsCisJICogYmVjYXVzZSB3ZSBmYWls ZWQgdG8gZmluZCB0aGUgb2Zmc2V0IG9mIHRoZSBvbGRlc3QgbXVsdGl4aWQsIHdlIGFzc3Vt ZQorCSAqIHRoZSB3b3JzdCBiZWNhdXNlIG9sZGVzdE9mZnNldCB3aWxsIGJlIGxlZnQgdG8g emVybyBpbiB0aGF0IGNhc2UuCisJICovCisJUmVhZE11bHRpWGFjdENvdW50cygmbXVsdGl4 YWN0cywgJm1lbWJlcnMpOworCisJLyogSWYgbWVtYmVyIHNwYWNlIHV0aWxpemF0aW9uIGlz IGxvdywgbm8gc3BlY2lhbCBhY3Rpb24gaXMgcmVxdWlyZWQuICovCisJaWYgKG1lbWJlcnMg PD0gTVVMVElYQUNUX01FTUJFUl9MT1dfVEhSRVNIT0xEKQorCQlyZXR1cm4gYXV0b3ZhY3V1 bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2U7CisKKwkvKgorCSAqIENvbXB1dGUgYSB0YXJn ZXQgZm9yIHJlbG1pbm14aWQgYWR2YW5jZW1lbnQuICBUaGUgbnVtYmVyIG9mIG11bHRpeGFj dHMKKwkgKiB3ZSB0cnkgdG8gZWxpbWluYXRlIGZyb20gdGhlIHN5c3RlbSBpcyBiYXNlZCBv biBob3cgZmFyIHdlIGFyZSBwYXN0CisJICogTVVMVElYQUNUX01FTUJFUl9MT1dfVEhSRVNI T0xELgorCSAqCisJICogVGhlIHdheSB0aGlzIGZvcm11bGEgd29ya3MgaXMgdGhhdCB3aGVu IG1lbWJlcnMgaXMgZXhhY3RseSBhdCB0aGUgbG93CisJICogdGhyZXNob2xkLCBmcmFjdGlv biA9PSAwLjAsIGFuZCB3ZSBzZXQgZnJlZXplX21heF9hZ2UgZXF1YWwgdG8KKwkgKiBteGlk X2FnZShvbGRlc3RNdWx0aVhhY3RJZCkuICBBcyBtZW1iZXJzIGdyb3dzIGZ1cnRoZXIsIHRv d2FyZHMgdGhlCisJICogaGlnaCB0aHJlc2hvbGQsIGZyYWN0aW9uIGdyb3dzIGxpbmVhcmx5 IGZyb20gMC4wIHRvIDEuMCwgYW5kIHRoZSByZXN1bHQKKwkgKiBzaHJpbmtzIGZyb20gbXhp ZF9hZ2Uob2xkZXN0TXVsdGlYYWN0SWQpIHRvIDAuICBCZXlvbmQgdGhlIGhpZ2gKKwkgKiB0 aHJlc2hvbGQsIGZyYWN0aW9uID4gMS4wIGFuZCB0aGUgcmVzdWx0IGlzIGNsYW1wZWQgdG8g MC4KKwkgKi8KKwlmcmFjdGlvbiA9IChkb3VibGUpIChtZW1iZXJzIC0gTVVMVElYQUNUX01F TUJFUl9MT1dfVEhSRVNIT0xEKSAvCisJCShNVUxUSVhBQ1RfTUVNQkVSX0hJR0hfVEhSRVNI T0xEIC0gTVVMVElYQUNUX01FTUJFUl9MT1dfVEhSRVNIT0xEKTsKKwl2aWN0aW1fbXVsdGl4 YWN0cyA9IG11bHRpeGFjdHMgKiBmcmFjdGlvbjsKKworCS8qIGZyYWN0aW9uIGNvdWxkIGJl ID4gMS4wLCBidXQgbG93ZXN0IHBvc3NpYmxlIGZyZWV6ZSBhZ2UgaXMgemVybyAqLworCWlm ICh2aWN0aW1fbXVsdGl4YWN0cyA+IG11bHRpeGFjdHMpCisJCXJldHVybiAwOworCXJlc3Vs dCA9IG11bHRpeGFjdHMgLSB2aWN0aW1fbXVsdGl4YWN0czsKKworCS8qCisJICogQ2xhbXAg dG8gYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsIHNvIHRoYXQgd2UgbmV2 ZXIgbWFrZQorCSAqIGF1dG92YWN1dW0gbGVzcyBhZ2dyZXNzaXZlIHRoYW4gaXQgd291bGQg b3RoZXJ3aXNlIGJlLgorCSAqLworCXJldHVybiBNaW4ocmVzdWx0LCBhdXRvdmFjdXVtX211 bHRpeGFjdF9mcmVlemVfbWF4X2FnZSk7Cit9CisKIHR5cGVkZWYgc3RydWN0IG14dHJ1bmNp bmZvCiB7CiAJaW50NjQJCWVhcmxpZXN0RXhpc3RpbmdQYWdlOwpAQCAtMjY2OSw2ICsyNzg4 LDcgQEAgVHJ1bmNhdGVNdWx0aVhhY3QoTXVsdGlYYWN0SWQgbmV3T2xkZXN0TXVsdGksIE9p ZCBuZXdPbGRlc3RNdWx0aURCKQogCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0R2VuTG9jaywg TFdfRVhDTFVTSVZFKTsKIAlNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0TXVsdGlYYWN0SWQgPSBu ZXdPbGRlc3RNdWx0aTsKIAlNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0TXVsdGlYYWN0REIgPSBu ZXdPbGRlc3RNdWx0aURCOworCU11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXQgPSBuZXdP bGRlc3RPZmZzZXQ7CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAogCS8q IEZpcnN0IHRydW5jYXRlIG1lbWJlcnMgKi8KQEAgLTI4NjQsNyArMjk4NCw3IEBAIG11bHRp eGFjdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkgKiBBZHZhbmNlIHRoZSBo b3Jpem9uIHZhbHVlcywgc28gdGhleSdyZSBjdXJyZW50IGF0IHRoZSBlbmQgb2YKIAkJICog cmVjb3ZlcnkuCiAJCSAqLwotCQlTZXRNdWx0aVhhY3RJZExpbWl0KHhscmVjLmVuZFRydW5j T2ZmLCB4bHJlYy5vbGRlc3RNdWx0aURCLCBmYWxzZSk7CisJCVNldE11bHRpWGFjdElkTGlt aXQoeGxyZWMuZW5kVHJ1bmNPZmYsIHhscmVjLm9sZGVzdE11bHRpREIpOwogCiAJCVBlcmZv cm1NZW1iZXJzVHJ1bmNhdGlvbih4bHJlYy5zdGFydFRydW5jTWVtYiwgeGxyZWMuZW5kVHJ1 bmNNZW1iKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Zy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IGVmNDA1ZDY2 YjNiLi5hMDAwYjhiZDUwOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAt NTE1NSw3ICs1MTU1LDcgQEAgQm9vdFN0cmFwWExPRyh1aW50MzIgZGF0YV9jaGVja3N1bV92 ZXJzaW9uKQogCU11bHRpWGFjdFNldE5leHRNWGFjdChjaGVja1BvaW50Lm5leHRNdWx0aSwg Y2hlY2tQb2ludC5uZXh0TXVsdGlPZmZzZXQpOwogCUFkdmFuY2VPbGRlc3RDbG9nWGlkKGNo ZWNrUG9pbnQub2xkZXN0WGlkKTsKIAlTZXRUcmFuc2FjdGlvbklkTGltaXQoY2hlY2tQb2lu dC5vbGRlc3RYaWQsIGNoZWNrUG9pbnQub2xkZXN0WGlkREIpOwotCVNldE11bHRpWGFjdElk TGltaXQoY2hlY2tQb2ludC5vbGRlc3RNdWx0aSwgY2hlY2tQb2ludC5vbGRlc3RNdWx0aURC LCB0cnVlKTsKKwlTZXRNdWx0aVhhY3RJZExpbWl0KGNoZWNrUG9pbnQub2xkZXN0TXVsdGks IGNoZWNrUG9pbnQub2xkZXN0TXVsdGlEQik7CiAJU2V0Q29tbWl0VHNMaW1pdChJbnZhbGlk VHJhbnNhY3Rpb25JZCwgSW52YWxpZFRyYW5zYWN0aW9uSWQpOwogCiAJLyogU2V0IHVwIHRo ZSBYTE9HIHBhZ2UgaGVhZGVyICovCkBAIC01NjM2LDcgKzU2MzYsNyBAQCBTdGFydHVwWExP Ryh2b2lkKQogCU11bHRpWGFjdFNldE5leHRNWGFjdChjaGVja1BvaW50Lm5leHRNdWx0aSwg Y2hlY2tQb2ludC5uZXh0TXVsdGlPZmZzZXQpOwogCUFkdmFuY2VPbGRlc3RDbG9nWGlkKGNo ZWNrUG9pbnQub2xkZXN0WGlkKTsKIAlTZXRUcmFuc2FjdGlvbklkTGltaXQoY2hlY2tQb2lu dC5vbGRlc3RYaWQsIGNoZWNrUG9pbnQub2xkZXN0WGlkREIpOwotCVNldE11bHRpWGFjdElk TGltaXQoY2hlY2tQb2ludC5vbGRlc3RNdWx0aSwgY2hlY2tQb2ludC5vbGRlc3RNdWx0aURC LCB0cnVlKTsKKwlTZXRNdWx0aVhhY3RJZExpbWl0KGNoZWNrUG9pbnQub2xkZXN0TXVsdGks IGNoZWNrUG9pbnQub2xkZXN0TXVsdGlEQik7CiAJU2V0Q29tbWl0VHNMaW1pdChjaGVja1Bv aW50Lm9sZGVzdENvbW1pdFRzWGlkLAogCQkJCQkgY2hlY2tQb2ludC5uZXdlc3RDb21taXRU c1hpZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKaW5kZXggMTAwZTFhNzJjMjIuLmJkNDI3 OGNkMjUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwpAQCAtMTE0Niw5ICsxMTQ2LDkgQEAg dmFjdXVtX2dldF9jdXRvZmZzKFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zIHBh cmFtcywKIAkvKgogCSAqIEFsc28gY29tcHV0ZSB0aGUgbXVsdGl4YWN0IGFnZSBmb3Igd2hp Y2ggZnJlZXppbmcgaXMgdXJnZW50LiAgVGhpcyBpcwogCSAqIG5vcm1hbGx5IGF1dG92YWN1 dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlLCBidXQgbWF5IGJlIGxlc3MgaWYgd2UgYXJl Ci0JICogc2hvcnQgb2YgbXVsdGl4YWN0IG1lbWJlciBzcGFjZS4KKwkgKiBzaG9ydCBvZiBt dWx0aXhhY3QgbWVtYmVyIHNwYWNlLiBYWFggdXBkYXRlIGNvbW1lbnQKIAkgKi8KLQllZmZl Y3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlID0gYXV0b3ZhY3V1bV9tdWx0aXhhY3Rf ZnJlZXplX21heF9hZ2U7CisJZWZmZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSA9 IE11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCgpOwogCiAJLyoKIAkgKiBBbG1vc3Qg cmVhZHkgdG8gc2V0IGZyZWV6ZSBvdXRwdXQgcGFyYW1ldGVyczsgY2hlY2sgaWYgT2xkZXN0 WG1pbiBvcgpAQCAtMTk3MSw3ICsxOTcxLDcgQEAgdmFjX3RydW5jYXRlX2Nsb2coVHJhbnNh Y3Rpb25JZCBmcm96ZW5YSUQsCiAJICogc2lnbmFsaW5nIHR3aWNlPwogCSAqLwogCVNldFRy YW5zYWN0aW9uSWRMaW1pdChmcm96ZW5YSUQsIG9sZGVzdHhpZF9kYXRvaWQpOwotCVNldE11 bHRpWGFjdElkTGltaXQobWluTXVsdGksIG1pbm11bHRpX2RhdG9pZCwgZmFsc2UpOworCVNl dE11bHRpWGFjdElkTGltaXQobWluTXVsdGksIG1pbm11bHRpX2RhdG9pZCk7CiAKIAlMV0xv Y2tSZWxlYXNlKFdyYXBMaW1pdHNWYWN1dW1Mb2NrKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9hdXRvdmFjdXVtLmMKaW5kZXggYmY2NmY0OTRlM2EuLjFjMzg0ODhmMmNiIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtMTE1MSw3ICsxMTUxLDcgQEAgZG9f c3RhcnRfd29ya2VyKHZvaWQpCiAKIAkvKiBBbHNvIGRldGVybWluZSB0aGUgb2xkZXN0IGRh dG1pbm14aWQgd2Ugd2lsbCBjb25zaWRlci4gKi8KIAlyZWNlbnRNdWx0aSA9IFJlYWROZXh0 TXVsdGlYYWN0SWQoKTsKLQltdWx0aUZvcmNlTGltaXQgPSByZWNlbnRNdWx0aSAtIGF1dG92 YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOworCW11bHRpRm9yY2VMaW1pdCA9IHJl Y2VudE11bHRpIC0gTXVsdGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xkKCk7CiAJaWYgKG11 bHRpRm9yY2VMaW1pdCA8IEZpcnN0TXVsdGlYYWN0SWQpCiAJCW11bHRpRm9yY2VMaW1pdCAt PSBGaXJzdE11bHRpWGFjdElkOwogCkBAIC0xOTM5LDcgKzE5MzksNyBAQCBkb19hdXRvdmFj dXVtKHZvaWQpCiAJICogbm9ybWFsbHkgYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21h eF9hZ2UsIGJ1dCBtYXkgYmUgbGVzcyBpZiB3ZSBhcmUKIAkgKiBzaG9ydCBvZiBtdWx0aXhh Y3QgbWVtYmVyIHNwYWNlLgogCSAqLwotCWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21h eF9hZ2UgPSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZTsKKwllZmZlY3Rp dmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlID0gTXVsdGlYYWN0TWVtYmVyRnJlZXplVGhy ZXNob2xkKCk7CiAKIAkvKgogCSAqIEZpbmQgdGhlIHBnX2RhdGFiYXNlIGVudHJ5IGFuZCBz ZWxlY3QgdGhlIGRlZmF1bHQgZnJlZXplIGFnZXMuIFdlIHVzZQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRp eGFjdC5oCmluZGV4IGQ2ODhiNTQ3YzU0Li5jZmZmODZmNjU1ZiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9t dWx0aXhhY3QuaApAQCAtMTI2LDggKzEyNiw3IEBAIGV4dGVybiB2b2lkIEJvb3RTdHJhcE11 bHRpWGFjdCh2b2lkKTsKIGV4dGVybiB2b2lkIFN0YXJ0dXBNdWx0aVhhY3Qodm9pZCk7CiBl eHRlcm4gdm9pZCBUcmltTXVsdGlYYWN0KHZvaWQpOwogZXh0ZXJuIHZvaWQgU2V0TXVsdGlY YWN0SWRMaW1pdChNdWx0aVhhY3RJZCBvbGRlc3RfZGF0bWlubXhpZCwKLQkJCQkJCQkJT2lk IG9sZGVzdF9kYXRvaWQsCi0JCQkJCQkJCWJvb2wgaXNfc3RhcnR1cCk7CisJCQkJCQkJCU9p ZCBvbGRlc3RfZGF0b2lkKTsKIGV4dGVybiB2b2lkIE11bHRpWGFjdEdldENoZWNrcHRNdWx0 aShib29sIGlzX3NodXRkb3duLAogCQkJCQkJCQkJIE11bHRpWGFjdElkICpuZXh0TXVsdGks CiAJCQkJCQkJCQkgTXVsdGlYYWN0T2Zmc2V0ICpuZXh0TXVsdGlPZmZzZXQsCkBAIC0xNDIs NiArMTQxLDcgQEAgZXh0ZXJuIHZvaWQgTXVsdGlYYWN0U2V0TmV4dE1YYWN0KE11bHRpWGFj dElkIG5leHRNdWx0aSwKIGV4dGVybiB2b2lkIE11bHRpWGFjdEFkdmFuY2VOZXh0TVhhY3Qo TXVsdGlYYWN0SWQgbWluTXVsdGksCiAJCQkJCQkJCQkgIE11bHRpWGFjdE9mZnNldCBtaW5N dWx0aU9mZnNldCk7CiBleHRlcm4gdm9pZCBNdWx0aVhhY3RBZHZhbmNlT2xkZXN0KE11bHRp WGFjdElkIG9sZGVzdE11bHRpLCBPaWQgb2xkZXN0TXVsdGlEQik7CitleHRlcm4gaW50CU11 bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgbXVs dGl4YWN0X3R3b3BoYXNlX3JlY292ZXIoRnVsbFRyYW5zYWN0aW9uSWQgZnhpZCwgdWludDE2 IGluZm8sCiAJCQkJCQkJCQkgICB2b2lkICpyZWNkYXRhLCB1aW50MzIgbGVuKTsKLS0gCjIu NDcuMwoK --------------MsYmZqOqmhDH81OSlLXN4Y7x Content-Type: text/x-patch; charset=UTF-8; name="v26-0007-TEST-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Disposition: attachment; filename*0="v26-0007-TEST-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Transfer-Encoding: base64 RnJvbSA5NDVmMDJhYmFjMzE2ZjRmYmJkNDE4NzY3OWU5YjFkMmEyOTRlMDhlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMjggT2N0IDIwMjUgMTk6MDg6MjYgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyNiAwNy8xMF0gVEVTVDogQWRkIHRlc3QgZm9yIDY0LWJpdCBteG9mZiBpbiBwZ19yZXNl dHdhbAoKLS0tCiBzcmMvYmluL3BnX3Jlc2V0d2FsL21lc29uLmJ1aWxkICAgIHwgICAxICsK IHNyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDNfbXhvZmYucGwgfCAxNzAgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTcxIGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAzX214b2ZmLnBs CgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9tZXNvbi5idWlsZCBiL3NyYy9i aW4vcGdfcmVzZXR3YWwvbWVzb24uYnVpbGQKaW5kZXggMjkwODMyYjIyOTkuLjFlMmRmYjM4 YTViIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jlc2V0d2FsL21lc29uLmJ1aWxkCisrKyBi L3NyYy9iaW4vcGdfcmVzZXR3YWwvbWVzb24uYnVpbGQKQEAgLTI1LDYgKzI1LDcgQEAgdGVz dHMgKz0gewogICAgICd0ZXN0cyc6IFsKICAgICAgICd0LzAwMV9iYXNpYy5wbCcsCiAgICAg ICAndC8wMDJfY29ycnVwdGVkLnBsJywKKyAgICAgICd0LzAwM19teG9mZi5wbCcsCiAgICAg XSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDNfbXhv ZmYucGwgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAzX214b2ZmLnBsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYzFiN2ZhMWQzMwotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDNfbXhvZmYucGwKQEAgLTAsMCArMSwx NzAgQEAKKworIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2Fs bCc7CisKK3VzZSBNYXRoOjpCaWdJbnQ7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl cjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitz dWIgbXhhY3RfZWF0ZXIKK3sKKwlteSAkbm9kZSA9IHNoaWZ0OworCW15ICR0YmwgPSBzaGlm dDsKKworCSRub2RlLT5zdGFydDsKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJDUkVBVEUgVEFCTEUgJHt0Ymx9IChJIElOVCBQUklNQVJZIEtFWSwgTl9VUERBVEVEIElO VCkgIiAuCisJCSIgICAgICAgV0lUSCAoQVVUT1ZBQ1VVTV9FTkFCTEVEPUZBTFNFKTsiIC4K KwkJIklOU0VSVCBJTlRPICR7dGJsfSBTRUxFQ1QgRywgMCBGUk9NIEdFTkVSQVRFX1NFUklF UygxLCA1MCkgRzsiKTsKKworCSMgY29uc3VtZSBhcm91bmQgMTBrIG11bHRpeGFjdC1vZmZz ZXRmcworCW15ICRuY2xpZW50cyA9IDEwOworCW15ICR1cGRhdGVfZXZlcnkgPSA3NTsKKwlt eSBAY29ubmVjdGlvbnMgPSAoKTsKKworCWZvciAoMC4uJG5jbGllbnRzKQorCXsKKwkJbXkg JGNvbm4gPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworCQkkY29ubi0+ cXVlcnlfc2FmZSgiQkVHSU4iKTsKKworCQlwdXNoKEBjb25uZWN0aW9ucywgJGNvbm4pOwor CX0KKworCWZvciAobXkgJGkgPSAwOyAkaSA8IDEwMDA7ICRpKyspCisJeworCQlteSAkY29u biA9ICRjb25uZWN0aW9uc1skaSAlICRuY2xpZW50c107CisKKwkJJGNvbm4tPnF1ZXJ5X3Nh ZmUoIkNPTU1JVDsiKTsKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkJFR0lOIik7CisKKwkJaWYg KCRpICUgJHVwZGF0ZV9ldmVyeSA9PSAwKQorCQl7CisJCQkkY29ubi0+cXVlcnlfc2FmZSgK KwkJCQkiVVBEQVRFICR7dGJsfSBTRVQgIiAuCisJCQkJIk5fVVBEQVRFRCA9IE5fVVBEQVRF RCArIDEgIiAuCisJCQkJIldIRVJFIEkgPSAke2l9ICUgNTAiKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCSRjb25uLT5xdWVyeV9zYWZlKAorCQkJCSJTRUxFQ1QgKiBGUk9NICR7dGJsfSBG T1IgS0VZIFNIQVJFIik7CisJCX0KKwl9CisKKwlmb3IgbXkgJGNvbm4gKEBjb25uZWN0aW9u cykKKwl7CisJCSRjb25uLT5xdWl0KCk7CisJfQorCisJJG5vZGUtPnN0b3A7Cit9CisKK3N1 YiBuZXh0X214b2ZmCit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAoJHN0ZG91dCwgJHN0 ZGVycikgPQorCSAgcnVuX2NvbW1hbmQoWyAncGdfY29udHJvbGRhdGEnLCAkbm9kZS0+ZGF0 YV9kaXIgXSk7CisJbXkgQGNvbnRyb2xfZGF0YSA9IHNwbGl0KCJcbiIsICRzdGRvdXQpOwor CW15ICRuZXh0X214b2ZmID0gdW5kZWY7CisKKwlmb3JlYWNoIChAY29udHJvbF9kYXRhKQor CXsKKwkJaWYgKCRfID1+IC9eTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6 XHMqKC4qKSQvbWcpCisJCXsKKwkJCSRuZXh0X214b2ZmID0gJDE7CisJCQlsYXN0OworCQl9 CisJfQorCWRpZSAiTmV4dE11bHRpT2Zmc2V0IG5vdCBmb3VuZCBpbiBjb250cm9sIGZpbGVc biIKKwkJdW5sZXNzIGRlZmluZWQoJG5leHRfbXhvZmYpOworCisJcmV0dXJuICRuZXh0X214 b2ZmOworfQorCitzdWIgcmVzZXRfbXhvZmYKK3sKKwlteSAkbm9kZSA9IHNoaWZ0OworCW15 ICRvZmZzZXQgPSBzaGlmdDsKKwkJJG9mZnNldCA9IE1hdGg6OkJpZ0ludC0+bmV3KCRvZmZz ZXQpOworCisJIyBHZXQgYmxvY2sgc2l6ZQorCW15ICRvdXQgPSAocnVuX2NvbW1hbmQoWyAn cGdfcmVzZXR3YWwnLCAnLS1kcnktcnVuJywgJG5vZGUtPmRhdGFfZGlyIF0pKVswXTsKKwkJ JG91dCA9fiAvXkRhdGFiYXNlIGJsb2NrIHNpemU6ICooXGQrKSQvbSBvciBkaWU7CisJbXkg JGJsY2tzeiA9ICQxOworCisJIyBSZXNldCB0byBuZXcgb2Zmc2V0CisJbXkgQGNtZCA9ICgn cGdfcmVzZXR3YWwnLCAnLS1wZ2RhdGEnID0+ICRub2RlLT5kYXRhX2Rpcik7CisJcHVzaCBA Y21kLCAnLS1tdWx0aXhhY3Qtb2Zmc2V0JyA9PiAkb2Zmc2V0LT5hc19oZXgoKTsKKwljb21t YW5kX29rKFxAY21kLCAnc2V0IG9sZGVzdCBtdWx0aXhhY3Qtb2Zmc2V0Jyk7CisKKwkjIEZp bGwgZW1wdHkgcGdfbXVsdGl4YWN0L21lbWJlcnMgc2VnbWVudAorCW15ICRtdWx0ID0gMzIg KiBpbnQoJGJsY2tzeiAvIDIwKSAqIDQ7CisJbXkgJHNlZ25hbWUgPSBzcHJpbnRmICIlMDE1 WCIsICRvZmZzZXQgLyAkbXVsdDsKKworCW15IEBkZCA9ICgnZGQnKTsKKwlwdXNoIEBkZCwg ImlmPS9kZXYvemVybyI7CisJcHVzaCBAZGQsICJvZj0iIC4gJG5vZGUtPmRhdGFfZGlyIC4g Ii9wZ19tdWx0aXhhY3QvbWVtYmVycy8iIC4gJHNlZ25hbWU7CisJcHVzaCBAZGQsICJicz0k Ymxja3N6IjsKKwlwdXNoIEBkZCwgImNvdW50PTMyIjsKKwljb21tYW5kX29rKFxAZGQsICdm aWxsIGVtcHR5IG11bHRpeGFjdC1tZW1iZXJzJyk7Cit9CisKK215ICgkb2ZmMSwgJG9mZjIp OworCisjIHN0YXJ0IGZyb20gZGVmYXVsdHMKK215ICRub2RlMSA9IFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXItPm5ldygnbm9kZTEnKTsKKyRub2RlMS0+aW5pdDsKKyRvZmYxID0gbmV4 dF9teG9mZigkbm9kZTEpOworbXhhY3RfZWF0ZXIoJG5vZGUxLCAiRk9PIik7Ciskb2ZmMiA9 IG5leHRfbXhvZmYoJG5vZGUxKTsKK25vdGUgIj4gc3RhcnQgZnJvbSAkb2ZmMSwgZmluaXNo ZWQgYXQgJG9mZjJcbiI7CisKKyMgc3RhcnQgZnJvbSBiZWZvcmUgMzItYml0IHdyYXBhcm91 bmQKK215ICRub2RlMiA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZTIn KTsKKyRub2RlMi0+aW5pdDsKK3Jlc2V0X214b2ZmKCRub2RlMiwgMHhGRkZGMDAwMCk7Cisk b2ZmMSA9IG5leHRfbXhvZmYoJG5vZGUyKTsKK214YWN0X2VhdGVyKCRub2RlMiwgIkZPTyIp OworJG9mZjIgPSBuZXh0X214b2ZmKCRub2RlMik7Citub3RlICI+IHN0YXJ0IGZyb20gJG9m ZjEsIGZpbmlzaGVkIGF0ICRvZmYyXG4iOworCisjIHN0YXJ0IG5lYXIgMzItYml0IHdyYXBh cm91bmQKK215ICRub2RlMyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9k ZTMnKTsKKyRub2RlMy0+aW5pdDsKK3Jlc2V0X214b2ZmKCRub2RlMywgMHhGRkZGRUM3Nyk7 Ciskb2ZmMSA9IG5leHRfbXhvZmYoJG5vZGUzKTsKK214YWN0X2VhdGVyKCRub2RlMywgIkZP TyIpOworJG9mZjIgPSBuZXh0X214b2ZmKCRub2RlMyk7Citub3RlICI+IHN0YXJ0IGZyb20g JG9mZjEsIGZpbmlzaGVkIGF0ICRvZmYyXG4iOworCisjIHN0YXJ0IG92ZXIgMzItYml0IHdy YXBhcm91bmQKK215ICRub2RlNCA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn bm9kZTQnKTsKKyRub2RlNC0+aW5pdDsKK3Jlc2V0X214b2ZmKCRub2RlNCwgJzB4RkZGRkZG RkYwMDAwJyk7Ciskb2ZmMSA9IG5leHRfbXhvZmYoJG5vZGU0KTsKK214YWN0X2VhdGVyKCRu b2RlNCwgIkZPTyIpOworJG9mZjIgPSBuZXh0X214b2ZmKCRub2RlMyk7Citub3RlICI+IHN0 YXJ0IGZyb20gJG9mZjEsIGZpbmlzaGVkIGF0ICRvZmYyXG4iOworCisjIGNoZWNrIGludmFy aWFudAorJG5vZGUxLT5zdGFydDsKKyRub2RlMi0+c3RhcnQ7Ciskbm9kZTMtPnN0YXJ0Owor JG5vZGU0LT5zdGFydDsKKworbXkgJHZhcjEgPSAkbm9kZTEtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAnVEFCTEUgRk9PJyk7CitteSAkdmFyMiA9ICRub2RlMi0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICdUQUJMRSBGT08nKTsKK215ICR2YXIzID0gJG5vZGUzLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgJ1RBQkxFIEZPTycpOworbXkgJHZhcjQgPSAkbm9kZTQtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAnVEFCTEUgRk9PJyk7CitvaygkdmFyMSBlcSAkdmFyMiBlcSAkdmFyMyBl cSAkdmFyNCwKKwknY2hlY2sgdGFibGUgaW52YXJpYW50IGluIGFsbCBub2RlcycpOworCisk bm9kZTQtPnN0b3A7Ciskbm9kZTMtPnN0b3A7Ciskbm9kZTItPnN0b3A7Ciskbm9kZTEtPnN0 b3A7CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi40Ny4zCgo= --------------MsYmZqOqmhDH81OSlLXN4Y7x Content-Type: text/x-patch; charset=UTF-8; name="v26-0008-TEST-Add-test-for-wraparound-of-next-new-multi-i.patch" Content-Disposition: attachment; filename*0="v26-0008-TEST-Add-test-for-wraparound-of-next-new-multi-i.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlNjM3N2Q3ZTgyYTA0YmZhODAwN2Q2YmYwMzUzY2E0MTRlODQ4NDM0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTIgTm92IDIwMjUgMTM6MzY6MDkgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyNiAwOC8xMF0gVEVTVDogQWRkIHRlc3QgZm9yIHdyYXBhcm91 bmQgb2YgbmV4dCBuZXcgbXVsdGkgaW4KIHBnX3VwZ3JhZGUKClJlbGF0ZWQgdG8gQlVHICMx ODg2MyBhbmQgQlVHICMxODg2NQotLS0KIHNyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWls ZCAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfdXBncmFkZS90LzAwOF9tdWx0aV93cmFw LnBsIHwgMTc2ICsrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwg MTc3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3Jh ZGUvdC8wMDhfbXVsdGlfd3JhcC5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFk ZS9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZAppbmRleCBm ZmYwZGIzYjU2MC4uMjhjZDI5ZDY2NmUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFk ZS9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQKQEAg LTUxLDYgKzUxLDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDA1X2NoYXJfc2lnbmVkbmVz cy5wbCcsCiAgICAgICAndC8wMDZfdHJhbnNmZXJfbW9kZXMucGwnLAogICAgICAgJ3QvMDA3 X211bHRpeGFjdF9jb252ZXJzaW9uLnBsJywKKyAgICAgICd0LzAwOF9tdWx0aV93cmFwLnBs JywKICAgICBdLAogICAgICd0ZXN0X2t3YXJncyc6IHsncHJpb3JpdHknOiA0MH0sICMgcGdf dXBncmFkZSB0ZXN0cyBhcmUgc2xvdwogICB9LApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191 cGdyYWRlL3QvMDA4X211bHRpX3dyYXAucGwgYi9zcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDhf bXVsdGlfd3JhcC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MGFkOGZkNTk5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvdC8w MDhfbXVsdGlfd3JhcC5wbApAQCAtMCwwICsxLDE3NiBAQAorCisjIENvcHlyaWdodCAoYykg MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmlj dDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIE1hdGg6OkJpZ0ludDsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkFkanVzdER1bXA7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6QWRqdXN0VXBncmFkZTsKK3VzZSBUZXN0OjpNb3JlOworCisjIFRlbXAg ZGlyIGZvciBhIGR1bXBzLgorbXkgJHRlbXBkaXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czo6dGVtcGRpcjsKKworIyBDYW4gYmUgY2hhbmdlZCB0byB0ZXN0IHRoZSBvdGhlciBtb2Rl cy4KK215ICRtb2RlID0gJEVOVntQR19URVNUX1BHX1VQR1JBREVfTU9ERX0gfHwgJy0tY29w eSc7CisKKyMgSGFuZHkgcGdfcmVzZXR3YWwgd3JhcHBlcgorc3ViIHJlc2V0X214b2ZmCit7 CisJbXkgJWFyZ3MgPSBAXzsKKworCW15ICRub2RlID0gJGFyZ3N7bm9kZX07CisJbXkgJG9m ZnNldCA9ICRhcmdze29mZnNldH07CisJbXkgJG11bHRpID0gJGFyZ3N7bXVsdGl9OworCW15 ICRibGNrc3ogPSBzdWIgIyBHZXQgYmxvY2sgc2l6ZQorCXsKKwkJbXkgJG91dCA9IChydW5f Y29tbWFuZChbICdwZ19yZXNldHdhbCcsICctLWRyeS1ydW4nLAorCQkJCQkJCQkgJG5vZGUt PmRhdGFfZGlyIF0pKVswXTsKKwkJJG91dCA9fiAvXkRhdGFiYXNlIGJsb2NrIHNpemU6ICoo XGQrKSQvbSBvciBkaWU7CisJCXJldHVybiAkMTsKKwl9LT4oKTsKKworCW15IEBjbWQ7CisK KwkjIFJlc2V0IGNsdXN0ZXIKKwlAY21kID0gKCdwZ19yZXNldHdhbCcsICctLXBnZGF0YScg PT4gJG5vZGUtPmRhdGFfZGlyKTsKKwlpZiAoZGVmaW5lZCgkb2Zmc2V0KSkKKwl7CisJCXB1 c2ggQGNtZCwgJy0tbXVsdGl4YWN0LW9mZnNldCcgPT4gJG9mZnNldDsKKwl9CisJaWYgKGRl ZmluZWQoJG11bHRpKSkKKwl7CisJCXB1c2ggQGNtZCwgIi0tbXVsdGl4YWN0LWlkcz0kbXVs dGksJG11bHRpIjsKKwl9CisJY29tbWFuZF9vayhcQGNtZCwgJ3Jlc2V0IG11bHRpL29mZnNl dCcpOworCisJbXkgJG5faXRlbXM7CisJbXkgJHNlZ25hbWU7CisKKwkjIEZpbGwgZW1wdHkg cGdfbXVsdGl4YWN0IHNlZ21lbnRzCisJaWYgKGRlZmluZWQoJG9mZnNldCkpCisJeworCQkk bl9pdGVtcyA9IDMyICogaW50KCRibGNrc3ogLyAyMCkgKiA0OworCQkkc2VnbmFtZSA9IHNw cmludGYgIiUwMTVYIiwgKCRvZmZzZXQgLyAkbl9pdGVtcyk7CisJCSRzZWduYW1lID0gJG5v ZGUtPmRhdGFfZGlyIC4gIi9wZ19tdWx0aXhhY3QvbWVtYmVycy8iIC4gJHNlZ25hbWU7CisK KwkJQGNtZCA9ICgnZGQnKTsKKwkJcHVzaCBAY21kLCAiaWY9L2Rldi96ZXJvIjsKKwkJcHVz aCBAY21kLCAib2Y9IiAuICRzZWduYW1lOworCQlwdXNoIEBjbWQsICJicz0kYmxja3N6IjsK KwkJcHVzaCBAY21kLCAiY291bnQ9MzIiOworCQljb21tYW5kX29rKFxAY21kLCAnZmlsbCBl bXB0eSBtdWx0aXhhY3QtbWVtYmVycycpOworCX0KKworCWlmIChkZWZpbmVkKCRtdWx0aSkp CisJeworCQkkbl9pdGVtcyA9IDMyICogaW50KCRibGNrc3ogLyA4KTsKKwkJJHNlZ25hbWUg PSBzcHJpbnRmICIlMDRYIiwgJG11bHRpIC8gJG5faXRlbXM7CisJCSRzZWduYW1lID0gJG5v ZGUtPmRhdGFfZGlyIC4gIi9wZ19tdWx0aXhhY3Qvb2Zmc2V0cy8iIC4gJHNlZ25hbWU7CisK KwkJQGNtZCA9ICgnZGQnKTsKKwkJcHVzaCBAY21kLCAiaWY9L2Rldi96ZXJvIjsKKwkJcHVz aCBAY21kLCAib2Y9IiAuICRzZWduYW1lOworCQlwdXNoIEBjbWQsICJicz0kYmxja3N6IjsK KwkJcHVzaCBAY21kLCAiY291bnQ9MzIiOworCQljb21tYW5kX29rKFxAY21kLCAnZmlsbCBl bXB0eSBtdWx0aXhhY3Qtb2Zmc2V0cycpOworCX0KK30KKworc3ViIGdldF9kdW1wX2Zvcl9j b21wYXJpc29uCit7CisJbXkgKCRub2RlLCAkZGIsICRmaWxlX3ByZWZpeCwgJGFkanVzdF9j aGlsZF9jb2x1bW5zKSA9IEBfOworCisJbXkgJGR1bXBmaWxlID0gJHRlbXBkaXIgLiAnLycg LiAkZmlsZV9wcmVmaXggLiAnLnNxbCc7CisJbXkgJGR1bXBfYWRqdXN0ZWQgPSAiJHtkdW1w ZmlsZX1fYWRqdXN0ZWQiOworCisJb3BlbihteSAkZGgsICc+JywgJGR1bXBfYWRqdXN0ZWQp CisJICB8fCBkaWUgImNvdWxkIG5vdCBvcGVuICRkdW1wX2FkanVzdGVkIGZvciB3cml0aW5n ICQhIjsKKworCSRub2RlLT5ydW5fbG9nKAorCQlbCisJCQkncGdfZHVtcCcsICctLW5vLXN5 bmMnLAorCQkJJy0tcmVzdHJpY3Qta2V5JyA9PiAndGVzdCcsCisJCQknLWQnID0+ICRub2Rl LT5jb25uc3RyKCRkYiksCisJCQknLWYnID0+ICRkdW1wZmlsZQorCQldKTsKKworCXByaW50 ICRkaCBhZGp1c3RfcmVncmVzc19kdW1wZmlsZShzbHVycF9maWxlKCRkdW1wZmlsZSksCisJ CSRhZGp1c3RfY2hpbGRfY29sdW1ucyk7CisJY2xvc2UoJGRoKTsKKworCXJldHVybiAkZHVt cF9hZGp1c3RlZDsKK30KKworIyBDcmVhdGUgb2xkIG5vZGUKK215ICRvbGQgPSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm9sZCIpOworJG9sZC0+aW5pdDsKK3Jlc2V0X214 b2ZmKG5vZGUgPT4gJG9sZCwgbXVsdGkgPT4gNDI5NDk2NzI5NSwgb2Zmc2V0ID0+IDQyOTQ5 NjcyOSk7CisKKyRvbGQtPnN0YXJ0OworJG9sZC0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCitx cSgKKwlDUkVBVEUgVEFCTEUgdGVzdF90YWJsZSAoaWQgaW50ZWdlciBOT1QgTlVMTCBQUklN QVJZIEtFWSwgdmFsIHRleHQpOworCUlOU0VSVCBJTlRPIHRlc3RfdGFibGUgVkFMVUVTICgx LCAnYScpOworKSk7CisKK215ICRjb25uMSA9ICRvbGQtPmJhY2tncm91bmRfcHNxbCgncG9z dGdyZXMnKTsKK215ICRjb25uMiA9ICRvbGQtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMn KTsKKworJGNvbm4xLT5xdWVyeV9zYWZlKHFxKAorCUJFR0lOOworCVNFTEVDVCAqIEZST00g dGVzdF90YWJsZSBXSEVSRSBpZCA9IDEgRk9SIFNIQVJFOworKSk7CiskY29ubjItPnF1ZXJ5 X3NhZmUocXEoCisJQkVHSU47CisJU0VMRUNUICogRlJPTSB0ZXN0X3RhYmxlIFdIRVJFIGlk ID0gMSBGT1IgU0hBUkU7CispKTsKKworJGNvbm4xLT5xdWVyeV9zYWZlKHFxKENPTU1JVDsp KTsKKyRjb25uMi0+cXVlcnlfc2FmZShxcShDT01NSVQ7KSk7CisKKyRjb25uMS0+cXVpdDsK KyRjb25uMi0+cXVpdDsKKworJG9sZC0+c3RvcDsKKworIyBDcmVhdGUgbmV3IG5vZGUKK215 ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm5ldyIpOworJG5ldy0+ aW5pdDsKKworIyBSdW4gcGdfdXBncmFkZQorY29tbWFuZF9vaygKKwlbCisJCSdwZ191cGdy YWRlJywgJy0tbm8tc3luYycsCisJCSctLW9sZC1kYXRhZGlyJyA9PiAkb2xkLT5kYXRhX2Rp ciwKKwkJJy0tbmV3LWRhdGFkaXInID0+ICRuZXctPmRhdGFfZGlyLAorCQknLS1vbGQtYmlu ZGlyJyA9PiAkb2xkLT5jb25maWdfZGF0YSgnLS1iaW5kaXInKSwKKwkJJy0tbmV3LWJpbmRp cicgPT4gJG5ldy0+Y29uZmlnX2RhdGEoJy0tYmluZGlyJyksCisJCSctLXNvY2tldGRpcicg PT4gJG5ldy0+aG9zdCwKKwkJJy0tb2xkLXBvcnQnID0+ICRvbGQtPnBvcnQsCisJCSctLW5l dy1wb3J0JyA9PiAkbmV3LT5wb3J0LAorCQkkbW9kZSwKKwldLAorCSdydW4gb2YgcGdfdXBn cmFkZSBmb3IgbmV3IGluc3RhbmNlJyk7CitvayggIS1kICRuZXctPmRhdGFfZGlyIC4gIi9w Z191cGdyYWRlX291dHB1dC5kIiwKKwkicGdfdXBncmFkZV9vdXRwdXQuZC8gcmVtb3ZlZCBh ZnRlciBwZ191cGdyYWRlIHN1Y2Nlc3MiKTsKKworJG9sZC0+c3RhcnQ7CitteSAkc3JjX2R1 bXAgPQorCWdldF9kdW1wX2Zvcl9jb21wYXJpc29uKCRvbGQsICdwb3N0Z3JlcycsCisJCQkJ CQkJIm9sZG5vZGVfMV9kdW1wIiwgMCk7Ciskb2xkLT5zdG9wOworCiskbmV3LT5zdGFydDsK K215ICRkc3RfZHVtcCA9CisJZ2V0X2R1bXBfZm9yX2NvbXBhcmlzb24oJG5ldywgJ3Bvc3Rn cmVzJywKKwkJCQkJCQkibmV3bm9kZV8xX2R1bXAiLCAwKTsKKyRuZXctPnN0b3A7CisKK2Nv bXBhcmVfZmlsZXMoJHNyY19kdW1wLCAkZHN0X2R1bXAsCisJJ2R1bXAgb3V0cHV0cyBmcm9t IG9yaWdpbmFsIGFuZCByZXN0b3JlZCByZWdyZXNzaW9uIGRhdGFiYXNlcyBtYXRjaCcpOwor Citkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDcuMwoK --------------MsYmZqOqmhDH81OSlLXN4Y7x Content-Type: text/x-patch; charset=UTF-8; name="v26-0009-TEST-add-consume_multixids-function.patch" Content-Disposition: attachment; filename="v26-0009-TEST-add-consume_multixids-function.patch" Content-Transfer-Encoding: base64 RnJvbSBlMDIxYTZhYTY5ZjkzZmY5YzhiYzlmZWVjMzdkMjcyYzYzZGJlNDk1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMSBBcHIgMjAyNSAyMTowMTowNyArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjI2IDA5LzEwXSBURVNUOiBhZGQgY29uc3VtZV9tdWx0aXhpZHMg ZnVuY3Rpb24KCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC9NYWtlZmls ZSAgICAgIHwgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC9tZXNvbi5i dWlsZCAgIHwgIDEgKwogLi4uL3hpZF93cmFwYXJvdW5kL211bHRpeGlkX3dyYXBhcm91bmQu YyAgICAgIHwgOTYgKysrKysrKysrKysrKysrKysrKwogLi4uL3hpZF93cmFwYXJvdW5kL3hp ZF93cmFwYXJvdW5kLS0xLjAuc3FsICAgIHwgIDQgKwogNCBmaWxlcyBjaGFuZ2VkLCAxMDIg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMveGlk X3dyYXBhcm91bmQvbXVsdGl4aWRfd3JhcGFyb3VuZC5jCgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMv eGlkX3dyYXBhcm91bmQvTWFrZWZpbGUKaW5kZXggN2E2ZTBmNjY3NjIuLmViYjNkOGZjYjNl IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL01ha2VmaWxl CisrKyBiL3NyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQvTWFrZWZpbGUKQEAgLTMs NiArMyw3IEBACiBNT0RVTEVfYmlnID0geGlkX3dyYXBhcm91bmQKIE9CSlMgPSBcCiAJJChX SU4zMlJFUykgXAorCW11bHRpeGlkX3dyYXBhcm91bmQubyBcCiAJeGlkX3dyYXBhcm91bmQu bwogUEdGSUxFREVTQyA9ICJ4aWRfd3JhcGFyb3VuZCAtIHRlc3RzIGZvciBYSUQgd3JhcGFy b3VuZCIKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC9t ZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQvbWVzb24uYnVp bGQKaW5kZXggM2FlYzQzMGRmOGMuLmNlNGFjNDY4ODMwIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMveGlkX3dyYXBhcm91bmQvbWVzb24uYnVpbGQKQEAgLTEsNiArMSw3IEBACiAjIENv cHlyaWdodCAoYykgMjAyMy0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAogCiB4aWRfd3JhcGFyb3VuZF9zb3VyY2VzID0gZmlsZXMoCisgICdtdWx0aXhpZF93 cmFwYXJvdW5kLmMnLAogICAneGlkX3dyYXBhcm91bmQuYycsCiApCiAKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQvbXVsdGl4aWRfd3JhcGFyb3VuZC5j IGIvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC9tdWx0aXhpZF93cmFwYXJvdW5k LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFmNTY3YzZlNTQx Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC9t dWx0aXhpZF93cmFwYXJvdW5kLmMKQEAgLTAsMCArMSw5NiBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIG11bHRpeGlkX3dyYXBhcm91bmQuYworICoJCVV0aWxpdGllcyBm b3IgdGVzdGluZyBtdWx0aXhpZHMKKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL3Rlc3QvbW9k dWxlcy94aWRfd3JhcGFyb3VuZC9tdWx0aXhpZF93cmFwYXJvdW5kLmMKKyAqCisgKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVk ZSAiYWNjZXNzL211bHRpeGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5j bHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVk ZSAidXRpbHMveGlkOC5oIgorCitzdGF0aWMgaW50IG14YWN0TWVtYmVyQ29tcGFyYXRvcihj b25zdCB2b2lkICphcmcxLCBjb25zdCB2b2lkICphcmcyKTsKKworLyoKKyAqIENvbnN1bWUg dGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbXVsdGktWElEcywgd2l0aCBzcGVjaWZpZWQgbnVt YmVyIG9mCisgKiBtZW1iZXJzIGVhY2guCisgKi8KK1BHX0ZVTkNUSU9OX0lORk9fVjEoY29u c3VtZV9tdWx0aXhpZHMpOworRGF0dW0KK2NvbnN1bWVfbXVsdGl4aWRzKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJaW50NjQJCW5tdWx0aXMgPSBQR19HRVRBUkdfSU5UNjQoMCk7CisJaW50 MzIJCW5tZW1iZXJzID0gUEdfR0VUQVJHX0lOVDMyKDEpOworCU11bHRpWGFjdE1lbWJlciAq bWVtYmVyczsKKwlNdWx0aVhhY3RJZAlsYXN0bXhpZCA9IEludmFsaWRNdWx0aVhhY3RJZDsK KworCWlmIChubXVsdGlzIDwgMCkKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgbnhpZHMgYXJn dW1lbnQ6ICUiIFBSSWQ2NCwgbm11bHRpcyk7CisJaWYgKG5tZW1iZXJzIDwgMSkKKwkJZWxv ZyhFUlJPUiwgImludmFsaWQgbm1lbWJlcnMgYXJndW1lbnQ6ICVkIiwgbm1lbWJlcnMpOwor CisJLyoKKwkgKiBXZSBjb25zdW1lIFhJRHMgYnkgY2FsbGluZyBHZXROZXdUcmFuc2FjdGlv bklkKHRydWUpLCB3aGljaCBtYXJrcyB0aGUKKwkgKiBjb25zdW1lZCBYSURzIGFzIHN1YnRy YW5zYWN0aW9ucyBvZiB0aGUgY3VycmVudCB0b3AtbGV2ZWwgdHJhbnNhY3Rpb24uCisJICog Rm9yIHRoYXQgdG8gd29yaywgdGhpcyB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgYSB0b3AtbGV2 ZWwgWElELgorCSAqCisJICogR2V0TmV3VHJhbnNhY3Rpb25JZCByZWdpc3RlcnMgdGhlbSBp biB0aGUgc3VieGlkIGNhY2hlIGluIFBHUFJPQywgdW50aWwKKwkgKiB0aGUgY2FjaGUgb3Zl cmZsb3dzLCBidXQgYmV5b25kIHRoYXQsIHdlIGRvbid0IGtlZXAgdHJhY2sgb2YgdGhlCisJ ICogY29uc3VtZWQgWElEcy4KKwkgKi8KKwkodm9pZCkgR2V0VG9wVHJhbnNhY3Rpb25JZCgp OworCisJbWVtYmVycyA9IHBhbGxvYygobm11bHRpcyArIG5tZW1iZXJzKSAqIHNpemVvZihN dWx0aVhhY3RNZW1iZXIpKTsKKwlmb3IgKGludDMyIGkgPSAwOyBpIDwgbm11bHRpcyArIG5t ZW1iZXJzOyBpKyspCisJeworCQlGdWxsVHJhbnNhY3Rpb25JZCB4aWQ7CisKKwkJeGlkID0g R2V0TmV3VHJhbnNhY3Rpb25JZCh0cnVlKTsKKwkJbWVtYmVyc1tpXS54aWQgPSBYaWRGcm9t RnVsbFRyYW5zYWN0aW9uSWQoeGlkKTsKKwkJbWVtYmVyc1tpXS5zdGF0dXMgPSBNdWx0aVhh Y3RTdGF0dXNGb3JLZXlTaGFyZTsKKwl9CisJLyoKKwkgKiBwcmUtc29ydCB0aGUgYXJyYXkg bGlrZSBtWGFjdENhY2hlR2V0QnlTZXQgZG9lcywgc28gdGhhdCB0aGUgcXNvcnQgY2FsbAor CSAqIGluIG1YYWN0Q2FjaGVHZXRCeVNldCgpIGlzIGNoZWFwZXIuCisJICovCisJcXNvcnQo bWVtYmVycywgbm11bHRpcyArIG5tZW1iZXJzLCBzaXplb2YoTXVsdGlYYWN0TWVtYmVyKSwg bXhhY3RNZW1iZXJDb21wYXJhdG9yKTsKKworCWZvciAoaW50NjQgaSA9IDA7IGkgPCBubXVs dGlzOyBpKyspCisJeworCQlsYXN0bXhpZCA9IE11bHRpWGFjdElkQ3JlYXRlRnJvbU1lbWJl cnMobm1lbWJlcnMsICZtZW1iZXJzW2ldKTsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK Kwl9CisKKwlwZnJlZShtZW1iZXJzKTsKKworCVBHX1JFVFVSTl9UUkFOU0FDVElPTklEKGxh c3RteGlkKTsKK30KKworLyogY29waWVkIGZyb20gbXVsdGl4YWN0LmMgKi8KK3N0YXRpYyBp bnQKK214YWN0TWVtYmVyQ29tcGFyYXRvcihjb25zdCB2b2lkICphcmcxLCBjb25zdCB2b2lk ICphcmcyKQoreworCU11bHRpWGFjdE1lbWJlciBtZW1iZXIxID0gKihjb25zdCBNdWx0aVhh Y3RNZW1iZXIgKikgYXJnMTsKKwlNdWx0aVhhY3RNZW1iZXIgbWVtYmVyMiA9ICooY29uc3Qg TXVsdGlYYWN0TWVtYmVyICopIGFyZzI7CisKKwlpZiAobWVtYmVyMS54aWQgPiBtZW1iZXIy LnhpZCkKKwkJcmV0dXJuIDE7CisJaWYgKG1lbWJlcjEueGlkIDwgbWVtYmVyMi54aWQpCisJ CXJldHVybiAtMTsKKwlpZiAobWVtYmVyMS5zdGF0dXMgPiBtZW1iZXIyLnN0YXR1cykKKwkJ cmV0dXJuIDE7CisJaWYgKG1lbWJlcjEuc3RhdHVzIDwgbWVtYmVyMi5zdGF0dXMpCisJCXJl dHVybiAtMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv eGlkX3dyYXBhcm91bmQveGlkX3dyYXBhcm91bmQtLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1 bGVzL3hpZF93cmFwYXJvdW5kL3hpZF93cmFwYXJvdW5kLS0xLjAuc3FsCmluZGV4IDk2MzU2 YjRiOTc0Li5lZDc1MjBjM2Q4NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy94aWRf d3JhcGFyb3VuZC94aWRfd3JhcGFyb3VuZC0tMS4wLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3hpZF93cmFwYXJvdW5kL3hpZF93cmFwYXJvdW5kLS0xLjAuc3FsCkBAIC0xMCwzICsx MCw3IEBAIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CiBDUkVBVEUgRlVOQ1RJ T04gY29uc3VtZV94aWRzX3VudGlsKHRhcmdldHhpZCB4aWQ4KQogUkVUVVJOUyB4aWQ4IFZP TEFUSUxFIFBBUkFMTEVMIFVOU0FGRSBTVFJJQ1QKIEFTICdNT0RVTEVfUEFUSE5BTUUnIExB TkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiBjb25zdW1lX211bHRpeGlkcyhubXVsdGlz IGJpZ2ludCwgbm1lbWJlcnMgaW50NCkKK1JFVFVSTlMgYmlnaW50IFZPTEFUSUxFIFBBUkFM TEVMIFVOU0FGRSBTVFJJQ1QKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7Ci0t IAoyLjQ3LjMKCg== --------------MsYmZqOqmhDH81OSlLXN4Y7x Content-Type: text/x-patch; charset=UTF-8; name="v26-0010-TEST-Original-pg_upgrade-test-case.patch" Content-Disposition: attachment; filename="v26-0010-TEST-Original-pg_upgrade-test-case.patch" Content-Transfer-Encoding: base64 RnJvbSBjMTExMjM5YTIzMTZmZTVkMTBlMjM2ZTQyNGZmMTUzMDkwYWU5NDM0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMTQgTm92IDIwMjUgMDA6MzE6MzcgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyNiAxMC8xMF0gVEVTVDogT3JpZ2luYWwgcGdfdXBncmFkZSB0 ZXN0IGNhc2UKCi0tLQogc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxkICAgICAgICAg fCAgIDEgKwogc3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA5X214b2ZmX29yaWcucGwgfCA0NjMg KysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA0NjQgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS90LzAwOV9t eG9mZl9vcmlnLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1 aWxkIGIvc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxkCmluZGV4IDI4Y2QyOWQ2NjZl Li5kYmUyY2U5ZGU5ZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1 aWxkCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZApAQCAtNTIsNiArNTIs NyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDZfdHJhbnNmZXJfbW9kZXMucGwnLAogICAg ICAgJ3QvMDA3X211bHRpeGFjdF9jb252ZXJzaW9uLnBsJywKICAgICAgICd0LzAwOF9tdWx0 aV93cmFwLnBsJywKKyAgICAgICd0LzAwOV9teG9mZl9vcmlnLnBsJywKICAgICBdLAogICAg ICd0ZXN0X2t3YXJncyc6IHsncHJpb3JpdHknOiA0MH0sICMgcGdfdXBncmFkZSB0ZXN0cyBh cmUgc2xvdwogICB9LApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA5X214 b2ZmX29yaWcucGwgYi9zcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDlfbXhvZmZfb3JpZy5wbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzIwNDMyNWY4NzMKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDlfbXhvZmZfb3JpZy5w bApAQCAtMCwwICsxLDQ2MyBAQAorCisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5n cyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIE1hdGg6OkJpZ0ludDsKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFBv c3RncmVTUUw6OlRlc3Q6OkFkanVzdER1bXA7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6QWRq dXN0VXBncmFkZTsKK3VzZSBUZXN0OjpNb3JlOworCisjIFRoaXMgdGVzdCBpbnZvbHZlcyBk aWZmZXJlbnQgbXVsdGl0cmFuc2FjdGlvbiBzdGF0ZXMsIHNpbWlsYXJseSB0byB0aGF0IG9m CisjIDAwMl9wZ191cGdyYWRlLnBsLgorCit1bmxlc3MgKGRlZmluZWQoJEVOVntvbGRpbnN0 YWxsfSkpCit7CisJcGxhbiBza2lwX2FsbCA9PgorCQkndG8gcnVuIHRlc3Qgc2V0IG9sZGlu c3RhbGwgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIHByZSA2NC1iaXQgbXhvZmYgY2x1 c3Rlcic7Cit9CisKKyMgVGVtcCBkaXIgZm9yIGEgZHVtcHMuCitteSAkdGVtcGRpciA9IFBv c3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworCisjIENhbiBiZSBjaGFuZ2VkIHRv IHRlc3QgdGhlIG90aGVyIG1vZGVzLgorbXkgJG1vZGUgPSAkRU5We1BHX1RFU1RfUEdfVVBH UkFERV9NT0RFfSB8fCAnLS1jb3B5JzsKKworc3ViIHV0aWxpdHlfcGF0aAoreworCW15ICRu b2RlID0gc2hpZnQ7CisJbXkgJG5hbWUgPSBzaGlmdDsKKworCW15ICRiaW5fcGF0aCA9IGRl ZmluZWQoJG5vZGUtPmluc3RhbGxfcGF0aCkgPworCQkkbm9kZS0+aW5zdGFsbF9wYXRoIC4g Ii9iaW4vJG5hbWUiIDogJG5hbWU7CisKKwlyZXR1cm4gJGJpbl9wYXRoOworfQorCisjIEdl dCBOZXh0TXVsdGlPZmZzZXQuCitzdWIgbmV4dF9teG9mZgoreworCW15ICRub2RlID0gc2hp ZnQ7CisKKwlteSAkcGdfY29udHJvbGRhdGFfcGF0aCA9IHV0aWxpdHlfcGF0aCgkbm9kZSwg J3BnX2NvbnRyb2xkYXRhJyk7CisJbXkgKCRzdGRvdXQsICRzdGRlcnIpID0gcnVuX2NvbW1h bmQoWyAkcGdfY29udHJvbGRhdGFfcGF0aCwKKwkJCQkJCQkJCQkJJG5vZGUtPmRhdGFfZGly IF0pOworCW15IEBjb250cm9sX2RhdGEgPSBzcGxpdCgiXG4iLCAkc3Rkb3V0KTsKKwlteSAk bmV4dF9teG9mZiA9IHVuZGVmOworCisJZm9yZWFjaCAoQGNvbnRyb2xfZGF0YSkKKwl7CisJ CWlmICgkXyA9fiAvXkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OlxzKigu KikkL21nKQorCQl7CisJCQkkbmV4dF9teG9mZiA9ICQxOworCQkJbGFzdDsKKwkJfQorCX0K KwlkaWUgIk5leHRNdWx0aU9mZnNldCBub3QgZm91bmQgaW4gY29udHJvbCBmaWxlXG4iCisJ CXVubGVzcyBkZWZpbmVkKCRuZXh0X214b2ZmKTsKKworCXJldHVybiAkbmV4dF9teG9mZjsK K30KKworIyBDb25zdW1lIGFyb3VuZCAxMGsgb2YgbXhvZmZzZXRzLgorc3ViIG14YWN0X2Vh dGVyCit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkdGJsID0gJ0ZPTyc7CisKKwlteSAo JG14b2ZmMSwgJG14b2ZmMik7CisKKwkkbXhvZmYxID0gbmV4dF9teG9mZigkbm9kZSk7CisJ JG5vZGUtPnN0YXJ0OworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkNSRUFU RSBUQUJMRSAke3RibH0gKEkgSU5UIFBSSU1BUlkgS0VZLCBOX1VQREFURUQgSU5UKSAiIC4K KwkJIiAgICAgICBXSVRIIChBVVRPVkFDVVVNX0VOQUJMRUQ9RkFMU0UpOyIgLgorCQkiSU5T RVJUIElOVE8gJHt0Ymx9IFNFTEVDVCBHLCAwIEZST00gR0VORVJBVEVfU0VSSUVTKDEsIDUw KSBHOyIpOworCisJIyBjb25zdW1lIGFyb3VuZCAxMGsgbXhvZmYKKwlteSAkbmNsaWVudHMg PSAxMDsKKwlteSAkdXBkYXRlX2V2ZXJ5ID0gNzU7CisJbXkgQGNvbm5lY3Rpb25zID0gKCk7 CisKKwlmb3IgKDAuLiRuY2xpZW50cykKKwl7CisJCW15ICRjb25uID0gJG5vZGUtPmJhY2tn cm91bmRfcHNxbCgncG9zdGdyZXMnKTsKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkJFR0lOIik7 CisKKwkJcHVzaChAY29ubmVjdGlvbnMsICRjb25uKTsKKwl9CisKKwlmb3IgKG15ICRpID0g MDsgJGkgPCAxMDAwOyAkaSsrKQorCXsKKwkJbXkgJGNvbm4gPSAkY29ubmVjdGlvbnNbJGkg JSAkbmNsaWVudHNdOworCisJCSRjb25uLT5xdWVyeV9zYWZlKCJDT01NSVQ7Iik7CisJCSRj b25uLT5xdWVyeV9zYWZlKCJCRUdJTiIpOworCisJCWlmICgkaSAlICR1cGRhdGVfZXZlcnkg PT0gMCkKKwkJeworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJCQkJIlVQREFURSAke3RibH0g U0VUICIgLgorCQkJCSJOX1VQREFURUQgPSBOX1VQREFURUQgKyAxICIgLgorCQkJCSJXSEVS RSBJID0gJHtpfSAlIDUwIik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkkY29ubi0+cXVlcnlf c2FmZSgKKwkJCQkiU0VMRUNUICogRlJPTSAke3RibH0gRk9SIEtFWSBTSEFSRSIpOworCQl9 CisJfQorCisJZm9yIG15ICRjb25uIChAY29ubmVjdGlvbnMpCisJeworCQkkY29ubi0+cXVp dCgpOworCX0KKworCSRub2RlLT5zdG9wOworCSRteG9mZjIgPSBuZXh0X214b2ZmKCRub2Rl KTsKKworCXJldHVybiAkbXhvZmYxLCAkbXhvZmYyOworfQorCisjIENvbnN1bWUgYXJvdW5k IDFNIG9mIG14b2Zmc2V0cy4KK3N1YiBteGFjdF9odWdlX2VhdGVyCit7CisJbXkgJG5vZGUg PSBzaGlmdDsKKwlteSAkdGJsID0gJ0ZPTyc7CisKKwlteSAoJG14b2ZmMSwgJG14b2ZmMik7 CisKKwkkbXhvZmYxID0gbmV4dF9teG9mZigkbm9kZSk7CisJJG5vZGUtPnN0YXJ0OworCSRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkNSRUFURSBUQUJMRSAke3RibH0gKEkg SU5UIFBSSU1BUlkgS0VZLCBOX1VQREFURUQgSU5UKSAiIC4KKwkJIiAgICAgICBXSVRIIChB VVRPVkFDVVVNX0VOQUJMRUQ9RkFMU0UpOyIgLgorCQkiSU5TRVJUIElOVE8gJHt0Ymx9IFNF TEVDVCBHLCAwIEZST00gR0VORVJBVEVfU0VSSUVTKDEsIDQpIEc7Iik7CisKKwlteSAkbmNs aWVudHMgPSAxMDA7CisJbXkgQGNvbm5lY3Rpb25zID0gKCk7CisJbXkgJHRpbWVvdXQgPSAx MCAqICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0OworCisJZm9y ICgwLi4kbmNsaWVudHMpCisJeworCQlteSAkY29ubiA9ICRub2RlLT5iYWNrZ3JvdW5kX3Bz cWwoJ3Bvc3RncmVzJywKKwkJCQkJCQkJCQkgIHRpbWVvdXQgPT4gJHRpbWVvdXQpOworCQkk Y29ubi0+cXVlcnlfc2FmZSgiQkVHSU4iKTsKKworCQlwdXNoKEBjb25uZWN0aW9ucywgJGNv bm4pOworCX0KKworCSMgSXQncyBhIGxvbmcgcHJvY2VzcywgYmV0dGVyIHRvIHRlbGwgYWJv dXQgcHJvZ3Jlc3MuCisJbXkgJG5fc3RlcHMgPSAxMDBfMDAwOworCW15ICRzdGVwID0gaW50 KCRuX3N0ZXBzIC8gMTApOworCisJZGlhZyAiXG5zdGFydCB0byBjb25zdW1lIG14b2Zmc2V0 cyAuLi5cbiI7CisJZm9yIChteSAkaSA9IDA7ICRpIDwgJG5fc3RlcHM7ICRpKyspCisJewor CQlteSAkY29ubiA9ICRjb25uZWN0aW9uc1skaSAlICRuY2xpZW50c107CisKKwkJJGNvbm4t PnF1ZXJ5X3NhZmUoIkNPTU1JVDsiKTsKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkJFR0lOIik7 CisKKwkJeworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJCQkJIlNFTEVDVCAqIEZST00gJHt0 Ymx9ICIgLgorCQkJCSJGT1IgS0VZIFNIQVJFIik7CisJCX0KKworCQlpZiAoJGkgJSAkc3Rl cCA9PSAwKQorCQl7CisJCQlteSAkZG9uZSA9IGludCgoJGkgLyAkbl9zdGVwcykgKiAxMDAp OworCQkJZGlhZyAiJGRvbmUlIGRvbmUuLi4iOworCQl9CisJfQorCisJZm9yIG15ICRjb25u IChAY29ubmVjdGlvbnMpCisJeworCQkkY29ubi0+cXVpdCgpOworCX0KKworCSRub2RlLT5z dG9wOworCSRteG9mZjIgPSBuZXh0X214b2ZmKCRub2RlKTsKKworCXJldHVybiAkbXhvZmYx LCAkbXhvZmYyOworfQorCisjIFNldCBvbGRlc3QgbXVsdGl4YWN0LW9mZnNldAorc3ViIHJl c2V0X214b2ZmCit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkb2Zmc2V0ID0gc2hpZnQ7 CisKKwlteSAkcGdfcmVzZXR3YWxfcGF0aCA9IHV0aWxpdHlfcGF0aCgkbm9kZSwgJ3BnX3Jl c2V0d2FsJyk7CisJIyBHZXQgYmxvY2sgc2l6ZQorCW15ICRvdXQgPSAocnVuX2NvbW1hbmQo WyAkcGdfcmVzZXR3YWxfcGF0aCwgJy0tZHJ5LXJ1bicsCisJCQkJCQkJICRub2RlLT5kYXRh X2RpciBdKSlbMF07CisJCSRvdXQgPX4gL15EYXRhYmFzZSBibG9jayBzaXplOiAqKFxkKykk L20gb3IgZGllOworCW15ICRibGNrc3ogPSAkMTsKKworCSMgUmVzZXQgdG8gbmV3IG9mZnNl dAorCW15IEBjbWQgPSAoJHBnX3Jlc2V0d2FsX3BhdGgsICctLXBnZGF0YScgPT4gJG5vZGUt PmRhdGFfZGlyKTsKKwlwdXNoIEBjbWQsICctLW11bHRpeGFjdC1vZmZzZXQnID0+ICRvZmZz ZXQ7CisJY29tbWFuZF9vayhcQGNtZCwgJ3NldCBvbGRlc3QgbXVsdGl4YWN0LW9mZnNldCcp OworCisJIyBGaWxsIGVtcHR5IHBnX211bHRpeGFjdC9tZW1iZXJzIHNlZ21lbnQKKwlteSAk bXVsdCA9IDMyICogaW50KCRibGNrc3ogLyAyMCkgKiA0OworCW15ICRzZWduYW1lID0gc3By aW50ZiAiJTA0WCIsICRvZmZzZXQgLyAkbXVsdDsKKworCW15IEBkZCA9ICgnZGQnKTsKKwlw dXNoIEBkZCwgImlmPS9kZXYvemVybyI7CisJcHVzaCBAZGQsICJvZj0iIC4gJG5vZGUtPmRh dGFfZGlyIC4gIi9wZ19tdWx0aXhhY3QvbWVtYmVycy8iIC4gJHNlZ25hbWU7CisJcHVzaCBA ZGQsICJicz0kYmxja3N6IjsKKwlwdXNoIEBkZCwgImNvdW50PTMyIjsKKwljb21tYW5kX29r KFxAZGQsICdmaWxsIGVtcHR5IG11bHRpeGFjdC1tZW1iZXJzJyk7Cit9CisKK3N1YiBnZXRf ZHVtcF9mb3JfY29tcGFyaXNvbgoreworCW15ICgkbm9kZSwgJGRiLCAkZmlsZV9wcmVmaXgs ICRhZGp1c3RfY2hpbGRfY29sdW1ucykgPSBAXzsKKworCW15ICRkdW1wZmlsZSA9ICR0ZW1w ZGlyIC4gJy8nIC4gJGZpbGVfcHJlZml4IC4gJy5zcWwnOworCW15ICRkdW1wX2FkanVzdGVk ID0gIiR7ZHVtcGZpbGV9X2FkanVzdGVkIjsKKworCW9wZW4obXkgJGRoLCAnPicsICRkdW1w X2FkanVzdGVkKQorCSAgfHwgZGllICJjb3VsZCBub3Qgb3BlbiAkZHVtcF9hZGp1c3RlZCBm b3Igd3JpdGluZyAkISI7CisKKwlteSAkcGdfZHVtcF9wYXRoID0gdXRpbGl0eV9wYXRoKCRu b2RlLCAncGdfZHVtcCcpOworCisJJG5vZGUtPnJ1bl9sb2coCisJCVsKKwkJCSRwZ19kdW1w X3BhdGgsICctLW5vLXN5bmMnLAorCQkJJy0tcmVzdHJpY3Qta2V5JyA9PiAndGVzdCcsCisJ CQknLWQnID0+ICRub2RlLT5jb25uc3RyKCRkYiksCisJCQknLWYnID0+ICRkdW1wZmlsZQor CQldKTsKKworCXByaW50ICRkaCBhZGp1c3RfcmVncmVzc19kdW1wZmlsZShzbHVycF9maWxl KCRkdW1wZmlsZSksCisJCSRhZGp1c3RfY2hpbGRfY29sdW1ucyk7CisJY2xvc2UoJGRoKTsK KworCXJldHVybiAkZHVtcF9hZGp1c3RlZDsKK30KKworIyBNYWluIHRlc3Qgd29ya2hvcnNl IHJvdXRpbmUuCisjIE1ha2UgcGdfdXBncmFkZSwgZHVtcCBkYXRhIGFuZCBjb21wYXJlIGl0 Lgorc3ViIHJ1bl90ZXN0Cit7CisJbXkgJHRhZyA9IHNoaWZ0OworCW15ICRvbGRub2RlID0g c2hpZnQ7CisJbXkgJG5ld25vZGUgPSBzaGlmdDsKKworCW15ICRwZ191cGdyYWRlX3BhdGgg PSB1dGlsaXR5X3BhdGgoJG5ld25vZGUsICdwZ191cGdyYWRlJyk7CisKKwljb21tYW5kX29r KAorCQlbCisJCQkkcGdfdXBncmFkZV9wYXRoLCAnLS1uby1zeW5jJywKKwkJCSctLW9sZC1k YXRhZGlyJyA9PiAkb2xkbm9kZS0+ZGF0YV9kaXIsCisJCQknLS1uZXctZGF0YWRpcicgPT4g JG5ld25vZGUtPmRhdGFfZGlyLAorCQkJJy0tb2xkLWJpbmRpcicgPT4gJG9sZG5vZGUtPmNv bmZpZ19kYXRhKCctLWJpbmRpcicpLAorCQkJJy0tbmV3LWJpbmRpcicgPT4gJG5ld25vZGUt PmNvbmZpZ19kYXRhKCctLWJpbmRpcicpLAorCQkJJy0tc29ja2V0ZGlyJyA9PiAkbmV3bm9k ZS0+aG9zdCwKKwkJCSctLW9sZC1wb3J0JyA9PiAkb2xkbm9kZS0+cG9ydCwKKwkJCSctLW5l dy1wb3J0JyA9PiAkbmV3bm9kZS0+cG9ydCwKKwkJCSRtb2RlLAorCQldLAorCQkncnVuIG9m IHBnX3VwZ3JhZGUgZm9yIG5ldyBpbnN0YW5jZScpOworCW9rKCAhLWQgJG5ld25vZGUtPmRh dGFfZGlyIC4gIi9wZ191cGdyYWRlX291dHB1dC5kIiwKKwkJInBnX3VwZ3JhZGVfb3V0cHV0 LmQvIHJlbW92ZWQgYWZ0ZXIgcGdfdXBncmFkZSBzdWNjZXNzIik7CisKKwkkb2xkbm9kZS0+ c3RhcnQ7CisJbXkgJHNyY19kdW1wID0KKwkJZ2V0X2R1bXBfZm9yX2NvbXBhcmlzb24oJG9s ZG5vZGUsICdwb3N0Z3JlcycsCisJCQkJCQkJCSJvbGRub2RlXyR7dGFnfV9kdW1wIiwgMCk7 CisJJG9sZG5vZGUtPnN0b3A7CisKKwkkbmV3bm9kZS0+c3RhcnQ7CisJbXkgJGRzdF9kdW1w ID0KKwkJZ2V0X2R1bXBfZm9yX2NvbXBhcmlzb24oJG5ld25vZGUsICdwb3N0Z3JlcycsCisJ CQkJCQkJCSJuZXdub2RlXyR7dGFnfV9kdW1wIiwgMCk7CisJJG5ld25vZGUtPnN0b3A7CisK Kwljb21wYXJlX2ZpbGVzKCRzcmNfZHVtcCwgJGRzdF9kdW1wLAorCQknZHVtcCBvdXRwdXRz IGZyb20gb3JpZ2luYWwgYW5kIHJlc3RvcmVkIHJlZ3Jlc3Npb24gZGF0YWJhc2VzIG1hdGNo Jyk7Cit9CisKK3N1YiB0b19oZXgKK3sKKwlteSAkYXJnID0gc2hpZnQ7CisKKwkkYXJnID0g TWF0aDo6QmlnSW50LT5uZXcoJGFyZyk7CisJJGFyZyA9ICRhcmctPmFzX2hleCgpOworCisJ cmV0dXJuICRhcmc7Cit9CisKKyMgY2FzZSAjMTogc3RhcnQgb2xkIG5vZGUgZnJvbSBkZWZh dWx0cworeworCW15ICR0YWcgPSAxOworCW15ICRvbGQgPQorCQlQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoIm9sZG5vZGUke3RhZ30iLAorCQkJCQkJCQkJICAgaW5zdGFsbF9w YXRoID0+ICRFTlZ7b2xkaW5zdGFsbH0pOworCSRvbGQtPmluaXQoZXh0cmEgPT4gWyctaydd KTsKKworCW15ICgkc3RhcnRfbXhvZmYsICRmaW5pc2hfbXhvZmYpID0gbXhhY3RfZWF0ZXIo JG9sZCk7CisKKwlteSAkbmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJu ZXdub2RlJHt0YWd9Iik7CisJJG5ldy0+aW5pdDsKKworCXJ1bl90ZXN0KCR0YWcsICRvbGQs ICRuZXcpOworCisJJHN0YXJ0X214b2ZmID0gdG9faGV4KCRzdGFydF9teG9mZik7CisJJGZp bmlzaF9teG9mZiA9IHRvX2hleCgkZmluaXNoX214b2ZmKTsKKworCW15ICRuZXh0X214b2Zm ID0gdG9faGV4KG5leHRfbXhvZmYoJG5ldykpOworCisJbm90ZSAiPj4+IGNhc2UgIyR7dGFn fVxuIiAuCisJCSAiIG9sZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0X214b2ZmfSB0byAke2Zp bmlzaF9teG9mZn1cbiIgLgorCQkgIiBuZXdub2RlIG14b2ZmICR7bmV4dF9teG9mZn1cbiI7 Cit9CisKKyMgY2FzZSAjMjogc3RhcnQgb2xkIG5vZGUgZnJvbSBiZWZvcmUgMzItYml0IHdy YXBhcm91bmQKK3sKKwlteSAkdGFnID0gMjsKKwlteSAkb2xkID0KKwkJUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3Rlci0+bmV3KCJvbGRub2RlJHt0YWd9IiwKKwkJCQkJCQkJCSAgIGluc3Rh bGxfcGF0aCA9PiAkRU5We29sZGluc3RhbGx9KTsKKworCSRvbGQtPmluaXQoZXh0cmEgPT4g WyctayddKTsKKwlyZXNldF9teG9mZigkb2xkLCAweEZGRkYwMDAwKTsKKworCW15ICgkc3Rh cnRfbXhvZmYsICRmaW5pc2hfbXhvZmYpID0gbXhhY3RfZWF0ZXIoJG9sZCk7CisKKwlteSAk bmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJuZXdub2RlJHt0YWd9Iik7 CisJJG5ldy0+aW5pdDsKKworCXJ1bl90ZXN0KCR0YWcsICRvbGQsICRuZXcpOworCisJJHN0 YXJ0X214b2ZmID0gdG9faGV4KCRzdGFydF9teG9mZik7CisJJGZpbmlzaF9teG9mZiA9IHRv X2hleCgkZmluaXNoX214b2ZmKTsKKworCW15ICRuZXh0X214b2ZmID0gdG9faGV4KG5leHRf bXhvZmYoJG5ldykpOworCisJbm90ZSAiPj4+IGNhc2UgIyR7dGFnfVxuIiAuCisJCSAiIG9s ZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0X214b2ZmfSB0byAke2ZpbmlzaF9teG9mZn1cbiIg LgorCQkgIiBuZXdub2RlIG14b2ZmICR7bmV4dF9teG9mZn1cbiI7Cit9CisKKyMgY2FzZSAj Mzogc3RhcnQgb2xkIG5vZGUgbmVhciAzMi1iaXQgd3JhcGFyb3VuZCBhbmQgcmVhY2ggd3Jh cGFyb3VuZCBzdGF0ZS4KK3sKKwlteSAkdGFnID0gMzsKKwlteSAkb2xkID0KKwkJUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJvbGRub2RlJHt0YWd9IiwKKwkJCQkJCQkJCSAg IGluc3RhbGxfcGF0aCA9PiAkRU5We29sZGluc3RhbGx9KTsKKworCSRvbGQtPmluaXQoZXh0 cmEgPT4gWyctayddKTsKKworCXJlc2V0X214b2ZmKCRvbGQsIDB4RkZGRkVDNzcpOworCW15 ICgkc3RhcnRfbXhvZmYsICRmaW5pc2hfbXhvZmYpID0gbXhhY3RfZWF0ZXIoJG9sZCk7CisK KwlteSAkbmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJuZXdub2RlJHt0 YWd9Iik7CisJJG5ldy0+aW5pdDsKKworCXJ1bl90ZXN0KCR0YWcsICRvbGQsICRuZXcpOwor CisJJHN0YXJ0X214b2ZmID0gdG9faGV4KCRzdGFydF9teG9mZik7CisJJGZpbmlzaF9teG9m ZiA9IHRvX2hleCgkZmluaXNoX214b2ZmKTsKKworCW15ICRuZXh0X214b2ZmID0gdG9faGV4 KG5leHRfbXhvZmYoJG5ldykpOworCisJbm90ZSAiPj4+IGNhc2UgIyR7dGFnfVxuIiAuCisJ CSAiIG9sZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0X214b2ZmfSB0byAke2ZpbmlzaF9teG9m Zn1cbiIgLgorCQkgIiBuZXdub2RlIG14b2ZmICR7bmV4dF9teG9mZn1cbiI7Cit9CisKKyMg Y2FzZSAjNDogc3RhcnQgb2xkIG5vZGUgZnJvbSBkZWZhdWx0cworeworCW15ICR0YWcgPSA0 OworCW15ICRvbGQgPQorCQlQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm9sZG5v ZGUke3RhZ30iLAorCQkJCQkJCQkJICAgaW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5zdGFs bH0pOworCisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCSRvbGQtPmFwcGVuZF9j b25mKCJwb3N0Z3Jlc3FsLmNvbmYiLCAibWF4X2Nvbm5lY3Rpb25zID0gMTI4Iik7CisKKwlk aWFnICJ0ZXN0ICMke3RhZ30gZm9yIG11bHRpcGxlIG14b2ZmIHNlZ21lbnRzIjsKKwlteSAo JHN0YXJ0X214b2ZmLCAkZmluaXNoX214b2ZmKSA9IG14YWN0X2h1Z2VfZWF0ZXIoJG9sZCk7 CisKKwlteSAkbmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJuZXdub2Rl JHt0YWd9Iik7CisJJG5ldy0+aW5pdDsKKworCXJ1bl90ZXN0KCR0YWcsICRvbGQsICRuZXcp OworCisJJHN0YXJ0X214b2ZmID0gdG9faGV4KCRzdGFydF9teG9mZik7CisJJGZpbmlzaF9t eG9mZiA9IHRvX2hleCgkZmluaXNoX214b2ZmKTsKKworCW15ICRuZXh0X214b2ZmID0gdG9f aGV4KG5leHRfbXhvZmYoJG5ldykpOworCisJbm90ZSAiPj4+IGNhc2UgIyR7dGFnfVxuIiAu CisJCSAiIG9sZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0X214b2ZmfSB0byAke2ZpbmlzaF9t eG9mZn1cbiIgLgorCQkgIiBuZXdub2RlIG14b2ZmICR7bmV4dF9teG9mZn1cbiI7Cit9CisK KyMgY2FzZSAjNTogc3RhcnQgb2xkIG5vZGUgZnJvbSBiZWZvcmUgMzItYml0IHdyYXBhcm91 bmQKK3sKKwlteSAkdGFnID0gNTsKKwlteSAkb2xkID0KKwkJUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCJvbGRub2RlJHt0YWd9IiwKKwkJCQkJCQkJCSAgIGluc3RhbGxfcGF0 aCA9PiAkRU5We29sZGluc3RhbGx9KTsKKworCSRvbGQtPmluaXQoZXh0cmEgPT4gWyctaydd KTsKKwkkb2xkLT5hcHBlbmRfY29uZigicG9zdGdyZXNxbC5jb25mIiwgIm1heF9jb25uZWN0 aW9ucyA9IDEyOCIpOworCXJlc2V0X214b2ZmKCRvbGQsIDB4RkYwMDAwMDApOworCisJZGlh ZyAidGVzdCAjJHt0YWd9IGZvciBtdWx0aXBsZSBteG9mZiBzZWdtZW50cyI7CisJbXkgKCRz dGFydF9teG9mZiwgJGZpbmlzaF9teG9mZikgPSBteGFjdF9odWdlX2VhdGVyKCRvbGQpOwor CisJbXkgJG5ldyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygibmV3bm9kZSR7 dGFnfSIpOworCSRuZXctPmluaXQ7CisKKwlydW5fdGVzdCgkdGFnLCAkb2xkLCAkbmV3KTsK KworCSRzdGFydF9teG9mZiA9IHRvX2hleCgkc3RhcnRfbXhvZmYpOworCSRmaW5pc2hfbXhv ZmYgPSB0b19oZXgoJGZpbmlzaF9teG9mZik7CisKKwlteSAkbmV4dF9teG9mZiA9IHRvX2hl eChuZXh0X214b2ZmKCRuZXcpKTsKKworCW5vdGUgIj4+PiBjYXNlICMke3RhZ31cbiIgLgor CQkgIiBvbGRub2RlIG14b2ZmIGZyb20gJHtzdGFydF9teG9mZn0gdG8gJHtmaW5pc2hfbXhv ZmZ9XG4iIC4KKwkJICIgbmV3bm9kZSBteG9mZiAke25leHRfbXhvZmZ9XG4iOworfQorCisj IGNhc2UgIzY6IHN0YXJ0IG9sZCBub2RlIG5lYXIgMzItYml0IHdyYXBhcm91bmQgYW5kIHJl YWNoIHdyYXBhcm91bmQgc3RhdGUuCit7CisJbXkgJHRhZyA9IDY7CisJbXkgJG9sZCA9CisJ CVBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygib2xkbm9kZSR7dGFnfSIsCisJCQkJ CQkJCQkgICBpbnN0YWxsX3BhdGggPT4gJEVOVntvbGRpbnN0YWxsfSk7CisKKwkkb2xkLT5p bml0KGV4dHJhID0+IFsnLWsnXSk7CisKKwlyZXNldF9teG9mZigkb2xkLCAweEZGRkZGRkZG IC0gNTAwXzAwMCk7CisJJG9sZC0+YXBwZW5kX2NvbmYoInBvc3RncmVzcWwuY29uZiIsICJt YXhfY29ubmVjdGlvbnMgPSAxMjgiKTsKKwlteSAoJHN0YXJ0X214b2ZmLCAkZmluaXNoX214 b2ZmKSA9IG14YWN0X2h1Z2VfZWF0ZXIoJG9sZCk7CisKKwlkaWFnICJ0ZXN0ICMke3RhZ30g Zm9yIG11bHRpcGxlIG14b2ZmIHNlZ21lbnRzIjsKKwlteSAkbmV3ID0gUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3Rlci0+bmV3KCJuZXdub2RlJHt0YWd9Iik7CisJJG5ldy0+aW5pdDsKKwor CXJ1bl90ZXN0KCR0YWcsICRvbGQsICRuZXcpOworCisJJHN0YXJ0X214b2ZmID0gdG9faGV4 KCRzdGFydF9teG9mZik7CisJJGZpbmlzaF9teG9mZiA9IHRvX2hleCgkZmluaXNoX214b2Zm KTsKKworCW15ICRuZXh0X214b2ZmID0gdG9faGV4KG5leHRfbXhvZmYoJG5ldykpOworCisJ bm90ZSAiPj4+IGNhc2UgIyR7dGFnfVxuIiAuCisJCSAiIG9sZG5vZGUgbXhvZmYgZnJvbSAk e3N0YXJ0X214b2ZmfSB0byAke2ZpbmlzaF9teG9mZn1cbiIgLgorCQkgIiBuZXdub2RlIG14 b2ZmICR7bmV4dF9teG9mZn1cbiI7Cit9CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi40Ny4z Cgo= --------------MsYmZqOqmhDH81OSlLXN4Y7x--