www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2022/02/24/11:35:21

X-Recipient: archive-cygwin AT delorie DOT com
X-Original-To: cygwin AT cygwin DOT com
Delivered-To: cygwin AT cygwin DOT com
DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BBBBD3858402
Authentication-Results: sourceware.org;
dmarc=none (p=none dis=none) header.from=harkless.org
Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048;
t=1645720497; bh=eRqY6loqQaqnb6l8VWZ60FH2pQCM0X1vdE3PCsWFjbA=;
h=Date:From:Subject:To:References:In-Reply-To:From:Subject:Reply-To;
b=YbWZjGoBFDghUMS+ORTB/0bbQ6kGQ0i7oV1l4MUX2mZA+7eSXeLMT37wQp2TVu2g33Qi8HIqmukm4o/k9cjrY4X4SFuoBUA7zdtD+RtlLqncXGDUQQ4luLuroShh6VpXPv44MHSYx4Fl6Boygic1DnMds1viIV+hqkxrRGPJS47wCiZthUb3aFaiSU18eXyCM6UsfUS0X4uOdkthb+QZTwSWtYX27So7wbZQWPfyGqrt7+kkgt7WOWqqja9nxFq8ZsaCjOUOyPfeht66RQ2F0ivaAFg85zL/lmkpkshZZNdLydQ9Pe8Mljlvg1+r69VztFX+MUOkzli+GT75aOLvvg==
X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048;
t=1645720497; bh=1EGnaPFZ2L/7qbvefSZPG95RSdZ0ynbzZbcrVBMQijx=;
h=X-Sonic-MF:Date:From:Subject:To:From:Subject;
b=GYCuvmQX6bxfCNrc/uN5ixEicsKuZ1/1vdLjCdyTPOe5vv381Ayit8Tot8czTr0qYFGFz4SZE7YhxCK5woxNW26VFQ/Qpw2BhET0M1cUNhaFLc584sgCpVQRTsqPpE2q431XloXpdWF2lhnnZ+OFEGD7kCLYEF1OweEgl33NydEt5ek11SrfUH1gATRbRMKXfssfDdteoGfi6r1E9UrG26603+kn6J4eu2NBgFEnvl19ErqTnIwX1T+VYfHpbuhvAed+hGd2YVIh12zE7CGZjGI41UP5fzcZ8yjceIPnfCcIPgCn8kzheFpZcIQ3NQwR2IUS4NJjAdFvdd0fFQ0OCg==
X-YMail-OSG: u4k.h4kVM1nGBoRdztUiFTilyp21iE43NsED7XYxx0arweWeJX9nlN6I8tZE498
AneHEWbkVHyL320PWQkJnZ6jLeK_aOYlq4pBkojNO6H_5lBm8maHyO8n9ak1BZZlJPThhA6zlsmE
rAtJ03yUHlEmG7A0XfCU0ETnUhub_a.n6DYNAPnQdi3wsJhnho3lqwZeO_A7u8.hoP0tLvhLM24s
_pxMgP8NSO0O8ctGDgJ7UPiiQ_rP_Cxe8diKVMQhnotj1wCVFaQlyykGKxWLMeI_QFI3ghb0Zr5H
HAyLV3PeK9oR.5mii8vyGdjGogA5_nASqZ5MIclYQzijqeWaOhCXUrCPPn4ZeOb2qoEyLqXkVTpf
SZRSO9sA2.uDUy8BCtljeS1NzCYjdFy3bl6CbEVLkTB2Uh4fmXqv6F6tkeE7Xj85KpV5MnlBsH_A
JUEk7OkAm2zfROG3pjPLhvtwXcrKo2_kv_fyRf4sJnAdIv1u0AeDj0jh3KEYcMW8wQdHGnwaiiBc
GwGdkTpPI5EHabswYCpo2uR6TIn7cPFeF4dz28OzkKdjEYWoJg8IVIPPofoTnV.sF_Kg34WN58wk
KuAknwY3zTgRQ6_g7Za4BLumsXnR6vEIlyDHBckccTSx8YkRefF3kHogZuoi.flgGIbxUQqIyr80
QriWGbXMF_eWk.CKR2ToRIJ2qlvqL7s61stuTH.S5b2SquuZO_Z09t4RSW.ga..NW0hbHYrkJ7IJ
y9qZbJELyulMOBz553NLpXrcVssAJ7nFt9SDgJQD8V3U.3.0mlnENKaHOBcDlrFnyatmDF0RH2Jn
3BQSD.4qvqUpw3GfRFi5.AEZYVV._lpa4bKzOA6oo2oM4Qmf8kBGqNN0JwrCFm5s.YFhrcANkdaC
iSpATzKQ8mVOdCLjMDoDSOEqwFD4oKchIx_TpSoHpbWRZ6ntLB9h4kHiLB7.yfFMFDIbAT.zaxMd
Umg1Tl9Z6RgenkMF51mmATGW5gy9JAmyx1157YzTuuJYSDJEX8hEEuSQi_NtsC1Zi1bmN04qs1YI
h7X4hNv2UF2qNvC0blXB3FCtntNmsLEfZM0mQNqUX8vfucaRN3KjgZ0BOqLTxjs5f88xiIDURNDg
rWD2v_fgJ5Iv7BmewMMNtOtN6klwgAlpLEbE0uvg0QToJzOC_JCnqkDFdjiHQTpuvJJBWBqYvTnu
Kkp78l5uUQDP1fapI0FMRQRhYiM_GOaF0GKzbvhWJEqq5aIOe.pC9a3F0aG5uFpKuShTUxU18ubW
UWjvnhpkNy9V89xRzIL.12DvA.KO.eDMMuJtB_VYxrmCZ_dQrSWj1ufDNXmd1kxFSEHk3G_NpVqm
wV.UFis9X4NjSolC3lDZXbOlflqbCw.R_ToNkUtItQ30UZ26q7v0HPxItODmYqYT5js0ttfwklTQ
HYol0arSUoaJ5Vc165swcG4hENHXkogdIpEWLghdLWeYWVa3gxoEh14isfKN5r.m9dv1u3VH_YrI
G3GQoJlf_ZC9i089Thwho9cXM4E6dUfEt3xPspFkO0CmkHeeDnygFtEYck2SEseBeOQm7PC6Eioq
4ThvhtGTr1Xe1RfqA7qaoYNBoGnOzuRdpxL9Ay_gxXlpm9Zv4xE1pvDDUVDhd0pIzl8p5.hviHzH
byqsLJKQLZ6BoSj3zlr8bwzce2qSc0GfKCMk0kBtvRPI6ojW_L44ngDsQNDCuZ496ThE7VixPjGw
ECfuBdbcafh6F3KKGFxVkCF29hhrGC_KmsP5WtH96aoPfFT0Vf_re_qMzgyOaMjSMGAbeAWfLY0E
WPKSQIpDyM3xOpAvctPx0qWI5siibucyIGEE5MLgcFm5F07Mx0xvBpf9NNqSyqKVweM56ilVqumJ
1_Z0XlLU2CSnU9aNRhP_U_BdME2GyBKelc2NkrwnAf5zmL1LuaL9_pnbL_u79ynqBhWyam8DAQxs
_0_01O_4kFpcCdJbEutsW_wQlrhAGbJVrdIrtT6uIQUE74lHf23_OKz.XVil9GKwejTVRCNo.Z.n
xdsKFOceO2MtEQN99XGzCxfijzcj.c_L3dzc1RN955LDxkXnYfWBurg54kwa1fVDaPgto4Y1hbkF
Omv59EmW9Dam7tpW41bBh1q123E9WhYBj6eXmUZ6flAgZgjsfi0QXya9d.4d2yfsm1XFCiEY1yuv
dypijteXamqKTo32AsttLNWkBxvXNYNyvsvqvoZ4_HKFJ3qEPvMzFcE2Y.HnGhviN5qEANAUjuy4
mc72KZWGQQVGlKqEzKkcr2QH88HqDoXm_
X-Sonic-MF: <dan_harkless AT yahoo DOT com>
Message-ID: <88b29ca4-313f-2318-c2ed-b55f86aafac0@harkless.org>
Date: Thu, 24 Feb 2022 08:32:55 -0800
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
Thunderbird/91.6.0
From: Dan Harkless <cygwin-list21 AT harkless DOT org>
Subject: Patches to findutils 4.9.0-1's updatedb to do locking, allow
filenames with spaces & progress monitoring, exclude /dev on Cygwin, etc.
To: bug-findutils AT gnu DOT org, cygwin AT cygwin DOT com
References: <986736274 DOT 144968 DOT 1630167325057 DOT ref AT mail DOT yahoo DOT com>
<986736274 DOT 144968 DOT 1630167325057 AT mail DOT yahoo DOT com>
<a60ffa68-274a-5072-c90a-0dce7bc93431 AT harkless DOT org>
<3457cee1-18b5-2916-adee-afdfaf9769ea AT t-online DOT de>
<525a832a-78fd-5a32-e195-5747120da922 AT harkless DOT org>
<a3772125-f8a0-05fb-2dc5-c3a650fed7c8 AT SystematicSw DOT ab DOT ca>
In-Reply-To: <a3772125-f8a0-05fb-2dc5-c3a650fed7c8@SystematicSw.ab.ca>
X-Mailer: WebService/1.1.19797
mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo
X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_00, BODY_8BITS,
DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, FREEMAIL_FORGED_FROMDOMAIN,
FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, KAM_SHORT, RCVD_IN_DNSWL_NONE,
RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP,
T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.4
X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on
server2.sourceware.org
X-BeenThere: cygwin AT cygwin DOT com
X-Mailman-Version: 2.1.29
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Unsubscribe: <https://cygwin.com/mailman/options/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-request AT cygwin DOT com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
Errors-To: cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com
Sender: "Cygwin" <cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com>

