From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 58243 invoked by alias); 22 Aug 2017 12:43:20 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 57273 invoked by uid 89); 22 Aug 2017 12:43:18 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-oi0-f54.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=1sTqNDg4cApmo/IPCArycJiDTTcN9nvTkSI0BPfepd0=; b=SXaJnNg+AePHQquJ7U1FKJpx85ZWnwInNPhyOnZ49hhc+RRxYbd4EkMlvQxFsYz0GF pOPx5FXEiVCEpBSkO+9KZTikU7aC9KeyIJqOEvD5ulIakCDTBjeDVXEN8ZP7eQw35bJG 0QcDtvvzLTE288cLebVESNW+XfzCOSLIB4IkXxtI1w9o50T/dckvNfGaT4OiKfqQGGSc PNsAZzbXTY8OCctYTivJynnAg5d6iTp0JKDyoKQeyEFI50k3Qi2S/+tjQ1JIOxj0WWhW EZTjBWg7FMFuJqepN7w2q/m3Fg9u4tcakoSmEUFV29KHPZOcf3Kd8RHE/kZ7u++atS7U OKug== X-Gm-Message-State: AHYfb5gVX367xexSEZJ0mFTiiZgyAwFToBVaDGgv2a85GKBS0jG0ApEI dAsz6bZWPdenlZHlpP7Xs9tR1bFxoPwG X-Received: by 10.202.219.198 with SMTP id s189mr676109oig.103.1503405792569; Tue, 22 Aug 2017 05:43:12 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <10fd8eb0-0f53-9d4b-dcd2-694a1878c994@linux.vnet.ibm.com> References: <20170820171713.GA19531@gmail.com> <25604b34-7afb-7007-4ea8-3add9963d4b4@linux.vnet.ibm.com> <10fd8eb0-0f53-9d4b-dcd2-694a1878c994@linux.vnet.ibm.com> From: "H.J. Lu" Date: Tue, 22 Aug 2017 12:43:00 -0000 Message-ID: Subject: Re: [PATCH] string/stratcliff.c: Replace int with size_t [BZ #21982] To: Stefan Liebler Cc: GNU C Library Content-Type: multipart/mixed; boundary="001a113d37da3850ed055756f02e" X-SW-Source: 2017-08/txt/msg01052.txt.bz2 --001a113d37da3850ed055756f02e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Content-length: 4393 On Tue, Aug 22, 2017 at 5:07 AM, Stefan Liebler w= rote: > On 08/22/2017 01:05 AM, H.J. Lu wrote: >> >> On Mon, Aug 21, 2017 at 8:41 AM, Stefan Liebler >> wrote: >>> >>> On 08/21/2017 04:53 PM, H.J. Lu wrote: >>>> >>>> >>>> On Mon, Aug 21, 2017 at 6:48 AM, Stefan Liebler >>>> >>>> wrote: >>>>> >>>>> >>>>> On 08/20/2017 07:17 PM, H.J. Lu wrote: >>>>>> >>>>>> >>>>>> >>>>>> Fix GCC 7 errors when string/stratcliff.c is compiled with -O3: >>>>>> >>>>>> stratcliff.c: In function =E2=80=98do_test=E2=80=99: >>>>>> cc1: error: assuming signed overflow does not occur when assuming th= at >>>>>> (X >>>>>> - c) <=3D X is always true [-Werror=3Dstrict-overflow] >>>>>> >>>>>> OK for master? >>>>>> >>>>>> H.J. >>>>>> --- >>>>>> [BZ #21982] >>>>>> * string/stratcliff.c (do_test): Declare size, nchars, >>>>>> inner, >>>>>> middle and outer with size_t instead of int. Repleace %d >>>>>> with >>>>>> %Zd in printf. >>>>>> --- >>>>>> string/stratcliff.c | 72 >>>>>> ++++++++++++++++++++++++++--------------------------- >>>>>> 1 file changed, 36 insertions(+), 36 deletions(-) >>>>>> >>>>>> diff --git a/string/stratcliff.c b/string/stratcliff.c >>>>>> index e28b0c5058..ae780379cb 100644 >>>>>> --- a/string/stratcliff.c >>>>>> +++ b/string/stratcliff.c >>>>>> @@ -58,8 +58,8 @@ >>>>>> int >>>>>> do_test (void) >>>>>> { >>>>>> - int size =3D sysconf (_SC_PAGESIZE); >>>>>> - int nchars =3D size / sizeof (CHAR); >>>>>> + size_t size =3D sysconf (_SC_PAGESIZE); >>>>>> + size_t nchars =3D size / sizeof (CHAR); >>>>>> CHAR *adr; >>>>>> CHAR *dest; >>>>>> int result =3D 0; >>>>>> @@ -80,7 +80,7 @@ do_test (void) >>>>>> } >>>>>> else >>>>>> { >>>>>> - int inner, middle, outer; >>>>>> + size_t inner, middle, outer; >>>>>> >>>>>> mprotect (adr, size, PROT_NONE); >>>>>> mprotect (adr + 2 * nchars, size, PROT_NONE); >>>>>> @@ -101,7 +101,7 @@ do_test (void) >>>>>> >>>>>> if (STRLEN (&adr[outer]) !=3D (size_t) (inner - oute= r)) >>>>>> { >>>>>> - printf ("%s flunked for outer =3D %d, inner =3D %d= \n", >>>>>> + printf ("%s flunked for outer =3D %Zd, inner =3D %= Zd\n", >>>>>> STRINGIFY (STRLEN), outer, inner); >>>>>> result =3D 1; >>>>>> } >>>>>> { >>>>>> - printf ("%s flunked for outer =3D %d, middle =3D %= d\n", >>>>>> + printf ("%s flunked for outer =3D %Zd, middle =3D >>>>>> %Zd\n", >>>>>> STRINGIFY (rawmemchr), outer, middle); >>>>>> result =3D 1; >>>>>> } >>>>>> Hi H.J. Lu, >>>>> >>>>> >>>>> >>>>> >>>>> I've applied your patch and the warnings does not occur anymore on >>>>> s390. >>>> >>>> >>>> >>>> Great. >>>> >>>>> The outer loops of the string tests are all using the following: >>>>> size_t nchars, outer; >>>>> for (outer =3D nchars - 1; outer >=3D MAX (0, nchars - 128); --outer) >>>>> >>>>> I think we can assume, that nchars is always > 128 as it is derived by >>>>> the >>>>> pagesize. >>>>> But if nchars would be equal to 128, this would result in an infinite >>>>> loop >>>>> (outer >=3D 0)? >>>>> If nchars would be less than 128, the tests would be skipped. >>>>> >>>>> Should we add a check that nchars > 128 at the beginning and replace >>>>> the >>>>> "MAX (0, nchars - 128)" with only "nchars - 128"? >>>> >>>> >>>> >>>> This is a separate issue beyond BZ #21982. >>>> >>>> >>> Your patch is introducing this behaviour. >>> Before your patch, nchars and outer was an int and the for-loop-conditi= on >>> "outer >=3D MAX (0, nchars - 128)" does not lead to an infinite loop or= to >>> skipping the test if nchars <=3D 128. >>> >> >> How about this patch? >> > This solves the cases if nchars < 128. > But if nchars =3D=3D 128, then the condition of the for-loop is "size_t o= uter >=3D > 0", which is always true. > > Could we check once if nchars > 128 and exit the test with an error if > nchars is <=3D 128? > Are there architectures where the page size is < 4096? > Or where wchar_t > 4byte? > Here is the updated patch. I added if (outer =3D=3D 0) break; at the end of loop. --=20 H.J. --001a113d37da3850ed055756f02e Content-Type: text/x-patch; charset="UTF-8"; name="0001-string-stratcliff.c-Replace-int-with-size_t-BZ-21982.patch" Content-Disposition: attachment; filename="0001-string-stratcliff.c-Replace-int-with-size_t-BZ-21982.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j6nky5my0 Content-length: 25555 RnJvbSBmOTUxZTRhYTkyN2VmZGYzMTEyYmU5MjAwNmIxMWQzMWNiNzVlZjJi IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhq bC50b29sc0BnbWFpbC5jb20+CkRhdGU6IFN1biwgMjAgQXVnIDIwMTcgMTA6 MTE6MzggLTA3MDAKU3ViamVjdDogW1BBVENIXSBzdHJpbmcvc3RyYXRjbGlm Zi5jOiBSZXBsYWNlIGludCB3aXRoIHNpemVfdCBbQlogIzIxOTgyXQpNSU1F LVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJz ZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKRml4 IEdDQyA3IGVycm9ycyB3aGVuIHN0cmluZy9zdHJhdGNsaWZmLmMgaXMgY29t cGlsZWQgd2l0aCAtTzM6CgpzdHJhdGNsaWZmLmM6IEluIGZ1bmN0aW9uIOKA mGRvX3Rlc3TigJk6CmNjMTogZXJyb3I6IGFzc3VtaW5nIHNpZ25lZCBvdmVy ZmxvdyBkb2VzIG5vdCBvY2N1ciB3aGVuIGFzc3VtaW5nIHRoYXQgKFggLSBj KSA8PSBYIGlzIGFsd2F5cyB0cnVlIFstV2Vycm9yPXN0cmljdC1vdmVyZmxv d10KCglbQlogIzIxOTgyXQoJKiBzdHJpbmcvc3RyYXRjbGlmZi5jIChkb190 ZXN0KTogRGVjbGFyZSBzaXplLCBuY2hhcnMsIGlubmVyLAoJbWlkZGxlIGFu ZCBvdXRlciB3aXRoIHNpemVfdCBpbnN0ZWFkIG9mIGludC4gIFJlcGxlYWNl ICVkIGFuZAoJJVpkIHdpdGggJXp1IGluIHByaW50Zi4gIFVwZGF0ZSAiTUFY ICgwLCBuY2hhcnMgLSAxMjgpIiBhbmQKCSJNQVggKG91dGVyLCBuY2hhcnMg LSA2NCkiIHRvIHN1cHBvcnQgdW5zaWduZWQgb3V0ZXIgYW5kCgluY2hhcnMu ICBBbHNvIGV4aXQgbG9vcCB3aGVuIG91dGVyID09IDAuCi0tLQogc3RyaW5n L3N0cmF0Y2xpZmYuYyB8IDI3NiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwg MTY3IGluc2VydGlvbnMoKyksIDEwOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zdHJpbmcvc3RyYXRjbGlmZi5jIGIvc3RyaW5nL3N0cmF0Y2xpZmYu YwppbmRleCBlMjhiMGM1MDU4Li40MzIwMzM2YzlhIDEwMDY0NAotLS0gYS9z dHJpbmcvc3RyYXRjbGlmZi5jCisrKyBiL3N0cmluZy9zdHJhdGNsaWZmLmMK QEAgLTU4LDggKzU4LDggQEAKIGludAogZG9fdGVzdCAodm9pZCkKIHsKLSAg aW50IHNpemUgPSBzeXNjb25mIChfU0NfUEFHRVNJWkUpOwotICBpbnQgbmNo YXJzID0gc2l6ZSAvIHNpemVvZiAoQ0hBUik7CisgIHNpemVfdCBzaXplID0g c3lzY29uZiAoX1NDX1BBR0VTSVpFKTsKKyAgc2l6ZV90IG5jaGFycyA9IHNp emUgLyBzaXplb2YgKENIQVIpOwogICBDSEFSICphZHI7CiAgIENIQVIgKmRl c3Q7CiAgIGludCByZXN1bHQgPSAwOwpAQCAtODAsNyArODAsMTcgQEAgZG9f dGVzdCAodm9pZCkKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICBpbnQg aW5uZXIsIG1pZGRsZSwgb3V0ZXI7CisgICAgICBzaXplX3QgaW5uZXIsIG1p ZGRsZSwgb3V0ZXIsIG5jaGFyczY0LCBtYXgxMjg7CisKKyAgICAgIGlmIChu Y2hhcnMgPiA2NCkKKwluY2hhcnM2NCA9IG5jaGFycyAtIDY0OworICAgICAg ZWxzZQorCW5jaGFyczY0ID0gMDsKKworICAgICAgaWYgKG5jaGFycyA+IDEy OCkKKwltYXgxMjggPSBuY2hhcnMgLSAxMjg7CisgICAgICBlbHNlCisJbWF4 MTI4ID0gMDsKIAogICAgICAgbXByb3RlY3QgKGFkciwgc2l6ZSwgUFJPVF9O T05FKTsKICAgICAgIG1wcm90ZWN0IChhZHIgKyAyICogbmNoYXJzLCBzaXpl LCBQUk9UX05PTkUpOwpAQCAtOTMsNTkgKzEwMyw2NSBAQCBkb190ZXN0ICh2 b2lkKQogICAgICAgTUVNU0VUIChhZHIsIEwoJ1QnKSwgbmNoYXJzKTsKIAog ICAgICAgLyogc3RybGVuL3djc2xlbiB0ZXN0ICovCi0gICAgICBmb3IgKG91 dGVyID0gbmNoYXJzIC0gMTsgb3V0ZXIgPj0gTUFYICgwLCBuY2hhcnMgLSAx MjgpOyAtLW91dGVyKQorICAgICAgZm9yIChvdXRlciA9IG5jaGFycyAtIDE7 IG91dGVyID49IG1heDEyODsgLS1vdXRlcikKIAl7Ci0JICBmb3IgKGlubmVy ID0gTUFYIChvdXRlciwgbmNoYXJzIC0gNjQpOyBpbm5lciA8IG5jaGFyczsg Kytpbm5lcikKKwkgIGZvciAoaW5uZXIgPSBNQVggKG91dGVyLCBuY2hhcnM2 NCk7IGlubmVyIDwgbmNoYXJzOyArK2lubmVyKQogCSAgICB7CiAJICAgICAg YWRyW2lubmVyXSA9IEwoJ1wwJyk7CiAKIAkgICAgICBpZiAoU1RSTEVOICgm YWRyW291dGVyXSkgIT0gKHNpemVfdCkgKGlubmVyIC0gb3V0ZXIpKQogCQl7 Ci0JCSAgcHJpbnRmICgiJXMgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlZCwgaW5u ZXIgPSAlZFxuIiwKKwkJICBwcmludGYgKCIlcyBmbHVua2VkIGZvciBvdXRl ciA9ICV6dSwgaW5uZXIgPSAlenVcbiIsCiAJCQkgIFNUUklOR0lGWSAoU1RS TEVOKSwgb3V0ZXIsIGlubmVyKTsKIAkJICByZXN1bHQgPSAxOwogCQl9CiAK IAkgICAgICBhZHJbaW5uZXJdID0gTCgnVCcpOwogCSAgICB9CisJICBpZiAo b3V0ZXIgPT0gMCkKKwkgICAgYnJlYWs7CiAJfQogCiAgICAgICAvKiBzdHJu bGVuL3djc25sZW4gdGVzdCAqLwotICAgICAgZm9yIChvdXRlciA9IG5jaGFy czsgb3V0ZXIgPj0gTUFYICgwLCBuY2hhcnMgLSAxMjgpOyAtLW91dGVyKQor ICAgICAgZm9yIChvdXRlciA9IG5jaGFyczsgb3V0ZXIgPj0gbWF4MTI4OyAt LW91dGVyKQogCXsKLQkgIGZvciAoaW5uZXIgPSBNQVggKG91dGVyLCBuY2hh cnMgLSA2NCk7IGlubmVyIDwgbmNoYXJzOyArK2lubmVyKQorCSAgZm9yIChp bm5lciA9IE1BWCAob3V0ZXIsIG5jaGFyczY0KTsgaW5uZXIgPCBuY2hhcnM7 ICsraW5uZXIpCiAJICAgIHsKIAkgICAgICBhZHJbaW5uZXJdID0gTCgnXDAn KTsKIAogCSAgICAgIGlmIChTVFJOTEVOICgmYWRyW291dGVyXSwgaW5uZXIg LSBvdXRlciArIDEpCiAJCSAgIT0gKHNpemVfdCkgKGlubmVyIC0gb3V0ZXIp KQogCQl7Ci0JCSAgcHJpbnRmICgiJXMgZmx1bmtlZCBmb3Igb3V0ZXIgPSAl ZCwgaW5uZXIgPSAlZFxuIiwKKwkJICBwcmludGYgKCIlcyBmbHVua2VkIGZv ciBvdXRlciA9ICV6dSwgaW5uZXIgPSAlenVcbiIsCiAJCQkgIFNUUklOR0lG WSAoU1RSTkxFTiksIG91dGVyLCBpbm5lcik7CiAJCSAgcmVzdWx0ID0gMTsK IAkJfQogCiAJICAgICAgYWRyW2lubmVyXSA9IEwoJ1QnKTsKIAkgICAgfQor CSAgaWYgKG91dGVyID09IDApCisJICAgIGJyZWFrOwogCX0KLSAgICAgIGZv ciAob3V0ZXIgPSBuY2hhcnM7IG91dGVyID49IE1BWCAoMCwgbmNoYXJzIC0g MTI4KTsgLS1vdXRlcikKKyAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnM7IG91 dGVyID49IG1heDEyODsgLS1vdXRlcikKIAl7Ci0JICBmb3IgKGlubmVyID0g TUFYIChvdXRlciwgbmNoYXJzIC0gNjQpOyBpbm5lciA8PSBuY2hhcnM7ICsr aW5uZXIpCisJICBmb3IgKGlubmVyID0gTUFYIChvdXRlciwgbmNoYXJzNjQp OyBpbm5lciA8PSBuY2hhcnM7ICsraW5uZXIpCiAJICAgIHsKIAkgICAgICBp ZiAoU1RSTkxFTiAoJmFkcltvdXRlcl0sIGlubmVyIC0gb3V0ZXIpCiAJCSAg IT0gKHNpemVfdCkgKGlubmVyIC0gb3V0ZXIpKQogCQl7Ci0JCSAgcHJpbnRm ICgiJXMgZmx1bmtlZCBib3VuZGVkIGZvciBvdXRlciA9ICVkLCBpbm5lciA9 ICVkXG4iLAorCQkgIHByaW50ZiAoIiVzIGZsdW5rZWQgYm91bmRlZCBmb3Ig b3V0ZXIgPSAlenUsIGlubmVyID0gJXp1XG4iLAogCQkJICBTVFJJTkdJRlkg KFNUUk5MRU4pLCBvdXRlciwgaW5uZXIpOwogCQkgIHJlc3VsdCA9IDE7CiAJ CX0KIAkgICAgfQorCSAgaWYgKG91dGVyID09IDApCisJICAgIGJyZWFrOwog CX0KIAogICAgICAgLyogc3RyY2hyL3djc2NociB0ZXN0ICovCi0gICAgICBm b3IgKG91dGVyID0gbmNoYXJzIC0gMTsgb3V0ZXIgPj0gTUFYICgwLCBuY2hh cnMgLSAxMjgpOyAtLW91dGVyKQorICAgICAgZm9yIChvdXRlciA9IG5jaGFy cyAtIDE7IG91dGVyID49IG1heDEyODsgLS1vdXRlcikKIAl7Ci0JICBmb3Ig KG1pZGRsZSA9IE1BWCAob3V0ZXIsIG5jaGFycyAtIDY0KTsgbWlkZGxlIDwg bmNoYXJzOyArK21pZGRsZSkKKwkgIGZvciAobWlkZGxlID0gTUFYIChvdXRl ciwgbmNoYXJzNjQpOyBtaWRkbGUgPCBuY2hhcnM7ICsrbWlkZGxlKQogCSAg ICB7CiAJICAgICAgZm9yIChpbm5lciA9IG1pZGRsZTsgaW5uZXIgPCBuY2hh cnM7ICsraW5uZXIpCiAJCXsKQEAgLTE1OCw4ICsxNzQsOCBAQCBkb190ZXN0 ICh2b2lkKQogCQkgICAgICB8fCAoaW5uZXIgIT0gbWlkZGxlCiAJCQkgICYm IChjcCAtICZhZHJbb3V0ZXJdKSAhPSBtaWRkbGUgLSBvdXRlcikpCiAJCSAg ICB7Ci0JCSAgICAgIHByaW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0g JWQsIG1pZGRsZSA9ICVkLCAiCi0JCQkgICAgICAiaW5uZXIgPSAlZFxuIiwK KwkJICAgICAgcHJpbnRmICgiJXMgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlenUs IG1pZGRsZSA9ICV6dSwgIgorCQkJICAgICAgImlubmVyID0gJXp1XG4iLAog CQkJICAgICAgU1RSSU5HSUZZIChTVFJDSFIpLCBvdXRlciwgbWlkZGxlLCBp bm5lcik7CiAJCSAgICAgIHJlc3VsdCA9IDE7CiAJCSAgICB9CkBAIC0xNjgs NiArMTg0LDggQEAgZG9fdGVzdCAodm9pZCkKIAkJICBhZHJbbWlkZGxlXSA9 IEwoJ1QnKTsKIAkJfQogCSAgICB9CisJICBpZiAob3V0ZXIgPT0gMCkKKwkg ICAgYnJlYWs7CiAJfQogCiAgICAgICAvKiBTcGVjaWFsIHRlc3QuICAqLwpA QCAtMTgwLDkgKzE5OCw5IEBAIGRvX3Rlc3QgKHZvaWQpCiAJfQogCiAgICAg ICAvKiBzdHJyY2hyL3djc3JjaHIgdGVzdCAqLwotICAgICAgZm9yIChvdXRl ciA9IG5jaGFycyAtIDE7IG91dGVyID49IE1BWCAoMCwgbmNoYXJzIC0gMTI4 KTsgLS1vdXRlcikKKyAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnMgLSAxOyBv dXRlciA+PSBtYXgxMjg7IC0tb3V0ZXIpCiAJewotCSAgZm9yIChtaWRkbGUg PSBNQVggKG91dGVyLCBuY2hhcnMgLSA2NCk7IG1pZGRsZSA8IG5jaGFyczsg KyttaWRkbGUpCisJICBmb3IgKG1pZGRsZSA9IE1BWCAob3V0ZXIsIG5jaGFy czY0KTsgbWlkZGxlIDwgbmNoYXJzOyArK21pZGRsZSkKIAkgICAgewogCSAg ICAgIGZvciAoaW5uZXIgPSBtaWRkbGU7IGlubmVyIDwgbmNoYXJzOyArK2lu bmVyKQogCQl7CkBAIC0xOTUsOCArMjEzLDggQEAgZG9fdGVzdCAodm9pZCkK IAkJICAgICAgfHwgKGlubmVyICE9IG1pZGRsZQogCQkJICAmJiAoY3AgLSAm YWRyW291dGVyXSkgIT0gbWlkZGxlIC0gb3V0ZXIpKQogCQkgICAgewotCQkg ICAgICBwcmludGYgKCIlcyBmbHVua2VkIGZvciBvdXRlciA9ICVkLCBtaWRk bGUgPSAlZCwgIgotCQkJICAgICAgImlubmVyID0gJWRcbiIsCisJCSAgICAg IHByaW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBtaWRkbGUg PSAlenUsICIKKwkJCSAgICAgICJpbm5lciA9ICV6dVxuIiwKIAkJCSAgICAg IFNUUklOR0lGWSAoU1RSUkNIUiksIG91dGVyLCBtaWRkbGUsIGlubmVyKTsK IAkJICAgICAgcmVzdWx0ID0gMTsKIAkJICAgIH0KQEAgLTIwNSwxMiArMjIz LDE0IEBAIGRvX3Rlc3QgKHZvaWQpCiAJCSAgYWRyW21pZGRsZV0gPSBMKCdU Jyk7CiAJCX0KIAkgICAgfQorCSAgaWYgKG91dGVyID09IDApCisJICAgIGJy ZWFrOwogCX0KIAogICAgICAgLyogbWVtY2hyIHRlc3QgKi8KLSAgICAgIGZv ciAob3V0ZXIgPSBuY2hhcnMgLSAxOyBvdXRlciA+PSBNQVggKDAsIG5jaGFy cyAtIDEyOCk7IC0tb3V0ZXIpCisgICAgICBmb3IgKG91dGVyID0gbmNoYXJz IC0gMTsgb3V0ZXIgPj0gbWF4MTI4OyAtLW91dGVyKQogCXsKLQkgIGZvciAo bWlkZGxlID0gTUFYIChvdXRlciwgbmNoYXJzIC0gNjQpOyBtaWRkbGUgPCBu Y2hhcnM7ICsrbWlkZGxlKQorCSAgZm9yIChtaWRkbGUgPSBNQVggKG91dGVy LCBuY2hhcnM2NCk7IG1pZGRsZSA8IG5jaGFyczsgKyttaWRkbGUpCiAJICAg IHsKIAkgICAgICBhZHJbbWlkZGxlXSA9IEwoJ1YnKTsKIApAQCAtMjE4LDMy ICsyMzgsMzYgQEAgZG9fdGVzdCAodm9pZCkKIAogCSAgICAgIGlmIChjcCAt ICZhZHJbb3V0ZXJdICE9IG1pZGRsZSAtIG91dGVyKQogCQl7Ci0JCSAgcHJp bnRmICgiJXMgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlZCwgbWlkZGxlID0gJWRc biIsCisJCSAgcHJpbnRmICgiJXMgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlenUs IG1pZGRsZSA9ICV6dVxuIiwKIAkJCSAgU1RSSU5HSUZZIChNRU1DSFIpLCBv dXRlciwgbWlkZGxlKTsKIAkJICByZXN1bHQgPSAxOwogCQl9CiAKIAkgICAg ICBhZHJbbWlkZGxlXSA9IEwoJ1QnKTsKIAkgICAgfQorCSAgaWYgKG91dGVy ID09IDApCisJICAgIGJyZWFrOwogCX0KLSAgICAgIGZvciAob3V0ZXIgPSBu Y2hhcnM7IG91dGVyID49IE1BWCAoMCwgbmNoYXJzIC0gMTI4KTsgLS1vdXRl cikKKyAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnM7IG91dGVyID49IG1heDEy ODsgLS1vdXRlcikKIAl7CiAJICBDSEFSICpjcCA9IE1FTUNIUiAoJmFkcltv dXRlcl0sIEwoJ1YnKSwgbmNoYXJzIC0gb3V0ZXIpOwogCiAJICBpZiAoY3Ag IT0gTlVMTCkKIAkgICAgewotCSAgICAgIHByaW50ZiAoIiVzIGZsdW5rZWQg Zm9yIG91dGVyID0gJWRcbiIsCisJICAgICAgcHJpbnRmICgiJXMgZmx1bmtl ZCBmb3Igb3V0ZXIgPSAlenVcbiIsCiAJCSAgICAgIFNUUklOR0lGWSAoTUVN Q0hSKSwgb3V0ZXIpOwogCSAgICAgIHJlc3VsdCA9IDE7CiAJICAgIH0KKwkg IGlmIChvdXRlciA9PSAwKQorCSAgICBicmVhazsKIAl9CiAKICAgICAgIC8q IFRoZXNlIGZ1bmN0aW9ucyBvbmx5IGV4aXN0IGZvciBzaW5nbGUtYnl0ZSBj aGFyYWN0ZXJzLiAgKi8KICNpZm5kZWYgV0NTVEVTVAogICAgICAgLyogcmF3 bWVtY2hyIHRlc3QgKi8KLSAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnMgLSAx OyBvdXRlciA+PSBNQVggKDAsIG5jaGFycyAtIDEyOCk7IC0tb3V0ZXIpCisg ICAgICBmb3IgKG91dGVyID0gbmNoYXJzIC0gMTsgb3V0ZXIgPj0gbWF4MTI4 OyAtLW91dGVyKQogCXsKLQkgIGZvciAobWlkZGxlID0gTUFYIChvdXRlciwg bmNoYXJzIC0gNjQpOyBtaWRkbGUgPCBuY2hhcnM7ICsrbWlkZGxlKQorCSAg Zm9yIChtaWRkbGUgPSBNQVggKG91dGVyLCBuY2hhcnM2NCk7IG1pZGRsZSA8 IG5jaGFyczsgKyttaWRkbGUpCiAJICAgIHsKIAkgICAgICBhZHJbbWlkZGxl XSA9IEwoJ1YnKTsKIApAQCAtMjUxLDE5ICsyNzUsMjEgQEAgZG9fdGVzdCAo dm9pZCkKIAogCSAgICAgIGlmIChjcCAtICZhZHJbb3V0ZXJdICE9IG1pZGRs ZSAtIG91dGVyKQogCQl7Ci0JCSAgcHJpbnRmICgiJXMgZmx1bmtlZCBmb3Ig b3V0ZXIgPSAlZCwgbWlkZGxlID0gJWRcbiIsCisJCSAgcHJpbnRmICgiJXMg Zmx1bmtlZCBmb3Igb3V0ZXIgPSAlenUsIG1pZGRsZSA9ICV6dVxuIiwKIAkJ CSAgU1RSSU5HSUZZIChyYXdtZW1jaHIpLCBvdXRlciwgbWlkZGxlKTsKIAkJ ICByZXN1bHQgPSAxOwogCQl9CiAKIAkgICAgICBhZHJbbWlkZGxlXSA9IEwo J1QnKTsKIAkgICAgfQorCSAgaWYgKG91dGVyID09IDApCisJICAgIGJyZWFr OwogCX0KIAogICAgICAgLyogbWVtcmNociB0ZXN0ICovCi0gICAgICBmb3Ig KG91dGVyID0gbmNoYXJzIC0gMTsgb3V0ZXIgPj0gTUFYICgwLCBuY2hhcnMg LSAxMjgpOyAtLW91dGVyKQorICAgICAgZm9yIChvdXRlciA9IG5jaGFycyAt IDE7IG91dGVyID49IG1heDEyODsgLS1vdXRlcikKIAl7Ci0JICBmb3IgKG1p ZGRsZSA9IE1BWCAob3V0ZXIsIG5jaGFycyAtIDY0KTsgbWlkZGxlIDwgbmNo YXJzOyArK21pZGRsZSkKKwkgIGZvciAobWlkZGxlID0gTUFYIChvdXRlciwg bmNoYXJzNjQpOyBtaWRkbGUgPCBuY2hhcnM7ICsrbWlkZGxlKQogCSAgICB7 CiAJICAgICAgYWRyW21pZGRsZV0gPSBMKCdWJyk7CiAKQEAgLTI3MSw0NCAr Mjk3LDUwIEBAIGRvX3Rlc3QgKHZvaWQpCiAKIAkgICAgICBpZiAoY3AgLSAm YWRyW291dGVyXSAhPSBtaWRkbGUgLSBvdXRlcikKIAkJewotCQkgIHByaW50 ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJWQsIG1pZGRsZSA9ICVkXG4i LAorCQkgIHByaW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBt aWRkbGUgPSAlenVcbiIsCiAJCQkgIFNUUklOR0lGWSAobWVtcmNociksIG91 dGVyLCBtaWRkbGUpOwogCQkgIHJlc3VsdCA9IDE7CiAJCX0KIAogCSAgICAg IGFkclttaWRkbGVdID0gTCgnVCcpOwogCSAgICB9CisJICBpZiAob3V0ZXIg PT0gMCkKKwkgICAgYnJlYWs7CiAJfQotICAgICAgZm9yIChvdXRlciA9IG5j aGFyczsgb3V0ZXIgPj0gTUFYICgwLCBuY2hhcnMgLSAxMjgpOyAtLW91dGVy KQorICAgICAgZm9yIChvdXRlciA9IG5jaGFyczsgb3V0ZXIgPj0gbWF4MTI4 OyAtLW91dGVyKQogCXsKIAkgIENIQVIgKmNwID0gbWVtcmNociAoJmFkcltv dXRlcl0sIEwoJ1YnKSwgbmNoYXJzIC0gb3V0ZXIpOwogCiAJICBpZiAoY3Ag IT0gTlVMTCkKIAkgICAgewotCSAgICAgIHByaW50ZiAoIiVzIGZsdW5rZWQg Zm9yIG91dGVyID0gJWRcbiIsCisJICAgICAgcHJpbnRmICgiJXMgZmx1bmtl ZCBmb3Igb3V0ZXIgPSAlenVcbiIsCiAJCSAgICAgIFNUUklOR0lGWSAobWVt cmNociksIG91dGVyKTsKIAkgICAgICByZXN1bHQgPSAxOwogCSAgICB9CisJ ICBpZiAob3V0ZXIgPT0gMCkKKwkgICAgYnJlYWs7CiAJfQogI2VuZGlmCiAK ICAgICAgIC8qIHN0cmNweS93Y3NjcHkgdGVzdCAqLwotICAgICAgZm9yIChv dXRlciA9IG5jaGFycyAtIDE7IG91dGVyID49IE1BWCAoMCwgbmNoYXJzIC0g MTI4KTsgLS1vdXRlcikKKyAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnMgLSAx OyBvdXRlciA+PSBtYXgxMjg7IC0tb3V0ZXIpCiAJewotCSAgZm9yIChpbm5l ciA9IE1BWCAob3V0ZXIsIG5jaGFycyAtIDY0KTsgaW5uZXIgPCBuY2hhcnM7 ICsraW5uZXIpCisJICBmb3IgKGlubmVyID0gTUFYIChvdXRlciwgbmNoYXJz NjQpOyBpbm5lciA8IG5jaGFyczsgKytpbm5lcikKIAkgICAgewogCSAgICAg IGFkcltpbm5lcl0gPSBMKCdcMCcpOwogCiAJICAgICAgaWYgKFNUUkNQWSAo ZGVzdCwgJmFkcltvdXRlcl0pICE9IGRlc3QKIAkJICB8fCBTVFJMRU4gKGRl c3QpICE9IChzaXplX3QpIChpbm5lciAtIG91dGVyKSkKIAkJewotCQkgIHBy aW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJWQsIGlubmVyID0gJWRc biIsCisJCSAgcHJpbnRmICgiJXMgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlenUs IGlubmVyID0gJXp1XG4iLAogCQkJICBTVFJJTkdJRlkgKFNUUkNQWSksIG91 dGVyLCBpbm5lcik7CiAJCSAgcmVzdWx0ID0gMTsKIAkJfQogCiAJICAgICAg YWRyW2lubmVyXSA9IEwoJ1QnKTsKIAkgICAgfQorCSAgaWYgKG91dGVyID09 IDApCisJICAgIGJyZWFrOwogCX0KIAogICAgICAgLyogc3RyY21wL3djc2Nt cCB0ZXN0cyAqLwpAQCAtMzIyLDE0ICszNTQsMTQgQEAgZG9fdGVzdCAodm9p ZCkKIAogCSAgICBpZiAoU1RSQ01QIChhZHIgKyBtaWRkbGUsIGRlc3QgKyBu Y2hhcnMgLSBvdXRlcikgPD0gMCkKIAkgICAgICB7Ci0JCXByaW50ZiAoIiVz IDEgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlZCwgbWlkZGxlID0gJWRcbiIsCisJ CXByaW50ZiAoIiVzIDEgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlenUsIG1pZGRs ZSA9ICV6dVxuIiwKIAkJCVNUUklOR0lGWSAoU1RSQ01QKSwgb3V0ZXIsIG1p ZGRsZSk7CiAJCXJlc3VsdCA9IDE7CiAJICAgICAgfQogCiAJICAgIGlmIChT VFJDTVAgKGRlc3QgKyBuY2hhcnMgLSBvdXRlciwgYWRyICsgbWlkZGxlKSA+ PSAwKQogCSAgICAgIHsKLQkJcHJpbnRmICgiJXMgMiBmbHVua2VkIGZvciBv dXRlciA9ICVkLCBtaWRkbGUgPSAlZFxuIiwKKwkJcHJpbnRmICgiJXMgMiBm bHVua2VkIGZvciBvdXRlciA9ICV6dSwgbWlkZGxlID0gJXp1XG4iLAogCQkJ U1RSSU5HSUZZIChTVFJDTVApLCBvdXRlciwgbWlkZGxlKTsKIAkJcmVzdWx0 ID0gMTsKIAkgICAgICB9CkBAIC0zNDgsMTYgKzM4MCwxNiBAQCBkb190ZXN0 ICh2b2lkKQogCSAgICAgIHsKIAkJaWYgKFNUUk5DTVAgKGFkciArIG1pZGRs ZSwgZGVzdCArIG5jaGFycyAtIG91dGVyLCBpbm5lcikgIT0gMCkKIAkJICB7 Ci0JCSAgICBwcmludGYgKCIlcyAxIGZsdW5rZWQgZm9yIG91dGVyID0gJWQs IG1pZGRsZSA9ICVkLCAiCi0JCQkgICAgImlubmVyID0gJWRcbiIsCisJCSAg ICBwcmludGYgKCIlcyAxIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBtaWRk bGUgPSAlenUsICIKKwkJCSAgICAiaW5uZXIgPSAlenVcbiIsCiAJCQkgICAg U1RSSU5HSUZZIChTVFJOQ01QKSwgb3V0ZXIsIG1pZGRsZSwgaW5uZXIpOwog CQkgICAgcmVzdWx0ID0gMTsKIAkJICB9CiAKIAkJaWYgKFNUUk5DTVAgKGRl c3QgKyBuY2hhcnMgLSBvdXRlciwgYWRyICsgbWlkZGxlLCBpbm5lcikgIT0g MCkKIAkJICB7Ci0JCSAgICBwcmludGYgKCIlcyAyIGZsdW5rZWQgZm9yIG91 dGVyID0gJWQsIG1pZGRsZSA9ICVkLCAiCi0JCQkgICAgImlubmVyID0gJWRc biIsCisJCSAgICBwcmludGYgKCIlcyAyIGZsdW5rZWQgZm9yIG91dGVyID0g JXp1LCBtaWRkbGUgPSAlenUsICIKKwkJCSAgICAiaW5uZXIgPSAlenVcbiIs CiAJCQkgICAgU1RSSU5HSUZZIChTVFJOQ01QKSwgb3V0ZXIsIG1pZGRsZSwg aW5uZXIpOwogCQkgICAgcmVzdWx0ID0gMTsKIAkJICB9CkBAIC0zNjUsMTQg KzM5NywxNCBAQCBkb190ZXN0ICh2b2lkKQogCiAJICAgIGlmIChTVFJOQ01Q IChhZHIgKyBtaWRkbGUsIGRlc3QgKyBuY2hhcnMgLSBvdXRlciwgb3V0ZXIp ID49IDApCiAJICAgICAgewotCQlwcmludGYgKCIlcyAxIGZsdW5rZWQgZm9y IG91dGVyID0gJWQsIG1pZGRsZSA9ICVkLCBmdWxsXG4iLAorCQlwcmludGYg KCIlcyAxIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBtaWRkbGUgPSAlenUs IGZ1bGxcbiIsCiAJCQlTVFJJTkdJRlkgKFNUUk5DTVApLCBvdXRlciwgbWlk ZGxlKTsKIAkJcmVzdWx0ID0gMTsKIAkgICAgICB9CiAKIAkgICAgaWYgKFNU Uk5DTVAgKGRlc3QgKyBuY2hhcnMgLSBvdXRlciwgYWRyICsgbWlkZGxlLCBv dXRlcikgPD0gMCkKIAkgICAgICB7Ci0JCXByaW50ZiAoIiVzIDIgZmx1bmtl ZCBmb3Igb3V0ZXIgPSAlZCwgbWlkZGxlID0gJWQsIGZ1bGxcbiIsCisJCXBy aW50ZiAoIiVzIDIgZmx1bmtlZCBmb3Igb3V0ZXIgPSAlenUsIG1pZGRsZSA9 ICV6dSwgZnVsbFxuIiwKIAkJCVNUUklOR0lGWSAoU1RSTkNNUCksIG91dGVy LCBtaWRkbGUpOwogCQlyZXN1bHQgPSAxOwogCSAgICAgIH0KQEAgLTM4MCw3 ICs0MTIsNyBAQCBkb190ZXN0ICh2b2lkKQogCiAgICAgICAvKiBzdHJuY3B5 L3djc25jcHkgdGVzdHMgKi8KICAgICAgIGFkcltuY2hhcnMgLSAxXSA9IEwo J1QnKTsKLSAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnM7IG91dGVyID49IE1B WCAoMCwgbmNoYXJzIC0gMTI4KTsgLS1vdXRlcikKKyAgICAgIGZvciAob3V0 ZXIgPSBuY2hhcnM7IG91dGVyID49IG1heDEyODsgLS1vdXRlcikKIAl7CiAJ ICBzaXplX3QgbGVuOwogCkBAIC0zODksMTcgKzQyMSwxOSBAQCBkb190ZXN0 ICh2b2lkKQogCSAgICAgIGlmIChTVFJOQ1BZIChkZXN0LCAmYWRyW291dGVy XSwgbGVuKSAhPSBkZXN0CiAJCSAgfHwgTUVNQ01QIChkZXN0LCAmYWRyW291 dGVyXSwgbGVuKSAhPSAwKQogCQl7Ci0JCSAgcHJpbnRmICgib3V0ZXIgJXMg Zmx1bmtlZCBmb3Igb3V0ZXIgPSAlZCwgbGVuID0gJVpkXG4iLAorCQkgIHBy aW50ZiAoIm91dGVyICVzIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBsZW4g PSAlenVcbiIsCiAJCQkgIFNUUklOR0lGWSAoU1RSTkNQWSksIG91dGVyLCBs ZW4pOwogCQkgIHJlc3VsdCA9IDE7CiAJCX0KIAkgICAgfQorCSAgaWYgKG91 dGVyID09IDApCisJICAgIGJyZWFrOwogCX0KICAgICAgIGFkcltuY2hhcnMg LSAxXSA9IEwoJ1wwJyk7CiAKLSAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnMg LSAxOyBvdXRlciA+PSBNQVggKDAsIG5jaGFycyAtIDEyOCk7IC0tb3V0ZXIp CisgICAgICBmb3IgKG91dGVyID0gbmNoYXJzIC0gMTsgb3V0ZXIgPj0gbWF4 MTI4OyAtLW91dGVyKQogCXsKLQkgIGZvciAoaW5uZXIgPSBNQVggKG91dGVy LCBuY2hhcnMgLSA2NCk7IGlubmVyIDwgbmNoYXJzOyArK2lubmVyKQorCSAg Zm9yIChpbm5lciA9IE1BWCAob3V0ZXIsIG5jaGFyczY0KTsgaW5uZXIgPCBu Y2hhcnM7ICsraW5uZXIpCiAJICAgIHsKIAkgICAgICBzaXplX3QgbGVuOwog CkBAIC00MTMsOCArNDQ3LDggQEAgZG9fdGVzdCAodm9pZCkKIAkJICAgICAg fHwgKGlubmVyIC0gb3V0ZXIgPCBsZW4KIAkJCSAgJiYgU1RSTEVOIChkZXN0 KSAhPSAoaW5uZXIgLSBvdXRlcikpKQogCQkgICAgewotCQkgICAgICBwcmlu dGYgKCIlcyBmbHVua2VkIGZvciBvdXRlciA9ICVkLCBpbm5lciA9ICVkLCAi Ci0JCQkgICAgICAibGVuID0gJVpkXG4iLAorCQkgICAgICBwcmludGYgKCIl cyBmbHVua2VkIGZvciBvdXRlciA9ICV6dSwgaW5uZXIgPSAlenUsICIKKwkJ CSAgICAgICJsZW4gPSAlenVcbiIsCiAJCQkgICAgICBTVFJJTkdJRlkgKFNU Uk5DUFkpLCBvdXRlciwgaW5uZXIsIGxlbik7CiAJCSAgICAgIHJlc3VsdCA9 IDE7CiAJCSAgICB9CkBAIC00MjQsOCArNDU4LDggQEAgZG9fdGVzdCAodm9p ZCkKIAkJICAgICAgfHwgKGlubmVyIC0gb3V0ZXIgPCBsZW4KIAkJCSAgJiYg U1RSTEVOIChkZXN0ICsgMSkgIT0gKGlubmVyIC0gb3V0ZXIpKSkKIAkJICAg IHsKLQkJICAgICAgcHJpbnRmICgiJXMrMSBmbHVua2VkIGZvciBvdXRlciA9 ICVkLCBpbm5lciA9ICVkLCAiCi0JCQkgICAgICAibGVuID0gJVpkXG4iLAor CQkgICAgICBwcmludGYgKCIlcysxIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1 LCBpbm5lciA9ICV6dSwgIgorCQkJICAgICAgImxlbiA9ICV6dVxuIiwKIAkJ CSAgICAgIFNUUklOR0lGWSAoU1RSTkNQWSksIG91dGVyLCBpbm5lciwgbGVu KTsKIAkJICAgICAgcmVzdWx0ID0gMTsKIAkJICAgIH0KQEAgLTQzMywyOSAr NDY3LDMzIEBAIGRvX3Rlc3QgKHZvaWQpCiAKIAkgICAgICBhZHJbaW5uZXJd ID0gTCgnVCcpOwogCSAgICB9CisJICBpZiAob3V0ZXIgPT0gMCkKKwkgICAg YnJlYWs7CiAJfQogCiAgICAgICAvKiBzdHBjcHkvd2NwY3B5IHRlc3QgKi8K LSAgICAgIGZvciAob3V0ZXIgPSBuY2hhcnMgLSAxOyBvdXRlciA+PSBNQVgg KDAsIG5jaGFycyAtIDEyOCk7IC0tb3V0ZXIpCisgICAgICBmb3IgKG91dGVy ID0gbmNoYXJzIC0gMTsgb3V0ZXIgPj0gbWF4MTI4OyAtLW91dGVyKQogCXsK LQkgIGZvciAoaW5uZXIgPSBNQVggKG91dGVyLCBuY2hhcnMgLSA2NCk7IGlu bmVyIDwgbmNoYXJzOyArK2lubmVyKQorCSAgZm9yIChpbm5lciA9IE1BWCAo b3V0ZXIsIG5jaGFyczY0KTsgaW5uZXIgPCBuY2hhcnM7ICsraW5uZXIpCiAJ ICAgIHsKIAkgICAgICBhZHJbaW5uZXJdID0gTCgnXDAnKTsKIAogCSAgICAg IGlmICgoU1RQQ1BZIChkZXN0LCAmYWRyW291dGVyXSkgLSBkZXN0KSAhPSBp bm5lciAtIG91dGVyKQogCQl7Ci0JCSAgcHJpbnRmICgiJXMgZmx1bmtlZCBm b3Igb3V0ZXIgPSAlZCwgaW5uZXIgPSAlZFxuIiwKKwkJICBwcmludGYgKCIl cyBmbHVua2VkIGZvciBvdXRlciA9ICV6dSwgaW5uZXIgPSAlenVcbiIsCiAJ CQkgIFNUUklOR0lGWSAoU1RQQ1BZKSwgb3V0ZXIsIGlubmVyKTsKIAkJICBy ZXN1bHQgPSAxOwogCQl9CiAKIAkgICAgICBhZHJbaW5uZXJdID0gTCgnVCcp OwogCSAgICB9CisJICBpZiAob3V0ZXIgPT0gMCkKKwkgICAgYnJlYWs7CiAJ fQogCiAgICAgICAvKiBzdHBuY3B5L3djcG5jcHkgdGVzdCAqLwogICAgICAg YWRyW25jaGFycyAtIDFdID0gTCgnVCcpOwotICAgICAgZm9yIChvdXRlciA9 IG5jaGFyczsgb3V0ZXIgPj0gTUFYICgwLCBuY2hhcnMgLSAxMjgpOyAtLW91 dGVyKQorICAgICAgZm9yIChvdXRlciA9IG5jaGFyczsgb3V0ZXIgPj0gbWF4 MTI4OyAtLW91dGVyKQogCXsKIAkgIHNpemVfdCBsZW47CiAKQEAgLTQ2NCwx NyArNTAyLDE5IEBAIGRvX3Rlc3QgKHZvaWQpCiAJICAgICAgaWYgKFNUUE5D UFkgKGRlc3QsICZhZHJbb3V0ZXJdLCBsZW4pICE9IGRlc3QgKyBsZW4KIAkJ ICB8fCBNRU1DTVAgKGRlc3QsICZhZHJbb3V0ZXJdLCBsZW4pICE9IDApCiAJ CXsKLQkJICBwcmludGYgKCJvdXRlciAlcyBmbHVua2VkIGZvciBvdXRlciA9 ICVkLCBsZW4gPSAlWmRcbiIsCisJCSAgcHJpbnRmICgib3V0ZXIgJXMgZmx1 bmtlZCBmb3Igb3V0ZXIgPSAlenUsIGxlbiA9ICV6dVxuIiwKIAkJCSAgU1RS SU5HSUZZIChTVFBOQ1BZKSwgb3V0ZXIsIGxlbik7CiAJCSAgcmVzdWx0ID0g MTsKIAkJfQogCSAgICB9CisJICBpZiAob3V0ZXIgPT0gMCkKKwkgICAgYnJl YWs7CiAJfQogICAgICAgYWRyW25jaGFycyAtIDFdID0gTCgnXDAnKTsKIAot ICAgICAgZm9yIChvdXRlciA9IG5jaGFycyAtIDE7IG91dGVyID49IE1BWCAo MCwgbmNoYXJzIC0gMTI4KTsgLS1vdXRlcikKKyAgICAgIGZvciAob3V0ZXIg PSBuY2hhcnMgLSAxOyBvdXRlciA+PSBtYXgxMjg7IC0tb3V0ZXIpCiAJewot CSAgZm9yIChtaWRkbGUgPSBNQVggKG91dGVyLCBuY2hhcnMgLSA2NCk7IG1p ZGRsZSA8IG5jaGFyczsgKyttaWRkbGUpCisJICBmb3IgKG1pZGRsZSA9IE1B WCAob3V0ZXIsIG5jaGFyczY0KTsgbWlkZGxlIDwgbmNoYXJzOyArK21pZGRs ZSkKIAkgICAgewogCSAgICAgIGFkclttaWRkbGVdID0gTCgnXDAnKTsKIApA QCAtNDgzLDggKzUyMyw4IEBAIGRvX3Rlc3QgKHZvaWQpCiAJCSAgaWYgKChT VFBOQ1BZIChkZXN0LCAmYWRyW291dGVyXSwgaW5uZXIpIC0gZGVzdCkKIAkJ ICAgICAgIT0gTUlOIChpbm5lciwgbWlkZGxlIC0gb3V0ZXIpKQogCQkgICAg ewotCQkgICAgICBwcmludGYgKCIlcyBmbHVua2VkIGZvciBvdXRlciA9ICVk LCBtaWRkbGUgPSAlZCwgIgotCQkJICAgICAgImlubmVyID0gJWRcbiIsCisJ CSAgICAgIHByaW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0gJXp1LCBt aWRkbGUgPSAlenUsICIKKwkJCSAgICAgICJpbm5lciA9ICV6dVxuIiwKIAkJ CSAgICAgIFNUUklOR0lGWSAoU1RQTkNQWSksIG91dGVyLCBtaWRkbGUsIGlu bmVyKTsKIAkJICAgICAgcmVzdWx0ID0gMTsKIAkJICAgIH0KQEAgLTQ5Miw2 NiArNTMyLDg0IEBAIGRvX3Rlc3QgKHZvaWQpCiAKIAkgICAgICBhZHJbbWlk ZGxlXSA9IEwoJ1QnKTsKIAkgICAgfQorCSAgaWYgKG91dGVyID09IDApCisJ ICAgIGJyZWFrOwogCX0KIAogICAgICAgLyogbWVtY3B5L3dtZW1jcHkgdGVz dCAqLwotICAgICAgZm9yIChvdXRlciA9IG5jaGFyczsgb3V0ZXIgPj0gTUFY ICgwLCBuY2hhcnMgLSAxMjgpOyAtLW91dGVyKQotCWZvciAoaW5uZXIgPSAw OyBpbm5lciA8IG5jaGFycyAtIG91dGVyOyArK2lubmVyKQotCSAgaWYgKE1F TUNQWSAoZGVzdCwgJmFkcltvdXRlcl0sIGlubmVyKSAhPSAgZGVzdCkKLQkg ICAgewotCSAgICAgIHByaW50ZiAoIiVzIGZsdW5rZWQgZm9yIG91dGVyID0g JWQsIGlubmVyID0gJWRcbiIsCi0JCSAgICAgIFNUUklOR0lGWSAoTUVNQ1BZ KSwgb3V0ZXIsIGlubmVyKTsKLQkgICAgICByZXN1bHQgPSAxOwotCSAgICB9 CisgICAgICBmb3IgKG91dGVyID0gbmNoYXJzOyBvdXRlciA+PSBtYXgxMjg7 IC0tb3V0ZXIpCisJeworCSAgZm9yIChpbm5lciA9IDA7IGlubmVyIDwgbmNo YXJzIC0gb3V0ZXI7ICsraW5uZXIpCisJICAgIGlmIChNRU1DUFkgKGRlc3Qs ICZhZHJbb3V0ZXJdLCBpbm5lcikgIT0gIGRlc3QpCisJICAgICAgeworCQlw cmludGYgKCIlcyBmbHVua2VkIGZvciBvdXRlciA9ICV6dSwgaW5uZXIgPSAl enVcbiIsCisJCQlTVFJJTkdJRlkgKE1FTUNQWSksIG91dGVyLCBpbm5lcik7 CisJCXJlc3VsdCA9IDE7CisJICAgICAgfQorCSAgaWYgKG91dGVyID09IDAp CisJICAgIGJyZWFrOworCX0KIAogICAgICAgLyogbWVtcGNweS93bWVtcGNw eSB0ZXN0ICovCi0gICAgICBmb3IgKG91dGVyID0gbmNoYXJzOyBvdXRlciA+ PSBNQVggKDAsIG5jaGFycyAtIDEyOCk7IC0tb3V0ZXIpCi0JZm9yIChpbm5l ciA9IDA7IGlubmVyIDwgbmNoYXJzIC0gb3V0ZXI7ICsraW5uZXIpCi0JICBp ZiAoTUVNUENQWSAoZGVzdCwgJmFkcltvdXRlcl0sIGlubmVyKSAhPSAgZGVz dCArIGlubmVyKQotCSAgICB7Ci0JICAgICAgcHJpbnRmICgiJXMgZmx1bmtl ZCBmb3Igb3V0ZXIgPSAlZCwgaW5uZXIgPSAlZFxuIiwKLQkJICAgICAgU1RS SU5HSUZZIChNRU1QQ1BZKSwgb3V0ZXIsIGlubmVyKTsKLQkgICAgICByZXN1 bHQgPSAxOwotCSAgICB9CisgICAgICBmb3IgKG91dGVyID0gbmNoYXJzOyBv dXRlciA+PSBtYXgxMjg7IC0tb3V0ZXIpCisJeworCSAgZm9yIChpbm5lciA9 IDA7IGlubmVyIDwgbmNoYXJzIC0gb3V0ZXI7ICsraW5uZXIpCisJICAgIGlm IChNRU1QQ1BZIChkZXN0LCAmYWRyW291dGVyXSwgaW5uZXIpICE9ICBkZXN0 ICsgaW5uZXIpCisJICAgICAgeworCQlwcmludGYgKCIlcyBmbHVua2VkIGZv ciBvdXRlciA9ICV6dSwgaW5uZXIgPSAlenVcbiIsCisJCQlTVFJJTkdJRlkg KE1FTVBDUFkpLCBvdXRlciwgaW5uZXIpOworCQlyZXN1bHQgPSAxOworCSAg ICAgIH0KKwkgIGlmIChvdXRlciA9PSAwKQorCSAgICBicmVhazsKKwl9CiAK ICAgICAgIC8qIFRoaXMgZnVuY3Rpb24gb25seSBleGlzdHMgZm9yIHNpbmds ZS1ieXRlIGNoYXJhY3RlcnMuICAqLwogI2lmbmRlZiBXQ1NURVNUCiAgICAg ICAvKiBtZW1jY3B5IHRlc3QgKi8KICAgICAgIG1lbXNldCAoYWRyLCAnXDAn LCBuY2hhcnMpOwotICAgICAgZm9yIChvdXRlciA9IG5jaGFyczsgb3V0ZXIg Pj0gTUFYICgwLCBuY2hhcnMgLSAxMjgpOyAtLW91dGVyKQotCWZvciAoaW5u ZXIgPSAwOyBpbm5lciA8IG5jaGFycyAtIG91dGVyOyArK2lubmVyKQotCSAg aWYgKG1lbWNjcHkgKGRlc3QsICZhZHJbb3V0ZXJdLCBMKCdcMScpLCBpbm5l cikgIT0gTlVMTCkKLQkgICAgewotCSAgICAgIHByaW50ZiAoIm1lbWNjcHkg Zmx1bmtlZCBmdWxsIGNvcHkgZm9yIG91dGVyID0gJWQsIGlubmVyID0gJWRc biIsCi0JCSAgICAgIG91dGVyLCBpbm5lcik7Ci0JICAgICAgcmVzdWx0ID0g MTsKLQkgICAgfQotICAgICAgZm9yIChvdXRlciA9IG5jaGFycyAtIDE7IG91 dGVyID49IE1BWCAoMCwgbmNoYXJzIC0gMTI4KTsgLS1vdXRlcikKLQlmb3Ig KG1pZGRsZSA9IDA7IG1pZGRsZSA8IG5jaGFycyAtIG91dGVyOyArK21pZGRs ZSkKLQkgIHsKLQkgICAgbWVtc2V0IChkZXN0LCBMKCdcMicpLCBtaWRkbGUg KyAxKTsKLQkgICAgZm9yIChpbm5lciA9IDA7IGlubmVyIDwgbWlkZGxlOyAr K2lubmVyKQorICAgICAgZm9yIChvdXRlciA9IG5jaGFyczsgb3V0ZXIgPj0g bWF4MTI4OyAtLW91dGVyKQorCXsKKwkgIGZvciAoaW5uZXIgPSAwOyBpbm5l ciA8IG5jaGFycyAtIG91dGVyOyArK2lubmVyKQorCSAgICBpZiAobWVtY2Nw eSAoZGVzdCwgJmFkcltvdXRlcl0sIEwoJ1wxJyksIGlubmVyKSAhPSBOVUxM KQogCSAgICAgIHsKLQkJYWRyW291dGVyICsgaW5uZXJdID0gTCgnXDEnKTsK LQotCQlpZiAobWVtY2NweSAoZGVzdCwgJmFkcltvdXRlcl0sICdcMScsIG1p ZGRsZSArIDEyOCkKLQkJICAgICE9ICBkZXN0ICsgaW5uZXIgKyAxKQotCQkg IHsKLQkJICAgIHByaW50ZiAoIlwKLW1lbWNjcHkgZmx1bmtlZCBwYXJ0aWFs IGNvcHkgZm9yIG91dGVyID0gJWQsIG1pZGRsZSA9ICVkLCBpbm5lciA9ICVk XG4iLAotCQkJICAgIG91dGVyLCBtaWRkbGUsIGlubmVyKTsKLQkJICAgIHJl c3VsdCA9IDE7Ci0JCSAgfQotCQllbHNlIGlmIChkZXN0W2lubmVyICsgMV0g IT0gTCgnXDInKSkKLQkJICB7Ci0JCSAgICBwcmludGYgKCJcCi1tZW1jY3B5 IGNvcGllZCB0b28gbXVjaCBmb3Igb3V0ZXIgPSAlZCwgbWlkZGxlID0gJWQs IGlubmVyID0gJWRcbiIsCi0JCQkgICAgb3V0ZXIsIG1pZGRsZSwgaW5uZXIp OwotCQkgICAgcmVzdWx0ID0gMTsKLQkJICB9Ci0JCWFkcltvdXRlciArIGlu bmVyXSA9IEwoJ1wwJyk7CisJCXByaW50ZiAoIm1lbWNjcHkgZmx1bmtlZCBm dWxsIGNvcHkgZm9yIG91dGVyID0gJXp1LCBpbm5lciA9ICV6dVxuIiwKKwkJ CW91dGVyLCBpbm5lcik7CisJCXJlc3VsdCA9IDE7CiAJICAgICAgfQotCSAg fQorCSAgaWYgKG91dGVyID09IDApCisJICAgIGJyZWFrOworCX0KKyAgICAg IGZvciAob3V0ZXIgPSBuY2hhcnMgLSAxOyBvdXRlciA+PSBtYXgxMjg7IC0t b3V0ZXIpCisJeworCSAgZm9yIChtaWRkbGUgPSAwOyBtaWRkbGUgPCBuY2hh cnMgLSBvdXRlcjsgKyttaWRkbGUpCisJICAgIHsKKwkgICAgICBtZW1zZXQg KGRlc3QsIEwoJ1wyJyksIG1pZGRsZSArIDEpOworCSAgICAgIGZvciAoaW5u ZXIgPSAwOyBpbm5lciA8IG1pZGRsZTsgKytpbm5lcikKKwkJeworCQkgIGFk cltvdXRlciArIGlubmVyXSA9IEwoJ1wxJyk7CisKKwkJICBpZiAobWVtY2Nw eSAoZGVzdCwgJmFkcltvdXRlcl0sICdcMScsIG1pZGRsZSArIDEyOCkKKwkJ ICAgICAgIT0gIGRlc3QgKyBpbm5lciArIDEpCisJCSAgICB7CisJCSAgICAg IHByaW50ZiAoIlwKKwkJCSAgICAgIG1lbWNjcHkgZmx1bmtlZCBwYXJ0aWFs IGNvcHkgZm9yIG91dGVyID0gJXp1LCBtaWRkbGUgPSAlenUsIGlubmVyID0g JXp1XG4iLAorCQkJICAgICAgb3V0ZXIsIG1pZGRsZSwgaW5uZXIpOworCQkg ICAgICByZXN1bHQgPSAxOworCQkgICAgfQorCQkgIGVsc2UgaWYgKGRlc3Rb aW5uZXIgKyAxXSAhPSBMKCdcMicpKQorCQkgICAgeworCQkgICAgICBwcmlu dGYgKCJcCisJCQkgICAgICBtZW1jY3B5IGNvcGllZCB0b28gbXVjaCBmb3Ig b3V0ZXIgPSAlenUsIG1pZGRsZSA9ICV6dSwgaW5uZXIgPSAlenVcbiIsCisJ CQkgICAgICBvdXRlciwgbWlkZGxlLCBpbm5lcik7CisJCSAgICAgIHJlc3Vs dCA9IDE7CisJCSAgICB9CisJCSAgYWRyW291dGVyICsgaW5uZXJdID0gTCgn XDAnKTsKKwkJfQorCSAgICB9CisJICBpZiAob3V0ZXIgPT0gMCkKKwkgICAg YnJlYWs7CisJfQogI2VuZGlmCiAgICAgfQogCi0tIAoyLjEzLjUKCg== --001a113d37da3850ed055756f02e--