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 1vxViN-00GkHZ-1t for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 19:47:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxViL-008UOH-2K for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 19:47:30 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxViL-008UO9-0y for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 19:47:29 +0000 Received: from mail-ed1-x531.google.com ([2a00:1450:4864:20::531]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxViI-00000000Iwm-3R6n for pgsql-hackers@postgresql.org; Tue, 03 Mar 2026 19:47:29 +0000 Received: by mail-ed1-x531.google.com with SMTP id 4fb4d7f45d1cf-660d77cacc2so773283a12.1 for ; Tue, 03 Mar 2026 11:47:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772567246; cv=none; d=google.com; s=arc-20240605; b=B+Mp+dHFifkKHafV6XLBGWTpvmqrYYKSDpUyj63g5cqb4TAQep1vQXPuzOCxJXaAvD qgnGyrjxfHRi0poxt+WmqlLkm2nWhJClsWA0ekTHkiXXuQY0TUmbB0ZiFe2+4nHLC60n yOSBBNcTcB1VsKYf7W8uDqqxZG4PdgH0NW6k+u8pEeYk85DJgQDzZujUOVYsL/DReoT4 UliDZ0gxqoe0pvvU6PFvPvCSUuAGgTO6a54v+nicOywZtCLc7P5pnMHb6I/Q2iG1lHbJ nMh3O4yUNZwoQ8D+mWdXJVCOZU2XZGIOPkqXSPupKdA/DaeOLiIpTT139cokaZbVu6zo wMPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=1d4/Fh8b4hVrrh0NJfP96CkJtyHOr2HWCQYwl84yxn8=; fh=3NLjUma1u8tvN7CJjM8nTz1BQQ0RiERykU+rdmmuNP0=; b=iwi+/HvqhAZerGnEQ63YhVK64m+TfetnTGtEeWf9Q5giwVh/PXLhZ4teg4ujhHQlGr GI2cQw63w4FWXyIJuiFUDrTSRXSCW3Vm582VLS/sFJKA+2NCYrOvDRUu/ER7lXxl1Kwf alwz2JrglUqGTQIuNfu0P5VOPcVuBRWIgFhFeo+VKeNoWLrKFg16m+bnhBwykwv3SuhM 8nIJsWSI3yc3UHiqgmWmTP8QHOCMFQ0nG8rFLOuqmk3ns2z+Ot40VOXMJ/UnOp1Nrp/j 2qJxJLMeH5ad73uy+ikvu3ttgCiN4ZJ4SYbH6fux1xQAAUx88XyxBZiWi++eK+i9MkUq ci8w==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772567246; x=1773172046; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=1d4/Fh8b4hVrrh0NJfP96CkJtyHOr2HWCQYwl84yxn8=; b=T0tt38Snjlhk4NMriyKNl2wnH1GwKTo/+xGQ9MY3hqJEaArXod3pFdR/jTQtouDxe2 6QORMNxbDeWpICO1cnqCOmwcRcKt/0S4EM80U+YQjbw8Roc74nPJIy+Z2BWDyRrdWAHT zy9oe6JANECBz5hsA40oVUEb0GoqhLYvH2o3OiCe5lkm7QYuFfgjHh0l3k3vxzbfQvzK N6kDPagZDHLbZI1rPzUczDSMNINAVXwT1Einr56hm60l4wJndwU9fRL9SY3Ea03EezvQ jguRXWz1+rkbYUq6vbT/ZEpCeRC8Uk17edDkGDIkXHI4sNvphyVwN6RC+5DoBAcT8TwA v8Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772567246; x=1773172046; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=1d4/Fh8b4hVrrh0NJfP96CkJtyHOr2HWCQYwl84yxn8=; b=ORL55hK2uvS5gSC/z8QJssdSF9l/xZjMSQK6IuyO7NWA0eNdvsFu3msnrNUDjrdeGS IOIua5Z8XK2hVF1Gtijw81FdOS5/ZXV7S0BvQhQ3TSUJH39c8ZZ22dJ+QeK5V+F6Miha n1gyCKlSYfHK0pTptfQe8TNLTkUquXtNLIQpx15hiXMLbJe1j9glE16AlugIQMyE5fo4 InPKhhX8yw+IC+tEsfLKYzdHVCXTJX8wgn7RFyjV/ZS7tHPfO5AldXEUUyprX+HwprvE TOi6DSyv35jbg6qHOBJlt2QGcTmJTNT4tEhB6P+d0qn6sWOwxenvRypsCoD8cmEShwHy Os0g== X-Forwarded-Encrypted: i=1; AJvYcCX33+ZxAtZh8UG6s68BPVE8dDNshnWEudbPcz/Ol/igFKav+OxDdbI/ZG5L6WgH8Rqg0hSSOywNYlaw1+iy@postgresql.org X-Gm-Message-State: AOJu0YzMvAmnRU1f9NCTxPWEgjfrur80tpjFGJwGeugRLrZVD1Y8EmyP TWo/Emy1lgia4v5V1f8CvldGaLnEpuZMtNVd4fEjmnCIwBxjObVDIdl86Rqs8JBxrbqcv3j3G7Y FZmlQKbipwrM5TNN0+aQPvlLFPE/HxI8= X-Gm-Gg: ATEYQzwtR/u4B6mfjJibEQLK9fDYQFcAYa4sUhkcBS86jO66YK6hnWq0wY1JABDf9/l MlaYqgvk4GEbqtrJ7qjIbAZAM3r7/XPq4/nen1htw8WgZgT8YV/hb8n8dUpIHFiBxmFmnrmF6gq 7LXzJ0288qWporeY44yidZFfCRPehseiY4g2+cptQopaDLRSqD9mqWOfTWtpm45vZ0jpLO28NXc czOtmhFoSxUuJ9ptedGmDJaGxB3xu70xqS4r0dc7+CgmPr3Sk9zVF2KxYuR0ODCqRGcBzNUuzZa AmAFKMheldF/e1s6UmW2V7sULHjgEFvK9qOoIDFapDQue7a0vpzn9dJu6y05grTdVYci6vW/v5q oPKKvQr0Mqls8s2EGcTM= X-Received: by 2002:a05:6402:27cd:b0:65f:a9e9:5f07 with SMTP id 4fb4d7f45d1cf-660a463d93cmr1969566a12.13.1772567245747; Tue, 03 Mar 2026 11:47:25 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Melanie Plageman Date: Tue, 3 Mar 2026 14:47:13 -0500 X-Gm-Features: AaiRm52ACQhz4SLTk936DSMQ3ebkl1HbV51X8TkVR0EPHLAMwosvHuCeIQeDsvE Message-ID: Subject: Re: Don't synchronously wait for already-in-progress IO in read stream To: Nazir Bilal Yavuz Cc: Thomas Munro , Andres Freund , pgsql-hackers@postgresql.org, Peter Geoghegan , Tomas Vondra Content-Type: multipart/mixed; boundary="0000000000000630b5064c23f9ff" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000630b5064c23f9ff Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the review! On Thu, Feb 5, 2026 at 11:56=E2=80=AFAM Nazir Bilal Yavuz wrote: > > On Sat, 24 Jan 2026 at 00:04, Melanie Plageman > wrote: > > > - In the 004_read_stream tests, I wonder if there is a way to test > > that we don't wait for foreign IO until WaitReadBuffers(). We have > > tests for the stream accessing the same block, which in some cases > > will exercise the foreign IO path. But it doesn't distinguish between > > the old behavior -- waiting for the IO to complete when starting read > > IO on it -- and the new behavior -- not waiting until > > WaitReadBuffers(). That may not be possible to test, though. > > Won't 'stream accessing the same block test' almost always test the > new behavior (not waiting until WaitReadBuffers())? Having dedicated > tests for both cases would be helpful, though. Yea, I was thinking something like testing that if session A is blocked completing read of block 2 and session B is requesting blocks 2-4 that buffers containing blocks 3 and 4 are valid when session B is waiting on block 2 to finish. I started working on something but it needed some new infrastructure to check if the buffer is valid, and I wanted to see what others thought first. I did finally review Andres' test patches and have included my review feedback here as well. "aio: Refactor tests in preparation for more tests" (v4-0001) looks good to me as well. I included one tiny idea AI suggested to me in a follow-on patch (v4-0002). > diff --git a/src/test/modules/test_aio/t/004_read_stream.pl > b/src/test/modules/test_aio/t/004_read_stream.pl > +foreach my $method (TestAio::supported_io_methods()) > +{ > + $node->adjust_conf('postgresql.conf', 'io_method', 'worker'); > + $node->start(); > + test_io_method($method, $node); > + $node->stop(); > +} > > This seems wrong, we always test io_method=3Dworker. I think we need to > replace 'worker' with the $method. Also, we can add check below to the > test_io_method function in the 004_read_stream.pl: > ``` > is($node->safe_psql('postgres', 'SHOW io_method'), > $io_method, "$io_method: io_method set correctly"); Good catch. Fixed. I also found a few other small things in this patch (v4-0003) which I put in v4-0004. Some ideas I had that I didn't include in v4-0003 because its Andres patch and is subjective: For test_repeated_blocks, the first test: # test miss of the same block twice in a row $psql->query_safe( qq/ SELECT evict_rel('largeish'); /); $psql->query_safe( qq/ SELECT * FROM read_stream_for_blocks('largeish', ARRAY[0, 2, 2, 4, 4]); /); ok(1, "$io_method: stream missing the same block repeatedly"); It says that it will miss the same block repeatedly, is that because we won't start a read for any of the blocks until after read_stream_get_block has returned all of them? If so, could be clearer in the comment. Not everyone understands all the read stream internals. I know a lot of other tests do this, but I find it so hard to read the test with the SQL is totally left-aligned like that -- especially with comments interspersed. You can easily flow the queries on multiple lines and indent it more. For test_repeated_blocks, the second test: # test hit of the same block twice in a row $psql->query_safe( qq/ SELECT evict_rel('largeish'); /); $psql->query_safe( qq/ SELECT * FROM read_stream_for_blocks('largeish', ARRAY[0, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1, 0]); /); ok(1, "$io_method: stream accessing same block"); I assume that the second access of 2 is a hit because we actually did IO for the first one (unlike in the earlier case)? For test_inject_foreign: In general, I am not ramped up enough on injection point stuff to know if the actual new injection point stuff you added in test_aio.c is is correct and optimal, but I did review the read stream additions to test_aio.c and the tests added to 004_read_stream.pl. For test_inject_foreign, the 3rd test: # Test read stream encountering two buffers that are undergoing the sam= e # IO, started by another backend I see that psql_b is requesting 3 blocks which can be combined into 1 IO, which makes it different than the 1st foreign IO test case: ### # Test read stream encountering buffers undergoing IO in another backen= d, # with the other backend's reads succeeding. ### where psql_b only requests 1 but I don't really see how these are covering different code. Maybe if the read stream one (psql_a) is doing a combined IO it might exercise slightly different code, but otherwise I don't get it. > Nitpick but I prefer something like TrackBufferHit() or > CountBufferHit() as a function name instead of ProcessBufferHit(). > ProcessBufferHit() gives the impression that the function is doing a > job more than it currently does. Other than that, 0004 LGTM. I changed this in attached v4. - Melanie --0000000000000630b5064c23f9ff Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-aio-Refactor-tests-in-preparation-for-more-tests.patch" Content-Disposition: attachment; filename="v4-0001-aio-Refactor-tests-in-preparation-for-more-tests.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmb0piy00 RnJvbSAxZDJmNTY0YjIxMWE1OWZjNmVhNDgzZmJjZGRkNWZhNzg4YjM1MzRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgOSBTZXAgMjAyNSAxMDoxNDozNCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjQgMS82 XSBhaW86IFJlZmFjdG9yIHRlc3RzIGluIHByZXBhcmF0aW9uIGZvciBtb3JlIHRlc3RzCgpJbiBh IGZ1dHVyZSBjb21taXQgbW9yZSBBSU8gcmVsYXRlZCB0ZXN0cyBhcmUgZHVlIHRvIGJlIGludHJv ZHVjZWQuIEhvd2V2ZXIKMDAxX2Fpby5wbCBhbHJlYWR5IGlzIGZhaXJseSBsYXJnZS4KClRoaXMg Y29tbWl0IGludHJvZHVjZXMgYSBuZXcgVGVzdEFpbyBwYWNrYWdlIHdpdGggaGVscGVycyBmb3Ig d3JpdGluZyBBSU8KcmVsYXRlZCB0ZXN0cy4gVGhlbiBpdCB1c2VzIHRoZSBuZXcgaGVscGVycyB0 byBzaW1wbGlmeSB0aGUgZXhpc3RpbmcKMDAxX2Fpby5wbCBieSBpdGVyYXRpbmcgb3ZlciBhbGwg c3VwcG9ydGVkIGlvX21ldGhvZHMuIFRoaXMgd2lsbCBiZQpwYXJ0aWN1bGFybHkgaGVscGZ1bCBi ZWNhdXNlIGFkZGl0aW9uYWwgbWV0aG9kcyBhbHJlYWR5IGhhdmUgYmVlbiBzdWJtaXR0ZWQuCgpB ZGRpdGlvbmFsbHkgdGhpcyBjb21taXQgc3BsaXRzIG91dCB0ZXN0aW5nIG9mIGluaXRkYiB1c2lu ZyBhIG5vbi1kZWZhdWx0Cm1ldGhvZCBpbnRvIGl0cyBvd24gdGVzdC4gV2hpbGUgdGhhdCB0ZXN0 IGlzIHNvbWV3aGF0IGltcG9ydGFudCwgaXQncyBmYWlybHkKc2xvdyBhbmQgZG9lc24ndCBicmVh ayB0aGF0IG9mdGVuLiBGb3IgZGV2ZWxvcG1lbnQgdmVsb2NpdHkgaXQncyBoZWxwZnVsIGZvcgow MDFfYWlvLnBsIHRvIGJlIGZhc3Rlci4KCldoaWxlIHBhcnRpY3VsYXJseSB0aGUgbGF0dGVyIGNv dWxkIGJlbmVmaXQgZnJvbSBiZWluZyBpdHMgb3duIGNvbW1pdCwgaXQKc2VlbXMgdG8gaW50cm9k dWNlIG1vcmUgYmFjay1hbmQtZm9ydGggdGhhbiBpdCdzIHdvcnRoLgoKQXV0aG9yOiBBbmRyZXMg RnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLWJ5OiBOYXppciBCaWxhbCBZYXZ1 eiA8YnlhdnV6ODFAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogTWVsYW5pZSBQbGFnZW1hbiA8bWVs YW5pZXBsYWdlbWFuQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8K LS0tCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkICAgICB8ICAgMSArCiBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAxX2Fpby5wbCAgICB8IDE0MCArKysrKysrLS0t LS0tLS0tLS0tLS0tCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAzX2luaXRkYi5wbCB8 ICA3MSArKysrKysrKysrKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90L1Rlc3RBaW8ucG0g ICAgfCAgOTAgKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMjAzIGluc2VydGlvbnMo KyksIDk5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMv dGVzdF9haW8vdC8wMDNfaW5pdGRiLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90L1Rlc3RBaW8ucG0KCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby9tZXNvbi5i dWlsZAppbmRleCBmZWZhMjViYzVhYi4uMThhNzk3ZjNhM2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2Fpby9tZXNvbi5idWlsZApAQCAtMzIsNiArMzIsNyBAQCB0ZXN0cyArPSB7CiAgICAgJ3Rlc3Rz JzogWwogICAgICAgJ3QvMDAxX2Fpby5wbCcsCiAgICAgICAndC8wMDJfaW9fd29ya2Vycy5wbCcs CisgICAgICAndC8wMDNfaW5pdGRiLnBsJywKICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL3QvMDAxX2Fpby5wbAppbmRleCA1YzYzNGVjM2NhOS4uMjdlZTk2ODk4ZTAgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlvLnBsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlvLnBsCkBAIC03LDEyNiArNyw1NSBAQCB1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czsKIHVzZSBUZXN0OjpNb3JlOwogCit1c2UgRmluZEJpbjsKK3VzZSBsaWIgJEZpbmRCaW46OlJl YWxCaW47CiAKLSMjIwotIyBUZXN0IGlvX21ldGhvZD13b3JrZXIKLSMjIwotbXkgJG5vZGVfd29y a2VyID0gY3JlYXRlX25vZGUoJ3dvcmtlcicpOwotJG5vZGVfd29ya2VyLT5zdGFydCgpOwotCi10 ZXN0X2dlbmVyaWMoJ3dvcmtlcicsICRub2RlX3dvcmtlcik7Ci1TS0lQOgotewotCXNraXAgJ0lu amVjdGlvbiBwb2ludHMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJ1aWxkJywgMQotCSAgdW5sZXNz ICRFTlZ7ZW5hYmxlX2luamVjdGlvbl9wb2ludHN9IGVxICd5ZXMnOwotCXRlc3RfaW5qZWN0X3dv cmtlcignd29ya2VyJywgJG5vZGVfd29ya2VyKTsKLX0KK3VzZSBUZXN0QWlvOwogCi0kbm9kZV93 b3JrZXItPnN0b3AoKTsKK215ICVub2RlczsKIAogCiAjIyMKLSMgVGVzdCBpb19tZXRob2Q9aW9f dXJpbmcKKyMgQ3JlYXRlIGFuZCBjb25maWd1cmUgb25lIGluc3RhbmNlIGZvciBlYWNoIGlvX21l dGhvZAogIyMjCiAKLWlmIChoYXZlX2lvX3VyaW5nKCkpCitmb3JlYWNoIG15ICRtZXRob2QgKFRl c3RBaW86OnN1cHBvcnRlZF9pb19tZXRob2RzKCkpCiB7Ci0JbXkgJG5vZGVfdXJpbmcgPSBjcmVh dGVfbm9kZSgnaW9fdXJpbmcnKTsKLQkkbm9kZV91cmluZy0+c3RhcnQoKTsKLQl0ZXN0X2dlbmVy aWMoJ2lvX3VyaW5nJywgJG5vZGVfdXJpbmcpOwotCSRub2RlX3VyaW5nLT5zdG9wKCk7Ci19Ci0K LQotIyMjCi0jIFRlc3QgaW9fbWV0aG9kPXN5bmMKLSMjIwotCi1teSAkbm9kZV9zeW5jID0gY3Jl YXRlX25vZGUoJ3N5bmMnKTsKKwlteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygkbWV0aG9kKTsKIAotIyBqdXN0IHRvIGhhdmUgb25lIHRlc3Qgbm90IHVzZSB0aGUgZGVm YXVsdCBhdXRvLXR1bmluZworCSRub2Rlc3skbWV0aG9kfSA9ICRub2RlOworCSRub2RlLT5pbml0 KCk7CisJJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAiaW9fbWV0aG9kPSRt ZXRob2QiKTsKKwlUZXN0QWlvOjpjb25maWd1cmUoJG5vZGUpOworfQogCi0kbm9kZV9zeW5jLT5h cHBlbmRfY29uZigKKyMgSnVzdCB0byBoYXZlIG9uZSB0ZXN0IG5vdCB1c2UgdGhlIGRlZmF1bHQg YXV0by10dW5pbmcKKyRub2Rlc3snc3luYyd9LT5hcHBlbmRfY29uZigKIAkncG9zdGdyZXNxbC5j b25mJywgcXEoCi1pb19tYXhfY29uY3VycmVuY3k9NAorIGlvX21heF9jb25jdXJyZW5jeT00CiAp KTsKIAotJG5vZGVfc3luYy0+c3RhcnQoKTsKLXRlc3RfZ2VuZXJpYygnc3luYycsICRub2RlX3N5 bmMpOwotJG5vZGVfc3luYy0+c3RvcCgpOwotCi1kb25lX3Rlc3RpbmcoKTsKLQogCiAjIyMKLSMg VGVzdCBIZWxwZXJzCisjIEV4ZWN1dGUgdGhlIHRlc3RzIGZvciBlYWNoIGlvX21ldGhvZAogIyMj CiAKLXN1YiBjcmVhdGVfbm9kZQorZm9yZWFjaCBteSAkbWV0aG9kIChUZXN0QWlvOjpzdXBwb3J0 ZWRfaW9fbWV0aG9kcygpKQogewotCWxvY2FsICRUZXN0OjpCdWlsZGVyOjpMZXZlbCA9ICRUZXN0 OjpCdWlsZGVyOjpMZXZlbCArIDE7Ci0KLQlteSAkaW9fbWV0aG9kID0gc2hpZnQ7CisJbXkgJG5v ZGUgPSAkbm9kZXN7JG1ldGhvZH07CiAKLQlteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXItPm5ldygkaW9fbWV0aG9kKTsKLQotCSMgV2FudCB0byB0ZXN0IGluaXRkYiBmb3IgZWFj aCBJTyBtZXRob2QsIG90aGVyd2lzZSB3ZSBjb3VsZCBqdXN0IHJldXNlCi0JIyB0aGUgY2x1c3Rl ci4KLQkjCi0JIyBVbmZvcnR1bmF0ZWx5IENsdXN0ZXI6OmluaXQoKSBwdXRzIFBHX1RFU1RfSU5J VERCX0VYVFJBX09QVFMgYWZ0ZXIgdGhlCi0JIyBvcHRpb25zIHNwZWNpZmllZCBieSAtPmV4dHJh LCBpZiBzb21lYm9keSBwdXRzIC1jIGlvX21ldGhvZD14eXogaW4KLQkjIFBHX1RFU1RfSU5JVERC X0VYVFJBX09QVFMgaXQgd291bGQgYnJlYWsgdGhpcyB0ZXN0LiBGaXggdGhhdCB1cCBpZiB3ZQot CSMgZGV0ZWN0IGl0LgotCWxvY2FsICRFTlZ7UEdfVEVTVF9JTklUREJfRVhUUkFfT1BUU30gPSAk RU5We1BHX1RFU1RfSU5JVERCX0VYVFJBX09QVFN9OwotCWlmIChkZWZpbmVkICRFTlZ7UEdfVEVT VF9JTklUREJfRVhUUkFfT1BUU30KLQkJJiYgJEVOVntQR19URVNUX0lOSVREQl9FWFRSQV9PUFRT fSA9fiBtL2lvX21ldGhvZD0vKQotCXsKLQkJJEVOVntQR19URVNUX0lOSVREQl9FWFRSQV9PUFRT fSAuPSAiIC1jIGlvX21ldGhvZD0kaW9fbWV0aG9kIjsKLQl9Ci0KLQkkbm9kZS0+aW5pdChleHRy YSA9PiBbICctYycsICJpb19tZXRob2Q9JGlvX21ldGhvZCIgXSk7Ci0KLQkkbm9kZS0+YXBwZW5k X2NvbmYoCi0JCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSgKLXNoYXJlZF9wcmVsb2FkX2xpYnJhcmll cz10ZXN0X2FpbwotbG9nX21pbl9tZXNzYWdlcyA9ICdERUJVRzMnCi1sb2dfc3RhdGVtZW50PWFs bAotbG9nX2Vycm9yX3ZlcmJvc2l0eT1kZWZhdWx0Ci1yZXN0YXJ0X2FmdGVyX2NyYXNoPWZhbHNl Ci10ZW1wX2J1ZmZlcnM9MTAwCi0pKTsKKwkkbm9kZS0+c3RhcnQoKTsKKwl0ZXN0X2lvX21ldGhv ZCgkbWV0aG9kLCAkbm9kZSk7CisJJG5vZGUtPnN0b3AoKTsKK30KIAotCSMgRXZlbiB0aG91Z2gg d2UgdXNlZCAtYyBpb19tZXRob2Q9Li4uIGFib3ZlLCBpZiBURU1QX0NPTkZJRyBzZXRzCi0JIyBp b19tZXRob2QsIGl0J2Qgb3ZlcnJpZGUgdGhlIHNldHRpbmcgcGVyc2lzdGVkIGF0IGluaXRkYiB0 aW1lLiBXaGlsZQotCSMgdXNpbmcgKGFuZCBsYXRlciB2ZXJpZnlpbmcpIHRoZSBzZXR0aW5nIGZy b20gaW5pdGRiIHByb3ZpZGVzIHNvbWUKLQkjIHZlcmlmaWNhdGlvbiBvZiBoYXZpbmcgdXNlZCB0 aGUgaW9fbWV0aG9kIGR1cmluZyBpbml0ZGIsIGl0J3MgcHJvYmFibHkKLQkjIG5vdCB3b3J0aCB0 aGUgY29tcGxpY2F0aW9uIG9mIG9ubHkgYXBwZW5kaW5nIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQg aW4KLQkjIGluIFRFTVBfQ09ORklHLgotCSRub2RlLT5hcHBlbmRfY29uZigKLQkJJ3Bvc3RncmVz cWwuY29uZicsIHFxKAotaW9fbWV0aG9kPSRpb19tZXRob2QKLSkpOworZG9uZV90ZXN0aW5nKCk7 CiAKLQlvaygxLCAiJGlvX21ldGhvZDogaW5pdGRiIik7CiAKLQlyZXR1cm4gJG5vZGU7Ci19Cisj IyMKKyMgVGVzdCBIZWxwZXJzCisjIyMKIAotc3ViIGhhdmVfaW9fdXJpbmcKLXsKLQkjIFRvIGRl dGVjdCBpZiBpb191cmluZyBpcyBzdXBwb3J0ZWQsIHdlIGxvb2sgYXQgdGhlIGVycm9yIG1lc3Nh Z2UgZm9yCi0JIyBhc3NpZ25pbmcgYW4gaW52YWxpZCB2YWx1ZSB0byBhbiBlbnVtIEdVQywgd2hp Y2ggbGlzdHMgYWxsIHRoZSB2YWxpZAotCSMgb3B0aW9ucy4gV2UgbmVlZCB0byB1c2UgLUMgdG8g ZGVhbCB3aXRoIHJ1bm5pbmcgYXMgYWRtaW5pc3RyYXRvciBvbgotCSMgd2luZG93cywgdGhlIHN1 cGVydXNlciBjaGVjayBpcyBvbWl0dGVkIGlmIC1DIGlzIHVzZWQuCi0JbXkgKCRzdGRvdXQsICRz dGRlcnIpID0KLQkgIHJ1bl9jb21tYW5kIFtxdyhwb3N0Z3JlcyAtQyBpbnZhbGlkIC1jIGlvX21l dGhvZD1pbnZhbGlkKV07Ci0JZGllICJjYW4ndCBkZXRlcm1pbmUgc3VwcG9ydGVkIGlvX21ldGhv ZCB2YWx1ZXMiCi0JICB1bmxlc3MgJHN0ZGVyciA9fiBtL0F2YWlsYWJsZSB2YWx1ZXM6IChbXlwu XSspXC4vOwotCW15ICRtZXRob2RzID0gJDE7Ci0Jbm90ZSAic3VwcG9ydGVkIGlvX21ldGhvZCB2 YWx1ZXMgYXJlOiAkbWV0aG9kcyI7Ci0KLQlyZXR1cm4gKCRtZXRob2RzID1+IG0vaW9fdXJpbmcv KSA/IDEgOiAwOwotfQogCiBzdWIgcHNxbF9saWtlCiB7CkBAIC0xNDkwLDggKzE0MTksOCBAQCBT RUxFQ1QgcmVhZF9yZWxfYmxvY2tfbGwoJ3RibF9jc19mYWlsJywgMywgbmJsb2Nrcz0+MSwgemVy b19vbl9lcnJvcj0+dHJ1ZSk7KSwKIH0KIAogCi0jIFJ1biBhbGwgdGVzdHMgdGhhdCBhcmUgc3Vw cG9ydGVkIGZvciBhbGwgaW9fbWV0aG9kcwotc3ViIHRlc3RfZ2VuZXJpYworIyBSdW4gYWxsIHRl c3RzIHRoYXQgZm9yIHRoZSBzcGVjaWZpZWQgbm9kZSAvIGlvX21ldGhvZAorc3ViIHRlc3RfaW9f bWV0aG9kCiB7CiAJbXkgJGlvX21ldGhvZCA9IHNoaWZ0OwogCW15ICRub2RlID0gc2hpZnQ7CkBA IC0xNTI2LDEwICsxNDU1LDIzIEBAIENIRUNLUE9JTlQ7CiAJdGVzdF9pZ25vcmVfY2hlY2tzdW0o JGlvX21ldGhvZCwgJG5vZGUpOwogCXRlc3RfY2hlY2tzdW1fY3JlYXRlZGIoJGlvX21ldGhvZCwg JG5vZGUpOwogCisJIyBnZW5lcmljIGluamVjdGlvbiB0ZXN0cwogICBTS0lQOgogCXsKIAkJc2tp cCAnSW5qZWN0aW9uIHBvaW50cyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQnLCAxCiAJCSAg dW5sZXNzICRFTlZ7ZW5hYmxlX2luamVjdGlvbl9wb2ludHN9IGVxICd5ZXMnOwogCQl0ZXN0X2lu amVjdCgkaW9fbWV0aG9kLCAkbm9kZSk7CiAJfQorCisJIyB3b3JrZXIgc3BlY2lmaWMgaW5qZWN0 aW9uIHRlc3RzCisJaWYgKCRpb19tZXRob2QgZXEgJ3dvcmtlcicpCisJeworCSAgU0tJUDoKKwkJ eworCQkJc2tpcCAnSW5qZWN0aW9uIHBvaW50cyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQn LCAxCisJCQkgIHVubGVzcyAkRU5We2VuYWJsZV9pbmplY3Rpb25fcG9pbnRzfSBlcSAneWVzJzsK KworCQkJdGVzdF9pbmplY3Rfd29ya2VyKCRpb19tZXRob2QsICRub2RlKTsKKwkJfQorCX0KIH0K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDNfaW5pdGRiLnBsIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwM19pbml0ZGIucGwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMwM2FlNThkMDBhCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwM19pbml0ZGIucGwKQEAgLTAsMCArMSw3MSBA QAorIyBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyMKKyMgVGVzdCBpbml0ZGIgZm9yIGVhY2ggSU8gbWV0aG9kLiBUaGlzIGlzIGRv bmUgc2VwYXJhdGVseSBmcm9tIDAwMV9haW8ucGwsIGFzCisjIGl0IGlzbid0IGZhc3QuIFRoaXMg d2F5IHRoZSBtb3JlIGNvbW1vbmx5IGZhaWxpbmcgLyBoYWNrZWQtb24gMDAxX2Fpby5wbCBjYW4K KyMgYmUgaXRlcmF0ZWQgb24gbW9yZSBxdWlja2x5LgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5p bmdzIEZBVEFMID0+ICdhbGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKwordXNlIEZpbmRCaW47 Cit1c2UgbGliICRGaW5kQmluOjpSZWFsQmluOworCit1c2UgVGVzdEFpbzsKKworCitmb3JlYWNo IG15ICRtZXRob2QgKFRlc3RBaW86OnN1cHBvcnRlZF9pb19tZXRob2RzKCkpCit7CisJdGVzdF9j cmVhdGVfbm9kZSgkbWV0aG9kKTsKK30KKworZG9uZV90ZXN0aW5nKCk7CisKKworc3ViIHRlc3Rf Y3JlYXRlX25vZGUKK3sKKwlsb2NhbCAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgPSAkVGVzdDo6QnVp bGRlcjo6TGV2ZWwgKyAxOworCisJbXkgJGlvX21ldGhvZCA9IHNoaWZ0OworCisJbXkgJG5vZGUg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJGlvX21ldGhvZCk7CisKKwkjIFdhbnQg dG8gdGVzdCBpbml0ZGIgZm9yIGVhY2ggSU8gbWV0aG9kLCBvdGhlcndpc2Ugd2UgY291bGQganVz dCByZXVzZQorCSMgdGhlIGNsdXN0ZXIuCisJIworCSMgVW5mb3J0dW5hdGVseSBDbHVzdGVyOjpp bml0KCkgcHV0cyBQR19URVNUX0lOSVREQl9FWFRSQV9PUFRTIGFmdGVyIHRoZQorCSMgb3B0aW9u cyBzcGVjaWZpZWQgYnkgLT5leHRyYSwgaWYgc29tZWJvZHkgcHV0cyAtYyBpb19tZXRob2Q9eHl6 IGluCisJIyBQR19URVNUX0lOSVREQl9FWFRSQV9PUFRTIGl0IHdvdWxkIGJyZWFrIHRoaXMgdGVz dC4gRml4IHRoYXQgdXAgaWYgd2UKKwkjIGRldGVjdCBpdC4KKwlsb2NhbCAkRU5We1BHX1RFU1Rf SU5JVERCX0VYVFJBX09QVFN9ID0gJEVOVntQR19URVNUX0lOSVREQl9FWFRSQV9PUFRTfTsKKwlp ZiAoZGVmaW5lZCAkRU5We1BHX1RFU1RfSU5JVERCX0VYVFJBX09QVFN9CisJCSYmICRFTlZ7UEdf VEVTVF9JTklUREJfRVhUUkFfT1BUU30gPX4gbS9pb19tZXRob2Q9LykKKwl7CisJCSRFTlZ7UEdf VEVTVF9JTklUREJfRVhUUkFfT1BUU30gLj0gIiAtYyBpb19tZXRob2Q9JGlvX21ldGhvZCI7CisJ fQorCisJJG5vZGUtPmluaXQoZXh0cmEgPT4gWyAnLWMnLCAiaW9fbWV0aG9kPSRpb19tZXRob2Qi IF0pOworCisJVGVzdEFpbzo6Y29uZmlndXJlKCRub2RlKTsKKworCSMgRXZlbiB0aG91Z2ggd2Ug dXNlZCAtYyBpb19tZXRob2Q9Li4uIGFib3ZlLCBpZiBURU1QX0NPTkZJRyBzZXRzCisJIyBpb19t ZXRob2QsIGl0J2Qgb3ZlcnJpZGUgdGhlIHNldHRpbmcgcGVyc2lzdGVkIGF0IGluaXRkYiB0aW1l LiBXaGlsZQorCSMgdXNpbmcgKGFuZCBsYXRlciB2ZXJpZnlpbmcpIHRoZSBzZXR0aW5nIGZyb20g aW5pdGRiIHByb3ZpZGVzIHNvbWUKKwkjIHZlcmlmaWNhdGlvbiBvZiBoYXZpbmcgdXNlZCB0aGUg aW9fbWV0aG9kIGR1cmluZyBpbml0ZGIsIGl0J3MgcHJvYmFibHkKKwkjIG5vdCB3b3J0aCB0aGUg Y29tcGxpY2F0aW9uIG9mIG9ubHkgYXBwZW5kaW5nIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4K KwkjIGluIFRFTVBfQ09ORklHLgorCSRub2RlLT5hcHBlbmRfY29uZigKKwkJJ3Bvc3RncmVzcWwu Y29uZicsIHFxKAoraW9fbWV0aG9kPSRpb19tZXRob2QKKykpOworCisJb2soMSwgIiRpb19tZXRo b2Q6IGluaXRkYiIpOworCisJJG5vZGUtPnN0YXJ0KCk7CisJJG5vZGUtPnN0b3AoKTsKKwlvaygx LCAiJGlvX21ldGhvZDogc3RhcnQgJiBzdG9wIik7CisKKwlyZXR1cm4gJG5vZGU7Cit9CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvVGVzdEFpby5wbSBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vdC9UZXN0QWlvLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi41YmM4MGE5YjEzMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9haW8vdC9UZXN0QWlvLnBtCkBAIC0wLDAgKzEsOTAgQEAKKyMgQ29weXJpZ2h0 IChjKSAyMDI0LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKz1w b2QKKworPWhlYWQxIE5BTUUKKworVGVzdEFpbyAtIGhlbHBlcnMgZm9yIHdyaXRpbmcgQUlPIHJl bGF0ZWQgdGVzdHMKKworPWN1dAorCitwYWNrYWdlIFRlc3RBaW87CisKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6 Ok1vcmU7CisKKworPXBvZAorCis9aGVhZDEgTUVUSE9EUworCis9b3ZlcgorCis9aXRlbSBUZXN0 QWlvOjpzdXBwb3J0ZWRfaW9fbWV0aG9kcygpCisKK1JldHVybiBhbiBhcnJheSBvZiBhbGwgdGhl IHN1cHBvcnRlZCB2YWx1ZXMgZm9yIHRoZSBpb19tZXRob2QgR1VDCisKKz1jdXQKKworc3ViIHN1 cHBvcnRlZF9pb19tZXRob2RzKCkKK3sKKwlteSBAaW9fbWV0aG9kcyA9ICgnd29ya2VyJyk7CisK KwlwdXNoKEBpb19tZXRob2RzLCAiaW9fdXJpbmciKSBpZiBoYXZlX2lvX3VyaW5nKCk7CisKKwkj IFJldHVybiBzeW5jIGxhc3QsIGFzIGl0IHdpbGwgbGVhc3QgY29tbW9ubHkgZmFpbAorCXB1c2go QGlvX21ldGhvZHMsICJzeW5jIik7CisKKwlyZXR1cm4gQGlvX21ldGhvZHM7Cit9CisKKworPWl0 ZW0gVGVzdEFpbzo6Y29uZmlndXJlKCkKKworUHJlcGFyZSBhIGNsdXN0ZXIgZm9yIEFJTyB0ZXN0 CisKKz1jdXQKKworc3ViIGNvbmZpZ3VyZQoreworCW15ICRub2RlID0gc2hpZnQ7CisKKwkkbm9k ZS0+YXBwZW5kX2NvbmYoCisJCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSgKK3NoYXJlZF9wcmVsb2Fk X2xpYnJhcmllcz10ZXN0X2FpbworbG9nX21pbl9tZXNzYWdlcyA9ICdERUJVRzMnCitsb2dfc3Rh dGVtZW50PWFsbAorbG9nX2Vycm9yX3ZlcmJvc2l0eT1kZWZhdWx0CityZXN0YXJ0X2FmdGVyX2Ny YXNoPWZhbHNlCit0ZW1wX2J1ZmZlcnM9MTAwCispKTsKKworfQorCisKKz1wb2QKKworPWl0ZW0g VGVzdEFpbzo6aGF2ZV9pb191cmluZygpCisKK1JldHVybiBpZiBpb191cmluZyBpcyBzdXBwb3J0 ZWQKKworPWN1dAorCitzdWIgaGF2ZV9pb191cmluZworeworCSMgVG8gZGV0ZWN0IGlmIGlvX3Vy aW5nIGlzIHN1cHBvcnRlZCwgd2UgbG9vayBhdCB0aGUgZXJyb3IgbWVzc2FnZSBmb3IKKwkjIGFz c2lnbmluZyBhbiBpbnZhbGlkIHZhbHVlIHRvIGFuIGVudW0gR1VDLCB3aGljaCBsaXN0cyBhbGwg dGhlIHZhbGlkCisJIyBvcHRpb25zLiBXZSBuZWVkIHRvIHVzZSAtQyB0byBkZWFsIHdpdGggcnVu bmluZyBhcyBhZG1pbmlzdHJhdG9yIG9uCisJIyB3aW5kb3dzLCB0aGUgc3VwZXJ1c2VyIGNoZWNr IGlzIG9taXR0ZWQgaWYgLUMgaXMgdXNlZC4KKwlteSAoJHN0ZG91dCwgJHN0ZGVycikgPQorCSAg cnVuX2NvbW1hbmQgW3F3KHBvc3RncmVzIC1DIGludmFsaWQgLWMgaW9fbWV0aG9kPWludmFsaWQp XTsKKwlkaWUgImNhbid0IGRldGVybWluZSBzdXBwb3J0ZWQgaW9fbWV0aG9kIHZhbHVlcyIKKwkg IHVubGVzcyAkc3RkZXJyID1+IG0vQXZhaWxhYmxlIHZhbHVlczogKFteXC5dKylcLi87CisJbXkg JG1ldGhvZHMgPSAkMTsKKwlub3RlICJzdXBwb3J0ZWQgaW9fbWV0aG9kIHZhbHVlcyBhcmU6ICRt ZXRob2RzIjsKKworCXJldHVybiAoJG1ldGhvZHMgPX4gbS9pb191cmluZy8pID8gMSA6IDA7Cit9 CisKKzE7Ci0tIAoyLjQzLjAKCg== --0000000000000630b5064c23f9ff Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0002-small-optimization-for-test-refactor.patch" Content-Disposition: attachment; filename="v4-0002-small-optimization-for-test-refactor.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmb0pmdf1 RnJvbSBhNGMzMmJlMDIyNGJiMThiYzU1ZTk4ZDc3ODkxMzUyNTg4MjQ0NjNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBUdWUsIDMgTWFyIDIwMjYgMTI6Mjc6MTAgLTA1MDAKU3ViamVjdDogW1BB VENIIHY0IDIvNl0gc21hbGwgb3B0aW1pemF0aW9uIGZvciB0ZXN0IHJlZmFjdG9yCgotLS0KIHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlvLnBsIHwgNSArKystLQogMSBmaWxlIGNo YW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAxX2Fpby5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdC8wMDFfYWlvLnBsCmluZGV4IDI3ZWU5Njg5OGUwLi5lMThiMmEyYjhhZSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKQEAgLTEyLDYgKzEyLDcgQEAgdXNlIGxp YiAkRmluZEJpbjo6UmVhbEJpbjsKIAogdXNlIFRlc3RBaW87CiAKK215IEBtZXRob2RzID0gVGVz dEFpbzo6c3VwcG9ydGVkX2lvX21ldGhvZHMoKTsKIG15ICVub2RlczsKIAogCkBAIC0xOSw3ICsy MCw3IEBAIG15ICVub2RlczsKICMgQ3JlYXRlIGFuZCBjb25maWd1cmUgb25lIGluc3RhbmNlIGZv ciBlYWNoIGlvX21ldGhvZAogIyMjCiAKLWZvcmVhY2ggbXkgJG1ldGhvZCAoVGVzdEFpbzo6c3Vw cG9ydGVkX2lvX21ldGhvZHMoKSkKK2ZvcmVhY2ggbXkgJG1ldGhvZCAoQG1ldGhvZHMpCiB7CiAJ bXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJG1ldGhvZCk7CiAKQEAg LTQwLDcgKzQxLDcgQEAgJG5vZGVzeydzeW5jJ30tPmFwcGVuZF9jb25mKAogIyBFeGVjdXRlIHRo ZSB0ZXN0cyBmb3IgZWFjaCBpb19tZXRob2QKICMjIwogCi1mb3JlYWNoIG15ICRtZXRob2QgKFRl c3RBaW86OnN1cHBvcnRlZF9pb19tZXRob2RzKCkpCitmb3JlYWNoIG15ICRtZXRob2QgKEBtZXRo b2RzKQogewogCW15ICRub2RlID0gJG5vZGVzeyRtZXRob2R9OwogCi0tIAoyLjQzLjAKCg== --0000000000000630b5064c23f9ff Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0003-test_aio-Add-read_stream-test-infrastructure-test.patch" Content-Disposition: attachment; filename="v4-0003-test_aio-Add-read_stream-test-infrastructure-test.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmb0pptb2 RnJvbSBhZmMxMDI2NjVhNmIyOTg5ZjU1N2M1OGJiOGFlM2QwM2ViMzE5MmNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFdlZCwgMTAgU2VwIDIwMjUgMTQ6MDA6MDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHY0IDMv Nl0gdGVzdF9haW86IEFkZCByZWFkX3N0cmVhbSB0ZXN0IGluZnJhc3RydWN0dXJlICYgdGVzdHMK CkF1dGhvcjogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdlZC1ieTog TmF6aXIgQmlsYWwgWWF2dXogPGJ5YXZ1ejgxQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IE1lbGFu aWUgUGxhZ2VtYW4gPG1lbGFuaWVwbGFnZW1hbkBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBz Oi8vcG9zdGdyLmVzL20vCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby9tZXNvbi5idWls ZCAgICAgICAgIHwgICAxICsKIC4uLi9tb2R1bGVzL3Rlc3RfYWlvL3QvMDA0X3JlYWRfc3RyZWFt LnBsICAgICB8IDI4MiArKysrKysrKysrKysrKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90 ZXN0X2Fpby0tMS4wLnNxbCAgIHwgIDI2ICstCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rl c3RfYWlvLmMgICAgICAgICAgfCAzNDQgKysrKysrKysrKysrKysrLS0tCiBzcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogNSBmaWxlcyBjaGFuZ2Vk LCA2MDIgaW5zZXJ0aW9ucygrKSwgNTIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwNF9yZWFkX3N0cmVhbS5wbAoKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkCmluZGV4IDE4YTc5N2YzYTNiLi45MDlmODFkOTZjMSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby9tZXNvbi5idWlsZAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkCkBAIC0zMyw2ICszMyw3IEBAIHRl c3RzICs9IHsKICAgICAgICd0LzAwMV9haW8ucGwnLAogICAgICAgJ3QvMDAyX2lvX3dvcmtlcnMu cGwnLAogICAgICAgJ3QvMDAzX2luaXRkYi5wbCcsCisgICAgICAndC8wMDRfcmVhZF9zdHJlYW0u cGwnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf YWlvL3QvMDA0X3JlYWRfc3RyZWFtLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAw NF9yZWFkX3N0cmVhbS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u ODljZmFiYmIxZDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlv L3QvMDA0X3JlYWRfc3RyZWFtLnBsCkBAIC0wLDAgKzEsMjgyIEBACisjIENvcHlyaWdodCAoYykg MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsK K3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKwor dXNlIEZpbmRCaW47Cit1c2UgbGliICRGaW5kQmluOjpSZWFsQmluOworCit1c2UgVGVzdEFpbzsK KworCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygndGVzdCcpOwor JG5vZGUtPmluaXQoKTsKKworJG5vZGUtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYn LCBxcSgKK3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcz10ZXN0X2FpbworbG9nX21pbl9tZXNzYWdl cyA9ICdERUJVRzMnCitsb2dfc3RhdGVtZW50PWFsbAorbG9nX2Vycm9yX3ZlcmJvc2l0eT1kZWZh dWx0CityZXN0YXJ0X2FmdGVyX2NyYXNoPWZhbHNlCit0ZW1wX2J1ZmZlcnM9MTAwCittYXhfY29u bmVjdGlvbnM9OAoraW9fbWV0aG9kPXdvcmtlcgorKSk7CisKKyRub2RlLT5zdGFydCgpOwordGVz dF9zZXR1cCgkbm9kZSk7Ciskbm9kZS0+c3RvcCgpOworCisKK2ZvcmVhY2ggbXkgJG1ldGhvZCAo VGVzdEFpbzo6c3VwcG9ydGVkX2lvX21ldGhvZHMoKSkKK3sKKwkkbm9kZS0+YWRqdXN0X2NvbmYo J3Bvc3RncmVzcWwuY29uZicsICdpb19tZXRob2QnLCAnd29ya2VyJyk7CisJJG5vZGUtPnN0YXJ0 KCk7CisJdGVzdF9pb19tZXRob2QoJG1ldGhvZCwgJG5vZGUpOworCSRub2RlLT5zdG9wKCk7Cit9 CisKK2RvbmVfdGVzdGluZygpOworCisKK3N1YiB0ZXN0X3NldHVwCit7CisJbXkgJG5vZGUgPSBz aGlmdDsKKworCSRub2RlLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHFxKAorQ1JFQVRFIEVY VEVOU0lPTiB0ZXN0X2FpbzsKKworQ1JFQVRFIFRBQkxFIGxhcmdlaXNoKGsgaW50IG5vdCBudWxs KSBXSVRIIChGSUxMRkFDVE9SPTEwKTsKK0lOU0VSVCBJTlRPIGxhcmdlaXNoKGspIFNFTEVDVCBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApOworKSk7CisJb2soMSwgInNldHVwIik7Cit9CisKKwor c3ViIHRlc3RfcmVwZWF0ZWRfYmxvY2tzCit7CisJbXkgJGlvX21ldGhvZCA9IHNoaWZ0OworCW15 ICRub2RlID0gc2hpZnQ7CisKKwlteSAkcHNxbCA9ICRub2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bv c3RncmVzJywgb25fZXJyb3Jfc3RvcCA9PiAwKTsKKworCSMgUHJldmVudGluZyBsYXJnZXIgcmVh ZHMgbWFrZXMgdGVzdGluZyBlYXNpZXIKKwkkcHNxbC0+cXVlcnlfc2FmZSgKKwkJcXEvCitTRVQg aW9fY29tYmluZV9saW1pdCA9IDE7CisvKTsKKworCSMgdGVzdCBtaXNzIG9mIHRoZSBzYW1lIGJs b2NrIHR3aWNlIGluIGEgcm93CisJJHBzcWwtPnF1ZXJ5X3NhZmUoCisJCXFxLworU0VMRUNUIGV2 aWN0X3JlbCgnbGFyZ2Vpc2gnKTsKKy8pOworCSRwc3FsLT5xdWVyeV9zYWZlKAorCQlxcS8KK1NF TEVDVCAqIEZST00gcmVhZF9zdHJlYW1fZm9yX2Jsb2NrcygnbGFyZ2Vpc2gnLCBBUlJBWVswLCAy LCAyLCA0LCA0XSk7CisvKTsKKwlvaygxLCAiJGlvX21ldGhvZDogc3RyZWFtIG1pc3NpbmcgdGhl IHNhbWUgYmxvY2sgcmVwZWF0ZWRseSIpOworCisJJHBzcWwtPnF1ZXJ5X3NhZmUoCisJCXFxLwor U0VMRUNUICogRlJPTSByZWFkX3N0cmVhbV9mb3JfYmxvY2tzKCdsYXJnZWlzaCcsIEFSUkFZWzAs IDIsIDIsIDQsIDRdKTsKKy8pOworCW9rKDEsICIkaW9fbWV0aG9kOiBzdHJlYW0gaGl0dGluZyB0 aGUgc2FtZSBibG9jayByZXBlYXRlZGx5Iik7CisKKwkjIHRlc3QgaGl0IG9mIHRoZSBzYW1lIGJs b2NrIHR3aWNlIGluIGEgcm93CisJJHBzcWwtPnF1ZXJ5X3NhZmUoCisJCXFxLworU0VMRUNUIGV2 aWN0X3JlbCgnbGFyZ2Vpc2gnKTsKKy8pOworCSRwc3FsLT5xdWVyeV9zYWZlKAorCQlxcS8KK1NF TEVDVCAqIEZST00gcmVhZF9zdHJlYW1fZm9yX2Jsb2NrcygnbGFyZ2Vpc2gnLCBBUlJBWVswLCAx LCAyLCAzLCA0LCA1LCA2LCA1LCA0LCAzLCAyLCAxLCAwXSk7CisvKTsKKwlvaygxLCAiJGlvX21l dGhvZDogc3RyZWFtIGFjY2Vzc2luZyBzYW1lIGJsb2NrIik7CisKKwkkcHNxbC0+cXVpdCgpOwor fQorCisKK3N1YiB0ZXN0X2luamVjdF9mb3JlaWduCit7CisJbXkgJGlvX21ldGhvZCA9IHNoaWZ0 OworCW15ICRub2RlID0gc2hpZnQ7CisKKwlteSAkcHNxbF9hID0gJG5vZGUtPmJhY2tncm91bmRf cHNxbCgncG9zdGdyZXMnLCBvbl9lcnJvcl9zdG9wID0+IDApOworCW15ICRwc3FsX2IgPSAkbm9k ZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycsIG9uX2Vycm9yX3N0b3AgPT4gMCk7CisKKwlt eSAkcGlkX2EgPSAkcHNxbF9hLT5xdWVyeV9zYWZlKHFxL1NFTEVDVCBwZ19iYWNrZW5kX3BpZCgp Oy8pOworCisKKwkjIyMKKwkjIFRlc3QgcmVhZCBzdHJlYW0gZW5jb3VudGVyaW5nIGJ1ZmZlcnMg dW5kZXJnb2luZyBJTyBpbiBhbm90aGVyIGJhY2tlbmQsCisJIyB3aXRoIHRoZSBvdGhlciBiYWNr ZW5kJ3MgcmVhZHMgc3VjY2VlZGluZy4KKwkjIyMKKwkkcHNxbF9hLT5xdWVyeV9zYWZlKAorCQlx cS8KK1NFTEVDVCBldmljdF9yZWwoJ2xhcmdlaXNoJyk7CisvKTsKKworCSRwc3FsX2ItPnF1ZXJ5 X3NhZmUoCisJCXFxLworU0VMRUNUIGlual9pb19jb21wbGV0aW9uX3dhaXQocGlkPT5wZ19iYWNr ZW5kX3BpZCgpLCByZWxmaWxlbm9kZT0+cGdfcmVsYXRpb25fZmlsZW5vZGUoJ2xhcmdlaXNoJykp OworLyk7CisKKwkkcHNxbF9iLT57c3RkaW59IC49IHFxLworU0VMRUNUIHJlYWRfcmVsX2Jsb2Nr X2xsKCdsYXJnZWlzaCcsIGJsb2Nrbm89PjUsIG5ibG9ja3M9PjEpOworLzsKKwkkcHNxbF9iLT57 cnVufS0+cHVtcF9uYigpOworCisJJG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3Jl cycsIHFxLworU0VMRUNUIHdhaXRfZXZlbnQgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHdh aXRfZXZlbnQgPSAnY29tcGxldGlvbl93YWl0JzsKKy8sCisJCSdjb21wbGV0aW9uX3dhaXQnKTsK KworCSRwc3FsX2EtPntzdGRpbn0gLj0gcXEvCitTRUxFQ1QgYXJyYXlfYWdnKGJsb2NrbnVtKSBG Uk9NIHJlYWRfc3RyZWFtX2Zvcl9ibG9ja3MoJ2xhcmdlaXNoJywgQVJSQVlbMCwgMiwgNSwgN10p OworLzsKKwkkcHNxbF9hLT57cnVufS0+cHVtcF9uYigpOworCisJJG5vZGUtPnBvbGxfcXVlcnlf dW50aWwoJ3Bvc3RncmVzJywKKwkJcXEoU0VMRUNUIHdhaXRfZXZlbnQgRlJPTSBwZ19zdGF0X2Fj dGl2aXR5IFdIRVJFIHBpZCA9ICRwaWRfYSksCisJCSdBaW9Jb0NvbXBsZXRpb24nKTsKKworCSRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEvU0VMRUNUIGlual9pb19jb21wbGV0aW9uX2Nv bnRpbnVlKCkvKTsKKworCXB1bXBfdW50aWwoCisJCSRwc3FsX2EtPntydW59LCAkcHNxbF9hLT57 dGltZW91dH0sCisJCVwkcHNxbF9hLT57c3Rkb3V0fSwgcXIvXHswLDIsNSw3XH0vKTsKKworCW9r KDEsCisJCXFxLyRpb19tZXRob2Q6IHJlYWQgc3RyZWFtIGVuY291bnRlcnMgc3VjY2VlZGluZyBJ TyBieSBhbm90aGVyIGJhY2tlbmQvCisJKTsKKworCisJIyMjCisJIyBUZXN0IHJlYWQgc3RyZWFt IGVuY291bnRlcmluZyBidWZmZXJzIHVuZGVyZ29pbmcgSU8gaW4gYW5vdGhlciBiYWNrZW5kLAor CSMgd2l0aCB0aGUgb3RoZXIgYmFja2VuZCdzIHJlYWRzIGZhaWxpbmcuCisJIyMjCisJJHBzcWxf YS0+cXVlcnlfc2FmZSgKKwkJcXEvCitTRUxFQ1QgZXZpY3RfcmVsKCdsYXJnZWlzaCcpOworLyk7 CisKKwkkcHNxbF9iLT5xdWVyeV9zYWZlKAorCQlxcS8KK1NFTEVDVCBpbmpfaW9fY29tcGxldGlv bl93YWl0KHBpZD0+cGdfYmFja2VuZF9waWQoKSwgcmVsZmlsZW5vZGU9PnBnX3JlbGF0aW9uX2Zp bGVub2RlKCdsYXJnZWlzaCcpKTsKKy8pOworCisJJHBzcWxfYi0+cXVlcnlfc2FmZSgKKwkJcXEv CitTRUxFQ1QgaW5qX2lvX3Nob3J0X3JlYWRfYXR0YWNoKC1lcnJub19mcm9tX3N0cmluZygnRUlP JyksIHBpZD0+cGdfYmFja2VuZF9waWQoKSwgcmVsZmlsZW5vZGU9PnBnX3JlbGF0aW9uX2ZpbGVu b2RlKCdsYXJnZWlzaCcpKTsKKy8pOworCisJJHBzcWxfYi0+e3N0ZGlufSAuPSBxcS8KK1NFTEVD VCByZWFkX3JlbF9ibG9ja19sbCgnbGFyZ2Vpc2gnLCBibG9ja25vPT41LCBuYmxvY2tzPT4xKTsK Ky87CisJJHBzcWxfYi0+e3J1bn0tPnB1bXBfbmIoKTsKKworCSRub2RlLT5wb2xsX3F1ZXJ5X3Vu dGlsKAorCQkncG9zdGdyZXMnLCBxcS8KK1NFTEVDVCB3YWl0X2V2ZW50IEZST00gcGdfc3RhdF9h Y3Rpdml0eSBXSEVSRSB3YWl0X2V2ZW50ID0gJ2NvbXBsZXRpb25fd2FpdCc7CisvLAorCQknY29t cGxldGlvbl93YWl0Jyk7CisKKwkkcHNxbF9hLT57c3RkaW59IC49IHFxLworU0VMRUNUIGFycmF5 X2FnZyhibG9ja251bSkgRlJPTSByZWFkX3N0cmVhbV9mb3JfYmxvY2tzKCdsYXJnZWlzaCcsIEFS UkFZWzAsIDIsIDUsIDddKTsKKy87CisJJHBzcWxfYS0+e3J1bn0tPnB1bXBfbmIoKTsKKworCSRu b2RlLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJCXFxKFNFTEVDVCB3YWl0X2V2ZW50 IEZST00gcGdfc3RhdF9hY3Rpdml0eSBXSEVSRSBwaWQgPSAkcGlkX2EpLAorCQknQWlvSW9Db21w bGV0aW9uJyk7CisKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxL1NFTEVDVCBpbmpf aW9fY29tcGxldGlvbl9jb250aW51ZSgpLyk7CisKKwlwdW1wX3VudGlsKAorCQkkcHNxbF9hLT57 cnVufSwgJHBzcWxfYS0+e3RpbWVvdXR9LAorCQlcJHBzcWxfYS0+e3N0ZG91dH0sIHFyL1x7MCwy LDUsN1x9Lyk7CisKKwkkcHNxbF9iLT57cnVufS0+cHVtcF9uYigpOworCWxpa2UoCisJCSRwc3Fs X2ItPntzdGRlcnJ9LAorCQlxci8uKkVSUk9SLipjb3VsZCBub3QgcmVhZCBibG9ja3MgNS4uNS4q JC8sCisJCSIkaW9fbWV0aG9kOiBpbmplY3RlZCBlcnJvciBvY2N1cnJlZCIpOworCSRwc3FsX2It PntzdGRlcnJ9ID0gJyc7CisJJHBzcWxfYi0+cXVlcnlfc2FmZShxcS9TRUxFQ1QgaW5qX2lvX3No b3J0X3JlYWRfZGV0YWNoKCk7Lyk7CisKKworCW9rKDEsCisJCXFxLyRpb19tZXRob2Q6IHJlYWQg c3RyZWFtIGVuY291bnRlcnMgZmFpbGluZyBJTyBieSBhbm90aGVyIGJhY2tlbmQvKTsKKworCisJ IyMjCisJIyBUZXN0IHJlYWQgc3RyZWFtIGVuY291bnRlcmluZyB0d28gYnVmZmVycyB0aGF0IGFy ZSB1bmRlcmdvaW5nIHRoZSBzYW1lCisJIyBJTywgc3RhcnRlZCBieSBhbm90aGVyIGJhY2tlbmQK KwkjIyMKKwkkcHNxbF9hLT5xdWVyeV9zYWZlKAorCQlxcS8KK1NFTEVDVCBldmljdF9yZWwoJ2xh cmdlaXNoJyk7CisvKTsKKworCSRwc3FsX2ItPnF1ZXJ5X3NhZmUoCisJCXFxLworU0VMRUNUIGlu al9pb19jb21wbGV0aW9uX3dhaXQocGlkPT5wZ19iYWNrZW5kX3BpZCgpLCByZWxmaWxlbm9kZT0+ cGdfcmVsYXRpb25fZmlsZW5vZGUoJ2xhcmdlaXNoJykpOworLyk7CisKKwkkcHNxbF9iLT57c3Rk aW59IC49IHFxLworU0VMRUNUIHJlYWRfcmVsX2Jsb2NrX2xsKCdsYXJnZWlzaCcsIGJsb2Nrbm89 PjIsIG5ibG9ja3M9PjMpOworLzsKKwkkcHNxbF9iLT57cnVufS0+cHVtcF9uYigpOworCisJJG5v ZGUtPnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3JlcycsIHFxLworU0VMRUNUIHdhaXRfZXZl bnQgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHdhaXRfZXZlbnQgPSAnY29tcGxldGlvbl93 YWl0JzsKKy8sCisJCSdjb21wbGV0aW9uX3dhaXQnKTsKKworCSRwc3FsX2EtPntzdGRpbn0gLj0g cXEvCitTRUxFQ1QgYXJyYXlfYWdnKGJsb2NrbnVtKSBGUk9NIHJlYWRfc3RyZWFtX2Zvcl9ibG9j a3MoJ2xhcmdlaXNoJywgQVJSQVlbMCwgMiwgNF0pOworLzsKKwkkcHNxbF9hLT57cnVufS0+cHVt cF9uYigpOworCisJJG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkJcXEoU0VM RUNUIHdhaXRfZXZlbnQgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHBpZCA9ICRwaWRfYSks CisJCSdBaW9Jb0NvbXBsZXRpb24nKTsKKworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cXEvU0VMRUNUIGlual9pb19jb21wbGV0aW9uX2NvbnRpbnVlKCkvKTsKKworCXB1bXBfdW50aWwo CisJCSRwc3FsX2EtPntydW59LCAkcHNxbF9hLT57dGltZW91dH0sCisJCVwkcHNxbF9hLT57c3Rk b3V0fSwgcXIvXHswLDIsNFx9Lyk7CisKKwlvaygxLCBxcS8kaW9fbWV0aG9kOiByZWFkIHN0cmVh bSBlbmNvdW50ZXJzIHR3byBidWZmZXIgcmVhZCBpbiBvbmUgSU8vKTsKKworCisJJHBzcWxfYS0+ cXVpdCgpOworCSRwc3FsX2ItPnF1aXQoKTsKK30KKworCitzdWIgdGVzdF9pb19tZXRob2QKK3sK KwlteSAkaW9fbWV0aG9kID0gc2hpZnQ7CisJbXkgJG5vZGUgPSBzaGlmdDsKKworCXRlc3RfcmVw ZWF0ZWRfYmxvY2tzKCRpb19tZXRob2QsICRub2RlKTsKKworICBTS0lQOgorCXsKKwkJc2tpcCAn SW5qZWN0aW9uIHBvaW50cyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQnLCAxCisJCSAgdW5s ZXNzICRFTlZ7ZW5hYmxlX2luamVjdGlvbl9wb2ludHN9IGVxICd5ZXMnOworCQl0ZXN0X2luamVj dF9mb3JlaWduKCRpb19tZXRob2QsICRub2RlKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbAppbmRleCBlNDk1NDgxYzQxZS4uZGE3Y2MwMzgyOWEg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbApAQCAtMzMs NiArMzMsMTAgQEAgQ1JFQVRFIEZVTkNUSU9OIHJlYWRfcmVsX2Jsb2NrX2xsKAogUkVUVVJOUyBw Z19jYXRhbG9nLnZvaWQgU1RSSUNUCiBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwog CitDUkVBVEUgRlVOQ1RJT04gZXZpY3RfcmVsKHJlbCByZWdjbGFzcykKK1JFVFVSTlMgcGdfY2F0 YWxvZy52b2lkIFNUUklDVAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKwogQ1JF QVRFIEZVTkNUSU9OIGludmFsaWRhdGVfcmVsX2Jsb2NrKHJlbCByZWdjbGFzcywgYmxvY2tubyBp bnQpCiBSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFUSE5BTUUn IExBTkdVQUdFIEM7CkBAIC00MSw3ICs0NSw3IEBAIENSRUFURSBGVU5DVElPTiBidWZmZXJfY3Jl YXRlX3RveShyZWwgcmVnY2xhc3MsIGJsb2Nrbm8gaW50NCkKIFJFVFVSTlMgcGdfY2F0YWxvZy5p bnQ0IFNUUklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIAotQ1JFQVRFIEZV TkNUSU9OIGJ1ZmZlcl9jYWxsX3N0YXJ0X2lvKGJ1ZmZlciBpbnQsIGZvcl9pbnB1dCBib29sLCBu b3dhaXQgYm9vbCkKK0NSRUFURSBGVU5DVElPTiBidWZmZXJfY2FsbF9zdGFydF9pbyhidWZmZXIg aW50LCBmb3JfaW5wdXQgYm9vbCwgbm93YWl0IGJvb2wsIGFzc2lnbl9pbyBib29sIERFRkFVTFQg ZmFsc2UpCiBSRVRVUk5TIHBnX2NhdGFsb2cuYm9vbCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFUSE5B TUUnIExBTkdVQUdFIEM7CiAKQEAgLTUwLDYgKzU0LDE0IEBAIFJFVFVSTlMgcGdfY2F0YWxvZy52 b2lkIFNUUklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIAogCisvKgorICog UmVhZCBzdHJlYW0gcmVsYXRlZCBmdW5jdGlvbnMKKyAqLworQ1JFQVRFIEZVTkNUSU9OIHJlYWRf c3RyZWFtX2Zvcl9ibG9ja3MocmVsIHJlZ2NsYXNzLCBibG9ja3MgaW50NFtdLCBPVVQgYmxvY2tv ZmYgaW50NCwgT1VUIGJsb2NrbnVtIGludDQsIE9VVCBidWYgaW50NCkKK1JFVFVSTlMgU0VUT0Yg cmVjb3JkIFNUUklDVAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworCiAKIC8q CiAgKiBIYW5kbGUgcmVsYXRlZCBmdW5jdGlvbnMKQEAgLTkxLDggKzEwMywxNiBAQCBBUyAnTU9E VUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwogLyoKICAqIEluamVjdGlvbiBwb2ludCByZWxhdGVk IGZ1bmN0aW9ucwogICovCi1DUkVBVEUgRlVOQ1RJT04gaW5qX2lvX3Nob3J0X3JlYWRfYXR0YWNo KHJlc3VsdCBpbnQpCi1SRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QKK0NSRUFURSBGVU5D VElPTiBpbmpfaW9fY29tcGxldGlvbl93YWl0KHBpZCBpbnQgREVGQVVMVCBOVUxMLCByZWxmaWxl bm9kZSBvaWQgREVGQVVMVCAwKQorUkVUVVJOUyBwZ19jYXRhbG9nLnZvaWQKK0FTICdNT0RVTEVf UEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiBpbmpfaW9fY29tcGxldGlv bl9jb250aW51ZSgpCitSRVRVUk5TIHBnX2NhdGFsb2cudm9pZAorQVMgJ01PRFVMRV9QQVRITkFN RScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIGlual9pb19zaG9ydF9yZWFkX2F0dGFj aChyZXN1bHQgaW50LCBwaWQgaW50IERFRkFVTFQgTlVMTCwgcmVsZmlsZW5vZGUgb2lkIERFRkFV TFQgMCkKK1JFVFVSTlMgcGdfY2F0YWxvZy52b2lkCiBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5H VUFHRSBDOwogCiBDUkVBVEUgRlVOQ1RJT04gaW5qX2lvX3Nob3J0X3JlYWRfZGV0YWNoKCkKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYwppbmRleCBiMWFhOGFmOWVjMC4uOTExYTcxMDJh MzQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYworKysg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKQEAgLTIwLDE2ICsyMCwyMyBA QAogCiAjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCiAjaW5jbHVkZSAiZm1nci5oIgorI2lu Y2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Fpby5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvYWlvX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZfaW50ZXJuYWxzLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2NoZWNrc3Vt LmgiCisjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCIKICNpbmNsdWRlICJz dG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jbnVtYmVyLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9yZWFkX3N0cmVhbS5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIK ICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCiAK IAogUEdfTU9EVUxFX01BR0lDOwpAQCAtMzcsMTMgKzQ0LDMwIEBAIFBHX01PRFVMRV9NQUdJQzsK IAogdHlwZWRlZiBzdHJ1Y3QgSW5qSW9FcnJvclN0YXRlCiB7CisJQ29uZGl0aW9uVmFyaWFibGUg Y3Y7CisKIAlib29sCQllbmFibGVkX3Nob3J0X3JlYWQ7CiAJYm9vbAkJZW5hYmxlZF9yZW9wZW47 CiAKKwlib29sCQllbmFibGVkX2NvbXBsZXRpb25fd2FpdDsKKwlPaWQJCQljb21wbGV0aW9uX3dh aXRfcmVsZmlsZW5vZGU7CisJcGlkX3QJCWNvbXBsZXRpb25fd2FpdF9waWQ7CisJdWludDMyCQlj b21wbGV0aW9uX3dhaXRfZXZlbnQ7CisKIAlib29sCQlzaG9ydF9yZWFkX3Jlc3VsdF9zZXQ7CisJ T2lkCQkJc2hvcnRfcmVhZF9yZWxmaWxlbm9kZTsKKwlwaWRfdAkJc2hvcnRfcmVhZF9waWQ7CiAJ aW50CQkJc2hvcnRfcmVhZF9yZXN1bHQ7CiB9IEluaklvRXJyb3JTdGF0ZTsKIAordHlwZWRlZiBz dHJ1Y3QgQmxvY2tzUmVhZFN0cmVhbURhdGEKK3sKKwlpbnQJCQluYmxvY2tzOworCWludAkJCWN1 cmJsb2NrOworCXVpbnQzMgkgICAqYmxvY2tzOworfSBCbG9ja3NSZWFkU3RyZWFtRGF0YTsKKwor CiBzdGF0aWMgSW5qSW9FcnJvclN0YXRlICppbmpfaW9fZXJyb3Jfc3RhdGU7CiAKIC8qIFNoYXJl ZCBtZW1vcnkgaW5pdCBjYWxsYmFja3MgKi8KQEAgLTg1LDEwICsxMDksMTMgQEAgdGVzdF9haW9f c2htZW1fc3RhcnR1cCh2b2lkKQogCQlpbmpfaW9fZXJyb3Jfc3RhdGUtPmVuYWJsZWRfc2hvcnRf cmVhZCA9IGZhbHNlOwogCQlpbmpfaW9fZXJyb3Jfc3RhdGUtPmVuYWJsZWRfcmVvcGVuID0gZmFs c2U7CiAKKwkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZpbmpfaW9fZXJyb3Jfc3RhdGUtPmN2KTsK KwkJaW5qX2lvX2Vycm9yX3N0YXRlLT5jb21wbGV0aW9uX3dhaXRfZXZlbnQgPSBXYWl0RXZlbnRJ bmplY3Rpb25Qb2ludE5ldygiY29tcGxldGlvbl93YWl0Iik7CisKICNpZmRlZiBVU0VfSU5KRUNU SU9OX1BPSU5UUwogCQlJbmplY3Rpb25Qb2ludEF0dGFjaCgiYWlvLXByb2Nlc3MtY29tcGxldGlv bi1iZWZvcmUtc2hhcmVkIiwKIAkJCQkJCQkgInRlc3RfYWlvIiwKLQkJCQkJCQkgImlual9pb19z aG9ydF9yZWFkIiwKKwkJCQkJCQkgImlual9pb19jb21wbGV0aW9uX2hvb2siLAogCQkJCQkJCSBO VUxMLAogCQkJCQkJCSAwKTsKIAkJSW5qZWN0aW9uUG9pbnRMb2FkKCJhaW8tcHJvY2Vzcy1jb21w bGV0aW9uLWJlZm9yZS1zaGFyZWQiKTsKQEAgLTM4NCw3ICs0MTEsNyBAQCByZWFkX3JlbF9ibG9j a19sbChQR19GVU5DVElPTl9BUkdTKQogCWlmIChuYmxvY2tzIDw9IDAgfHwgbmJsb2NrcyA+IFBH X0lPVl9NQVgpCiAJCWVsb2coRVJST1IsICJuYmxvY2tzIGlzIG91dCBvZiByYW5nZSIpOwogCi0J cmVsID0gcmVsYXRpb25fb3BlbihyZWxpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJcmVsID0g cmVsYXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAogCWZvciAoaW50IGkgPSAw OyBpIDwgbmJsb2NrczsgaSsrKQogCXsKQEAgLTQ1OCw2ICs0ODUsMjcgQEAgcmVhZF9yZWxfYmxv Y2tfbGwoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVk9JRCgpOwogfQogCitQR19GVU5D VElPTl9JTkZPX1YxKGV2aWN0X3JlbCk7CitEYXR1bQorZXZpY3RfcmVsKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJT2lkCQkJcmVsaWQgPSBQR19HRVRBUkdfT0lEKDApOworCVJlbGF0aW9uCXJlbDsK KwlpbnQzMgkJYnVmZmVyc19ldmljdGVkLAorCQkJCWJ1ZmZlcnNfZmx1c2hlZCwKKwkJCQlidWZm ZXJzX3NraXBwZWQ7CisKKwlyZWwgPSByZWxhdGlvbl9vcGVuKHJlbGlkLCBBY2Nlc3NFeGNsdXNp dmVMb2NrKTsKKworCUV2aWN0UmVsVW5waW5uZWRCdWZmZXJzKHJlbCwgJmJ1ZmZlcnNfZXZpY3Rl ZCwgJmJ1ZmZlcnNfZmx1c2hlZCwKKwkJCQkJCQkmYnVmZmVyc19za2lwcGVkKTsKKworCXJlbGF0 aW9uX2Nsb3NlKHJlbCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKworCVBHX1JFVFVSTl9WT0lE KCk7Cit9CisKIFBHX0ZVTkNUSU9OX0lORk9fVjEoaW52YWxpZGF0ZV9yZWxfYmxvY2spOwogRGF0 dW0KIGludmFsaWRhdGVfcmVsX2Jsb2NrKFBHX0ZVTkNUSU9OX0FSR1MpCkBAIC02MTAsNiArNjU4 LDg2IEBAIGJ1ZmZlcl9jYWxsX3Rlcm1pbmF0ZV9pbyhQR19GVU5DVElPTl9BUkdTKQogCVBHX1JF VFVSTl9WT0lEKCk7CiB9CiAKKworc3RhdGljIEJsb2NrTnVtYmVyCityZWFkX3N0cmVhbV9mb3Jf YmxvY2tzX2NiKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCSAgdm9pZCAqY2FsbGJhY2tfcHJp dmF0ZV9kYXRhLAorCQkJCQkJICB2b2lkICpwZXJfYnVmZmVyX2RhdGEpCit7CisJQmxvY2tzUmVh ZFN0cmVhbURhdGEgKnN0cmVhbV9kYXRhID0gY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCisJaWYg KHN0cmVhbV9kYXRhLT5jdXJibG9jayA+PSBzdHJlYW1fZGF0YS0+bmJsb2NrcykKKwkJcmV0dXJu IEludmFsaWRCbG9ja051bWJlcjsKKwlyZXR1cm4gc3RyZWFtX2RhdGEtPmJsb2Nrc1tzdHJlYW1f ZGF0YS0+Y3VyYmxvY2srK107Cit9CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocmVhZF9zdHJlYW1f Zm9yX2Jsb2Nrcyk7CitEYXR1bQorcmVhZF9zdHJlYW1fZm9yX2Jsb2NrcyhQR19GVU5DVElPTl9B UkdTKQoreworCU9pZAkJCXJlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsKKwlBcnJheVR5cGUgICpi bG9ja3NhcnJheSA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgxKTsKKwlSZXR1cm5TZXRJbmZvICpy c2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJUmVsYXRpb24J cmVsOworCUJsb2Nrc1JlYWRTdHJlYW1EYXRhIHN0cmVhbV9kYXRhOworCVJlYWRTdHJlYW0gKnN0 cmVhbTsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8qCisJICogV2Ug ZXhwZWN0IHRoZSBpbnB1dCB0byBiZSBhbiBOLWVsZW1lbnQgaW50NCBhcnJheTsgdmVyaWZ5IHRo YXQuIFdlCisJICogZG9uJ3QgbmVlZCB0byB1c2UgZGVjb25zdHJ1Y3RfYXJyYXkoKSBzaW5jZSB0 aGUgYXJyYXkgZGF0YSBpcyBqdXN0CisJICogZ29pbmcgdG8gbG9vayBsaWtlIGEgQyBhcnJheSBv ZiBOIGludDQgdmFsdWVzLgorCSAqLworCWlmIChBUlJfTkRJTShibG9ja3NhcnJheSkgIT0gMSB8 fAorCQlBUlJfSEFTTlVMTChibG9ja3NhcnJheSkgfHwKKwkJQVJSX0VMRU1UWVBFKGJsb2Nrc2Fy cmF5KSAhPSBJTlQ0T0lEKQorCQllbG9nKEVSUk9SLCAiZXhwZWN0ZWQgMSBkaW1lbnNpb25hbCBp bnQ0IGFycmF5Iik7CisKKwlzdHJlYW1fZGF0YS5jdXJibG9jayA9IDA7CisJc3RyZWFtX2RhdGEu bmJsb2NrcyA9IEFSUl9ESU1TKGJsb2Nrc2FycmF5KVswXTsKKwlzdHJlYW1fZGF0YS5ibG9ja3Mg PSAodWludDMyICopIEFSUl9EQVRBX1BUUihibG9ja3NhcnJheSk7CisKKwlyZWwgPSByZWxhdGlv bl9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJc3RyZWFtID0gcmVhZF9zdHJlYW1f YmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fRlVMTCwKKwkJCQkJCQkJCQlOVUxMLAorCQkJCQkJ CQkJCXJlbCwKKwkJCQkJCQkJCQlNQUlOX0ZPUktOVU0sCisJCQkJCQkJCQkJcmVhZF9zdHJlYW1f Zm9yX2Jsb2Nrc19jYiwKKwkJCQkJCQkJCQkmc3RyZWFtX2RhdGEsCisJCQkJCQkJCQkJMCk7CisK Kwlmb3IgKGludCBpID0gMDsgaSA8IHN0cmVhbV9kYXRhLm5ibG9ja3M7IGkrKykKKwl7CisJCUJ1 ZmZlcgkJYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoc3RyZWFtLCBOVUxMKTsKKwkJRGF0 dW0JCXZhbHVlc1szXSA9IHswfTsKKwkJYm9vbAkJbnVsbHNbM10gPSB7MH07CisKKwkJaWYgKCFC dWZmZXJJc1ZhbGlkKGJ1ZikpCisJCQllbG9nKEVSUk9SLCAicmVhZF9zdHJlYW1fbmV4dF9idWZm ZXIoKSBjYWxsICVkIGlzIHVuZXhwZWN0ZWRseSBpbnZhbGlkIiwgaSk7CisKKwkJdmFsdWVzWzBd ID0gSW50MzJHZXREYXR1bShpKTsKKwkJdmFsdWVzWzFdID0gVUludDMyR2V0RGF0dW0oc3RyZWFt X2RhdGEuYmxvY2tzW2ldKTsKKwkJdmFsdWVzWzJdID0gVUludDMyR2V0RGF0dW0oYnVmKTsKKwor CQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNj LCB2YWx1ZXMsIG51bGxzKTsKKworCQlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJfQorCisJaWYgKHJl YWRfc3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCkgIT0gSW52YWxpZEJ1ZmZlcikKKwkJ ZWxvZyhFUlJPUiwgInJlYWRfc3RyZWFtX25leHRfYnVmZmVyKCkgY2FsbCAlZCBpcyB1bmV4cGVj dGVkbHkgdmFsaWQiLAorCQkJIHN0cmVhbV9kYXRhLm5ibG9ja3MgKyAxKTsKKworCXJlYWRfc3Ry ZWFtX2VuZChzdHJlYW0pOworCisJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOworCisJcmV0 dXJuIChEYXR1bSkgMDsKK30KKworCiBQR19GVU5DVElPTl9JTkZPX1YxKGhhbmRsZV9nZXQpOwog RGF0dW0KIGhhbmRsZV9nZXQoUEdfRlVOQ1RJT05fQVJHUykKQEAgLTY4MCwxNSArODA4LDk4IEBA IGJhdGNoX2VuZChQR19GVU5DVElPTl9BUkdTKQogfQogCiAjaWZkZWYgVVNFX0lOSkVDVElPTl9Q T0lOVFMKLWV4dGVybiBQR0RMTEVYUE9SVCB2b2lkIGlual9pb19zaG9ydF9yZWFkKGNvbnN0IGNo YXIgKm5hbWUsCi0JCQkJCQkJCQkJICBjb25zdCB2b2lkICpwcml2YXRlX2RhdGEsCi0JCQkJCQkJ CQkJICB2b2lkICphcmcpOworZXh0ZXJuIFBHRExMRVhQT1JUIHZvaWQgaW5qX2lvX2NvbXBsZXRp b25faG9vayhjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJCQkJCQkgICBjb25zdCB2b2lkICpwcml2 YXRlX2RhdGEsCisJCQkJCQkJCQkJCSAgIHZvaWQgKmFyZyk7CiBleHRlcm4gUEdETExFWFBPUlQg dm9pZCBpbmpfaW9fcmVvcGVuKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCQkJCQkgIGNvbnN0IHZv aWQgKnByaXZhdGVfZGF0YSwKIAkJCQkJCQkJCSAgdm9pZCAqYXJnKTsKIAotdm9pZAotaW5qX2lv X3Nob3J0X3JlYWQoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhLCB2 b2lkICphcmcpCitzdGF0aWMgYm9vbAoraW5qX2lvX3Nob3J0X3JlYWRfbWF0Y2hlcyhQZ0Fpb0hh bmRsZSAqaW9oKQoreworCVBHUFJPQwkgICAqb3duZXJfcHJvYzsKKwlpbnQzMgkJb3duZXJfcGlk OworCVBnQWlvVGFyZ2V0RGF0YSAqdGQ7CisKKwlpZiAoIWlual9pb19lcnJvcl9zdGF0ZS0+ZW5h YmxlZF9zaG9ydF9yZWFkKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIWlual9pb19lcnJvcl9z dGF0ZS0+c2hvcnRfcmVhZF9yZXN1bHRfc2V0KQorCQlyZXR1cm4gZmFsc2U7CisKKwlvd25lcl9w cm9jID0gR2V0UEdQcm9jQnlOdW1iZXIocGdhaW9faW9fZ2V0X293bmVyKGlvaCkpOworCW93bmVy X3BpZCA9IG93bmVyX3Byb2MtPnBpZDsKKworCWlmIChpbmpfaW9fZXJyb3Jfc3RhdGUtPnNob3J0 X3JlYWRfcGlkICE9IDAgJiYKKwkJaW5qX2lvX2Vycm9yX3N0YXRlLT5zaG9ydF9yZWFkX3BpZCAh PSBvd25lcl9waWQpCisJCXJldHVybiBmYWxzZTsKKworCXRkID0gcGdhaW9faW9fZ2V0X3Rhcmdl dF9kYXRhKGlvaCk7CisKKwlpZiAoaW5qX2lvX2Vycm9yX3N0YXRlLT5zaG9ydF9yZWFkX3JlbGZp bGVub2RlICE9IEludmFsaWRPaWQgJiYKKwkJdGQtPnNtZ3IucmxvY2F0b3IucmVsTnVtYmVyICE9 IGlual9pb19lcnJvcl9zdGF0ZS0+c2hvcnRfcmVhZF9yZWxmaWxlbm9kZSkKKwkJcmV0dXJuIGZh bHNlOworCisJLyoKKwkgKiBPbmx5IHNob3J0ZW4gcmVhZHMgdGhhdCBhcmUgYWN0dWFsbHkgbG9u Z2VyIHRoYW4gdGhlIHRhcmdldCBzaXplLAorCSAqIG90aGVyd2lzZSB3ZSBjYW4gdHJpZ2dlciBv dmVyLXJlYWRzLgorCSAqLworCWlmIChpbmpfaW9fZXJyb3Jfc3RhdGUtPnNob3J0X3JlYWRfcmVz dWx0ID49IGlvaC0+cmVzdWx0KQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30K Kworc3RhdGljIGJvb2wKK2lual9pb19jb21wbGV0aW9uX3dhaXRfbWF0Y2hlcyhQZ0Fpb0hhbmRs ZSAqaW9oKQoreworCVBHUFJPQwkgICAqb3duZXJfcHJvYzsKKwlpbnQzMgkJb3duZXJfcGlkOwor CVBnQWlvVGFyZ2V0RGF0YSAqdGQ7CisKKwlpZiAoIWlual9pb19lcnJvcl9zdGF0ZS0+ZW5hYmxl ZF9jb21wbGV0aW9uX3dhaXQpCisJCXJldHVybiBmYWxzZTsKKworCW93bmVyX3Byb2MgPSBHZXRQ R1Byb2NCeU51bWJlcihwZ2Fpb19pb19nZXRfb3duZXIoaW9oKSk7CisJb3duZXJfcGlkID0gb3du ZXJfcHJvYy0+cGlkOworCisJaWYgKGlual9pb19lcnJvcl9zdGF0ZS0+Y29tcGxldGlvbl93YWl0 X3BpZCAhPSBvd25lcl9waWQpCisJCXJldHVybiBmYWxzZTsKKworCXRkID0gcGdhaW9faW9fZ2V0 X3RhcmdldF9kYXRhKGlvaCk7CisKKwlpZiAoaW5qX2lvX2Vycm9yX3N0YXRlLT5jb21wbGV0aW9u X3dhaXRfcmVsZmlsZW5vZGUgIT0gSW52YWxpZE9pZCAmJgorCQl0ZC0+c21nci5ybG9jYXRvci5y ZWxOdW1iZXIgIT0gaW5qX2lvX2Vycm9yX3N0YXRlLT5jb21wbGV0aW9uX3dhaXRfcmVsZmlsZW5v ZGUpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAor aW5qX2lvX2NvbXBsZXRpb25fd2FpdF9ob29rKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQg KnByaXZhdGVfZGF0YSwgdm9pZCAqYXJnKQoreworCVBnQWlvSGFuZGxlICppb2ggPSAoUGdBaW9I YW5kbGUgKikgYXJnOworCisJaWYgKCFpbmpfaW9fY29tcGxldGlvbl93YWl0X21hdGNoZXMoaW9o KSkKKwkJcmV0dXJuOworCisJQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVlcCgmaW5qX2lv X2Vycm9yX3N0YXRlLT5jdik7CisKKwl3aGlsZSAodHJ1ZSkKKwl7CisJCWlmICghaW5qX2lvX2Nv bXBsZXRpb25fd2FpdF9tYXRjaGVzKGlvaCkpCisJCQlicmVhazsKKworCQlDb25kaXRpb25WYXJp YWJsZVNsZWVwKCZpbmpfaW9fZXJyb3Jfc3RhdGUtPmN2LAorCQkJCQkJCSAgIGlual9pb19lcnJv cl9zdGF0ZS0+Y29tcGxldGlvbl93YWl0X2V2ZW50KTsKKwl9CisKKwlDb25kaXRpb25WYXJpYWJs ZUNhbmNlbFNsZWVwKCk7Cit9CisKK3N0YXRpYyB2b2lkCitpbmpfaW9fc2hvcnRfcmVhZF9ob29r KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnByaXZhdGVfZGF0YSwgdm9pZCAqYXJnKQog ewogCVBnQWlvSGFuZGxlICppb2ggPSAoUGdBaW9IYW5kbGUgKikgYXJnOwogCkBAIC02OTcsNTgg KzkwOCw1NiBAQCBpbmpfaW9fc2hvcnRfcmVhZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lk ICpwcml2YXRlX2RhdGEsIHZvaWQgKmFyZykKIAkJCQkgICBpbmpfaW9fZXJyb3Jfc3RhdGUtPmVu YWJsZWRfcmVvcGVuKSwKIAkJCWVycmhpZGVzdG10KHRydWUpLCBlcnJoaWRlY29udGV4dCh0cnVl KSk7CiAKLQlpZiAoaW5qX2lvX2Vycm9yX3N0YXRlLT5lbmFibGVkX3Nob3J0X3JlYWQpCisJaWYg KGlual9pb19zaG9ydF9yZWFkX21hdGNoZXMoaW9oKSkKIAl7CisJCXN0cnVjdCBpb3ZlYyAqaW92 ID0gJnBnYWlvX2N0bC0+aW92ZWNzW2lvaC0+aW92ZWNfb2ZmXTsKKwkJaW50MzIJCW9sZF9yZXN1 bHQgPSBpb2gtPnJlc3VsdDsKKwkJaW50MzIJCW5ld19yZXN1bHQgPSBpbmpfaW9fZXJyb3Jfc3Rh dGUtPnNob3J0X3JlYWRfcmVzdWx0OworCQlpbnQzMgkJcHJvY2Vzc2VkID0gMDsKKworCQllcmVw b3J0KExPRywKKwkJCQllcnJtc2coInNob3J0IHJlYWQgaW5qZWN0IHBvaW50LCBjaGFuZ2luZyBy ZXN1bHQgZnJvbSAlZCB0byAlZCIsCisJCQkJCSAgIG9sZF9yZXN1bHQsIG5ld19yZXN1bHQpLAor CQkJCWVycmhpZGVzdG10KHRydWUpLCBlcnJoaWRlY29udGV4dCh0cnVlKSk7CisKIAkJLyoKLQkJ ICogT25seSBzaG9ydGVuIHJlYWRzIHRoYXQgYXJlIGFjdHVhbGx5IGxvbmdlciB0aGFuIHRoZSB0 YXJnZXQgc2l6ZSwKLQkJICogb3RoZXJ3aXNlIHdlIGNhbiB0cmlnZ2VyIG92ZXItcmVhZHMuCisJ CSAqIFRoZSB1bmRlcmx5aW5nIElPIGFjdHVhbGx5IGNvbXBsZXRlZCBPSywgYW5kIHRodXMgdGhl ICJpbnZhbGlkIgorCQkgKiBwb3J0aW9uIG9mIHRoZSBJT1YgYWN0dWFsbHkgY29udGFpbnMgdmFs aWQgZGF0YS4gVGhhdCBjYW4gaGlkZSBhCisJCSAqIGxvdCBvZiBwcm9ibGVtcywgZS5nLiBpZiB3 ZSB3ZXJlIHRvIHdyb25nbHkgbWFyayBhIGJ1ZmZlciwgdGhhdAorCQkgKiB3YXNuJ3QgcmVhZCBh Y2NvcmRpbmcgdG8gdGhlIHNob3J0ZW5lZC1yZWFkLCBJTyBhcyB2YWxpZCwgdGhlCisJCSAqIGNv bnRlbnRzIHdvdWxkIGxvb2sgdmFsaWQgYW5kIHdlIG1pZ2h0IG1pc3MgYSBidWcuCisJCSAqCisJ CSAqIFRvIGF2b2lkIHRoYXQsIGl0ZXJhdGUgdGhyb3VnaCB0aGUgSU9WIGFuZCB6ZXJvIG91dCB0 aGUgImZhaWxlZCIKKwkJICogcG9ydGlvbiBvZiB0aGUgSU8uCiAJCSAqLwotCQlpZiAoaW5qX2lv X2Vycm9yX3N0YXRlLT5zaG9ydF9yZWFkX3Jlc3VsdF9zZXQKLQkJCSYmIGlvaC0+b3AgPT0gUEdB SU9fT1BfUkVBRFYKLQkJCSYmIGlual9pb19lcnJvcl9zdGF0ZS0+c2hvcnRfcmVhZF9yZXN1bHQg PD0gaW9oLT5yZXN1bHQpCisJCWZvciAoaW50IGkgPSAwOyBpIDwgaW9oLT5vcF9kYXRhLnJlYWQu aW92X2xlbmd0aDsgaSsrKQogCQl7Ci0JCQlzdHJ1Y3QgaW92ZWMgKmlvdiA9ICZwZ2Fpb19jdGwt PmlvdmVjc1tpb2gtPmlvdmVjX29mZl07Ci0JCQlpbnQzMgkJb2xkX3Jlc3VsdCA9IGlvaC0+cmVz dWx0OwotCQkJaW50MzIJCW5ld19yZXN1bHQgPSBpbmpfaW9fZXJyb3Jfc3RhdGUtPnNob3J0X3Jl YWRfcmVzdWx0OwotCQkJaW50MzIJCXByb2Nlc3NlZCA9IDA7Ci0KLQkJCWVyZXBvcnQoTE9HLAot CQkJCQllcnJtc2coInNob3J0IHJlYWQgaW5qZWN0IHBvaW50LCBjaGFuZ2luZyByZXN1bHQgZnJv bSAlZCB0byAlZCIsCi0JCQkJCQkgICBvbGRfcmVzdWx0LCBuZXdfcmVzdWx0KSwKLQkJCQkJZXJy aGlkZXN0bXQodHJ1ZSksIGVycmhpZGVjb250ZXh0KHRydWUpKTsKLQotCQkJLyoKLQkJCSAqIFRo ZSB1bmRlcmx5aW5nIElPIGFjdHVhbGx5IGNvbXBsZXRlZCBPSywgYW5kIHRodXMgdGhlICJpbnZh bGlkIgotCQkJICogcG9ydGlvbiBvZiB0aGUgSU9WIGFjdHVhbGx5IGNvbnRhaW5zIHZhbGlkIGRh dGEuIFRoYXQgY2FuIGhpZGUKLQkJCSAqIGEgbG90IG9mIHByb2JsZW1zLCBlLmcuIGlmIHdlIHdl cmUgdG8gd3JvbmdseSBtYXJrIGEgYnVmZmVyLAotCQkJICogdGhhdCB3YXNuJ3QgcmVhZCBhY2Nv cmRpbmcgdG8gdGhlIHNob3J0ZW5lZC1yZWFkLCBJTyBhcyB2YWxpZCwKLQkJCSAqIHRoZSBjb250 ZW50cyB3b3VsZCBsb29rIHZhbGlkIGFuZCB3ZSBtaWdodCBtaXNzIGEgYnVnLgotCQkJICoKLQkJ CSAqIFRvIGF2b2lkIHRoYXQsIGl0ZXJhdGUgdGhyb3VnaCB0aGUgSU9WIGFuZCB6ZXJvIG91dCB0 aGUKLQkJCSAqICJmYWlsZWQiIHBvcnRpb24gb2YgdGhlIElPLgotCQkJICovCi0JCQlmb3IgKGlu dCBpID0gMDsgaSA8IGlvaC0+b3BfZGF0YS5yZWFkLmlvdl9sZW5ndGg7IGkrKykKKwkJCWlmIChw cm9jZXNzZWQgKyBpb3ZbaV0uaW92X2xlbiA8PSBuZXdfcmVzdWx0KQorCQkJCXByb2Nlc3NlZCAr PSBpb3ZbaV0uaW92X2xlbjsKKwkJCWVsc2UgaWYgKHByb2Nlc3NlZCA8PSBuZXdfcmVzdWx0KQog CQkJewotCQkJCWlmIChwcm9jZXNzZWQgKyBpb3ZbaV0uaW92X2xlbiA8PSBuZXdfcmVzdWx0KQot CQkJCQlwcm9jZXNzZWQgKz0gaW92W2ldLmlvdl9sZW47Ci0JCQkJZWxzZSBpZiAocHJvY2Vzc2Vk IDw9IG5ld19yZXN1bHQpCi0JCQkJewotCQkJCQl1aW50MzIJCW9rX3BhcnQgPSBuZXdfcmVzdWx0 IC0gcHJvY2Vzc2VkOwotCi0JCQkJCW1lbXNldCgoY2hhciAqKSBpb3ZbaV0uaW92X2Jhc2UgKyBv a19wYXJ0LCAwLCBpb3ZbaV0uaW92X2xlbiAtIG9rX3BhcnQpOwotCQkJCQlwcm9jZXNzZWQgKz0g aW92W2ldLmlvdl9sZW47Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCW1lbXNldCgoY2hh ciAqKSBpb3ZbaV0uaW92X2Jhc2UsIDAsIGlvdltpXS5pb3ZfbGVuKTsKLQkJCQl9Ci0JCQl9CisJ CQkJdWludDMyCQlva19wYXJ0ID0gbmV3X3Jlc3VsdCAtIHByb2Nlc3NlZDsKIAotCQkJaW9oLT5y ZXN1bHQgPSBuZXdfcmVzdWx0OworCQkJCW1lbXNldCgoY2hhciAqKSBpb3ZbaV0uaW92X2Jhc2Ug KyBva19wYXJ0LCAwLCBpb3ZbaV0uaW92X2xlbiAtIG9rX3BhcnQpOworCQkJCXByb2Nlc3NlZCAr PSBpb3ZbaV0uaW92X2xlbjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQltZW1zZXQoKGNoYXIg KikgaW92W2ldLmlvdl9iYXNlLCAwLCBpb3ZbaV0uaW92X2xlbik7CisJCQl9CiAJCX0KKworCQlp b2gtPnJlc3VsdCA9IG5ld19yZXN1bHQ7CiAJfQogfQogCit2b2lkCitpbmpfaW9fY29tcGxldGlv bl9ob29rKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnByaXZhdGVfZGF0YSwgdm9pZCAq YXJnKQoreworCWlual9pb19jb21wbGV0aW9uX3dhaXRfaG9vayhuYW1lLCBwcml2YXRlX2RhdGEs IGFyZyk7CisJaW5qX2lvX3Nob3J0X3JlYWRfaG9vayhuYW1lLCBwcml2YXRlX2RhdGEsIGFyZyk7 Cit9CisKIHZvaWQKIGlual9pb19yZW9wZW4oY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAq cHJpdmF0ZV9kYXRhLCB2b2lkICphcmcpCiB7CkBAIC03NjIsNiArOTcxLDM5IEBAIGlual9pb19y ZW9wZW4oY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhLCB2b2lkICph cmcpCiB9CiAjZW5kaWYKIAorUEdfRlVOQ1RJT05fSU5GT19WMShpbmpfaW9fY29tcGxldGlvbl93 YWl0KTsKK0RhdHVtCitpbmpfaW9fY29tcGxldGlvbl93YWl0KFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisjaWZkZWYgVVNFX0lOSkVDVElPTl9QT0lOVFMKKwlpbmpfaW9fZXJyb3Jfc3RhdGUtPmVuYWJs ZWRfY29tcGxldGlvbl93YWl0ID0gdHJ1ZTsKKwlpbmpfaW9fZXJyb3Jfc3RhdGUtPmNvbXBsZXRp b25fd2FpdF9waWQgPQorCQlQR19BUkdJU05VTEwoMCkgPyAwIDogUEdfR0VUQVJHX0lOVDMyKDAp OworCWlual9pb19lcnJvcl9zdGF0ZS0+Y29tcGxldGlvbl93YWl0X3JlbGZpbGVub2RlID0KKwkJ UEdfQVJHSVNOVUxMKDEpID8gSW52YWxpZE9pZCA6IFBHX0dFVEFSR19PSUQoMSk7CisjZWxzZQor CWVsb2coRVJST1IsICJpbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQiKTsKKyNlbmRpZgor CisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworUEdfRlVOQ1RJT05fSU5GT19WMShpbmpfaW9fY29t cGxldGlvbl9jb250aW51ZSk7CitEYXR1bQoraW5qX2lvX2NvbXBsZXRpb25fY29udGludWUoUEdf RlVOQ1RJT05fQVJHUykKK3sKKyNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUworCWlual9pb19l cnJvcl9zdGF0ZS0+ZW5hYmxlZF9jb21wbGV0aW9uX3dhaXQgPSBmYWxzZTsKKwlpbmpfaW9fZXJy b3Jfc3RhdGUtPmNvbXBsZXRpb25fd2FpdF9waWQgPSAwOworCWlual9pb19lcnJvcl9zdGF0ZS0+ Y29tcGxldGlvbl93YWl0X3JlbGZpbGVub2RlID0gSW52YWxpZE9pZDsKKwlDb25kaXRpb25WYXJp YWJsZUJyb2FkY2FzdCgmaW5qX2lvX2Vycm9yX3N0YXRlLT5jdik7CisjZWxzZQorCWVsb2coRVJS T1IsICJpbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQiKTsKKyNlbmRpZgorCisJUEdfUkVU VVJOX1ZPSUQoKTsKK30KKwogUEdfRlVOQ1RJT05fSU5GT19WMShpbmpfaW9fc2hvcnRfcmVhZF9h dHRhY2gpOwogRGF0dW0KIGlual9pb19zaG9ydF9yZWFkX2F0dGFjaChQR19GVU5DVElPTl9BUkdT KQpAQCAtNzcxLDYgKzEwMTMsMTAgQEAgaW5qX2lvX3Nob3J0X3JlYWRfYXR0YWNoKFBHX0ZVTkNU SU9OX0FSR1MpCiAJaW5qX2lvX2Vycm9yX3N0YXRlLT5zaG9ydF9yZWFkX3Jlc3VsdF9zZXQgPSAh UEdfQVJHSVNOVUxMKDApOwogCWlmIChpbmpfaW9fZXJyb3Jfc3RhdGUtPnNob3J0X3JlYWRfcmVz dWx0X3NldCkKIAkJaW5qX2lvX2Vycm9yX3N0YXRlLT5zaG9ydF9yZWFkX3Jlc3VsdCA9IFBHX0dF VEFSR19JTlQzMigwKTsKKwlpbmpfaW9fZXJyb3Jfc3RhdGUtPnNob3J0X3JlYWRfcGlkID0KKwkJ UEdfQVJHSVNOVUxMKDEpID8gMCA6IFBHX0dFVEFSR19JTlQzMigxKTsKKwlpbmpfaW9fZXJyb3Jf c3RhdGUtPnNob3J0X3JlYWRfcmVsZmlsZW5vZGUgPQorCQlQR19BUkdJU05VTEwoMikgPyAwIDog UEdfR0VUQVJHX09JRCgyKTsKICNlbHNlCiAJZWxvZyhFUlJPUiwgImluamVjdGlvbiBwb2ludHMg bm90IHN1cHBvcnRlZCIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDc3 ZTNjMDQxNDRlLi42NjhmYWFhNTYxNSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTMw Myw2ICszMDMsNyBAQCBCbG9ja1NhbXBsZXIKIEJsb2NrU2FtcGxlckRhdGEKIEJsb2NrZWRQcm9j RGF0YQogQmxvY2tlZFByb2NzRGF0YQorQmxvY2tzUmVhZFN0cmVhbURhdGEKIEJsb2NrdGFibGVF bnRyeQogQmxvb21CdWlsZFN0YXRlCiBCbG9vbUZpbHRlcgotLSAKMi40My4wCgo= --0000000000000630b5064c23f9ff Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0004-test-fixes.patch" Content-Disposition: attachment; filename="v4-0004-test-fixes.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmb0psro3 RnJvbSBkMWViMDE0YjA0M2Q3MTcwMmJmZjZkMWJhMTFlOTBjMWU3ZjBjMTdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBUdWUsIDMgTWFyIDIwMjYgMTM6Mjc6NTEgLTA1MDAKU3ViamVjdDogW1BB VENIIHY0IDQvNl0gdGVzdCBmaXhlcwoKVGhlIHB1bXBfdW50aWwgY2hhbmdlIGlzIG5lZWRlZCBm b3IgdGhlIHRlc3QgdG8gd29yayByZWxpYWJseSBvbiBCU0QuCi0tLQogc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2Fpby90LzAwNF9yZWFkX3N0cmVhbS5wbCB8IDE1ICsrKysrKysrLS0tLS0tLQogc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbCAgICB8ICAyICstCiAyIGZp bGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDA0X3JlYWRfc3RyZWFtLnBsIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwNF9yZWFkX3N0cmVhbS5wbAppbmRleCA4OWNmYWJiYjFk My4uZjNmYTAxOGRkMWMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8w MDRfcmVhZF9zdHJlYW0ucGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwNF9y ZWFkX3N0cmVhbS5wbApAQCAtMzUsNyArMzUsNyBAQCAkbm9kZS0+c3RvcCgpOwogCiBmb3JlYWNo IG15ICRtZXRob2QgKFRlc3RBaW86OnN1cHBvcnRlZF9pb19tZXRob2RzKCkpCiB7Ci0JJG5vZGUt PmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnaW9fbWV0aG9kJywgJ3dvcmtlcicpOwor CSRub2RlLT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ2lvX21ldGhvZCcsICRtZXRo b2QpOwogCSRub2RlLT5zdGFydCgpOwogCXRlc3RfaW9fbWV0aG9kKCRtZXRob2QsICRub2RlKTsK IAkkbm9kZS0+c3RvcCgpOwpAQCAtMjA1LDE1ICsyMDUsMTMgQEAgU0VMRUNUIGFycmF5X2FnZyhi bG9ja251bSkgRlJPTSByZWFkX3N0cmVhbV9mb3JfYmxvY2tzKCdsYXJnZWlzaCcsIEFSUkFZWzAs IDIsIDUKIAkJJHBzcWxfYS0+e3J1bn0sICRwc3FsX2EtPnt0aW1lb3V0fSwKIAkJXCRwc3FsX2Et PntzdGRvdXR9LCBxci9cezAsMiw1LDdcfS8pOwogCi0JJHBzcWxfYi0+e3J1bn0tPnB1bXBfbmIo KTsKLQlsaWtlKAotCQkkcHNxbF9iLT57c3RkZXJyfSwKLQkJcXIvLipFUlJPUi4qY291bGQgbm90 IHJlYWQgYmxvY2tzIDUuLjUuKiQvLAotCQkiJGlvX21ldGhvZDogaW5qZWN0ZWQgZXJyb3Igb2Nj dXJyZWQiKTsKKwlwdW1wX3VudGlsKAorCQkkcHNxbF9iLT57cnVufSwgJHBzcWxfYi0+e3RpbWVv dXR9LAorCQlcJHBzcWxfYi0+e3N0ZGVycn0sIHFyL0VSUk9SLipjb3VsZCBub3QgcmVhZCBibG9j a3MgNVwuXC41Lyk7CisJb2soMSwgIiRpb19tZXRob2Q6IGluamVjdGVkIGVycm9yIG9jY3VycmVk Iik7CiAJJHBzcWxfYi0+e3N0ZGVycn0gPSAnJzsKIAkkcHNxbF9iLT5xdWVyeV9zYWZlKHFxL1NF TEVDVCBpbmpfaW9fc2hvcnRfcmVhZF9kZXRhY2goKTsvKTsKIAotCiAJb2soMSwKIAkJcXEvJGlv X21ldGhvZDogcmVhZCBzdHJlYW0gZW5jb3VudGVycyBmYWlsaW5nIElPIGJ5IGFub3RoZXIgYmFj a2VuZC8pOwogCkBAIC0yNzEsNiArMjY5LDkgQEAgc3ViIHRlc3RfaW9fbWV0aG9kCiAJbXkgJGlv X21ldGhvZCA9IHNoaWZ0OwogCW15ICRub2RlID0gc2hpZnQ7CiAKKwlpcygkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICdTSE9XIGlvX21ldGhvZCcpLAorCQkkaW9fbWV0aG9kLCAiJGlvX21l dGhvZDogaW9fbWV0aG9kIHNldCBjb3JyZWN0bHkiKTsKKwogCXRlc3RfcmVwZWF0ZWRfYmxvY2tz KCRpb19tZXRob2QsICRub2RlKTsKIAogICBTS0lQOgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9h aW8vdGVzdF9haW8tLTEuMC5zcWwKaW5kZXggZGE3Y2MwMzgyOWEuLjFjYzQ3MzRhNzQ2IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwKQEAgLTQ1LDcgKzQ1 LDcgQEAgQ1JFQVRFIEZVTkNUSU9OIGJ1ZmZlcl9jcmVhdGVfdG95KHJlbCByZWdjbGFzcywgYmxv Y2tubyBpbnQ0KQogUkVUVVJOUyBwZ19jYXRhbG9nLmludDQgU1RSSUNUCiBBUyAnTU9EVUxFX1BB VEhOQU1FJyBMQU5HVUFHRSBDOwogCi1DUkVBVEUgRlVOQ1RJT04gYnVmZmVyX2NhbGxfc3RhcnRf aW8oYnVmZmVyIGludCwgZm9yX2lucHV0IGJvb2wsIG5vd2FpdCBib29sLCBhc3NpZ25faW8gYm9v bCBERUZBVUxUIGZhbHNlKQorQ1JFQVRFIEZVTkNUSU9OIGJ1ZmZlcl9jYWxsX3N0YXJ0X2lvKGJ1 ZmZlciBpbnQsIGZvcl9pbnB1dCBib29sLCBub3dhaXQgYm9vbCkKIFJFVFVSTlMgcGdfY2F0YWxv Zy5ib29sIFNUUklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIAotLSAKMi40 My4wCgo= --0000000000000630b5064c23f9ff Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0005-Make-buffer-hit-helper.patch" Content-Disposition: attachment; filename="v4-0005-Make-buffer-hit-helper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmb0pvpg4 RnJvbSBhODkzZDgyZmUwYWNjZDc3YzgwN2NhM2I3OTE3MTM5NTRlMzE5YTJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjU0OjAyIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2NCA1LzZdIE1ha2UgYnVmZmVyIGhpdCBoZWxwZXIKCkFscmVhZHkgdHdvIHBsYWNlcyBj b3VudCBidWZmZXIgaGl0cywgcmVxdWlyaW5nIHF1aXRlIGEgZmV3IGxpbmVzIG9mCmNvZGUgc2lu Y2Ugd2UgZG8gYWNjb3VudGluZyBpbiBzbyBtYW55IHBsYWNlcy4gRnV0dXJlIGNvbW1pdHMgd2ls bCBhZGQKbW9yZSBsb2NhdGlvbnMsIHNvIHJlZmFjdG9yIGludG8gYSBoZWxwZXIuCgpSZXZpZXdl ZC1ieTogTmF6aXIgQmlsYWwgWWF2dXogPGJ5YXZ1ejgxQGdtYWlsLmNvbT4KLS0tCiBzcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyB8IDExMSArKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgNTUgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBkMWJhYmFmZjAyMy4uYTc0OTk3 MWJhN2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC02MzksNiArNjM5LDEw IEBAIHN0YXRpYyBpbmxpbmUgQnVmZmVyRGVzYyAqQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNt Z3IsCiAJCQkJCQkJCQkgIGJvb2wgKmZvdW5kUHRyLCBJT0NvbnRleHQgaW9fY29udGV4dCk7CiBz dGF0aWMgYm9vbCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRp b24sIGludCAqbmJsb2Nrc19wcm9ncmVzcyk7CiBzdGF0aWMgdm9pZCBDaGVja1JlYWRCdWZmZXJz T3BlcmF0aW9uKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGJvb2wgaXNfY29tcGxl dGUpOworCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZCBDb3VudEJ1ZmZl ckhpdChCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCQkJCQkgIFJlbGF0 aW9uIHJlbCwgY2hhciBwZXJzaXN0ZW5jZSwgU01nclJlbGF0aW9uIHNtZ3IsCisJCQkJCQkJCQkJ CQkJICBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKIHN0YXRpYyBC dWZmZXIgR2V0VmljdGltQnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCBJT0Nv bnRleHQgaW9fY29udGV4dCk7CiBzdGF0aWMgdm9pZCBGbHVzaFVubG9ja2VkQnVmZmVyKEJ1ZmZl ckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4sCiAJCQkJCQkJCUlPT2JqZWN0IGlvX29iamVj dCwgSU9Db250ZXh0IGlvX2NvbnRleHQpOwpAQCAtMTIxNyw4ICsxMjIxLDYgQEAgUGluQnVmZmVy Rm9yQmxvY2soUmVsYXRpb24gcmVsLAogCQkJCSAgYm9vbCAqZm91bmRQdHIpCiB7CiAJQnVmZmVy RGVzYyAqYnVmSGRyOwotCUlPQ29udGV4dAlpb19jb250ZXh0OwotCUlPT2JqZWN0CWlvX29iamVj dDsKIAogCUFzc2VydChibG9ja051bSAhPSBQX05FVyk7CiAKQEAgLTEyMjcsMTcgKzEyMjksNiBA QCBQaW5CdWZmZXJGb3JCbG9jayhSZWxhdGlvbiByZWwsCiAJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9QRVJNQU5FTlQgfHwKIAkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNF X1VOTE9HR0VEKSk7CiAKLQlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkK LQl7Ci0JCWlvX2NvbnRleHQgPSBJT0NPTlRFWFRfTk9STUFMOwotCQlpb19vYmplY3QgPSBJT09C SkVDVF9URU1QX1JFTEFUSU9OOwotCX0KLQllbHNlCi0JewotCQlpb19jb250ZXh0ID0gSU9Db250 ZXh0Rm9yU3RyYXRlZ3koc3RyYXRlZ3kpOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElP TjsKLQl9Ci0KIAlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX1NUQVJUKGZvcmtOdW0sIGJs b2NrTnVtLAogCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwK IAkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKQEAgLTEyNDUs MTggKzEyMzYsMTEgQEAgUGluQnVmZmVyRm9yQmxvY2soUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJ ICAgc21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kKTsKIAogCWlmIChwZXJzaXN0ZW5jZSA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQotCXsKIAkJYnVmSGRyID0gTG9jYWxCdWZmZXJBbGxvYyhzbWdy LCBmb3JrTnVtLCBibG9ja051bSwgZm91bmRQdHIpOwotCQlpZiAoKmZvdW5kUHRyKQotCQkJcGdC dWZmZXJVc2FnZS5sb2NhbF9ibGtzX2hpdCsrOwotCX0KIAllbHNlCi0JewogCQlidWZIZHIgPSBC dWZmZXJBbGxvYyhzbWdyLCBwZXJzaXN0ZW5jZSwgZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJ IHN0cmF0ZWd5LCBmb3VuZFB0ciwgaW9fY29udGV4dCk7Ci0JCWlmICgqZm91bmRQdHIpCi0JCQlw Z0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2hpdCsrOwotCX0KKwkJCQkJCQkgc3RyYXRlZ3ksIGZv dW5kUHRyLCBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSkpOworCiAJaWYgKHJlbCkKIAl7 CiAJCS8qCkBAIC0xMjY1LDIyICsxMjQ5LDEwIEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0aW9u IHJlbCwKIAkJICogemVyb2VkIGluc3RlYWQpLCB0aGUgcGVyLXJlbGF0aW9uIHN0YXRzIGFsd2F5 cyBjb3VudCB0aGVtLgogCQkgKi8KIAkJcGdzdGF0X2NvdW50X2J1ZmZlcl9yZWFkKHJlbCk7Ci0J CWlmICgqZm91bmRQdHIpCi0JCQlwZ3N0YXRfY291bnRfYnVmZmVyX2hpdChyZWwpOwogCX0KLQlp ZiAoKmZvdW5kUHRyKQotCXsKLQkJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9ISVQsIDEsIDApOwotCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKLQkJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OwogCi0JCVRSQUNFX1BPU1RHUkVTUUxf QlVGRkVSX1JFQURfRE9ORShmb3JrTnVtLCBibG9ja051bSwKLQkJCQkJCQkJCQkgIHNtZ3ItPnNt Z3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAot CQkJCQkJCQkJCSAgdHJ1ZSk7Ci0JfQorCWlmICgqZm91bmRQdHIpCisJCUNvdW50QnVmZmVySGl0 KHN0cmF0ZWd5LCByZWwsIHBlcnNpc3RlbmNlLCBzbWdyLCBmb3JrTnVtLCBibG9ja051bSk7CiAK IAlyZXR1cm4gQnVmZmVyRGVzY3JpcHRvckdldEJ1ZmZlcihidWZIZHIpOwogfQpAQCAtMTY4Niw2 ICsxNjU4LDUxIEBAIFJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhCdWZmZXIgYnVmZmVyLCBib29sIG5v d2FpdCkKIAlyZXR1cm4gUmVhZEJ1ZmZlcnNDYW5TdGFydElPT25jZShidWZmZXIsIG5vd2FpdCk7 CiB9CiAKKy8qCisgKiBXZSB0cmFjayB2YXJpb3VzIHN0YXRzIHJlbGF0ZWQgdG8gYnVmZmVyIGhp dHMuIEJlY2F1c2UgdGhpcyBpcyBkb25lIGluIGEKKyAqIGZldyBzZXBhcmF0ZSBwbGFjZXMsIHRo aXMgaGVscGVyIGV4aXN0cyBmb3IgY29udmVuaWVuY2UuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1 dGVfYWx3YXlzX2lubGluZSB2b2lkCitDb3VudEJ1ZmZlckhpdChCdWZmZXJBY2Nlc3NTdHJhdGVn eSBzdHJhdGVneSwKKwkJCSAgIFJlbGF0aW9uIHJlbCwgY2hhciBwZXJzaXN0ZW5jZSwgU01nclJl bGF0aW9uIHNtZ3IsCisJCQkgICBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2Nr bnVtKQoreworCUlPQ29udGV4dAlpb19jb250ZXh0OworCUlPT2JqZWN0CWlvX29iamVjdDsKKwor CWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCXsKKwkJaW9fY29udGV4 dCA9IElPQ09OVEVYVF9OT1JNQUw7CisJCWlvX29iamVjdCA9IElPT0JKRUNUX1RFTVBfUkVMQVRJ T047CisJfQorCWVsc2UKKwl7CisJCWlvX2NvbnRleHQgPSBJT0NvbnRleHRGb3JTdHJhdGVneShz dHJhdGVneSk7CisJCWlvX29iamVjdCA9IElPT0JKRUNUX1JFTEFUSU9OOworCX0KKworCVRSQUNF X1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShmb3JrbnVtLAorCQkJCQkJCQkJICBibG9ja251 bSwKKwkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJ CQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJICBzbWdy LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkJCQkJICBzbWdyLT5zbWdy X3Jsb2NhdG9yLmJhY2tlbmQsCisJCQkJCQkJCQkgIHRydWUpOworCisJaWYgKHBlcnNpc3RlbmNl ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19oaXQg Kz0gMTsKKwllbHNlCisJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwlp ZiAocmVsKQorCQlwZ3N0YXRfY291bnRfYnVmZmVyX2hpdChyZWwpOworCisJcGdzdGF0X2NvdW50 X2lvX29wKGlvX29iamVjdCwgaW9fY29udGV4dCwgSU9PUF9ISVQsIDEsIDApOworCisJaWYgKFZh Y3V1bUNvc3RBY3RpdmUpCisJCVZhY3V1bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0 OworfQorCiAvKgogICogSGVscGVyIGZvciBXYWl0UmVhZEJ1ZmZlcnMoKSB0aGF0IHByb2Nlc3Nl cyB0aGUgcmVzdWx0cyBvZiBhIHJlYWR2CiAgKiBvcGVyYXRpb24sIHJhaXNpbmcgYW4gZXJyb3Ig aWYgbmVjZXNzYXJ5LgpAQCAtMTk4MSwyNSArMTk5OCw5IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVh ZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCQkg KiBtdXN0IGhhdmUgc3RhcnRlZCBvdXQgYXMgYSBtaXNzIGluIFBpbkJ1ZmZlckZvckJsb2NrKCku IFRoZSBvdGhlcgogCQkgKiBiYWNrZW5kIHdpbGwgdHJhY2sgdGhpcyBhcyBhICdyZWFkJy4KIAkJ ICovCi0JCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShmb3JrbnVtLCBibG9ja251 bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdy LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5z bWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24t PnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJICBvcGVy YXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKLQkJCQkJCQkJCQkgIHRydWUpOwot Ci0JCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQotCQkJcGdCdWZmZXJV c2FnZS5sb2NhbF9ibGtzX2hpdCArPSAxOwotCQllbHNlCi0JCQlwZ0J1ZmZlclVzYWdlLnNoYXJl ZF9ibGtzX2hpdCArPSAxOwotCi0JCWlmIChvcGVyYXRpb24tPnJlbCkKLQkJCXBnc3RhdF9jb3Vu dF9idWZmZXJfaGl0KG9wZXJhdGlvbi0+cmVsKTsKLQotCQlwZ3N0YXRfY291bnRfaW9fb3AoaW9f b2JqZWN0LCBpb19jb250ZXh0LCBJT09QX0hJVCwgMSwgMCk7Ci0KLQkJaWYgKFZhY3V1bUNvc3RB Y3RpdmUpCi0JCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKKwkJQ291 bnRCdWZmZXJIaXQob3BlcmF0aW9uLT5zdHJhdGVneSwgb3BlcmF0aW9uLT5yZWwsIHBlcnNpc3Rl bmNlLAorCQkJCQkgICBvcGVyYXRpb24tPnNtZ3IsIGZvcmtudW0sCisJCQkJCSAgIGJsb2NrbnVt ICsgb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUpOwogCX0KIAllbHNlCiAJewotLSAKMi40My4wCgo= --0000000000000630b5064c23f9ff Content-Type: text/x-patch; charset="UTF-8"; name="v4-0006-Don-t-wait-for-already-in-progress-IO.patch" Content-Disposition: attachment; filename="v4-0006-Don-t-wait-for-already-in-progress-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmb0pzg25 RnJvbSBkNmEyZDZkMzMxNmYzM2Y1YTdkZmRkMWE3MDg0ZWEyMzBkMjZhZTNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDE0OjAwOjMxIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2NCA2LzZdIERvbid0IHdhaXQgZm9yIGFscmVhZHkgaW4tcHJvZ3Jlc3MgSU8KTUlNRS1W ZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCldoZW4gYSBiYWNrZW5kIGF0dGVtcHRzIHRvIHN0 YXJ0IGEgcmVhZCBvbiBhIGJ1ZmZlciBhbmQgZmluZHMgdGhhdCBJL08KaXMgYWxyZWFkeSBpbiBw cm9ncmVzcywgaXQgcHJldmlvdXNseSB3YWl0ZWQgZm9yIHRoYXQgSS9PIHRvIGNvbXBsZXRlCmJl Zm9yZSBpbml0aWF0aW5nIHJlYWRzIGZvciBhbnkgb3RoZXIgYnVmZmVycy4gQWx0aG91Z2ggdGhl IGJhY2tlbmQgbXVzdApzdGlsbCB3YWl0IGZvciB0aGUgSS9PIHRvIGZpbmlzaCB3aGVuIGxhdGVy IGFjcXVpcmluZyB0aGUgYnVmZmVyLCBpdApzaG91bGQgbm90IG5lZWQgdG8gd2FpdCBhdCByZWFk IHN0YXJ0IHRpbWUuIE90aGVyIGJ1ZmZlcnMgbWF5IGJlCmF2YWlsYWJsZSBmb3IgSS9PLCBhbmQg aW4gc29tZSB3b3JrbG9hZHMgdGhpcyB3YWl0aW5nIHNpZ25pZmljYW50bHkKcmVkdWNlcyBjb25j dXJyZW5jeS4KCkZvciBleGFtcGxlLCBpbmRleCBzY2FucyBtYXkgcmVwZWF0ZWRseSByZXF1ZXN0 IHRoZSBzYW1lIGhlYXAgYmxvY2suIElmCnRoZSBiYWNrZW5kIHdhaXRzIGVhY2ggdGltZSBpdCBl bmNvdW50ZXJzIGFuIGluLXByb2dyZXNzIHJlYWQsIHRoZQphY2Nlc3MgcGF0dGVybiBlZmZlY3Rp dmVseSBkZWdlbmVyYXRlcyBpbnRvIHN5bmNocm9ub3VzIEkvTy4gQnkKaW50cm9kdWNpbmcgdGhl IGNvbmNlcHQgb2YgZm9yZWlnbiBJL08gb3BlcmF0aW9ucywgYSBiYWNrZW5kIGNhbiByZWNvcmQK dGhlIGJ1ZmZlcuKAmXMgd2FpdCByZWZlcmVuY2UgYW5kIGRlZmVyIHdhaXRpbmcgdW50aWwgV2Fp dFJlYWRCdWZmZXJzKCkKd2hlbiBpdCBhY3R1YWxseSBhY3F1aXJlcyB0aGUgYnVmZmVyLgoKSW4g cmFyZSBjYXNlcywgYSBiYWNrZW5kIG1heSBzdGlsbCBuZWVkIHRvIHdhaXQgd2hlbiBzdGFydGlu ZyBhIHJlYWQgaWYKaXQgZW5jb3VudGVycyBhIGJ1ZmZlciBhZnRlciBhbm90aGVyIGJhY2tlbmQg aGFzIHNldCBCTV9JT19JTl9QUk9HUkVTUwpidXQgYmVmb3JlIHRoZSBidWZmZXIgZGVzY3JpcHRv cuKAmXMgd2FpdCByZWZlcmVuY2UgaGFzIGJlZW4gc2V0LiBTdWNoCndpbmRvd3Mgc2hvdWxkIGJl IGJyaWVmIGFuZCB1bmNvbW1vbi4KCkF1dGhvcjogTWVsYW5pZSBQbGFnZW1hbiA8bWVsYW5pZXBs YWdlbWFuQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFy YXplbC5kZT4KUmV2aWV3ZWQtYnk6IE5hemlyIEJpbGFsIFlhdnV6IDxieWF2dXo4MUBnbWFpbC5j b20+Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgfCA0ODUgKysrKysr KysrKysrKysrKysrLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAg ICAgfCAgIDEgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgfCAgIDEgKwog MyBmaWxlcyBjaGFuZ2VkLCAzMjQgaW5zZXJ0aW9ucygrKSwgMTYzIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggYTc0OTk3MWJhN2UuLmY4MjA1YzNiODQ1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMTcwLDYgKzE3MCwyMSBAQCB0 eXBlZGVmIHN0cnVjdCBTTWdyU29ydEFycmF5CiAJU01nclJlbGF0aW9uIHNyZWw7CiB9IFNNZ3JT b3J0QXJyYXk7CiAKKworLyoKKyAqIEluIEFzeW5jUmVhZEJ1ZmZlcnMoKSwgd2hlbiBwcmVwYXJp bmcgYSBidWZmZXIgZm9yIHJlYWRpbmcgYW5kIHNldHRpbmcKKyAqIEJNX0lPX0lOX1BST0dSRVNT LCB0aGUgYnVmZmVyIG1heSBhbHJlYWR5IGhhdmUgSS9PIGluIHByb2dyZXNzIG9yIG1heQorICog YWxyZWFkeSBjb250YWluIHRoZSBkZXNpcmVkIGJsb2NrLiBBc3luY1JlYWRCdWZmZXJzKCkgbXVz dCBkaXN0aW5ndWlzaAorICogYmV0d2VlbiB0aGVzZSBjYXNlcyAoYW5kIHRoZSBjYXNlIHdoZXJl IGl0IHNob3VsZCBpbml0aWF0ZSBJL08pIHNvIGl0IGNhbgorICogbWFyayBhbiBpbi1wcm9ncmVz cyBidWZmZXIgYXMgZm9yZWlnbiBJL08gcmF0aGVyIHRoYW4gd2FpdGluZyBvbiBpdC4KKyAqLwor dHlwZWRlZiBlbnVtIFByZXBhcmVSZWFkQnVmZmVyX1N0YXR1cworeworCVJFQURfQlVGRkVSX0FM UkVBRFlfRE9ORSwKKwlSRUFEX0JVRkZFUl9JTl9QUk9HUkVTUywKKwlSRUFEX0JVRkZFUl9SRUFE WV9GT1JfSU8sCit9IFByZXBhcmVSZWFkQnVmZmVyX1N0YXR1czsKKwogLyogR1VDIHZhcmlhYmxl cyAqLwogYm9vbAkJemVyb19kYW1hZ2VkX3BhZ2VzID0gZmFsc2U7CiBpbnQJCQliZ3dyaXRlcl9s cnVfbWF4cGFnZXMgPSAxMDA7CkBAIC0xNjE5LDQ1ICsxNjM0LDYgQEAgQ2hlY2tSZWFkQnVmZmVy c09wZXJhdGlvbihSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBib29sIGlzX2NvbXBs ZXRlKQogI2VuZGlmCiB9CiAKLS8qIGhlbHBlciBmb3IgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKCks IHRvIGF2b2lkIHJlcGV0aXRpb24gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotUmVhZEJ1ZmZlcnND YW5TdGFydElPT25jZShCdWZmZXIgYnVmZmVyLCBib29sIG5vd2FpdCkKLXsKLQlpZiAoQnVmZmVy SXNMb2NhbChidWZmZXIpKQotCQlyZXR1cm4gU3RhcnRMb2NhbEJ1ZmZlcklPKEdldExvY2FsQnVm ZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSksCi0JCQkJCQkJCSAgdHJ1ZSwgbm93YWl0KTsKLQll bHNlCi0JCXJldHVybiBTdGFydEJ1ZmZlcklPKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0g MSksIHRydWUsIG5vd2FpdCk7Ci19Ci0KLS8qCi0gKiBIZWxwZXIgZm9yIEFzeW5jUmVhZEJ1ZmZl cnMgdGhhdCB0cmllcyB0byBnZXQgdGhlIGJ1ZmZlciByZWFkeSBmb3IgSU8uCi0gKi8KLXN0YXRp YyBpbmxpbmUgYm9vbAotUmVhZEJ1ZmZlcnNDYW5TdGFydElPKEJ1ZmZlciBidWZmZXIsIGJvb2wg bm93YWl0KQotewotCS8qCi0JICogSWYgdGhpcyBiYWNrZW5kIGN1cnJlbnRseSBoYXMgc3RhZ2Vk IElPLCB3ZSBuZWVkIHRvIHN1Ym1pdCB0aGUgcGVuZGluZwotCSAqIElPIGJlZm9yZSB3YWl0aW5n IGZvciB0aGUgcmlnaHQgdG8gaXNzdWUgSU8sIHRvIGF2b2lkIHRoZSBwb3RlbnRpYWwgZm9yCi0J ICogZGVhZGxvY2tzIChhbmQsIG1vcmUgY29tbW9ubHksIHVubmVjZXNzYXJ5IGRlbGF5cyBmb3Ig b3RoZXIgYmFja2VuZHMpLgotCSAqLwotCWlmICghbm93YWl0ICYmIHBnYWlvX2hhdmVfc3RhZ2Vk KCkpCi0JewotCQlpZiAoUmVhZEJ1ZmZlcnNDYW5TdGFydElPT25jZShidWZmZXIsIHRydWUpKQot CQkJcmV0dXJuIHRydWU7Ci0KLQkJLyoKLQkJICogVW5mb3J0dW5hdGVseSBTdGFydEJ1ZmZlcklP KCkgcmV0dXJuaW5nIGZhbHNlIGRvZXNuJ3QgYWxsb3cgdG8KLQkJICogZGlzdGluZ3Vpc2ggYmV0 d2VlbiB0aGUgYnVmZmVyIGFscmVhZHkgYmVpbmcgdmFsaWQgYW5kIElPIGFscmVhZHkKLQkJICog YmVpbmcgaW4gcHJvZ3Jlc3MuIFNpbmNlIElPIGFscmVhZHkgYmVpbmcgaW4gcHJvZ3Jlc3MgaXMg cXVpdGUKLQkJICogcmFyZSwgdGhpcyBhcHByb2FjaCBzZWVtcyBmaW5lLgotCQkgKi8KLQkJcGdh aW9fc3VibWl0X3N0YWdlZCgpOwotCX0KLQotCXJldHVybiBSZWFkQnVmZmVyc0NhblN0YXJ0SU9P bmNlKGJ1ZmZlciwgbm93YWl0KTsKLX0KLQogLyoKICAqIFdlIHRyYWNrIHZhcmlvdXMgc3RhdHMg cmVsYXRlZCB0byBidWZmZXIgaGl0cy4gQmVjYXVzZSB0aGlzIGlzIGRvbmUgaW4gYQogICogZmV3 IHNlcGFyYXRlIHBsYWNlcywgdGhpcyBoZWxwZXIgZXhpc3RzIGZvciBjb252ZW5pZW5jZS4KQEAg LTE4MDcsNyArMTc4Myw3IEBAIFdhaXRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAq b3BlcmF0aW9uKQogCQkJICoKIAkJCSAqIHdlIGZpcnN0IGNoZWNrIGlmIHdlIGFscmVhZHkga25v dyB0aGUgSU8gaXMgY29tcGxldGUuCiAJCQkgKi8KLQkJCWlmIChhaW9fcmV0LT5yZXN1bHQuc3Rh dHVzID09IFBHQUlPX1JTX1VOS05PV04gJiYKKwkJCWlmICgob3BlcmF0aW9uLT5mb3JlaWduX2lv IHx8IGFpb19yZXQtPnJlc3VsdC5zdGF0dXMgPT0gUEdBSU9fUlNfVU5LTk9XTikgJiYKIAkJCQkh cGdhaW9fd3JlZl9jaGVja19kb25lKCZvcGVyYXRpb24tPmlvX3dyZWYpKQogCQkJewogCQkJCWlu c3RyX3RpbWUJaW9fc3RhcnQgPSBwZ3N0YXRfcHJlcGFyZV9pb190aW1lKHRyYWNrX2lvX3RpbWlu Zyk7CkBAIC0xODI2LDExICsxODAyLDMzIEBAIFdhaXRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09w ZXJhdGlvbiAqb3BlcmF0aW9uKQogCQkJCUFzc2VydChwZ2Fpb193cmVmX2NoZWNrX2RvbmUoJm9w ZXJhdGlvbi0+aW9fd3JlZikpOwogCQkJfQogCi0JCQkvKgotCQkJICogV2Ugbm93IGFyZSBzdXJl IHRoZSBJTyBjb21wbGV0ZWQuIENoZWNrIHRoZSByZXN1bHRzLiBUaGlzCi0JCQkgKiBpbmNsdWRl cyByZXBvcnRpbmcgb24gZXJyb3JzIGlmIHRoZXJlIHdlcmUgYW55LgotCQkJICovCi0JCQlQcm9j ZXNzUmVhZEJ1ZmZlcnNSZXN1bHQob3BlcmF0aW9uKTsKKwkJCWlmICh1bmxpa2VseShvcGVyYXRp b24tPmZvcmVpZ25faW8pKQorCQkJeworCQkJCUJ1ZmZlcgkJYnVmZmVyID0gb3BlcmF0aW9uLT5i dWZmZXJzW29wZXJhdGlvbi0+bmJsb2Nrc19kb25lXTsKKwkJCQlCdWZmZXJEZXNjICpkZXNjID0g QnVmZmVySXNMb2NhbChidWZmZXIpID8KKwkJCQkJR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1i dWZmZXIgLSAxKSA6CisJCQkJCUdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJCQkJ dWludDMyCQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQoJmRlc2MtPnN0YXRlKTsKKwor CQkJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwkJCQl7CisJCQkJCW9wZXJhdGlvbi0+bmJs b2Nrc19kb25lICs9IDE7CisJCQkJCUFzc2VydChvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSA8PSBv cGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkJCUNvdW50QnVmZmVySGl0KG9wZXJhdGlvbi0+c3Ry YXRlZ3ksCisJCQkJCQkJCSAgIG9wZXJhdGlvbi0+cmVsLCBvcGVyYXRpb24tPnBlcnNpc3RlbmNl LAorCQkJCQkJCQkgICBvcGVyYXRpb24tPnNtZ3IsIG9wZXJhdGlvbi0+Zm9ya251bSwKKwkJCQkJ CQkJICAgb3BlcmF0aW9uLT5ibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lKTsKKwkJ CQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBub3cgYXJlIHN1cmUg dGhlIElPIGNvbXBsZXRlZC4gQ2hlY2sgdGhlIHJlc3VsdHMuIFRoaXMKKwkJCQkgKiBpbmNsdWRl cyByZXBvcnRpbmcgb24gZXJyb3JzIGlmIHRoZXJlIHdlcmUgYW55LgorCQkJCSAqLworCQkJCVBy b2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChvcGVyYXRpb24pOworCQkJfQogCQl9CiAKIAkJLyoKQEAg LTE4NjEsNiArMTg1OSwxNjMgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9u ICpvcGVyYXRpb24pCiAJLyogTkI6IFJFQURfRE9ORSB0cmFjZXBvaW50IHdhcyBhbHJlYWR5IGV4 ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KIH0KIAorLyoKKyAqIExvY2FsIHZlcnNp b24gb2YgUHJlcGFyZU5ld1JlYWRCdWZmZXJJTygpLiBIZXJlIGluc3RlYWQgb2YgbG9jYWxidWYu YyB0bworICogYXZvaWQgYW4gZXh0ZXJuYWwgZnVuY3Rpb24gY2FsbC4KKyAqLworc3RhdGljIFBy ZXBhcmVSZWFkQnVmZmVyX1N0YXR1cworUHJlcGFyZU5ld0xvY2FsUmVhZEJ1ZmZlcklPKFJlYWRC dWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCisJCQkJCQkJQnVmZmVyIGJ1ZmZlcikKK3sKKwlC dWZmZXJEZXNjICpkZXNjID0gR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKTsK Kwl1aW50NjQJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21pY19yZWFkX3U2NCgmZGVzYy0+c3RhdGUpOwor CisJLyogQWxyZWFkeSB2YWxpZCwgbm8gd29yayB0byBkbyAqLworCWlmIChidWZfc3RhdGUgJiBC TV9WQUxJRCkKKwl7CisJCXBnYWlvX3dyZWZfY2xlYXIoJm9wZXJhdGlvbi0+aW9fd3JlZik7CisJ CXJldHVybiBSRUFEX0JVRkZFUl9BTFJFQURZX0RPTkU7CisJfQorCisJcGdhaW9fc3VibWl0X3N0 YWdlZCgpOworCisJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJmRlc2MtPmlvX3dyZWYpKQorCXsKKwkJ b3BlcmF0aW9uLT5pb193cmVmID0gZGVzYy0+aW9fd3JlZjsKKwkJb3BlcmF0aW9uLT5mb3JlaWdu X2lvID0gdHJ1ZTsKKwkJcmV0dXJuIFJFQURfQlVGRkVSX0lOX1BST0dSRVNTOworCX0KKworCS8q CisJICogV2hpbGUgaXQgaXMgcG9zc2libGUgZm9yIGEgYnVmZmVyIHRvIGhhdmUgYmVlbiBwcmVw YXJlZCBmb3IgSU8gYnV0IG5vdAorCSAqIHlldCBoYWQgaXRzIHdhaXQgcmVmZXJlbmNlIHNldCwg dGhlcmUncyBubyB3YXkgZm9yIHVzIHRvIGtub3cgdGhhdCBmb3IKKwkgKiB0ZW1wb3JhcnkgYnVm ZmVycy4gVGh1cywgd2UnbGwgcHJlcGFyZSBmb3Igb3duIElPIG9uIHRoaXMgYnVmZmVyLgorCSAq LworCXJldHVybiBSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU87Cit9CisKKy8qCisgKiBUcnkgdG8g c3RhcnQgSU8gb24gdGhlIGZpcnN0IGJ1ZmZlciBpbiBhIG5ldyBydW4gb2YgYmxvY2tzLiBJZiBB SU8gaXMgaW4KKyAqIHByb2dyZXNzLCBiZSBpdCBpbiB0aGlzIGJhY2tlbmQgb3IgYW5vdGhlciBi YWNrZW5kLCB3ZSBqdXN0IGFzc29jaWF0ZSB0aGUKKyAqIHdhaXQgcmVmZXJlbmNlIHdpdGggdGhl IG9wZXJhdGlvbiBhbmQgd2FpdCBpbiBXYWl0UmVhZEJ1ZmZlcnMoKS4gVGhpcyB0dXJucworICog b3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UgaW4gdHdvIHdvcmtsb2FkczoKKyAq CisgKiAxKSBBIHJlYWQgc3RyZWFtIHRoYXQgaGFzIHRvIHJlYWQgdGhlIHNhbWUgYmxvY2sgbXVs dGlwbGUgdGltZXMgd2l0aGluIHRoZQorICogICAgcmVhZGFoZWFkIGRpc3RhbmNlLiBUaGlzIGNh biBoYXBwZW4gZS5nLiBmb3IgdGhlIHRhYmxlIGFjY2Vzc2VzIG9mIGFuCisgKiAgICBpbmRleCBz Y2FuLgorICoKKyAqIDIpIENvbmN1cnJlbnQgc2NhbnMgYnkgbXVsdGlwbGUgYmFja2VuZHMgb24g dGhlIHNhbWUgcmVsYXRpb24uCisgKgorICogSWYgd2Ugd2VyZSB0byBzeW5jaHJvbm91c2x5IHdh aXQgZm9yIHRoZSBpbi1wcm9ncmVzcyBJTywgd2UnZCBub3QgYmUgYWJsZQorICogdG8ga2VlcCBl bm91Z2ggSS9PIGluIGZsaWdodC4KKyAqCisgKiBJZiB3ZSBkbyBmaW5kIHRoZXJlIGlzIG9uZ29p bmcgSS9PIGZvciB0aGUgYnVmZmVyLCB3ZSBzZXQgdXAgYSAxLWJsb2NrCisgKiBSZWFkQnVmZmVy c09wZXJhdGlvbiB0aGF0IFdhaXRSZWFkQnVmZmVycyB0aGVuIGNhbiB3YWl0IG9uLgorICoKKyAq IEl0J3MgcG9zc2libGUgdGhhdCBhbm90aGVyIGJhY2tlbmQgaGFzIHN0YXJ0ZWQgSU8gb24gdGhl IGJ1ZmZlciBidXQgbm90IHlldAorICogc2V0IGl0cyB3YWl0IHJlZmVyZW5jZS4gSW4gdGhpcyBj YXNlLCB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gd2FpdCBmb3IKKyAqIGVpdGhlciB0aGUgd2Fp dCByZWZlcmVuY2UgdG8gYmUgdmFsaWQgb3IgdGhlIElPIHRvIGJlIGRvbmUuCisgKi8KK3N0YXRp YyBQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKK1ByZXBhcmVOZXdSZWFkQnVmZmVySU8oUmVhZEJ1 ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKKwkJCQkJICAgQnVmZmVyIGJ1ZmZlcikKK3sKKwl1 aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNjOworCisJaWYgKEJ1ZmZlcklzTG9j YWwoYnVmZmVyKSkKKwkJcmV0dXJuIFByZXBhcmVOZXdMb2NhbFJlYWRCdWZmZXJJTyhvcGVyYXRp b24sIGJ1ZmZlcik7CisKKwlSZXNvdXJjZU93bmVyRW5sYXJnZShDdXJyZW50UmVzb3VyY2VPd25l cik7CisJZGVzYyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisKKwlmb3IgKDs7 KQorCXsKKwkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKworCQkvKiBBbHJlYWR5IHZh bGlkLCBubyB3b3JrIHRvIGRvICovCisJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwkJewor CQkJVW5sb2NrQnVmSGRyKGRlc2MpOworCQkJcGdhaW9fd3JlZl9jbGVhcigmb3BlcmF0aW9uLT5p b193cmVmKTsKKwkJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJFQURZX0RPTkU7CisJCX0KKworCQlp ZiAoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpCisJCXsKKwkJCS8qIEpvaW4gZXhpc3Rp bmcgcmVhZCAqLworCQkJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJmRlc2MtPmlvX3dyZWYpKQorCQkJ eworCQkJCW9wZXJhdGlvbi0+aW9fd3JlZiA9IGRlc2MtPmlvX3dyZWY7CisJCQkJb3BlcmF0aW9u LT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJCQlVbmxvY2tCdWZIZHIoZGVzYyk7CisJCQkJcmV0dXJu IFJFQURfQlVGRkVSX0lOX1BST0dSRVNTOworCQkJfQorCisJCQkvKgorCQkJICogSWYgdGhlIHdh aXQgcmVmIGlzIG5vdCB2YWxpZCBidXQgdGhlIElPIGlzIGluIHByb2dyZXNzLCBzb21lb25lCisJ CQkgKiBlbHNlIHN0YXJ0ZWQgSU8gYnV0IGhhc24ndCBzZXQgdGhlIHdhaXQgcmVmIHlldC4gV2Ug aGF2ZSBubworCQkJICogY2hvaWNlIGJ1dCB0byB3YWl0IHVudGlsIHRoZSBJTyBjb21wbGV0ZXMu CisJCQkgKi8KKwkJCVVubG9ja0J1ZkhkcihkZXNjKTsKKwkJCXBnYWlvX3N1Ym1pdF9zdGFnZWQo KTsKKwkJCVdhaXRJTyhkZXNjKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTm8g SU8gaW4gcHJvZ3Jlc3MgYW5kIG5vdCBhbHJlYWR5IHZhbGlkOyBXZSB3aWxsIHN0YXJ0IElPLiBJ dCdzCisJCSAqIHBvc3NpYmxlIHRoYXQgdGhlIElPIHdhcyBpbiBwcm9ncmVzcyBhbmQgbmV2ZXIg YmVjYW1lIHZhbGlkIGJlY2F1c2UKKwkJICogdGhlIElPIGVycm9yZWQgb3V0LiBXZSdsbCBkbyB0 aGUgSU8gb3Vyc2VsdmVzLgorCQkgKi8KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2MsIGJ1Zl9zdGF0 ZSwgQk1fSU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVtZW1iZXJCdWZm ZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwKKwkJCQkJCQkJCSAgQnVmZmVyRGVzY3JpcHRvckdl dEJ1ZmZlcihkZXNjKSk7CisKKwkJcmV0dXJuIFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTzsKKwl9 Cit9CisKKworLyoKKyAqIFdoZW4gYnVpbGRpbmcgYSBuZXcgSU8gZnJvbSBtdWx0aXBsZSBidWZm ZXJzLCB3ZSB3b24ndCBpbmNsdWRlIGJ1ZmZlcnMKKyAqIHRoYXQgYXJlIGFscmVhZHkgdmFsaWQg b3IgYWxyZWFkeSBpbiBwcm9ncmVzcy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZQorICog dXNlZCBmb3IgYWRkaXRpb25hbCBhZGphY2VudCBidWZmZXJzIGZvbGxvd2luZyB0aGUgaGVhZCBi dWZmZXIgaW4gYSBuZXcgSU8uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgd2Fz IHN1Y2Nlc3NmdWxseSBwcmVwYXJlZCBmb3IgSU8gYW5kIGZhbHNlIGlmIGl0CisgKiBpcyByZWpl Y3RlZCBhbmQgdGhlIHJlYWQgSU8gc2hvdWxkIG5vdCBpbmNsdWRlIHRoaXMgYnVmZmVyLgorKi8K K3N0YXRpYyBib29sCitQcmVwYXJlQWRkaXRpb25hbFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlcikK K3sKKwl1aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNjOworCisJaWYgKEJ1ZmZl cklzTG9jYWwoYnVmZmVyKSkKKwl7CisJCWRlc2MgPSBHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3Io LWJ1ZmZlciAtIDEpOworCQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQoJmRlc2MtPnN0 YXRlKTsKKwkJLyogTG9jYWwgYnVmZmVycyBkb24ndCB1c2UgQk1fSU9fSU5fUFJPR1JFU1MgKi8K KwkJaWYgKGJ1Zl9zdGF0ZSAmIEJNX1ZBTElEIHx8IHBnYWlvX3dyZWZfdmFsaWQoJmRlc2MtPmlv X3dyZWYpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlSZXNvdXJjZU93bmVy RW5sYXJnZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJCWRlc2MgPSBHZXRCdWZmZXJEZXNjcmlw dG9yKGJ1ZmZlciAtIDEpOworCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGRlc2MpOworCQlpZiAo YnVmX3N0YXRlICYgKEJNX1ZBTElEIHwgQk1fSU9fSU5fUFJPR1JFU1MpKQorCQl7CisJCQlVbmxv Y2tCdWZIZHIoZGVzYyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJVW5sb2NrQnVmSGRyRXh0 KGRlc2MsIGJ1Zl9zdGF0ZSwgQk1fSU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93 bmVyUmVtZW1iZXJCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKwl9CisK KwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIEluaXRpYXRlIElPIGZvciB0aGUgUmVhZEJ1ZmZl cnNPcGVyYXRpb24KICAqCkBAIC0xODk0LDcgKzIwNDksNzUgQEAgQXN5bmNSZWFkQnVmZmVycyhS ZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJ dm9pZAkgICAqaW9fcGFnZXNbTUFYX0lPX0NPTUJJTkVfTElNSVRdOwogCUlPQ29udGV4dAlpb19j b250ZXh0OwogCUlPT2JqZWN0CWlvX29iamVjdDsKLQlib29sCQlkaWRfc3RhcnRfaW87CisJaW5z dHJfdGltZQlpb19zdGFydDsKKwlQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMgc3RhdHVzOworCisJ LyoKKwkgKiBXZSBtdXN0IGdldCBhbiBJTyBoYW5kbGUgYmVmb3JlIFN0YXJ0TmV3QnVmZmVyUmVh ZElPKCksIGFzCisJICogcGdhaW9faW9fYWNxdWlyZSgpIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBk b24ndCB3YW50IGFmdGVyIHNldHRpbmcKKwkgKiBJT19JTl9QUk9HUkVTUy4gSWYgd2UgZG9uJ3Qg bmVlZCB0byBkbyB0aGUgSU8sIHdlJ2xsIHJlbGVhc2UgdGhlCisJICogaGFuZGxlLgorCSAqCisJ ICogSWYgd2UgbmVlZCB0byB3YWl0IGZvciBJTyBiZWZvcmUgd2UgY2FuIGdldCBhIGhhbmRsZSwg c3VibWl0CisJICogYWxyZWFkeS1zdGFnZWQgSU8gZmlyc3QsIHNvIHRoYXQgb3RoZXIgYmFja2Vu ZHMgZG9uJ3QgbmVlZCB0byB3YWl0LgorCSAqIFRoZXJlIHdvdWxkbid0IGJlIGEgZGVhZGxvY2sg cmlzaywgYXMgcGdhaW9faW9fYWNxdWlyZSgpIGp1c3QgbmVlZHMgdG8KKwkgKiB3YWl0IGZvciBh bHJlYWR5IHN1Ym1pdHRlZCBJTywgd2hpY2ggZG9lc24ndCByZXF1aXJlIGFkZGl0aW9uYWwgbG9j a3MsCisJICogYnV0IGl0IGNvdWxkIHN0aWxsIGNhdXNlIHVuZGVzaXJhYmxlIHdhaXRzLgorCSAq CisJICogQSBzZWNvbmRhcnkgYmVuZWZpdCBpcyB0aGF0IHRoaXMgd291bGQgYWxsb3cgdXMgdG8g bWVhc3VyZSB0aGUgdGltZSBpbgorCSAqIHBnYWlvX2lvX2FjcXVpcmUoKSB3aXRob3V0IGNhdXNp bmcgdW5kdWUgdGltZXIgb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiwKKwkgKiBub24tYmxvY2tpbmcs IGNhc2UuICBIb3dldmVyLCBjdXJyZW50bHkgdGhlIHBnc3RhdHMgaW5mcmFzdHJ1Y3R1cmUKKwkg KiBkb2Vzbid0IHJlYWxseSBhbGxvdyB0aGF0LCBhcyBpdCBhKSBhc3NlcnRzIHRoYXQgYW4gb3Bl cmF0aW9uIGNhbid0CisJICogaGF2ZSB0aW1lIHdpdGhvdXQgb3BlcmF0aW9ucyBiKSBkb2Vzbid0 IGhhdmUgYW4gQVBJIHRvIHJlcG9ydAorCSAqICJhY2N1bXVsYXRlZCIgdGltZS4KKwkgKi8KKwlp b2ggPSBwZ2Fpb19pb19hY3F1aXJlX25iKEN1cnJlbnRSZXNvdXJjZU93bmVyLCAmb3BlcmF0aW9u LT5pb19yZXR1cm4pOworCWlmICh1bmxpa2VseSghaW9oKSkKKwl7CisJCXBnYWlvX3N1Ym1pdF9z dGFnZWQoKTsKKwkJaW9oID0gcGdhaW9faW9fYWNxdWlyZShDdXJyZW50UmVzb3VyY2VPd25lciwg Jm9wZXJhdGlvbi0+aW9fcmV0dXJuKTsKKwl9CisKKwlvcGVyYXRpb24tPmZvcmVpZ25faW8gPSBm YWxzZTsKKworCS8qIENoZWNrIGlmIHdlIGNhbiBzdGFydCBJTyBvbiB0aGUgZmlyc3QgdG8tYmUt cmVhZCBidWZmZXIgKi8KKwlpZiAoKHN0YXR1cyA9IFByZXBhcmVOZXdSZWFkQnVmZmVySU8ob3Bl cmF0aW9uLCBidWZmZXJzW25ibG9ja3NfZG9uZV0pKSA8CisJCVJFQURfQlVGRkVSX1JFQURZX0ZP Ul9JTykKKwl7CisJCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKKwkJKm5ibG9ja3NfcHJvZ3Jlc3Mg PSAxOworCQlpZiAoc3RhdHVzID09IFJFQURfQlVGRkVSX0FMUkVBRFlfRE9ORSkKKwkJeworCQkJ LyoKKwkJCSAqIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBibG9jaywg d2UncmUgZG9uZS4KKwkJCSAqCisJCQkgKiBXaGVuIElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tz X2RvbmUgaXMgdXBkYXRlZCBpbgorCQkJICogUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KCksIGJ1 dCB0aGF0IGlzIG5vdCBjYWxsZWQgaWYgbm8gSU8gaXMKKwkJCSAqIG5lY2Vzc2FyeS4gVGh1cyB1 cGRhdGUgaGVyZS4KKwkJCSAqLworCQkJb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgKz0gMTsKKwkJ CUFzc2VydChvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOwor CisJCQkvKgorCQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMg YmFja2VuZCwgZXZlbiB0aG91Z2gKKwkJCSAqIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBh IG1pc3MgaW4gUGluQnVmZmVyRm9yQmxvY2soKS4gVGhlCisJCQkgKiBvdGhlciBiYWNrZW5kIHdp bGwgdHJhY2sgdGhpcyBhcyBhICdyZWFkJy4KKwkJCSAqLworCQkJQ291bnRCdWZmZXJIaXQob3Bl cmF0aW9uLT5zdHJhdGVneSwKKwkJCQkJCSAgIG9wZXJhdGlvbi0+cmVsLCBvcGVyYXRpb24tPnBl cnNpc3RlbmNlLAorCQkJCQkJICAgb3BlcmF0aW9uLT5zbWdyLCBvcGVyYXRpb24tPmZvcmtudW0s CisJCQkJCQkgICBvcGVyYXRpb24tPmJsb2NrbnVtICsgb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUp OworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyogVGhlIElPIGlzIGFscmVhZHkgaW4tcHJv Z3Jlc3MgKi8KKwkJQXNzZXJ0KHN0YXR1cyA9PSBSRUFEX0JVRkZFUl9JTl9QUk9HUkVTUyk7CisJ CUNoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24ob3BlcmF0aW9uLCBmYWxzZSk7CisJCXJldHVybiB0 cnVlOworCX0KKworCS8qIFdlIGNhbiByZWFkIGluIGF0IGxlYXN0IHRoZSBoZWFkIGJ1ZmZlciAu ICovCisJQXNzZXJ0KHN0YXR1cyA9PSBSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU8pOwogCiAJLyoK IAkgKiBXaGVuIHRoaXMgSU8gaXMgZXhlY3V0ZWQgc3luY2hyb25vdXNseSwgZWl0aGVyIGJlY2F1 c2UgdGhlIGNhbGxlciB3aWxsCkBAIC0xOTQ1LDEzOCArMjE2OCw3NCBAQCBBc3luY1JlYWRCdWZm ZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGludCAqbmJsb2Nrc19wcm9ncmVz cykKIAkgKi8KIAlwZ3N0YXRfcHJlcGFyZV9yZXBvcnRfY2hlY2tzdW1fZmFpbHVyZShvcGVyYXRp b24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCk7CiAKLQkvKgotCSAqIEdldCBJ TyBoYW5kbGUgYmVmb3JlIFJlYWRCdWZmZXJzQ2FuU3RhcnRJTygpLCBhcyBwZ2Fpb19pb19hY3F1 aXJlKCkKLQkgKiBtaWdodCBibG9jaywgd2hpY2ggd2UgZG9uJ3Qgd2FudCBhZnRlciBzZXR0aW5n IElPX0lOX1BST0dSRVNTLgotCSAqCi0JICogSWYgd2UgbmVlZCB0byB3YWl0IGZvciBJTyBiZWZv cmUgd2UgY2FuIGdldCBhIGhhbmRsZSwgc3VibWl0Ci0JICogYWxyZWFkeS1zdGFnZWQgSU8gZmly c3QsIHNvIHRoYXQgb3RoZXIgYmFja2VuZHMgZG9uJ3QgbmVlZCB0byB3YWl0LgotCSAqIFRoZXJl IHdvdWxkbid0IGJlIGEgZGVhZGxvY2sgcmlzaywgYXMgcGdhaW9faW9fYWNxdWlyZSgpIGp1c3Qg bmVlZHMgdG8KLQkgKiB3YWl0IGZvciBhbHJlYWR5IHN1Ym1pdHRlZCBJTywgd2hpY2ggZG9lc24n dCByZXF1aXJlIGFkZGl0aW9uYWwgbG9ja3MsCi0JICogYnV0IGl0IGNvdWxkIHN0aWxsIGNhdXNl IHVuZGVzaXJhYmxlIHdhaXRzLgotCSAqCi0JICogQSBzZWNvbmRhcnkgYmVuZWZpdCBpcyB0aGF0 IHRoaXMgd291bGQgYWxsb3cgdXMgdG8gbWVhc3VyZSB0aGUgdGltZSBpbgotCSAqIHBnYWlvX2lv X2FjcXVpcmUoKSB3aXRob3V0IGNhdXNpbmcgdW5kdWUgdGltZXIgb3ZlcmhlYWQgaW4gdGhlIGNv bW1vbiwKLQkgKiBub24tYmxvY2tpbmcsIGNhc2UuICBIb3dldmVyLCBjdXJyZW50bHkgdGhlIHBn c3RhdHMgaW5mcmFzdHJ1Y3R1cmUKLQkgKiBkb2Vzbid0IHJlYWxseSBhbGxvdyB0aGF0LCBhcyBp dCBhKSBhc3NlcnRzIHRoYXQgYW4gb3BlcmF0aW9uIGNhbid0Ci0JICogaGF2ZSB0aW1lIHdpdGhv dXQgb3BlcmF0aW9ucyBiKSBkb2Vzbid0IGhhdmUgYW4gQVBJIHRvIHJlcG9ydAotCSAqICJhY2N1 bXVsYXRlZCIgdGltZS4KLQkgKi8KLQlpb2ggPSBwZ2Fpb19pb19hY3F1aXJlX25iKEN1cnJlbnRS ZXNvdXJjZU93bmVyLCAmb3BlcmF0aW9uLT5pb19yZXR1cm4pOwotCWlmICh1bmxpa2VseSghaW9o KSkKLQl7Ci0JCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKLQotCQlpb2ggPSBwZ2Fpb19pb19hY3F1 aXJlKEN1cnJlbnRSZXNvdXJjZU93bmVyLCAmb3BlcmF0aW9uLT5pb19yZXR1cm4pOwotCX0KKwlB c3NlcnQoaW9fYnVmZmVyc1swXSA9PSBidWZmZXJzW25ibG9ja3NfZG9uZV0pOworCWlvX3BhZ2Vz WzBdID0gQnVmZmVyR2V0QmxvY2soYnVmZmVyc1tuYmxvY2tzX2RvbmVdKTsKKwlpb19idWZmZXJz X2xlbiA9IDE7CiAKIAkvKgotCSAqIENoZWNrIGlmIHdlIGNhbiBzdGFydCBJTyBvbiB0aGUgZmly c3QgdG8tYmUtcmVhZCBidWZmZXIuCi0JICoKLQkgKiBJZiBhbiBJL08gaXMgYWxyZWFkeSBpbiBw cm9ncmVzcyBpbiBhbm90aGVyIGJhY2tlbmQsIHdlIHdhbnQgdG8gd2FpdAotCSAqIGZvciB0aGUg b3V0Y29tZTogZWl0aGVyIGRvbmUsIG9yIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB3ZSB3aWxs Ci0JICogcmV0cnkuCisJICogSG93IG1hbnkgbmVpZ2hib3Jpbmctb24tZGlzayBibG9ja3MgY2Fu IHdlIHNjYXR0ZXItcmVhZCBpbnRvIG90aGVyCisJICogYnVmZmVycyBhdCB0aGUgc2FtZSB0aW1l PyAgSW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhaXQgaWYgd2Ugc2VlIGFuIEkvTworCSAqIGFscmVh ZHkgaW4gcHJvZ3Jlc3MuICBXZSBhbHJlYWR5IHNldCBCTV9JT19JTl9QUk9HUkVTUyBmb3IgdGhl IGhlYWQKKwkgKiBibG9jaywgc28gd2Ugc2hvdWxkIGdldCBvbiB3aXRoIHRoYXQgSS9PIGFzIHNv b24gYXMgcG9zc2libGUuCiAJICovCi0JaWYgKCFSZWFkQnVmZmVyc0NhblN0YXJ0SU8oYnVmZmVy c1tuYmxvY2tzX2RvbmVdLCBmYWxzZSkpCisJZm9yIChpbnQgaSA9IG5ibG9ja3NfZG9uZSArIDE7 IGkgPCBvcGVyYXRpb24tPm5ibG9ja3M7IGkrKykKIAl7Ci0JCS8qCi0JCSAqIFNvbWVvbmUgZWxz ZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBibG9jaywgd2UncmUgZG9uZS4KLQkJICoKLQkJ ICogV2hlbiBJTyBpcyBuZWNlc3NhcnksIC0+bmJsb2Nrc19kb25lIGlzIHVwZGF0ZWQgaW4KLQkJ ICogUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KCksIGJ1dCB0aGF0IGlzIG5vdCBjYWxsZWQgaWYg bm8gSU8gaXMKLQkJICogbmVjZXNzYXJ5LiBUaHVzIHVwZGF0ZSBoZXJlLgotCQkgKi8KLQkJb3Bl cmF0aW9uLT5uYmxvY2tzX2RvbmUgKz0gMTsKLQkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSAxOwotCi0J CXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKLQkJcGdhaW9fd3JlZl9jbGVhcigmb3BlcmF0aW9uLT5p b193cmVmKTsKLQkJZGlkX3N0YXJ0X2lvID0gZmFsc2U7CisJCWlmICghUHJlcGFyZUFkZGl0aW9u YWxSZWFkQnVmZmVyKGJ1ZmZlcnNbaV0pKQorCQkJYnJlYWs7CisJCS8qIE11c3QgYmUgY29uc2Vj dXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KKwkJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1 ZmZlcnNbaSAtIDFdKSA9PQorCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmZmVyc1tpXSkg LSAxKTsKKwkJQXNzZXJ0KGlvX2J1ZmZlcnNbaW9fYnVmZmVyc19sZW5dID09IGJ1ZmZlcnNbaV0p OwogCi0JCS8qCi0JCSAqIFJlcG9ydCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlz IGJhY2tlbmQsIGV2ZW4gdGhvdWdoIGl0Ci0JCSAqIG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBh IG1pc3MgaW4gUGluQnVmZmVyRm9yQmxvY2soKS4gVGhlIG90aGVyCi0JCSAqIGJhY2tlbmQgd2ls bCB0cmFjayB0aGlzIGFzIGEgJ3JlYWQnLgotCQkgKi8KLQkJQ291bnRCdWZmZXJIaXQob3BlcmF0 aW9uLT5zdHJhdGVneSwgb3BlcmF0aW9uLT5yZWwsIHBlcnNpc3RlbmNlLAotCQkJCQkgICBvcGVy YXRpb24tPnNtZ3IsIGZvcmtudW0sCi0JCQkJCSAgIGJsb2NrbnVtICsgb3BlcmF0aW9uLT5uYmxv Y2tzX2RvbmUpOworCQlpb19wYWdlc1tpb19idWZmZXJzX2xlbisrXSA9IEJ1ZmZlckdldEJsb2Nr KGJ1ZmZlcnNbaV0pOwogCX0KLQllbHNlCi0JewotCQlpbnN0cl90aW1lCWlvX3N0YXJ0OwotCi0J CS8qIFdlIGZvdW5kIGEgYnVmZmVyIHRoYXQgd2UgbmVlZCB0byByZWFkIGluLiAqLwotCQlBc3Nl cnQoaW9fYnVmZmVyc1swXSA9PSBidWZmZXJzW25ibG9ja3NfZG9uZV0pOwotCQlpb19wYWdlc1sw XSA9IEJ1ZmZlckdldEJsb2NrKGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSk7Ci0JCWlvX2J1ZmZlcnNf bGVuID0gMTsKLQotCQkvKgotCQkgKiBIb3cgbWFueSBuZWlnaGJvcmluZy1vbi1kaXNrIGJsb2Nr cyBjYW4gd2Ugc2NhdHRlci1yZWFkIGludG8gb3RoZXIKLQkJICogYnVmZmVycyBhdCB0aGUgc2Ft ZSB0aW1lPyAgSW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhaXQgaWYgd2Ugc2VlIGFuCi0JCSAqIEkv TyBhbHJlYWR5IGluIHByb2dyZXNzLiAgV2UgYWxyZWFkeSBzZXQgQk1fSU9fSU5fUFJPR1JFU1Mg Zm9yIHRoZQotCQkgKiBoZWFkIGJsb2NrLCBzbyB3ZSBzaG91bGQgZ2V0IG9uIHdpdGggdGhhdCBJ L08gYXMgc29vbiBhcyBwb3NzaWJsZS4KLQkJICovCi0JCWZvciAoaW50IGkgPSBuYmxvY2tzX2Rv bmUgKyAxOyBpIDwgb3BlcmF0aW9uLT5uYmxvY2tzOyBpKyspCi0JCXsKLQkJCWlmICghUmVhZEJ1 ZmZlcnNDYW5TdGFydElPKGJ1ZmZlcnNbaV0sIHRydWUpKQotCQkJCWJyZWFrOwotCQkJLyogTXVz dCBiZSBjb25zZWN1dGl2ZSBibG9jayBudW1iZXJzLiAqLwotCQkJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1ZmZlcnNbaSAtIDFdKSA9PQotCQkJCSAgIEJ1ZmZlckdldEJsb2NrTnVtYmVy KGJ1ZmZlcnNbaV0pIC0gMSk7Ci0JCQlBc3NlcnQoaW9fYnVmZmVyc1tpb19idWZmZXJzX2xlbl0g PT0gYnVmZmVyc1tpXSk7CiAKLQkJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVy R2V0QmxvY2soYnVmZmVyc1tpXSk7Ci0JCX0KKwkvKiBnZXQgYSByZWZlcmVuY2UgdG8gd2FpdCBm b3IgaW4gV2FpdFJlYWRCdWZmZXJzKCkgKi8KKwlwZ2Fpb19pb19nZXRfd3JlZihpb2gsICZvcGVy YXRpb24tPmlvX3dyZWYpOwogCi0JCS8qIGdldCBhIHJlZmVyZW5jZSB0byB3YWl0IGZvciBpbiBX YWl0UmVhZEJ1ZmZlcnMoKSAqLwotCQlwZ2Fpb19pb19nZXRfd3JlZihpb2gsICZvcGVyYXRpb24t PmlvX3dyZWYpOworCS8qIHByb3ZpZGUgdGhlIGxpc3Qgb2YgYnVmZmVycyB0byB0aGUgY29tcGxl dGlvbiBjYWxsYmFja3MgKi8KKwlwZ2Fpb19pb19zZXRfaGFuZGxlX2RhdGFfMzIoaW9oLCAodWlu dDMyICopIGlvX2J1ZmZlcnMsIGlvX2J1ZmZlcnNfbGVuKTsKIAotCQkvKiBwcm92aWRlIHRoZSBs aXN0IG9mIGJ1ZmZlcnMgdG8gdGhlIGNvbXBsZXRpb24gY2FsbGJhY2tzICovCi0JCXBnYWlvX2lv X3NldF9oYW5kbGVfZGF0YV8zMihpb2gsICh1aW50MzIgKikgaW9fYnVmZmVycywgaW9fYnVmZmVy c19sZW4pOworCXBnYWlvX2lvX3JlZ2lzdGVyX2NhbGxiYWNrcyhpb2gsCisJCQkJCQkJCXBlcnNp c3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAgPworCQkJCQkJCQlQR0FJT19IQ0JfTE9DQUxf QlVGRkVSX1JFQURWIDoKKwkJCQkJCQkJUEdBSU9fSENCX1NIQVJFRF9CVUZGRVJfUkVBRFYsCisJ CQkJCQkJCWZsYWdzKTsKIAotCQlwZ2Fpb19pb19yZWdpc3Rlcl9jYWxsYmFja3MoaW9oLAotCQkJ CQkJCQkJcGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCA/Ci0JCQkJCQkJCQlQR0FJ T19IQ0JfTE9DQUxfQlVGRkVSX1JFQURWIDoKLQkJCQkJCQkJCVBHQUlPX0hDQl9TSEFSRURfQlVG RkVSX1JFQURWLAotCQkJCQkJCQkJZmxhZ3MpOworCXBnYWlvX2lvX3NldF9mbGFnKGlvaCwgaW9o X2ZsYWdzKTsKIAotCQlwZ2Fpb19pb19zZXRfZmxhZyhpb2gsIGlvaF9mbGFncyk7CisJLyogLS0t CisJKiBFdmVuIHRob3VnaCB3ZSdyZSB0cnlpbmcgdG8gaXNzdWUgSU8gYXN5bmNocm9ub3VzbHks IHRyYWNrIHRoZSB0aW1lCisJKiBpbiBzbWdyc3RhcnRyZWFkdigpOgorCSogLSBpZiBpb19tZXRo b2QgPT0gSU9NRVRIT0RfU1lOQywgd2Ugd2lsbCBhbHdheXMgcGVyZm9ybSB0aGUgSU8KKwkqICAg aW1tZWRpYXRlbHkKKwkqIC0gdGhlIGlvIG1ldGhvZCBtaWdodCBub3Qgc3VwcG9ydCB0aGUgSU8g KGUuZy4gd29ya2VyIElPIGZvciBhIHRlbXAKKwkqICAgdGFibGUpCisJKiAtLS0KKwkqLworCWlv X3N0YXJ0ID0gcGdzdGF0X3ByZXBhcmVfaW9fdGltZSh0cmFja19pb190aW1pbmcpOworCXNtZ3Jz dGFydHJlYWR2KGlvaCwgb3BlcmF0aW9uLT5zbWdyLCBmb3JrbnVtLAorCQkJCSAgIGJsb2NrbnVt ICsgbmJsb2Nrc19kb25lLAorCQkJCSAgIGlvX3BhZ2VzLCBpb19idWZmZXJzX2xlbik7CisJcGdz dGF0X2NvdW50X2lvX29wX3RpbWUoaW9fb2JqZWN0LCBpb19jb250ZXh0LCBJT09QX1JFQUQsCisJ CQkJCQkJaW9fc3RhcnQsIDEsIGlvX2J1ZmZlcnNfbGVuICogQkxDS1NaKTsKIAotCQkvKiAtLS0K LQkJICogRXZlbiB0aG91Z2ggd2UncmUgdHJ5aW5nIHRvIGlzc3VlIElPIGFzeW5jaHJvbm91c2x5 LCB0cmFjayB0aGUgdGltZQotCQkgKiBpbiBzbWdyc3RhcnRyZWFkdigpOgotCQkgKiAtIGlmIGlv X21ldGhvZCA9PSBJT01FVEhPRF9TWU5DLCB3ZSB3aWxsIGFsd2F5cyBwZXJmb3JtIHRoZSBJTwot CQkgKiAgIGltbWVkaWF0ZWx5Ci0JCSAqIC0gdGhlIGlvIG1ldGhvZCBtaWdodCBub3Qgc3VwcG9y dCB0aGUgSU8gKGUuZy4gd29ya2VyIElPIGZvciBhIHRlbXAKLQkJICogICB0YWJsZSkKLQkJICog LS0tCi0JCSAqLwotCQlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9f dGltaW5nKTsKLQkJc21ncnN0YXJ0cmVhZHYoaW9oLCBvcGVyYXRpb24tPnNtZ3IsIGZvcmtudW0s Ci0JCQkJCSAgIGJsb2NrbnVtICsgbmJsb2Nrc19kb25lLAotCQkJCQkgICBpb19wYWdlcywgaW9f YnVmZmVyc19sZW4pOwotCQlwZ3N0YXRfY291bnRfaW9fb3BfdGltZShpb19vYmplY3QsIGlvX2Nv bnRleHQsIElPT1BfUkVBRCwKLQkJCQkJCQkJaW9fc3RhcnQsIDEsIGlvX2J1ZmZlcnNfbGVuICog QkxDS1NaKTsKLQotCQlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQkJ CXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwotCQllbHNl Ci0JCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47CisJ aWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXBnQnVmZmVyVXNhZ2Uu bG9jYWxfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOworCWVsc2UKKwkJcGdCdWZmZXJVc2Fn ZS5zaGFyZWRfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwogCi0JCS8qCi0JCSAqIFRyYWNr IHZhY3V1bSBjb3N0IHdoZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcgZm9yIGl0Lgot CQkgKiBPdGhlcndpc2Ugd2UgY291bGQgZW5kIHVwIGlzc3VpbmcgYSBsb3Qgb2YgSU8gaW4gYSBz aG9ydCB0aW1lc3BhbiwKLQkJICogZGVzcGl0ZSBhIGxvdyBjb3N0IGxpbWl0LgotCQkgKi8KLQkJ aWYgKFZhY3V1bUNvc3RBY3RpdmUpCi0JCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0 UGFnZU1pc3MgKiBpb19idWZmZXJzX2xlbjsKKwkvKgorCSAqIFRyYWNrIHZhY3V1bSBjb3N0IHdo ZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcgZm9yIGl0LiBPdGhlcndpc2UKKwkgKiB3 ZSBjb3VsZCBlbmQgdXAgaXNzdWluZyBhIGxvdCBvZiBJTyBpbiBhIHNob3J0IHRpbWVzcGFuLCBk ZXNwaXRlIGEgbG93CisJICogY29zdCBsaW1pdC4KKwkgKi8KKwlpZiAoVmFjdXVtQ29zdEFjdGl2 ZSkKKwkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBhZ2VNaXNzICogaW9fYnVmZmVy c19sZW47CiAKLQkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsKLQkJZGlkX3N0 YXJ0X2lvID0gdHJ1ZTsKLQl9CisJKm5ibG9ja3NfcHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsK IAotCXJldHVybiBkaWRfc3RhcnRfaW87CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9i dWZtZ3IuaAppbmRleCBhNDBhZGY2YjJhOC4uMTM1OGZjN2ZhNjQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aApAQCAtMTQ3LDYgKzE0Nyw3IEBAIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJhdGlvbgogCWludAkJ CWZsYWdzOwogCWludDE2CQluYmxvY2tzOwogCWludDE2CQluYmxvY2tzX2RvbmU7CisJYm9vbAkJ Zm9yZWlnbl9pbzsKIAlQZ0Fpb1dhaXRSZWYgaW9fd3JlZjsKIAlQZ0Fpb1JldHVybiBpb19yZXR1 cm47CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA2NjhmYWFhNTYxNS4uYTY1NmJi ZjkxMTAgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yMzQ1LDYgKzIzNDUsNyBAQCBQ cmVkaWNhdGVMb2NrRGF0YQogUHJlZGljYXRlTG9ja1RhcmdldFR5cGUKIFByZWZldGNoQnVmZmVy UmVzdWx0CiBQcmVwUGFyYWxsZWxSZXN0b3JlUHRyVHlwZQorUHJlcGFyZVJlYWRCdWZmZXJfU3Rh dHVzCiBQcmVwYXJlU3RtdAogUHJlcGFyZWRTdGF0ZW1lbnQKIFByZXNvcnRlZEtleURhdGEKLS0g CjIuNDMuMAoK --0000000000000630b5064c23f9ff--