This is a multi-part message in MIME format.
--------------Rc0dG5cqRTsWqdOiM0eF20FW
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Howdy.=C2=A0 I posted last August to the Cygwin list about some problems =
I=20
was having with the updatedb script, including that it was taking more=20
than 24 hours to complete, and then colliding with the next cron run,=20
and that I had no way to monitor progress (short of using Sysinternals=20
Process Explorer's very awkward GUI for this).

I'm finally getting around to sending in a patch (to bug-findutils and=20
the Cygwin list, to which I'm currently subscribed) to address these=20
issues, along with some others, a few of which represent small changes=20
in behavior:

1. Changed the direct 'find' -> 'sort' pipelining of the file list to=20
instead go to a temporary file first (and then a second one, when=20
sorting).=C2=A0 This allows monitoring of progress with 'tail -f'.

2. By default, these .txt and .txt.sort files get deleted on exit (or=20
fatal signal), but I've added a --keeptext option which can be set to=20
'sort' or 'both' to preserve them, either for debugging purposes, or for=20
running special-purpose text-munging/matching scripts on.

3. The script now does locking, outputting its PID to (by default)=20
/var/locatedb.running_updatedb_pid (I was first just going to just call=20
it locatedb.lock, but I decided to be more user-friendly).=C2=A0 If that =
file=20
exists when another instance starts to run, the script will abort with=20
an error.

4. Improved signal-handling, catching more fatal signals.=C2=A0 I also=20
changed SIGHUP to not be treated as fatal, in line with most programs.

5. /dev was not being excluded by default on Cygwin, since there we=20
can't recognize it by filesystem type.=C2=A0 This was causing some=20
time-consuming looping problems for me, with falsely self-nested paths.

6. I tried a whole bunch of different quoting variations, but I couldn't=20
get --prunepaths to work with paths containing spaces (which are of=20
course very common on Windows).=C2=A0 The PRUNEREGEX would always end up=20
incorrectly splitting on the spaces.=C2=A0 I tried to improve the regexp =
to=20
treat '\ ' differently than ' ', but I couldn't get it to work (I'm more=20
expert with Perl regexps than POSIX ones).=C2=A0 In the end, I used a=20
not-TOO-ugly kludge: in the first sed -e expression, I change '\ ' to=20
'///', and then in the last one I change '///' back to ' ' (the=20
backslash isn't needed in the regexp).=C2=A0 Of course '///' should never=
=20
appear in a path; I didn't use simply '//' because it's a relatively=20
common artifact of path concatenation.

7. make_tempdir() wasn't being used in the current version of findutils,=20
so I removed it.

8. Previously, the only protection the script did of the prior version=20
of the database was to write to locatedb.n, and then overwrite locatedb=20
with it at the end.=C2=A0 This was a problem for me when trying to debug =
the=20
updatedb issues I was having, since, for instance, if you killed the=20
'find', it'd still overwrite the old DB with a partial file list.=C2=A0 T=
he=20
script now saves the previous version of the DB as locatedb.prev.=C2=A0 T=
his=20
is also quite handy when a file you expect to be able to find goes=20
missing, in case it disappeared since the last updatedb run.=C2=A0 (I did=
n't=20
address the underlying problem of the script not aborting if 'find' did;=20
the bizarre 4-way 'find' construction with file redirection from the=20
middle of the if {} is unlike anything I've seen in a shell script before=
.)

9. I also made some minor changes, including not outputting the full=20
script path on errors, standardizing error formatting, putting quotes=20
around arguments in errors, and various cleanups and comment improvements=
.

10. The most significant of the minor changes I made was standardizing=20
the indentation, which was all over the place, making it difficult to=20
understand some of the code while debugging. Because of that, in=20
addition to the attached 'diff -u' patch, here's the output of 'diff=20
-uw' to make it easier to review my changes.=C2=A0 My Linux systems use a=
=20
different version of locate, thus I didn't test there, but I think I=20
remained platform-agnostic (and also didn't write any code that wouldn't=20
work under Bourne/POSIX shell).=C2=A0 BTW, I assign my copyright to GNU (=
I=20
filled out the official form some years ago when I was co-maintainer of=20
Wget), and if you feel my self-credit in the author list comment is=20
unwarranted, of course feel free to get rid of it.

Here's that 'diff -uw' output (again, 'diff -u' patch attached):
--- updatedb.orig=C2=A0=C2=A0=C2=A0 2022-02-05 09:37:55.000000000 -0800
+++ updatedb=C2=A0=C2=A0=C2=A0 2022-02-24 03:27:10.749175300 -0800
@@ -15,13 +15,20 @@
 =C2=A0# You should have received a copy of the GNU General Public Licens=
e
 =C2=A0# along with this program.=C2=A0 If not, see <https://www.gnu.org/=
licenses/>.

-# csh original by James Woods; sh conversion by David MacKenzie.
+# csh original by James Woods; sh conversion by David MacKenzie;
+# cleanup and enhancements by Dan Harkless.

 =C2=A0#exec 2> /tmp/updatedb-trace.txt
 =C2=A0#set -x

+ourname=3D`basename $0`=C2=A0 # don't verbosely report path to the scrip=
t in=20
errors
+
+stderr() {
+=C2=A0=C2=A0=C2=A0 echo "$ourname: $*" >&2
+}
+
 =C2=A0version=3D'
-updatedb (GNU findutils) 4.9.0
+updatedb (GNU findutils) 4.9.0+patches
 =C2=A0Copyright (C) 1994-2022 Free Software Foundation, Inc.
 =C2=A0License GPLv3+: GNU GPL version 3 or later=20
<https://gnu.org/licenses/gpl.html>
 =C2=A0This is free software: you are free to change and redistribute it.
@@ -47,11 +54,12 @@
 =C2=A0# (correctly) points to https://www.gnu.org/software/findutils/ in=
stead
 =C2=A0# of the bug reporting page.
 =C2=A0usage=3D"\
-Usage: $0 [--findoptions=3D'-option1 -option2...']
+Usage: $ourname [--findoptions=3D'-option1 -option2...']
 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [--localpaths=3D'dir1 dir2...=
'] [--netpaths=3D'dir1 dir2...']
 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [--prunepaths=3D'dir1 dir2...=
'] [--prunefs=3D'fs1 fs2...']
 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [--output=3Ddbfile] [--netuse=
r=3Duser] [--localuser=3Duser]
-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [--dbformat] [--version] [--help]
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [--dbformat=3D(LOCATE02|slocate)] [=
--keeptxt=3D(sort|both)]
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [--version] [--help]

 =C2=A0Please see also the documentation at=20
https://www.gnu.org/software/findutils/.
 =C2=A0Report (and track progress on fixing) bugs in the updatedb
@@ -61,8 +69,7 @@
 =C2=A0"
 =C2=A0changeto=3D/

-for arg
-do
+for arg; do
 =C2=A0=C2=A0 # If we are unable to fork, the back-tick operator will
 =C2=A0=C2=A0 # fail (and the shell will emit an error message).=C2=A0 Wh=
en
 =C2=A0=C2=A0 # this happens, we exit with error value 71 (EX_OSERR).
@@ -80,10 +87,11 @@
 =C2=A0=C2=A0=C2=A0=C2=A0 --localuser) LOCALUSER=3D"$val" ;;
 =C2=A0=C2=A0=C2=A0=C2=A0 --changecwd)=C2=A0 changeto=3D"$val" ;;
 =C2=A0=C2=A0=C2=A0=C2=A0 --dbformat)=C2=A0=C2=A0 dbformat=3D"$val" ;;
-=C2=A0=C2=A0=C2=A0 --version) fail=3D0; echo "$version" || fail=3D1; exi=
t $fail ;;
-=C2=A0=C2=A0=C2=A0 --help)=C2=A0=C2=A0=C2=A0 fail=3D0; echo "$usage"=C2=A0=
=C2=A0 || fail=3D1; exit $fail ;;
-=C2=A0=C2=A0=C2=A0 *) echo "updatedb: invalid option $opt
-Try '$0 --help' for more information." >&2
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 --keeptxt)=C2=A0=C2=A0=C2=A0=C2=
=A0 keeptxt=3D"$val" ;;
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 --version) fail=3D0; echo "$v=
ersion" >&2 || fail=3D1; exit $fail ;;
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 --help)=C2=A0=C2=A0=C2=A0 fai=
l=3D0; echo "$usage"=C2=A0=C2=A0 >&2 || fail=3D1; exit $fail ;;
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 *) stderr 'Invalid option "'$=
opt'".'
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo "=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Try '$ourname --help' fo=
r more information." >&2
 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit 1 ;;
 =C2=A0=C2=A0 esac
 =C2=A0done
@@ -100,13 +108,87 @@
 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ;;
 =C2=A0=C2=A0=C2=A0=C2=A0 *)
 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # The "old" database fo=
rmat is no longer supported.
-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo "Unsupported locate data=
base format ${dbformat}: Supported=20
formats are:" >&2
-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo "LOCATE02, slocate" >&2
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 stderr 'Unsupported locate da=
tabase format "'$dbformat'".'
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo '=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Supported formats are "LOCATE02" or "sloca=
te".' >&2
 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit 1
 =C2=A0esac

+# The database file to build (overridable via commandline or=20
environment var.).
+: ${LOCATE_DB=3D/var/locatedb}
+LOCATE_DB_DIR=3D`dirname $LOCATE_DB`
+
+# Prevent overlapping with ourselves.=C2=A0 Large filesystem collections=
 can=20
