X-Recipient: archive-cygwin AT delorie DOT com DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BB0F83857C5F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; s=default; t=1600713265; bh=cE+L80hUHmmtPKj4kwutas5Ii7oX9QXS0YfOAArl1oo=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=C2PA3mepp3+42RPnE5PiyXNsQ5tj4+O0yX4QltvpZH21eBX2UCCO8/O8Ghx4iajxY Cl6WrOVU205SR8jtRABs+HIX+mN/+sn4HmRU75347jG+gFDCImUADfEPjKA1odOUkH nH18bNJCX5ucs8JeyRcGj61bG7QYEPVMVmcnNOb0= X-Original-To: cygwin AT cygwin DOT com Delivered-To: cygwin AT cygwin DOT com DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 411DC3857C5F X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=hiQpnIRuh+K/9SXrkBuAKdwSdqTXyumizTqgsgVMW2g=; b=daBN2VyNRge++AqLmYCKzXB9U8M+ZSkU9diF5gHIHxbN5EuGmhPNThE7KA7uccyCgB 1weQOMXIfaJUkUDWPMw8scXvQv/LdQKX9a/VAe4TjBe05idO0WQtQ5VieguKV51iDuGM 3sfDCvm0CFBE/j5ndaV8NHQXHvS9yPvayNHQM5u6UfRel5SleNpDDghXKG2mlS4zEgEa quBjUkRHITua4IS+E18i5and+88QCwIjtf4jnD+CriXkXUCviOeocmz8F8oTP4ZxVG/7 vyYvIwlsepMdrkfirgL1Qr1kvWQvtGlKXWHDhnQKcSCY3CO1aEK8h/Qud+liTA5grI59 afNQ== X-Gm-Message-State: AOAM530k3xDcnyUcWGwGMY9bewxfhIbHYOVsQ1ijvcYa3hFKiWtrJYZO VlSDhsRfYNCVkuRtuXTOJmXwTblQN4SagzDCdPBuNHFCfJY= X-Google-Smtp-Source: ABdhPJyV0V/R309a7AY0v4seDwB0Q7IUdDayeoAswKWx/MvsrUBE3U9x/UwqwgVFiUhy1EA3sz5ckkqWhy/IlH8YQag= X-Received: by 2002:a1c:7911:: with SMTP id l17mr627127wme.179.1600713259568; Mon, 21 Sep 2020 11:34:19 -0700 (PDT) MIME-Version: 1.0 Date: Mon, 21 Sep 2020 11:34:08 -0700 Message-ID: Subject: cygwin qsort erratic isolated To: cygwin AT cygwin DOT com Content-Type: multipart/mixed; boundary="00000000000039abdc05afd719d9" X-Spam-Status: No, score=1.3 required=5.0 tests=BAYES_50, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Level: * X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: cygwin AT cygwin DOT com X-Mailman-Version: 2.1.29 List-Id: General Cygwin discussions and problem reports List-Archive: List-Post: List-Help: List-Subscribe: , From: Kurt Carlson via Cygwin Reply-To: Kurt Carlson Sender: "Cygwin" --00000000000039abdc05afd719d9 Content-Type: text/plain; charset="UTF-8" The attached source replicates the erratic qsort problem. This compiles both cygwin and RHEL. In the following, the first descending dpcsort has erroneous results: kc: uname -a CYGWIN_NT-10.0 kacds 3.1.7(0.340/5/3) 2020-08-22 17:48 x86_64 Cygwin kc: cc c19.c -o c19 kc: ./c19 # consort qsort struct descending -c 300000 # consort:0: # dpcsort qsort divide descending -c 300000 # dpcsort:0 # confirmed deaths dpc location: 239 663437 29259 4.4102 Peru 240 633339 20348 3.2128 Colombia 195 610957 65816 10.7726 Mexico 145 488513 29234 5.9843 Spain 137 338676 41514 12.2577 United Kingdom 190 378752 21797 5.7550 Iran 000 26068854 863584 3.3127 World 237 3997865 123780 3.0962 Brazil 196 6114406 185744 3.0378 United States 246 414739 11344 2.7352 Chile 039 630595 14389 2.2818 South Africa 245 428226 8971 2.0949 Argentina 085 3853406 67376 1.7485 India 169 1005000 17414 1.7327 Russia 084 317528 4351 1.3703 Bangladesh 186 317486 3956 1.2460 Saudi Arabia # dpcsort qsort divide ascending -c 300000 # dpcsort:1 # dpcsort qsort divide descending -c 300000 # dpcsort:0 # confirmed deaths dpc location: 137 338676 41514 12.2577 United Kingdom 195 610957 65816 10.7726 Mexico 145 488513 29234 5.9843 Spain 190 378752 21797 5.7550 Iran 239 663437 29259 4.4102 Peru 000 26068854 863584 3.3127 World 240 633339 20348 3.2128 Colombia 237 3997865 123780 3.0962 Brazil 196 6114406 185744 3.0378 United States 246 414739 11344 2.7352 Chile 039 630595 14389 2.2818 South Africa 245 428226 8971 2.0949 Argentina 085 3853406 67376 1.7485 India 169 1005000 17414 1.7327 Russia 084 317528 4351 1.3703 Bangladesh 186 317486 3956 1.2460 Saudi Arabia In researching this I looked at source for eight qsort implementations: 1a. gnu (RHEL 7): Always works. ./c19 1b. RHEL/gnu compiled under cygwin: Always works. Not proviced in c19.c Had to incorporate both qsort.c and msort.c glibc stdlib. 2a. cygwin unmodified: fails (above example) ./c19 Both insertion sorts 'goto pop' vs. return. 2b. cygwin modified: mostly works ./c19 -q qcygw -r Commented out secondary insertion sort (per Dennis de Champeaux). 2c. cygwin compiled under RHEL 7: fails (as under cygwin) ./c19 -q qcygw 2d. cygwin modified under RHEL 7 (like 2b): mostly works ./c19 -q qcygw -r 3. netbsd: mostly works Not provided in c19.c The only insertion sort returns. 4. openbsd: mosly works Not provided in c19.c Both insertion sorts return. 5. freebsd: did not attempt Both insertion sorts return. 6. MacOS: did not attempt Both insertion sorts return. 7. Android: did not attempt (older version of openbsd) Both insertion sorts return. 8. Dennis de Chameaux 'bentley': mostly works Not provided with c19 Besides commenting out secondary insertion sort, this code has return vs. goto and he made corrections to reduce recursion. Types 2-8 diverged (greatly) from the same base. The cygwin version is a bit puzzling using goto vs. return when there is a general concern for stack usage with the recursive calls. All versions of qsort are cryptic (stated kindly). I believe gnu did the right thing in re-writing, but it still is not a pleasant read. The failures are triggered with values from a float divide by zero, either in the compare routine or imbedded in the structure being sorted. While divide by zero behaviour is "undefined" that really should not extend to qsort erraticism. The "mostly works" gets the numeric values in the correct order, but the divide by zero values are mis-placed. For a better representation use either cygwin or RHEL: ./c19 -c 0 -z -q qcygw -r If you add the --verbose option, values are displayed in the compare routine. The divide by zero float is always 0xffc00000. Any subtract operation with that value always results (int) as 0x80000000, pathologically negative. All four bsd variants I attempted, both under cygwin and rhel, do not fully cope with the 0xffc00000, cygwin most poorly. I contacted Dennis de Champeaux, this problem is unique from what he previously addressed although his fix improves cygwin's qsort up to the other bsd variants. The obvious circumvention is to avoid divide by zero. That all bsd variants have similar issues, and the crypticness of all the variants, it is less than optimal to attempt any kind of fix. E.g., call it not "broken" but a "feature" of undefined divide by zero even though it is well removed from the operation and a non-issue for RHEL. Be prepared to advise anybody who experiences erratic qsort behaviour of this "feature". Please advise what, if any, assistance I can provide at this point. Regards, Kurt -- Kurt Carlson -- 509-730-4814 -- carlsonkurta AT gmail DOT com --00000000000039abdc05afd719d9 Content-Type: application/octet-stream; name="c19.c" Content-Disposition: attachment; filename="c19.c" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kfcv70n40 I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5o PgojaW5jbHVkZSA8Z2V0b3B0Lmg+CiNpZmRlZiBfX0NZR1dJTl9fCiNkZWZpbmUJT1NfV0lOIDEK I2VuZGlmCgp2b2lkCU9wdGlvbnMoKTsKdm9pZAl4c29ydCgpOwppbnQJY29uc29ydCgpOwppbnQJ ZHBjc29ydCgpOwppbnQJYWJlbmQoKTsKdm9pZAlTaG93KCk7CnZvaWQJcWN5Z3coKTsKCiNkZWZp bmUJTF9OQQkzMAojZGVmaW5lCUNORgkzMDAwMDAJCQkvKiBkZWZhdWx0IG1pbmltdW0gY29uZmly bWVkCSovCnR5cGVkZWYgaW50CSgqYzE5U28pICgpOwojZGVmaW5lCVNfcXNvcnQJMAkJCS8qIGFy Y2hpdGVjdHVyZSBxc29ydAkJKi8KI2RlZmluZQlTX3FjeWd3IDEJCQkvKiBjeWd3aW4gcXNvcnQs IC1yIG1vZGlmaWVzCSovCgpjaGFyCSp4cXMgPQkwOwppbnQJc19kID0JMTsKaW50CW5fTmEgPQkw OwppbnQJU19xID0JMDsKaW50CW8gPQkxOwppbnQJY25mID0JQ05GOwkJCS8qIG1pbmltdW0gY29u ZmlybWVkIGNhc2VzCSovCmludAl6cm8gPQkwOwkJCS8qIGlmIHNldCBkZXZpZGUgYnkgemVybwkq LwppbnQJcmlzID0JMDsJCQkvKiBpZiBzZXQgcmVtb3ZlIDJuZCBpbnMuIHNvcnQJKi8KaW50CXZy YiA9CTA7CQkJLyogc2hvdyB2YWx1ZXMgaW4gcXNvcnQgY29tcGFyZQkqLwoKc3RydWN0CVNPUlQK ewlpbnQJdiwgbywgZDsKCWNoYXIJKnR5cGU7Cn07CnN0cnVjdAlTT1JUCXFhLCAqcXEgPSAmcWE7 CnN0cnVjdAlTVFlQCnsKCWludAlxOwoJY2hhcgkqd2hhdDsKfTsKc3RydWN0CVNUWVAJU3RbXSA9 CnsKICB7CVNfcXNvcnQsCSJxc29ydCIJfSwJLyogY3lnd2luIHFzb3J0CQkqLwogIHsJU19xY3ln dywJInFjeWd3Igl9LAkvKiBjb21waWxlZCBjeWd3aW4JKi8KICB7CTAsCQkwCX0KfTsKCnN0cnVj dAlOQU1FCnsKaW50CQlpeDsKZmxvYXQJCWRwYzsKaW50CQljbzsKaW50CQlkZTsKY2hhcgkJbmFb TF9OQSsxXTsKfTsKc3RydWN0CU5BTUUJTmFtZVtdID0KewogIHsgMCwgMCwgMjYwNjg4NTQsICAg ODYzNTg0LCAiV29ybGQiIH0sCiAgeyAwLCAwLCAgICAgMjcyOSwgICAgICAxMDksICJBbmdvbGEi IH0sCiAgeyAwLCAwLCAgICAxOTQ2MCwgICAgICA0MTQsICJDYW1lcm9vbiIgfSwKICB7IDAsIDAs ICAgICA0NzEyLCAgICAgICA2MiwgIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyIgfSwKICB7IDAs IDAsICAgICAxMDE3LCAgICAgICA3NywgIkNoYWQiIH0sCiAgeyAwLCAwLCAgICAxMDExMywgICAg ICAyNTgsICJEZW1vY3JhdGljIFJlcHVibGljIG9mIENvbmdvIiB9LAogIHsgMCwgMCwgICAgIDQ5 NjUsICAgICAgIDgzLCAiRXF1YXRvcmlhbCBHdWluZWEiIH0sCiAgeyAwLCAwLCAgICAgODUzOCwg ICAgICAgNTMsICJHYWJvbiIgfSwKICB7IDAsIDAsICAgICA0NjI4LCAgICAgIDEwMiwgIlJlcHVi bGljIG9mIENvbmdvIiB9LAogIHsgMCwgMCwgICAgICA4OTYsICAgICAgIDE1LCAiU2FvIFRvbWUg YW5kIFByaW5jaXBlIiB9LAogIHsgMCwgMCwgICAgICA0NDgsICAgICAgICAxLCAiQnVydW5kaSIg fSwKICB7IDAsIDAsICAgICAgNDI3LCAgICAgICAgNywgIkNvbW9yb3MiIH0sCiAgeyAwLCAwLCAg ICAgNTM4NywgICAgICAgNjAsICJEamlib3V0aSIgfSwKICB7IDAsIDAsICAgICAgMzE5LCAgICAg ICAgMCwgIkVyaXRyZWEiIH0sCiAgeyAwLCAwLCAgICA1NDQwOSwgICAgICA4NDYsICJFdGhpb3Bp YSIgfSwKICB7IDAsIDAsICAgIDM0NDkzLCAgICAgIDU3NywgIktlbnlhIiB9LAogIHsgMCwgMCwg ICAgMTUwMjMsICAgICAgMTk2LCAiTWFkYWdhc2NhciIgfSwKICB7IDAsIDAsICAgICA1NTc5LCAg ICAgIDE3NSwgIk1hbGF3aSIgfSwKICB7IDAsIDAsICAgICAgMzU2LCAgICAgICAxMCwgIk1hdXJp dGl1cyIgfSwKICB7IDAsIDAsICAgICA0MTE3LCAgICAgICAyNSwgIk1vemFtYmlxdWUiIH0sCiAg eyAwLCAwLCAgICAgNDIxOCwgICAgICAgMTcsICJSd2FuZGEiIH0sCiAgeyAwLCAwLCAgICAgIDEz NiwgICAgICAgIDAsICJTZXljaGVsbGVzIiB9LAogIHsgMCwgMCwgICAgIDMzMTAsICAgICAgIDk4 LCAiU29tYWxpYSIgfSwKICB7IDAsIDAsICAgICAyNTMyLCAgICAgICA0NywgIlNvdXRoIFN1ZGFu IiB9LAogIHsgMCwgMCwgICAgICA1MDksICAgICAgIDIxLCAiVGFuemFuaWEiIH0sCiAgeyAwLCAw LCAgICAgMzExMiwgICAgICAgMzIsICJVZ2FuZGEiIH0sCiAgeyAwLCAwLCAgICAxMjQxNSwgICAg ICAyOTIsICJaYW1iaWEiIH0sCiAgeyAwLCAwLCAgICAgNjYzOCwgICAgICAyMDYsICJaaW1iYWJ3 ZSIgfSwKICB7IDAsIDAsICAgIDQ1MTU4LCAgICAgMTUyNSwgIkFsZ2VyaWEiIH0sCiAgeyAwLCAw LCAgICA5OTI4MCwgICAgIDU0NjEsICJFZ3lwdCIgfSwKICB7IDAsIDAsICAgIDE1MTU2LCAgICAg IDI1MCwgIkxpYnlhIiB9LAogIHsgMCwgMCwgICAgNjU0NTMsICAgICAxMjE2LCAiTW9yb2NjbyIg fSwKICB7IDAsIDAsICAgICAgNzY2LCAgICAgICAgMSwgIlNhaGFyYSIgfSwKICB7IDAsIDAsICAg IDEzMTg5LCAgICAgIDgyMywgIlN1ZGFuIiB9LAogIHsgMCwgMCwgICAgIDQxOTYsICAgICAgIDgx LCAiVHVuaXNpYSIgfSwKICB7IDAsIDAsICAgICAxNzI0LCAgICAgICAgNiwgIkJvdHN3YW5hIiB9 LAogIHsgMCwgMCwgICAgIDQ2NjgsICAgICAgIDk0LCAiRXN3YXRpbmkiIH0sCiAgeyAwLCAwLCAg ICAgMTA4NSwgICAgICAgMzEsICJMZXNvdGhvIiB9LAogIHsgMCwgMCwgICAgIDc4NDQsICAgICAg IDgyLCAiTmFtaWJpYSIgfSwKICB7IDAsIDAsICAgNjMwNTk1LCAgICAxNDM4OSwgIlNvdXRoIEFm cmljYSIgfSwKICB7IDAsIDAsICAgICAyMTk0LCAgICAgICA0MCwgIkJlbmluIiB9LAogIHsgMCwg MCwgICAgIDEzNzgsICAgICAgIDU1LCAiQnVya2luYSBGYXNvIiB9LAogIHsgMCwgMCwgICAgIDQw NDgsICAgICAgIDQxLCAiQ2FibyBWZXJkZSIgfSwKICB7IDAsIDAsICAgIDE4MTYxLCAgICAgIDEx NywgIkNvdGUgZCdJdm9pcmUiIH0sCiAgeyAwLCAwLCAgICAgMzA2NywgICAgICAgOTcsICJHYW1i aWEiIH0sCiAgeyAwLCAwLCAgICA0NDY1OCwgICAgICAyNzYsICJHaGFuYSIgfSwKICB7IDAsIDAs ICAgICA5NDc5LCAgICAgICA1OSwgIkd1aW5lYSIgfSwKICB7IDAsIDAsICAgICAyMjA1LCAgICAg ICAzNCwgIkd1aW5lYS1CaXNzYXUiIH0sCiAgeyAwLCAwLCAgICAgMTMwNSwgICAgICAgODIsICJM aWJlcmlhIiB9LAogIHsgMCwgMCwgICAgIDI4MDIsICAgICAgMTI2LCAiTWFsaSIgfSwKICB7IDAs IDAsICAgICA3MDg5LCAgICAgIDE2MCwgIk1hdXJpdGFuaWEiIH0sCiAgeyAwLCAwLCAgICAgMTE3 NywgICAgICAgNjksICJOaWdlciIgfSwKICB7IDAsIDAsICAgIDU0NDYzLCAgICAgMTAyNywgIk5p Z2VyaWEiIH0sCiAgeyAwLCAwLCAgICAxMzc0MywgICAgICAyODcsICJTZW5lZ2FsIiB9LAogIHsg MCwgMCwgICAgIDIwMjksICAgICAgIDcxLCAiU2llcnJhIExlb25lIiB9LAogIHsgMCwgMCwgICAg ICAgIDAsICAgICAgICAwLCAiU3QuSGVsZW5hIiB9LAogIHsgMCwgMCwgICAgIDE0MzQsICAgICAg IDMwLCAiVG9nbyIgfSwKICB7IDAsIDAsICAgICAgMjc0LCAgICAgICAgMCwgIkNhbWJvZGlhIiB9 LAogIHsgMCwgMCwgICAgNjk1OTksICAgICAxMzE5LCAiSmFwYW4iIH0sCiAgeyAwLCAwLCAgICAg ICAyMiwgICAgICAgIDAsICJMYW9zIiB9LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAi Tm9ydGggS29yZWEiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJPdGhlcnMiIH0s CiAgeyAwLCAwLCAgICAyMDY0NCwgICAgICAzMjksICJTb3V0aCBLb3JlYSIgfSwKICB7IDAsIDAs ICAgICAzNDI3LCAgICAgICA1OCwgIlRoYWlsYW5kIiB9LAogIHsgMCwgMCwgICAgIDEwNDYsICAg ICAgIDM1LCAiVmlldG5hbSIgfSwKICB7IDAsIDAsICAgICAgMjI3LCAgICAgICAgMCwgIkJodXRh biIgfSwKICB7IDAsIDAsICAgIDg5OTUzLCAgICAgNDcyNywgIkNoaW5hIiB9LAogIHsgMCwgMCwg ICAgICAgIDAsICAgICAgICAwLCAiSG9uZyBLb25nIiB9LAogIHsgMCwgMCwgICAgICA0ODksICAg ICAgICA3LCAiVGFpd2FuIiB9LAogIHsgMCwgMCwgICAgICAzMDYsICAgICAgICAwLCAiTW9uZ29s aWEiIH0sCiAgeyAwLCAwLCAgICA0MTY0OSwgICAgICAyNTEsICJOZXBhbCIgfSwKICB7IDAsIDAs ICAgICAgICAwLCAgICAgICAgMCwgIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnIiIH0sCiAgeyAw LCAwLCAgICAgICAgMCwgICAgICAgIDAsICJDaHJpc3RtYXMgSXMiIH0sCiAgeyAwLCAwLCAgICAg ICAgMCwgICAgICAgIDAsICJDb2NvcyBJcyIgfSwKICB7IDAsIDAsICAgICAgICAwLCAgICAgICAg MCwgIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcyIgfSwKICB7IDAsIDAsICAgICAgICAwLCAg ICAgICAgMCwgIkhlYXJkIElzIiB9LAogIHsgMCwgMCwgICAgIDgxNDAsICAgICAgIDI5LCAiTWFs ZGl2ZXMiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJNYXlvdHRlIiB9LAogIHsg MCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiUmV1bmlvbiIgfSwKICB7IDAsIDAsICAgICAzMTAx LCAgICAgICAxMiwgIlNyaSBMYW5rYSIgfSwKICB7IDAsIDAsICAgICAgIDI3LCAgICAgICAgMCwg IlRpbW9yLUxlc3RlIiB9LAogIHsgMCwgMCwgICAgICAxNDQsICAgICAgICAzLCAiQnJ1bmVpIiB9 LAogIHsgMCwgMCwgICAxODA2NDYsICAgICA3NjE2LCAiSW5kb25lc2lhIiB9LAogIHsgMCwgMCwg ICAyMjY0NDAsICAgICAzNjIzLCAiUGhpbGlwcGluZXMiIH0sCiAgeyAwLCAwLCAgIDMxNzUyOCwg ICAgIDQzNTEsICJCYW5nbGFkZXNoIiB9LAogIHsgMCwgMCwgIDM4NTM0MDYsICAgIDY3Mzc2LCAi SW5kaWEiIH0sCiAgeyAwLCAwLCAgICAgOTM2MCwgICAgICAxMjgsICJNYWxheXNpYSIgfSwKICB7 IDAsIDAsICAgICAxMDU4LCAgICAgICAgNiwgIk15YW5tYXIiIH0sCiAgeyAwLCAwLCAgIDI5NzAx NCwgICAgIDYzMjgsICJQYWtpc3RhbiIgfSwKICB7IDAsIDAsICAgIDU2ODYwLCAgICAgICAyNywg IlNpbmdhcG9yZSIgfSwKICB7IDAsIDAsICAgIDQ0MDc1LCAgICAgIDg4NCwgIkFybWVuaWEiIH0s CiAgeyAwLCAwLCAgIDEzMjM1NCwgICAgIDE4ODksICJLYXpha2hzdGFuIiB9LAogIHsgMCwgMCwg ICAgNDQxMzUsICAgICAxMDU5LCAiS3lyZ3l6c3RhbiIgfSwKICB7IDAsIDAsICAgICA4NjU0LCAg ICAgICA2OSwgIlRhamlraXN0YW4iIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJU dXJrbWVuaXN0YW4iIH0sCiAgeyAwLCAwLCAgICA0MjU0MCwgICAgICAzMjksICJVemJla2lzdGFu IiB9LAogIHsgMCwgMCwgICAgICAgOTQsICAgICAgICAzLCAiQW50aWd1YSBhbmQgQmFyYnVkYSIg fSwKICB7IDAsIDAsICAgICAyMzM3LCAgICAgICA0NywgIkJhaGFtYXMiIH0sCiAgeyAwLCAwLCAg ICAgIDE3NiwgICAgICAgIDcsICJCYXJiYWRvcyIgfSwKICB7IDAsIDAsICAgICA0MTI2LCAgICAg ICA5OCwgIkN1YmEiIH0sCiAgeyAwLCAwLCAgICAgICAyMCwgICAgICAgIDAsICJEb21pbmljYSIg fSwKICB7IDAsIDAsICAgIDk1NjI3LCAgICAgMTc2NSwgIkRvbWluaWNhbiBSZXB1YmxpYyIgfSwK ICB7IDAsIDAsICAgICAgIDI0LCAgICAgICAgMCwgIkdyZW5hZGEiIH0sCiAgeyAwLCAwLCAgICAg ODI1OCwgICAgICAyMDYsICJIYWl0aSIgfSwKICB7IDAsIDAsICAgICAyODIyLCAgICAgICAyNywg IkphbWFpY2EiIH0sCiAgeyAwLCAwLCAgICAgICAxNywgICAgICAgIDAsICJTYWludCBLaXR0cyBh bmQgTmV2aXMiIH0sCiAgeyAwLCAwLCAgICAgICAyNiwgICAgICAgIDAsICJTYWludCBMdWNpYSIg fSwKICB7IDAsIDAsICAgICAgIDYxLCAgICAgICAgMCwgIlNhaW50IFZpbmNlbnQgYW5kIEdyZW5h ZGluZXMiIH0sCiAgeyAwLCAwLCAgICAgMTkyMCwgICAgICAgMjgsICJUcmluaWRhZCBhbmQgVG9i YWdvIiB9LAogIHsgMCwgMCwgICAgICAgIDMsICAgICAgICAwLCAiQW5ndWlsbGEiIH0sCiAgeyAw LCAwLCAgICAgIDIwNSwgICAgICAgIDEsICJDYXltYW4gSXNsYW5kcyIgfSwKICB7IDAsIDAsICAg ICAgIDEzLCAgICAgICAgMSwgIk1vbnRzZXJyYXQiIH0sCiAgeyAwLCAwLCAgICAgIDU1NSwgICAg ICAgIDQsICJUdXJrcyBhbmQgQ2FpY29zIElzbGFuZHMiIH0sCiAgeyAwLCAwLCAgICAgICA0Nywg ICAgICAgIDEsICJCUiBWaXJnaW4gSXMiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAs ICJHdWFkZWxvdXBlIiB9LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiTWFydGluaXF1 ZSIgfSwKICB7IDAsIDAsICAgICAgICAwLCAgICAgICAgMCwgIlNhaW50IEJhcnRoZWxlbXkiIH0s CiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJTYWludCBNYXJ0aW4iIH0sCiAgeyAwLCAw LCAgICAgMjIxMSwgICAgICAgMTIsICJBcnViYSIgfSwKICB7IDAsIDAsICAgICAgIDE4LCAgICAg ICAgMCwgIkJvbmFpcmUiIH0sCiAgeyAwLCAwLCAgICAgICA2OCwgICAgICAgIDEsICJDdXJhY2Fv IiB9LAogIHsgMCwgMCwgICAgICA0ODIsICAgICAgIDE5LCAiU2ludCBNYWFydGVuIiB9LAogIHsg MCwgMCwgICAgMTcxOTUsICAgICAgNjI2LCAiRGVubWFyayIgfSwKICB7IDAsIDAsICAgICA4MTYx LCAgICAgIDMzNSwgIkZpbmxhbmQiIH0sCiAgeyAwLCAwLCAgICAgICAxNCwgICAgICAgIDAsICJH cmVlbmxhbmQiIH0sCiAgeyAwLCAwLCAgICAgMjEyMSwgICAgICAgMTAsICJJY2VsYW5kIiB9LAog IHsgMCwgMCwgICAgMTA4NzEsICAgICAgMjY0LCAiTm9yd2F5IiB9LAogIHsgMCwgMCwgICAgODQ3 MjksICAgICA1ODMyLCAiU3dlZGVuIiB9LAogIHsgMCwgMCwgICAgMjgxODMsICAgICAgNzM0LCAi QXVzdHJpYSIgfSwKICB7IDAsIDAsICAgIDg2NDUwLCAgICAgOTg5OSwgIkJlbGdpdW0iIH0sCiAg eyAwLCAwLCAgIDI5MzAyNCwgICAgMzA2ODYsICJGcmFuY2UiIH0sCiAgeyAwLCAwLCAgIDI0NjEx NiwgICAgIDkzMTksICJHZXJtYW55IiB9LAogIHsgMCwgMCwgICAgMjkxMTQsICAgICAxNzc3LCAi SXJlbGFuZCIgfSwKICB7IDAsIDAsICAgICAgMTA4LCAgICAgICAgMSwgIkxpZWNodGVuc3RlaW4i IH0sCiAgeyAwLCAwLCAgICAgNjc0NSwgICAgICAxMjQsICJMdXhlbWJvdXJnIiB9LAogIHsgMCwg MCwgICAgNzE5NzEsICAgICA2MjI2LCAiTmV0aGVybGFuZHMiIH0sCiAgeyAwLCAwLCAgICA0MjY1 NSwgICAgIDE3MjYsICJTd2l0emVybGFuZCIgfSwKICB7IDAsIDAsICAgMzM4Njc2LCAgICA0MTUx NCwgIlVuaXRlZCBLaW5nZG9tIiB9LAogIHsgMCwgMCwgICAgIDExOTksICAgICAgIDUzLCAiQW5k b3JyYSIgfSwKICB7IDAsIDAsICAgICAgMjk1LCAgICAgICAgMCwgIkdpYnJhbHRhciIgfSwKICB7 IDAsIDAsICAgMjcxNTE1LCAgICAzNTQ5NywgIkl0YWx5IiB9LAogIHsgMCwgMCwgICAgIDE5MzEs ICAgICAgIDEzLCAiTWFsdGEiIH0sCiAgeyAwLCAwLCAgICAgIDE0MiwgICAgICAgIDEsICJNb25h Y28iIH0sCiAgeyAwLCAwLCAgICA1ODYzMywgICAgIDE4MjcsICJQb3J0dWdhbCIgfSwKICB7IDAs IDAsICAgICAgNzM1LCAgICAgICA0MiwgIlNhbiBNYXJpbm8iIH0sCiAgeyAwLCAwLCAgIDQ4ODUx MywgICAgMjkyMzQsICJTcGFpbiIgfSwKICB7IDAsIDAsICAgICAgIDEyLCAgICAgICAgMCwgIlZh dGljYW4gQ2l0eSIgfSwKICB7IDAsIDAsICAgICA5NzI4LCAgICAgIDI5NiwgIkFsYmFuaWEiIH0s CiAgeyAwLCAwLCAgICAyMDUxNywgICAgICA2MjcsICJCb3NuaWEgYW5kIEhlcnplZ292aW5hIiB9 LAogIHsgMCwgMCwgICAgMTY0NTQsICAgICAgNjQyLCAiQnVsZ2FyaWEiIH0sCiAgeyAwLCAwLCAg ICAxMDcyNSwgICAgICAxOTEsICJDcm9hdGlhIiB9LAogIHsgMCwgMCwgICAgMTA3NTcsICAgICAg MjczLCAiR3JlZWNlIiB9LAogIHsgMCwgMCwgICAgMTM1NTgsICAgICAgNTIzLCAiS29zb3ZvIiB9 LAogIHsgMCwgMCwgICAgIDUwMTksICAgICAgMTA0LCAiTW9udGVuZWdybyIgfSwKICB7IDAsIDAs ICAgIDE0NDU1LCAgICAgIDYwNCwgIk5vcnRoIE1hY2Vkb25pYSIgfSwKICB7IDAsIDAsICAgIDg5 ODkxLCAgICAgMzcyMSwgIlJvbWFuaWEiIH0sCiAgeyAwLCAwLCAgICAzMTU4MSwgICAgICA3MTYs ICJTZXJiaWEiIH0sCiAgeyAwLCAwLCAgICAgMjk4OCwgICAgICAxMjgsICJTbG92ZW5pYSIgfSwK ICB7IDAsIDAsICAgIDI1NzczLCAgICAgIDQyNSwgIkN6ZWNoIFJlcHVibGljIiB9LAogIHsgMCwg MCwgICAgIDY2MjIsICAgICAgNjE5LCAiSHVuZ2FyeSIgfSwKICB7IDAsIDAsICAgIDY4NTE3LCAg ICAgMjA3OCwgIlBvbGFuZCIgfSwKICB7IDAsIDAsICAgICA0MDQyLCAgICAgICAzMywgIlNsb3Zh a2lhIiB9LAogIHsgMCwgMCwgICAgMzY3MzIsICAgICAgNTM4LCAiQXplcmJhaWphbiIgfSwKICB7 IDAsIDAsICAgIDcyMTQxLCAgICAgIDY5MSwgIkJlbGFydXMiIH0sCiAgeyAwLCAwLCAgICAgMjQx NSwgICAgICAgNjQsICJFc3RvbmlhIiB9LAogIHsgMCwgMCwgICAgIDE1NDgsICAgICAgIDE5LCAi R2VvcmdpYSBjb3VudHJ5IiB9LAogIHsgMCwgMCwgICAgIDE0MDYsICAgICAgIDM0LCAiTGF0dmlh IiB9LAogIHsgMCwgMCwgICAgIDI5NTgsICAgICAgIDg2LCAiTGl0aHVhbmlhIiB9LAogIHsgMCwg MCwgICAgMzc3NDAsICAgICAxMDI0LCAiTW9sZG92YSIgfSwKICB7IDAsIDAsICAxMDA1MDAwLCAg ICAxNzQxNCwgIlJ1c3NpYSIgfSwKICB7IDAsIDAsICAgMTI1Nzg5LCAgICAgMjY1NiwgIlVrcmFp bmUiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJBbGFuZCBJcyIgfSwKICB7IDAs IDAsICAgICAgNDExLCAgICAgICAgMCwgIkZhcm9lIElzbGFuZHMiIH0sCiAgeyAwLCAwLCAgICAg IDI1MiwgICAgICAgMTMsICJHdWVybnNleSIgfSwKICB7IDAsIDAsICAgICAgMzM2LCAgICAgICAy NCwgIklzbGUgb2YgTWFuIiB9LAogIHsgMCwgMCwgICAgICAzODEsICAgICAgIDMyLCAiSmVyc2V5 IiB9LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiU3ZhbGJhcmQgYW5kIEphbiBNYXll biIgfSwKICB7IDAsIDAsICAgICAxNDk1LCAgICAgICAyMSwgIkN5cHJ1cyIgfSwKICB7IDAsIDAs ICAgMTIyNTM5LCAgICAgIDk2OSwgIklzcmFlbCIgfSwKICB7IDAsIDAsICAgIDE4Mzc1LCAgICAg IDE3NywgIkxlYmFub24iIH0sCiAgeyAwLCAwLCAgICAzMTMzMywgICAgICAxODQsICJQYWxlc3Rp bmUiIH0sCiAgeyAwLCAwLCAgICAgMjg5OCwgICAgICAxMjAsICJTeXJpYSIgfSwKICB7IDAsIDAs ICAgMjczMzAxLCAgICAgNjQ2MiwgIlR1cmtleSIgfSwKICB7IDAsIDAsICAgIDUyNDQwLCAgICAg IDE5MCwgIkJhaHJhaW4iIH0sCiAgeyAwLCAwLCAgICA4NTkyOCwgICAgICA2ODksICJPbWFuIiB9 LAogIHsgMCwgMCwgICAxMTkyMDYsICAgICAgMTk5LCAiUWF0YXIiIH0sCiAgeyAwLCAwLCAgIDMx NzQ4NiwgICAgIDM5NTYsICJTYXVkaSBBcmFiaWEiIH0sCiAgeyAwLCAwLCAgICA3MTU0MCwgICAg ICAzODcsICJVbml0ZWQgQXJhYiBFbWlyYXRlcyIgfSwKICB7IDAsIDAsICAgICAxOTc2LCAgICAg IDU3MSwgIlllbWVuIiB9LAogIHsgMCwgMCwgICAgMzgyNDMsICAgICAxNDA5LCAiQWZnaGFuaXN0 YW4iIH0sCiAgeyAwLCAwLCAgIDM3ODc1MiwgICAgMjE3OTcsICJJcmFuIiB9LAogIHsgMCwgMCwg ICAyNDIyODQsICAgICA3MjAxLCAiSXJhcSIgfSwKICB7IDAsIDAsICAgICAyMTYxLCAgICAgICAx NSwgIkpvcmRhbiIgfSwKICB7IDAsIDAsICAgIDg2NDc4LCAgICAgIDUzNSwgIkt1d2FpdCIgfSwK ICB7IDAsIDAsICAgMTI5OTIzLCAgICAgOTEzNSwgIkNhbmFkYSIgfSwKICB7IDAsIDAsICAgNjEw OTU3LCAgICA2NTgxNiwgIk1leGljbyIgfSwKICB7IDAsIDAsICA2MTE0NDA2LCAgIDE4NTc0NCwg IlVuaXRlZCBTdGF0ZXMiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJTYWludCBQ aWVycmUgYW5kIE1pcXVlbG9uIiB9LAogIHsgMCwgMCwgICAgMzQwMDMsICAgICAgNDQzLCAiUHVl cnRvIFJpY28iIH0sCiAgeyAwLCAwLCAgICAgMTE0NCwgICAgICAgMTUsICJVUyBWaXJnaW4gSXNs YW5kcyIgfSwKICB7IDAsIDAsICAgICAxNDQ3LCAgICAgICAxMywgIkd1YW0iIH0sCiAgeyAwLCAw LCAgICAyNTkyMywgICAgICA2NjMsICJBdXN0cmFsaWEiIH0sCiAgeyAwLCAwLCAgICAgICAyOSwg ICAgICAgIDIsICJGaWppIiB9LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiS2lyaWJh dGkiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJNYXJzaGFsbCBJcyIgfSwKICB7 IDAsIDAsICAgICAgICAwLCAgICAgICAgMCwgIk1pY3JvbmVzaWEiIH0sCiAgeyAwLCAwLCAgICAg ICAgMCwgICAgICAgIDAsICJOYXVydSIgfSwKICB7IDAsIDAsICAgICAxNDA4LCAgICAgICAyMiwg Ik5ldyBaZWFsYW5kIiB9LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiUGFsYXUiIH0s CiAgeyAwLCAwLCAgICAgIDQ3MSwgICAgICAgIDUsICJQYXB1YSBOZXcgR3VpbmVhIiB9LAogIHsg MCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiU2Ftb2EiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwg ICAgICAgIDAsICJTb2xvbW9uIElzIiB9LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAi VG9uZ2EiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJUdXZhbHUiIH0sCiAgeyAw LCAwLCAgICAgICAgMCwgICAgICAgIDAsICJWYW51YXR1IiB9LAogIHsgMCwgMCwgICAgICAxNzIs ICAgICAgICA5LCAiQmVybXVkYSIgfSwKICB7IDAsIDAsICAgICAgICAwLCAgICAgICAgMCwgIkJv dXZldCBJcyIgfSwKICB7IDAsIDAsICAgICAgIDEzLCAgICAgICAgMCwgIkZhbGtsYW5kIElzbGFu ZHMiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAsICJTb3V0aCBHZW9yZ2lhIGFuZCBT YW5kd2ljaCBJcyIgfSwKICB7IDAsIDAsICAgICAgICAwLCAgICAgICAgMCwgIkNvb2sgSXMiIH0s CiAgeyAwLCAwLCAgICAgIDU5NiwgICAgICAgIDAsICJGcmVuY2ggUG9seW5lc2lhIiB9LAogIHsg MCwgMCwgICAgICAgMjMsICAgICAgICAwLCAiTmV3IENhbGVkb25pYSIgfSwKICB7IDAsIDAsICAg ICAgICAwLCAgICAgICAgMCwgIk5pdWUiIH0sCiAgeyAwLCAwLCAgICAgICAgMCwgICAgICAgIDAs ICJOb3Jmb2xrIElzIiB9LAogIHsgMCwgMCwgICAgICAgNTcsICAgICAgICAyLCAiTm9ydGhlcm4g TWFyaWFuYSBJcyIgfSwKICB7IDAsIDAsICAgICAgICAwLCAgICAgICAgMCwgIlBpdGNhaXJuIiB9 LAogIHsgMCwgMCwgICAgICAgIDAsICAgICAgICAwLCAiVG9rZWxhdSIgfSwKICB7IDAsIDAsICAg ICAgICAwLCAgICAgICAgMCwgIldhbGxpcyBhbmQgRnV0dW5hIiB9LAogIHsgMCwgMCwgICAgICAg IDAsICAgICAgICAwLCAiQW50YXJjdGljYSIgfSwKICB7IDAsIDAsICAgICAxMTAxLCAgICAgICAx MywgIkJlbGl6ZSIgfSwKICB7IDAsIDAsICAgIDQzMzA1LCAgICAgIDQ1MywgIkNvc3RhIFJpY2Ei IH0sCiAgeyAwLCAwLCAgICAyNTkwNCwgICAgICA3MzksICJFbCBTYWx2YWRvciIgfSwKICB7IDAs IDAsICAgIDc1NjY0LCAgICAgMjc5MCwgIkd1YXRlbWFsYSIgfSwKICB7IDAsIDAsICAgIDYyNTI2 LCAgICAgMTkyNCwgIkhvbmR1cmFzIiB9LAogIHsgMCwgMCwgICAgIDQ0OTQsICAgICAgMTM3LCAi TmljYXJhZ3VhIiB9LAogIHsgMCwgMCwgICAgOTQwODQsICAgICAyMDMwLCAiUGFuYW1hIiB9LAog IHsgMCwgMCwgICAxMTc5MjgsICAgICA1MjAzLCAiQm9saXZpYSIgfSwKICB7IDAsIDAsICAzOTk3 ODY1LCAgIDEyMzc4MCwgIkJyYXppbCIgfSwKICB7IDAsIDAsICAgMTE1NDU3LCAgICAgNjYxOSwg IkVjdWFkb3IiIH0sCiAgeyAwLCAwLCAgIDY2MzQzNywgICAgMjkyNTksICJQZXJ1IiB9LAogIHsg MCwgMCwgICA2MzMzMzksICAgIDIwMzQ4LCAiQ29sb21iaWEiIH0sCiAgeyAwLCAwLCAgICAgICAg MCwgICAgICAgIDAsICJGcmVuY2ggR3VpYW5hIiB9LAogIHsgMCwgMCwgICAgIDEzODIsICAgICAg IDQxLCAiR3V5YW5hIiB9LAogIHsgMCwgMCwgICAgIDQxNDksICAgICAgIDcyLCAiU3VyaW5hbWUi IH0sCiAgeyAwLCAwLCAgICA0ODg4MywgICAgICAzOTgsICJWZW5lenVlbGEiIH0sCiAgeyAwLCAw LCAgIDQyODIyNiwgICAgIDg5NzEsICJBcmdlbnRpbmEiIH0sCiAgeyAwLCAwLCAgIDQxNDczOSwg ICAgMTEzNDQsICJDaGlsZSIgfSwKICB7IDAsIDAsICAgIDE5MTM4LCAgICAgIDM1OCwgIlBhcmFn dWF5IiB9LAogIHsgMCwgMCwgICAgIDE2MjYsICAgICAgIDQ0LCAiVXJ1Z3VheSIgfSwKICB7IDAs IDAsICAgICAgNjk2LCAgICAgICAgNywgIkludGVybmF0aW9uYWwiIH0sCiAgeyAwLCAwLCAgICAg ICAgMCwgICAgICAgIDAsICJPdGhlciBXb3JsZCIgfSwKICB7IDAsIDAsICAgICAgICAwLCAgICAg ICAgMCwJMAl9Cn07Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmludAltYWluIChpbnQgYXJnYywgY2hhciAq YXJndltdKQp7CmludAlpOwpjMTlTbwlDYWxsOwpjaGFyCSpUeXBlOwoKZm9yIChpID0gMDsgTmFt ZVtpXS5uYSAmJiAqTmFtZVtpXS5uYTsgaSsrKSBOYW1lW2ldLml4ID0gaTsKLyogcHJpbnRmICgi JTAzZCAlOGQgJThkICVzXG4iLCBpLCBOYW1lW2ldLmNvLCBOYW1lW2ldLmRlLCBOYW1lW2ldLm5h KTsKKi8KCW5fTmEgPSBpOwoKT3B0aW9ucyAoYXJnYywgYXJndik7CQkJLyogcGFyc2UgY29tbWFu ZCBsaW5lIG9wdGlvbnMJKi8KCQlDYWxsID0gZHBjc29ydCwJVHlwZSA9ICJkcGNzb3J0IjsKaWYg KCF4cXMpCXhxcyA9ICJxc29ydCI7Cgp4c29ydCAoJk5hbWVbMF0sIG5fTmEsIHNpemVvZihzdHJ1 Y3QgTkFNRSksIGNvbnNvcnQsICJjb25zb3J0IiwgInFzb3J0IiwgMCwgMCk7CS8qCVNob3cgKG5f TmEpOwkqLwp4c29ydCAoJk5hbWVbMF0sIG5fTmEsIHNpemVvZihzdHJ1Y3QgTkFNRSksIENhbGws IFR5cGUsIHhxcywgMCwgc19kKTsJCQlTaG93IChuX05hKTsKaWYgKCF2cmIpCnsKeHNvcnQgKCZO YW1lWzBdLCBuX05hLCBzaXplb2Yoc3RydWN0IE5BTUUpLCBDYWxsLCBUeXBlLCB4cXMsIDEsIHNf ZCk7CQkvKglTaG93IChuX05hKTsJKi8KeHNvcnQgKCZOYW1lWzBdLCBuX05hLCBzaXplb2Yoc3Ry dWN0IE5BTUUpLCBDYWxsLCBUeXBlLCB4cXMsIDAsIHNfZCk7CQkJU2hvdyAobl9OYSk7Cn0KZXhp dCAoMCk7Cn0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZAlPcHRpb25zIChpbnQgYXJnYywgY2hhciAq YXJndltdKQp7CmludAlpLAljLAljbzsKY2hhcgkqcHRyOwoKI2RlZmluZQlVQV9PUFRTCSJ6cmRz YzpxOnZoIgoKc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3Qgb3B0c1tdID0KewogIHsJInplcm8i LAkJbm9fYXJndW1lbnQsCTAsCSd6Jwl9LAogIHsJInJlbW92ZSIsCW5vX2FyZ3VtZW50LAkwLAkn cicJfSwKICB7CSJkaXZpZGUiLAlub19hcmd1bWVudCwJMCwJJ2QnCX0sCiAgewkic3RydWN0IiwJ bm9fYXJndW1lbnQsCTAsCSdzJwl9LAogIHsJImNvbmZpcm0iLHJlcXVpcmVkX2FyZ3VtZW50LAkw LAknYycJfSwKICB7CSJxc29ydCIsICByZXF1aXJlZF9hcmd1bWVudCwJMCwJJ3EnCX0sCiAgewki dmVyYm9zZSIsCW5vX2FyZ3VtZW50LAkwLAkndicJfSwKICB7CSJoZWxwIiwJCW5vX2FyZ3VtZW50 LAkwLAknaCcJfSwKICB7CTAsCQkJMCwJMCwJMAl9Cn07Cgp3aGlsZSAoKGMgPSBnZXRvcHRfbG9u ZyAoYXJnYywgYXJndiwgVUFfT1BUUywgb3B0cywgKGludCAqKSAwKSkgIT0gRU9GKQp7CXN3aXRj aCAoYykKCXsKCWNhc2UgJ3onOgl6cm8gPSAxOwkJCQlicmVhazsKCWNhc2UgJ3InOglyaXMgPSAx OwkJCQlicmVhazsKCWNhc2UgJ2QnOglzX2QgPSAxOyAJCQkJYnJlYWs7CgljYXNlICdzJzoJc19k ID0gMDsgCQkJCWJyZWFrOwoJY2FzZSAnYyc6IGlmICgxID09IHNzY2FuZiAob3B0YXJnLCAiJWQi LCAmY28pKQoJCQljbmYgPSBjbzsgCQkJCWJyZWFrOwoJY2FzZSAncSc6CXhxcyA9IG9wdGFyZzsJ CQkJYnJlYWs7CgljYXNlICd2JzoJdnJiID0gMTsJCQkJYnJlYWs7CglkZWZhdWx0OgoJY2FzZSAn aCc6CgkgIGZvciAoaSA9IDA7IG9wdHNbaV0ubmFtZTsgaSsrKQoJCWZwcmludGYgKHN0ZGVyciwg IiAtJWMgfCAtLSUtNi42cyAlc1xuIiwgb3B0c1tpXS52YWwsIG9wdHNbaV0ubmFtZSwgKG9wdHNb aV0uaGFzX2FyZyA/ICJ2YWx1ZSIgOiAiIikpOwoJCQkJCQkJCWV4aXQoMik7Cgl9Cn0KfQovKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwp2b2lkCVNob3cgKGludCBuKQp7CmludAlpOwpwcmludGYgKCIjICBjb25m aXJtZWQgZGVhdGhzIGRwYyAgICAgIGxvY2F0aW9uOlxuIik7CmZvciAoaT0wOyBpPG47IGkrKykK ewogIGlmIChjbmYgPD0gTmFtZVtpXS5jbykJCQkKCXByaW50ZiAoIiUwM2QgJThkICU2ZCAlOC40 ZiAlc1xuIiwKCQlOYW1lW2ldLml4LCBOYW1lW2ldLmNvLCBOYW1lW2ldLmRlLCBOYW1lW2ldLmRw YywgTmFtZVtpXS5uYSk7Cn0KfQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkCXhzb3J0ICh2b2lkICpi YXNlLCBzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplLCBpbnQgKCpjb21wYXIpKGNvbnN0IHZvaWQg KiwgY29uc3Qgdm9pZCAqKSwKCQljaGFyICp0eXBlLCBjaGFyICp3aGF0LCBpbnQgb3JkLCBpbnQg ZGl2KQp7CmludAlpLCBsOwoKZm9yIChpID0gMDsgaSA8IG5fTmE7IGkgKyspCnsKICBpZiAoTmFt ZVtpXS5jbyB8fCB6cm8pCglOYW1lW2ldLmRwYyA9IChmbG9hdCkJTmFtZVtpXS5kZSAvIChmbG9h dCkgTmFtZVtpXS5jbyAgKiAxMDAuOwogIGVsc2UJTmFtZVtpXS5kcGMgPSAwOwp9CglxcS0+diA9 IDE7CglxcS0+byA9IG9yZDsKCXFxLT5kID0gZGl2OwoJbCA9IHN0cmxlbih3aGF0KTsKZm9yIChp ID0gMDsgU3RbaV0ud2hhdCAmJiBzdHJuY21wKHdoYXQsIFN0W2ldLndoYXQsIGwpOyBpKyspIDsK CmlmIChTdFtpXS53aGF0KQoJU19xID0gaTsKZWxzZQp7CVNfcSA9IDA7CWZwcmludGYgKHN0ZGVy ciwgIiMgQmFkOiAlc1xuIiwgd2hhdCk7CWV4aXQgKDIpOwp9CglxcS0+dHlwZSA9IFN0W1NfcV0u d2hhdDsKcHJpbnRmICgiIyAlcyAlcyAlcyAlcyVzJXMlcyAtYyAlZFxuIiwKCXR5cGUsIHFxLT50 eXBlLCAocXEtPmQgPyAiZGl2aWRlIiA6ICJzdHJ1Y3QiKSwgKHFxLT5vID8gImFzY2VuZGluZyIg OiAiZGVzY2VuZGluZyIpLAoJKHpybyA/ICIgLXoiIDogIiIpLCAocmlzID8gIiAtciIgOiAiIiks ICh2cmIgPyAiIC12IiA6ICIiKSwgY25mKTsKc3dpdGNoIChTdFtTX3FdLnEpCnsKY2FzZSBTX3Fz b3J0Oglxc29ydCAoYmFzZSwgbm1lbWIsIHNpemUsIGNvbXBhcik7CWJyZWFrOwpjYXNlIFNfcWN5 Z3c6CXFjeWd3IChiYXNlLCBubWVtYiwgc2l6ZSwgY29tcGFyKTsJYnJlYWs7CmRlZmF1bHQ6CWFi ZW5kICgiSHVoPyAlZCIsIFN0W1NfcV0ucSk7Cn0KcmV0dXJuOwp9Ci8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CmludAljb25zb3J0IChzdHJ1Y3QgTkFNRSAqbjEsIHN0cnVjdCBOQU1FICpuMikJLyogY29uZmlt ZWQJKi8KewppbnQJYzEsIGMyOwppZiAocXEtPnYpCXFxLT52ID0gMCwJcHJpbnRmICgiIyBjb25z b3J0OiVkOlxuIiwgcXEtPm8pOwoJYzEgPSBuMS0+Y287CgljMiA9IG4yLT5jbzsKaWYgKHFxLT5v KQlyZXR1cm4gKGMxLWMyKTsJCWVsc2UJcmV0dXJuIChjMi1jMSk7Cn0KLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KaW50CWRwY3NvcnQgKHN0cnVjdCBOQU1FICpuMSwgc3RydWN0IE5BTUUgKm4yKQkvKiBkZWFk L2NvbmZpcm0JKi8KewppbnQJYzEgPSBuMS0+Y28sCWQxID0gbjEtPmRlOwppbnQJYzIgPSBuMi0+ Y28sCWQyID0gbjItPmRlOwpmbG9hdAlmMSwgZjIsIGZmOwppbnQJaWk7CmlmIChxcS0+dikJcXEt PnYgPSAwLAlwcmludGYgKCIjIGRwY3NvcnQ6JWRcbiIsIHFxLT5vKTsKaWYgKHFxLT5kKQkJCQkv KiB0aGlzIGZhaWxzIHcvY3lnd2luJ3MgcXNvcnQJKi8KewlmMSA9IDEwMDAwLiogKGZsb2F0KSBk MSAvIChmbG9hdCkgYzE7CglmMiA9IDEwMDAwLiogKGZsb2F0KSBkMiAvIChmbG9hdCkgYzI7Cn0g ZWxzZQkJCQkJLyogcHJlLWNhbGN1bGF0ZWQgaW50byBzdHJ1Y3QJKi8KewlmMSA9IG4xLT5kcGMg KiAxMDAwMC47CQkvKiBpZiAteiBzdGlsbCBmYWlscyBpbiBzdHJ1Y3QJKi8KCWYyID0gbjItPmRw YyAqIDEwMDAwLjsKfQppZiAocXEtPm8pCWZmID0gZjEgLSBmMjsJZWxzZQlmZiA9IGYyIC0gZjE7 CWlpID0gKGludCkgZmY7CmlmICh2cmIgJiYgKCFjMSB8fCAhYzIpKQkJCQkvKiB2ZXJib3NpdHkJ Ki8KewoJaW50CWl4OwoJbWVtY3B5ICgmZDEsICZmMSwgNCk7CgltZW1jcHkgKCZkMiwgJmYyLCA0 KTsKCW1lbWNweSAoJml4LCAmZmYsIDQpOwoJcHJpbnRmICgiJXM6YzE9JThkIGMyPSU4ZCBmMT0w eCUwOHggZjI9MHglMDh4IGZmPSU0LjFmIDB4JTA4eCBpbnQ9JThkIDB4JTA4eDolczolc1xuIiwK CQkoaWkgPyAoMCA+IGlpID8gIi0gIiA6ICIrICIpIDogIjAgIiksIGMxLCBjMiwgZDEsIGQyLCBm ZiwgaXgsIGlpLCBpaSwgbjEtPm5hLCBuMi0+bmEpOwp9CnJldHVybiAoaWkpOwp9Ci8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCmludAlhYmVuZCAoY2hhciAqZm9ybWF0LCB2b2lkICphcmcxKQp7CmZwcmludGYg KHN0ZGVyciwgZm9ybWF0LCBhcmcxKTsJZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsJZXhpdCAoMSk7 Cn0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLyoKRlVOQ1RJT04KPDxxc29ydD4+LS0tc29ydCBhbiBhcnJh eQoKSU5ERVgKCXFzb3J0CgpTWU5PUFNJUwoJI2luY2x1ZGUgPHN0ZGxpYi5oPgoJdm9pZCBxc29y dCh2b2lkICo8W2Jhc2VdPiwgc2l6ZV90IDxbbm1lbWJdPiwgc2l6ZV90IDxbc2l6ZV0+LAoJCSAg IGludCAoKjxbY29tcGFyXT4pKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSApOwoKREVTQ1JJ UFRJT04KPDxxc29ydD4+IHNvcnRzIGFuIGFycmF5IChiZWdpbm5pbmcgYXQgPFtiYXNlXT4pIG9m IDxbbm1lbWJdPiBvYmplY3RzLgo8W3NpemVdPiBkZXNjcmliZXMgdGhlIHNpemUgb2YgZWFjaCBl bGVtZW50IG9mIHRoZSBhcnJheS4KCllvdSBtdXN0IHN1cHBseSBhIHBvaW50ZXIgdG8gYSBjb21w YXJpc29uIGZ1bmN0aW9uLCB1c2luZyB0aGUgYXJndW1lbnQKc2hvd24gYXMgPFtjb21wYXJdPi4g IChUaGlzIHBlcm1pdHMgc29ydGluZyBvYmplY3RzIG9mIHVua25vd24KcHJvcGVydGllcy4pICBE ZWZpbmUgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gdG8gYWNjZXB0IHR3byBhcmd1bWVudHMsCmVh Y2ggYSBwb2ludGVyIHRvIGFuIGVsZW1lbnQgb2YgdGhlIGFycmF5IHN0YXJ0aW5nIGF0IDxbYmFz ZV0+LiAgVGhlCnJlc3VsdCBvZiA8PCgqPFtjb21wYXJdPik+PiBtdXN0IGJlIG5lZ2F0aXZlIGlm IHRoZSBmaXJzdCBhcmd1bWVudCBpcwpsZXNzIHRoYW4gdGhlIHNlY29uZCwgemVybyBpZiB0aGUg dHdvIGFyZ3VtZW50cyBtYXRjaCwgYW5kIHBvc2l0aXZlIGlmCnRoZSBmaXJzdCBhcmd1bWVudCBp cyBncmVhdGVyIHRoYW4gdGhlIHNlY29uZCAod2hlcmUgYGBsZXNzIHRoYW4nJyBhbmQKYGBncmVh dGVyIHRoYW4nJyByZWZlciB0byB3aGF0ZXZlciBhcmJpdHJhcnkgb3JkZXJpbmcgaXMgYXBwcm9w cmlhdGUpLgoKVGhlIGFycmF5IGlzIHNvcnRlZCBpbiBwbGFjZTsgdGhhdCBpcywgd2hlbiA8PHFz b3J0Pj4gcmV0dXJucywgdGhlCmFycmF5IGVsZW1lbnRzIGJlZ2lubmluZyBhdCA8W2Jhc2VdPiBo YXZlIGJlZW4gcmVvcmRlcmVkLgoKUkVUVVJOUwo8PHFzb3J0Pj4gZG9lcyBub3QgcmV0dXJuIGEg cmVzdWx0LgoKUE9SVEFCSUxJVFkKPDxxc29ydD4+IGlzIHJlcXVpcmVkIGJ5IEFOU0kgKHdpdGhv dXQgc3BlY2lmeWluZyB0aGUgc29ydGluZyBhbGdvcml0aG0pLgoqLwoKLyotCiAqIENvcHlyaWdo dCAoYykgMTk5MiwgMTk5MwogKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0 aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKICogICAgbWF5 IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlCiAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05U UklCVVRPUlMgYGBBUyBJUycnIEFORAogKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UKICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBD T05UUklCVVRPUlMgQkUgTElBQkxFCiAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCiAqIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTCiAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQogKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAogKiBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZCiAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YKICogU1VDSCBEQU1BR0UuCiAqLwojaWZkZWYJT1NfV0lOCiNp bmNsdWRlIDxfYW5zaS5oPgojZWxzZQojZGVmaW5lCV9fdW51c2VkCiNlbmRpZgojaW5jbHVkZSA8 c3lzL2NkZWZzLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNpZm5kZWYgX19HTlVDX18KI2RlZmlu ZSBpbmxpbmUKI2VuZGlmCgojaWYgZGVmaW5lZChJX0FNX1FTT1JUX1IpCnR5cGVkZWYgaW50CQkg Y21wX3Qodm9pZCAqLCBjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CiNlbGlmIGRlZmluZWQo SV9BTV9HTlVfUVNPUlRfUikKdHlwZWRlZiBpbnQJCSBjbXBfdChjb25zdCB2b2lkICosIGNvbnN0 IHZvaWQgKiwgdm9pZCAqKTsKI2Vsc2UKdHlwZWRlZiBpbnQJCSBjbXBfdChjb25zdCB2b2lkICos IGNvbnN0IHZvaWQgKik7CiNlbmRpZgpzdGF0aWMgaW5saW5lIGNoYXIJKm1lZDMgKGNoYXIgKiwg Y2hhciAqLCBjaGFyICosIGNtcF90ICosIHZvaWQgKik7CnN0YXRpYyBpbmxpbmUgdm9pZAkgc3dh cGZ1bmMgKGNoYXIgKiwgY2hhciAqLCBpbnQsIGludCk7CgojZGVmaW5lIG1pbihhLCBiKQkoYSkg PCAoYikgPyBhIDogYgoKLyoKICogUXNvcnQgcm91dGluZSBmcm9tIEJlbnRsZXkgJiBNY0lscm95 J3MgIkVuZ2luZWVyaW5nIGEgU29ydCBGdW5jdGlvbiIuCiAqLwojZGVmaW5lIHN3YXBjb2RlKFRZ UEUsIHBhcm1pLCBwYXJtaiwgbikgeyAJCVwKCWxvbmcgaSA9IChuKSAvIHNpemVvZiAoVFlQRSk7 IAkJCVwKCVRZUEUgKnBpID0gKFRZUEUgKikgKHBhcm1pKTsgCQlcCglUWVBFICpwaiA9IChUWVBF ICopIChwYXJtaik7IAkJXAoJZG8geyAJCQkJCQlcCgkJVFlQRQl0ID0gKnBpOwkJXAoJCSpwaSsr ID0gKnBqOwkJCQlcCgkJKnBqKysgPSB0OwkJCQlcCiAgICAgICAgfSB3aGlsZSAoLS1pID4gMCk7 CQkJCVwKfQoKI2RlZmluZSBTV0FQSU5JVChhLCBlcykgc3dhcHR5cGUgPSAoKGNoYXIgKilhIC0g KGNoYXIgKikwKSAlIHNpemVvZihsb25nKSB8fCBcCgllcyAlIHNpemVvZihsb25nKSA/IDIgOiBl cyA9PSBzaXplb2YobG9uZyk/IDAgOiAxOwoKc3RhdGljIGlubGluZSB2b2lkCnN3YXBmdW5jIChj aGFyICphLAoJY2hhciAqYiwKCWludCBuLAoJaW50IHN3YXB0eXBlKQp7CglpZihzd2FwdHlwZSA8 PSAxKQoJCXN3YXBjb2RlKGxvbmcsIGEsIGIsIG4pCgllbHNlCgkJc3dhcGNvZGUoY2hhciwgYSwg YiwgbikKfQoKI2RlZmluZSBzd2FwKGEsIGIpCQkJCQlcCglpZiAoc3dhcHR5cGUgPT0gMCkgewkJ CQlcCgkJbG9uZyB0ID0gKihsb25nICopKGEpOwkJCVwKCQkqKGxvbmcgKikoYSkgPSAqKGxvbmcg KikoYik7CQlcCgkJKihsb25nICopKGIpID0gdDsJCQlcCgl9IGVsc2UJCQkJCQlcCgkJc3dhcGZ1 bmMoYSwgYiwgZXMsIHN3YXB0eXBlKQoKI2RlZmluZSB2ZWNzd2FwKGEsIGIsIG4pIAlpZiAoKG4p ID4gMCkgc3dhcGZ1bmMoYSwgYiwgbiwgc3dhcHR5cGUpCgojaWYgZGVmaW5lZChJX0FNX1FTT1JU X1IpCiNkZWZpbmUJQ01QKHQsIHgsIHkpIChjbXAoKHQpLCAoeCksICh5KSkpCiNlbGlmIGRlZmlu ZWQoSV9BTV9HTlVfUVNPUlRfUikKI2RlZmluZQlDTVAodCwgeCwgeSkgKGNtcCgoeCksICh5KSwg KHQpKSkKI2Vsc2UKI2RlZmluZQlDTVAodCwgeCwgeSkgKGNtcCgoeCksICh5KSkpCiNlbmRpZgoK c3RhdGljIGlubGluZSBjaGFyICoKbWVkMyAoY2hhciAqYSwKCWNoYXIgKmIsCgljaGFyICpjLAoJ Y21wX3QgKmNtcCwKCXZvaWQgKnRodW5rCiNpZiAhZGVmaW5lZChJX0FNX1FTT1JUX1IpICYmICFk ZWZpbmVkKElfQU1fR05VX1FTT1JUX1IpCl9fdW51c2VkCiNlbmRpZgopCnsKCXJldHVybiBDTVAo dGh1bmssIGEsIGIpIDwgMCA/CgkgICAgICAgKENNUCh0aHVuaywgYiwgYykgPCAwID8gYiA6IChD TVAodGh1bmssIGEsIGMpIDwgMCA/IGMgOiBhICkpCiAgICAgICAgICAgICAgOihDTVAodGh1bmss IGIsIGMpID4gMCA/IGIgOiAoQ01QKHRodW5rLCBhLCBjKSA8IDAgPyBhIDogYyApKTsKfQoKLyoK ICogQ2xhc3NpY2FsIGZ1bmN0aW9uIGNhbGwgcmVjdXJzaW9uIHdhc3RlcyBhIGxvdCBvZiBzdGFj ayBzcGFjZS4gRWFjaAogKiByZWN1cnNpb24gbGV2ZWwgcmVxdWlyZXMgYSBmdWxsIHN0YWNrIGZy YW1lIGNvbXByaXNpbmcgYWxsIGxvY2FsIHZhcmlhYmxlcwogKiBhbmQgYWRkaXRpb25hbCBzcGFj ZSBhcyBkaWN0YXRlZCBieSB0aGUgcHJvY2Vzc29yIGNhbGxpbmcgY29udmVudGlvbi4KICoKICog VGhpcyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIHN0b3JlcyB0aGUgdmFyaWFibGVzIHRoYXQgYXJl IHVuaXF1ZSBmb3IgZWFjaAogKiByZWN1cnNpb24gbGV2ZWwgaW4gYSBwYXJhbWV0ZXIgc3RhY2sg YXJyYXksIGFuZCB1c2VzIGl0ZXJhdGlvbiB0byBlbXVsYXRlCiAqIHJlY3Vyc2lvbi4gRnVuY3Rp b24gY2FsbCByZWN1cnNpb24gaXMgbm90IHVzZWQgdW50aWwgdGhlIGFycmF5IGlzIGZ1bGwuCiAq CiAqIFRvIGVuc3VyZSB0aGUgc3RhY2sgY29uc3VtcHRpb24gaXNuJ3Qgd29yc2VuZWQgYnkgdGhp cyBkZXNpZ24sIHRoZSBzaXplIG9mCiAqIHRoZSBwYXJhbWV0ZXIgc3RhY2sgYXJyYXkgaXMgY2hv c2VuIHRvIGJlIHNpbWlsYXIgdG8gdGhlIHN0YWNrIGZyYW1lCiAqIGV4Y2x1ZGluZyB0aGUgYXJy YXkuIEVhY2ggZnVuY3Rpb24gY2FsbCByZWN1cnNpb24gbGV2ZWwgY2FuIGhhbmRsZSB0aGlzCiAq IG51bWJlciBvZiBpdGVyYXRpdmUgcmVjdXJzaW9uIGxldmVscy4KICovCiNkZWZpbmUgUEFSQU1F VEVSX1NUQUNLX0xFVkVMUyA4dQoKI2lmIGRlZmluZWQoSV9BTV9RU09SVF9SKQp2b2lkCl9fYnNk X3Fzb3J0X3IgKHZvaWQgKmEsCglzaXplX3QgbiwKCXNpemVfdCBlcywKCXZvaWQgKnRodW5rLAoJ Y21wX3QgKmNtcCkKI2VsaWYgZGVmaW5lZChJX0FNX0dOVV9RU09SVF9SKQp2b2lkCnFzb3J0X3Ig KHZvaWQgKmEsCglzaXplX3QgbiwKCXNpemVfdCBlcywKCWNtcF90ICpjbXAsCgl2b2lkICp0aHVu aykKI2Vsc2UKI2RlZmluZSB0aHVuayBOVUxMCnZvaWQKcWN5Z3cgKHZvaWQgKmEsCglzaXplX3Qg biwKCXNpemVfdCBlcywKCWNtcF90ICpjbXApCiNlbmRpZgp7CgljaGFyICpwYSwgKnBiLCAqcGMs ICpwZCwgKnBsLCAqcG0sICpwbjsKCXNpemVfdCBkLCByOwoJaW50IGNtcF9yZXN1bHQ7CglpbnQg c3dhcHR5cGUsIHN3YXBfY250OwoJc2l6ZV90IHJlY3Vyc2lvbl9sZXZlbCA9IDA7CglzdHJ1Y3Qg eyB2b2lkICphOyBzaXplX3QgbjsgfSBwYXJhbWV0ZXJfc3RhY2tbUEFSQU1FVEVSX1NUQUNLX0xF VkVMU107CgoJU1dBUElOSVQoYSwgZXMpOwpsb29wOglzd2FwX2NudCA9IDA7CglpZiAobiA8IDcp IHsKCQkvKiBTaG9ydCBhcnJheXMgYXJlIGluc2VydGlvbiBzb3J0ZWQuICovCgkJZm9yIChwbSA9 IChjaGFyICopIGEgKyBlczsgcG0gPCAoY2hhciAqKSBhICsgbiAqIGVzOyBwbSArPSBlcykKCQkJ Zm9yIChwbCA9IHBtOyBwbCA+IChjaGFyICopIGEgJiYgQ01QKHRodW5rLCBwbCAtIGVzLCBwbCkg PiAwOwoJCQkgICAgIHBsIC09IGVzKQoJCQkJc3dhcChwbCwgcGwgLSBlcyk7CgkJZ290byBwb3A7 Cgl9CgoJLyogU2VsZWN0IGEgcGl2b3QgZWxlbWVudCwgbW92ZSBpdCB0byB0aGUgbGVmdC4gKi8K CXBtID0gKGNoYXIgKikgYSArIChuIC8gMikgKiBlczsKCWlmIChuID4gNykgewoJCXBsID0gYTsK CQlwbiA9IChjaGFyICopIGEgKyAobiAtIDEpICogZXM7CgkJaWYgKG4gPiA0MCkgewoJCQlkID0g KG4gLyA4KSAqIGVzOwoJCQlwbCA9IG1lZDMocGwsIHBsICsgZCwgcGwgKyAyICogZCwgY21wLCB0 aHVuayk7CgkJCXBtID0gbWVkMyhwbSAtIGQsIHBtLCBwbSArIGQsIGNtcCwgdGh1bmspOwoJCQlw biA9IG1lZDMocG4gLSAyICogZCwgcG4gLSBkLCBwbiwgY21wLCB0aHVuayk7CgkJfQoJCXBtID0g bWVkMyhwbCwgcG0sIHBuLCBjbXAsIHRodW5rKTsKCX0KCXN3YXAoYSwgcG0pOwoKCS8qCgkgKiBT b3J0IHRoZSBhcnJheSByZWxhdGl2ZSB0aGUgcGl2b3QgaW4gZm91ciByYW5nZXMgYXMgZm9sbG93 czoKCSAqIHsgZWxlbXMgPT0gcGl2b3QsIGVsZW1zIDwgcGl2b3QsIGVsZW1zID4gcGl2b3QsIGVs ZW1zID09IHBpdm90IH0KCSAqLwoJcGEgPSBwYiA9IChjaGFyICopIGEgKyBlczsKCXBjID0gcGQg PSAoY2hhciAqKSBhICsgKG4gLSAxKSAqIGVzOwoJZm9yICg7OykgewoJCS8qIFNjYW4gbGVmdCB0 byByaWdodCBzdG9wcGluZyBhdCBmaXJzdCBlbGVtZW50ID4gcGl2b3QuICovCgkJd2hpbGUgKHBi IDw9IHBjICYmIChjbXBfcmVzdWx0ID0gQ01QKHRodW5rLCBwYiwgYSkpIDw9IDApIHsKCQkJLyog TW92ZSBlbGVtZW50cyA9PSBwaXZvdCB0byB0aGUgbGVmdCAodG8gcGEpICovCgkJCWlmIChjbXBf cmVzdWx0ID09IDApIHsKCQkJCXN3YXBfY250ID0gMTsKCQkJCXN3YXAocGEsIHBiKTsKCQkJCXBh ICs9IGVzOwoJCQl9CgkJCXBiICs9IGVzOwoJCX0KCQkvKiBTY2FuIHJpZ2h0IHRvIGxlZnQgc3Rv cHBpbmcgYXQgZmlyc3QgZWxlbWVudCA8IHBpdm90LiAqLwoJCXdoaWxlIChwYiA8PSBwYyAmJiAo Y21wX3Jlc3VsdCA9IENNUCh0aHVuaywgcGMsIGEpKSA+PSAwKSB7CgkJCS8qIE1vdmUgZWxlbWVu dHMgPT0gcGl2b3QgdG8gdGhlIHJpZ2h0ICh0byBwZCkgKi8KCQkJaWYgKGNtcF9yZXN1bHQgPT0g MCkgewoJCQkJc3dhcF9jbnQgPSAxOwoJCQkJc3dhcChwYywgcGQpOwoJCQkJcGQgLT0gZXM7CgkJ CX0KCQkJcGMgLT0gZXM7CgkJfQoJCWlmIChwYiA+IHBjKQoJCQlicmVhazsKCQkvKiBUaGUgc2Nh biBoYXMgZm91bmQgdHdvIGVsZW1lbnRzIHRvIHN3YXAgd2l0aCBlYWNoIG90aGVyLiAqLwoJCXN3 YXAocGIsIHBjKTsKCQlzd2FwX2NudCA9IDE7CgkJcGIgKz0gZXM7CgkJcGMgLT0gZXM7Cgl9Ci8q IGtjICovCmlmICghcmlzKQoJaWYgKHN3YXBfY250ID09IDApIHsgIC8qIFN3aXRjaCB0byBpbnNl cnRpb24gc29ydCAqLwoJCWZvciAocG0gPSAoY2hhciAqKSBhICsgZXM7IHBtIDwgKGNoYXIgKikg YSArIG4gKiBlczsgcG0gKz0gZXMpCgkJCWZvciAocGwgPSBwbTsgcGwgPiAoY2hhciAqKSBhICYm IENNUCh0aHVuaywgcGwgLSBlcywgcGwpID4gMDsKCQkJICAgICBwbCAtPSBlcykKCQkJCXN3YXAo cGwsIHBsIC0gZXMpOwoJCWdvdG8gcG9wOwoJfQovKiBrYyAqLwoJLyoKCSAqIFJlYXJyYW5nZSB0 aGUgYXJyYXkgaW4gdGhyZWUgcGFydHMgc29ydGVkIGxpa2UgdGhpczoKCSAqIHsgZWxlbWVudHMg PCBwaXZvdCwgZWxlbWVudHMgPT0gcGl2b3QsIGVsZW1lbnRzID4gcGl2b3QgfQoJICovCglwbiA9 IChjaGFyICopIGEgKyBuICogZXM7CglyID0gbWluKHBhIC0gKGNoYXIgKilhLCBwYiAtIHBhKTsK CXZlY3N3YXAoYSwgcGIgLSByLCByKTsKCXIgPSBtaW4ocGQgLSBwYywgcG4gLSBwZCAtIGVzKTsK CXZlY3N3YXAocGIsIHBuIC0gciwgcik7CglkID0gcGIgLSBwYTsgLyogZCA9IFNpemUgb2YgbGVm dCBwYXJ0LiAqLwoJciA9IHBkIC0gcGM7IC8qIHIgPSBTaXplIG9mIHJpZ2h0IHBhcnQuICovCglw biAtPSByOyAgICAgLyogcG4gPSBCYXNlIG9mIHJpZ2h0IHBhcnQuICovCgoJLyoKCSAqIENoZWNr IHdoaWNoIG9mIHRoZSBsZWZ0IGFuZCByaWdodCBwYXJ0cyBhcmUgbGFyZ2VyLgoJICogU2V0IChh LCBuKSAgdG8gKGJhc2UsIHNpemUpIG9mIHRoZSBsYXJnZXIgcGFydC4KCSAqIFNldCAocGEsIHIp IHRvIChiYXNlLCBzaXplKSBvZiB0aGUgc21hbGxlciBwYXJ0LgoJICovCglpZiAociA+IGQpIHsg LyogUmlnaHQgcGFydCBpcyB0aGUgbGFyZ2VyIHBhcnQgKi8KCQlwYSA9IGE7CgkJYSA9IHBuOwoJ CW4gPSByOwoJCXIgPSBkOwoJfQoJZWxzZSB7IC8qIExlZnQgcGFydCBpcyB0aGUgbGFyZ2VyIHBh cnQsIG9yIGJvdGggYXJlIGVxdWFsLiAqLwoJCXBhID0gcG47CgkJbiA9IGQ7Cgl9CgoJLyoKCSAq IFRoZSBsZWZ0IGFuZCByaWdodCBwYXJ0cyBlYWNoIG5lZWQgZnVydGhlciBzb3J0aW5nIGlmIHRo ZXkKCSAqIGNvbnRhaW4gdHdvIGVsZW1lbnRzIG9yIG1vcmUuIElmIGJvdGggbmVlZCBzb3J0aW5n IHdlIHVzZQoJICogcmVjdXJzaW9uIHRvIHNvcnQgdGhlIHNtYWxsZXIgcGFydCBhbmQgc2F2ZSB0 aGUgbGFyZ2VyIHBhcnQKCSAqIHRvIGJlIHNvcnRlZCBieSBpdGVyYXRpb24gYWZ0ZXIgdGhlIHJl Y3Vyc2lvbi4KCSAqIFVzaW5nIHJlY3Vyc2lvbiBvbmx5IGZvciB0aGUgc21hbGxlciBwYXJ0IGd1 YXJhbnRlZXMgYQoJICogcmVjdXJzaW9uIGRlcHRoIHRoYXQgaXMgYm91bmRlZCB0byBiZSBsZXNz IHRoYW4gKGxvZzIobikpLgoJICovCglpZiAociA+IGVzKSB7ICAvKiBTbWFsbGVyIHBhcnQgPiAx IGVsZW1lbnQuIEJvdGggcGFydHMgbmVlZCBzb3J0aW5nLiAqLwoJCWlmIChyZWN1cnNpb25fbGV2 ZWwgPCBQQVJBTUVURVJfU1RBQ0tfTEVWRUxTKSB7CgkJCS8qCgkJCSAqIFRoZSBzbWFsbGVyIHBh cnQgbmVlZHMgdG8gYmUgcmVjdXJzaXZlbHkgc29ydGVkCgkJCSAqIGJlZm9yZSB0aGUgbGFyZ2Vy IHBhcnQgaXMgc29ydGVkLiBUbyBhdm9pZCBmdW5jdGlvbgoJCQkgKiBjYWxsIHJlY3Vyc2lvbiB0 aGUgcGFyYW1ldGVycyBmb3IgdGhlIGxhcmdlciBwYXJ0CgkJCSAqIGFyZSBwdXNoZWQgb24gdGhl IHBhcmFtZXRlcl9zdGFjayBhcnJheS4gVGhlIHNtYWxsZXIKCQkJICogcGFydCBpcyBzb3J0ZWQg dXNpbmcgaXRlcmF0aW9uIGFuZCB0aGUgbGFyZ2VyIHBhcnQKCQkJICogd2lsbCBiZSBzb3J0ZWQg d2hlbiB0aGUgcGFyYW1ldGVyX3N0YWNrIGlzIHBvcHBlZAoJCQkgKiBhZnRlciB0aGUgc21hbGxl ciBwYXJ0IGhhcyBiZWVuIHNvcnRlZC4KCQkJICovCgkJCXBhcmFtZXRlcl9zdGFja1tyZWN1cnNp b25fbGV2ZWxdLmEgPSBhOwoJCQlwYXJhbWV0ZXJfc3RhY2tbcmVjdXJzaW9uX2xldmVsXS5uID0g biAvIGVzOwoJCQlyZWN1cnNpb25fbGV2ZWwrKzsKCQkJYSA9IHBhOwoJCQluID0gciAvIGVzOwoJ CQlnb3RvIGxvb3A7CgkJfQoJCWVsc2UgewoJCQkvKgoJCQkgKiBUaGUgcGFyYW1ldGVyX3N0YWNr IGFycmF5IGlzIGZ1bGwuIFRoZSBzbWFsbGVyIHBhcnQKCQkJICogaXMgc29ydGVkIHVzaW5nIGZ1 bmN0aW9uIGNhbGwgcmVjdXJzaW9uLiBUaGUgbGFyZ2VyCgkJCSAqIHBhcnQgd2lsbCBiZSBzb3J0 ZWQgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGwgcmV0dXJucy4KCQkJICovCiNpZiBkZWZpbmVkKElf QU1fUVNPUlRfUikKCQkJX19ic2RfcXNvcnRfcihwYSwgciAvIGVzLCBlcywgdGh1bmssIGNtcCk7 CiNlbGlmIGRlZmluZWQoSV9BTV9HTlVfUVNPUlRfUikKCQkJcXNvcnRfcihwYSwgciAvIGVzLCBl cywgY21wLCB0aHVuayk7CiNlbHNlCgkJCXFjeWd3KHBhLCByIC8gZXMsIGVzLCBjbXApOwojZW5k aWYKCQl9Cgl9CglpZiAobiA+IGVzKSB7ICAvKiBUaGUgbGFyZ2VyIHBhcnQgbmVlZHMgc29ydGlu Zy4gSXRlcmF0ZSB0byBzb3J0LiAgKi8KCQluID0gbiAvIGVzOwoJCWdvdG8gbG9vcDsKCX0KCS8q IEJvdGggbGVmdCBhbmQgcmlnaHQgcGFydHMgYXJlIG9uZSBlbGVtZW50IG9yIGxlc3MgLSBsZXZl bCBkb25lLiAqLwpwb3A6CglpZiAocmVjdXJzaW9uX2xldmVsICE9IDApIHsKCQlyZWN1cnNpb25f bGV2ZWwtLTsKCQlhID0gcGFyYW1ldGVyX3N0YWNrW3JlY3Vyc2lvbl9sZXZlbF0uYTsKCQluID0g cGFyYW1ldGVyX3N0YWNrW3JlY3Vyc2lvbl9sZXZlbF0ubjsKCQlnb3RvIGxvb3A7Cgl9Cn0KLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8K --00000000000039abdc05afd719d9 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple --00000000000039abdc05afd719d9--