easily
+# take over 24 hours to complete, even on pretty speedy systems / hard=20
drives.
+# Ideally this would go in /var/run on systems that have that, but this=20
is OK.
+lockfile=3D$LOCATE_DB.running_updatedb_pid
+
+if [ -e $lockfile ]; then
+=C2=A0=C2=A0=C2=A0 stderr "Aborting since prior run's lockfile still exi=
sts:"
+=C2=A0=C2=A0=C2=A0 ls -lF $lockfile >&2
+=C2=A0=C2=A0=C2=A0 exit 1
+fi
+
+keeptxt=3Dneither
+reported_lockfile_failure=3D0
+
+cleanup_on_exit_or_signal() {
+=C2=A0=C2=A0=C2=A0 rm -f $LOCATE_DB.n
+
+=C2=A0=C2=A0=C2=A0 if [ $reported_lockfile_failure -ne 1 ]; then
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # We didn't already have a fa=
ilure trying to initially create the
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # lockfile, so we can assume =
the temporary .txt files are ours=20
(not
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # saved on a previous run wit=
h --keeptxt), and it's safe to
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # (optionally) delete them.
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if [ x"$keeptxt" =3D x"sort" =
]; then
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 rm -f=
 $LOCATE_DB.txt
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 elif [ x"$keeptxt" !=3D x"bot=
h" ]; then
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 # TBD=
: Report undefined values of --keeptxt?
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 rm -f=
 $LOCATE_DB.txt $LOCATE_DB.txt.sort
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fi
+=C2=A0=C2=A0=C2=A0 fi
+
+=C2=A0=C2=A0=C2=A0 if ! rm -f $lockfile; then
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 report_lockfile_failure "remo=
ve"
+=C2=A0=C2=A0=C2=A0 fi
+}
+
+report_lockfile_failure() {
+=C2=A0=C2=A0=C2=A0 if [ $reported_lockfile_failure -ne 1 ]; then
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo -n "$ourname: Failed to =
$1 lockfile $lockfile" >&2
+
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if [ -e $lockfile ]; then
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo =
":" >&2
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ls -l=
F $lockfile >&2
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 else
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 echo =
" in dir:" >&2
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ls -d=
lF $LOCATE_DB_DIR >&2
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fi
+
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 reported_lockfile_failure=3D1
+=C2=A0=C2=A0=C2=A0 fi
+}
+
+# Now that we've checked for a previous lockfile above, it's safe to=20
install
+# cleanup signal handler.=C2=A0 We'll try to catch all potentially fatal=
=20
signals,
+# along with exit.=C2=A0 From CentOS 7's /usr/include/asm/signal.h:
+#[shell exit=3D0] SIGHUP=3D1=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 S=
IGINT=3D2=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGQUIT=3D3 SIGILL=3D=
4
+#SIGTRAP=3D5=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGABRT=3D6=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0 SIGIOT=3D6=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 S=
IGBUS=3D7 SIGFPE=3D8
+#SIGKILL=3D9=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGUSR1=3D10=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0 SIGSEGV=3D11=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGUSR2=3D12 SIGP=
IPE=3D13
+#SIGALRM=3D14=C2=A0=C2=A0=C2=A0=C2=A0 SIGTERM=3D15=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 SIGSTKFLT=3D16=C2=A0=C2=A0=C2=A0 SIGCHLD=3D17 SIGCONT=3D18
+#SIGSTOP=3D19=C2=A0=C2=A0=C2=A0=C2=A0 SIGTSTP=3D20=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 SIGTTIN=3D21=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGTTOU=3D22 SIGURG=3D2=
3
+#SIGXCPU=3D24=C2=A0=C2=A0=C2=A0=C2=A0 SIGXFSZ=3D25=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 SIGVTALRM=3D26=C2=A0=C2=A0=C2=A0 SIGPROF=3D27 SIGWINCH=3D28
+#SIGIO=3D29=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGPOLL=3DSIGIO=C2=A0=C2=
=A0 SIGLOST=3D29=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SIGPWR=3D30 SIGSYS=3D31
+trap cleanup_on_exit_or_signal 0 2 3 4 6 7 8 9 11 15 16 30 31
+
+# Now that we've installed the signal handler, it's safe to create=20
lockfile.
+if ! echo $$ > $lockfile; then
+=C2=A0=C2=A0=C2=A0 report_lockfile_failure "write to"
+=C2=A0=C2=A0=C2=A0 exit 1
+fi

-if true
+# Don't use NUL as a path separator, now that we write to a temporary=20
text file
+# (may want to make that controllable with a commandline option in the=20
future).
+if false
 =C2=A0then
 =C2=A0=C2=A0=C2=A0=C2=A0 sort=3D"/usr/bin/sort -z"
 =C2=A0=C2=A0=C2=A0=C2=A0 print_option=3D"-print0"
@@ -123,7 +205,7 @@
 =C2=A0=C2=A0=C2=A0=C2=A0 id | cut -d'(' -f 1 | cut -d'=3D' -f2
 =C2=A0}

-# figure out if su supports the -s option
+# Figure out if su supports the -s option.
 =C2=A0select_shell() {
 =C2=A0=C2=A0=C2=A0=C2=A0 if su "$1" -s $SHELL -c false < /dev/null=C2=A0=
 ; then
 =C2=A0=C2=A0=C2=A0=C2=A0 # No.
@@ -140,8 +222,7 @@
 =C2=A0=C2=A0=C2=A0=C2=A0 fi
 =C2=A0}

-
-# You can set these in the environment, or use command-line options,
+# You can set these in the environment, or use command-line options
 =C2=A0# to override their defaults:

 =C2=A0# Any global options for find?
@@ -156,10 +237,13 @@
 =C2=A0# Network (NFS, AFS, RFS, etc.) directories to put in the database=
.
 =C2=A0: ${NETPATHS=3D}

-# Directories to not put in the database, which would otherwise be.
+# Default list of directories (overridable with options) to be omitted=20
from the
+# database.=C2=A0 Note that /dev and /proc need to be specified=20
"redundantly" here,
+# since on Cygwin, they can't be detected based on filesystem type.
 =C2=A0: ${PRUNEPATHS=3D"
 =C2=A0/afs
 =C2=A0/amd
+/dev
 =C2=A0/proc
 =C2=A0/sfs
 =C2=A0/tmp
@@ -167,24 +251,26 @@
 =C2=A0/var/tmp
 =C2=A0"}

-# Trailing slashes result in regex items that are never matched, which
-# is not what the user will expect.=C2=A0=C2=A0 Therefore we now reject =
such
-# constructs.
+# Trailing slashes result in regex items that are never matched, which i=
s
+# not what the user will expect.=C2=A0 Therefore we now reject such cons=
tructs.
+# TBD: Just remove any trailing slashes instead?
 =C2=A0for p in $PRUNEPATHS; do
 =C2=A0=C2=A0=C2=A0=C2=A0 case "$p" in
-=C2=A0=C2=A0=C2=A0 /*/)=C2=A0=C2=A0 echo "$0: $p: pruned paths should no=
t contain trailing=20
slashes" >&2
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /*/) stderr "Prune path '$p' =
has a trailing slash, which isn't=20
allowed."
 =C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit 1
 =C2=A0=C2=A0=C2=A0=C2=A0 esac
 =C2=A0done

-# The same, in the form of a regex that find can use.
+# Convert $PRUNEPATHS to a regex that find can use.=C2=A0 Note that to a=
llow=20
paths
+# containing spaces, the first -e changes '\ ' to '///' ('//' isn't=20
used since
+# it's a semi-common artifact of path concatenation), and then the last =
-e
+# changes '///' back to ' ' (it doesn't need backslashing in the regex).
 =C2=A0test -z "$PRUNEREGEX" &&
-=C2=A0 PRUNEREGEX=3D`echo $PRUNEPATHS|sed -e 's,^,\\\(^,' -e 's,=20
,$\\\)\\\|\\\(^,g' -e 's,$,$\\\),'`
+=C2=A0 PRUNEREGEX=3D`echo $PRUNEPATHS | sed -e 's,\\\ ,///,g' -e 's,^,\\=
\(^,'=20
-e 's, ,$\\\)\\\|\\\(^,g' -e 's,$,$\\\),' -e 's,///, ,g'`

-# The database file to build.
-: ${LOCATE_DB=3D/var/locatedb}
-
-# Directory to hold intermediate files.
+# Directory for sort (& possibly other executables) to hold=20
intermediate files.
+# The script's own temporary files go in the same directory as the=20
database,
+# since they aren't always temporary (--keeptxt or left-behind lockfile)=
.
 =C2=A0if test -z "$TMPDIR"; then
 =C2=A0=C2=A0 if test -d /var/tmp; then
 =C2=A0=C2=A0=C2=A0=C2=A0 : ${TMPDIR=3D/var/tmp}
@@ -217,42 +303,19 @@
 =C2=A0: ${find:=3D${BINDIR}/find}
 =C2=A0: ${frcode:=3D${LIBEXECDIR}/frcode}

-make_tempdir () {
-=C2=A0=C2=A0=C2=A0 # This implementation is adapted from the GNU Autocon=
f manual.
-=C2=A0=C2=A0=C2=A0 {
-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 tmp=3D`
-=C2=A0=C2=A0=C2=A0 (umask 077 && mktemp -d "$TMPDIR/updatedbXXXXXX") 2>/=
dev/null
-=C2=A0=C2=A0=C2=A0 ` &&
-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 test -n "$tmp" && test -d "$t=
mp"
-=C2=A0=C2=A0=C2=A0 } || {
-=C2=A0=C2=A0=C2=A0 # This method is less secure than mktemp -d, but it's=
 a fallback.
-=C2=A0=C2=A0=C2=A0 #
-=C2=A0=C2=A0=C2=A0 # We use $$ as well as $RANDOM since $RANDOM may not =
be available.
-=C2=A0=C2=A0=C2=A0 # We also add a time-dependent suffix.=C2=A0 This is =
actually somewhat
-=C2=A0=C2=A0=C2=A0 # predictable, but then so is $$.=C2=A0 POSIX does no=
t require date to
-=C2=A0=C2=A0=C2=A0 # support +%N.
-=C2=A0=C2=A0=C2=A0 ts=3D`date +%N%S || date +%S 2>/dev/null`
-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 tmp=3D"$TMPDIR"/updatedb"$$"-=
"${RANDOM:-}${ts}"
-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (umask 077 && mkdir "$tmp")
-=C2=A0=C2=A0=C2=A0 }
-=C2=A0=C2=A0=C2=A0 echo "$tmp"
-}
-
 =C2=A0checkbinary () {
 =C2=A0=C2=A0=C2=A0=C2=A0 if test -x "$1" ; then
 =C2=A0=C2=A0=C2=A0=C2=A0 : ok
 =C2=A0=C2=A0=C2=A0=C2=A0 else
-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 eval echo "updatedb needs to be able to e=
xecute $1, but cannot." >&2
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 stderr "We need to be able to=
 execute $1, but cannot."
 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 exit 1
 =C2=A0=C2=A0=C2=A0=C2=A0 fi
 =C2=A0}

-for binary in $find $frcode
-do
+for binary in $find $frcode; do
 =C2=A0=C2=A0 checkbinary $binary
 =C2=A0done

-
 =C2=A0: ${PRUNEFS=3D"
 =C2=A09P
 =C2=A0NFS
@@ -283,10 +346,20 @@
 =C2=A0fi

 =C2=A0# Make and code the file list.
-# Sort case insensitively for users' convenience.

-rm -f $LOCATE_DB.n
-trap 'rm -f $LOCATE_DB.n; exit' HUP TERM
+if ! echo test > $LOCATE_DB.n; then
+=C2=A0=C2=A0=C2=A0 stderr "Failed to write to temporary database file $L=
OCATE_DB.n."
+=C2=A0=C2=A0=C2=A0 exit 1
+fi
+
+# We now write to a temporary text file instead of going direct over a=20
pipe, as
+# the latter makes it very difficult to monitor progress and to debug=20
failures.
+if ! echo test > $LOCATE_DB.txt; then
+=C2=A0=C2=A0=C2=A0 stderr "Failed to write to text list of files $LOCATE=
_DB.txt."
+=C2=A0=C2=A0=C2=A0 exit 1
+fi
+
+failed_to_generate_locate_db=3D0

 =C2=A0if {
 =C2=A0cd "$changeto"
@@ -314,29 +387,43 @@
 =C2=A0=C2=A0=C2=A0=C2=A0 exit $?
 =C2=A0=C2=A0 else
 =C2=A0=C2=A0=C2=A0=C2=A0 # : A4
-=C2=A0=C2=A0=C2=A0 $find $NETPATHS $FINDOPTIONS \( -type d -regex "$PRUN=
EREGEX" -prune=20
\) -o $print_option ||
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 $find=
 $NETPATHS $FINDOPTIONS \( -type d -regex "$PRUNEREGEX" \
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 -prune \) -o $print_option ||
 =C2=A0=C2=A0=C2=A0=C2=A0 exit $?
 =C2=A0=C2=A0 fi
 =C2=A0fi
-} | $sort | $frcode $frcode_options > $LOCATE_DB.n
+} > $LOCATE_DB.txt
 =C2=A0then
-=C2=A0=C2=A0=C2=A0 : OK so far
-=C2=A0=C2=A0=C2=A0 true
+=C2=A0=C2=A0=C2=A0 # OK, find completed.=C2=A0 Going through all the fil=
es is very=20
time-consuming
+=C2=A0=C2=A0=C2=A0 # on some systems, so (try to) save a copy of the pre=
vious DB in case
+=C2=A0=C2=A0=C2=A0 # something goes wrong at this point.
+=C2=A0=C2=A0=C2=A0 cp -fp $LOCATE_DB $LOCATE_DB.prev
+
+=C2=A0=C2=A0=C2=A0 # Now sort results, case-insensitively for user conve=
nience, then=20
generate
+=C2=A0=C2=A0=C2=A0 # the new DB.
+=C2=A0=C2=A0=C2=A0 if ! $sort -f $LOCATE_DB.txt > $LOCATE_DB.txt.sort; t=
hen
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 failed_return_value=3D$?
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 failed_to_generate_locate_db=3D=
1
+=C2=A0=C2=A0=C2=A0 elif ! $frcode $frcode_options < $LOCATE_DB.txt.sort =
>=20
$LOCATE_DB.n; then
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 failed_return_value=3D$?
+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 failed_to_generate_locate_db=3D=
1
+=C2=A0=C2=A0=C2=A0 fi
 =C2=A0else
-=C2=A0=C2=A0=C2=A0 rv=3D$?
-=C2=A0=C2=A0=C2=A0 echo "Failed to generate $LOCATE_DB.n" >&2
+=C2=A0=C2=A0=C2=A0 failed_to_generate_locate_db=3D1
+fi
+
+if [ $failed_to_generate_locate_db -eq 1 ]; then
+=C2=A0=C2=A0=C2=A0 stderr "Failed to generate new database temp file $LO=
CATE_DB.n."
 =C2=A0=C2=A0=C2=A0=C2=A0 rm -f $LOCATE_DB.n
-=C2=A0=C2=A0=C2=A0 exit $rv
+=C2=A0=C2=A0=C2=A0 exit $failed_return_value
 =C2=A0fi

-# To avoid breaking locate while this script is running, put the
+# To avoid breaking locate while this script is running, we put the
 =C2=A0# results in a temp file, then rename it atomically.
 =C2=A0if test -s $LOCATE_DB.n; then
-=C2=A0 chmod 644 ${LOCATE_DB}.n
-=C2=A0 mv ${LOCATE_DB}.n $LOCATE_DB
+=C2=A0=C2=A0=C2=A0 chmod 644 $LOCATE_DB.n
+=C2=A0=C2=A0=C2=A0 mv -f $LOCATE_DB.n $LOCATE_DB
 =C2=A0else
-=C2=A0 echo "updatedb: new database would be empty" >&2
+=C2=A0=C2=A0=C2=A0 stderr "New database would be empty, so not creating =
it."
 =C2=A0=C2=A0 rm -f $LOCATE_DB.n
 =C2=A0fi
-
-exit 0

Dan Harkless
http://harkless.org/dan/

--------------Rc0dG5cqRTsWqdOiM0eF20FW
Content-Type: text/plain; charset=UTF-8; name="updatedb.patch"
Content-Disposition: attachment; filename="updatedb.patch"
Content-Transfer-Encoding: base64

LS0tIHVwZGF0ZWRiLm9yaWcJMjAyMi0wMi0wNSAwOTozNzo1NS4wMDAwMDAwMDAgLTA4MDAK
KysrIHVwZGF0ZWRiCTIwMjItMDItMjQgMDM6Mjc6MTAuNzQ5MTc1MzAwIC0wODAwCkBAIC0x
NSwxMyArMTUsMjAgQEAKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICMgYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW0uICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCi0j
IGNzaCBvcmlnaW5hbCBieSBKYW1lcyBXb29kczsgc2ggY29udmVyc2lvbiBieSBEYXZpZCBN
YWNLZW56aWUuCisjIGNzaCBvcmlnaW5hbCBieSBKYW1lcyBXb29kczsgc2ggY29udmVyc2lv
biBieSBEYXZpZCBNYWNLZW56aWU7CisjIGNsZWFudXAgYW5kIGVuaGFuY2VtZW50cyBieSBE
YW4gSGFya2xlc3MuCiAKICNleGVjIDI+IC90bXAvdXBkYXRlZGItdHJhY2UudHh0CiAjc2V0
IC14CiAKK291cm5hbWU9YGJhc2VuYW1lICQwYCAgIyBkb24ndCB2ZXJib3NlbHkgcmVwb3J0
IHBhdGggdG8gdGhlIHNjcmlwdCBpbiBlcnJvcnMKKworc3RkZXJyKCkgeworICAgIGVjaG8g
IiRvdXJuYW1lOiAkKiIgPiYyCit9CisKIHZlcnNpb249JwotdXBkYXRlZGIgKEdOVSBmaW5k
dXRpbHMpIDQuOS4wCit1cGRhdGVkYiAoR05VIGZpbmR1dGlscykgNC45LjArcGF0Y2hlcwog
Q29weXJpZ2h0IChDKSAxOTk0LTIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
CiBMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHBzOi8v
Z251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbD4KIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTogeW91
IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgpAQCAtNDcsMTEgKzU0
LDEyIEBACiAjIChjb3JyZWN0bHkpIHBvaW50cyB0byBodHRwczovL3d3dy5nbnUub3JnL3Nv
ZnR3YXJlL2ZpbmR1dGlscy8gaW5zdGVhZAogIyBvZiB0aGUgYnVnIHJlcG9ydGluZyBwYWdl
LgogdXNhZ2U9IlwKLVVzYWdlOiAkMCBbLS1maW5kb3B0aW9ucz0nLW9wdGlvbjEgLW9wdGlv
bjIuLi4nXQorVXNhZ2U6ICRvdXJuYW1lIFstLWZpbmRvcHRpb25zPSctb3B0aW9uMSAtb3B0
aW9uMi4uLiddCiAgICAgICAgWy0tbG9jYWxwYXRocz0nZGlyMSBkaXIyLi4uJ10gWy0tbmV0
cGF0aHM9J2RpcjEgZGlyMi4uLiddCiAgICAgICAgWy0tcHJ1bmVwYXRocz0nZGlyMSBkaXIy
Li4uJ10gWy0tcHJ1bmVmcz0nZnMxIGZzMi4uLiddCiAgICAgICAgWy0tb3V0cHV0PWRiZmls
ZV0gWy0tbmV0dXNlcj11c2VyXSBbLS1sb2NhbHVzZXI9dXNlcl0KLSAgICAgICBbLS1kYmZv
cm1hdF0gWy0tdmVyc2lvbl0gWy0taGVscF0KKyAgICAgICBbLS1kYmZvcm1hdD0oTE9DQVRF
MDJ8c2xvY2F0ZSldIFstLWtlZXB0eHQ9KHNvcnR8Ym90aCldIAorICAgICAgIFstLXZlcnNp
b25dIFstLWhlbHBdCiAKIFBsZWFzZSBzZWUgYWxzbyB0aGUgZG9jdW1lbnRhdGlvbiBhdCBo
dHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2ZpbmR1dGlscy8uCiBSZXBvcnQgKGFuZCB0
cmFjayBwcm9ncmVzcyBvbiBmaXhpbmcpIGJ1Z3MgaW4gdGhlIHVwZGF0ZWRiCkBAIC02MSwz
MSArNjksMzEgQEAKICIKIGNoYW5nZXRvPS8KIAotZm9yIGFyZwotZG8KLSAgIyBJZiB3ZSBh
cmUgdW5hYmxlIHRvIGZvcmssIHRoZSBiYWNrLXRpY2sgb3BlcmF0b3Igd2lsbAotICAjIGZh
aWwgKGFuZCB0aGUgc2hlbGwgd2lsbCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UpLiAgV2hlbgot
ICAjIHRoaXMgaGFwcGVucywgd2UgZXhpdCB3aXRoIGVycm9yIHZhbHVlIDcxIChFWF9PU0VS
UikuCi0gICMgQWx0ZXJuYXRpdmUgY2FuZGlkYXRlIC0gNzUsIEVYX1RFTVBGQUlMLgotICBv
cHQ9YGVjaG8gJGFyZ3xzZWQgJ3MvXlwoW149XSpcKS4qL1wxLydgICB8fCBleGl0IDcxCi0g
IHZhbD1gZWNobyAkYXJnfHNlZCAncy9eW149XSo9XCguKlwpL1wxLydgIHx8IGV4aXQgNzEK
LSAgY2FzZSAiJG9wdCIgaW4KLSAgICAtLWZpbmRvcHRpb25zKSBGSU5ET1BUSU9OUz0iJHZh
bCIgOzsKLSAgICAtLWxvY2FscGF0aHMpIFNFQVJDSFBBVEhTPSIkdmFsIiA7OwotICAgIC0t
bmV0cGF0aHMpIE5FVFBBVEhTPSIkdmFsIiA7OwotICAgIC0tcHJ1bmVwYXRocykgUFJVTkVQ
QVRIUz0iJHZhbCIgOzsKLSAgICAtLXBydW5lZnMpIFBSVU5FRlM9IiR2YWwiIDs7Ci0gICAg
LS1vdXRwdXQpIExPQ0FURV9EQj0iJHZhbCIgOzsKLSAgICAtLW5ldHVzZXIpIE5FVFVTRVI9
IiR2YWwiIDs7Ci0gICAgLS1sb2NhbHVzZXIpIExPQ0FMVVNFUj0iJHZhbCIgOzsKLSAgICAt
LWNoYW5nZWN3ZCkgIGNoYW5nZXRvPSIkdmFsIiA7OwotICAgIC0tZGJmb3JtYXQpICAgZGJm
b3JtYXQ9IiR2YWwiIDs7Ci0gICAgLS12ZXJzaW9uKSBmYWlsPTA7IGVjaG8gIiR2ZXJzaW9u
IiB8fCBmYWlsPTE7IGV4aXQgJGZhaWwgOzsKLSAgICAtLWhlbHApICAgIGZhaWw9MDsgZWNo
byAiJHVzYWdlIiAgIHx8IGZhaWw9MTsgZXhpdCAkZmFpbCA7OwotICAgICopIGVjaG8gInVw
ZGF0ZWRiOiBpbnZhbGlkIG9wdGlvbiAkb3B0Ci1UcnkgJyQwIC0taGVscCcgZm9yIG1vcmUg
aW5mb3JtYXRpb24uIiA+JjIKLSAgICAgICBleGl0IDEgOzsKLSAgZXNhYworZm9yIGFyZzsg
ZG8KKyAgICAjIElmIHdlIGFyZSB1bmFibGUgdG8gZm9yaywgdGhlIGJhY2stdGljayBvcGVy
YXRvciB3aWxsCisgICAgIyBmYWlsIChhbmQgdGhlIHNoZWxsIHdpbGwgZW1pdCBhbiBlcnJv
ciBtZXNzYWdlKS4gIFdoZW4KKyAgICAjIHRoaXMgaGFwcGVucywgd2UgZXhpdCB3aXRoIGVy
cm9yIHZhbHVlIDcxIChFWF9PU0VSUikuCisgICAgIyBBbHRlcm5hdGl2ZSBjYW5kaWRhdGUg
LSA3NSwgRVhfVEVNUEZBSUwuCisgICAgb3B0PWBlY2hvICRhcmcgfCBzZWQgJ3MvXlwoW149
XSpcKS4qL1wxLydgICB8fCBleGl0IDcxCisgICAgdmFsPWBlY2hvICRhcmcgfCBzZWQgJ3Mv
XltePV0qPVwoLipcKS9cMS8nYCB8fCBleGl0IDcxCisgICAgY2FzZSAiJG9wdCIgaW4KKyAg
ICAgICAgLS1maW5kb3B0aW9ucykgRklORE9QVElPTlM9IiR2YWwiIDs7CisgICAgICAgIC0t
bG9jYWxwYXRocykgU0VBUkNIUEFUSFM9IiR2YWwiIDs7CisgICAgICAgIC0tbmV0cGF0aHMp
IE5FVFBBVEhTPSIkdmFsIiA7OworICAgICAgICAtLXBydW5lcGF0aHMpIFBSVU5FUEFUSFM9
IiR2YWwiIDs7CisgICAgICAgIC0tcHJ1bmVmcykgUFJVTkVGUz0iJHZhbCIgOzsKKyAgICAg
ICAgLS1vdXRwdXQpIExPQ0FURV9EQj0iJHZhbCIgOzsKKyAgICAgICAgLS1uZXR1c2VyKSBO
RVRVU0VSPSIkdmFsIiA7OworICAgICAgICAtLWxvY2FsdXNlcikgTE9DQUxVU0VSPSIkdmFs
IiA7OworICAgICAgICAtLWNoYW5nZWN3ZCkgIGNoYW5nZXRvPSIkdmFsIiA7OworICAgICAg
ICAtLWRiZm9ybWF0KSAgIGRiZm9ybWF0PSIkdmFsIiA7OworICAgICAgICAtLWtlZXB0eHQp
ICAgICBrZWVwdHh0PSIkdmFsIiA7OworICAgICAgICAtLXZlcnNpb24pIGZhaWw9MDsgZWNo
byAiJHZlcnNpb24iID4mMiB8fCBmYWlsPTE7IGV4aXQgJGZhaWwgOzsKKyAgICAgICAgLS1o
ZWxwKSAgICBmYWlsPTA7IGVjaG8gIiR1c2FnZSIgICA+JjIgfHwgZmFpbD0xOyBleGl0ICRm
YWlsIDs7CisgICAgICAgICopIHN0ZGVyciAnSW52YWxpZCBvcHRpb24gIickb3B0JyIuJwor
ICAgICAgICAgICBlY2hvICIgICAgICAgICAgVHJ5ICckb3VybmFtZSAtLWhlbHAnIGZvciBt
b3JlIGluZm9ybWF0aW9uLiIgPiYyCisgICAgICAgICAgIGV4aXQgMSA7OworICAgIGVzYWMK
IGRvbmUKIAogZnJjb2RlX29wdGlvbnM9IiIKQEAgLTEwMCwxMyArMTA4LDg3IEBACiAgICAg
ICAgIDs7CiAgICAgKikKICAgICAgICAgIyBUaGUgIm9sZCIgZGF0YWJhc2UgZm9ybWF0IGlz
IG5vIGxvbmdlciBzdXBwb3J0ZWQuCi0gICAgICAgIGVjaG8gIlVuc3VwcG9ydGVkIGxvY2F0
ZSBkYXRhYmFzZSBmb3JtYXQgJHtkYmZvcm1hdH06IFN1cHBvcnRlZCBmb3JtYXRzIGFyZToi
ID4mMgotICAgICAgICBlY2hvICJMT0NBVEUwMiwgc2xvY2F0ZSIgPiYyCisgICAgICAgIHN0
ZGVyciAnVW5zdXBwb3J0ZWQgbG9jYXRlIGRhdGFiYXNlIGZvcm1hdCAiJyRkYmZvcm1hdCci
LicKKyAgICAgICAgZWNobyAnICAgICAgICAgIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSAiTE9D
QVRFMDIiIG9yICJzbG9jYXRlIi4nID4mMgogICAgICAgICBleGl0IDEKIGVzYWMKIAorIyBU
aGUgZGF0YWJhc2UgZmlsZSB0byBidWlsZCAob3ZlcnJpZGFibGUgdmlhIGNvbW1hbmRsaW5l
IG9yIGVudmlyb25tZW50IHZhci4pLgorOiAke0xPQ0FURV9EQj0vdmFyL2xvY2F0ZWRifQor
TE9DQVRFX0RCX0RJUj1gZGlybmFtZSAkTE9DQVRFX0RCYAorCisjIFByZXZlbnQgb3Zlcmxh
cHBpbmcgd2l0aCBvdXJzZWx2ZXMuICBMYXJnZSBmaWxlc3lzdGVtIGNvbGxlY3Rpb25zIGNh
biBlYXNpbHkgCisjIHRha2Ugb3ZlciAyNCBob3VycyB0byBjb21wbGV0ZSwgZXZlbiBvbiBw
cmV0dHkgc3BlZWR5IHN5c3RlbXMgLyBoYXJkIGRyaXZlcy4KKyMgSWRlYWxseSB0aGlzIHdv
dWxkIGdvIGluIC92YXIvcnVuIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoYXQsIGJ1dCB0aGlz
IGlzIE9LLgorbG9ja2ZpbGU9JExPQ0FURV9EQi5ydW5uaW5nX3VwZGF0ZWRiX3BpZAorCitp
ZiBbIC1lICRsb2NrZmlsZSBdOyB0aGVuCisgICAgc3RkZXJyICJBYm9ydGluZyBzaW5jZSBw
cmlvciBydW4ncyBsb2NrZmlsZSBzdGlsbCBleGlzdHM6IgorICAgIGxzIC1sRiAkbG9ja2Zp
bGUgPiYyCisgICAgZXhpdCAxCitmaQorCitrZWVwdHh0PW5laXRoZXIKK3JlcG9ydGVkX2xv
Y2tmaWxlX2ZhaWx1cmU9MAorCitjbGVhbnVwX29uX2V4aXRfb3Jfc2lnbmFsKCkgeworICAg
IHJtIC1mICRMT0NBVEVfREIubgorCisgICAgaWYgWyAkcmVwb3J0ZWRfbG9ja2ZpbGVfZmFp
bHVyZSAtbmUgMSBdOyB0aGVuCisgICAgICAgICMgV2UgZGlkbid0IGFscmVhZHkgaGF2ZSBh
IGZhaWx1cmUgdHJ5aW5nIHRvIGluaXRpYWxseSBjcmVhdGUgdGhlIAorICAgICAgICAjIGxv
Y2tmaWxlLCBzbyB3ZSBjYW4gYXNzdW1lIHRoZSB0ZW1wb3JhcnkgLnR4dCBmaWxlcyBhcmUg
b3VycyAobm90IAorICAgICAgICAjIHNhdmVkIG9uIGEgcHJldmlvdXMgcnVuIHdpdGggLS1r
ZWVwdHh0KSwgYW5kIGl0J3Mgc2FmZSB0byAKKyAgICAgICAgIyAob3B0aW9uYWxseSkgZGVs
ZXRlIHRoZW0uCisgICAgICAgIGlmIFsgeCIka2VlcHR4dCIgPSB4InNvcnQiIF07IHRoZW4K
KyAgICAgICAgICAgIHJtIC1mICRMT0NBVEVfREIudHh0CisgICAgICAgIGVsaWYgWyB4IiRr
ZWVwdHh0IiAhPSB4ImJvdGgiIF07IHRoZW4KKyAgICAgICAgICAgICMgVEJEOiBSZXBvcnQg
dW5kZWZpbmVkIHZhbHVlcyBvZiAtLWtlZXB0eHQ/CisgICAgICAgICAgICBybSAtZiAkTE9D
QVRFX0RCLnR4dCAkTE9DQVRFX0RCLnR4dC5zb3J0CisgICAgICAgIGZpCisgICAgZmkKIAot
aWYgdHJ1ZQorICAgIGlmICEgcm0gLWYgJGxvY2tmaWxlOyB0aGVuCisgICAgICAgIHJlcG9y
dF9sb2NrZmlsZV9mYWlsdXJlICJyZW1vdmUiCisgICAgZmkKK30KKworcmVwb3J0X2xvY2tm
aWxlX2ZhaWx1cmUoKSB7CisgICAgaWYgWyAkcmVwb3J0ZWRfbG9ja2ZpbGVfZmFpbHVyZSAt
bmUgMSBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIiRvdXJuYW1lOiBGYWlsZWQgdG8gJDEg
bG9ja2ZpbGUgJGxvY2tmaWxlIiA+JjIKKworICAgICAgICBpZiBbIC1lICRsb2NrZmlsZSBd
OyB0aGVuCisgICAgICAgICAgICBlY2hvICI6IiA+JjIKKyAgICAgICAgICAgIGxzIC1sRiAk
bG9ja2ZpbGUgPiYyCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIiBpbiBkaXI6
IiA+JjIKKyAgICAgICAgICAgIGxzIC1kbEYgJExPQ0FURV9EQl9ESVIgPiYyCisgICAgICAg
IGZpCisKKyAgICAgICAgcmVwb3J0ZWRfbG9ja2ZpbGVfZmFpbHVyZT0xCisgICAgZmkKK30K
KworIyBOb3cgdGhhdCB3ZSd2ZSBjaGVja2VkIGZvciBhIHByZXZpb3VzIGxvY2tmaWxlIGFi
b3ZlLCBpdCdzIHNhZmUgdG8gaW5zdGFsbCAKKyMgY2xlYW51cCBzaWduYWwgaGFuZGxlci4g
IFdlJ2xsIHRyeSB0byBjYXRjaCBhbGwgcG90ZW50aWFsbHkgZmF0YWwgc2lnbmFscywgCisj
IGFsb25nIHdpdGggZXhpdC4gIEZyb20gQ2VudE9TIDcncyAvdXNyL2luY2x1ZGUvYXNtL3Np
Z25hbC5oOgorI1tzaGVsbCBleGl0PTBdIFNJR0hVUD0xICAgICAgICBTSUdJTlQ9MiAgICAg
ICAgU0lHUVVJVD0zICAgICAgIFNJR0lMTD00CisjU0lHVFJBUD01ICAgICAgU0lHQUJSVD02
ICAgICAgIFNJR0lPVD02ICAgICAgICBTSUdCVVM9NyAgICAgICAgU0lHRlBFPTgKKyNTSUdL
SUxMPTkgICAgICBTSUdVU1IxPTEwICAgICAgU0lHU0VHVj0xMSAgICAgIFNJR1VTUjI9MTIg
ICAgICBTSUdQSVBFPTEzCisjU0lHQUxSTT0xNCAgICAgU0lHVEVSTT0xNSAgICAgIFNJR1NU
S0ZMVD0xNiAgICBTSUdDSExEPTE3ICAgICAgU0lHQ09OVD0xOAorI1NJR1NUT1A9MTkgICAg
IFNJR1RTVFA9MjAgICAgICBTSUdUVElOPTIxICAgICAgU0lHVFRPVT0yMiAgICAgIFNJR1VS
Rz0yMworI1NJR1hDUFU9MjQgICAgIFNJR1hGU1o9MjUgICAgICBTSUdWVEFMUk09MjYgICAg
U0lHUFJPRj0yNyAgICAgIFNJR1dJTkNIPTI4CisjU0lHSU89MjkgICAgICAgU0lHUE9MTD1T
SUdJTyAgIFNJR0xPU1Q9MjkgICAgICBTSUdQV1I9MzAgICAgICAgU0lHU1lTPTMxCit0cmFw
IGNsZWFudXBfb25fZXhpdF9vcl9zaWduYWwgMCAyIDMgNCA2IDcgOCA5IDExIDE1IDE2IDMw
IDMxIAorCisjIE5vdyB0aGF0IHdlJ3ZlIGluc3RhbGxlZCB0aGUgc2lnbmFsIGhhbmRsZXIs
IGl0J3Mgc2FmZSB0byBjcmVhdGUgbG9ja2ZpbGUuCitpZiAhIGVjaG8gJCQgPiAkbG9ja2Zp
bGU7IHRoZW4KKyAgICByZXBvcnRfbG9ja2ZpbGVfZmFpbHVyZSAid3JpdGUgdG8iCisgICAg
ZXhpdCAxCitmaQorCisjIERvbid0IHVzZSBOVUwgYXMgYSBwYXRoIHNlcGFyYXRvciwgbm93
IHRoYXQgd2Ugd3JpdGUgdG8gYSB0ZW1wb3JhcnkgdGV4dCBmaWxlCisjIChtYXkgd2FudCB0
byBtYWtlIHRoYXQgY29udHJvbGxhYmxlIHdpdGggYSBjb21tYW5kbGluZSBvcHRpb24gaW4g
dGhlIGZ1dHVyZSkuCitpZiBmYWxzZQogdGhlbgogICAgIHNvcnQ9Ii91c3IvYmluL3NvcnQg
LXoiCiAgICAgcHJpbnRfb3B0aW9uPSItcHJpbnQwIgpAQCAtMTIzLDI1ICsyMDUsMjQgQEAK
ICAgICBpZCB8IGN1dCAtZCcoJyAtZiAxIHwgY3V0IC1kJz0nIC1mMgogfQogCi0jIGZpZ3Vy
ZSBvdXQgaWYgc3Ugc3VwcG9ydHMgdGhlIC1zIG9wdGlvbgorIyBGaWd1cmUgb3V0IGlmIHN1
IHN1cHBvcnRzIHRoZSAtcyBvcHRpb24uCiBzZWxlY3Rfc2hlbGwoKSB7Ci0gICAgaWYgc3Ug
IiQxIiAtcyAkU0hFTEwgLWMgZmFsc2UgPCAvZGV2L251bGwgIDsgdGhlbgotCSMgTm8uCi0J
ZWNobyAiIgorICAgIGlmIHN1ICIkMSIgLXMgJFNIRUxMIC1jIGZhbHNlIDwgL2Rldi9udWxs
OyB0aGVuCisgICAgICAgICMgTm8uCisgICAgICAgIGVjaG8gIiIKICAgICBlbHNlCi0JaWYg
c3UgIiQxIiAtcyAkU0hFTEwgLWMgdHJ1ZSA8IC9kZXYvbnVsbCAgOyB0aGVuCi0JICAgICMg
WWVzLgotCSAgICBlY2hvICItcyAkU0hFTEwiCisgICAgICAgIGlmIHN1ICIkMSIgLXMgJFNI
RUxMIC1jIHRydWUgPCAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICMgWWVzLgorICAg
ICAgICAgICAgZWNobyAiLXMgJFNIRUxMIgogICAgICAgICBlbHNlCi0JICAgICMgc3UgaXMg
dW5jb25kaXRpb25hbGx5IGZhaWxpbmcuICBXZSB3b24ndCBiZSBhYmxlIHRvCi0JICAgICMg
ZmlndXJlIG91dCB3aGF0IGlzIHdyb25nLCBzbyBiZSBjb25zZXJ2YXRpdmUuCi0JICAgIGVj
aG8gIiIKLQlmaQorICAgICAgICAgICAgIyBzdSBpcyB1bmNvbmRpdGlvbmFsbHkgZmFpbGlu
Zy4gIFdlIHdvbid0IGJlIGFibGUgdG8KKyAgICAgICAgICAgICMgZmlndXJlIG91dCB3aGF0
IGlzIHdyb25nLCBzbyBiZSBjb25zZXJ2YXRpdmUuCisgICAgICAgICAgICBlY2hvICIiCisg
ICAgICAgIGZpCiAgICAgZmkKIH0KIAotCi0jIFlvdSBjYW4gc2V0IHRoZXNlIGluIHRoZSBl
bnZpcm9ubWVudCwgb3IgdXNlIGNvbW1hbmQtbGluZSBvcHRpb25zLAorIyBZb3UgY2FuIHNl
dCB0aGVzZSBpbiB0aGUgZW52aXJvbm1lbnQsIG9yIHVzZSBjb21tYW5kLWxpbmUgb3B0aW9u
cwogIyB0byBvdmVycmlkZSB0aGVpciBkZWZhdWx0czoKIAogIyBBbnkgZ2xvYmFsIG9wdGlv
bnMgZm9yIGZpbmQ/CkBAIC0xNTYsMTAgKzIzNywxMyBAQAogIyBOZXR3b3JrIChORlMsIEFG
UywgUkZTLCBldGMuKSBkaXJlY3RvcmllcyB0byBwdXQgaW4gdGhlIGRhdGFiYXNlLgogOiAk
e05FVFBBVEhTPX0KIAotIyBEaXJlY3RvcmllcyB0byBub3QgcHV0IGluIHRoZSBkYXRhYmFz
ZSwgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGJlLgorIyBEZWZhdWx0IGxpc3Qgb2YgZGlyZWN0
b3JpZXMgKG92ZXJyaWRhYmxlIHdpdGggb3B0aW9ucykgdG8gYmUgb21pdHRlZCBmcm9tIHRo
ZQorIyBkYXRhYmFzZS4gIE5vdGUgdGhhdCAvZGV2IGFuZCAvcHJvYyBuZWVkIHRvIGJlIHNw
ZWNpZmllZCAicmVkdW5kYW50bHkiIGhlcmUsCisjIHNpbmNlIG9uIEN5Z3dpbiwgdGhleSBj
YW4ndCBiZSBkZXRlY3RlZCBiYXNlZCBvbiBmaWxlc3lzdGVtIHR5cGUuCiA6ICR7UFJVTkVQ
QVRIUz0iCiAvYWZzCiAvYW1kCisvZGV2CiAvcHJvYwogL3NmcwogL3RtcApAQCAtMTY3LDMy
ICsyNTEsMzQgQEAKIC92YXIvdG1wCiAifQogCi0jIFRyYWlsaW5nIHNsYXNoZXMgcmVzdWx0
IGluIHJlZ2V4IGl0ZW1zIHRoYXQgYXJlIG5ldmVyIG1hdGNoZWQsIHdoaWNoCi0jIGlzIG5v
dCB3aGF0IHRoZSB1c2VyIHdpbGwgZXhwZWN0LiAgIFRoZXJlZm9yZSB3ZSBub3cgcmVqZWN0
IHN1Y2gKLSMgY29uc3RydWN0cy4KKyMgVHJhaWxpbmcgc2xhc2hlcyByZXN1bHQgaW4gcmVn
ZXggaXRlbXMgdGhhdCBhcmUgbmV2ZXIgbWF0Y2hlZCwgd2hpY2ggaXMKKyMgbm90IHdoYXQg
dGhlIHVzZXIgd2lsbCBleHBlY3QuICBUaGVyZWZvcmUgd2Ugbm93IHJlamVjdCBzdWNoIGNv
bnN0cnVjdHMuCisjIFRCRDogSnVzdCByZW1vdmUgYW55IHRyYWlsaW5nIHNsYXNoZXMgaW5z
dGVhZD8KIGZvciBwIGluICRQUlVORVBBVEhTOyBkbwogICAgIGNhc2UgIiRwIiBpbgotCS8q
LykgICBlY2hvICIkMDogJHA6IHBydW5lZCBwYXRocyBzaG91bGQgbm90IGNvbnRhaW4gdHJh
aWxpbmcgc2xhc2hlcyIgPiYyCi0JICAgICAgIGV4aXQgMQorICAgICAgICAvKi8pIHN0ZGVy
ciAiUHJ1bmUgcGF0aCAnJHAnIGhhcyBhIHRyYWlsaW5nIHNsYXNoLCB3aGljaCBpc24ndCBh
bGxvd2VkLiIKKyAgICAgICAgICAgICBleGl0IDEKICAgICBlc2FjCiBkb25lCiAKLSMgVGhl
IHNhbWUsIGluIHRoZSBmb3JtIG9mIGEgcmVnZXggdGhhdCBmaW5kIGNhbiB1c2UuCisjIENv
bnZlcnQgJFBSVU5FUEFUSFMgdG8gYSByZWdleCB0aGF0IGZpbmQgY2FuIHVzZS4gIE5vdGUg
dGhhdCB0byBhbGxvdyBwYXRocworIyBjb250YWluaW5nIHNwYWNlcywgdGhlIGZpcnN0IC1l
IGNoYW5nZXMgJ1wgJyB0byAnLy8vJyAoJy8vJyBpc24ndCB1c2VkIHNpbmNlCisjIGl0J3Mg
YSBzZW1pLWNvbW1vbiBhcnRpZmFjdCBvZiBwYXRoIGNvbmNhdGVuYXRpb24pLCBhbmQgdGhl
biB0aGUgbGFzdCAtZQorIyBjaGFuZ2VzICcvLy8nIGJhY2sgdG8gJyAnIChpdCBkb2Vzbid0
IG5lZWQgYmFja3NsYXNoaW5nIGluIHRoZSByZWdleCkuCiB0ZXN0IC16ICIkUFJVTkVSRUdF
WCIgJiYKLSAgUFJVTkVSRUdFWD1gZWNobyAkUFJVTkVQQVRIU3xzZWQgLWUgJ3MsXixcXFwo
XiwnIC1lICdzLCAsJFxcXClcXFx8XFxcKF4sZycgLWUgJ3MsJCwkXFxcKSwnYAorICBQUlVO
RVJFR0VYPWBlY2hvICRQUlVORVBBVEhTIHwgc2VkIC1lICdzLFxcXCAsLy8vLGcnIC1lICdz
LF4sXFxcKF4sJyAtZSAncywgLCRcXFwpXFxcfFxcXCheLGcnIC1lICdzLCQsJFxcXCksJyAt
ZSAncywvLy8sICxnJ2AKIAotIyBUaGUgZGF0YWJhc2UgZmlsZSB0byBidWlsZC4KLTogJHtM
T0NBVEVfREI9L3Zhci9sb2NhdGVkYn0KLQotIyBEaXJlY3RvcnkgdG8gaG9sZCBpbnRlcm1l
ZGlhdGUgZmlsZXMuCisjIERpcmVjdG9yeSBmb3Igc29ydCAoJiBwb3NzaWJseSBvdGhlciBl
eGVjdXRhYmxlcykgdG8gaG9sZCBpbnRlcm1lZGlhdGUgZmlsZXMuCisjIFRoZSBzY3JpcHQn
cyBvd24gdGVtcG9yYXJ5IGZpbGVzIGdvIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUg
ZGF0YWJhc2UsCisjIHNpbmNlIHRoZXkgYXJlbid0IGFsd2F5cyB0ZW1wb3JhcnkgKC0ta2Vl
cHR4dCBvciBsZWZ0LWJlaGluZCBsb2NrZmlsZSkuCiBpZiB0ZXN0IC16ICIkVE1QRElSIjsg
dGhlbgotICBpZiB0ZXN0IC1kIC92YXIvdG1wOyB0aGVuCi0gICAgOiAke1RNUERJUj0vdmFy
L3RtcH0KLSAgZWxpZiB0ZXN0IC1kIC91c3IvdG1wOyB0aGVuCi0gICAgOiAke1RNUERJUj0v
dXNyL3RtcH0KLSAgZWxzZQotICAgIDogJHtUTVBESVI9L3RtcH0KLSAgZmkKKyAgICBpZiB0
ZXN0IC1kIC92YXIvdG1wOyB0aGVuCisgICAgICAgIDogJHtUTVBESVI9L3Zhci90bXB9Cisg
ICAgZWxpZiB0ZXN0IC1kIC91c3IvdG1wOyB0aGVuCisgICAgICAgIDogJHtUTVBESVI9L3Vz
ci90bXB9CisgICAgZWxzZQorICAgICAgICA6ICR7VE1QRElSPS90bXB9CisgICAgZmkKIGZp
CiBleHBvcnQgVE1QRElSCiAKQEAgLTIwMCwxNCArMjg2LDE0IEBACiA6ICR7TkVUVVNFUj1k
YWVtb259CiAKICMgVGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzdWJwcm9ncmFtcy4K
LWlmIHRlc3QgLW4gIiRMSUJFWEVDRElSIiA7IHRoZW4KK2lmIHRlc3QgLW4gIiRMSUJFWEVD
RElSIjsgdGhlbgogICAgIDogTElCRVhFQ0RJUiBhbHJlYWR5IHNldCwgZG8gbm90aGluZwog
ZWxzZQogICAgIDogJHtMSUJFWEVDRElSPS91c3IvbGliZXhlY30KIGZpCiAKICMgVGhlIGRp
cmVjdG9yeSBjb250YWluaW5nIGZpbmQuCi1pZiB0ZXN0IC1uICIkQklORElSIiA7IHRoZW4K
K2lmIHRlc3QgLW4gIiRCSU5ESVIiOyB0aGVuCiAgICAgOiBCSU5ESVIgYWxyZWFkeSBzZXQs
IGRvIG5vdGhpbmcKIGVsc2UKICAgICA6ICR7QklORElSPS91c3IvYmlufQpAQCAtMjE3LDQy
ICszMDMsMTkgQEAKIDogJHtmaW5kOj0ke0JJTkRJUn0vZmluZH0KIDogJHtmcmNvZGU6PSR7
TElCRVhFQ0RJUn0vZnJjb2RlfQogCi1tYWtlX3RlbXBkaXIgKCkgewotICAgICMgVGhpcyBp
bXBsZW1lbnRhdGlvbiBpcyBhZGFwdGVkIGZyb20gdGhlIEdOVSBBdXRvY29uZiBtYW51YWwu
Ci0gICAgewotICAgICAgICB0bXA9YAotICAgICh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIk
VE1QRElSL3VwZGF0ZWRiWFhYWFhYIikgMj4vZGV2L251bGwKLSAgICBgICYmCi0gICAgICAg
IHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCi0gICAgfSB8fCB7Ci0JIyBUaGlz
IG1ldGhvZCBpcyBsZXNzIHNlY3VyZSB0aGFuIG1rdGVtcCAtZCwgYnV0IGl0J3MgYSBmYWxs
YmFjay4KLQkjCi0JIyBXZSB1c2UgJCQgYXMgd2VsbCBhcyAkUkFORE9NIHNpbmNlICRSQU5E
T00gbWF5IG5vdCBiZSBhdmFpbGFibGUuCi0JIyBXZSBhbHNvIGFkZCBhIHRpbWUtZGVwZW5k
ZW50IHN1ZmZpeC4gIFRoaXMgaXMgYWN0dWFsbHkgc29tZXdoYXQKLQkjIHByZWRpY3RhYmxl
LCBidXQgdGhlbiBzbyBpcyAkJC4gIFBPU0lYIGRvZXMgbm90IHJlcXVpcmUgZGF0ZSB0bwot
CSMgc3VwcG9ydCArJU4uCi0JdHM9YGRhdGUgKyVOJVMgfHwgZGF0ZSArJVMgMj4vZGV2L251
bGxgCi0gICAgICAgIHRtcD0iJFRNUERJUiIvdXBkYXRlZGIiJCQiLSIke1JBTkRPTTotfSR7
dHN9IgotICAgICAgICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKLSAgICB9Ci0gICAg
ZWNobyAiJHRtcCIKLX0KLQotY2hlY2tiaW5hcnkgKCkgewotICAgIGlmIHRlc3QgLXggIiQx
IiA7IHRoZW4KLQk6IG9rCitjaGVja2JpbmFyeSgpIHsKKyAgICBpZiB0ZXN0IC14ICIkMSI7
IHRoZW4KKyAgICAgICAgOiBvawogICAgIGVsc2UKLSAgICAgIGV2YWwgZWNobyAidXBkYXRl
ZGIgbmVlZHMgdG8gYmUgYWJsZSB0byBleGVjdXRlICQxLCBidXQgY2Fubm90LiIgPiYyCi0g
ICAgICBleGl0IDEKKyAgICAgICAgc3RkZXJyICJXZSBuZWVkIHRvIGJlIGFibGUgdG8gZXhl
Y3V0ZSAkMSwgYnV0IGNhbm5vdC4iCisgICAgICAgIGV4aXQgMQogICAgIGZpCiB9CiAKLWZv
ciBiaW5hcnkgaW4gJGZpbmQgJGZyY29kZQotZG8KLSAgY2hlY2tiaW5hcnkgJGJpbmFyeQor
Zm9yIGJpbmFyeSBpbiAkZmluZCAkZnJjb2RlOyBkbworICAgIGNoZWNrYmluYXJ5ICRiaW5h
cnkKIGRvbmUKIAotCiA6ICR7UFJVTkVGUz0iCiA5UAogTkZTCkBAIC0yNzYsNjcgKzMzOSw5
MSBAQAogIn0KIAogaWYgdGVzdCAtbiAiJFBSVU5FRlMiOyB0aGVuCi1wcnVuZWZzX2V4cD1g
ZWNobyAkUFJVTkVGUyB8c2VkIC1lICdzL1woW14gXVteIF0qXCkvLW8gLWZzdHlwZSBcMS9n
JyBcCi0gLWUgJ3MvLW8gLy8nIC1lICdzLyQvIC1vLydgCisgICAgcHJ1bmVmc19leHA9YGVj
aG8gJFBSVU5FRlMgfCBzZWQgLWUgJ3MvXChbXiBdW14gXSpcKS8tbyAtZnN0eXBlIFwxL2cn
IFwKKyAgICAgIC1lICdzLy1vIC8vJyAtZSAncy8kLyAtby8nYAogZWxzZQotICBwcnVuZWZz
X2V4cD0nJworICAgIHBydW5lZnNfZXhwPScnCiBmaQogCiAjIE1ha2UgYW5kIGNvZGUgdGhl
IGZpbGUgbGlzdC4KLSMgU29ydCBjYXNlIGluc2Vuc2l0aXZlbHkgZm9yIHVzZXJzJyBjb252
ZW5pZW5jZS4KIAotcm0gLWYgJExPQ0FURV9EQi5uCi10cmFwICdybSAtZiAkTE9DQVRFX0RC
Lm47IGV4aXQnIEhVUCBURVJNCitpZiAhIGVjaG8gdGVzdCA+ICRMT0NBVEVfREIubjsgdGhl
bgorICAgIHN0ZGVyciAiRmFpbGVkIHRvIHdyaXRlIHRvIHRlbXBvcmFyeSBkYXRhYmFzZSBm
aWxlICRMT0NBVEVfREIubi4iCisgICAgZXhpdCAxCitmaQogCi1pZiB7Ci1jZCAiJGNoYW5n
ZXRvIgotaWYgdGVzdCAtbiAiJFNFQVJDSFBBVEhTIjsgdGhlbgotICBpZiBbICIkTE9DQUxV
U0VSIiAhPSAiIiBdOyB0aGVuCi0gICAgIyA6IEExCi0gICAgc3UgJExPQ0FMVVNFUiBgc2Vs
ZWN0X3NoZWxsICRMT0NBTFVTRVJgIC1jIFwKLSAgICAiJGZpbmQgJFNFQVJDSFBBVEhTICRG
SU5ET1BUSU9OUyBcCi0gICAgIFxcKCAkcHJ1bmVmc19leHAgXAotICAgICAtdHlwZSBkIC1y
ZWdleCAnJFBSVU5FUkVHRVgnIFxcKSAtcHJ1bmUgLW8gJHByaW50X29wdGlvbiIKLSAgZWxz
ZQotICAgICMgOiBBMgotICAgICRmaW5kICRTRUFSQ0hQQVRIUyAkRklORE9QVElPTlMgXAot
ICAgICBcKCAkcHJ1bmVmc19leHAgXAotICAgICAtdHlwZSBkIC1yZWdleCAiJFBSVU5FUkVH
RVgiIFwpIC1wcnVuZSAtbyAkcHJpbnRfb3B0aW9uCi0gIGZpCi1maQotCi1pZiB0ZXN0IC1u
ICIkTkVUUEFUSFMiOyB0aGVuCi1teXVpZD1gZ2V0dWlkYAotaWYgWyAiJG15dWlkIiA9IDAg
XTsgdGhlbgotICAgICMgOiBBMwotICAgIHN1ICRORVRVU0VSIGBzZWxlY3Rfc2hlbGwgJE5F
VFVTRVJgIC1jIFwKLSAgICAgIiRmaW5kICRORVRQQVRIUyAkRklORE9QVElPTlMgXFwoIC10
eXBlIGQgLXJlZ2V4ICckUFJVTkVSRUdFWCcgLXBydW5lIFxcKSAtbyAkcHJpbnRfb3B0aW9u
IiB8fAotICAgIGV4aXQgJD8KLSAgZWxzZQotICAgICMgOiBBNAotICAgICRmaW5kICRORVRQ
QVRIUyAkRklORE9QVElPTlMgXCggLXR5cGUgZCAtcmVnZXggIiRQUlVORVJFR0VYIiAtcHJ1
bmUgXCkgLW8gJHByaW50X29wdGlvbiB8fAotICAgIGV4aXQgJD8KLSAgZmkKKyMgV2Ugbm93
IHdyaXRlIHRvIGEgdGVtcG9yYXJ5IHRleHQgZmlsZSBpbnN0ZWFkIG9mIGdvaW5nIGRpcmVj
dCBvdmVyIGEgcGlwZSwgYXMKKyMgdGhlIGxhdHRlciBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3Vs
dCB0byBtb25pdG9yIHByb2dyZXNzIGFuZCB0byBkZWJ1ZyBmYWlsdXJlcy4KK2lmICEgZWNo
byB0ZXN0ID4gJExPQ0FURV9EQi50eHQ7IHRoZW4KKyAgICBzdGRlcnIgIkZhaWxlZCB0byB3
cml0ZSB0byB0ZXh0IGxpc3Qgb2YgZmlsZXMgJExPQ0FURV9EQi50eHQuIgorICAgIGV4aXQg
MQogZmkKLX0gfCAkc29ydCB8ICRmcmNvZGUgJGZyY29kZV9vcHRpb25zID4gJExPQ0FURV9E
Qi5uCisKK2ZhaWxlZF90b19nZW5lcmF0ZV9sb2NhdGVfZGI9MAorCitpZiB7CisgICAgY2Qg
IiRjaGFuZ2V0byIKKyAgICBpZiB0ZXN0IC1uICIkU0VBUkNIUEFUSFMiOyB0aGVuCisgICAg
ICAgIGlmIFsgIiRMT0NBTFVTRVIiICE9ICIiIF07IHRoZW4KKyAgICAgICAgICAgICMgOiBB
MQorICAgICAgICAgICAgc3UgJExPQ0FMVVNFUiBgc2VsZWN0X3NoZWxsICRMT0NBTFVTRVJg
IC1jIFwKKyAgICAgICAgICAgICAgIiRmaW5kICRTRUFSQ0hQQVRIUyAkRklORE9QVElPTlMg
XAorICAgICAgICAgICAgICBcXCggJHBydW5lZnNfZXhwIFwKKyAgICAgICAgICAgICAgLXR5
cGUgZCAtcmVnZXggJyRQUlVORVJFR0VYJyBcXCkgLXBydW5lIC1vICRwcmludF9vcHRpb24i
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgOiBBMgorICAgICAgICAgICAgJGZpbmQg
JFNFQVJDSFBBVEhTICRGSU5ET1BUSU9OUyBcCisgICAgICAgICAgICAgIFwoICRwcnVuZWZz
X2V4cCBcCisgICAgICAgICAgICAgIC10eXBlIGQgLXJlZ2V4ICIkUFJVTkVSRUdFWCIgXCkg
LXBydW5lIC1vICRwcmludF9vcHRpb24KKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgaWYg
dGVzdCAtbiAiJE5FVFBBVEhTIjsgdGhlbgorICAgICAgICBteXVpZD1gZ2V0dWlkYAorICAg
ICAgICBpZiBbICIkbXl1aWQiID0gMCBdOyB0aGVuCisgICAgICAgICAgICAjIDogQTMKKyAg
ICAgICAgICAgIHN1ICRORVRVU0VSIGBzZWxlY3Rfc2hlbGwgJE5FVFVTRVJgIC1jIFwKKyAg
ICAgICAgICAgICAgIiRmaW5kICRORVRQQVRIUyAkRklORE9QVElPTlMgXFwoIC10eXBlIGQg
LXJlZ2V4ICckUFJVTkVSRUdFWCcgLXBydW5lIFxcKSAtbyAkcHJpbnRfb3B0aW9uIiB8fAor
ICAgICAgICAgICAgICBleGl0ICQ/CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgOiBB
NAorICAgICAgICAgICAgJGZpbmQgJE5FVFBBVEhTICRGSU5ET1BUSU9OUyBcKCAtdHlwZSBk
IC1yZWdleCAiJFBSVU5FUkVHRVgiIFwKKyAgICAgICAgICAgICAgLXBydW5lIFwpIC1vICRw
cmludF9vcHRpb24gfHwKKyAgICAgICAgICAgIGV4aXQgJD8KKyAgICAgICAgZmkKKyAgICBm
aQorfSA+ICRMT0NBVEVfREIudHh0CiB0aGVuCi0gICAgOiBPSyBzbyBmYXIKLSAgICB0cnVl
CisgICAgIyBPSywgZmluZCBjb21wbGV0ZWQuICBHb2luZyB0aHJvdWdoIGFsbCB0aGUgZmls
ZXMgaXMgdmVyeSB0aW1lLWNvbnN1bWluZyAKKyAgICAjIG9uIHNvbWUgc3lzdGVtcywgc28g
KHRyeSB0bykgc2F2ZSBhIGNvcHkgb2YgdGhlIHByZXZpb3VzIERCIGluIGNhc2UKKyAgICAj
IHNvbWV0aGluZyBnb2VzIHdyb25nIGF0IHRoaXMgcG9pbnQuCisgICAgY3AgLWZwICRMT0NB
VEVfREIgJExPQ0FURV9EQi5wcmV2CisKKyAgICAjIE5vdyBzb3J0IHJlc3VsdHMsIGNhc2Ut
aW5zZW5zaXRpdmVseSBmb3IgdXNlciBjb252ZW5pZW5jZSwgdGhlbiBnZW5lcmF0ZQorICAg
ICMgdGhlIG5ldyBEQi4KKyAgICBpZiAhICRzb3J0IC1mICRMT0NBVEVfREIudHh0ID4gJExP
Q0FURV9EQi50eHQuc29ydDsgdGhlbgorICAgICAgICBmYWlsZWRfcmV0dXJuX3ZhbHVlPSQ/
CisgICAgICAgIGZhaWxlZF90b19nZW5lcmF0ZV9sb2NhdGVfZGI9MQorICAgIGVsaWYgISAk
ZnJjb2RlICRmcmNvZGVfb3B0aW9ucyA8ICRMT0NBVEVfREIudHh0LnNvcnQgPiAkTE9DQVRF
X0RCLm47IHRoZW4KKyAgICAgICAgZmFpbGVkX3JldHVybl92YWx1ZT0kPworICAgICAgICBm
YWlsZWRfdG9fZ2VuZXJhdGVfbG9jYXRlX2RiPTEKKyAgICBmaQogZWxzZQotICAgIHJ2PSQ/
Ci0gICAgZWNobyAiRmFpbGVkIHRvIGdlbmVyYXRlICRMT0NBVEVfREIubiIgPiYyCisgICAg
ZmFpbGVkX3RvX2dlbmVyYXRlX2xvY2F0ZV9kYj0xCitmaQorCitpZiBbICRmYWlsZWRfdG9f
Z2VuZXJhdGVfbG9jYXRlX2RiIC1lcSAxIF07IHRoZW4KKyAgICBzdGRlcnIgIkZhaWxlZCB0
byBnZW5lcmF0ZSBuZXcgZGF0YWJhc2UgdGVtcCBmaWxlICRMT0NBVEVfREIubi4iCiAgICAg
cm0gLWYgJExPQ0FURV9EQi5uCi0gICAgZXhpdCAkcnYKKyAgICBleGl0ICRmYWlsZWRfcmV0
dXJuX3ZhbHVlCiBmaQogCi0jIFRvIGF2b2lkIGJyZWFraW5nIGxvY2F0ZSB3aGlsZSB0aGlz
IHNjcmlwdCBpcyBydW5uaW5nLCBwdXQgdGhlCisjIFRvIGF2b2lkIGJyZWFraW5nIGxvY2F0
ZSB3aGlsZSB0aGlzIHNjcmlwdCBpcyBydW5uaW5nLCB3ZSBwdXQgdGhlCiAjIHJlc3VsdHMg
aW4gYSB0ZW1wIGZpbGUsIHRoZW4gcmVuYW1lIGl0IGF0b21pY2FsbHkuCiBpZiB0ZXN0IC1z
ICRMT0NBVEVfREIubjsgdGhlbgotICBjaG1vZCA2NDQgJHtMT0NBVEVfREJ9Lm4KLSAgbXYg
JHtMT0NBVEVfREJ9Lm4gJExPQ0FURV9EQgorICAgIGNobW9kIDY0NCAkTE9DQVRFX0RCLm4K
KyAgICBtdiAtZiAkTE9DQVRFX0RCLm4gJExPQ0FURV9EQgogZWxzZQotICBlY2hvICJ1cGRh
dGVkYjogbmV3IGRhdGFiYXNlIHdvdWxkIGJlIGVtcHR5IiA+JjIKLSAgcm0gLWYgJExPQ0FU
RV9EQi5uCisgICAgc3RkZXJyICJOZXcgZGF0YWJhc2Ugd291bGQgYmUgZW1wdHksIHNvIG5v
dCBjcmVhdGluZyBpdC4iCisgICAgcm0gLWYgJExPQ0FURV9EQi5uCiBmaQotCi1leGl0IDAK


--------------Rc0dG5cqRTsWqdOiM0eF20FW
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

--------------Rc0dG5cqRTsWqdOiM0eF20FW--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019