From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Sat Aug 1 00:31:24 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 31 Jul 1998 19:31:24 -0400 (EDT) Subject: [Mailman-Developers] Reposting Form Data Message-ID: <13762.21452.924625.782129@anthem.cnri.reston.va.us> Maybe someone out there with more HTTP experience than me can answer this question. If I have a CGI script that issues a redirect using the `Location:' header, I can get the Web browser to go to the relocated page with no problem. It even still shows the original URL in browser. Cool so far. However, if what I'm doing is posting some form data, the browser gets redirected, but the form data doesn't get reposted to the new URL. Verified under NS4/Unix and IE3. This is a real pain for something I'm trying to add to Mailman. I'm sure there's some haughty security justification for the non-reposting of form data, so the natural question is: can I get around this? :-) Thanks, -Barry From fleck@informatik.uni-bonn.de, bwarsaw@CNRI.Reston.Va.US Sat Aug 1 00:59:28 1998 From: fleck@informatik.uni-bonn.de, bwarsaw@CNRI.Reston.Va.US (Markus Fleck) Date: Sat, 01 Aug 1998 01:59:28 +0200 Subject: [Mailman-Developers] Re: [Mailman-Users] Reposting Form Data References: <13762.21452.924625.782129@anthem.cnri.reston.va.us> Message-ID: <35C25A60.6361@informatik.uni-bonn.de> Barry A. Warsaw wrote: > [Redirecting POST] > I'm sure there's some haughty security justification for the > non-reposting of form data, so the natural question is: can I get > around this? :-) I don't think so. You either have to post to the "other" URL yourself in the CGI script (eek), or try to attach your parameters, URL-encoded, to the URL (as a GET request). The latter aproach looks ugly in browsers (and might reveal passwords in clear text), and the former might be a security problem (if access to the "other" CGI script is restricted). OTOH, if you're on the same server, you could just exec (or "import") the "other" CGI script directly from the local file system. I don't think that there is a portable way to redirect POSTs. Yours, Markus. From dragondm@delta.integral.org Mon Aug 3 13:39:36 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Mon, 3 Aug 1998 07:39:36 -0500 (CDT) Subject: [Mailman-Developers] Little password tweak... Message-ID: I've been poking 'round 1.0b5.. I've got stuff that I'll be working on, but first I'd thought I'd submit this. It's just a really simple little mnemnonic password generator. Ive been using it fer months on my much-hacked up 1.0b1 install (which should be retiering soon), and it's just a little niceity. Basically, what ye do, is, if ye install the following module, and apply this patch, afterward, instead of your list subscribers getting passwords like 'lPg_' when mailman assigns a password (like during a mass subscribe, or email sub w/ no password supplied), they get passwords like 'cold-blue-tiger', or similar. ----Begin PassGen.py ----- import string, whrandom # this generates (hopefully) easy to remember random passwords -ddm passphrase = [ [ "hot", "cold" , "warm" , "tall", "short", "wide" , "thin", "heavy", "light", "fast" ,"slow", "wet", "dry", "furry", "scaled", "smart", "dumb", "happy", "sad", "sly", "bouncy", "sleepy", "early" ,"late", "wise" ], [ "red", "orange", "yellow", "green", "blue", "violet" , "white", "black", "grey" , "brown", "tan", "silver", "gold", "aqua", "pink" , "navy", "azure","plaid", "paisley", "beige", "clear", "copper" ], [ "dragon", "gryphon", "centaur", "faun", "wolf", "fox" ,"bear", "eagle", "lizard", "newt", "fish", "snake", "horse", "unicorn", "deer", "dog", "cat", "lion", "puma", "rat", "mouse", "racoon", "badger","gopher", "seal", "whale", "mule", "walrus", "otter","turtle", "zebra", "tiger", "dingo" ,"koala", "kangaroo", "dinosaur", "pegasus", "bigfoot", "beaver", "possum", "skunk", "hawk", "orca", "panda", "raven" ] ] rgen= whrandom.whrandom() def RandomPhrase(): """Generates random, AOL-style passphrases. """ p=[] for each in passphrase: p.append(rgen.choice(each)) return string.join(p,"-") ----End PassGen.py ----- ----Begin patch -------- diff -c -r /tmp/mailman-1.0b5/Mailman/Cgi/admin.py Mailman/Cgi/admin.py *** Mailman/Cgi/admin.py Mon Jul 27 17:48:31 1998 --- Mailman/Cgi/admin.py Mon Aug 3 06:31:12 1998 *************** *** 27,32 **** --- 27,34 ---- import paths # path hacking from Mailman import Utils, MailList, Errors, MailCommandHandler from Mailman import Cookie + from Mailman import PassGen + from Mailman.htmlformat import * from Mailman.Crypt import crypt from Mailman import mm_cfg *************** *** 711,718 **** if not lst.nondigestable: digest = 1 try: ! lst.ApprovedAddMember(new_name, (Utils.GetRandomSeed() + ! Utils.GetRandomSeed()), digest) subscribe_success.append(new_name) except Errors.MMAlreadyAMember: subscribe_errors.append((new_name, 'Already a member')) --- 713,719 ---- if not lst.nondigestable: digest = 1 try: ! lst.ApprovedAddMember(new_name, PassGen.RandomPhrase(), digest) subscribe_success.append(new_name) except Errors.MMAlreadyAMember: subscribe_errors.append((new_name, 'Already a member')) diff -c -r /tmp/mailman-1.0b5/Mailman/MailCommandHandler.py Mailman/MailCommandHandler.py *** Mailman/MailCommandHandler.py Mon Jul 27 17:48:31 1998 --- Mailman/MailCommandHandler.py Mon Aug 3 06:51:54 1998 *************** *** 29,35 **** import mm_cfg import Utils import Pending ! option_descs = { 'digest' : 'receive mail from the list bundled together instead of ' --- 29,35 ---- import mm_cfg import Utils import Pending ! import PassGen option_descs = { 'digest' : 'receive mail from the list bundled together instead of ' *************** *** 413,420 **** address = "" done_digest = 0 if not len(args): ! password = "%s%s" % (Utils.GetRandomSeed(), ! Utils.GetRandomSeed()) elif len(args) > 3: self.AddError("Usage: subscribe [password] " "[digest|nodigest] [address=]") --- 413,419 ---- address = "" done_digest = 0 if not len(args): ! password = PassGen.RandomPhrase() elif len(args) > 3: self.AddError("Usage: subscribe [password] " "[digest|nodigest] [address=]") *************** *** 437,444 **** "[address=]") return if not password: ! password = "%s%s" % (Utils.GetRandomSeed(), ! Utils.GetRandomSeed()) if not address: pending_addr = mail.GetSender() else: --- 436,442 ---- "[address=]") return if not password: ! password = PassGen.RandomPhrase() if not address: pending_addr = mail.GetSender() else: ----End patch -------- -The Dragon De Monsyne From cklempay@acm.jhu.edu Mon Aug 3 18:37:30 1998 From: cklempay@acm.jhu.edu (Corbett J. Klempay) Date: Mon, 3 Aug 1998 13:37:30 -0400 (EDT) Subject: [Mailman-Developers] Odd b5 behavior Message-ID: I've been having this problem for a few days, and I am just trying to find out if anyone else here is experiencing a similar phenomenon (so that maybe I'll get lucky and talk to you and figure out what the story is): - 1.0b5 + sendmail 8.9.1 - RH Linux 5.1 (if you need more info, it's also http://www2.acm.jhu.edu -- there's lots of stuff there) There was some weirdness with permissions being set wrong with Linux + b5, but Barry issued a patch in about 2 seconds flat that cleared that one up. The current problem is that I have several lists set up, but if you send mail to them (like test@acm.jhu.edu), your mail is swallowed into a bottomless pit...it never sees the light of day again. If you look at /var/log/maillog, it claims the mail has been sent. Users have that they did get their monthly password reminder from Mailman itself, however. I don't think this is really something misconfigured with sendmail on my end; this same setup was chugging right along with 1.0b4 until I tried to switch. ------------------------------------------------------------------------------- Corbett J. Klempay Quote of the Week: http://www2.acm.jhu.edu/~cklempay "Money is the root of all good." PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 ------------------------------------------------------------------------------- From klm@python.org Mon Aug 3 19:00:11 1998 From: klm@python.org (Ken Manheimer) Date: Mon, 3 Aug 1998 14:00:11 -0400 (EDT) Subject: [Mailman-Developers] Odd b5 behavior In-Reply-To: Message-ID: Corbett, i've been hoping to find a minute to look into this behavior - i may be able to get to it later today. In the meanwhile, please check for any relevant entries in your ~mailman/logs/errors log file, and if there are any, send copies to me. And let me see if i understand correctly - you say that /var/log/maillog indicates that your sendmail sent the messages to the users, but the users never see them? This would suggest that the messages *really* foul up the receiving side - and that brings one possibilty to mind. There is a known bug in some recent versions of sendmail (8.8.x for some x, and 8.9.0) such that the sendmail will core dump when attempting to deliver mailman's (or any 8-bit encoded) Mime-format digests in certain (somewhat uncommon) circumstances. The question then is, were the messages that never appeared in the users mailbox Mime digests? And if not, could you construct a repeatable test that at least reduces the likelihood that the problem is on the receiving ends? For that matter, might you happen to be running sendmail 8.8.x or 8.9.0? Your sendmail may be getting so far as negotiating the delivery and then failing partway through... With the info available currently it's hard to know what of mailman to investigate on this end, since mailman evidently got the messages to your MTA. Ken Manheimer klm@python.org 703 620-8990 x268 (orporation for National Research |nitiatives # If you appreciate Python, consider joining the PSA! # # . # From janne@avocado.pc.helsinki.fi Mon Aug 3 19:09:12 1998 From: janne@avocado.pc.helsinki.fi (Janne Sinkkonen) Date: 03 Aug 1998 21:09:12 +0300 Subject: [Mailman-Developers] Odd b5 behavior In-Reply-To: Ken Manheimer's message of "Mon, 3 Aug 1998 14:00:11 -0400 (EDT)" References: Message-ID: Ken Manheimer writes: > There is a known bug in some recent versions of sendmail (8.8.x for some > x, and 8.9.0) such that the sendmail will core dump when attempting to > deliver mailman's (or any 8-bit encoded) Mime-format digests in certain > (somewhat uncommon) circumstances. The question then is, were the > messages that never appeared in the users mailbox Mime digests? And if > not, could you construct a repeatable test that at least reduces the > likelihood that the problem is on the receiving ends? For that matter, > might you happen to be running sendmail 8.8.x or 8.9.0? Your sendmail > may be getting so far as negotiating the delivery and then failing > partway through... He should check his mail spool. If sendmail dies, it leaves the undelivered message to the spool, which then starts to gradually grow. When I had a broken sendmail, most of the messages still went through. -- Janne From Corbett J. Klempay" Message-ID: Ken & company: More info...to correct myself earlier on the sendmail logs (and to be precise), I sent a test message (no MIME, just a 1 sentence text message) to one of our small lists (it's the list shown at http://www2.acm.jhu.edu/mailman/listinfo/tm). Sending out that message generated the below entries in /var/log/maillog: Aug 3 14:04:36 chimera sendmail[15085]: OAA15085: from=, size=657, class=0, pri=30657, nrcpts=1, msgid=, proto=SMTP, relay=cklempay@localhost Aug 3 14:04:36 chimera sendmail[15086]: OAA15086: clone OAA15085, owner=tm-admin Aug 3 14:04:37 chimera sendmail[15086]: OAA15086: to=|"/home/mailman/mail/wrapper post tm", delay=00:00:01, xdelay=00:00:01, mailer=prog, stat=Sent As for ~mailman/logs/errors...there is no such file in that directory (so no recorded errors, I guess). I'm running sendmail 8.9.1. All of the previous messages I tried were simple text messages (with whole bodies of things like "Holler if ya hear me"). ------------------------------------------------------------------------------- Corbett J. Klempay Quote of the Week: http://www2.acm.jhu.edu/~cklempay "Money is the root of all good." PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 ------------------------------------------------------------------------------- From janne@avocado.pc.helsinki.fi Mon Aug 3 19:38:44 1998 From: janne@avocado.pc.helsinki.fi (Janne Sinkkonen) Date: 03 Aug 1998 21:38:44 +0300 Subject: [Mailman-Developers] Re: [Mailman-Users] Re: [Mailman-Developers] Odd b5 behavior In-Reply-To: "Corbett J. Klempay"'s message of "Mon, 3 Aug 1998 14:12:31 -0400 (EDT)" References: Message-ID: "Corbett J. Klempay" writes: > How do I check? Is this what I see when I do mailq? If that's it, it's > empty. Ok. > > When I had a broken sendmail, most of the messages still went through. > > I don't know that my sendmail is really broken..it works with b4, and all > of our non-mailman mail is running smoothly. At least the MIME bug is not your problem, since it doesn't exist in 8.9.1. (BTW, practically all of our non-mailman mail ran smoothly as well, so that's not an indicator of anything.) To see whether the mail really goes to the MTA, change the logging level of sendmail high enough (if it isn't). That's just the 'O' thing in sendmail.cf - it is easy to edit manually. -- Janne From root@chronis.icgroup.com Mon Aug 3 20:19:05 1998 From: root@chronis.icgroup.com (root) Date: Mon, 3 Aug 1998 15:19:05 -0400 Subject: [Mailman-Developers] confirmation duplicates and stuff Message-ID: <19980803151905.54813@chronis.icgroup.com> there's a quick and easy fix to the confirmation duplicates bug. in the file MailCommandHandler.py, at the end of the definition of the ProcessConfirmCommand method, add "self.__NoMailCmdResponse = 1". This will cause the confirmation handler to either send out only the welcome to the list message, or only the error message if there is one. I also noticed that listed under Bugs at www.list.org was the fact that confirmations where always called, even when the subscribing address has to be approved administratively. I'd like to point out that the confirmatin step does not take place when a memeber is subscribed via the admin/membership management cgi. However, I believe it does when someone subscribes to a closed list via mail. I thought that we had all pretty much stated that we always wanted confirmations to happen, but i guess not, seeing how this is listed as a bug. i can see how it could be inconvenient. The question is: what do we do about this? do we: 1) drop the confirmation step completely when a list has closed subscriptions? or 2) make the confirmation step an option only for closed subscriptions? #1 is FAR simpler to implement because it doesn't involve any changes to the cgi admin interface. #2 would require a good bit of changes to the interface: either only presenting the confirmation as an option when the list is closed, or allowing it as an option and presenting an error if anyone chooses not have confirmations for an open list. thoughts? scott From klm@python.org Mon Aug 3 22:46:03 1998 From: klm@python.org (Ken Manheimer) Date: Mon, 3 Aug 1998 17:46:03 -0400 (EDT) Subject: [Mailman-Developers] Sendmail.cf wizard question - virtual-hosting Message-ID: <13766.9360.336144.362732@glyph.cnri.reston.va.us> I have a question for any sendmail.cf wizards out there - a hack to a recent cf ruleset (mine is from 8.9.0) to circumvent what i consider a bug, or at least a misfeature, that interferes with using sendmail for "virtual hosting". The problem was that no matter what i did (building the cf with masquerading, virtual user, whatever it was), the "to:" header of messages posted to a maillist was always transformed to the primary address of the host where the maillist was situated, even when the original message was addressed to one of the "virtual" host addrs. I eventually poked and prodded in the rulesets (shudder), and discovered that commenting out one rule, which is supposed to use the name server to canonicalize an address, prevents that transformation from happening. (It's part of ruleset 96, which was apparently is "the bottom half of ruleset 3" - boy, i *do not like* touching cf ruleset code!) I've been running this change for a few weeks on my workstation and on python.org, and it doesn't seem to be causing any problems. Even better (:-), it does seem to prevent the unwanted transformation of the original "to:" addresses. However, i don't _really_ know that my change won't disrupt something that isn't exercised on my machines. So i'm hoping that informed sendmail folk out there might be able to do a sanity check on this change. I'm including, below, an artifical diff of the cf file before and after, to show the specific difference, for a sendmail 8.9.0 cf file. Please let me know what you think, if you have some clear knowledge of this stuff! Ken Manheimer klm@python.org 703 620-8990 x268 (orporation for National Research |nitiatives # If you appreciate Python, consider joining the PSA! # # . # *** sendmail.cf 1998/08/03 21:27:06 1.6 --- sendmail.cf 1998/08/03 21:27:17 *************** *** 516,522 **** R$* < @ $+ . . UUCP . > $* $@ $1 < @ $2 . > $3 # pass to name server to make hostname canonical ! R$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4 # local host aliases and pseudo-domains are always canonical R$* < @ $=w > $* $: $1 < @ $2 . > $3 --- 516,524 ---- R$* < @ $+ . . UUCP . > $* $@ $1 < @ $2 . > $3 # pass to name server to make hostname canonical ! # klm - looks like this converts to primary canonical, which transforms ! # e.g. a virtual-hosted "to:" address when we don't want it to be... ! #R$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4 # local host aliases and pseudo-domains are always canonical R$* < @ $=w > $* $: $1 < @ $2 . > $3 From root@chronis.icgroup.com Tue Aug 4 01:38:51 1998 From: root@chronis.icgroup.com (root) Date: Mon, 3 Aug 1998 20:38:51 -0400 Subject: [Mailman-Developers] REQUEST_URI not so reliable Message-ID: <19980803203851.49009@chronis.icgroup.com> I just helped a friend put mailman on a linux box that was running a slightly old version of redhat (4.X??) which in turn came with apache version 1.1.3. It appears that with that version of apache, the REQUEST_URI environmental variable is not set for transactions to the localhost. this was causing the admin cgi to always return to the AdminOverview page. because there was a line in admin.py that formated the admlogin.txt template with this dict: dict = { ... "path": os.environ.get("REQUEST_URI", "/mailman/admin") ... } I upgraded his server so other things wouldn't break, but if we want to make mailman work for that (granted ancient) version of apache, the fix for this script was to replace the above with dict = {... "path": os.environ.get("REQUEST_URI", "mailman/admin/" + list_name) .... } there may be other places that use that, like private, listinfo, etc. scott From dragondm@delta.integral.org Tue Aug 4 03:05:52 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Mon, 3 Aug 1998 21:05:52 -0500 (CDT) Subject: [Mailman-Developers] Sendmail.cf wizard question - virtual-hosting In-Reply-To: <13766.9360.336144.362732@glyph.cnri.reston.va.us> Message-ID: On Mon, 3 Aug 1998, Ken Manheimer wrote: > I have a question for any sendmail.cf wizards out there - a hack to a > recent cf ruleset (mine is from 8.9.0) to circumvent what i consider a > bug, or at least a misfeature, that interferes with using sendmail for > "virtual hosting". > > The problem was that no matter what i did (building the cf with > masquerading, virtual user, whatever it was), the "to:" header of > messages posted to a maillist was always transformed to the primary > address of the host where the maillist was situated, even when the > original message was addressed to one of the "virtual" host addrs. I > eventually poked and prodded in the rulesets (shudder), and discovered > that commenting out one rule, which is supposed to use the name server > to canonicalize an address, prevents that transformation from > happening. (It's part of ruleset 96, which was apparently is "the > bottom half of ruleset 3" - boy, i *do not like* touching cf ruleset > code!) Hmmmm... I have a Debian linux system with Sendmail 8.8.5 on it, and I actually have this working. I didn't have to change the sendmail.cf by hand, tho. My cf is generated by the sendmailconfig tool that comes with debian (tho' I do grok sendmail.cf's reasonabally well), which uses M4. The keys to getting this to work are: 1) use the limited_masquerade feature (see sendmail.org website) 2) the vhost name must be in class w (i.e. in the sendmail.cw file, usually) 3) The major key is your DNS setup. the vhost has to have an Address record, or just an MX. It can't be a CNAME (I think this is spec'ed in the RFC's somewhere. ) -The Dragon De Monsyne From scott@chronis.icgroup.com Tue Aug 4 04:48:30 1998 From: scott@chronis.icgroup.com (Scott) Date: Mon, 3 Aug 1998 23:48:30 -0400 Subject: [Mailman-Developers] password from a tty Message-ID: <19980803234830.47258@chronis.icgroup.com> here's a patch that will get passwords from a tty with echo off for mmsitepass and newlist only if it's possible, otherwise it gets the password the normal, more portable, less secure way. scott diff -c Mailman/Utils.py /home/mm/Mailman/Utils.py *** Mailman/Utils.py Mon Jul 27 18:48:31 1998 --- /home/mm/Mailman/Utils.py Mon Aug 3 23:27:55 1998 *************** *** 429,431 **** --- 429,476 ---- if raw: return template % dict return wrap(template % dict) + + + def getapwtty(prmpt="Password: "): + wrote_prmpt = 0 + try: + import termios, TERMIOS + fd = sys.stdin.fileno() + org = termios.tcgetattr(fd) + new = termios.tcgetattr(fd) + new[3] = new[3] & ~TERMIOS.ECHO + termios.tcsetattr(fd, TERMIOS.TCSANOW, new) + sys.stdout.write(prmpt) + sys.stdout.flush() + wrote_prmpt = 1 + pw = string.strip(raw_input()) + sys.stdout.write("\n") + sys.stdout.flush() + termios.tcsetattr(fd, TERMIOS.TCSAFLUSH, org) + return pw + except: + if wrote_prmpt: + prmpt = "" + pw = string.strip(raw_input(prmtp)) + return pw + + def getpw(): + while 1: + pw1 = getapwtty() + pw2 = getapwtty("Verify: ") + if pw1 == pw2: + break + else: + print "passwords didn't match, try again" + return pw1 + + + + + + + + + + + diff -c bin/mmsitepass /home/mm/bin/mmsitepass *** bin/mmsitepass Mon Jul 27 18:48:31 1998 --- /home/mm/bin/mmsitepass Mon Aug 3 23:32:11 1998 *************** *** 22,38 **** administrator's password can be used, which in turn can be used in most places that a list users password can be used.""" - import sys import paths from Mailman import MailList ! def main(argv): ! if len(sys.argv) != 2: ! print "Usage: mmsitepass password" ! raise SystemExit, 1 l = MailList.MailList() ! l.SetSiteAdminPassword(sys.argv[1]) ! if l.CheckSiteAdminPassword(sys.argv[1]): print "Password changed." raise SystemExit, 0 else: --- 22,36 ---- administrator's password can be used, which in turn can be used in most places that a list users password can be used.""" import paths from Mailman import MailList + from Mailman.Utils import getpw ! def main(): ! print "enter a site password for mailman" ! pw = getpw() l = MailList.MailList() ! if l.CheckSiteAdminPassword(pw): print "Password changed." raise SystemExit, 0 else: *************** *** 40,43 **** raise SystemExit, 1 if __name__ == "__main__": ! main(sys.argv) --- 38,48 ---- raise SystemExit, 1 if __name__ == "__main__": ! main() ! ! ! ! ! ! ! diff -c bin/newlist /home/mm/bin/newlist *** bin/newlist Mon Jul 27 18:48:31 1998 --- /home/mm/bin/newlist Mon Aug 3 23:33:22 1998 *************** *** 71,77 **** if len(argv) > 3: list_pw = argv[3] else: ! list_pw = raw_input("Enter the initial list password: ") newlist = MailList.MailList() pw = crypt(list_pw , Utils.GetRandomSeed()) --- 71,78 ---- if len(argv) > 3: list_pw = argv[3] else: ! print "Please Enter the initial list password." ! list_pw = Utils.getpw() newlist = MailList.MailList() pw = crypt(list_pw , Utils.GetRandomSeed()) From scott@chronis.icgroup.com Wed Aug 5 01:03:26 1998 From: scott@chronis.icgroup.com (Scott) Date: Tue, 4 Aug 1998 20:03:26 -0400 Subject: [Mailman-Developers] run_queue bug Message-ID: <19980804200326.48041@chronis.icgroup.com> run_queue quits with the following traceback whenever i run it with python1.5.1 on an old ret hat linux box :( scott Traceback (innermost last): File "/home/mailman/cron/run_queue", line 31, in ? OutgoingQueue.processQueue() File "/home/mailman/Mailman/OutgoingQueue.py", line 38, in processQueue Utils.TrySMTPDelivery(recip,sender,text,full_fname) File "/home/mailman/Mailman/Utils.py", line 199, in TrySMTPDelivery con = smtplib.SmtpConnection(mm_cfg.SMTPHOST) File "/home/mailman/Mailman/smtplib.py", line 49, in __init__ self.connect() File "/home/mailman/Mailman/smtplib.py", line 54, in connect self._file = self._sock.makefile('r') socket.error: (29, 'Illegal seek') From scott@chronis.icgroup.com Wed Aug 5 02:42:41 1998 From: scott@chronis.icgroup.com (Scott) Date: Tue, 4 Aug 1998 21:42:41 -0400 Subject: [Mailman-Developers] run_queue bug In-Reply-To: <19980804200326.48041@chronis.icgroup.com>; from Scott on Tue, Aug 04, 1998 at 08:03:26PM -0400 References: <19980804200326.48041@chronis.icgroup.com> Message-ID: <19980804214241.47823@chronis.icgroup.com> I don't know all the specifics of why this is happening (seems like some system librarires do a seek while coercing a socket struct to a FILE *?), but the following patch takes use of .makefile() out of smtplib.py and fixes the problem. scott *** /home/mailman/Mailman/smtplib.py Tue Aug 4 00:05:27 1998 --- /home/scott/smtplib.py Tue Aug 4 21:36:19 1998 *************** *** 45,57 **** class SmtpConnection: def __init__(self, host=''): self.host = host - self._file = None self.connect() def connect(self): self._sock = socket(AF_INET, SOCK_STREAM) self._sock.connect(self.host, SMTP_PORT) - self._file = self._sock.makefile('r') self.getresp() def helo(self, host): --- 45,55 ---- *************** *** 103,109 **** # Private crap from here down. def getline(self): ! line = self._file.readline() if not line: raise EOFError if line[-2:] == CRLF: line = line[:-2] elif line[-1:] in CRLF: line = line[:-1] --- 101,114 ---- # Private crap from here down. def getline(self): ! line = "" ! while 1: ! c = self._sock.recv(1) ! if not c: ! break ! line = line + c ! if c == "\n": ! break if not line: raise EOFError if line[-2:] == CRLF: line = line[:-2] elif line[-1:] in CRLF: line = line[:-1] On Tue, Aug 04, 1998 at 08:03:26PM -0400, Scott wrote: | | run_queue quits with the following traceback whenever i run it with | python1.5.1 on an old ret hat linux box :( | | scott | | Traceback (innermost last): | File "/home/mailman/cron/run_queue", line 31, in ? | OutgoingQueue.processQueue() | File "/home/mailman/Mailman/OutgoingQueue.py", line 38, in | processQueue | Utils.TrySMTPDelivery(recip,sender,text,full_fname) | File "/home/mailman/Mailman/Utils.py", line 199, in TrySMTPDelivery | con = smtplib.SmtpConnection(mm_cfg.SMTPHOST) | File "/home/mailman/Mailman/smtplib.py", line 49, in __init__ | self.connect() | File "/home/mailman/Mailman/smtplib.py", line 54, in connect | self._file = self._sock.makefile('r') | socket.error: (29, 'Illegal seek') | | _______________________________________________ | Mailman-Developers maillist - Mailman-Developers@python.org | http://www.python.org/mailman/listinfo/mailman-developers | From scott@chronis.icgroup.com Wed Aug 5 02:46:27 1998 From: scott@chronis.icgroup.com (Scott) Date: Tue, 4 Aug 1998 21:46:27 -0400 Subject: [Mailman-Developers] run_queue bug In-Reply-To: <19980804200326.48041@chronis.icgroup.com>; from Scott on Tue, Aug 04, 1998 at 08:03:26PM -0400 References: <19980804200326.48041@chronis.icgroup.com> Message-ID: <19980804214627.21810@chronis.icgroup.com> Now that i got this working, there's a permissions bug in the mail queue system: my mailqueue looks like this: -rw------- 1 root mailman 1515 Aug 4 19:25 mm_q.2 -rw------- 1 nobody mailman 230 Aug 4 19:59 mm_q.3 -rw------- 1 www mailman 1360 Aug 4 20:12 mm_q.4 so when run_queue runs as user mailman, it can't open the files. I think it got those ownerships from root running newlist, from subscribing someone from the web, and from vmailer doing the delivery to a mailcmd as user nobody. Shouldn't they be made g+rw? scott On Tue, Aug 04, 1998 at 08:03:26PM -0400, Scott wrote: | | run_queue quits with the following traceback whenever i run it with | python1.5.1 on an old ret hat linux box :( | | scott | | Traceback (innermost last): | File "/home/mailman/cron/run_queue", line 31, in ? | OutgoingQueue.processQueue() | File "/home/mailman/Mailman/OutgoingQueue.py", line 38, in | processQueue | Utils.TrySMTPDelivery(recip,sender,text,full_fname) | File "/home/mailman/Mailman/Utils.py", line 199, in TrySMTPDelivery | con = smtplib.SmtpConnection(mm_cfg.SMTPHOST) | File "/home/mailman/Mailman/smtplib.py", line 49, in __init__ | self.connect() | File "/home/mailman/Mailman/smtplib.py", line 54, in connect | self._file = self._sock.makefile('r') | socket.error: (29, 'Illegal seek') | | _______________________________________________ | Mailman-Developers maillist - Mailman-Developers@python.org | http://www.python.org/mailman/listinfo/mailman-developers | From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Wed Aug 5 23:56:14 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Wed, 5 Aug 1998 18:56:14 -0400 (EDT) Subject: [Mailman-Developers] Experimental remote CVS repository Message-ID: <13768.58126.479940.336421@anthem.cnri.reston.va.us> Hi all, I think I finally have a publically accessible read-only remote CVS repository available to y'all. I say "experimental" because I'm not 100% sure it's working, so please try it out. Note that this will keep you on the absolute bleeding edge because syncs are done to the repository on every check-in. Also, by tomorrow or so I hope we'll have a Mailman mailing list you can join to get CVS checkin messages. That's not quite running yet. I may also try to get CVSweb access and remote rsync access if time allows and there is enough demand (and I can polish off my very dusty Perl manual :-). For now, here's what you need to do to check out a copy of the Mailman source code: % cvs -d :pserver:anoncvs@cvs.python.org:/projects/cvsroot login [password is `anoncvs'] % cvs -d :pserver:anoncvs@cvs.python.org:/projects/cvsroot co mailman After that, you don't need to specify a CVSROOT while inside the mailman directory. Please let me know how it goes. -Barry From klm@python.org Thu Aug 6 00:09:59 1998 From: klm@python.org (Ken Manheimer) Date: Wed, 5 Aug 1998 19:09:59 -0400 (EDT) Subject: [Mailman-Developers] Odd b5 behavior In-Reply-To: Message-ID: I've identified the reason for the problem corbett was having, and have a workaround. The problem appears to be another linux-specific item, having to do with the apparent fact that effective gid's are not inherited by forked processes. I'd be curious to get the scoop on this from any linux gurus out there. Corbett was seeing mail submissions completely disappearing - making it to the maillist, but never showing up, without any logged error messages. The failure was happening when the new delivery mechanism was attempting to place the messages on the outgoing queue. The data directory was writable by mailman, and the mail wrapper executable forks and execs the maillist script with the mailman effective group id. However, the delivery mechanism runs in a subsequently forked process of the maillist script - and apparently, forked processes (at least, forked scripts) in linux do *not* inherit the effective group id - contrary to the practice on other unices. Linux folk, is this correct? The immediate workaround for those of you running mailman 1.0b5 under linux is to fiddle with the ownership of the ~mailman/data directory a bit: set the owner id to 'mail' (or whatever your mail process runs with), make sure the group id is 'mailman', and make sure that it enables user and group write. The real question, though, is whether there is any way in linux to enable forked processes, even scripts, to inherit the effective gid of the forking script. Any obscure system call for that, or something, which requires only membership in the group, not root privileges, to run? It might make sense for the installation mechanism to change the owner of the data dir to that of the mail system, as the workaround does - but that would sacrifice the ability to do that part of the installation process as a regular user - root privilege is needed to chown. So this solution does not seem ideal. There are other avenues, but we could need to get the last word on the way that (redhat 5.x) linux is supposed to be working, and what people normally to do achieve the kinds of things we're aiming for. Insight and suggestions are welcome! Ken Manheimer klm@python.org 703 620-8990 x268 (orporation for National Research |nitiatives # If you appreciate Python, consider joining the PSA! # # . # From cklempay@acm.jhu.edu Thu Aug 6 03:29:20 1998 From: cklempay@acm.jhu.edu (Corbett J. Klempay) Date: Wed, 5 Aug 1998 22:29:20 -0400 (EDT) Subject: [Mailman-Developers] Double-sends Message-ID: Heheh......now that Ken finished fixing the list, I forget...did anyone ever find out what was causing the multiple-send problem? I think I just experienced a double-send on my first 'welcome back to a working list server' message to one of my lists.... ------------------------------------------------------------------------------- Corbett J. Klempay Quote of the Week: http://www2.acm.jhu.edu/~cklempay "Money is the root of all good." PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 ------------------------------------------------------------------------------- From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Fri Aug 7 17:16:02 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 7 Aug 1998 12:16:02 -0400 (EDT) Subject: [Mailman-Developers] password from a tty References: <19980803234830.47258@chronis.icgroup.com> Message-ID: <13771.10306.597033.81511@anthem.cnri.reston.va.us> >>>>> "S" == Scott writes: S> here's a patch that will get passwords from a tty with echo S> off for mmsitepass and newlist only if it's possible, otherwise S> it gets the password the normal, more portable, less secure S> way. Why would you not want to use the Python standard getpass module? -Barry From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Fri Aug 7 17:17:28 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 7 Aug 1998 12:17:28 -0400 (EDT) Subject: [Mailman-Developers] password from a tty References: <19980803234830.47258@chronis.icgroup.com> <13771.10306.597033.81511@anthem.cnri.reston.va.us> Message-ID: <13771.10392.798542.460484@anthem.cnri.reston.va.us> >>>>> "BAW" == Barry A Warsaw writes: BAW> Why would you not want to use the Python standard getpass BAW> module? Oops, should have mentioned that I changed newlist and mmsitepass to use getpass.getpass(). -Barry From Nagy Balazs Fri Aug 7 21:50:59 1998 From: Nagy Balazs (Nagy Balazs) Date: Fri, 7 Aug 1998 22:50:59 +0200 (CEST) Subject: [Mailman-Developers] multiple delivery (answer) In-Reply-To: <13771.10306.597033.81511@anthem.cnri.reston.va.us> Message-ID: Hiyas, I've caught the multiple delivery bug: if processQueue() runs while another processQueue() is running, the delivery will have messed up (== multiple delivery). BTW where can I find the package's configure.in file? It can be very helpful. -- hacker: /n./ One who enjoys the intellectual challenge of creatively overcoming or circumventing limitations. PGP 0x1DE3631D / A8 B4 92 EE 1F 55 27 C8 86 64 9C 42 41 A4 BD B8 From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Fri Aug 7 22:25:48 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 7 Aug 1998 17:25:48 -0400 (EDT) Subject: [Mailman-Developers] multiple delivery (answer) References: <13771.10306.597033.81511@anthem.cnri.reston.va.us> Message-ID: <13771.28892.217748.173322@anthem.cnri.reston.va.us> >>>>> "NB" == Nagy Balazs writes: NB> I've caught the multiple delivery bug: if processQueue() runs NB> while another processQueue() is running, the delivery will NB> have messed up (== multiple delivery). Thanks for the clue. Hopefull one of us will get time to look at this very soon. NB> BTW where can I find the package's configure.in file? It can NB> be very helpful. Is it not distributed in the 1.0b5 tarball? Darn. Well, this is your chance to try out the read-only anoncvs access I sent a message out about. You can definitely get that file through CVS. -Barry From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Fri Aug 7 22:42:35 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 7 Aug 1998 17:42:35 -0400 (EDT) Subject: [Mailman-Developers] run_queue bug References: <19980804200326.48041@chronis.icgroup.com> <19980804214241.47823@chronis.icgroup.com> Message-ID: <13771.29899.11496.593870@anthem.cnri.reston.va.us> >>>>> "S" == Scott writes: S> I don't know all the specifics of why this is happening (seems S> like some system librarires do a seek while coercing a socket S> struct to a FILE *?), but the following patch takes use of S> .makefile() out of smtplib.py and fixes the problem. It would be interesting to know if Python 1.5.2's smtplib.py suffers the same fate in it's getreply() method? One of the things on my to-do list is to convert to using the standard smtplib.py module that Dragon's done a lot of work on, rather than our hacked up version. It also does a makefile(), but in a different place. Could this be another Linux-ism that's biting us? Dragon? -Barry From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Fri Aug 7 22:47:03 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 7 Aug 1998 17:47:03 -0400 (EDT) Subject: [Mailman-Developers] run_queue bug References: <19980804200326.48041@chronis.icgroup.com> <19980804214627.21810@chronis.icgroup.com> Message-ID: <13771.30167.434975.265904@anthem.cnri.reston.va.us> >>>>> "S" == Scott writes: S> so when run_queue runs as user mailman, it can't open the S> files. I think it got those ownerships from root running S> newlist, from subscribing someone from the web, and from S> vmailer doing the delivery to a mailcmd as user nobody. S> Shouldn't they be made g+rw? I'm sure they should (in general Mailman should do all permissions based on group membership). I think all the scripts are going to have to ensure that the umask is at least 002. -Barry From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Fri Aug 7 22:56:08 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 7 Aug 1998 17:56:08 -0400 (EDT) Subject: [Mailman-Developers] REQUEST_URI not so reliable References: <19980803203851.49009@chronis.icgroup.com> Message-ID: <13771.30712.823261.961333@anthem.cnri.reston.va.us> >>>>> "root" == writes: root> dict = {... >> "path": os.environ.get("REQUEST_URI", "mailman/admin/" + list_name) >> .... root> } Thanks Scott, I've made this change in the source. root> there may be other places that use that, like private, root> listinfo, etc. AFAICT, that's the only place that environment variable is accessed. -Barry From scott@chronis.icgroup.com Sat Aug 8 00:56:59 1998 From: scott@chronis.icgroup.com (Scott) Date: Fri, 7 Aug 1998 19:56:59 -0400 Subject: [Mailman-Developers] run_queue bug In-Reply-To: <13771.29899.11496.593870@anthem.cnri.reston.va.us>; from Barry A. Warsaw on Fri, Aug 07, 1998 at 05:42:35PM -0400 References: <19980804200326.48041@chronis.icgroup.com> <19980804214241.47823@chronis.icgroup.com> <13771.29899.11496.593870@anthem.cnri.reston.va.us> Message-ID: <19980807195658.01412@chronis.icgroup.com> On Fri, Aug 07, 1998 at 05:42:35PM -0400, Barry A. Warsaw wrote: | | >>>>> "S" == Scott writes: | | S> I don't know all the specifics of why this is happening (seems | S> like some system librarires do a seek while coercing a socket | S> struct to a FILE *?), but the following patch takes use of | S> .makefile() out of smtplib.py and fixes the problem. | | It would be interesting to know if Python 1.5.2's smtplib.py suffers | the same fate in it's getreply() method? One of the things on my | to-do list is to convert to using the standard smtplib.py module that | Dragon's done a lot of work on, rather than our hacked up version. | It also does a makefile(), but in a different place. | | Could this be another Linux-ism that's biting us? Dragon? i've got mailman running on 3 linux box's now, and only one of them had this problem, it's redhat somethign or other (i inherited this one and don't know off hand) with kernel version 2.0.22 scott From dragondm@delta.integral.org Sun Aug 9 07:59:58 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sun, 9 Aug 1998 01:59:58 -0500 (CDT) Subject: [Mailman-Developers] run_queue bug In-Reply-To: <13771.29899.11496.593870@anthem.cnri.reston.va.us> Message-ID: On Fri, 7 Aug 1998, Barry A. Warsaw wrote: > > >>>>> "S" == Scott writes: > > S> I don't know all the specifics of why this is happening (seems > S> like some system librarires do a seek while coercing a socket > S> struct to a FILE *?), but the following patch takes use of > S> .makefile() out of smtplib.py and fixes the problem. > > It would be interesting to know if Python 1.5.2's smtplib.py suffers > the same fate in it's getreply() method? One of the things on my > to-do list is to convert to using the standard smtplib.py module that > Dragon's done a lot of work on, rather than our hacked up version. > It also does a makefile(), but in a different place. > > Could this be another Linux-ism that's biting us? Dragon? Hm.... Not from what I've seen. The Python smtplib was developed on a linux box, and I've been using it with an earlier version of mailman on the same linux box for 8 months now & I haven't seen this one. It seems fine both on the rather mongrel linux system I use for development, and on my Debian box. -The Dragon De Monsyne From dragondm@delta.integral.org Sun Aug 9 09:02:25 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sun, 9 Aug 1998 03:02:25 -0500 (CDT) Subject: [Mailman-Developers] run_queue bug In-Reply-To: <13771.29899.11496.593870@anthem.cnri.reston.va.us> Message-ID: On Fri, 7 Aug 1998, Barry A. Warsaw wrote: > > >>>>> "S" == Scott writes: > > S> I don't know all the specifics of why this is happening (seems > S> like some system librarires do a seek while coercing a socket > S> struct to a FILE *?), but the following patch takes use of > S> .makefile() out of smtplib.py and fixes the problem. > Oh, one thing I just thought of... If you want to try tracking this down, It might help to know that the socket object's 'makefile ' method is equivilent to this function: def makefile(sock,mode='r',bufsize=-1): fd_sock=sock.fileno() fd=os.dup(fd_sock) sockfile=os.fdopen(fd,mode,bufsize) return sockfile This might tell you something more.. -The Dragon De Monsyne From scott@chronis.icgroup.com Tue Aug 11 20:42:43 1998 From: scott@chronis.icgroup.com (Scott) Date: Tue, 11 Aug 1998 15:42:43 -0400 Subject: [Mailman-Developers] duplicate messages Message-ID: <19980811154243.61320@chronis.icgroup.com> I have a test list set up on a linux box that is regularly sending out 2 copies of messages. The list has 2 subscribers, and inevitably one of the two subscribers (different host names) gets a duplicate message. Which one gets the duplicate appears to be random. If i only have one subscriber, then no duplicates are produced. I poked around the sources a bit and found that if I take out the fork() in this deliver script function, i no longer get duplicates. I don't know why this fork() would create duplicate deliveries, but i am certain that eliminating the call to forker() causes no duplicates to be produced. def ContactTransportForEachGroup(sender, groups, text): if len(groups) == 1: ContactTransport(sender,groups[0],text) return for group in groups: if not forker(): # if we don't fork here, there are no duplicates ContactTransport(sender,group,text) os._exit(0) interestingly enough, the following script never seems to produce duplicates: import os l = [1,2,3,4,5,6,7,8,9] for x in l: if not os.fork(): print x os._exit(0) any help on how to fix this would be greatly appreciated. I am running Linux chronis 2.0.33 #1 Mon Apr 27 22:50:00 EDT 1998 i586 with glibc2.07, python 1.5.1, mailman 1.0b5. scott From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Thu Aug 13 00:40:49 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Wed, 12 Aug 1998 19:40:49 -0400 (EDT) Subject: [Mailman-Developers] Checkin messages now available Message-ID: <13778.10241.353309.492720@anthem.cnri.reston.va.us> Folks, I've created a Mailman mailing list that you can join to get the CVS checkin messages as we make changes to the tree. Please see for details. -Barry From cklempay@acm.jhu.edu Thu Aug 13 02:00:34 1998 From: cklempay@acm.jhu.edu (Corbett J. Klempay) Date: Wed, 12 Aug 1998 21:00:34 -0400 (EDT) Subject: [Mailman-Developers] cvs + cvsweb Message-ID: Just one note: I'd highly recommend the Hans Zeller-modified version of CVSWeb (I thought I remembered one of you guys saying you were going to CVSWeb it)...it's a lot prettier (the diff support is much nicer too)...if you want to see one of what I mean, http://www2.acm.jhu.edu/cgi-bin/cvsweb.cgi ------------------------------------------------------------------------------- Corbett J. Klempay Quote of the Week: http://www2.acm.jhu.edu/~cklempay "There are two things a real man likes - danger and play. And he likes women because she is the most dangerous of playthings." PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 ------------------------------------------------------------------------------- From klm@python.org Thu Aug 13 20:13:18 1998 From: klm@python.org (Ken Manheimer) Date: Thu, 13 Aug 1998 15:13:18 -0400 (EDT) Subject: [Mailman-Developers] duplicate messages In-Reply-To: <19980811154243.61320@chronis.icgroup.com> Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---559023410-1712289374-903035598=:1139 Content-Type: TEXT/PLAIN; charset=US-ASCII Scott and developers, I've got a couple of things to try re the duplicate delivery problem. I suspect it's related to the new queuing mechanism, and also to the linux permissions problem that i unravelled for corbett last week. I suspect it's related because of the sensitivity to forking - and the fact that you're on a linux system. When forking on recent rh linux, you lose the effective UID needed to access the files already written in the queue directory, so the queued files remain around despite being successfully sent. The residual queue files then get processed next time around, yielding the duplicate messages. I don't have the time to verify this, but it sounds like a likely prospect to me. If it is in fact the cause, you might profit from the same workaround as for corbett's posting failure problems - set the ownership of the ~mailman/data directory to 'mail', or whatever ID your MTA runs with, and see if that helps. Alternately, before i went away last week i refined the queuing mechanism a bit to take care of some particular exceptions that can foul the delivery. You might try substituting the following replacements for TrySMTPDelivery() and DeliverToUser() in ~mailman/Mailman/Utils.py, and using the attached version of ~mailman/scripts/contact_transport instead of the installed one, to get some error detection for uncooperative queue files. NOTE that i don't have a vanilla 1.0b5 installation to test these against, so try them a bit at a time - i really can't guarantee that they're compatable, though the interface changes ought to be small enough to be ok... If any of you try these things, please let me know what you find. Ken def DeliverToUser(msg, recipient, add_headers=[]): """Use smtplib to deliver message. Optional argument add_headers should be a list of headers to be added to the message, e.g. for Errors-To and X-No-Archive.""" # We fork to ensure no deadlock. Otherwise, even if sendmail is # invoked in forking mode, if it eg detects a bad address before # forking, then it will try deliver to the errorsto addr *in the # foreground*. If the errorsto happens to be the list owner for a list # that is doing the send - and holding a lock - then the delivery will # hang pending release of the lock - deadlock. if os.fork(): return sender = msg.GetSender() try: try: msg.headers.remove('\n') except ValueError: pass if not msg.getheader('to'): msg.headers.append('To: %s\n' % recipient) for i in add_headers: if i and i[-1] != '\n': i = i + '\n' msg.headers.append(i) text = string.join(msg.headers, '')+ '\n'+ QuotePeriods(msg.body) import OutgoingQueue queue_id = OutgoingQueue.enqueueMessage(sender, recipient, text) TrySMTPDelivery(recipient,sender,text,queue_id) # Just in case there's still something waiting to be sent... OutgoingQueue.processQueue() finally: os._exit(0) def TrySMTPDelivery(recipient, sender, text, queue_entry): import sys, socket import smtplib import OutgoingQueue try: con = smtplib.SmtpConnection(mm_cfg.SMTPHOST) con.helo(mm_cfg.DEFAULT_HOST_NAME) con.send(to=recipient,frm=sender,text=text) con.quit() dequeue = 1 failure = None # Any exceptions that warrant leaving the message on the queue should # be identified by their exception, below, with setting 'dequeue' to 1 # and 'failure' to something suitable. Without a particular exception # we fall through to the blanket 'except:', which dequeues the message. except socket.error: # MTA not responding, or other socket prob - leave on queue. dequeue = 0 failure = sys.exc_info() except: # Unanticipated cause of delivery failure - *don't* leave message # queued, or it may stay, with reattempted delivery, forever... dequeue = 1 failure = sys.exc_info() if dequeue: OutgoingQueue.dequeueMessage(queue_entry) if failure: # XXX Here may be the place to get the failure info back to the # list object, so it can disable the recipient, etc. But how? from Logging.StampedLogger import StampedLogger l = StampedLogger("smtp-failures", "TrySMTPDelivery", immediate=1) l.write("To %s:\n" % recipient) l.write("\t %s / %s\n" % (failure[0], failure[1])) l.flush() ---559023410-1712289374-903035598=:1139 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=contact_transport Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: ~mailman/scripts/contact_transport IyEgL3Vzci9iaW4vZW52IHB5dGhvbg0KIw0KIyBDb3B5cmlnaHQgKEMpIDE5 OTggYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KIw0K IyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yDQojIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyDQojIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIyANCiMgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsDQojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUNCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4NCiMgDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlIA0KIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug LSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLg0KDQoi IiJTZW5kIGEgbWVzc2FnZSB2aWEgbG9jYWwgU01UUCwgb3IgcXVldWUgaXQg aWYgU01UUCBwb3J0IGlzIG5vdCByZXNwb25kaW5nLg0KDQpUaGUgc2NyaXB0 IHRha2VzIHRoZSBmb2xsb3dpbmcgcHJvdG9jb2wgb24gc3RkaW46DQoNCiBs aW5lIFsxXTogc2VuZGVyDQogbGluZSBbMjpuKzFdOiBuIHJlY2lwaWVudHMN CiBsaW5lIFtuKzJdOiA8ZW1wdHk+IC0gZGVsaW1pdGluZyBlbmQgb2YgcmVj aXBpZW50cw0KIGxpbmUgW24rMzpdOiBtZXNzYWdlIGNvbnRlbnQNCiIiIg0K DQppbXBvcnQgc3lzLCBvcw0KaW1wb3J0IHBhdGhzDQoNCiMgWFhYOiB0aGlz IHJlYWxseSBzaG91bGQgYmUgbWVyZ2VkIHdpdGggUHl0aG9uJ3Mgc3RhbmRh cmQgc210cGxpYiBsaWJyYXJ5DQpmcm9tIE1haWxtYW4gaW1wb3J0IG1tX2Nm Zw0KZnJvbSBNYWlsbWFuIGltcG9ydCBzbXRwbGliDQpmcm9tIE1haWxtYW4g aW1wb3J0IFV0aWxzDQpmcm9tIE1haWxtYW4gaW1wb3J0IE91dGdvaW5nUXVl dWUNCg0KZnJvbSBNYWlsbWFuLkxvZ2dpbmcuVXRpbHMgaW1wb3J0IExvZ1N0 ZEVycg0KTG9nU3RkRXJyKCJlcnJvciIsICJjb250YWN0X3RyYW5zcG9ydCIp DQoNCmZyb21fYWRkciA9IHN5cy5zdGRpbi5yZWFkbGluZSgpWzotMV0NCnRv X2FkZHJzICA9IFtdDQp3aGlsZSAxOg0KICAgIGwgPSBzeXMuc3RkaW4ucmVh ZGxpbmUoKVs6LTFdDQogICAgaWYgbm90IGw6DQogICAgICAgIGJyZWFrDQog ICAgdG9fYWRkcnMuYXBwZW5kKGwpDQp0ZXh0ID0gc3lzLnN0ZGluLnJlYWQo KQ0KDQpxdWV1ZV9pZCA9IE91dGdvaW5nUXVldWUuZW5xdWV1ZU1lc3NhZ2Uo ZnJvbV9hZGRyLCB0b19hZGRycywgdGV4dCkNClV0aWxzLlRyeVNNVFBEZWxp dmVyeSh0b19hZGRycywgZnJvbV9hZGRyLCB0ZXh0LCBxdWV1ZV9pZCkNCk91 dGdvaW5nUXVldWUucHJvY2Vzc1F1ZXVlKCkNCg0K ---559023410-1712289374-903035598=:1139-- From klm@python.org Thu Aug 13 21:16:27 1998 From: klm@python.org (Ken Manheimer) Date: Thu, 13 Aug 1998 16:16:27 -0400 (EDT) Subject: [Mailman-Developers] duplicate messages In-Reply-To: Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---559023410-1712289374-903035598=:1139 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: On Thu, 13 Aug 1998, Ken Manheimer wrote: > I've got a couple of things to try re the duplicate delivery problem. I > suspect it's related to the new queuing mechanism, and also to the linux > permissions problem that i unravelled for corbett last week. > [...] > Alternately, before i went away last week i refined the queuing > mechanism a bit to take care of some particular exceptions that can foul > the delivery. You might try substituting the following replacements for > TrySMTPDelivery() and DeliverToUser() in ~mailman/Mailman/Utils.py, and > using the attached version of ~mailman/scripts/contact_transport instead > of the installed one, to get some error detection for uncooperative > queue files. Darn - i attached the wrong version of contact_transport to the previous message - i think that one was unchanged w.r.t. the distributed 1.0b5 one. Attached is my new version, with additional logging to notice an unwritable queue dir... Ken again. ---559023410-1712289374-903035598=:1139 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=r Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: *new* version of ~mailman/scripts/contact_transport IyEgL3Vzci9iaW4vZW52IHB5dGhvbg0KIw0KIyBDb3B5cmlnaHQgKEMpIDE5 OTggYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KIw0K IyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yDQojIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyDQojIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIyANCiMgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsDQojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUNCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4NCiMgDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlIA0KIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug LSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLg0KDQoi IiJTZW5kIGEgbWVzc2FnZSB2aWEgbG9jYWwgU01UUCwgb3IgcXVldWUgaXQg aWYgU01UUCBwb3J0IGlzIG5vdCByZXNwb25kaW5nLg0KDQpUaGUgc2NyaXB0 IHRha2VzIHRoZSBmb2xsb3dpbmcgcHJvdG9jb2wgb24gc3RkaW46DQoNCiBs aW5lIFsxXTogc2VuZGVyDQogbGluZSBbMjpuKzFdOiBuIHJlY2lwaWVudHMN CiBsaW5lIFtuKzJdOiA8ZW1wdHk+IC0gZGVsaW1pdGluZyBlbmQgb2YgcmVj aXBpZW50cw0KIGxpbmUgW24rMzpdOiBtZXNzYWdlIGNvbnRlbnQNCiIiIg0K DQppbXBvcnQgc3lzLCBvcw0KaW1wb3J0IHBhdGhzDQoNCiMgWFhYOiB0aGlz IHJlYWxseSBzaG91bGQgYmUgbWVyZ2VkIHdpdGggUHl0aG9uJ3Mgc3RhbmRh cmQgc210cGxpYiBsaWJyYXJ5DQpmcm9tIE1haWxtYW4gaW1wb3J0IG1tX2Nm Zw0KZnJvbSBNYWlsbWFuIGltcG9ydCBzbXRwbGliDQpmcm9tIE1haWxtYW4g aW1wb3J0IFV0aWxzDQpmcm9tIE1haWxtYW4gaW1wb3J0IE91dGdvaW5nUXVl dWUNCg0KZnJvbSBNYWlsbWFuLkxvZ2dpbmcuVXRpbHMgaW1wb3J0IExvZ1N0 ZEVycg0KTG9nU3RkRXJyKCJlcnJvciIsICJjb250YWN0X3RyYW5zcG9ydCIp DQoNCmZyb21fYWRkciA9IHN5cy5zdGRpbi5yZWFkbGluZSgpWzotMV0NCnRv X2FkZHJzICA9IFtdDQp3aGlsZSAxOg0KICAgIGwgPSBzeXMuc3RkaW4ucmVh ZGxpbmUoKVs6LTFdDQogICAgaWYgbm90IGw6DQogICAgICAgIGJyZWFrDQog ICAgdG9fYWRkcnMuYXBwZW5kKGwpDQp0ZXh0ID0gc3lzLnN0ZGluLnJlYWQo KQ0KDQp0cnk6DQogICAgcXVldWVfaWQgPSBPdXRnb2luZ1F1ZXVlLmVucXVl dWVNZXNzYWdlKGZyb21fYWRkciwgdG9fYWRkcnMsIHRleHQpDQpleGNlcHQg SU9FcnJvcjoNCiAgICAjIExvZyB0aGUgZXJyb3IgZXZlbnQgYW5kIHJlcmFp c2UgdGhlIGV4Y2VwdGlvbi4NCiAgICAoZXhjLCBleGNfbXNnLCBleGNfdGIp ID0gc3lzLmV4Y19pbmZvKCkNCiAgICBzeXMuc3RkZXJyLndyaXRlKCJJT0Vy cm9yIHdyaXRpbmcgb3V0Z29pbmcgcXVldWVcblx0JXMvJXNcbiINCiAgICAg ICAgICAgICAgICAgICAgICUgKHN0cihleGMpLCBzdHIoZXhjX21zZykpKQ0K ICAgIHN5cy5zdGRlcnIuZmx1c2goKQ0KICAgIHJhaXNlIGV4YywgZXhjX21z ZywgZXhjX3RiDQpVdGlscy5UcnlTTVRQRGVsaXZlcnkodG9fYWRkcnMsIGZy b21fYWRkciwgdGV4dCwgcXVldWVfaWQpDQpPdXRnb2luZ1F1ZXVlLnByb2Nl c3NRdWV1ZSgpDQoNCg== ---559023410-1712289374-903035598=:1139-- From dragondm@delta.integral.org Mon Aug 17 18:51:40 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Mon, 17 Aug 1998 12:51:40 -0500 (CDT) Subject: [Mailman-Developers] Built-in archiver for mailman... Message-ID: Just thought I'd let anyone interested know, I've got an internal archiving module for mailman 1.0b5, based on the latest pipermail. It does yearly, monthly and quarterly archives, and all the html it generates is created from templates, for easy customization. (also if you dont use it, it won't interfere with an external archiver. ) I have a few patches to get together, then, sometime this week, whence I get a spare moment or two, I'll put it all together and post it. -The Dragon De Monsyne From dragondm@delta.integral.org Wed Aug 19 15:36:38 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Wed, 19 Aug 1998 09:36:38 -0500 (CDT) Subject: [Mailman-Developers] edithtml bug... Message-ID: I just stumbled upon a bug that prevents edithtml from working in 1.0b5. (It refuses to accept any password. ) Here's a patch: *** /usr/src/mailman-1.0b5/Mailman/HTMLFormatter.py Mon Jul 27 17:48:31 1998 --- HTMLFormatter.py Wed Aug 19 09:16:34 1998 *************** *** 29,39 **** class HTMLFormatter: def InitVars(self): if self._internal_name: ! self._template_dir = os.path.join(mm_cfg.LIST_DATA_DIR, ! self._internal_name) else: ! self._template_dir = mm_cfg.TEMPLATE_DIR def GetMailmanFooter(self): owners_html = Container() --- 29,47 ---- class HTMLFormatter: def InitVars(self): + pass + # if self._internal_name: + # self._template_dir = os.path.join(mm_cfg.LIST_DATA_DIR, + # self._internal_name) + # else: + # self._template_dir = mm_cfg.TEMPLATE_DIR + + def GetTemplateDir(self): if self._internal_name: ! return os.path.join(mm_cfg.LIST_DATA_DIR, self._internal_name) else: ! return mm_cfg.TEMPLATE_DIR ! def GetMailmanFooter(self): owners_html = Container() *************** *** 58,65 **** def SnarfHTMLTemplate(self, file): # XXX: hack, blech, yuk ! HTMLFormatter.InitVars(self) ! filename = os.path.join(self._template_dir, file) f = open(filename,'r') str = f.read() f.close() --- 66,74 ---- def SnarfHTMLTemplate(self, file): # XXX: hack, blech, yuk ! # HTMLFormatter.InitVars(self) ! # Yoiks! that was ugly! -ddm ! filename = os.path.join(self.GetTemplateDir(), file) f = open(filename,'r') str = f.read() f.close() *************** *** 332,342 **** return item[-5:] == '.html' files = filter(ExtensionFilter, os.listdir(mm_cfg.TEMPLATE_DIR)) ! Utils.MakeDirTree(self._template_dir) for filename in files: file1 = open(os.path.join(mm_cfg.TEMPLATE_DIR, filename), 'r') text = file1.read() file1.close() ! file2 = open(os.path.join(self._template_dir, filename), 'w+') file2.write(text) file2.close() --- 341,351 ---- return item[-5:] == '.html' files = filter(ExtensionFilter, os.listdir(mm_cfg.TEMPLATE_DIR)) ! Utils.MakeDirTree(self.GetTemplateDir()) for filename in files: file1 = open(os.path.join(mm_cfg.TEMPLATE_DIR, filename), 'r') text = file1.read() file1.close() ! file2 = open(os.path.join(self.GetTemplateDir(), filename), 'w+') file2.write(text) file2.close() *** /usr/src/mailman-1.0b5/Mailman/Cgi/edithtml.py Mon Jul 27 17:48:31 1998 --- Cgi/edithtml.py Wed Aug 19 09:26:59 1998 *************** *** 20,26 **** import sys import os, cgi, string, types ! from Mailman import Utils, MailList from Mailman import htmlformat --- 20,26 ---- import sys import os, cgi, string, types ! from Mailman import Utils, MailList, Errors from Mailman import htmlformat *************** *** 38,44 **** ('subscribe.html', 'Subscribe results page'), ('options.html', 'User specific options page'), ('handle_opts.html', 'Changing user options results page'), ! ('archives.html', 'Archives index page') ) --- 38,44 ---- ('subscribe.html', 'Subscribe results page'), ('options.html', 'User specific options page'), ('handle_opts.html', 'Changing user options results page'), ! ('roster.html', 'List roster page') ) *************** *** 56,62 **** try: list = MailList.MailList(list_name, lock=0) ! except: doc.AddItem(htmlformat.Header(2, "%s : No such list" % list_name)) print doc.Format() sys.exit(0) --- 56,62 ---- try: list = MailList.MailList(list_name, lock=0) ! except Errors.MMUnknownListError: doc.AddItem(htmlformat.Header(2, "%s : No such list" % list_name)) print doc.Format() sys.exit(0) *************** *** 110,116 **** try: list.ConfirmAdminPassword(cgi_data['adminpw'].value) ChangeHTML(list, cgi_data, template_name, doc) ! except: m = 'Error: Incorrect admin password.' doc.AddItem(htmlformat.Header(3, htmlformat.Italic( --- 110,116 ---- try: list.ConfirmAdminPassword(cgi_data['adminpw'].value) ChangeHTML(list, cgi_data, template_name, doc) ! except Errors.MMBadPasswordError: m = 'Error: Incorrect admin password.' doc.AddItem(htmlformat.Header(3, htmlformat.Italic( *************** *** 130,136 **** pass - def InitDocument(): return htmlformat.HeadlessDocument() --- 130,135 ---- *************** *** 176,182 **** doc.AddItem('
') return code = cgi_info['html_code'].value ! f = open(os.path.join(list._template_dir, template_name), 'w') f.write(code) f.close() doc.AddItem(htmlformat.Header(3, 'HTML successfully updated.')) --- 175,181 ---- doc.AddItem('
') return code = cgi_info['html_code'].value ! f = open(os.path.join(list.GetTemplateDir(), template_name), 'w') f.write(code) f.close() doc.AddItem(htmlformat.Header(3, 'HTML successfully updated.')) -The Dragon De Monsyne From cklempay@acm.jhu.edu Wed Aug 19 16:04:11 1998 From: cklempay@acm.jhu.edu (Corbett J. Klempay) Date: Wed, 19 Aug 1998 11:04:11 -0400 (EDT) Subject: [Mailman-Developers] edithtml bug... In-Reply-To: Message-ID: Geez...a patch and everything! Yes, I have yet to try editing the HTML under b5, but I experienced this same problem under b4, actually. It would not accept any password...I don't know if perhaps it was something related to the Linux whackness that Ken unraveled the other week or not...but I'll be sure to try this one out when I get a chance. ------------------------------------------------------------------------------- Corbett J. Klempay Quote of the Week: http://www2.acm.jhu.edu/~cklempay "There are two things a real man likes - danger and play. And he likes women because she is the most dangerous of playthings." PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 ------------------------------------------------------------------------------- On Wed, 19 Aug 1998, The Dragon De Monsyne wrote: > > I just stumbled upon a bug that prevents edithtml from working in > 1.0b5. (It refuses to accept any password. ) > > Here's a patch: > > *** /usr/src/mailman-1.0b5/Mailman/HTMLFormatter.py Mon Jul 27 17:48:31 1998 > --- HTMLFormatter.py Wed Aug 19 09:16:34 1998 > *************** > *** 29,39 **** > > class HTMLFormatter: > def InitVars(self): > if self._internal_name: > ! self._template_dir = os.path.join(mm_cfg.LIST_DATA_DIR, > ! self._internal_name) > else: > ! self._template_dir = mm_cfg.TEMPLATE_DIR > > def GetMailmanFooter(self): > owners_html = Container() > --- 29,47 ---- > > class HTMLFormatter: > def InitVars(self): > + pass > + # if self._internal_name: > + # self._template_dir = os.path.join(mm_cfg.LIST_DATA_DIR, > + # self._internal_name) > + # else: > + # self._template_dir = mm_cfg.TEMPLATE_DIR > + > + def GetTemplateDir(self): > if self._internal_name: > ! return os.path.join(mm_cfg.LIST_DATA_DIR, self._internal_name) > else: > ! return mm_cfg.TEMPLATE_DIR > ! > > def GetMailmanFooter(self): > owners_html = Container() > *************** > *** 58,65 **** > > def SnarfHTMLTemplate(self, file): > # XXX: hack, blech, yuk > ! HTMLFormatter.InitVars(self) > ! filename = os.path.join(self._template_dir, file) > f = open(filename,'r') > str = f.read() > f.close() > --- 66,74 ---- > > def SnarfHTMLTemplate(self, file): > # XXX: hack, blech, yuk > ! # HTMLFormatter.InitVars(self) > ! # Yoiks! that was ugly! -ddm > ! filename = os.path.join(self.GetTemplateDir(), file) > f = open(filename,'r') > str = f.read() > f.close() > *************** > *** 332,342 **** > return item[-5:] == '.html' > > files = filter(ExtensionFilter, os.listdir(mm_cfg.TEMPLATE_DIR)) > ! Utils.MakeDirTree(self._template_dir) > for filename in files: > file1 = open(os.path.join(mm_cfg.TEMPLATE_DIR, filename), 'r') > text = file1.read() > file1.close() > ! file2 = open(os.path.join(self._template_dir, filename), 'w+') > file2.write(text) > file2.close() > --- 341,351 ---- > return item[-5:] == '.html' > > files = filter(ExtensionFilter, os.listdir(mm_cfg.TEMPLATE_DIR)) > ! Utils.MakeDirTree(self.GetTemplateDir()) > for filename in files: > file1 = open(os.path.join(mm_cfg.TEMPLATE_DIR, filename), 'r') > text = file1.read() > file1.close() > ! file2 = open(os.path.join(self.GetTemplateDir(), filename), 'w+') > file2.write(text) > file2.close() > *** /usr/src/mailman-1.0b5/Mailman/Cgi/edithtml.py Mon Jul 27 17:48:31 1998 > --- Cgi/edithtml.py Wed Aug 19 09:26:59 1998 > *************** > *** 20,26 **** > > import sys > import os, cgi, string, types > ! from Mailman import Utils, MailList > from Mailman import htmlformat > > > --- 20,26 ---- > > import sys > import os, cgi, string, types > ! from Mailman import Utils, MailList, Errors > from Mailman import htmlformat > > > *************** > *** 38,44 **** > ('subscribe.html', 'Subscribe results page'), > ('options.html', 'User specific options page'), > ('handle_opts.html', 'Changing user options results page'), > ! ('archives.html', 'Archives index page') > ) > > > --- 38,44 ---- > ('subscribe.html', 'Subscribe results page'), > ('options.html', 'User specific options page'), > ('handle_opts.html', 'Changing user options results page'), > ! ('roster.html', 'List roster page') > ) > > > *************** > *** 56,62 **** > > try: > list = MailList.MailList(list_name, lock=0) > ! except: > doc.AddItem(htmlformat.Header(2, "%s : No such list" % list_name)) > print doc.Format() > sys.exit(0) > --- 56,62 ---- > > try: > list = MailList.MailList(list_name, lock=0) > ! except Errors.MMUnknownListError: > doc.AddItem(htmlformat.Header(2, "%s : No such list" % list_name)) > print doc.Format() > sys.exit(0) > *************** > *** 110,116 **** > try: > list.ConfirmAdminPassword(cgi_data['adminpw'].value) > ChangeHTML(list, cgi_data, template_name, doc) > ! except: > m = 'Error: Incorrect admin password.' > doc.AddItem(htmlformat.Header(3, > htmlformat.Italic( > --- 110,116 ---- > try: > list.ConfirmAdminPassword(cgi_data['adminpw'].value) > ChangeHTML(list, cgi_data, template_name, doc) > ! except Errors.MMBadPasswordError: > m = 'Error: Incorrect admin password.' > doc.AddItem(htmlformat.Header(3, > htmlformat.Italic( > *************** > *** 130,136 **** > pass > > > - > def InitDocument(): > return htmlformat.HeadlessDocument() > > --- 130,135 ---- > *************** > *** 176,182 **** > doc.AddItem('
') > return > code = cgi_info['html_code'].value > ! f = open(os.path.join(list._template_dir, template_name), 'w') > f.write(code) > f.close() > doc.AddItem(htmlformat.Header(3, 'HTML successfully updated.')) > --- 175,181 ---- > doc.AddItem('
') > return > code = cgi_info['html_code'].value > ! f = open(os.path.join(list.GetTemplateDir(), template_name), 'w') > f.write(code) > f.close() > doc.AddItem(htmlformat.Header(3, 'HTML successfully updated.')) > > > > -The Dragon De Monsyne > > > _______________________________________________ > Mailman-Developers maillist - Mailman-Developers@python.org > http://www.python.org/mailman/listinfo/mailman-developers > From dragondm@delta.integral.org Thu Aug 20 02:53:18 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Wed, 19 Aug 1998 20:53:18 -0500 (CDT) Subject: [Mailman-Developers] edithtml bug... In-Reply-To: Message-ID: On Wed, 19 Aug 1998, Corbett J. Klempay wrote: > Geez...a patch and everything! Service with a smile :> > Yes, I have yet to try editing the HTML under b5, but I experienced this > same problem under b4, actually. It would not accept any password...I > don't know if perhaps it was something related to the Linux whackness that > Ken unraveled the other week or not...but I'll be sure to try this one out > when I get a chance. Hmm... Actually, it was weirdness in HTMLFormatter that lead to a bug in edithtml that was covered up by a wildcard except: clause (gotta get rid of those... ) -The Dragon De Monsyne From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Thu Aug 20 17:39:53 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Thu, 20 Aug 1998 12:39:53 -0400 (EDT) Subject: [Mailman-Developers] Re: [Mailman-Users] Localization References: <003101bdcc2c$9d30cb90$f6d52dc1@bishop.twinspot.net> Message-ID: <13788.20825.540091.529960@anthem.cnri.reston.va.us> [[Note that I've changed the CC to mm-dev]] >>>>> "KM" == Ken Manheimer writes: KM> If you take a look at the latest mailman version (see KM> http://www.python.org/mailman/listinfo/mailman-checkins for KM> instructions on following the current CVS revision), you'll KM> see that we've (primarily barry has) begun to separate out all KM> the multi-line text messages into separate files, and also are KM> using a functional interface to the messages. Seems like this KM> would be an opportune place to incorporate locale sensitivity, KM> among other things. It would have to be generalized a good KM> bit to apply to *all* messages, but we suspect that it's a KM> start... We had a discussion about this topic a couple of months ago (sadly, I realize this was in mailman-users 1998q3 archive). Ken's right about the groundwork I laid to rip most of the in-code text messages out of the .py files and into separate .txt files inside templates. I did it primarily for the cleanliness such separation provides, but also with a thought toward localization. We need to go one step further: we would need separate language specific subdirs inside templates that would hold the appropriate texts for other languages. We would need to modify Mailman.Utils.maketext() so that it takes an optional language argument, and would pick the text template out of proper subdir. Other issues: the keys interpolated into templates need to be localized. Other end-user intended text sprinkled in the code should be localized. Language preference on a per-list or per-user basis (or both)? Support for alternative localized HTML templates? Option names and descriptions? -Barry From cklempay@acm.jhu.edu Fri Aug 21 15:41:14 1998 From: cklempay@acm.jhu.edu (Corbett J. Klempay) Date: Fri, 21 Aug 1998 10:41:14 -0400 (EDT) Subject: [Mailman-Developers] multiples patch Message-ID: I seem to remember at least one person posting some replacement code to try to clear up the duplicates problem...anyone know if it works yet? I need to go dig that code out (assuming I'm right in remembering it) ------------------------------------------------------------------------------- Corbett J. Klempay Quote of the Week: http://www2.acm.jhu.edu/~cklempay "There are two things a real man likes - danger and play. And he likes women because she is the most dangerous of playthings." PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 ------------------------------------------------------------------------------- From Nagy Balazs Mon Aug 24 13:15:33 1998 From: Nagy Balazs (Nagy Balazs) Date: Mon, 24 Aug 1998 14:15:33 +0200 (CEST) Subject: [Mailman-Developers] Why just SMTP? Message-ID: Hiyas, I think there are a lot of mtu programs which works good in delivery/queue handling. OK, you wanted to write a 200% compatible program, but I think this isn't as good as it seems: 1| QMail doesn't put Date: and Message-ID: fields to the mail when you use smtp. 2| You can use 'mailx' anyway. 3| Delivery-locking is bogus. Ok, I think this is a good idea to handle smtp directly, but *please let us select* which method we prefer. I think you can use TryDelivery() (with a jumper table) instead of TrySMTPDelivery(). -- hacker: /n./ One who enjoys the intellectual challenge of creatively overcoming or circumventing limitations. PGP 0x1DE3631D / A8 B4 92 EE 1F 55 27 C8 86 64 9C 42 41 A4 BD B8 From cklempay@acm.jhu.edu Wed Aug 26 05:29:19 1998 From: cklempay@acm.jhu.edu (Corbett J. Klempay) Date: Wed, 26 Aug 1998 00:29:19 -0400 (EDT) Subject: [Mailman-Developers] Cron /usr/local/bin/python /home/mailman/cron/run_queue (fwd) /home/mailman/cron/run_queue (fwd) Message-ID: I just got this; if it's relevant, I am using the fix to prevent forking. ---------- Forwarded message ---------- Date: Tue, 25 Aug 1998 22:42:06 -0400 From: Cron Daemon To: mailman@chimera.acm.jhu.edu Subject: Cron /usr/local/bin/python /home/mailman/cron/run_queue Traceback (innermost last): File "/home/mailman/cron/run_queue", line 31, in ? OutgoingQueue.processQueue() File "/home/mailman/Mailman/OutgoingQueue.py", line 38, in processQueue Utils.TrySMTPDelivery(recip,sender,text,full_fname) File "/home/mailman/Mailman/Utils.py", line 204, in TrySMTPDelivery OutgoingQueue.dequeueMessage(queue_entry) File "/home/mailman/Mailman/OutgoingQueue.py", line 25, in dequeueMessage os.unlink(msg) os.error: (2, 'No such file or directory') From tomas@euronetics.se Wed Aug 26 09:09:33 1998 From: tomas@euronetics.se (Tomas Fasth) Date: Wed, 26 Aug 1998 10:09:33 +0200 Subject: [Mailman-Developers] Re: [Mailman-Users] Localization Message-ID: <003301bdd0c8$dc5f6d80$f6d52dc1@bishop.twinspot.net> >>>>>> "KM" == Ken Manheimer writes: > > KM> If you take a look at the latest mailman version (see > KM> http://www.python.org/mailman/listinfo/mailman-checkins for > KM> instructions on following the current CVS revision), you'll > KM> see that we've (primarily barry has) begun to separate out all > KM> the multi-line text messages into separate files, and also are > KM> using a functional interface to the messages. Seems like this > KM> would be an opportune place to incorporate locale sensitivity, > KM> among other things. It would have to be generalized a good > KM> bit to apply to *all* messages, but we suspect that it's a > KM> start... I followed your recommendation and examined the latest sources. It wasn't that obvious to me where to look for text separation changes. Can you give me a direction? Or maybe it's not part of the 1.06b code I checked out? Is there a separate branch for this maybe? I think a decent level of ambition would be to localize all interaction with users, owners and moderators. Other "system" stuff like logging and admin interaction is not that important, IMO. Tomas From John@list.org Wed Aug 26 16:08:28 1998 From: John@list.org (John Viega) Date: Wed, 26 Aug 1998 08:08:28 -0700 Subject: [Mailman-Developers] The fog lifts... Message-ID: <19980826080828.A30991@viega.org> As many of you know, I have been absent for the past few weeks, mainly because I've just become a new father. Things are starting to settle down for me now, and I'm looking forward to getting back to Mailman. I'll try to catch up on list traffic from the last few weeks ASAP. Anyway, my big priority is to try to get all the issues you guys have had with Mailman addressed by the end of September at the latest. Anyone with code to submit that hasn't already been posted to the list, please let me know ASAP. Right now, I think the most important submissions will be the bug fixes. However, I'm still interested in additions. In particular, I'm interested in the pipermail integration that someone mentioned a few weeks ago, assuming that it uses a solution for the database interface that will work out of the box on all Python installs. John From John@list.org Wed Aug 26 16:19:45 1998 From: John@list.org (John Viega) Date: Wed, 26 Aug 1998 08:19:45 -0700 Subject: [Mailman-Developers] multiples patch In-Reply-To: ; from Corbett J. Klempay on Fri, Aug 21, 1998 at 10:41:14AM -0400 References: Message-ID: <19980826081945.C30554@viega.org> You know, I thought I saw such a thing too, but now I can't find it. Has anyone fixed this problem yet, and if so, can you make patches? If not, it's the first thing I'll go after. I think people have given enough information to find the problem pretty easily. John On Fri, Aug 21, 1998 at 10:41:14AM -0400, Corbett J. Klempay wrote: > I seem to remember at least one person posting some replacement code to > try to clear up the duplicates problem...anyone know if it works yet? I > need to go dig that code out (assuming I'm right in remembering it) > > ------------------------------------------------------------------------------- > Corbett J. Klempay Quote of the Week: > http://www2.acm.jhu.edu/~cklempay "There are two things a real man likes - > danger and play. And he likes women > because she is the most dangerous of > playthings." > > PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 > ------------------------------------------------------------------------------- > > > _______________________________________________ > Mailman-Developers maillist - Mailman-Developers@python.org > http://www.python.org/mailman/listinfo/mailman-developers From John@list.org Wed Aug 26 16:20:53 1998 From: John@list.org (John Viega) Date: Wed, 26 Aug 1998 08:20:53 -0700 Subject: [Mailman-Developers] Why just SMTP? In-Reply-To: ; from Nagy Balazs on Mon, Aug 24, 1998 at 02:15:33PM +0200 References: Message-ID: <19980826082053.D30554@viega.org> Eventually we'll do that, especially if people contribute diffs... (hint, hint). John On Mon, Aug 24, 1998 at 02:15:33PM +0200, Nagy Balazs wrote: > Hiyas, > > Ok, I think this is a good idea to handle smtp directly, but *please let us > select* which method we prefer. From klm@python.org Wed Aug 26 19:22:06 1998 From: klm@python.org (Ken Manheimer) Date: Wed, 26 Aug 1998 14:22:06 -0400 (EDT) Subject: [Mailman-Developers] multiples patch In-Reply-To: <19980826081945.C30554@viega.org> Message-ID: On Wed, 26 Aug 1998, John Viega wrote: > You know, I thought I saw such a thing too, but now I can't find it. > Has anyone fixed this problem yet, and if so, can you make patches? > If not, it's the first thing I'll go after. I think people have given > enough information to find the problem pretty easily. John, i think this is related to the linux gid problems that i identified in relation to corbett's duplicates problems. In brief: - On linux systems, scripts forked by the object executables (eg, the wrapper executables) do inherit the effective gid that the wrappers wants them to get - but then, scripts forked by *those* scripts do not! - This permissions problem, combined with the initial insensitivity of Utils.TrySMTPDelivery (i think it was) was causing things to be left on the queue despite successful delivery, and then the queue processing script - launched from the cron job with the right euid - would do a redundant delivery and then delete. I think that was the upshot - but check the messages (with apparent fixes) that i posted about it, they should give the full scoop. (Note that part of the fix for linux systems was to open up the permissions on the queue directory - not an optimal solution.) http://www.python.org/pipermail/1998q3.mailman-developers/989f2234d905.html http://www.python.org/pipermail/1998q3.mailman-developers/c1aa27e70661.html Sorry i don't have more time to dedicate to this stuff at the moment - hopefully soon... ken klm@python.org From tomas@euronetics.se Thu Aug 27 08:20:37 1998 From: tomas@euronetics.se (Tomas Fasth) Date: Thu, 27 Aug 1998 09:20:37 +0200 Subject: [Mailman-Developers] Localization, again Message-ID: <002001bdd18b$302f2fa0$f6d52dc1@bishop.twinspot.net> This is a multi-part message in MIME format. ------=_NextPart_000_001D_01BDD19B.F3797000 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi. I checked out the latest sources in order to try a translation to = Swedish. I quickly found out that this was to become a rather = complicated task. Presentation texts are practically shattered all over = the sources. Is there currently any work going on in this area? What can I do to help improving the situation? Note that I have limited time to allocate in this matter (well, who = doesn't :), but want to do my part if others are interested to make an = effort as well. The Mailman software is a really good peice of software = in concept and design, part from the localization aspects that is. I also want to mention that I earlier made a try to localize Majordomo. = Same problem. Since I'm a python fan, I was delighted to find out about = Mailman. Anyway, localization is an important issue, IMHO. Cheers, Tomas ------=_NextPart_000_001D_01BDD19B.F3797000 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hi.
I checked out the latest sources in = order to try=20 a translation to Swedish. I = quickly found out=20 that this was to become a rather complicated task. Presentation texts are practically shattered all over the=20 sources.
Is there currently any work going on = in this=20 area?
What can I do to help improving the=20 situation?
Note that I have limited time to = allocate in=20 this matter (well, who doesn't :), but want to do my part if others are=20 interested to make an effort as well. The=20 Mailman software is a really good peice of software in concept and = design, part=20 from the localization aspects that is.
I also want to mention that I = earlier made a try=20 to localize Majordomo. Same problem. Since I'm a python fan, I was = delighted to=20 find out about Mailman. Anyway, localization is an important issue,=20 IMHO.
 
Cheers,
Tomas
 
------=_NextPart_000_001D_01BDD19B.F3797000-- From dragondm@delta.integral.org Thu Aug 27 07:48:58 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Thu, 27 Aug 1998 01:48:58 -0500 (CDT) Subject: [Mailman-Developers] Mailman web-archiver Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-237318664-904200538=:1550 Content-Type: TEXT/PLAIN; charset=US-ASCII Well, it's a bit rough, and there's a few more things i'd like to do with it, But my free time may be scarse lately & I'm going on vacation in a week, so I figure I'd better post this & let some folks play with it. Anyway, this is the intgrated web-archiver module for Mailman. For the moment, it still needs bsddb (mebbe after I get back I can try tackling replacing that) To get this working, here is what ye need to do: 1) Make sure you have the bsddb module compiled :P 2) Make sure you have somewhere in your PYTHONPATH the following python modules: a) The latest pipermail (0.0.5) b) Digicool's DocumentTemplate package 3) Make sure you get rid of the old pipermail 0.0.2 sitting in the Mailman package. 4) Put HyperArch.py in the Mailman package directory. 5) Put the 'arch' script in the ${prefix}/cron directory 6) Apply the included patch. 7) add an entry like this to your crontab: # Periodically update the webarchive. 0 3,9,17,23 * * * /usr/local/bin/python /usr/services/mailman/cron/arch Notes: You can run the arch script as often as you like, depending on how up-to-date you want your webarchives to be. You also can run the script from the command line to manually add articles to the archive. (I just ran three years worth of traffic from a reasonabally high-volume majordomo list I'm moving over thru this system, and it went thru fine.) You can set archives to use yearly, quarterly, or monthly archives with this. You will probably want to use the 'Set date to when re-sent' option on your lists with this module. All the HTML generated by this module is generated from a template. This makes customizing the output trivial, just edit the template. (Right now the templates are static strings. This should be changed soon.) If you do not run the arch cronjob, then this module will do nothing, and will not interfere with an external archiver. -The Dragon De Monsyne ---1395546950-237318664-904200538=:1550 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: ZGlmZiAtYyAvdXNyL3NyYy9tYWlsbWFuLTEuMGI1L01haWxtYW4vQXJjaGl2 ZXIucHkgTWFpbG1hbi9BcmNoaXZlci5weQ0KKioqIC91c3Ivc3JjL21haWxt YW4tMS4wYjUvTWFpbG1hbi9BcmNoaXZlci5weQlNb24gSnVsIDI3IDE3OjQ4 OjMxIDE5OTgNCi0tLSBNYWlsbWFuL0FyY2hpdmVyLnB5CVN1biBBdWcgMTYg MTE6MTE6NTIgMTk5OA0KKioqKioqKioqKioqKioqDQoqKiogNDIsNDkgKioq Kg0KICAJc2VsZi5hcmNoaXZlX3ByaXZhdGUgPSBtbV9jZmcuREVGQVVMVF9B UkNISVZFX1BSSVZBVEUNCiAgIyMgCXNlbGYuYXJjaGl2ZV91cGRhdGVfZnJl cXVlbmN5ID0gXA0KICAjIyAJCSBtbV9jZmcuREVGQVVMVF9BUkNISVZFX1VQ REFURV9GUkVRVUVOQ1kNCiEgIyMgCXNlbGYuYXJjaGl2ZV92b2x1bWVfZnJl cXVlbmN5ID0gXA0KISAjIyAJCW1tX2NmZy5ERUZBVUxUX0FSQ0hJVkVfVk9M VU1FX0ZSRVFVRU5DWQ0KICAjIyAJc2VsZi5hcmNoaXZlX3JldGFpbl90ZXh0 X2NvcHkgPSBcDQogICMjIAkJbW1fY2ZnLkRFRkFVTFRfQVJDSElWRV9SRVRB SU5fVEVYVF9DT1BZDQogIA0KLS0tIDQyLDQ5IC0tLS0NCiAgCXNlbGYuYXJj aGl2ZV9wcml2YXRlID0gbW1fY2ZnLkRFRkFVTFRfQVJDSElWRV9QUklWQVRF DQogICMjIAlzZWxmLmFyY2hpdmVfdXBkYXRlX2ZyZXF1ZW5jeSA9IFwNCiAg IyMgCQkgbW1fY2ZnLkRFRkFVTFRfQVJDSElWRV9VUERBVEVfRlJFUVVFTkNZ DQohICAJc2VsZi5hcmNoaXZlX3ZvbHVtZV9mcmVxdWVuY3kgPSBcDQohICAJ CW1tX2NmZy5ERUZBVUxUX0FSQ0hJVkVfVk9MVU1FX0ZSRVFVRU5DWQ0KICAj IyAJc2VsZi5hcmNoaXZlX3JldGFpbl90ZXh0X2NvcHkgPSBcDQogICMjIAkJ bW1fY2ZnLkRFRkFVTFRfQVJDSElWRV9SRVRBSU5fVEVYVF9DT1BZDQogIA0K KioqKioqKioqKioqKioqDQoqKiogNjIsNzEgKioqKg0KICAgICAgZGVmIEdl dEJhc2VBcmNoaXZlVVJMKHNlbGYpOg0KICAgICAgICAgIGlmIHNlbGYuYXJj aGl2ZV9wcml2YXRlOg0KICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5q b2luKG1tX2NmZy5QUklWQVRFX0FSQ0hJVkVfVVJMLA0KISAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludGVybmFsX25hbWUgKyAi Lmh0bWwiKQ0KICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgIHJldHVy biBvcy5wYXRoLmpvaW4obW1fY2ZnLlBVQkxJQ19BUkNISVZFX1VSTCwNCiEg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnRlcm5h bF9uYW1lICsgIi5odG1sIikNCiAgDQogICAgICBkZWYgR2V0Q29uZmlnSW5m byhzZWxmKToNCiAgCXJldHVybiBbDQotLS0gNjIsNzEgLS0tLQ0KICAgICAg ZGVmIEdldEJhc2VBcmNoaXZlVVJMKHNlbGYpOg0KICAgICAgICAgIGlmIHNl bGYuYXJjaGl2ZV9wcml2YXRlOg0KICAgICAgICAgICAgICByZXR1cm4gb3Mu cGF0aC5qb2luKG1tX2NmZy5QUklWQVRFX0FSQ0hJVkVfVVJMLA0KISAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludGVybmFsX25h bWUgKyBtbV9jZmcuUFJJVkFURV9BUkNISVZFX1VSTF9FWFQpDQogICAgICAg ICAgZWxzZToNCiAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbiht bV9jZmcuUFVCTElDX0FSQ0hJVkVfVVJMLA0KISAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNlbGYuX2ludGVybmFsX25hbWUgKyBtbV9jZmcu UFJJVkFURV9BUkNISVZFX1VSTF9FWFQpDQogIA0KICAgICAgZGVmIEdldENv bmZpZ0luZm8oc2VsZik6DQogIAlyZXR1cm4gWw0KKioqKioqKioqKioqKioq DQoqKiogODUsOTMgKioqKg0KICAjIyAJICAgICAiSG93IG9mdGVuIHNob3Vs ZCBuZXcgbWVzc2FnZXMgYmUgaW5jb3Jwb3JhdGVkPyAgIg0KICAjIyAJICAg ICAiMCBmb3Igbm8gYXJjaGl2YWwsIDEgZm9yIGRhaWx5LCAyIGZvciBob3Vy bHkiKSwNCiAgDQohICMjIAkgICAgKCdhcmNoaXZlX3ZvbHVtZV9mcmVxdWVu Y3knLCBtbV9jZmcuUmFkaW8sICgnWWVhcmx5JywgJ01vbnRobHknKSwNCiEg IyMgCSAgICAgMCwNCiEgIyMgCSAgICAgJ0hvdyBvZnRlbiBzaG91bGQgYSBu ZXcgYXJjaGl2ZSB2b2x1bWUgYmUgc3RhcnRlZD8nKSwNCiAgDQogICMjIAkg ICAgKCdhcmNoaXZlX3JldGFpbl90ZXh0X2NvcHknLCBtbV9jZmcuVG9nZ2xl LCAoJ05vJywgJ1llcycpLA0KICAjIyAJICAgICAwLA0KLS0tIDg1LDkzIC0t LS0NCiAgIyMgCSAgICAgIkhvdyBvZnRlbiBzaG91bGQgbmV3IG1lc3NhZ2Vz IGJlIGluY29ycG9yYXRlZD8gICINCiAgIyMgCSAgICAgIjAgZm9yIG5vIGFy Y2hpdmFsLCAxIGZvciBkYWlseSwgMiBmb3IgaG91cmx5IiksDQogIA0KISAg CSAgICAoJ2FyY2hpdmVfdm9sdW1lX2ZyZXF1ZW5jeScsIG1tX2NmZy5SYWRp bywgDQohICAgICAgICAgICAgICAgICgnWWVhcmx5JywgJ01vbnRobHknLCdR dWFydGVybHknKSwgMCwNCiEgIAkgICAgICdIb3cgb2Z0ZW4gc2hvdWxkIGEg bmV3IGFyY2hpdmUgdm9sdW1lIGJlIHN0YXJ0ZWQ/JyksDQogIA0KICAjIyAJ ICAgICgnYXJjaGl2ZV9yZXRhaW5fdGV4dF9jb3B5JywgbW1fY2ZnLlRvZ2ds ZSwgKCdObycsICdZZXMnKSwNCiAgIyMgCSAgICAgMCwNCmRpZmYgLWMgL3Vz ci9zcmMvbWFpbG1hbi0xLjBiNS9NYWlsbWFuL0RlZmF1bHRzLnB5IE1haWxt YW4vRGVmYXVsdHMucHkNCioqKiAvdXNyL3NyYy9tYWlsbWFuLTEuMGI1L01h aWxtYW4vRGVmYXVsdHMucHkJV2VkIEF1ZyAxOSAwMTo0NjozNyAxOTk4DQot LS0gTWFpbG1hbi9EZWZhdWx0cy5weQlUaHUgQXVnIDI3IDAwOjIyOjQ2IDE5 OTgNCioqKioqKioqKioqKioqKg0KKioqIDM3LDQyICoqKioNCi0tLSAzNyw0 OCAtLS0tDQogIFBVQkxJQ19BUkNISVZFX1VSTCA9ICdodHRwOi8vd3d3Lk9W RVJSSURFLldJVEguWU9VUi5QVUJMSUMuQVJDSElWRS5VUkwvJw0KICBQUklW QVRFX0FSQ0hJVkVfVVJMID0gJ2h0dHA6Ly93d3cuT1ZFUlJJREUuV0lUSC5Z T1VSLlBSSVZBVEUuQVJDSElWRS5VUkwvJw0KICANCisgREVGQVVMVF9BUkNI SVZFX1ZPTFVNRV9GUkVRVUVOQ1kgPSAxDQorIA0KKyANCisgUFVCTElDX0FS Q0hJVkVfVVJMX0VYVCA9ICcnDQorIFBSSVZBVEVfQVJDSElWRV9VUkxfRVhU ID0gJycNCisgDQogIERFRkFVTFRfQVJDSElWRV9QUklWQVRFICAgID0gMAkJ IyAwPXB1YmxpYywgMT1wcml2YXRlDQogIEhPTUVfUEFHRSAgICAgICAgID0g J2luZGV4Lmh0bWwnDQogIE1BSUxNQU5fT1dORVIgICAgID0gJ21haWxtYW4t b3duZXJAJXMnICUgREVGQVVMVF9IT1NUX05BTUUNCioqKioqKioqKioqKioq Kg0KKioqIDIxNiwyMTkgKioqKg0KICBWRVJTSU9OICAgICAgICAgICA9ICcx LjBiNScNCiAgDQogICMgRGF0YSBmaWxlIHZlcnNpb24gbnVtYmVyDQohIERB VEFfRklMRV9WRVJTSU9OID0gMw0KLS0tIDIyMiwyMjUgLS0tLQ0KICBWRVJT SU9OICAgICAgICAgICA9ICcxLjBiNScNCiAgDQogICMgRGF0YSBmaWxlIHZl cnNpb24gbnVtYmVyDQohIERBVEFfRklMRV9WRVJTSU9OID0gNA0KZGlmZiAt YyAvdXNyL3NyYy9tYWlsbWFuLTEuMGI1L01haWxtYW4vaHRtbGZvcm1hdC5w eSBNYWlsbWFuL2h0bWxmb3JtYXQucHkNCioqKiAvdXNyL3NyYy9tYWlsbWFu LTEuMGI1L01haWxtYW4vaHRtbGZvcm1hdC5weQlNb24gSnVsIDI3IDE3OjQ4 OjMxIDE5OTgNCi0tLSBNYWlsbWFuL2h0bWxmb3JtYXQucHkJV2VkIEF1ZyAx OSAwMjoyNDo0MyAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAzODMsMzg5 ICoqKioNCiAgCUlucHV0T2JqLl9faW5pdF9fKHNlbGYsIG5hbWUsICJURVhU IiwgdmFsdWUsIGNoZWNrZWQ9MCwgc2l6ZT1zaXplKQ0KICANCiAgY2xhc3Mg VGV4dEFyZWE6DQohICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdGV4 dD0nJywgcm93cz1Ob25lLCBjb2xzPU5vbmUsIHdyYXA9J3NvZnQnKToNCiAg CXNlbGYubmFtZSA9IG5hbWUNCiAgCXNlbGYudGV4dCA9IHRleHQNCiAgCXNl bGYucm93cyA9IHJvd3MNCi0tLSAzODMsMzg5IC0tLS0NCiAgCUlucHV0T2Jq Ll9faW5pdF9fKHNlbGYsIG5hbWUsICJURVhUIiwgdmFsdWUsIGNoZWNrZWQ9 MCwgc2l6ZT1zaXplKQ0KICANCiAgY2xhc3MgVGV4dEFyZWE6DQohICAgICBk ZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdGV4dD0nJywgcm93cz1Ob25lLCBj b2xzPU5vbmUsIHdyYXA9J29mZicpOg0KICAJc2VsZi5uYW1lID0gbmFtZQ0K ICAJc2VsZi50ZXh0ID0gdGV4dA0KICAJc2VsZi5yb3dzID0gcm93cw0KZGlm ZiAtYyAvdXNyL3NyYy9tYWlsbWFuLTEuMGI1L01haWxtYW4vdmVyc2lvbnMu cHkgTWFpbG1hbi92ZXJzaW9ucy5weQ0KKioqIC91c3Ivc3JjL21haWxtYW4t MS4wYjUvTWFpbG1hbi92ZXJzaW9ucy5weQlNb24gSnVsIDI3IDE3OjQ4OjMx IDE5OTgNCi0tLSBNYWlsbWFuL3ZlcnNpb25zLnB5CVdlZCBBdWcgMTkgMDI6 MzE6MDYgMTk5OA0KKioqKioqKioqKioqKioqDQoqKiogNjMsNzAgKioqKg0K ICAgICAgUHJlZmVyU3RvcmVkKCdhdXRvbWF0aWNhbGx5X3JlbW92ZScsICdh dXRvbWF0aWNfYm91bmNlX2FjdGlvbicpDQogICAgICAjICAtIGRyb3BwZWQg dmFyczoNCiAgICAgIGZvciBhIGluIFsnYXJjaGl2ZV9yZXRhaW5fdGV4dF9j b3B5JywNCiEgICAgICAgICAgICAgICAnYXJjaGl2ZV91cGRhdGVfZnJlcXVl bmN5JywNCiEgICAgICAgICAgICAgICAnYXJjaGl2ZV92b2x1bWVfZnJlcXVl bmN5J106DQogICAgICAgICAgaWYgaGFzYXR0cihsLCBhKTogZGVsYXR0cihs LCBhKQ0KICANCiAgZGVmIFVwZGF0ZU9sZFVzZXJzKGwpOg0KLS0tIDYzLDY5 IC0tLS0NCiAgICAgIFByZWZlclN0b3JlZCgnYXV0b21hdGljYWxseV9yZW1v dmUnLCAnYXV0b21hdGljX2JvdW5jZV9hY3Rpb24nKQ0KICAgICAgIyAgLSBk cm9wcGVkIHZhcnM6DQogICAgICBmb3IgYSBpbiBbJ2FyY2hpdmVfcmV0YWlu X3RleHRfY29weScsDQohICAgICAgICAgICAgICAgJ2FyY2hpdmVfdXBkYXRl X2ZyZXF1ZW5jeSddOg0KICAgICAgICAgIGlmIGhhc2F0dHIobCwgYSk6IGRl bGF0dHIobCwgYSkNCiAgDQogIGRlZiBVcGRhdGVPbGRVc2VycyhsKToNCg== ---1395546950-237318664-904200538=:1550 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=arch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: IyEvdXNyL2xvY2FsL2Jpbi9weXRob24NCg0KaW1wb3J0IHN5cywgc3RyaW5n LCBnZXRvcHQsIG9zDQppbXBvcnQgcGF0aHMNCmltcG9ydCBNYWlsbWFuLkh5 cGVyQXJjaA0KaW1wb3J0IE1haWxtYW4uVXRpbHMNCmZyb20gTWFpbG1hbi5I eXBlckFyY2ggaW1wb3J0IEh5cGVyQXJjaGl2ZQ0KZnJvbSBNYWlsbWFuLk1h aWxMaXN0IGltcG9ydCBNYWlsTGlzdA0KDQpkZWYgQXJjaExpc3QobGlzdCk6 DQogICAgbD1NYWlsTGlzdChsaXN0KQ0KICAgIGg9SHlwZXJBcmNoaXZlKGwp DQogICAgaC5wcm9jZXNzTGlzdEFyY2goKQ0KICAgIGguY2xvc2UoKQ0KDQpk ZWYgUHJpbnRVc2FnZSgpOg0KICAgIHByaW50ICgnICB1c2FnZTogYXJjaCBb LXYgfCAtLXZlcmJvc2VdIFstbCAibGlzdCIgfCAtLWxpc3QgImxpc3QiXSAn IA0KICAgICAgICAgICdbbWFpbGJveGZpbGVzXScpDQogICAgaW1wb3J0IHN5 cw0KICAgIHN5cy5leGl0KDEpDQoNCmRlZiBtYWluKCk6DQogICAgaWYgJy1o JyBpbiBzeXMuYXJndiBvciAnLT8nIGluIHN5cy5hcmd2OiANCglQcmludFVz YWdlKCkNCiAgICAgICAgcmV0dXJuDQoNCiAgICBjb25maWc9eydWRVJCT1NF JzowfQ0KICAgIA0KICAgICMgTm93IHdlIHBhcnNlIHRoZSBjb21tYW5kIGxp bmUgb3B0aW9ucw0KICAgIG9wdHMsIHBhcmFtcyA9IGdldG9wdC5nZXRvcHQo c3lzLmFyZ3ZbMTpdLCAndmw6JywgWyd2ZXJib3NlJywnbGlzdD0nXSkNCiAg ICBmb3Igb3B0aW9uLCBhcmcgaW4gb3B0czoNCglpZiBvcHRpb249PSctbCc6 IGNvbmZpZ1snTElTVCddPWFyZw0KCWlmIG9wdGlvbj09Jy12JzogY29uZmln WydWRVJCT1NFJ109MQ0KCWlmIG9wdGlvbj09Jy0tbGlzdCc6IGNvbmZpZ1sn TElTVCddPWFyZw0KCWlmIG9wdGlvbj09Jy0tdmVyYm9zZSc6IGNvbmZpZ1sn VkVSQk9TRSddPTENCg0KICAgIGlmIGNvbmZpZy5oYXNfa2V5KCdMSVNUJyk6 DQogICAgICAgIGlmIHBhcmFtczoNCiAgICAgICAgICAgIGw9TWFpbExpc3Qo Y29uZmlnWydMSVNUJ10sbG9jaz0wKQ0KICAgICAgICAgICAgaD1IeXBlckFy Y2hpdmUobCkNCiAgICAgICAgICAgIGlmIGNvbmZpZ1snVkVSQk9TRSddOg0K ICAgICAgICAgICAgICAgIGguVkVSQk9TRT0xDQogICAgICAgICAgICBmb3Ig ZWFjaCBpbiBwYXJhbXM6DQogICAgICAgICAgICAgICAgdHJ5Og0KICAgICAg ICAgICAgICAgICAgICBmPW9wZW4oZWFjaCwncicpDQogICAgICAgICAgICAg ICAgZXhjZXB0IElPRXJyb3I6DQogICAgICAgICAgICAgICAgICAgIHN5cy5z dGRlcnIud3JpdGUoIkNhbm5vdCBvcGVuICVzXG4iICUgZWFjaCApDQogICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgaC5w cm9jZXNzVW5peE1haWxib3goZixNYWlsbWFuLkh5cGVyQXJjaC5BcnRpY2xl KQ0KICAgICAgICAgICAgICAgIGYuY2xvc2UoKQ0KICAgICAgICAgICAgaC5j bG9zZSgpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBsPU1haWxMaXN0 KGNvbmZpZ1snTElTVCddKQ0KICAgICAgICAgICAgaD1IeXBlckFyY2hpdmUo bCkNCiAgICAgICAgICAgIGlmIGNvbmZpZ1snVkVSQk9TRSddOg0KICAgICAg ICAgICAgICAgIGguVkVSQk9TRT0xDQogICAgICAgICAgICBoLnByb2Nlc3NM aXN0QXJjaCgpDQogICAgICAgICAgICBoLmNsb3NlKCkNCiAgICBlbHNlOg0K ICAgICAgICAjbG9vcCB0aHJ1IGFsbCB0aGUgbGlzdHMsIGRvaW5nIGFyY2hp dmluZyAtZGRtLiAgICAgDQogICAgICAgIGZvciBlYWNoIGluIE1haWxtYW4u VXRpbHMubGlzdF9uYW1lcygpOg0KICAgICAgICAgICAgaWYgY29uZmlnWydW RVJCT1NFJ106DQogICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgi UHJvY2Vzc2luZyBsaXN0ICVzXG4iICUgZWFjaCkNCiAgICAgICAgICAgIGw9 TWFpbExpc3QoZWFjaCkNCiAgICAgICAgICAgIGlmIG5vdCBsLmFyY2hpdmU6 DQogICAgICAgICAgICAgICAgbC5VbmxvY2soKQ0KICAgICAgICAgICAgICAg IGRlbCBsDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgIGg9 SHlwZXJBcmNoaXZlKGwpDQogICAgICAgICAgICAgICAgaWYgY29uZmlnWydW RVJCT1NFJ106DQogICAgICAgICAgICAgICAgICAgIGguVkVSQk9TRT0xDQog ICAgICAgICAgICAgICAgaC5wcm9jZXNzTGlzdEFyY2goKQ0KICAgICAgICAg ICAgICAgIGguY2xvc2UoKQ0KICAgICAgICAgICAgICAgICAgICANCmlmIF9f bmFtZV9fID09ICdfX21haW5fXyc6DQogICAgbWFpbigpDQo= ---1395546950-237318664-904200538=:1550 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="HyperArch.py" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: IiIiSHlwZXJBcmNoOiAgUGlwZXJtYWlsIGFyY2hpdmluZyBmb3IgTWFpbE1h biwgdXNpbmcgRG9jdW1lbnRUZW1wbGF0ZQ0KICAgdGVtcGxhdGVzIA0KDQog ICAgICAgLSBUaGUgRHJhZ29uIERlIE1vbnN5bmUgPGRyYWdvbmRtQGludGVn cmFsLm9yZz4gDQoNCiAgIFNlZSA8aHR0cDovL3d3dy5kaWdpY29vbC5jb20v c2l0ZS9QcmluY2lwaWEvRFRNTC5odG1sPiBmb3Igc29tZSBleHBsYW5hdGlv bg0KICAgb2YgRFRNTCAoRG9jdW1lbnRUZW1wbGF0ZSkgU3ludGF4LiANCiAg ICAoTm90ZTogdGhlIFVSTCBsaXN0ZWQgYWN1YWxseSBkb2N1bWVudHMgYSBz bGlnaHRseSBleHRlbmRlZCBEVE1MIHN5bnRheCANCiAgICAgdXNlZCBieSBh IHByb2R1Y3QgY2FsbGVkIFByaW5jaXBpYS4gQnVnIHRoZSBmb2xrcyBhdCBE aWdpY29vbCBmZXIgJ3BsYWluJw0KICAgICBEVE1MIGRvY3VtZW50YXRpb24g Oj4gKQ0KDQogICBUT0RPOg0KICAgICAtIFRoZSB0ZW1wbGF0ZXMgc2hvdWxk IGJlIGJlIGZpbGVzIGluIE1haWxtYW4ncyBUZW1wbGF0ZSBkaXIsIGluc3Rl YWQNCiAgICAgICBvZiBzdGF0aWMgc3RyaW5ncy4NCiAgICAgLSBFYWNoIGxp c3Qgc2hvdWxkIGJlIGFibGUgdG8gaGF2ZSBpdCdzIG93biB0ZW1wbGF0ZXMu DQogICAgICAgQWxzbywgaXQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZmFsbCBi YWNrIHRvIGRlZmF1bHQgdGVtcGxhdGUgaW4gY2FzZSANCiAgICAgICBvZiBl cnJvciBpbiBsaXN0IHNwZWNpZmljIHRlbXBsYXRlLiANCiAgICAgLSBTaG91 bGQgYmUgYWJsZSB0byBmb3JjZSBhbGwgSFRNTCB0byBiZSByZWdlbmVyYXRl ZCBuZXh0IHRpbWUgdGhlIGFyY2hpdmUNCiAgICAgICBpcyBydW4sIGluY2Fz ZSBhIHRlbXBsYXRlIGlzIGNoYW5nZWQuIA0KICAgICAtIFJlcGxhY2UgcGlw ZXJtYWlsLkJTRERCZGF0YWJhc2Ugd2l0aCBzb21ldGhpbmcgdGhhdCBkb3Nl bid0IHJlcXVpcmUgYSBDDQogICAgICAgZXh0ZW50aW9uIChpLmUuIGJzZGRi KS4gIA0KICAgICAgIChQZXJoYXBzIEJvYm9QT1MgPGh0dHA6Ly93d3cuZGln aWNvb2wuY29tL3JlbGVhc2VzL2JvYm8vQm9ib1BPUy1ybi5odG1sPg0KICAg ICAgIGNvdWxkIGJlIHVzZWQgaGVyZT8pDQogICAgIC0gUnVuIGEgY29tbWFu ZCB0byBnZW5lcmF0ZSB0YXJiYWxsIG9mIGh0bWwgYXJjaGl2ZXMgZm9yIGRv d25sb2FkaW5nDQogICAgICAgKHByb2xseSBpbiB0aGUgJ3VwZGF0ZV9kaXJ0 eV9hcmNoaXZlcycgbWV0aG9kICkNCg0KIiIiICAgDQoNCmltcG9ydCByZSwg Y2dpLCB1cmxsaWIsIHN0cmluZw0KaW1wb3J0IHRpbWUsIHBpY2tsZSwgb3Ms IHBvc2l4ZmlsZQ0KaW1wb3J0IERvY3VtZW50VGVtcGxhdGUNCmltcG9ydCBw aXBlcm1haWwNCmltcG9ydCBtbV9jZmcNCg0KYXJ0aWNsZV90ZXh0X3RlbXBs YXRlPSIiIkZyb20gPCEtLSN2YXIgZW1haWwgLS0+ICA8IS0tI3ZhciBkYXRl c3RyIC0tPg0KRGF0ZTogPCEtLSN2YXIgZGF0ZXN0ciAtLT4NCkZyb206IDwh LS0jdmFyIGF1dGhvciAtLT4gPDwhLS0jdmFyIGVtYWlsIC0tPj4NClN1Ympl Y3Q6IDwhLS0jdmFyIHN1YmplY3QgLS0+DQoNCjwhLS0jaW4gYm9keSAtLT48 IS0tI3ZhciBzZXF1ZW5jZS1pdGVtICAtLT48IS0tIy9pbiAtLT4NCg0KIiIi DQoNCmFydGljbGVfdGVtcGxhdGU9IiIiPCFET0NUWVBFIEhUTUwgUFVCTElD ICItLy9XM0MvL0RURCBIVE1MIDMuMi8vRU4iPg0KPEhUTUw+DQogPEhFQUQ+ DQogICA8VElUTEU+PCEtLSN2YXIgc3ViamVjdCBodG1sX3F1b3RlIC0tPjwv VElUTEU+DQogICA8TElOSyBSRUw9IkluZGV4IiBIUkVGPSJpbmRleC5odG1s IiA+DQogICA8TElOSyBSRUw9Im1hZGUiIEhSRUY9Im1haWx0bzo8IS0tI3Zh ciBlbWFpbCB1cmxfcXVvdGUgLS0+Ij4NCiAgIDwhLS1saW5rdGhyZWFkcy0t Pg0KICAgPCEtLSNpZiBwcmV2IC0tPg0KICAgIDxMSU5LIFJFTD0iUHJldmlv dXMiICBIUkVGPSI8IS0tI3ZhciBleHByPSJwcmV2LmZpbGVuYW1lIiB1cmxf cXVvdGUgLS0+Ij4gDQogICA8IS0tIy9pZiAtLT4NCiAgIDwhLS0jaWYgbmV4 dCAtLT4NCiAgICA8TElOSyBSRUw9Ik5leHQiICBIUkVGPSI8IS0tI3ZhciBl eHByPSJuZXh0LmZpbGVuYW1lIiB1cmxfcXVvdGUgLS0+Ij4gDQogICA8IS0t Iy9pZiAtLT4NCiAgIDwhLS1lbmRsaW5rdGhyZWFkcy0tPg0KIDwvSEVBRD4N CiA8Qk9EWSBCR0NPTE9SPSIjZmZmZmZmIj4NCiAgIDxIMT48IS0tI3ZhciBz dWJqZWN0IGh0bWxfcXVvdGUgLS0+PC9IMT4NCiAgICA8Qj48IS0tI3ZhciBh dXRob3IgaHRtbF9xdW90ZSAtLT48L0I+IA0KICAgIDxBIEhSRUY9Im1haWx0 bzo8IS0tI3ZhciBlbWFpbCB1cmxfcXVvdGUgLS0+IiBUSVRMRT0iPCEtLSN2 YXIgc3ViamVjdCBodG1sX3F1b3RlIC0tPiI+PCEtLSN2YXIgZW1haWwgaHRt bF9xdW90ZSAtLT48L0E+PEJSPg0KICAgIDxJPjwhLS0jdmFyIGRhdGVzdHIg aHRtbF9xdW90ZSAtLT48L0k+DQogICAgPFA+PFVMPg0KICAgICAgICAgPCEt LXRocmVhZHMtLT4NCiAgICAgICAgPCEtLSNpZiBwcmV2IC0tPg0KICAgICAg ICAgPExJPiBQcmV2aW91cyBtZXNzYWdlOiA8QSBIUkVGPSI8IS0tI3ZhciBl eHByPSJwcmV2LmZpbGVuYW1lIiB1cmxfcXVvdGUgLS0+Ij48IS0tI3ZhciBl eHByPSJwcmV2LnN1YmplY3QiIGh0bWxfcXVvdGUtLT48L0E+PC9saT4gDQog ICAgICAgIDwhLS0jL2lmIC0tPg0KICAgICAgICA8IS0tI2lmIG5leHQgLS0+ DQogICAgICAgICA8TEk+IE5leHQgbWVzc2FnZTogPEEgSFJFRj0iPCEtLSN2 YXIgZXhwcj0ibmV4dC5maWxlbmFtZSIgdXJsX3F1b3RlIC0tPiI+PCEtLSN2 YXIgZXhwcj0ibmV4dC5zdWJqZWN0IiBodG1sX3F1b3RlIC0tPjwvQT48L2xp PiANCiAgICAgICAgPCEtLSMvaWYgLS0+DQogICAgICAgICA8IS0tZW5kdGhy ZWFkcy0tPg0KICAgICAgICAgPExJPiA8Qj5NZXNzYWdlcyBzb3J0ZWQgYnk6 PC9CPiANCiAgICAgICAgICAgICAgPGEgaHJlZj0iZGF0ZS5odG1sIzwhLS0j dmFyIHNlcXVlbmNlIC0tPiI+WyBkYXRlIF08L2E+DQogICAgICAgICAgICAg IDxhIGhyZWY9InRocmVhZC5odG1sIzwhLS0jdmFyIHNlcXVlbmNlIC0tPiI+ WyB0aHJlYWQgXTwvYT4NCiAgICAgICAgICAgICAgPGEgaHJlZj0ic3ViamVj dC5odG1sIzwhLS0jdmFyIHNlcXVlbmNlIC0tPiI+WyBzdWJqZWN0IF08L2E+ DQogICAgICAgICAgICAgIDxhIGhyZWY9ImF1dGhvci5odG1sIzwhLS0jdmFy IHNlcXVlbmNlIC0tPiI+WyBhdXRob3IgXTwvYT4NCiAgICAgICAgIDwvTEk+ DQogICAgICAgPC9VTD4NCiAgICA8SFI+ICANCjwhLS1iZWdpbmFydGljbGUt LT4NCjwhLS0jaW4gYm9keSAtLT48IS0tI3ZhciBzZXF1ZW5jZS1pdGVtICAt LT48IS0tIy9pbiAtLT4NCg0KPCEtLWVuZGFydGljbGUtLT4NCiAgICA8SFI+ DQogICAgPFA+PFVMPg0KICAgICAgICAgPCEtLXRocmVhZHMtLT4NCiAgICAg ICAgPCEtLSNpZiBwcmV2IC0tPg0KICAgICAgICAgPExJPiBQcmV2aW91cyBt ZXNzYWdlOiA8QSBIUkVGPSI8IS0tI3ZhciBleHByPSJwcmV2LmZpbGVuYW1l IiB1cmxfcXVvdGUgLS0+Ij48IS0tI3ZhciBleHByPSJwcmV2LnN1YmplY3Qi IGh0bWxfcXVvdGUtLT48L0E+PC9saT4gDQogICAgICAgIDwhLS0jL2lmIC0t Pg0KICAgICAgICA8IS0tI2lmIG5leHQgLS0+DQogICAgICAgICA8TEk+IE5l eHQgbWVzc2FnZTogPEEgSFJFRj0iPCEtLSN2YXIgZXhwcj0ibmV4dC5maWxl bmFtZSIgdXJsX3F1b3RlIC0tPiI+PCEtLSN2YXIgZXhwcj0ibmV4dC5zdWJq ZWN0IiBodG1sX3F1b3RlIC0tPjwvQT48L2xpPiANCiAgICAgICAgPCEtLSMv aWYgLS0+DQogICAgICAgICA8IS0tZW5kdGhyZWFkcy0tPg0KICAgICAgICAg PExJPiA8Qj5NZXNzYWdlcyBzb3J0ZWQgYnk6PC9CPiANCiAgICAgICAgICAg ICAgPGEgaHJlZj0iZGF0ZS5odG1sIzwhLS0jdmFyIHNlcXVlbmNlIC0tPiI+ WyBkYXRlIF08L2E+DQogICAgICAgICAgICAgIDxhIGhyZWY9InRocmVhZC5o dG1sIzwhLS0jdmFyIHNlcXVlbmNlIC0tPiI+WyB0aHJlYWQgXTwvYT4NCiAg ICAgICAgICAgICAgPGEgaHJlZj0ic3ViamVjdC5odG1sIzwhLS0jdmFyIHNl cXVlbmNlIC0tPiI+WyBzdWJqZWN0IF08L2E+DQogICAgICAgICAgICAgIDxh IGhyZWY9ImF1dGhvci5odG1sIzwhLS0jdmFyIHNlcXVlbmNlIC0tPiI+WyBh dXRob3IgXTwvYT4NCiAgICAgICAgIDwvTEk+DQogICAgICAgPC9VTD4NCjwv Ym9keT48L2h0bWw+DQoiIiINCg0KaW5kZXhfaGVhZGVyX3RlbXBsYXRlPSIi IjwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIv L0VOIj4NCjxIVE1MPg0KICA8SEVBRD4NCiAgICAgPHRpdGxlPlRoZSA8IS0t I3ZhciBleHByPSJtYWlsbGlzdC5yZWFsX25hbWUiIC0tPiA8IS0tI3ZhciBh cmNoaXZlIC0tPiBBcmNoaXZlIGJ5IDwhLS0jdmFyIHR5cGUgLS0+PC90aXRs ZT4NCiAgPC9IRUFEPg0KICA8Qk9EWSBCR0NPTE9SPSIjZmZmZmZmIj4NCiAg ICAgIDxhIG5hbWU9InN0YXJ0Ij48L0E+DQogICAgICA8aDE+PCEtLSN2YXIg YXJjaGl2ZSAtLT4gQXJjaGl2ZXMgYnkgPCEtLSN2YXIgdHlwZSAtLT48L2gx Pg0KICAgICAgPHVsPg0KICAgICAgICAgPGxpPiA8Yj5NZXNzYWdlcyBzb3J0 ZWQgYnk6PC9iPg0KICAgICAgICAgICAgICA8IS0tI2lmIGV4cHI9InR5cGU8 PidUaHJlYWQnICIgLS0+DQoJCTxhIGhyZWY9InRocmVhZC5odG1sI3N0YXJ0 Ij5bIHRocmVhZCBdPC9hPg0KICAgICAgICAgICAgICA8IS0tIy9pZiAtLT4g DQogICAgICAgICAgICAgIDwhLS0jaWYgZXhwcj0idHlwZTw+J1N1YmplY3Qn ICIgLS0+DQoJCTxhIGhyZWY9InN1YmplY3QuaHRtbCNzdGFydCI+WyBzdWJq ZWN0IF08L2E+DQogICAgICAgICAgICAgIDwhLS0jL2lmIC0tPiANCiAgICAg ICAgICAgICAgPCEtLSNpZiBleHByPSJ0eXBlPD4nQXV0aG9yJyAiIC0tPg0K CQk8YSBocmVmPSJhdXRob3IuaHRtbCNzdGFydCI+WyBhdXRob3IgXTwvYT4N CiAgICAgICAgICAgICAgPCEtLSMvaWYgLS0+IA0KICAgICAgICAgICAgICA8 IS0tI2lmIGV4cHI9InR5cGU8PiAnRGF0ZScgIiAtLT4NCgkJPGEgaHJlZj0i ZGF0ZS5odG1sI3N0YXJ0Ij5bIGRhdGUgXTwvYT4NCiAgICAgICAgICAgICAg PCEtLSMvaWYgLS0+IDwvbGk+DQoJICAgICA8bGk+PGI+PGEgaHJlZj0iPCEt LSN2YXIgZXhwcj0ibWFpbGxpc3QuR2V0QWJzb2x1dGVTY3JpcHRVUkwoJ2xp c3RpbmZvJykiIC0tPiI+TW9yZSBpbmZvIG9uIHRoaXMgbGlzdC4uLjwvYT48 L2I+PC9saT4NCiAJIDwhLS0jaWYgQVJDSElWRVMgLS0+DQoJICAgICA8bGk+ IDxiPjxhIGhyZWY9IjwhLS0jdmFyIEFSQ0hJVkVTIC0tPiI+T3RoZXIgbWFp bCBhcmNoaXZlczwvYT48L2I+IDwvbGk+DQoJIDwhLS0jL2lmIC0tPg0KICAg ICAgPC91bD4NCiAgICAgIDxwPjxiPlN0YXJ0aW5nOjwvYj4gPGk+PCEtLSN2 YXIgZmlyc3RkYXRlIC0tPjwvaT48YnI+DQogICAgICAgICA8Yj5FbmRpbmc6 PC9iPiA8aT48IS0tI3ZhciBsYXN0ZGF0ZSAtLT48L2k+PGJyPg0KICAgICAg ICAgPGI+TWVzc2FnZXM6PC9iPiA8IS0tI3ZhciBzaXplIC0tPjxwPg0KICAg ICA8dWw+DQoNCiIiIg0KDQppbmRleF9mb290ZXJfdGVtcGxhdGU9IiIiDQog ICAgPC91bD4NCiAgICA8cD4NCiAgICAgIDxhIG5hbWU9ImVuZCI+PGI+TGFz dCBtZXNzYWdlIGRhdGU6PC9iPjwvYT4gDQogICAgICAgPGk+PCEtLSN2YXIg bGFzdGRhdGUgLS0+PC9pPjxicj4NCiAgICA8Yj5BcmNoaXZlZCBvbjo8L2I+ IDxpPjwhLS0jdmFyIGFyY2hpdmVkYXRlIC0tPjwvaT4NCiAgICA8cD4NCiAg IDx1bD4NCiAgICAgICAgIDxsaT4gPGI+TWVzc2FnZXMgc29ydGVkIGJ5Ojwv Yj4NCiAgICAgICAgICAgICAgPCEtLSNpZiBleHByPSJ0eXBlPD4nVGhyZWFk JyAiIC0tPg0KCQk8YSBocmVmPSJ0aHJlYWQuaHRtbCNzdGFydCI+WyB0aHJl YWQgXTwvYT4NCiAgICAgICAgICAgICAgPCEtLSMvaWYgLS0+IA0KICAgICAg ICAgICAgICA8IS0tI2lmIGV4cHI9InR5cGU8PidTdWJqZWN0JyAiIC0tPg0K CQk8YSBocmVmPSJzdWJqZWN0Lmh0bWwjc3RhcnQiPlsgc3ViamVjdCBdPC9h Pg0KICAgICAgICAgICAgICA8IS0tIy9pZiAtLT4gDQogICAgICAgICAgICAg IDwhLS0jaWYgZXhwcj0idHlwZTw+J0F1dGhvcicgIiAtLT4NCgkJPGEgaHJl Zj0iYXV0aG9yLmh0bWwjc3RhcnQiPlsgYXV0aG9yIF08L2E+DQogICAgICAg ICAgICAgIDwhLS0jL2lmIC0tPiANCiAgICAgICAgICAgICAgPCEtLSNpZiBl eHByPSJ0eXBlPD4gJ0RhdGUnICIgLS0+DQoJCTxhIGhyZWY9ImRhdGUuaHRt bCNzdGFydCI+WyBkYXRlIF08L2E+DQogICAgICAgICAgICAgIDwhLS0jL2lm IC0tPiA8L2xpPg0KCSAgICAgPGxpPjxiPjxhIGhyZWY9IjwhLS0jdmFyIGV4 cHI9Im1haWxsaXN0LkdldEFic29sdXRlU2NyaXB0VVJMKCdsaXN0aW5mbycp IiAtLT4iPk1vcmUgaW5mbyBvbiB0aGlzIGxpc3QuLi48L2E+PC9iPjwvbGk+ DQogCSA8IS0tI2lmIEFSQ0hJVkVTIC0tPg0KCSAgICAgPGxpPiA8Yj48YSBo cmVmPSI8IS0tI3ZhciBBUkNISVZFUyAtLT4iPk90aGVyIG1haWwgYXJjaGl2 ZXM8L2E+PC9iPiA8L2xpPg0KCSA8IS0tIy9pZiAtLT4NCiAgICAgPC91bD4N CiAgICAgPHA+DQogICAgIDxocj4NCiAgICAgPGk+VGhpcyBhcmNoaXZlIHdh cyBnZW5lcmF0ZWQgYnkgPGEgaHJlZj0iaHR0cDovL3N0YXJzaGlwLnNreXBv cnQubmV0L2NyZXcvYW1rL21haW50YWluZWQvcGlwZXJtYWlsLmh0bWwiPlBp cGVybWFpbCA8IS0tI3ZhciB2ZXJzaW9uIC0tPjwvYT4uPC9pPg0KICA8L0JP RFk+DQo8L0hUTUw+IiIiDQoNCg0KVE9DX3RlbXBsYXRlPSIiIjwhRE9DVFlQ RSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIvL0VOIj4NCjxI VE1MPg0KICA8SEVBRD4NCiAgICAgPHRpdGxlPlRoZSA8IS0tI3ZhciBleHBy PSJtYWlsbGlzdC5yZWFsX25hbWUiICAtLT4gQXJjaGl2ZXM8L3RpdGxlPg0K ICA8L0hFQUQ+DQogIDxCT0RZIEJHQ09MT1I9IiNmZmZmZmYiPg0KICAgICA8 aDE+VGhlIDwhLS0jdmFyIGV4cHI9Im1haWxsaXN0LnJlYWxfbmFtZSIgIC0t PiBBcmNoaXZlcyA8L2gxPg0KICAgICA8cD4NCiAgICAgIDxhIGhyZWY9Ijwh LS0jdmFyIGV4cHI9Im1haWxsaXN0LkdldEFic29sdXRlU2NyaXB0VVJMKCds aXN0aW5mbycpIiAtLT4iPk1vcmUgaW5mbyBvbiB0aGlzIGxpc3QuLi48L2E+ DQogICAgIDwvcD4NCiAgICAgPCEtLSNpZiBhcmNoaXZlcyAtLT4NCiAgICAg IDwhLS0jaW4gYXJjaGl2ZXMgLS0+DQogICAgICAgIDwhLS0jaWYgc2VxdWVu Y2Utc3RhcnQgIC0tPg0KICAgICAgICAgPHRhYmxlIGJvcmRlcj0zPg0KICAg ICAgICAgIDx0cj48dGQ+QXJjaGl2ZTwvdGQ+IDx0ZD5WaWV3IGJ5OjwvdGQ+ IDx0ZD5Eb3dubG9hZGFibGUgdmVyc2lvbjwvdGQ+PC90cj4NCiAgICAgICAg PCEtLSMvaWYgLS0+DQogICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRk PjwhLS0jdmFyIHNlcXVlbmNlLWl0ZW0gIC0tPjo8L3RkPg0KICAgICAgICAg ICAgPHRkPg0KICAgICAgICAgICAgICA8QSBocmVmPSI8IS0tI3ZhciBzZXF1 ZW5jZS1pdGVtICAtLT4vdGhyZWFkLmh0bWwiPlsgVGhyZWFkIF08L2E+DQog ICAgICAgICAgICAgIDxBIGhyZWY9IjwhLS0jdmFyIHNlcXVlbmNlLWl0ZW0g IC0tPi9zdWJqZWN0Lmh0bWwiPlsgU3ViamVjdCBdPC9hPg0KICAgICAgICAg ICAgICA8QSBocmVmPSI8IS0tI3ZhciBzZXF1ZW5jZS1pdGVtICAtLT4vYXV0 aG9yLmh0bWwiPlsgQXV0aG9yIF08L2E+DQogICAgICAgICAgICAgIDxBIGhy ZWY9IjwhLS0jdmFyIHNlcXVlbmNlLWl0ZW0gIC0tPi9kYXRlLmh0bWwiPlsg RGF0ZSBdPC9hPg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0 ZD48QSBocmVmPSI8IS0tI3ZhciBzZXF1ZW5jZS1pdGVtICAtLT4udHh0Lmd6 Ij5bIFRleHQgXTwvYT48L3RkPiANCiAgICAgICAgICA8L3RyPg0KICAgICAg ICA8IS0tI2lmIHNlcXVlbmNlLWVuZCAtLT4NCiAgICAgICAgIDwvdGFibGU+ DQogICAgICAgIDwhLS0jL2lmIC0tPg0KICAgICAgPCEtLSMvaW4gLS0+DQoN CiAgICAgPCEtLSNlbHNlIC0tPg0KICAgICAgIDxQPkN1cnJlbnRseSwgdGhl cmUgYXJlIG5vIGFyY2hpdmVzLiA8L1A+IA0KICAgICA8IS0tIy9pZiAtLT4N CiAgPC9CT0RZPg0KPC9IVE1MPiIiIg0KDQpkZWYgQ0dJZXNjYXBlKGFyZyk6 IA0KICAgIHM9Y2dpLmVzY2FwZShzdHIoYXJnKSkNCiAgICBzPXJlLnN1Yign IicsICcmcXVvdDsnLCBzKQ0KICAgIHJldHVybiBzDQoNCiMgUGFyZW50aGVz aXplZCBodW1hbiBuYW1lIA0KcGFyZW5fbmFtZV9wYXQ9cmUuY29tcGlsZShy JyhbKF0uKlspXSknKSANCiMgU3ViamVjdCBsaW5lcyBwcmVjZWRlZCB3aXRo ICdSZTonIA0KUkVwYXQ9cmUuY29tcGlsZSggciJccypSRVxzKjpccyoiLA0K CQkgIHJlLklHTk9SRUNBU0UpDQojIEUtbWFpbCBhZGRyZXNzZXMgYW5kIFVS THMgaW4gdGV4dA0KZW1haWxwYXQ9cmUuY29tcGlsZShyJyhbLSssLlx3XStA Wy0rLlx3XSspJykgDQojICBBcmdoISAgVGhpcyBwYXR0ZXJuIGlzIGJ1Z2d5 LCBhbmQgd2lsbCBjaG9rZSBvbiBVUkxzIHdpdGggR0VUIHBhcmFtZXRlcnMu DQp1cmxwYXQ9cmUuY29tcGlsZShyJyhcdys6Ly9bXj4pXHNdKyknKSAjIFVS THMgaW4gdGV4dA0KIyBCbGFuayBsaW5lcw0KYmxhbmtwYXQ9cmUuY29tcGls ZShyJ15ccyokJykNCg0KIyANCiMgU3RhcnRpbmcgPGh0bWw+IGRpcmVjdGl2 ZQ0KaHRtbHBhdD1yZS5jb21waWxlKHInXlxzKjxIVE1MPlxzKiQnLCByZS5J R05PUkVDQVNFKSAgICANCiMgRW5kaW5nIDwvaHRtbD4gZGlyZWN0aXZlDQpu b2h0bWxwYXQ9cmUuY29tcGlsZShyJ15ccyo8L0hUTUw+XHMqJCcsIHJlLklH Tk9SRUNBU0UpIA0KIyBNYXRjaCBxdW90ZWQgdGV4dA0KcXVvdGVkcGF0PXJl LmNvbXBpbGUocideKFs+fDpdfCZndDspKycpDQoNCg0KIyBOb3RlOiBJJ20g b3ZlcnJpZGluZyBtb3N0LCBpZiBub3QgYWxsIG9mIHRoZSBwaXBlcm1haWwg QXJ0aWNsZSBjbGFzcyBoZXJlIC1kZG0NCiMgVGhlIEFydGljbGUgY2xhc3Mg ZW5jYXBzdWxhdGVzIGEgc2luZ2xlIHBvc3RpbmcuICBUaGUgYXR0cmlidXRl cyANCiMgYXJlOg0KIw0KIyAgc2VxdWVuY2UgOiBTZXF1ZW5jZSBudW1iZXIs IHVuaXF1ZSBmb3IgZWFjaCBhcnRpY2xlIGluIGEgc2V0IG9mIGFyY2hpdmVz DQojICBzdWJqZWN0ICA6IFN1YmplY3QNCiMgIGRhdGVzdHIgIDogVGhlIHBv c3RpbmcgZGF0ZSwgaW4gaHVtYW4tcmVhZGFibGUgZm9ybWF0DQojICBkYXRl ICAgICA6IFRoZSBwb3N0aW5nIGRhdGUsIGluIHB1cmVseSBudW1lcmljIGZv cm1hdA0KIyAgaGVhZGVycyAgOiBBbnkgb3RoZXIgaGVhZGVycyBvZiBpbnRl cmVzdA0KIyAgYXV0aG9yICAgOiBUaGUgYXV0aG9yJ3MgbmFtZSAoYW5kIHBv c3NpYmx5IG9yZ2FuaXphdGlvbikNCiMgIGVtYWlsICAgIDogVGhlIGF1dGhv cidzIGUtbWFpbCBhZGRyZXNzDQojICBtc2dpZCAgICA6IEEgdW5pcXVlIG1l c3NhZ2UgSUQNCiMgIGluX3JlcGx5X3RvIDogSWYgIT0iIiwgdGhpcyBpcyB0 aGUgbXNnaWQgb2YgdGhlIGFydGljbGUgYmVpbmcgcmVwbGllZCB0bw0KIyAg cmVmZXJlbmNlczogQSAocG9zc2libHkgZW1wdHkpIGxpc3Qgb2YgbXNnaWQn cyBvZiBlYXJsaWVyIGFydGljbGVzIGluIHRoZSB0aHJlYWQNCiMgIGJvZHkg ICAgIDogQSBsaXN0IG9mIHN0cmluZ3MgbWFraW5nIHVwIHRoZSBtZXNzYWdl IGJvZHkNCg0KY2xhc3MgQXJ0aWNsZShwaXBlcm1haWwuQXJ0aWNsZSk6DQog ICAgX19sYXN0X2FydGljbGVfdGltZT10aW1lLnRpbWUoKQ0KDQogICAgaHRt bF90bXBsPURvY3VtZW50VGVtcGxhdGUuSFRNTChhcnRpY2xlX3RlbXBsYXRl KQ0KICAgIHRleHRfdG1wbD1Eb2N1bWVudFRlbXBsYXRlLkhUTUwoYXJ0aWNs ZV90ZXh0X3RlbXBsYXRlKQ0KDQogICAgZGVmIGFzX2h0bWwoc2VsZik6DQog ICAgICAgIHJldHVybiBzZWxmLmh0bWxfdG1wbChzZWxmKQ0KDQogICAgZGVm IGFzX3RleHQoc2VsZik6DQogICAgICAgIHJldHVybiBzZWxmLnRleHRfdG1w bChzZWxmKQ0KDQogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2U9Tm9u ZSwgc2VxdWVuY2U9MCwga2VlcEhlYWRlcnM9W10pOg0KCWltcG9ydCB0aW1l DQoJaWYgbWVzc2FnZT09Tm9uZTogcmV0dXJuDQoJc2VsZi5zZXF1ZW5jZT1z ZXF1ZW5jZQ0KDQoJc2VsZi5wYXJlbnRJRCA9IE5vbmUgDQogICAgICAgIHNl bGYudGhyZWFkS2V5ID0gTm9uZQ0KICAgICAgICBzZWxmLnByZXY9Tm9uZQ0K ICAgICAgICBzZWxmLm5leHQ9Tm9uZQ0KCSMgb3RoZXJ3aXNlIHRoZSBjdXJy ZW50IHNlcXVlbmNlIG51bWJlciBpcyB1c2VkLg0KCWlkPXBpcGVybWFpbC5z dHJpcF9zZXBhcmF0b3JzKG1lc3NhZ2UuZ2V0aGVhZGVyKCdNZXNzYWdlLUlk JykpDQoJaWYgaWQ9PSIiOiBzZWxmLm1zZ2lkPXN0cihzZWxmLnNlcXVlbmNl KQ0KCWVsc2U6IHNlbGYubXNnaWQ9aWQNCg0KCWlmIG1lc3NhZ2UuaGFzX2tl eSgnU3ViamVjdCcpOiBzZWxmLnN1YmplY3Q9c3RyKG1lc3NhZ2VbJ1N1Ympl Y3QnXSkNCgllbHNlOiBzZWxmLnN1YmplY3Q9J05vIHN1YmplY3QnDQoJaT0w DQoJd2hpbGUgKGkhPS0xKToNCgkgICAgcmVzdWx0PVJFcGF0Lm1hdGNoKHNl bGYuc3ViamVjdCkNCgkgICAgaWYgcmVzdWx0OiANCgkJaSA9IHJlc3VsdC5l bmQoMCkNCgkJc2VsZi5zdWJqZWN0PXNlbGYuc3ViamVjdFtpOl0NCgkgICAg ZWxzZTogaT0tMQ0KCWlmIHNlbGYuc3ViamVjdD09IiI6IHNlbGYuc3ViamVj dD0nTm8gc3ViamVjdCcNCg0KCWlmIG1lc3NhZ2UuaGFzX2tleSgnRGF0ZScp OiANCgkgICAgc2VsZi5kYXRlc3RyPXN0cihtZXNzYWdlWydEYXRlJ10pDQog ICAJICAgIGRhdGU9bWVzc2FnZS5nZXRkYXRlX3R6KCdEYXRlJykNCgllbHNl OiANCgkgICAgc2VsZi5kYXRlc3RyPSdOb25lJyANCgkgICAgZGF0ZT1Ob25l DQoJaWYgZGF0ZSE9Tm9uZToNCgkgICAgZGF0ZSwgdHpvZmZzZXQ9ZGF0ZVs6 OV0sIGRhdGVbLTFdIA0KICAgICAgICAgICAgaWYgbm90IHR6b2Zmc2V0Og0K ICAgICAgICAgICAgICAgIHR6b2Zmc2V0ID0gMA0KCSAgICBkYXRlPXRpbWUu bWt0aW1lKGRhdGUpLXR6b2Zmc2V0DQoJZWxzZToNCgkgICAgZGF0ZT1zZWxm Ll9fbGFzdF9hcnRpY2xlX3RpbWUrMSANCiMgICAgICAgICAgICBwcmludCAn QXJ0aWNsZSB3aXRob3V0IGRhdGU6Jywgc2VsZi5tc2dpZA0KCSAgICANCglz ZWxmLl9fbGFzdF9hcnRpY2xlX3RpbWU9ZGF0ZSANCglzZWxmLmRhdGU9JyUw MTFpJyAlIChkYXRlLCkNCg0KCSMgRmlndXJlIG91dCB0aGUgZS1tYWlsIGFk ZHJlc3MgYW5kIHBvc3RlcidzIG5hbWUNCglzZWxmLmF1dGhvciwgc2VsZi5l bWFpbD1tZXNzYWdlLmdldGFkZHIoJ0Zyb20nKQ0KIwllPW1lc3NhZ2UuZ2V0 aGVhZGVyKCdSZXBseS1UbycpDQojCWlmIGUhPU5vbmU6IHNlbGYuZW1haWw9 ZQ0KCXNlbGYuZW1haWw9cGlwZXJtYWlsLnN0cmlwX3NlcGFyYXRvcnMoc2Vs Zi5lbWFpbCkNCglzZWxmLmF1dGhvcj1waXBlcm1haWwuc3RyaXBfc2VwYXJh dG9ycyhzZWxmLmF1dGhvcikNCg0KCWlmIHNlbGYuYXV0aG9yPT0iIjogc2Vs Zi5hdXRob3I9c2VsZi5lbWFpbA0KDQoJIyBTYXZlIHRoZSAnSW4tUmVwbHkt VG86JyBhbmQgJ1JlZmVyZW5jZXM6JyBsaW5lcw0KCWlfcl90PW1lc3NhZ2Uu Z2V0aGVhZGVyKCdJbi1SZXBseS1UbycpDQoJaWYgaV9yX3Q9PU5vbmU6IHNl bGYuaW5fcmVwbHlfdG89JycNCgllbHNlOg0KCSAgICBtYXRjaD1waXBlcm1h aWwubXNnaWRfcGF0LnNlYXJjaChpX3JfdCkNCgkgICAgaWYgbWF0Y2g9PU5v bmU6IHNlbGYuaW5fcmVwbHlfdG89JycNCgkgICAgZWxzZTogc2VsZi5pbl9y ZXBseV90bz1waXBlcm1haWwuc3RyaXBfc2VwYXJhdG9ycyhtYXRjaC5ncm91 cCgxKSkNCgkJDQoJcmVmZXJlbmNlcz1tZXNzYWdlLmdldGhlYWRlcignUmVm ZXJlbmNlcycpDQoJaWYgcmVmZXJlbmNlcz09Tm9uZTogc2VsZi5yZWZlcmVu Y2VzPVtdDQoJZWxzZTogc2VsZi5yZWZlcmVuY2VzPW1hcChwaXBlcm1haWwu c3RyaXBfc2VwYXJhdG9ycywgc3RyaW5nLnNwbGl0KHJlZmVyZW5jZXMpKQ0K DQoJIyBTYXZlIGFueSBvdGhlciBpbnRlcmVzdGluZyBoZWFkZXJzDQoJc2Vs Zi5oZWFkZXJzPXt9DQoJZm9yIGkgaW4ga2VlcEhlYWRlcnM6DQoJICAgIGlm IG1lc3NhZ2UuaGFzX2tleShpKTogc2VsZi5oZWFkZXJzW2ldPW1lc3NhZ2Vb aV0NCg0KCSMgUmVhZCB0aGUgbWVzc2FnZSBib2R5DQoJc2VsZi5ib2R5PVtd DQoJbWVzc2FnZS5yZXdpbmRib2R5KCkNCgl3aGlsZSAoMSk6DQoJICAgIGxp bmU9bWVzc2FnZS5mcC5yZWFkbGluZSgpDQoJICAgIGlmIGxpbmU9PSIiOiBi cmVhaw0KCSAgICBzZWxmLmJvZHkuYXBwZW5kKGxpbmUpDQoJDQogICAgZGVm IGxvYWRib2R5X2Zyb21IVE1MKHNlbGYsZmlsZW9iaik6DQogICAgICAgIHNl bGYuYm9keT1bXQ0KICAgICAgICBiZWdpbj0wDQoJd2hpbGUoMSk6DQogICAg ICAgICAgICBsaW5lPWZpbGVvYmoucmVhZGxpbmUoKQ0KICAgICAgICAgICAg aWYgbm90IGxpbmU6DQogICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAg ICAgIGlmIChub3QgYmVnaW4pIGFuZCBzdHJpbmcuc3RyaXAobGluZSk9PSc8 IS0tYmVnaW5hcnRpY2xlLS0+JzoNCgkgICAgICAgIGJlZ2luPTENCiAgICAg ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgaWYgc3RyaW5nLnN0 cmlwKGxpbmUpPT0nPCEtLWVuZGFydGljbGUtLT4nOg0KICAgICAgICAgICAg ICAgIGJyZWFrDQogICAgICAgICAgICBpZiBiZWdpbjoNCiAgICAgICAgICAg ICAgICBzZWxmLmJvZHkuYXBwZW5kKGxpbmUpDQoNCiAgICBkZWYgX19nZXRz dGF0ZV9fKHNlbGYpOg0KICAgICAgICBkPXt9DQogICAgICAgIGZvciBlYWNo IGluIHNlbGYuX19kaWN0X18ua2V5cygpOg0KICAgICAgICAgICAgaWYgZWFj aCBpbiBbJ21haWxsaXN0JywncHJldicsJ25leHQnLCdib2R5J106DQogICAg ICAgICAgICAgICAgZFtlYWNoXSA9IE5vbmUNCiAgICAgICAgICAgIGVsc2U6 DQogICAgICAgICAgICAgICAgZFtlYWNoXSA9IHNlbGYuX19kaWN0X19bZWFj aF0NCiAgICAgICAgZFsnYm9keSddPVtdDQogICAgICAgIHJldHVybiBkDQog DQoNCmNsYXNzIEh5cGVyQXJjaGl2ZShwaXBlcm1haWwuVCk6DQoNCiAgICAj IHNvbWUgZGVmYXVsdHMNCiAgICBESVJNT0RFPTA3NTUgDQogICAgRklMRU1P REU9MDY0NCANCg0KICAgIFZFUkJPU0U9MA0KICAgIERFRkFVTFRJTkRFWD0n dGhyZWFkJw0KICAgIEFSQ0hJVkVfUEVSSU9EPSdtb250aCcNCiANCiAgICBU SFJFQURMQVpZPTANCiAgICBUSFJFQURMRVZFTFM9Mw0KDQogICAgQUxMT1dI VE1MPTENCiAgICBTSE9XSFRNTD0xDQogICAgSVFVT1RFUz0xDQogICAgU0hP V0JSPTENCg0KICAgIGh0bWxfaGRyX3RtcGw9RG9jdW1lbnRUZW1wbGF0ZS5I VE1MKGluZGV4X2hlYWRlcl90ZW1wbGF0ZSkNCiAgICBodG1sX2Zvb3RfdG1w bD1Eb2N1bWVudFRlbXBsYXRlLkhUTUwoaW5kZXhfZm9vdGVyX3RlbXBsYXRl KQ0KICAgIGh0bWxfVE9DX3RtcGw9RG9jdW1lbnRUZW1wbGF0ZS5IVE1MKFRP Q190ZW1wbGF0ZSkNCg0KICAgIGRlZiBodG1sX2Zvb3Qoc2VsZik6DQogICAg ICAgIHJldHVybiBzZWxmLmh0bWxfZm9vdF90bXBsKHNlbGYpDQoNCiAgICBk ZWYgaHRtbF9oZWFkKHNlbGYpOg0KICAgICAgICByZXR1cm4gc2VsZi5odG1s X2hkcl90bXBsKHNlbGYpDQoNCiAgICBkZWYgaHRtbF9UT0Moc2VsZik6DQog ICAgICAgIHJldHVybiBzZWxmLmh0bWxfVE9DX3RtcGwoc2VsZikNCg0KDQog ICAgZGVmIF9faW5pdF9fKHNlbGYsIG1haWxsaXN0LHVubG9jaz0xKToNCiAg ICAgICAgc2VsZi5tYWlsbGlzdD1tYWlsbGlzdA0KICAgICAgICBzZWxmLl91 bmxvY2tsaXN0PXVubG9jaw0KICAgICAgICBzZWxmLl9sb2NrX2ZpbGU9Tm9u ZQ0KIA0KICAgICAgICBpZiBoYXNhdHRyKHNlbGYubWFpbGxpc3QsJ2FyY2hp dmVfdm9sdW1lX2ZyZXF1ZW5jeScpOg0KICAgICAgICAgICAgaWYgc2VsZi5t YWlsbGlzdC5hcmNoaXZlX3ZvbHVtZV9mcmVxdWVuY3kgPT0gMDoNCiAgICAg ICAgICAgICAgICBzZWxmLkFSQ0hJVkVfUEVSSU9EPSd5ZWFyJw0KICAgICAg ICAgICAgZWxpZiBzZWxmLm1haWxsaXN0LmFyY2hpdmVfdm9sdW1lX2ZyZXF1 ZW5jeSA9PSAyOg0KICAgICAgICAgICAgICAgIHNlbGYuQVJDSElWRV9QRVJJ T0Q9J3F1YXJ0ZXInDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAg ICAgIHNlbGYuQVJDSElWRV9QRVJJT0Q9J21vbnRoJw0KDQoJcGlwZXJtYWls LlQuX19pbml0X18oc2VsZiwgbWFpbGxpc3QuYXJjaGl2ZV9kaXJlY3Rvcnks IHJlbG9hZD0xLCBkYXRhYmFzZT1waXBlcm1haWwuQlNEREJkYXRhYmFzZSht YWlsbGlzdC5hcmNoaXZlX2RpcmVjdG9yeSkpDQoNCiAgICBkZWYgR2V0QXJj aExvY2soc2VsZik6DQogICAgICAgIGlmIHNlbGYuX2xvY2tfZmlsZToNCiAg ICAgICAgICAgIHJldHVybiAxDQogICAgICAgIG91ID0gb3MudW1hc2soMCkN CiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgc2VsZi5fbG9ja19maWxlID0g cG9zaXhmaWxlLm9wZW4oDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvcy5wYXRoLmpvaW4obW1fY2ZnLkxPQ0tfRElSLCAnJXNAYXJjaC5sb2Nr JyAlIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWls bGlzdC5faW50ZXJuYWxfbmFtZSksICdhKycpDQogICAgICAgIGZpbmFsbHk6 DQogICAgICAgICAgICBvcy51bWFzayhvdSkNCiAgICAgICAgIyBtaW5vciBy YWNlIGNvbmRpdGlvbiBoZXJlLCB0aGVyZSBpcyBubyB3YXkgdG8gYXRvbWlj bHkgDQogICAgICAgICMgY2hlY2sgJiBnZXQgYSBsb2NrLiBUaGF0IHNob3Vs ZG4ndCBtYXR0ZXIgaGVyZSB0aG8nIC1kZG0NCiAgICAgICAgaWYgbm90IHNl bGYuX2xvY2tfZmlsZS5sb2NrKCd3PycsIDEpOg0KICAgICAgICAgICAgc2Vs Zi5fbG9ja19maWxlLmxvY2soJ3d8JywgMSkNCiAgICAgICAgZWxzZToNCiAg ICAgICAgICAgIHJldHVybiAwDQogICAgICAgIHJldHVybiAxDQoNCiAgICBk ZWYgRHJvcEFyY2hMb2NrKHNlbGYpOg0KICAgICAgICBpZiBzZWxmLl9sb2Nr X2ZpbGU6DQogICAgICAgICAgICBzZWxmLl9sb2NrX2ZpbGUubG9jaygndScp DQogICAgICAgICAgICBzZWxmLl9sb2NrX2ZpbGUuY2xvc2UoKQ0KICAgICAg ICAgICAgc2VsZi5fbG9ja19maWxlID0gTm9uZQ0KDQogICAgZGVmIHByb2Nl c3NMaXN0QXJjaChzZWxmKToNCiAgICAgICAgbmFtZSA9IHNlbGYubWFpbGxp c3QuQXJjaGl2ZUZpbGVOYW1lKCkNCiAgICAgICAgd25hbWU9IG5hbWUrJy53 b3JraW5nJw0KICAgICAgICBlbmFtZT0gbmFtZSsnLmVycl91bmFyY2hpdmVk Jw0KICAgICAgICB0cnk6DQogICAgICAgICAgICBvcy5zdGF0KG5hbWUpDQog ICAgICAgIGV4Y2VwdCAoSU9FcnJvcixvcy5lcnJvcik6DQogICAgICAgICAg ICAjbm8gYXJjaGl2ZSBmaWxlLCBub3RoaW4gdG8gZG8gLWRkbQ0KICAgICAg ICAgICAgcmV0dXJuDQogDQogICAgICAgICNzZWUgaWYgYXJjaCBpcyBsb2Nr ZWQgaGVyZSAtZGRtIA0KICAgICAgICBpZiBub3Qgc2VsZi5HZXRBcmNoTG9j aygpOg0KICAgICAgICAgICAgI2Fub3RoZXIgYXJjaGl2ZXIgaXMgcnVubmlu Zywgbm90aGluZyB0byBkby4gLWRkbQ0KICAgICAgICAgICAgcmV0dXJuDQoN CiAgICAgICAgI2lmIHRoZSB3b3JraW5nIGZpbGUgaXMgc3RpbGwgaGVyZSwg dGhlIGFyY2hpdmVyIG1heSBoYXZlIA0KICAgICAgICAjIGNyYXNoZWQgZHVy aW5nIGFyY2hpdmluZy4gU2F2ZSBpdCwgbG9nIGFuIGVycm9yLCBhbmQgbW92 ZSBvbi4gDQoJdHJ5Og0KICAgICAgICAgICAgd2Y9b3Blbih3bmFtZSwncicp DQogICAgICAgICAgICBzZWxmLm1haWxsaXN0LkxvZ01zZygiZXJyb3IiLCJB cmNoaXZlIHdvcmtpbmcgZmlsZSAlcyBwcmVzZW50LiAiDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiQ2hlY2sgJXMgZm9yIHBvc3NpYmx5 IHVuYXJjaGl2ZWQgbXNncyIgJQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICh3bmFtZSxlbmFtZSkgKQ0KICAgICAgICAgICAgZWY9b3Bl bihlbmFtZSwgJ2ErJykNCiAgICAgICAgICAgIGVmLnNlZWsoMSwyKQ0KICAg ICAgICAgICAgaWYgZWYucmVhZCgxKSA8PiAnXG4nOg0KICAgICAgICAgICAg ICAgIGVmLndyaXRlKCdcbicpDQogICAgICAgICAgICBlZi53cml0ZSh3Zi5y ZWFkKCkpDQogICAgICAgICAgICBlZi5jbG9zZSgpDQogICAgICAgICAgICB3 Zi5jbG9zZSgpDQogICAgICAgICAgICBvcy51bmxpbmsod25hbWUpDQogICAg ICAgIGV4Y2VwdCBJT0Vycm9yOg0KICAgICAgICAgICAgcGFzcw0KICAgICAg ICBvcy5yZW5hbWUobmFtZSx3bmFtZSkNCiAgICAgICAgaWYgc2VsZi5fdW5s b2NrbGlzdDoNCiAgICAgICAgICAgIHNlbGYubWFpbGxpc3QuVW5sb2NrKCkN CiAgICAgICAgYXJjaGZpbGU9b3Blbih3bmFtZSwncicpDQogICAgICAgIHNl bGYucHJvY2Vzc1VuaXhNYWlsYm94KGFyY2hmaWxlLCBBcnRpY2xlKQ0KICAg ICAgICBhcmNoZmlsZS5jbG9zZSgpDQogICAgICAgIG9zLnVubGluayh3bmFt ZSkNCiAgICAgICAgc2VsZi5Ecm9wQXJjaExvY2soKQ0KDQogICAgZGVmIGdl dF9maWxlbmFtZShzZWxmLCBhcnRpY2xlKToNCglyZXR1cm4gJyUwNmkuaHRt bCcgJSAoYXJ0aWNsZS5zZXF1ZW5jZSwpDQoNCiAgICBkZWYgZ2V0X2FyY2hp dmVzKHNlbGYsIGFydGljbGUpOg0KCSIiIlJldHVybiBhIGxpc3Qgb2YgaW5k ZXhlcyB3aGVyZSB0aGUgYXJ0aWNsZSBzaG91bGQgYmUgZmlsZWQuDQoJQSBz dHJpbmcgY2FuIGJlIHJldHVybmVkIGlmIHRoZSBsaXN0IG9ubHkgY29udGFp bnMgb25lIGVudHJ5LCANCglhbmQgdGhlIGVtcHR5IGxpc3QgaXMgbGVnYWwu IiIiDQoJaWYgYXJ0aWNsZS5zdWJqZWN0IGluIFsnc3Vic2NyaWJlJywgJ3Vu c3Vic2NyaWJlJ106IHJldHVybiBOb25lDQogICAgICAgIHJldHVybiBzZWxm LmRhdGVUb1ZvbE5hbWUoc3RyaW5nLmF0b2YoYXJ0aWNsZS5kYXRlKSkNCg0K DQojIFRoZSBmb2xsb3dpbmcgdHdvIG1ldGhvZHMgc2hvdWxkIGJlIGludmVy c2VzIG9mIGVhY2ggb3RoZXIuIC1kZG0NCg0KICAgIGRlZiBkYXRlVG9Wb2xO YW1lKHNlbGYsZGF0ZSk6DQogICAgICAgIGRhdGV0dXBsZT10aW1lLmdtdGlt ZShkYXRlKQ0KCWlmIHNlbGYuQVJDSElWRV9QRVJJT0Q9PSd5ZWFyJzoNCgkg ICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoIiVZIixkYXRldHVwbGUpDQoJZWxp ZiBzZWxmLkFSQ0hJVkVfUEVSSU9EPT0ncXVhcnRlcic6DQoJICAgIGlmIGFk YXRlWzFdIGluIFsxLDIsM106DQoJICAgICAgICByZXR1cm4gdGltZS5zdHJm dGltZSgiJVlxMSIsZGF0ZXR1cGxlKQ0KCSAgICBlbGlmIGFkYXRlWzFdIGlu IFs0LDUsNl06DQoJICAgICAgICByZXR1cm4gdGltZS5zdHJmdGltZSgiJVlx MiIsZGF0ZXR1cGxlKQ0KCSAgICBlbGlmIGFkYXRlWzFdIGluIFs3LDgsOV06 DQoJICAgICAgICByZXR1cm4gdGltZS5zdHJmdGltZSgiJVlxMyIsZGF0ZXR1 cGxlKQ0KCSAgICBlbHNlOg0KCSAgICAgICAgcmV0dXJuIHRpbWUuc3RyZnRp bWUoIiVZcTQiLGRhdGV0dXBsZSkNCiAgICAgICAgIyBtb250aC4gLWRkbQ0K IAllbHNlOg0KICAgICAgICAgICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoIiVZ LSVCIixkYXRldHVwbGUpDQoNCiAgICBkZWYgdm9sTmFtZVRvRGF0ZShzZWxm LHZvbG5hbWUpOg0KICAgICAgICB2b2xuYW1lPXN0cmluZy5zdHJpcCh2b2xu YW1lKQ0KICAgICAgICB2b2xyZT0geyAneWVhcicgOiByJ14oP1A8eWVhcj5b MC05XXs0LDR9KSQnLA0KICAgICAgICAgICAgICAgICAncXVhcnRlcicgOiBy J14oP1A8eWVhcj5bMC05XXs0LDR9KXEoP1A8cXVhcnRlcj5bMTIzNF0pJCcs DQogICAgICAgICAgICAgICAgICdtb250aCcgOiByJ14oP1A8eWVhcj5bMC05 XXs0LDR9KS0oP1A8bW9udGg+W2EtekEtWl0rKSQnIH0NCiAgICAgICAgZm9y IGVhY2ggaW4gdm9scmUua2V5cygpOg0KICAgICAgICAgICAgbWF0Y2g9cmUu bWF0Y2godm9scmVbZWFjaF0sdm9sbmFtZSkNCiAgICAgICAgICAgIGlmIG1h dGNoOg0KICAgICAgICAgICAgICAgIHllYXI9c3RyaW5nLmF0b2kobWF0Y2gu Z3JvdXAoJ3llYXInKSkNCiAgICAgICAgICAgICAgICBtb250aD0xDQogICAg ICAgICAgICAgICAgaWYgZWFjaCA9PSAncXVhcnRlcic6DQogICAgICAgICAg ICAgICAgICAgIHE9c3RyaW5nLmF0b2kobWF0Y2guZ3JvdXAoJ3F1YXJ0ZXIn KSkNCiAgICAgICAgICAgICAgICAgICAgbW9udGg9KHEqMyktMg0KICAgICAg ICAgICAgICAgIGVsaWYgZWFjaCA9PSAnbW9udGgnOg0KICAgICAgICAgICAg ICAgICAgICBtb250aHN0cj1zdHJpbmcubG93ZXIobWF0Y2guZ3JvdXAoJ21v bnRoJykpDQogICAgICAgICAgICAgICAgICAgIG09W10NCiAgICAgICAgICAg ICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwxMyk6DQogICAgICAgICAgICAg ICAgICAgICAgICBtLmFwcGVuZChzdHJpbmcubG93ZXIoDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCIlQiIsKDE5 OTksaSwxLDAsMCwwLDAsMSwwKSkpKQ0KICAgICAgICAgICAgICAgICAgICB0 cnk6DQogICAgICAgICAgICAgICAgICAgICAgICBtb250aD1tLmluZGV4KG1v bnRoc3RyKSsxDQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVy cm9yOg0KICAgICAgICAgICAgICAgICAgICAgICAgcGFzcw0KICAgICAgICAg ICAgICAgIHJldHVybiB0aW1lLm1rdGltZSgoeWVhcixtb250aCwxLDAsMCww LDAsMSwtMSkpDQogICAgICAgIHJldHVybiAwLjANCg0KICAgIGRlZiBzb3J0 YXJjaGl2ZXMoc2VsZik6DQogICAgICAgIGRlZiBzZihhLGIscz1zZWxmKToN CiAgICAgICAgICAgIGFsPXMudm9sTmFtZVRvRGF0ZShhKQ0KICAgICAgICAg ICAgYmw9cy52b2xOYW1lVG9EYXRlKGIpDQogICAgICAgICAgICBpZiBhbD5i bDoNCiAgICAgICAgICAgICAgICByZXR1cm4gMQ0KICAgICAgICAgICAgZWxp ZiBhbDxibDoNCiAgICAgICAgICAgICAgICByZXR1cm4gLTENCiAgICAgICAg ICAgIGVsc2U6DQogICAgICAgICAgICAgICAgcmV0dXJuIDANCiAgICAgICAg aWYgc2VsZi5BUkNISVZFX1BFUklPRCBpbiAoJ21vbnRoJywneWVhcicsJ3F1 YXJ0ZXInKToNCiAgICAgICAgICAgIHNlbGYuYXJjaGl2ZXMuc29ydChzZikN CiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIHNlbGYuYXJjaGl2ZXMuc29y dCgpDQoNCiAgICBkZWYgbWVzc2FnZShzZWxmLCBtc2cpOg0KCWlmIHNlbGYu VkVSQk9TRToNCgkgICAgaW1wb3J0IHN5cw0KCSAgICBzeXMuc3RkZXJyLndy aXRlKG1zZykNCgkgICAgaWYgbXNnWy0xOl0hPSdcbic6IHN5cy5zdGRlcnIu d3JpdGUoJ1xuJykNCg0KICAgIGRlZiBvcGVuX25ld19hcmNoaXZlKHNlbGYs IGFyY2hpdmUsIGFyY2hpdmVkaXIpOg0KCWltcG9ydCBvcw0KCWluZGV4X2h0 bWw9b3MucGF0aC5qb2luKGFyY2hpdmVkaXIsICdpbmRleC5odG1sJykgDQoJ dHJ5OiBvcy51bmxpbmsoaW5kZXhfaHRtbCkNCglleGNlcHQ6IHBhc3MNCglv cy5zeW1saW5rKHNlbGYuREVGQVVMVElOREVYKycuaHRtbCcsaW5kZXhfaHRt bCkNCg0KICAgIGRlZiB3cml0ZV9pbmRleF9oZWFkZXIoc2VsZik6DQoJc2Vs Zi5kZXB0aD0wDQogICAgICAgIHByaW50IHNlbGYuaHRtbF9oZWFkKCkNCg0K ICAgICAgICBpZiBub3Qgc2VsZi5USFJFQURMQVpZIGFuZCBzZWxmLnR5cGU9 PSdUaHJlYWQnOg0KCSAgICAjIFVwZGF0ZSB0aGUgdGhyZWFkZWQgaW5kZXgN CgkgICAgc2VsZi5tZXNzYWdlKCJDb21wdXRpbmcgdGhyZWFkZWQgaW5kZXhc biIpDQoJICAgIHNlbGYudXBkYXRlVGhyZWFkZWRJbmRleCgpDQoNCg0KICAg IGRlZiB3cml0ZV9pbmRleF9mb290ZXIoc2VsZik6DQoJaW1wb3J0IHN0cmlu Zw0KCWZvciBpIGluIHJhbmdlKHNlbGYuZGVwdGgpOiBwcmludCAnPC9VTD4n DQogICAgICAgIHByaW50IHNlbGYuaHRtbF9mb290KCkNCg0KICAgIGRlZiB3 cml0ZV9pbmRleF9lbnRyeShzZWxmLCBhcnRpY2xlKToNCglwcmludCAnPExJ PiA8QSBIUkVGPSIlcyI+JXM8L0E+IDxBIE5BTUU9IiVpIj48L0E+PEk+JXM8 L0k+JyAlICh1cmxsaWIucXVvdGUoYXJ0aWNsZS5maWxlbmFtZSksIA0KCQkJ CQkJCQkgICAgIENHSWVzY2FwZShhcnRpY2xlLnN1YmplY3QpLCBhcnRpY2xl LnNlcXVlbmNlLCANCgkJCQkJCQkJICAgICBDR0llc2NhcGUoYXJ0aWNsZS5h dXRob3IpKQ0KDQogICAgZGVmIHdyaXRlX3RocmVhZGluZGV4X2VudHJ5KHNl bGYsIGFydGljbGUsIGRlcHRoKToNCglpZiBkZXB0aDwwOiANCgkgICAgc3lz LnN0ZGVyci53cml0ZSgnZGVwdGg8MCcpIDsgZGVwdGg9MA0KCWlmIGRlcHRo PnNlbGYuVEhSRUFETEVWRUxTOiBkZXB0aD1zZWxmLlRIUkVBRExFVkVMUw0K CWlmIGRlcHRoPHNlbGYuZGVwdGg6IA0KCSAgICBmb3IgaSBpbiByYW5nZShz ZWxmLmRlcHRoLWRlcHRoKTogcHJpbnQgJzwvVUw+Jw0KCWVsaWYgZGVwdGg+ c2VsZi5kZXB0aDogDQoJICAgIGZvciBpIGluIHJhbmdlKGRlcHRoLXNlbGYu ZGVwdGgpOiBwcmludCAnPFVMPicNCglwcmludCAnPCEtLSVpICVzIC0tPicg JSAoZGVwdGgsIGFydGljbGUudGhyZWFkS2V5KQ0KCXNlbGYuZGVwdGg9ZGVw dGgNCglwcmludCAnPExJPiA8QSBIUkVGPSIlcyI+JXM8L0E+IDxBIE5BTUU9 IiVpIj48L0E+PEk+JXM8L0k+JyAlIChDR0llc2NhcGUodXJsbGliLnF1b3Rl KGFydGljbGUuZmlsZW5hbWUpKSwNCgkJCQkJCQkJICAgICBDR0llc2NhcGUo YXJ0aWNsZS5zdWJqZWN0KSwgYXJ0aWNsZS5zZXF1ZW5jZSs5MTAsIA0KCQkJ CQkJCQkgICAgIENHSWVzY2FwZShhcnRpY2xlLmF1dGhvcikpDQoNCiAgICBk ZWYgd3JpdGVfVE9DKHNlbGYpOg0KICAgICAgICBzZWxmLnNvcnRhcmNoaXZl cygpDQogICAgICAgIHRvYz1vcGVuKG9zLnBhdGguam9pbihzZWxmLmJhc2Vk aXIsICdpbmRleC5odG1sJyksICd3JykNCiAgICAgICAgdG9jLndyaXRlKHNl bGYuaHRtbF9UT0MoKSkNCiAgICAgICAgdG9jLmNsb3NlKCkNCg0KDQogICAg IyBBcmNoaXZlIGFuIEFydGljbGUgb2JqZWN0Lg0KICAgIGRlZiBhZGRfYXJ0 aWNsZShzZWxmLCBhcnRpY2xlKToNCiAgICAgICAgIyBEZXRlcm1pbmUgaW50 byB3aGF0IGFyY2hpdmVzIHRoZSBhcnRpY2xlIHNob3VsZCBiZSBwbGFjZWQN CiAgICAgICAgYXJjaGl2ZXM9c2VsZi5nZXRfYXJjaGl2ZXMoYXJ0aWNsZSkN CiAgICAgICAgaWYgYXJjaGl2ZXM9PU5vbmU6IGFyY2hpdmVzPVtdICAgICAg ICAjIElmIG5vIHZhbHVlIHdhcyByZXR1cm5lZCwgaWdub3JlIGl0DQogICAg ICAgIGlmIHR5cGUoYXJjaGl2ZXMpPT10eXBlKCcnKTogYXJjaGl2ZXM9W2Fy Y2hpdmVzXSAgICAgICAgIyBJZiBhIHN0cmluZyB3YXMgcmV0dXJuZWQsIGNv bnZlcnQgdG8gYSBsaXN0DQogICAgICAgIGlmIGFyY2hpdmVzPT1bXTogcmV0 dXJuICAgICAgICAgIyBJZ25vcmUgdGhlIGFydGljbGUNCg0KICAgICAgICAj IEFkZCB0aGUgYXJ0aWNsZSB0byBlYWNoIGFyY2hpdmUgaW4gdHVybg0KICAg ICAgICBhcnRpY2xlLmZpbGVuYW1lPWZpbGVuYW1lPXNlbGYuZ2V0X2ZpbGVu YW1lKGFydGljbGUpDQogICAgICAgIGFydGljbGVfdGV4dD1hcnRpY2xlLmFz X3RleHQoKQ0KICAgICAgICB0ZW1wPXNlbGYuZm9ybWF0X2FydGljbGUoYXJ0 aWNsZSkgIyBSZWZvcm1hdCB0aGUgYXJ0aWNsZQ0KICAgICAgICBzZWxmLm1l c3NhZ2UoIlByb2Nlc3NpbmcgYXJ0aWNsZSAjIitzdHIoYXJ0aWNsZS5zZXF1 ZW5jZSkrJyBpbnRvIGFyY2hpdmVzICcrc3RyKGFyY2hpdmVzKSkNCiAgICAg ICAgZm9yIGkgaW4gYXJjaGl2ZXM6DQogICAgICAgICAgICBzZWxmLmFyY2hp dmU9aQ0KICAgICAgICAgICAgYXJjaGl2ZWRpcj1vcy5wYXRoLmpvaW4oc2Vs Zi5iYXNlZGlyLCBpKQ0KICAgICAgICAgICAgIyBJZiBpdCdzIGEgbmV3IGFy Y2hpdmUsIGNyZWF0ZSBpdA0KICAgICAgICAgICAgaWYgaSBub3QgaW4gc2Vs Zi5hcmNoaXZlczogDQogICAgICAgICAgICAgICAgc2VsZi5hcmNoaXZlcy5h cHBlbmQoaSkgOyBzZWxmLnVwZGF0ZV9UT0M9MQ0KICAgICAgICAgICAgICAg IHNlbGYuZGF0YWJhc2UubmV3QXJjaGl2ZShpKQ0KICAgICAgICAgICAgICAg ICMgSWYgdGhlIGFyY2hpdmUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIGNy ZWF0ZSBpdA0KICAgICAgICAgICAgICAgIHRyeTogb3Muc3RhdChhcmNoaXZl ZGlyKQ0KICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgZXJyZGF0 YToNCiAgICAgICAgICAgICAgICAgICAgZXJybm8sIGVycm1zZz1lcnJkYXRh DQogICAgICAgICAgICAgICAgICAgIGlmIGVycm5vPT0yOiANCiAgICAgICAg ICAgICAgICAgICAgICAgIG9zLm1rZGlyKGFyY2hpdmVkaXIsIHNlbGYuRElS TU9ERSkNCiAgICAgICAgICAgICAgICAgICAgZWxzZTogcmFpc2Ugb3MuZXJy b3IsIGVycmRhdGENCiAgICAgICAgICAgICAgICBzZWxmLm9wZW5fbmV3X2Fy Y2hpdmUoaSwgYXJjaGl2ZWRpcikNCg0KICAgICAgICAgICAgIyBXcml0ZSB0 aGUgSFRNTC1pemVkIGFydGljbGUgdG8gdGhlIGh0bWwgYXJjaGl2ZS4NCiAg ICAgICAgICAgIGY9b3Blbihvcy5wYXRoLmpvaW4oYXJjaGl2ZWRpciwgZmls ZW5hbWUpLCAndycpDQogICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpv aW4oYXJjaGl2ZWRpciwgZmlsZW5hbWUpLCBzZWxmLkZJTEVNT0RFKQ0KICAg ICAgICAgICAgZi53cml0ZSh0ZW1wLmFzX2h0bWwoKSkNCiAgICAgICAgICAg IGYuY2xvc2UoKQ0KDQoNCiAgICAgICAgICAgICMgV3JpdGUgdGhlIHRleHQg YXJ0aWNsZSB0byB0aGUgdGV4dCBhcmNoaXZlLg0KICAgICAgICAgICAgYXJj aGl2ZXRleHRmaWxlPW9zLnBhdGguam9pbihzZWxmLmJhc2VkaXIsIiVzLnR4 dCIgJSBpKQ0KICAgICAgICAgICAgZj1vcGVuKGFyY2hpdmV0ZXh0ZmlsZSwg J2ErJykNCiAgICAgICAgICAgIG9zLmNobW9kKGFyY2hpdmV0ZXh0ZmlsZSwg c2VsZi5GSUxFTU9ERSkNCiAgICAgICAgICAgIGYud3JpdGUoYXJ0aWNsZV90 ZXh0KQ0KICAgICAgICAgICAgZi5jbG9zZSgpDQoNCg0KICAgICAgICAgICAg YXV0aG9ya2V5PXBpcGVybWFpbC5maXhBdXRob3IoYXJ0aWNsZS5hdXRob3Ip KydcMDAwJythcnRpY2xlLmRhdGUNCiAgICAgICAgICAgIHN1YmplY3RrZXk9 c3RyaW5nLmxvd2VyKGFydGljbGUuc3ViamVjdCkrJ1wwMDAnK2FydGljbGUu ZGF0ZQ0KDQogICAgICAgICAgICAjIFVwZGF0ZSBwYXJlbnRpbmcgaW5mbw0K ICAgICAgICAgICAgcGFyZW50SUQ9Tm9uZQ0KICAgICAgICAgICAgaWYgYXJ0 aWNsZS5pbl9yZXBseV90byE9Jyc6IHBhcmVudElEPWFydGljbGUuaW5fcmVw bHlfdG8NCiAgICAgICAgICAgIGVsaWYgYXJ0aWNsZS5yZWZlcmVuY2VzIT1b XTogDQogICAgICAgICAgICAgICAgIyBSZW1vdmUgYXJ0aWNsZSBJRHMgdGhh dCBhcmVuJ3QgaW4gdGhlIGFyY2hpdmUNCiAgICAgICAgICAgICAgICByZWZz PWZpbHRlcihsYW1iZGEgeCwgc2VsZj1zZWxmOiBzZWxmLmRhdGFiYXNlLmhh c0FydGljbGUoc2VsZi5hcmNoaXZlLCB4KSwgDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXJ0aWNsZS5yZWZlcmVuY2VzKQ0KICAgICAgICAgICAg ICAgIGlmIGxlbihyZWZzKToNCiAgICAgICAgICAgICAgICAgICAgcmVmcz1t YXAobGFtYmRhIHgsIHM9c2VsZjogcy5kYXRhYmFzZS5nZXRBcnRpY2xlKHMu YXJjaGl2ZSwgeCksIHJlZnMpDQogICAgICAgICAgICAgICAgICAgIG1heGRh dGU9cmVmc1swXQ0KICAgICAgICAgICAgICAgICAgICBmb3IgcmVmIGluIHJl ZnNbMTpdOiANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlZi5kYXRl Pm1heGRhdGUuZGF0ZTogbWF4ZGF0ZT1yZWYNCiAgICAgICAgICAgICAgICAg ICAgcGFyZW50SUQ9bWF4ZGF0ZS5tc2dpZA0KICAgICAgICAgICAgZWxzZToN CiAgICAgICAgICAgICAgICAjIEdldCB0aGUgb2xkZXN0IGFydGljbGUgd2l0 aCBhIG1hdGNoaW5nIHN1YmplY3QsIGFuZCBhc3N1bWUgdGhpcyBpcyANCiAg ICAgICAgICAgICAgICAjIGEgZm9sbG93LXVwIHRvIHRoYXQgYXJ0aWNsZQ0K ICAgICAgICAgICAgICAgIHBhcmVudElEPXNlbGYuZGF0YWJhc2UuZ2V0T2xk ZXN0QXJ0aWNsZShzZWxmLmFyY2hpdmUsIGFydGljbGUuc3ViamVjdCkNCg0K ICAgICAgICAgICAgaWYgcGFyZW50SUQhPU5vbmUgYW5kIG5vdCBzZWxmLmRh dGFiYXNlLmhhc0FydGljbGUoc2VsZi5hcmNoaXZlLCBwYXJlbnRJRCk6IA0K ICAgICAgICAgICAgICAgIHBhcmVudElEPU5vbmUNCiAgICAgICAgICAgIGFy dGljbGUucGFyZW50SUQ9cGFyZW50SUQgDQogICAgICAgICAgICBpZiBwYXJl bnRJRCE9Tm9uZToNCiAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZi5kYXRh YmFzZS5nZXRBcnRpY2xlKHNlbGYuYXJjaGl2ZSwgcGFyZW50SUQpDQogICAg ICAgICAgICAgICAgYXJ0aWNsZS50aHJlYWRLZXk9cGFyZW50LnRocmVhZEtl eSthcnRpY2xlLmRhdGUrJy0nDQogICAgICAgICAgICBlbHNlOiBhcnRpY2xl LnRocmVhZEtleT1hcnRpY2xlLmRhdGUrJy0nDQogICAgICAgICAgICBzZWxm LmRhdGFiYXNlLnNldFRocmVhZEtleShzZWxmLmFyY2hpdmUsIGFydGljbGUu dGhyZWFkS2V5KydcMDAwJythcnRpY2xlLm1zZ2lkLCBhcnRpY2xlLm1zZ2lk KQ0KICAgICAgICAgICAgc2VsZi5kYXRhYmFzZS5hZGRBcnRpY2xlKGksIHRl bXAsIHN1YmplY3RrZXksIGF1dGhvcmtleSkNCiAgICAgICAgICAgIA0KICAg ICAgICAgICAgaWYgaSBub3QgaW4gc2VsZi5fZGlydHlfYXJjaGl2ZXM6IA0K ICAgICAgICAgICAgICAgIHNlbGYuX2RpcnR5X2FyY2hpdmVzLmFwcGVuZChp KQ0KICAgICAgICBkZWwgdGVtcA0KDQoNCiAgICAjIFVwZGF0ZSBvbmx5IGFy Y2hpdmVzIHRoYXQgaGF2ZSBiZWVuIG1hcmtlZCBhcyAiY2hhbmdlZCIuDQog ICAgZGVmIHVwZGF0ZV9kaXJ0eV9hcmNoaXZlcyhzZWxmKToNCiAgICAgICAg Zm9yIGkgaW4gc2VsZi5fZGlydHlfYXJjaGl2ZXM6DQogICAgICAgICAgICBz ZWxmLnVwZGF0ZV9hcmNoaXZlKGkpDQogICAgICAgICAgICBhcmNoej1Ob25l DQogICAgICAgICAgICBhcmNodD1Ob25lDQogICAgICAgICAgICB0cnk6DQog ICAgICAgICAgICAgICAgaW1wb3J0IGd6aXANCiAgICAgICAgICAgICAgICB0 cnk6IA0KICAgICAgICAgICAgICAgICAgICBhcmNodD1vcGVuKG9zLnBhdGgu am9pbihzZWxmLmJhc2VkaXIsIiVzLnR4dCIgJSBpKSwiciIpIA0KICAgICAg ICAgICAgICAgICAgICB0cnk6IA0KICAgICAgICAgICAgICAgICAgICAgICAg b3MucmVuYW1lKG9zLnBhdGguam9pbihzZWxmLmJhc2VkaXIsIiVzLnR4dC5n eiIgJSBpKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBh dGguam9pbihzZWxmLmJhc2VkaXIsIiVzLm9sZC50eHQuZ3oiICUgaSkpDQog ICAgICAgICAgICAgICAgICAgICAgICBhcmNoej1nemlwLm9wZW4ob3MucGF0 aC5qb2luKHNlbGYuYmFzZWRpciwiJXMub2xkLnR4dC5neiIgJSBpKSwiciIp DQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgUnVudGlt ZUVycm9yLCBvcy5lcnJvcik6DQogICAgICAgICAgICAgICAgICAgICAgICBw YXNzDQogICAgICAgICAgICAgICAgICAgIG5ld3o9Z3ppcC5vcGVuKG9zLnBh dGguam9pbihzZWxmLmJhc2VkaXIsIiVzLnR4dC5neiIgJSBpKSwidyIpIA0K CQkgICAgaWYgYXJjaHogOg0KICAgICAgICAgICAgICAgICAgICAgICAgbmV3 ei53cml0ZShhcmNoei5yZWFkKCkpDQogICAgICAgICAgICAgICAgICAgICAg ICBhcmNoei5jbG9zZSgpDQogICAgICAgICAgICAgICAgICAgICAgICBvcy51 bmxpbmsob3MucGF0aC5qb2luKHNlbGYuYmFzZWRpciwiJXMub2xkLnR4dC5n eiIgJSBpKSkNCiAgICAgICAgICAgICAgICAgICAgbmV3ei53cml0ZShhcmNo dC5yZWFkKCkpDQogICAgICAgICAgICAgICAgICAgIG5ld3ouY2xvc2UoKQ0K ICAgICAgICAgICAgICAgICAgICBhcmNodC5jbG9zZSgpDQogICAgICAgICAg ICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4oc2VsZi5iYXNlZGly LCIlcy50eHQiICUgaSkpDQogICAgICAgICAgICAgICAgZXhjZXB0IElPRXJy b3I6DQogICAgICAgICAgICAgICAgICAgIHBhc3MNCiAgICAgICAgICAgIGV4 Y2VwdCBJbXBvcnRFcnJvcjoNCiAgICAgICAgICAgICAgICBwYXNzDQogICAg ICAgIHNlbGYuX2RpcnR5X2FyY2hpdmVzPVtdDQoNCiAgICBkZWYgY2xvc2Uo c2VsZik6DQogICAgICAgICJDbG9zZSBhbiBhcmNoaXZlLCBzYXZpbmcgaXRz IHN0YXRlIGFuZCB1cGRhdGluZyBhbnkgY2hhbmdlZCBhcmNoaXZlcy4iDQog ICAgICAgIHNlbGYudXBkYXRlX2RpcnR5X2FyY2hpdmVzKCkjIFVwZGF0ZSBh bGwgY2hhbmdlZCBhcmNoaXZlcw0KICAgICAgICAjIElmIHJlcXVpcmVkLCB1 cGRhdGUgdGhlIHRhYmxlIG9mIGNvbnRlbnRzDQogICAgICAgIGlmIHNlbGYu dXBkYXRlX1RPQyBvciAxOg0KICAgICAgICAgICAgc2VsZi51cGRhdGVfVE9D PTANCiAgICAgICAgICAgIHNlbGYud3JpdGVfVE9DKCkNCiAgICAgICAgIyBT YXZlIHRoZSBjb2xsZWN0aXZlIHN0YXRlIA0KICAgICAgICBzZWxmLm1lc3Nh Z2UoJ1BpY2tsaW5nIGFyY2hpdmUgc3RhdGUgaW50byAnK29zLnBhdGguam9p bihzZWxmLmJhc2VkaXIsICdwaXBlcm1haWwucGNrJykpDQogICAgICAgIHNl bGYuZGF0YWJhc2UuY2xvc2UoKQ0KICAgICAgICBkZWwgc2VsZi5kYXRhYmFz ZQ0KICAgICAgICBmPW9wZW4ob3MucGF0aC5qb2luKHNlbGYuYmFzZWRpciwg J3BpcGVybWFpbC5wY2snKSwgJ3cnKQ0KICAgICAgICBwaWNrbGUuZHVtcChz ZWxmLl9fZ2V0c3RhdGVfXygpLCBmKQ0KICAgICAgICBmLmNsb3NlKCkNCg0K ICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6DQogICAgICAgIGQ9e30NCiAg ICAgICAgZm9yIGVhY2ggaW4gc2VsZi5fX2RpY3RfXy5rZXlzKCk6DQogICAg ICAgICAgICBpZiBub3QgKGVhY2ggaW4gWydtYWlsbGlzdCcsJ19sb2NrX2Zp bGUnLCdfdW5sb2NrbGlzdCddKToNCiAgICAgICAgICAgICAgICBkW2VhY2hd ID0gc2VsZi5fX2RpY3RfX1tlYWNoXQ0KICAgICAgICByZXR1cm4gZA0KDQog ICAgICAgIA0KIA0KDQogICAgIyBBZGQgPEEgSFJFRj0iLi4uIj4gdGFncyBh cm91bmQgVVJMcyBhbmQgZS1tYWlsIGFkZHJlc3Nlcy4NCg0KICAgIGRlZiBf X3Byb2Nlc3Nib2R5X1VSTHF1b3RlKHNlbGYsIHNvdXJjZSwgZGVzdCk6DQoJ Ym9keTI9W10NCglsYXN0X2xpbmVfd2FzX3F1b3RlZD0wDQoJZm9yIGkgaW4g eHJhbmdlKDAsIGxlbihzb3VyY2UpKToNCgkgICAgTG9yaWc9TD1zb3VyY2Vb aV0gOyBwcmVmaXg9c3VmZml4PSIiDQoJICAgIGlmIEw9PU5vbmU6IGNvbnRp bnVlDQoJICAgICMgSXRhbGljaXNlIHF1b3RlZCB0ZXh0DQoJICAgIGlmIHNl bGYuSVFVT1RFUzoNCgkJcXVvdGVkPXF1b3RlZHBhdC5tYXRjaChMKQ0KCQlp ZiBxdW90ZWQ9PU5vbmU6IGxhc3RfbGluZV93YXNfcXVvdGVkPTANCgkJZWxz ZToNCgkJICAgIHF1b3RlZCA9IHF1b3RlZC5lbmQoMCkNCgkJICAgIHByZWZp eD1DR0llc2NhcGUoTFs6cXVvdGVkXSkgKyAnPGk+JyANCgkJICAgIHN1ZmZp eD0nPC9JPicNCgkJICAgIGlmIHNlbGYuU0hPV0hUTUw6IHN1ZmZpeD1zdWZm aXgrJzxCUj4nDQoJCSAgICBpZiBub3QgbGFzdF9saW5lX3dhc19xdW90ZWQ6 IHByZWZpeD0nPEJSPicrcHJlZml4DQoJCSAgICBMPSBMW3F1b3RlZDpdIA0K CQkgICAgbGFzdF9saW5lX3dhc19xdW90ZWQ9MQ0KCSAgICAjIENoZWNrIGZv ciBhbiBlLW1haWwgYWRkcmVzcw0KCSAgICBMMj0iIiA7IGpyPWVtYWlscGF0 LnNlYXJjaChMKSA7IGtyPXVybHBhdC5zZWFyY2goTCkNCgkgICAgd2hpbGUg anIhPU5vbmUgb3Iga3IhPU5vbmU6DQoJCWlmIGpyPT1Ob25lOiBqPS0xDQoJ CWVsc2U6IGogPSBqci5zdGFydCgwKQ0KCQlpZiBrcj09Tm9uZTogaz0tMQ0K CQllbHNlOiBrID0ga3Iuc3RhcnQoMCkNCgkJaWYgaiE9LTEgYW5kIChqPGsg b3Igaz09LTEpOiB0ZXh0PWpyLmdyb3VwKDEpIDsgVVJMPSdtYWlsdG86Jyt0 ZXh0IDsgcG9zPWoNCgkJZWxpZiBrIT0tMSBhbmQgKGo+ayBvciBqPT0tMSk6 IHRleHQ9VVJMPWtyLmdyb3VwKDEpIDsgcG9zPWsNCgkJZWxzZTogIyBqPT1r DQoJCSAgICByYWlzZSBWYWx1ZUVycm9yLCAiaj09azogVGhpcyBjYW4ndCBo YXBwZW4hIg0KCQlsZW5ndGg9bGVuKHRleHQpDQojCQlzeXMuc3RkZXJyLndy aXRlKCJVUkw6ICVzICVzICVzIFxuIiAlIChDR0llc2NhcGUoTFs6cG9zXSks IFVSTCwgQ0dJZXNjYXBlKHRleHQpKSkNCgkJTDI9TDIrJyVzPEEgSFJFRj0i JXMiPiVzPC9BPicgJSAoQ0dJZXNjYXBlKExbOnBvc10pLCBVUkwsIENHSWVz Y2FwZSh0ZXh0KSkNCgkJTD1MW3BvcytsZW5ndGg6XQ0KCQlqcj1lbWFpbHBh dC5zZWFyY2goTCkgOyBrcj11cmxwYXQuc2VhcmNoKEwpDQoJICAgIGlmIGpy PT1Ob25lIGFuZCBrcj09Tm9uZTogTD1DR0llc2NhcGUoTCkNCgkgICAgTD1w cmVmaXgrTDIrTCtzdWZmaXgNCgkgICAgaWYgTCE9TG9yaWc6IHNvdXJjZVtp XSwgZGVzdFtpXT1Ob25lLCBMDQoNCiAgICAjIEVzY2FwZSBhbGwgc3BlY2lh bCBjaGFyYWN0ZXJzDQogICAgZGVmIF9fcHJvY2Vzc2JvZHlfQ0dJZXNjYXBl KHNlbGYsIHNvdXJjZSwgZGVzdCk6DQogICAgICAgIGltcG9ydCBjZ2kNCiAg ICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpKToNCgkgICAg aWYgc291cmNlW2ldIT1Ob25lOiANCgkgICAgICAgIGRlc3RbaV09Y2dpLmVz Y2FwZShzb3VyY2VbaV0pIDsgc291cmNlW2ldPU5vbmUNCgkJDQogICAgIyBQ ZXJmb3JtIEh5cGVybWFpbC1zdHlsZSBwcm9jZXNzaW5nIG9mIDxIVE1MPjwv SFRNTD4gZGlyZWN0aXZlcw0KICAgICMgaW4gbWVzc2FnZSBib2RpZXMuICBM aW5lcyBiZXR3ZWVuIDxIVE1MPiBhbmQgPC9IVE1MPiB3aWxsIGJlIHdyaXR0 ZW4NCiAgICAjIG91dCBwcmVjaXNlbHkgYXMgdGhleSBhcmU7IG90aGVyIGxp bmVzIHdpbGwgYmUgcGFzc2VkIHRvIGZ1bmMyDQogICAgIyBmb3IgZnVydGhl ciBwcm9jZXNzaW5nIC4NCg0KICAgIGRlZiBfX3Byb2Nlc3Nib2R5X0hUTUwo c2VsZiwgc291cmNlLCBkZXN0KToNCiAgICAgICAgbD1sZW4oc291cmNlKSA7 IGk9MA0KCXdoaWxlIGk8bDoNCgkgICAgd2hpbGUgaTxsIGFuZCBodG1scGF0 Lm1hdGNoKHNvdXJjZVtpXSk9PU5vbmU6IGk9aSsxDQoJICAgIGlmIGk8bDog c291cmNlW2ldPU5vbmUgOyBpPWkrMQ0KCSAgICB3aGlsZSBpPGwgYW5kIG5v aHRtbHBhdC5tYXRjaChzb3VyY2VbaV0pPT1Ob25lOg0KCSAgICAgICAgZGVz dFtpXSwgc291cmNlW2ldID0gc291cmNlW2ldLCBOb25lDQoJICAgICAgICBp PWkrMQ0KCSAgICBpZiBpPGw6IHNvdXJjZVtpXT1Ob25lIDsgaT1pKzENCgkg ICAgDQogICAgZGVmIGZvcm1hdF9hcnRpY2xlKHNlbGYsIGFydGljbGUpOg0K CXNvdXJjZT1hcnRpY2xlLmJvZHkgOyBkZXN0PVtOb25lXSpsZW4oc291cmNl KQ0KCSMgSGFuZGxlIDxIVE1MPiA8L0hUTUw+IGRpcmVjdGl2ZXMNCglpZiBz ZWxmLkFMTE9XSFRNTDogDQoJICAgIHNlbGYuX19wcm9jZXNzYm9keV9IVE1M KHNvdXJjZSwgZGVzdCkNCglzZWxmLl9fcHJvY2Vzc2JvZHlfVVJMcXVvdGUo c291cmNlLCBkZXN0KQ0KCWlmIG5vdCBzZWxmLlNIT1dIVE1MOiANCgkgICAg IyBEbyBzaW1wbGUgZm9ybWF0dGluZyBoZXJlOiA8UFJFPi4uPC9QUkU+DQoJ ICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzb3VyY2UpKToNCgkJcz1zb3Vy Y2VbaV0NCgkJaWYgcz09Tm9uZTogY29udGludWUNCgkJZGVzdFtpXT1DR0ll c2NhcGUocykgOyBzb3VyY2VbaV09Tm9uZQ0KCSAgICBpZiBsZW4oZGVzdCkg PiAwOg0KCQlkZXN0WzBdPSc8UFJFPicrZGVzdFswXSA7IGRlc3RbLTFdPWRl c3RbLTFdKyc8L1BSRT4nDQoJZWxzZToNCgkgICAgIyBEbyBmYW5jeSBmb3Jt YXR0aW5nIGhlcmUNCgkgICAgaWYgc2VsZi5TSE9XQlI6DQoJCSMgQWRkIDxC Uj4gb250byBldmVyeSBsaW5lDQoJCWZvciBpIGluIHJhbmdlKDAsIGxlbihz b3VyY2UpKToNCgkJICAgIHM9c291cmNlW2ldDQoJCSAgICBpZiBzPT1Ob25l OiBjb250aW51ZQ0KCQkgICAgcz1DR0llc2NhcGUocykgKyc8QlI+Jw0KCQkg ICAgZGVzdFtpXT1zIDsgc291cmNlW2ldPU5vbmUNCgkgICAgZWxzZToNCgkJ Zm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNvdXJjZSkpOg0KCQkgICAgcz1zb3Vy Y2VbaV0NCgkJICAgIGlmIHM9PU5vbmU6IGNvbnRpbnVlDQoJCSAgICBzPUNH SWVzY2FwZShzKQ0KCQkgICAgaWYgc1swOjFdIGluICcgXHRcbic6IHM9JzxQ Picrcw0KCQkgICAgZGVzdFtpXT1zIDsgc291cmNlW2ldPU5vbmUNCiAgICAg ICAgYXJ0aWNsZS5ib2R5PWZpbHRlcihsYW1iZGEgeDogeCE9Tm9uZSwgZGVz dCkNCglyZXR1cm4gYXJ0aWNsZQ0KDQogICAgZGVmIHVwZGF0ZV9hcnRpY2xl KHNlbGYsIGFyY2RpciwgYXJ0aWNsZSwgcHJldiwgbmV4dCk6DQoJaW1wb3J0 IG9zDQoJc2VsZi5tZXNzYWdlKCdVcGRhdGluZyBIVE1MIGZvciBhcnRpY2xl ICcrc3RyKGFydGljbGUuc2VxdWVuY2UpKQ0KCXRyeToNCgkgICAgZj1vcGVu KG9zLnBhdGguam9pbihhcmNkaXIsIGFydGljbGUuZmlsZW5hbWUpLCAncicp DQogICAgICAgICAgICBhcnRpY2xlLmxvYWRib2R5X2Zyb21IVE1MKGYpDQoJ ICAgIGYuY2xvc2UoKQ0KICAgICAgICBleGNlcHQgSU9FcnJvcjoNCiAgICAg ICAgICAgIHNlbGYubWVzc2FnZSgiYXJ0aWNsZSBmaWxlICVzIGlzIG1pc3Np bmchIiAlIG9zLnBhdGguam9pbihhcmNkaXIsIGFydGljbGUuZmlsZW5hbWUp KSANCiAgICAgICAgYXJ0aWNsZS5wcmV2PXByZXYNCiAgICAgICAgYXJ0aWNs ZS5uZXh0PW5leHQNCglmPW9wZW4ob3MucGF0aC5qb2luKGFyY2RpciwgYXJ0 aWNsZS5maWxlbmFtZSksICd3JykNCglmLndyaXRlKGFydGljbGUuYXNfaHRt bCgpKQ0KCWYuY2xvc2UoKQ0K ---1395546950-237318664-904200538=:1550-- From John@list.org Thu Aug 27 22:18:40 1998 From: John@list.org (John Viega) Date: Thu, 27 Aug 1998 14:18:40 -0700 Subject: [Mailman-Developers] Localization, again In-Reply-To: <002001bdd18b$302f2fa0$f6d52dc1@bishop.twinspot.net>; from Tomas Fasth on Thu, Aug 27, 1998 at 09:20:37AM +0200 References: <002001bdd18b$302f2fa0$f6d52dc1@bishop.twinspot.net> Message-ID: <19980827141840.A11851@viega.org> We've been talking about this recently, and we're going to work on moving stuff out. Barry's done a bit of it already, I think. Like you said, we're all fairly limited on time, so we can definitely use all the help we can get... John On Thu, Aug 27, 1998 at 09:20:37AM +0200, Tomas Fasth wrote: > Hi. > I checked out the latest sources in order to try a translation to Swedish. I quickly found out that this was to become a rather complicated task. Presentation texts are practically shattered all over the sources. > Is there currently any work going on in this area? > What can I do to help improving the situation? > Note that I have limited time to allocate in this matter (well, who doesn't :), but want to do my part if others are interested to make an effort as well. The Mailman software is a really good peice of software in concept and design, part from the localization aspects that is. > I also want to mention that I earlier made a try to localize Majordomo. Same problem. Since I'm a python fan, I was delighted to find out about Mailman. Anyway, localization is an important issue, IMHO. > > Cheers, > Tomas > From brianl@real.com Thu Aug 27 23:47:18 1998 From: brianl@real.com (Brian Lenihan) Date: Thu, 27 Aug 1998 15:47:18 -0700 Subject: [Mailman-Developers] A couple minor annoyances Message-ID: <199808272247.AA29130@murrow.prognet.com> I have a couple minor problems with mailman: 1) If a message exceeds the configured size (40k), I get a bounce notice from sendmail as well as the normal approval notice from mailman. The error is unknown mailer error 1 This behavior is new in b5. Aug 27 14:07:03 1998 post: Traceback (innermost last): post: File "/home/mailman/scripts/post", line 100, in ? post: current_list.SendTextToUser( subject = 'Mail sent to %s' % post: TypeError : unexpected keyword argument: raw Aug 27 14:07:09 1998 contact_transport: Traceback (innermost last): contact_transport: File "/home/mailman/scripts/contact_transport", line 52, in ? contact_transport: OutgoingQueue.processQueue() contact_transport: File "/home/mailman/Mailman/OutgoingQueue.py", line 38, in processQueue contact_transport: Utils.TrySMTPDelivery(recip,sender,text,full_fname) contact_transport: File "../Mailman/Utils.py", line 204, in TrySMTPDelivery contact_transport: File "/home/mailman/Mailman/OutgoingQueue.py", line 25, in dequeueMessage contact_transport: os.unlink(msg) contact_transport: OSError : [Errno 2] No such file or directory: '/home/mailma n/data/mm_q.2' I'm not sure what raw=1 is intended to do, but it is causing the error when the attempt is made to notify the user their mail is being held. The definition of SendTextToUser in Mailman/Deliverer.py does not have raw as an argument. scripts/post: current_list.SendTextToUser( subject = 'Mail sent to %s' % current_list.real_name, recipient = the_sender, text = body, raw = 1) 2) After performing some admin functions, e.g. mass subscribing or attending to administrative requests, the list info page shows up with all the fields blank and I have to re-enter data. There are no apparent errors and I'm not sure how to debug this. Does anyone else have this problem? I have had it in every version since the original I found at list.org before the crash, however, prior to b5 it only happened when mass subscribing. From jerrya@fastrans.net Thu Aug 27 23:57:06 1998 From: jerrya@fastrans.net (Jerry Adlersfluegel) Date: Thu, 27 Aug 1998 17:57:06 -0500 (CDT) Subject: [Mailman-Developers] A couple minor annoyances In-Reply-To: <199808272247.AA29130@murrow.prognet.com> Message-ID: On Thu, 27 Aug 1998, Brian Lenihan wrote: > I have a couple minor problems with mailman: > > 1) If a message exceeds the configured size (40k), I get a bounce notice > from sendmail as well as the normal approval notice from mailman. The > error is unknown mailer error 1 > This behavior is new in b5. I see this also. In addition, I get the same type of error when a message is held for approval, due to being sent from a non-subscribed address. The approval message is sent twice, also. > 2) After performing some admin functions, e.g. mass subscribing or > attending to administrative requests, the list info page shows up with all > the fields blank and I have to re-enter data. There are no apparent errors > and I'm not sure how to debug this. Does anyone else have this problem? I > have had it in every version since the original I found at list.org before > the crash, however, prior to b5 it only happened when mass subscribing. I think I get this as well, but I have only done this once. -- Jerry Adlersfluegel http://quake.fastrans.net/~jerrya/ From dragondm@delta.integral.org Sat Aug 29 06:48:33 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sat, 29 Aug 1998 00:48:33 -0500 (CDT) Subject: [Mailman-Developers] Dunno what this is but I fixed it. Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-482516321-904369713=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII Hmm.. I found a bug in the post script whilst I was doing soething else.. Dunno what the effect of this is, but it's a trivial fix. Have a patch... -The Dragon De Monsyne ---1395546950-482516321-904369713=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="post.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: post patch KioqIC91c3Ivc3JjL21haWxtYW4tMS4wYjUvc2NyaXB0cy9wb3N0CVNhdCBB dWcgMjkgMDA6Mzg6NTAgMTk5OA0KLS0tIHBvc3QJRnJpIEF1ZyAyOCAyMDo0 Nzo1MyAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAxMDAsMTA3ICoqKioN CiAgCWN1cnJlbnRfbGlzdC5TZW5kVGV4dFRvVXNlciggc3ViamVjdCA9ICdN YWlsIHNlbnQgdG8gJXMnICUgDQogIAkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbGlzdC5yZWFsX25hbWUsDQog IAkJCQkgICAgIHJlY2lwaWVudCA9IHRoZV9zZW5kZXIsDQohIAkgICAgIAkJ CSAgICAgdGV4dCA9IGJvZHksDQohICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByYXcgPSAxKQ0KICAjIExldCBhbm90aGVyIHByb2Nl c3MgcnVuLg0KICBmaW5hbGx5Og0KICAgICAgY3VycmVudF9saXN0LlVubG9j aygpDQotLS0gMTAwLDEwOSAtLS0tDQogIAljdXJyZW50X2xpc3QuU2VuZFRl eHRUb1VzZXIoIHN1YmplY3QgPSAnTWFpbCBzZW50IHRvICVzJyAlIA0KICAJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy ZW50X2xpc3QucmVhbF9uYW1lLA0KICAJCQkJICAgICByZWNpcGllbnQgPSB0 aGVfc2VuZGVyLA0KISAJICAgICAJCQkgICAgIHRleHQgPSBib2R5KQ0KISAj IFdoYXQncyB0aGlzPyAtZGRtDQohICMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmF3ID0gMSkNCiEgDQogICMgTGV0IGFub3RoZXIg cHJvY2VzcyBydW4uDQogIGZpbmFsbHk6DQogICAgICBjdXJyZW50X2xpc3Qu VW5sb2NrKCkNCg== ---1395546950-482516321-904369713=:10023-- From bwarsaw@cnri.reston.va.us (Barry A. Warsaw) Sat Aug 29 07:41:10 1998 From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw) Date: Sat, 29 Aug 1998 02:41:10 -0400 (EDT) Subject: [Mailman-Developers] Dunno what this is but I fixed it. References: Message-ID: <13799.41606.151124.966937@anthem.cnri.reston.va.us> >>>>> "TDDM" == The Dragon De Monsyne writes: TDDM> Hmm.. I found a bug in the post script whilst I was TDDM> doing soething else.. Dunno what the effect of this is, but TDDM> it's a trivial fix. Thanks for the report! From dragondm@delta.integral.org Sat Aug 29 08:30:47 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sat, 29 Aug 1998 02:30:47 -0500 (CDT) Subject: [Mailman-Developers] Python standard SMTPLib patch. Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-1591827097-904375847=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII Ok, this patch changes mailman to use the smtplib.py included here, instead of the current one. The smtplib.py included here is the most recent version of the smtplib included in the Python 1.5.1 distribution. This exact version will likely be included in the python 1.5.2 distribution Having Mailman use this smtplib is good b'cause any improvements/bugfixes made to it because of mailman can then be folded back into tyhe Python distribution. Plus this lib has esmtp support, which could be usefull for DSN tweaking. To aply this: -Remove the smtplib in the Mailman package -Put this smplib.py in your PYTHONPATH. (If you have 1.5.1, replace the smtplib that came with the python distribution with this one, it has a few bugfixes) -apply the two included patches. Ones for the Mailman package, ones a very minor one for the contact_transport script. -The Dragon De Monsyne ---1395546950-1591827097-904375847=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="smtplib.py" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: smtplib.py IyEvdXNyL2Jpbi9weXRob24NCiIiIlNNVFAvRVNNVFAgY2xpZW50IGNsYXNz Lg0KDQpBdXRob3I6IFRoZSBEcmFnb24gRGUgTW9uc3luZSA8ZHJhZ29uZG1A aW50ZWdyYWwub3JnPg0KRVNNVFAgc3VwcG9ydCwgdGVzdCBjb2RlIGFuZCBk b2MgZml4ZXMgYWRkZWQgYnkNCiAgICBFcmljIFMuIFJheW1vbmQgPGVzckB0 aHlyc3VzLmNvbT4NCkJldHRlciBSRkMgODIxIGNvbXBsaWFuY2UgKE1BSUwg YW5kIFJDUFQsIGFuZCBDUkxGIGluIGRhdGEpDQogICAgYnkgQ2FyZXkgRXZh bnMgPGMuZXZhbnNAY2xlYXIubmV0Lm56PiwgZm9yIHBpY2t5IG1haWwgc2Vy dmVycy4NCiAgIA0KKFRoaXMgd2FzIG1vZGlmaWVkIGZyb20gdGhlIFB5dGhv biAxLjUgbGlicmFyeSBIVFRQIGxpYi4pDQoNClRoaXMgc2hvdWxkIGZvbGxv dyBSRkMgODIxIChTTVRQKSBhbmQgUkZDIDE4NjkgKEVTTVRQKS4NCg0KTm90 ZXM6DQoJUGxlYXNlIHJlbWVtYmVyLCB3aGVuIGRvaW5nIEVTTVRQLCB0aGF0 IHRoZSBuYW1lcyBvZiB0aGUgU01UUCBzZXJ2aWNlIA0KZXh0ZW50aW9ucyAg YXJlIE5PVCB0aGUgc2FtZSB0aGluZyBhcyB0aGUgb3B0aW9uIGtleW9yZHMg Zm9yIHRoZSBSQ1BUIGFuZCBNQUlMDQpjb21tYW5kcyEgDQoNCkV4YW1wbGU6 DQoNCj4+PiBpbXBvcnQgc210cGxpYg0KPj4+IHM9c210cGxpYi5TTVRQKCJs b2NhbGhvc3QiKQ0KPj4+IHByaW50IHMuaGVscCgpDQpUaGlzIGlzIFNlbmRt YWlsIHZlcnNpb24gOC44LjQNClRvcGljczoNCiAgICBIRUxPICAgIEVITE8g ICAgTUFJTCAgICBSQ1BUICAgIERBVEENCiAgICBSU0VUICAgIE5PT1AgICAg UVVJVCAgICBIRUxQICAgIFZSRlkNCiAgICBFWFBOICAgIFZFUkIgICAgRVRS TiAgICBEU04NCkZvciBtb3JlIGluZm8gdXNlICJIRUxQIDx0b3BpYz4iLg0K VG8gcmVwb3J0IGJ1Z3MgaW4gdGhlIGltcGxlbWVudGF0aW9uIHNlbmQgZW1h aWwgdG8NCiAgICBzZW5kbWFpbC1idWdzQHNlbmRtYWlsLm9yZy4NCkZvciBs b2NhbCBpbmZvcm1hdGlvbiBzZW5kIGVtYWlsIHRvIFBvc3RtYXN0ZXIgYXQg eW91ciBzaXRlLg0KRW5kIG9mIEhFTFAgaW5mbw0KPj4+IHMucHV0Y21kKCJ2 cmZ5Iiwic29tZW9uZUBoZXJlIikNCj4+PiBzLmdldHJlcGx5KCkNCigyNTAs ICJTb21lYm9keSBPdmVySGVyZSA8c29tZWJvZHlAaGVyZS5teS5vcmc+IikN Cj4+PiBzLnF1aXQoKQ0KDQoiIiINCg0KaW1wb3J0IHNvY2tldA0KaW1wb3J0 IHN0cmluZyxyZSxyZmM4MjINCg0KU01UUF9QT1JUID0gMjUNCkNSTEY9Ilxy XG4iDQoNCiMgdXNlZCBmb3IgZXhjZXB0aW9ucyANClNNVFBTZXJ2ZXJEaXNj b25uZWN0ZWQ9IlNlcnZlciBub3QgY29ubmVjdGVkIg0KU01UUFNlbmRlclJl ZnVzZWQ9IlNlbmRlciBhZGRyZXNzIHJlZnVzZWQiDQpTTVRQUmVjaXBpZW50 c1JlZnVzZWQ9IkFsbCBSZWNpcGllbnRzIHJlZnVzZWQiDQpTTVRQRGF0YUVy cm9yPSJFcnJvciB0cmFuc21pdHRpbmcgbWVzc2FnZSBkYXRhIg0KDQpkZWYg cXVvdGVhZGRyKGFkZHIpOg0KICAgICIiIlF1b3RlIGEgc3Vic2V0IG9mIHRo ZSBlbWFpbCBhZGRyZXNzZXMgZGVmaW5lZCBieSBSRkMgODIxLg0KDQogICAg U2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGFueXRoaW5nIHJmYzgyMi5wYXJz ZWFkZHIgY2FuIGhhbmRsZS4iIiINCg0KICAgIG09Tm9uZQ0KICAgIHRyeToN CiAgICAgICAgbT1yZmM4MjIucGFyc2VhZGRyKGFkZHIpWzFdDQogICAgZXhj ZXB0IEF0dHJpYnV0ZUVycm9yOg0KICAgICAgICBwYXNzDQogICAgaWYgbm90 IG06DQogICAgICAgICNzb21ldGhpbmcgd2VpcmQgaGVyZS4uIHB1bnQgLWRk bQ0KICAgICAgICByZXR1cm4gYWRkcg0KICAgIGVsc2U6DQogICAgICAgIHJl dHVybiAiPCVzPiIgJSBtDQoNCmRlZiBxdW90ZWRhdGEoZGF0YSk6DQogICAg IiIiUXVvdGUgZGF0YSBmb3IgZW1haWwuDQoNCiAgICBEb3VibGUgbGVhZGlu ZyAnLicsIGFuZCBjaGFuZ2UgVW5peCBuZXdsaW5lICdcbicsIG9yIE1hYyAn XHInIGludG8NCiAgICBJbnRlcm5ldCBDUkxGIGVuZC1vZi1saW5lLiIiIg0K ICAgIHJldHVybiByZS5zdWIocicoP20pXlwuJywgJy4uJywNCiAgICAgICAg cmUuc3ViKHInKD86XHJcbnxcbnxccig/IVxuKSknLCBDUkxGLCBkYXRhKSkN Cg0KY2xhc3MgU01UUDoNCiAgICAiIiJUaGlzIGNsYXNzIG1hbmFnZXMgYSBj b25uZWN0aW9uIHRvIGFuIFNNVFAgb3IgRVNNVFAgc2VydmVyLg0KICAgIFNN VFAgT2JqZWN0czoNCiAgICAgICAgU01UUCBvYmplY3RzIGhhdmUgdGhlIGZv bGxvd2luZyBhdHRyaWJ1dGVzOiAgICANCiAgICAgICAgICAgIGhlbG9fcmVz cCANCiAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBtZXNzYWdlIGdpdmVu IGJ5IHRoZSBzZXJ2ZXIgaW4gcmVzcG9uY2UgdG8gdGhlIA0KICAgICAgICAg ICAgICAgIG1vc3QgcmVjZW50IEhFTE8gY29tbWFuZC4NCiAgICAgICAgICAg ICAgICANCiAgICAgICAgICAgIGVobG9fcmVzcA0KICAgICAgICAgICAgICAg IFRoaXMgaXMgdGhlIG1lc3NhZ2UgZ2l2ZW4gYnkgdGhlIHNlcnZlciBpbiBy ZXNwb25jZSB0byB0aGUgDQogICAgICAgICAgICAgICAgbW9zdCByZWNlbnQg RUhMTyBjb21tYW5kLiBUaGlzIGlzIHVzdWFsbHkgbXVsdGlsaW5lLg0KDQog ICAgICAgICAgICBkb2VzX2VzbXRwIA0KICAgICAgICAgICAgICAgIFRoaXMg aXMgYSBUcnVlIHZhbHVlIF9hZnRlciB5b3UgZG8gYW4gRUhMTyBjb21tYW5k XywgaWYgdGhlDQogICAgICAgICAgICAgICAgc2VydmVyIHN1cHBvcnRzIEVT TVRQLg0KDQogICAgICAgICAgICBlc210cF9mZWF0dXJlcyANCiAgICAgICAg ICAgICAgICBUaGlzIGlzIGEgZGljdGlvbmFyeSwgd2hpY2gsIGlmIHRoZSBz ZXJ2ZXIgc3VwcG9ydHMgRVNNVFAsDQogICAgICAgICAgICAgICAgd2lsbCAg X2FmdGVyIHlvdSBkbyBhbiBFSExPIGNvbW1hbmRfLCBjb250YWluIHRoZSBu YW1lcyBvZiB0aGUNCiAgICAgICAgICAgICAgICBTTVRQIHNlcnZpY2UgIGV4 dGVudGlvbnMgdGhpcyBzZXJ2ZXIgc3VwcG9ydHMsIGFuZCB0aGVpciANCiAg ICAgICAgICAgICAgICBwYXJhbWV0ZXJzIChpZiBhbnkpLg0KICAgICAgICAg ICAgICAgIE5vdGUsIGFsbCBleHRlbnRpb24gbmFtZXMgYXJlIG1hcHBlZCB0 byBsb3dlciBjYXNlIGluIHRoZSANCiAgICAgICAgICAgICAgICBkaWN0aW9u YXJ5LiANCg0KICAgICAgICBGb3IgbWV0aG9kIGRvY3MsIHNlZSBlYWNoIG1l dGhvZCdzIGRvY3N0cmluZ3MuIEluIGdlbmVyYWwsIHRoZXJlIGlzIA0KICAg ICAgICAgICAgYSBtZXRob2Qgb2YgdGhlIHNhbWUgbmFtZSB0byBwcmVmb3Jt IGVhY2ggU01UUCBjb21hbmQsIGFuZCB0aGVyZSANCiAgICAgICAgICAgIGlz IGEgbWV0aG9kIGNhbGxlZCAnc2VuZG1haWwnIHRoYXQgd2lsbCBkbyBhbiBl bnRpZXJlIG1haWwgDQogICAgICAgICAgICB0cmFuc2FjdGlvbi4iIiINCg0K ICAgIGRlYnVnbGV2ZWwgPSAwDQogICAgZmlsZSA9IE5vbmUNCiAgICBoZWxv X3Jlc3AgPSBOb25lDQogICAgZWhsb19yZXNwID0gTm9uZQ0KICAgIGRvZXNf ZXNtdHAgPSAwDQoNCiAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCA9ICcn LCBwb3J0ID0gMCk6DQogICAgICAgICIiIkluaXRpYWxpemUgYSBuZXcgaW5z dGFuY2UuDQoNCiAgICAgICAgSWYgc3BlY2lmaWVkLCBgaG9zdCcgaXMgdGhl IG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IHRvIHdoaWNoDQogICAgICAgIHRv IGNvbm5lY3QuICBJZiBzcGVjaWZpZWQsIGBwb3J0JyBzcGVjaWZpZXMgdGhl IHBvcnQgdG8gd2hpY2gNCiAgICAgICAgdG8gY29ubmVjdC4gIEJ5IGRlZmF1 bHQsIHNtdHBsaWIuU01UUF9QT1JUIGlzIHVzZWQuDQoNCiAgICAgICAgIiIi DQogICAgICAgIHNlbGYuZXNtdHBfZmVhdHVyZXMgPSB7fQ0KICAgICAgICBp ZiBob3N0OiBzZWxmLmNvbm5lY3QoaG9zdCwgcG9ydCkNCiAgICANCiAgICBk ZWYgc2V0X2RlYnVnbGV2ZWwoc2VsZiwgZGVidWdsZXZlbCk6DQogICAgICAg ICIiIlNldCB0aGUgZGVidWcgb3V0cHV0IGxldmVsLg0KDQogICAgICAgIEEg bm9uLWZhbHNlIHZhbHVlIHJlc3VsdHMgaW4gZGVidWcgbWVzc2FnZXMgZm9y IGNvbm5lY3Rpb24gYW5kDQogICAgICAgIGZvciBhbGwgbWVzc2FnZXMgc2Vu dCB0byBhbmQgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLg0KDQogICAgICAg ICIiIg0KICAgICAgICBzZWxmLmRlYnVnbGV2ZWwgPSBkZWJ1Z2xldmVsDQoN CiAgICBkZWYgY29ubmVjdChzZWxmLCBob3N0PSdsb2NhbGhvc3QnLCBwb3J0 ID0gMCk6DQogICAgICAgICIiIkNvbm5lY3QgdG8gYSBob3N0IG9uIGEgZ2l2 ZW4gcG9ydC4NCg0KICAgICAgICBJZiB0aGUgaG9zdG5hbWUgZW5kcyB3aXRo IGEgY29sb24gKGA6JykgZm9sbG93ZWQgYnkgYSBudW1iZXIsDQoJYW5kIHRo ZXJlIGlzIG5vIHBvcnQgc3BlY2lmaWVkLCAgdGhhdCBzdWZmaXggd2lsbCBi ZSBzdHJpcHBlZCANCiAgICAgICAgb2ZmIGFuZCB0aGUgbnVtYmVyIGludGVy cHJldGVkIGFzIHRoZSBwb3J0IG51bWJlciB0byB1c2UuDQoNCiAgICAgICAg Tm90ZTogIFRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgaW52b2tlZCBi eSBfX2luaXRfXywNCiAgICAgICAgaWYgYSBob3N0IGlzIHNwZWNpZmllZCBk dXJpbmcgaW5zdGFudGlhdGlvbi4NCg0KICAgICAgICAiIiINCiAgICAgICAg aWYgbm90IHBvcnQ6DQogICAgICAgICAgICBpID0gc3RyaW5nLmZpbmQoaG9z dCwgJzonKQ0KICAgICAgICAgICAgaWYgaSA+PSAwOg0KICAgICAgICAgICAg ICAgIGhvc3QsIHBvcnQgPSBob3N0WzppXSwgaG9zdFtpKzE6XQ0KICAgICAg ICAgICAgICAgIHRyeTogcG9ydCA9IHN0cmluZy5hdG9pKHBvcnQpDQogICAg ICAgICAgICAgICAgZXhjZXB0IHN0cmluZy5hdG9pX2Vycm9yOg0KICAgICAg ICAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IsICJub25udW1lcmlj IHBvcnQiDQogICAgICAgIGlmIG5vdCBwb3J0OiBwb3J0ID0gU01UUF9QT1JU DQogICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFG X0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkNCiAgICAgICAgaWYgc2VsZi5k ZWJ1Z2xldmVsID4gMDogcHJpbnQgJ2Nvbm5lY3Q6JywgKGhvc3QsIHBvcnQp DQogICAgICAgIHNlbGYuc29jay5jb25uZWN0KGhvc3QsIHBvcnQpDQogICAg ICAgIChjb2RlLG1zZyk9c2VsZi5nZXRyZXBseSgpDQogICAgICAgIGlmIHNl bGYuZGVidWdsZXZlbCA+MCA6IHByaW50ICJjb25uZWN0OiIsIG1zZw0KICAg ICAgICByZXR1cm4gbXNnDQogICAgDQogICAgZGVmIHNlbmQoc2VsZiwgc3Ry KToNCiAgICAgICAgIiIiU2VuZCBgc3RyJyB0byB0aGUgc2VydmVyLiIiIg0K ICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCAnc2VuZDon LCBgc3RyYA0KICAgICAgICBpZiBzZWxmLnNvY2s6DQoJICAgIHRyeToNCiAg ICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZChzdHIpDQoJICAgIGV4Y2Vw dCBzb2NrZXQuZXJyb3I6DQogICAgICAgICAgICAgICAgcmFpc2UgU01UUFNl cnZlckRpc2Nvbm5lY3RlZA0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAg cmFpc2UgU01UUFNlcnZlckRpc2Nvbm5lY3RlZA0KIA0KICAgIGRlZiBwdXRj bWQoc2VsZiwgY21kLCBhcmdzPSIiKToNCiAgICAgICAgIiIiU2VuZCBhIGNv bW1hbmQgdG8gdGhlIHNlcnZlci4NCiAgICAgICAgIiIiDQogICAgICAgIHN0 ciA9ICclcyAlcyVzJyAlIChjbWQsIGFyZ3MsIENSTEYpDQogICAgICAgIHNl bGYuc2VuZChzdHIpDQogICAgDQogICAgZGVmIGdldHJlcGx5KHNlbGYpOg0K ICAgICAgICAiIiJHZXQgYSByZXBseSBmcm9tIHRoZSBzZXJ2ZXIuDQogICAg ICAgIA0KICAgICAgICBSZXR1cm5zIGEgdHVwbGUgY29uc2lzdGluZyBvZjoN CiAgICAgICAgLSBzZXJ2ZXIgcmVzcG9uc2UgY29kZSAoZS5nLiAnMjUwJywg b3Igc3VjaCwgaWYgYWxsIGdvZXMgd2VsbCkNCiAgICAgICAgICBOb3RlOiBy ZXR1cm5zIC0xIGlmIGl0IGNhbid0IHJlYWQgcmVzcG9uc2UgY29kZS4NCiAg ICAgICAgLSBzZXJ2ZXIgcmVzcG9uc2Ugc3RyaW5nIGNvcnJlc3BvbmRpbmcg dG8gcmVzcG9uc2UgY29kZQ0KICAgICAgICAgICAgICAgIChub3RlIDogbXVs dGlsaW5lIHJlc3BvbnNlcyBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUsIA0KICAg ICAgICAgICAgICAgICBtdWx0aWxpbmUgc3RyaW5nKQ0KICAgICAgICAiIiIN CiAgICAgICAgcmVzcD1bXQ0KICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNv Y2subWFrZWZpbGUoJ3JiJykNCiAgICAgICAgd2hpbGUgMToNCiAgICAgICAg ICAgIGxpbmUgPSBzZWxmLmZpbGUucmVhZGxpbmUoKQ0KICAgICAgICAgICAg aWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQgJ3JlcGx5OicsIGBsaW5l YA0KICAgICAgICAgICAgcmVzcC5hcHBlbmQoc3RyaW5nLnN0cmlwKGxpbmVb NDpdKSkNCiAgICAgICAgICAgIGNvZGU9bGluZVs6M10NCiAgICAgICAgICAg ICNjaGVjayBpZiBtdWx0aWxpbmUgcmVzcA0KICAgICAgICAgICAgaWYgbGlu ZVszOjRdIT0iLSI6DQogICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAg dHJ5Og0KICAgICAgICAgICAgZXJyY29kZSA9IHN0cmluZy5hdG9pKGNvZGUp DQogICAgICAgIGV4Y2VwdChWYWx1ZUVycm9yKToNCiAgICAgICAgICAgIGVy cmNvZGUgPSAtMQ0KDQogICAgICAgIGVycm1zZyA9IHN0cmluZy5qb2luKHJl c3AsIlxuIikNCiAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogDQog ICAgICAgICAgICBwcmludCAncmVwbHk6IHJldGNvZGUgKCVzKTsgTXNnOiAl cycgJSAoZXJyY29kZSxlcnJtc2cpDQogICAgICAgIHJldHVybiBlcnJjb2Rl LCBlcnJtc2cNCiAgICANCiAgICBkZWYgZG9jbWQoc2VsZiwgY21kLCBhcmdz PSIiKToNCiAgICAgICAgIiIiIFNlbmQgYSBjb21tYW5kLCBhbmQgcmV0dXJu IGl0cyByZXNwb25zZSBjb2RlICIiIg0KICAgICAgICANCiAgICAgICAgc2Vs Zi5wdXRjbWQoY21kLGFyZ3MpDQogICAgICAgIChjb2RlLG1zZyk9c2VsZi5n ZXRyZXBseSgpDQogICAgICAgIHJldHVybiBjb2RlDQojIHN0ZCBzbXRwIGNv bW1hbmRzDQoNCiAgICBkZWYgaGVsbyhzZWxmLCBuYW1lPScnKToNCiAgICAg ICAgIiIiIFNNVFAgJ2hlbG8nIGNvbW1hbmQuIEhvc3RuYW1lIHRvIHNlbmQg Zm9yIHRoaXMgY29tbWFuZCAgDQogICAgICAgIGRlZmF1bHRzIHRvIHRoZSBG UUROIG9mIHRoZSBsb2NhbCBob3N0ICIiIg0KICAgICAgICBuYW1lPXN0cmlu Zy5zdHJpcChuYW1lKQ0KICAgICAgICBpZiBsZW4obmFtZSk9PTA6DQogICAg ICAgICAgICAgICAgbmFtZT1zb2NrZXQuZ2V0aG9zdGJ5YWRkcihzb2NrZXQu Z2V0aG9zdG5hbWUoKSlbMF0NCiAgICAgICAgc2VsZi5wdXRjbWQoImhlbG8i LG5hbWUpDQogICAgICAgIChjb2RlLG1zZyk9c2VsZi5nZXRyZXBseSgpDQog ICAgICAgIHNlbGYuaGVsb19yZXNwPW1zZw0KICAgICAgICByZXR1cm4gY29k ZQ0KDQogICAgZGVmIGVobG8oc2VsZiwgbmFtZT0nJyk6DQogICAgICAgICIi IiBTTVRQICdlaGxvJyBjb21tYW5kLiBIb3N0bmFtZSB0byBzZW5kIGZvciB0 aGlzIGNvbW1hbmQgIA0KICAgICAgICBkZWZhdWx0cyB0byB0aGUgRlFETiBv ZiB0aGUgbG9jYWwgaG9zdC4gICIiIg0KICAgICAgICBuYW1lPXN0cmluZy5z dHJpcChuYW1lKQ0KICAgICAgICBpZiBsZW4obmFtZSk9PTA6DQogICAgICAg ICAgICAgICAgbmFtZT1zb2NrZXQuZ2V0aG9zdGJ5YWRkcihzb2NrZXQuZ2V0 aG9zdG5hbWUoKSlbMF0NCiAgICAgICAgc2VsZi5wdXRjbWQoImVobG8iLG5h bWUpDQogICAgICAgIChjb2RlLG1zZyk9c2VsZi5nZXRyZXBseSgpDQogICAg ICAgICMgQWNjb3JkaW5nIHRvIFJGQzE4Njkgc29tZSAoYmFkbHkgd3JpdHRl bikgDQogICAgICAgICMgTVRBJ3Mgd2lsbCBkaXNjb25uZWN0IG9uIGFuIGVo bG8uIFRvc3MgYW4gZXhjZXB0aW9uIGlmIA0KICAgICAgICAjIHRoYXQgaGFw cGVucyAtZGRtDQogICAgICAgIGlmIGNvZGUgPT0gLTEgYW5kIGxlbihtc2cp ID09IDA6DQogICAgICAgICAgICByYWlzZSBTTVRQU2VydmVyRGlzY29ubmVj dGVkDQogICAgICAgIHNlbGYuZWhsb19yZXNwPW1zZw0KICAgICAgICBpZiBj b2RlPD4yNTA6DQogICAgICAgICAgICByZXR1cm4gY29kZQ0KICAgICAgICBz ZWxmLmRvZXNfZXNtdHA9MQ0KICAgICAgICAjcGFyc2UgdGhlIGVobG8gcmVz cG9uY2UgLWRkbQ0KCXJlc3A9c3RyaW5nLnNwbGl0KHNlbGYuZWhsb19yZXNw LCdcbicpDQogICAgICAgIGRlbCByZXNwWzBdDQoJZm9yIGVhY2ggaW4gcmVz cDoNCiAgICAgICAgICAgIG09cmUubWF0Y2gocicoP1A8ZmVhdHVyZT5bQS1a YS16MC05XVtBLVphLXowLTlcLV0qKScsZWFjaCkNCiAgICAgICAgICAgIGlm IG06DQogICAgICAgICAgICAgICAgZmVhdHVyZT1zdHJpbmcubG93ZXIobS5n cm91cCgiZmVhdHVyZSIpKQ0KICAgICAgICAgICAgICAgIHBhcmFtcz1zdHJp bmcuc3RyaXAobS5zdHJpbmdbbS5lbmQoImZlYXR1cmUiKTpdKQ0KICAgICAg ICAgICAgICAgIHNlbGYuZXNtdHBfZmVhdHVyZXNbZmVhdHVyZV09cGFyYW1z DQogICAgICAgIHJldHVybiBjb2RlDQoNCiAgICBkZWYgaGFzX2V4dG4oc2Vs Ziwgb3B0KToNCiAgICAgICAgIiIiRG9lcyB0aGUgc2VydmVyIHN1cHBvcnQg YSBnaXZlbiBTTVRQIHNlcnZpY2UgZXh0ZW5zaW9uPyIiIg0KICAgICAgICBy ZXR1cm4gc2VsZi5lc210cF9mZWF0dXJlcy5oYXNfa2V5KHN0cmluZy5sb3dl cihvcHQpKQ0KDQogICAgZGVmIGhlbHAoc2VsZiwgYXJncz0nJyk6DQogICAg ICAgICIiIiBTTVRQICdoZWxwJyBjb21tYW5kLiBSZXR1cm5zIGhlbHAgdGV4 dCBmcm9tIHNlcnZlciAiIiINCiAgICAgICAgc2VsZi5wdXRjbWQoImhlbHAi LCBhcmdzKQ0KICAgICAgICAoY29kZSxtc2cpPXNlbGYuZ2V0cmVwbHkoKQ0K ICAgICAgICByZXR1cm4gbXNnDQoNCiAgICBkZWYgcnNldChzZWxmKToNCiAg ICAgICAgIiIiIFNNVFAgJ3JzZXQnIGNvbW1hbmQuIFJlc2V0cyBzZXNzaW9u LiAiIiINCiAgICAgICAgY29kZT1zZWxmLmRvY21kKCJyc2V0IikNCiAgICAg ICAgcmV0dXJuIGNvZGUNCg0KICAgIGRlZiBub29wKHNlbGYpOg0KICAgICAg ICAiIiIgU01UUCAnbm9vcCcgY29tbWFuZC4gRG9lc24ndCBkbyBhbnl0aGlu ZyA6PiAiIiINCiAgICAgICAgY29kZT1zZWxmLmRvY21kKCJub29wIikNCiAg ICAgICAgcmV0dXJuIGNvZGUNCg0KICAgIGRlZiBtYWlsKHNlbGYsc2VuZGVy LG9wdGlvbnM9W10pOg0KICAgICAgICAiIiIgU01UUCAnbWFpbCcgY29tbWFu ZC4gQmVnaW5zIG1haWwgeGZlciBzZXNzaW9uLiAiIiINCiAgICAgICAgb3B0 aW9ubGlzdCA9ICcnDQogICAgICAgIGlmIG9wdGlvbnMgYW5kIHNlbGYuZG9l c19lc210cDoNCiAgICAgICAgICAgIG9wdGlvbmxpc3QgPSBzdHJpbmcuam9p bihvcHRpb25zLCAnICcpDQogICAgICAgIHNlbGYucHV0Y21kKCJtYWlsIiwg IkZST006JXMgJXMiICUgKHF1b3RlYWRkcihzZW5kZXIpICxvcHRpb25saXN0 KSkNCiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0cmVwbHkoKQ0KDQogICAgZGVm IHJjcHQoc2VsZixyZWNpcCxvcHRpb25zPVtdKToNCiAgICAgICAgIiIiIFNN VFAgJ3JjcHQnIGNvbW1hbmQuIEluZGljYXRlcyAxIHJlY2lwaWVudCBmb3Ig dGhpcyBtYWlsLiAiIiINCiAgICAgICAgb3B0aW9ubGlzdCA9ICcnDQogICAg ICAgIGlmIG9wdGlvbnMgYW5kIHNlbGYuZG9lc19lc210cDoNCiAgICAgICAg ICAgIG9wdGlvbmxpc3QgPSBzdHJpbmcuam9pbihvcHRpb25zLCAnICcpDQog ICAgICAgIHNlbGYucHV0Y21kKCJyY3B0IiwiVE86JXMgJXMiICUgKHF1b3Rl YWRkcihyZWNpcCksb3B0aW9ubGlzdCkpDQogICAgICAgIHJldHVybiBzZWxm LmdldHJlcGx5KCkNCg0KICAgIGRlZiBkYXRhKHNlbGYsbXNnKToNCiAgICAg ICAgIiIiIFNNVFAgJ0RBVEEnIGNvbW1hbmQuIFNlbmRzIG1lc3NhZ2UgZGF0 YSB0byBzZXJ2ZXIuIA0KICAgICAgICAgICAgQXV0b21hdGljYWxseSBxdW90 ZXMgbGluZXMgYmVnaW5uaW5nIHdpdGggYSBwZXJpb2QgcGVyIHJmYzgyMS4g IiIiDQogICAgICAgIHNlbGYucHV0Y21kKCJkYXRhIikNCiAgICAgICAgKGNv ZGUscmVwbCk9c2VsZi5nZXRyZXBseSgpDQogICAgICAgIGlmIHNlbGYuZGVi dWdsZXZlbCA+MCA6IHByaW50ICJkYXRhOiIsIChjb2RlLHJlcGwpDQogICAg ICAgIGlmIGNvZGUgPD4gMzU0Og0KICAgICAgICAgICAgcmV0dXJuIC0xDQog ICAgICAgIGVsc2U6DQogICAgICAgICAgICBzZWxmLnNlbmQocXVvdGVkYXRh KG1zZykpDQogICAgICAgICAgICBzZWxmLnNlbmQoIiVzLiVzIiAlIChDUkxG LCBDUkxGKSkNCiAgICAgICAgICAgIChjb2RlLG1zZyk9c2VsZi5nZXRyZXBs eSgpDQogICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPjAgOiBwcmlu dCAiZGF0YToiLCAoY29kZSxtc2cpDQogICAgICAgICAgICByZXR1cm4gY29k ZQ0KDQogICAgZGVmIHZyZnkoc2VsZiwgYWRkcmVzcyk6DQogICAgICAgIHJl dHVybiBzZWxmLnZlcmlmeShhZGRyZXNzKQ0KDQogICAgZGVmIHZlcmlmeShz ZWxmLCBhZGRyZXNzKToNCiAgICAgICAgIiIiIFNNVFAgJ3ZlcmlmeScgY29t bWFuZC4gQ2hlY2tzIGZvciBhZGRyZXNzIHZhbGlkaXR5LiAiIiINCiAgICAg ICAgc2VsZi5wdXRjbWQoInZyZnkiLCBxdW90ZWFkZHIoYWRkcmVzcykpDQog ICAgICAgIHJldHVybiBzZWxmLmdldHJlcGx5KCkNCg0KICAgIGRlZiBleHBu KHNlbGYsIGFkZHJlc3MpOg0KICAgICAgICAiIiIgU01UUCAndmVyaWZ5JyBj b21tYW5kLiBDaGVja3MgZm9yIGFkZHJlc3MgdmFsaWRpdHkuICIiIg0KICAg ICAgICBzZWxmLnB1dGNtZCgiZXhwbiIsIHF1b3RlYWRkcihhZGRyZXNzKSkN CiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0cmVwbHkoKQ0KDQoNCiNzb21lIHVz ZWZ1bCBtZXRob2RzDQogICAgZGVmIHNlbmRtYWlsKHNlbGYsZnJvbV9hZGRy LHRvX2FkZHJzLG1zZyxtYWlsX29wdGlvbnM9W10scmNwdF9vcHRpb25zPVtd KToNCiAgICAgICAgIiIiIFRoaXMgY29tbWFuZCBwZXJmb3JtcyBhbiBlbnRp cmUgbWFpbCB0cmFuc2FjdGlvbi4gDQogICAgICAgICAgICBUaGUgYXJndW1l bnRzIGFyZTogDQogICAgICAgICAgICAgICAtIGZyb21fYWRkciA6IFRoZSBh ZGRyZXNzIHNlbmRpbmcgdGhpcyBtYWlsLg0KICAgICAgICAgICAgICAgLSB0 b19hZGRycyA6ICBhIGxpc3Qgb2YgYWRkcmVzc2VzIHRvIHNlbmQgdGhpcyBt YWlsIHRvDQogICAgICAgICAgICAgICAtIG1zZyA6IHRoZSBtZXNzYWdlIHRv IHNlbmQuIA0KICAgICAgICAgICAgICAgLSBtYWlsX29wdGlvbnMgOiBsaXN0 IG9mIEVTTVRQIG9wdGlvbnMgKHN1Y2ggYXMgOGJpdG1pbWUpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgbWFpbCBjb21tYW5k DQogICAgICAgICAgICAgICAtIHJjcHRfb3B0aW9ucyA6IExpc3Qgb2YgRVNN VFAgb3B0aW9ucyAoc3VjaCBhcyBEU04gY29tbWFuZHMpDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yIGFsbCB0aGUgcmNwdCBjb21tYW5k cw0KCUlmIHRoZXJlIGhhcyBiZWVuIG5vIHByZXZpb3VzIEVITE8gb3IgSEVM TyBjb21tYW5kIHRoaXMgc2Vzc2lvbiwNCgl0aGlzIG1ldGhvZCB0cmllcyBF U01UUCBFSExPIGZpcnN0LiBJZiB0aGUgc2VydmVyIGRvZXMgRVNNVFAsIG1l c3NhZ2UNCiAgICAgICAgc2l6ZSBhbmQgZWFjaCBvZiB0aGUgc3BlY2lmaWVk IG9wdGlvbnMgd2lsbCBiZSBwYXNzZWQgdG8gaXQuICANCiAgICAgICAgSWYg RUhMTyBmYWlscywgSEVMTyB3aWxsIGJlIHRyaWVkIGFuZCBFU01UUCBvcHRp b25zIHN1cHByZXNzZWQuDQoNCiAgICAgICAgVGhpcyBtZXRob2Qgd2lsbCBy ZXR1cm4gbm9ybWFsbHkgaWYgdGhlIG1haWwgaXMgYWNjZXB0ZWQgZm9yIGF0 IGxlYXN0IA0KICAgICAgICBvbmUgcmVjaXBpZW50LiBPdGhlcndpc2UgaXQg d2lsbCB0aHJvdyBhbiBleGNlcHRpb24gKGVpdGhlcg0KICAgICAgICBTTVRQ U2VuZGVyUmVmdXNlZCwgU01UUFJlY2lwaWVudHNSZWZ1c2VkLCBvciBTTVRQ RGF0YUVycm9yKQ0KICAgICAgICBUaGF0IGlzLCBpZiB0aGlzIG1ldGhvZCBk b2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24sIHRoZW4gc29tZW9uZSANCiAg ICAgICAgc2hvdWxkIGdldCB5b3VyIG1haWwuICBJZiB0aGlzIG1ldGhvZCBk b2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24sDQogICAgICAgIGl0IHJldHVy bnMgYSBkaWN0aW9uYXJ5LCB3aXRoIG9uZSBlbnRyeSBmb3IgZWFjaCByZWNp cGllbnQgdGhhdCB3YXMgDQogICAgICAgIHJlZnVzZWQuIA0KDQogICAgICAg IEV4YW1wbGU6DQogICAgICANCiAgICAgICAgID4+PiBpbXBvcnQgc210cGxp Yg0KICAgICAgICAgPj4+IHM9c210cGxpYi5TTVRQKCJsb2NhbGhvc3QiKQ0K ICAgICAgICAgPj4+IHRvbGlzdD1bIm9uZUBvbmUub3JnIiwidHdvQHR3by5v cmciLCJ0aHJlZUB0aHJlZS5vcmciLCJmb3VyQGZvdXIub3JnIl0NCiAgICAg ICAgID4+PiBtc2cgPSAnJycNCiAgICAgICAgIC4uLiBGcm9tOiBNZUBteS5v cmcNCiAgICAgICAgIC4uLiBTdWJqZWN0OiB0ZXN0aW4nLi4uDQogICAgICAg ICAuLi4NCiAgICAgICAgIC4uLiBUaGlzIGlzIGEgdGVzdCAnJycNCiAgICAg ICAgID4+PiBzLnNlbmRtYWlsKCJtZUBteS5vcmciLHRvbGlzdCxtc2cpDQog ICAgICAgICB7ICJ0aHJlZUB0aHJlZS5vcmciIDogKCA1NTAgLCJVc2VyIHVu a25vd24iICkgfQ0KICAgICAgICAgPj4+IHMucXVpdCgpDQogICAgICAgIA0K ICAgICAgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBtZXNzYWdlIHdh cyBhY2NlcHRlZCBmb3IgZGVsaXZlcnkgdG8gDQogICAgICAgICB0aHJlZSBv ZiB0aGUgZm91ciBhZGRyZXNzZXMsIGFuZCBvbmUgd2FzIHJlamVjdGVkLCB3 aXRoIHRoZSBlcnJvcg0KICAgICAgICAgY29kZSA1NTAuIElmIGFsbCBhZGRy ZXNzZXMgYXJlIGFjY2VwdGVkLCB0aGVuIHRoZSBtZXRob2QNCiAgICAgICAg IHdpbGwgcmV0dXJuIGFuIGVtcHR5IGRpY3Rpb25hcnkuICANCiAgICAgICAg ICIiIg0KICAgICAgICBpZiBub3Qgc2VsZi5oZWxvX3Jlc3AgYW5kIG5vdCBz ZWxmLmVobG9fcmVzcDoNCiAgICAgICAgICAgIGlmIHNlbGYuZWhsbygpID49 IDQwMDoNCiAgICAgICAgICAgICAgICBzZWxmLmhlbG8oKQ0KICAgICAgICBl c210cF9vcHRzID0gW10NCiAgICAgICAgaWYgc2VsZi5kb2VzX2VzbXRwOg0K ICAgICAgICAgICAgIyBIbW1tPyB3aGF0J3MgdGhpcz8gLWRkbQ0KICAgICAg ICAgICAgIyBzZWxmLmVzbXRwX2ZlYXR1cmVzWyc3Yml0J109IiINCiAgICAg ICAgICAgIGlmIHNlbGYuaGFzX2V4dG4oJ3NpemUnKToNCiAgICAgICAgICAg ICAgICBlc210cF9vcHRzLmFwcGVuZCgic2l6ZT0iICsgYGxlbihtc2cpYCkN CiAgICAgICAgICAgIGZvciBvcHRpb24gaW4gbWFpbF9vcHRpb25zOg0KICAg ICAgICAgICAgICAgIGVzbXRwX29wdHMuYXBwZW5kKG9wdGlvbikNCg0KICAg ICAgICAoY29kZSxyZXNwKSA9IHNlbGYubWFpbChmcm9tX2FkZHIsIGVzbXRw X29wdHMpDQogICAgICAgIGlmIGNvZGUgPD4gMjUwOg0KICAgICAgICAgICAg c2VsZi5yc2V0KCkNCiAgICAgICAgICAgIHJhaXNlIFNNVFBTZW5kZXJSZWZ1 c2VkDQogICAgICAgIHNlbmRlcnJzPXt9DQogICAgICAgIGZvciBlYWNoIGlu IHRvX2FkZHJzOg0KICAgICAgICAgICAgKGNvZGUscmVzcCk9c2VsZi5yY3B0 KGVhY2gsIHJjcHRfb3B0aW9ucykNCiAgICAgICAgICAgIGlmIChjb2RlIDw+ IDI1MCkgYW5kIChjb2RlIDw+IDI1MSk6DQogICAgICAgICAgICAgICAgc2Vu ZGVycnNbZWFjaF09KGNvZGUscmVzcCkNCiAgICAgICAgaWYgbGVuKHNlbmRl cnJzKT09bGVuKHRvX2FkZHJzKToNCiAgICAgICAgICAgICMgdGhlIHNlcnZl ciByZWZ1c2VkIGFsbCBvdXIgcmVjaXBpZW50cw0KICAgICAgICAgICAgc2Vs Zi5yc2V0KCkNCiAgICAgICAgICAgIHJhaXNlIFNNVFBSZWNpcGllbnRzUmVm dXNlZA0KICAgICAgICBjb2RlPXNlbGYuZGF0YShtc2cpDQogICAgICAgIGlm IGNvZGUgPD4yNTAgOg0KICAgICAgICAgICAgc2VsZi5yc2V0KCkNCiAgICAg ICAgICAgIHJhaXNlIFNNVFBEYXRhRXJyb3INCiAgICAgICAgI2lmIHdlIGdv dCBoZXJlIHRoZW4gc29tZWJvZHkgZ290IG91ciBtYWlsDQogICAgICAgIHJl dHVybiBzZW5kZXJycyAgICAgICAgIA0KDQoNCiAgICBkZWYgY2xvc2Uoc2Vs Zik6DQogICAgICAgICIiIkNsb3NlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBT TVRQIHNlcnZlci4iIiINCiAgICAgICAgaWYgc2VsZi5maWxlOg0KICAgICAg ICAgICAgc2VsZi5maWxlLmNsb3NlKCkNCiAgICAgICAgc2VsZi5maWxlID0g Tm9uZQ0KICAgICAgICBpZiBzZWxmLnNvY2s6DQogICAgICAgICAgICBzZWxm LnNvY2suY2xvc2UoKQ0KICAgICAgICBzZWxmLnNvY2sgPSBOb25lDQoNCg0K ICAgIGRlZiBxdWl0KHNlbGYpOg0KICAgICAgICAiIiJUZXJtaW5hdGUgdGhl IFNNVFAgc2Vzc2lvbi4iIiINCiAgICAgICAgc2VsZi5kb2NtZCgicXVpdCIp DQogICAgICAgIHNlbGYuY2xvc2UoKQ0KDQojIFRlc3QgdGhlIHNlbmRtYWls IG1ldGhvZCwgd2hpY2ggdGVzdHMgbW9zdCBvZiB0aGUgb3RoZXJzLg0KIyBO b3RlOiBUaGlzIGFsd2F5cyBzZW5kcyB0byBsb2NhbGhvc3QuDQppZiBfX25h bWVfXyA9PSAnX19tYWluX18nOg0KICAgIGltcG9ydCBzeXMsIHJmYzgyMg0K DQogICAgZGVmIHByb21wdChwcm9tcHQpOg0KICAgICAgICBzeXMuc3Rkb3V0 LndyaXRlKHByb21wdCArICI6ICIpDQogICAgICAgIHJldHVybiBzdHJpbmcu c3RyaXAoc3lzLnN0ZGluLnJlYWRsaW5lKCkpDQoNCiAgICBmcm9tYWRkciA9 IHByb21wdCgiRnJvbSIpDQogICAgdG9hZGRycyAgPSBzdHJpbmcuc3BsaXRm aWVsZHMocHJvbXB0KCJUbyIpLCAnLCcpDQogICAgcHJpbnQgIkVudGVyIG1l c3NhZ2UsIGVuZCB3aXRoIF5EOiINCiAgICBtc2cgPSAnJw0KICAgIHdoaWxl IDE6DQogICAgICAgIGxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKQ0KICAg ICAgICBpZiBub3QgbGluZToNCiAgICAgICAgICAgIGJyZWFrDQogICAgICAg IG1zZyA9IG1zZyArIGxpbmUNCiAgICBwcmludCAiTWVzc2FnZSBsZW5ndGgg aXMgIiArIGBsZW4obXNnKWANCg0KICAgIHNlcnZlciA9IFNNVFAoJ2xvY2Fs aG9zdCcpDQogICAgc2VydmVyLnNldF9kZWJ1Z2xldmVsKDEpDQogICAgc2Vy dmVyLnNlbmRtYWlsKGZyb21hZGRyLCB0b2FkZHJzLCBtc2cpDQogICAgc2Vy dmVyLnF1aXQoKQ0KDQoNCg0K ---1395546950-1591827097-904375847=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="patch.smtplib" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Mailman patch ZGlmZiAtYyAvdXNyL3NyYy9tYWlsbWFuLTEuMGI1L01haWxtYW4vQm91bmNl ci5weSBNYWlsbWFuL0JvdW5jZXIucHkNCioqKiAvdXNyL3NyYy9tYWlsbWFu LTEuMGI1L01haWxtYW4vQm91bmNlci5weQlNb24gSnVsIDI3IDE3OjQ4OjMx IDE5OTgNCi0tLSBNYWlsbWFuL0JvdW5jZXIucHkJU2F0IEF1ZyAyOSAwMDox MToxMCAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAyMDIsMjA4ICoqKioN CiAgICAgICAgICAgICAgIyAnYm91bmNlLnR4dCcgaGFzIGEgdHJhaWxpbmcg bmV3bGluZQ0KICAgICAgICAgICAgICB0ZXh0ID0gdGV4dCArIFwNCiAgICAg ICAgICAgICAgICAgICAgIHN0cmluZy5qb2luKG1zZy5oZWFkZXJzLCAnJykg KyAnXG4nICsgXA0KISAgICAgICAgICAgICAgICAgICAgVXRpbHMuUXVvdGVQ ZXJpb2RzKG1zZy5ib2R5KSArICdcbicgKyBcDQogICAgICAgICAgICAgICAg ICAgICAnLS0nICsgYm91bmRhcnkgKyAnLS0nDQogIA0KICAgICAgICAgICAg ICBpZiBuZWdhdGl2ZToNCi0tLSAyMDIsMjA4IC0tLS0NCiAgICAgICAgICAg ICAgIyAnYm91bmNlLnR4dCcgaGFzIGEgdHJhaWxpbmcgbmV3bGluZQ0KICAg ICAgICAgICAgICB0ZXh0ID0gdGV4dCArIFwNCiAgICAgICAgICAgICAgICAg ICAgIHN0cmluZy5qb2luKG1zZy5oZWFkZXJzLCAnJykgKyAnXG4nICsgXA0K ISAgICAgICAgICAgICAgICAgICAgbXNnLmJvZHkgKyAnXG4nICsgXA0KICAg ICAgICAgICAgICAgICAgICAgJy0tJyArIGJvdW5kYXJ5ICsgJy0tJw0KICAN CiAgICAgICAgICAgICAgaWYgbmVnYXRpdmU6DQpkaWZmIC1jIC91c3Ivc3Jj L21haWxtYW4tMS4wYjUvTWFpbG1hbi9EZWxpdmVyZXIucHkgTWFpbG1hbi9E ZWxpdmVyZXIucHkNCioqKiAvdXNyL3NyYy9tYWlsbWFuLTEuMGI1L01haWxt YW4vRGVsaXZlcmVyLnB5CU1vbiBKdWwgMjcgMTc6NDg6MzEgMTk5OA0KLS0t IE1haWxtYW4vRGVsaXZlcmVyLnB5CVNhdCBBdWcgMjkgMDA6MTI6MDkgMTk5 OA0KKioqKioqKioqKioqKioqDQoqKiogNDMsNTAgKioqKg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2hlYWRlcnM9WydFcnJvcnMt VG86ICVzXG4nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJSBTZWxmLkdldEFkbWluRW1haWwoKV0pDQogIA0KISAg ICAgZGVmIFF1b3RlUGVyaW9kcyhzZWxmLCB0ZXh0KToNCiEgCXJldHVybiBz dHJpbmcuam9pbihzdHJpbmcuc3BsaXQodGV4dCwgJ1xuLlxuJyksICdcbiAu XG4nKQ0KICAgICAgZGVmIERlbGl2ZXJUb0xpc3Qoc2VsZiwgbXNnLCByZWNp cGllbnRzLCANCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcj0iIiwg Zm9vdGVyPSIiLCByZW1vdmVfdG89MCwgdG1wZmlsZV9wcmVmaXggPSAiIik6 DQogIAlpZiBub3QobGVuKHJlY2lwaWVudHMpKToNCi0tLSA0Myw1MCAtLS0t DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfaGVhZGVy cz1bJ0Vycm9ycy1UbzogJXNcbicNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAlIFNlbGYuR2V0QWRtaW5FbWFpbCgp XSkNCiAgDQohICMgICAgZGVmIFF1b3RlUGVyaW9kcyhzZWxmLCB0ZXh0KToN CiEgIwlyZXR1cm4gc3RyaW5nLmpvaW4oc3RyaW5nLnNwbGl0KHRleHQsICdc bi5cbicpLCAnXG4gLlxuJykNCiAgICAgIGRlZiBEZWxpdmVyVG9MaXN0KHNl bGYsIG1zZywgcmVjaXBpZW50cywgDQogICAgICAgICAgICAgICAgICAgICAg ICBoZWFkZXI9IiIsIGZvb3Rlcj0iIiwgcmVtb3ZlX3RvPTAsIHRtcGZpbGVf cHJlZml4ID0gIiIpOg0KICAJaWYgbm90KGxlbihyZWNpcGllbnRzKSk6DQoq KioqKioqKioqKioqKioNCioqKiA3NSw4MSAqKioqDQogICAgICAgICAgY21k cHJvYy53cml0ZShzdHJpbmcuam9pbihtc2cuaGVhZGVycywgJycpICsgIlxu IikNCiAgCWlmIGhlYWRlcjogICAgICAgICAgICAgICAgICAgICAgIyBUaGUg KmJvZHkqIGhlYWRlcjoNCiAgCSAgICBjbWRwcm9jLndyaXRlKGhlYWRlciAr ICJcbiIpDQohIAljbWRwcm9jLndyaXRlKHNlbGYuUXVvdGVQZXJpb2RzKG1z Zy5ib2R5KSkNCiAgCWlmIGZvb3RlcjoNCiAgCSAgICBjbWRwcm9jLndyaXRl KGZvb3RlcikNCiAgDQotLS0gNzUsODEgLS0tLQ0KICAgICAgICAgIGNtZHBy b2Mud3JpdGUoc3RyaW5nLmpvaW4obXNnLmhlYWRlcnMsICcnKSArICJcbiIp DQogIAlpZiBoZWFkZXI6ICAgICAgICAgICAgICAgICAgICAgICMgVGhlICpi b2R5KiBoZWFkZXI6DQogIAkgICAgY21kcHJvYy53cml0ZShoZWFkZXIgKyAi XG4iKQ0KISAJY21kcHJvYy53cml0ZShtc2cuYm9keSkNCiAgCWlmIGZvb3Rl cjoNCiAgCSAgICBjbWRwcm9jLndyaXRlKGZvb3RlcikNCiAgDQpkaWZmIC1j IC91c3Ivc3JjL21haWxtYW4tMS4wYjUvTWFpbG1hbi9PdXRnb2luZ1F1ZXVl LnB5IE1haWxtYW4vT3V0Z29pbmdRdWV1ZS5weQ0KKioqIC91c3Ivc3JjL21h aWxtYW4tMS4wYjUvTWFpbG1hbi9PdXRnb2luZ1F1ZXVlLnB5CU1vbiBKdWwg MjcgMTc6NDg6MzEgMTk5OA0KLS0tIE1haWxtYW4vT3V0Z29pbmdRdWV1ZS5w eQlGcmkgQXVnIDI4IDIwOjUwOjUxIDE5OTgNCioqKioqKioqKioqKioqKg0K KioqIDI1LDMxICoqKioNCiAgICAgIG9zLnVubGluayhtc2cpDQogIA0KICBk ZWYgcHJvY2Vzc1F1ZXVlKCk6DQohICAgICBpbXBvcnQgb3MsIHNtdHBsaWIN CiAgICAgIGZpbGVzID0gb3MubGlzdGRpcihtbV9jZmcuREFUQV9ESVIpDQog ICAgICBmb3IgZmlsZSBpbiBmaWxlczoNCiAgICAgICAgICBpZiBURU1QTEFU RSA8PiBmaWxlWzpsZW4oVEVNUExBVEUpXToNCi0tLSAyNSwzMSAtLS0tDQog ICAgICBvcy51bmxpbmsobXNnKQ0KICANCiAgZGVmIHByb2Nlc3NRdWV1ZSgp Og0KISAgICAgaW1wb3J0IG9zDQogICAgICBmaWxlcyA9IG9zLmxpc3RkaXIo bW1fY2ZnLkRBVEFfRElSKQ0KICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6DQog ICAgICAgICAgaWYgVEVNUExBVEUgPD4gZmlsZVs6bGVuKFRFTVBMQVRFKV06 DQpkaWZmIC1jIC91c3Ivc3JjL21haWxtYW4tMS4wYjUvTWFpbG1hbi9VdGls cy5weSBNYWlsbWFuL1V0aWxzLnB5DQoqKiogL3Vzci9zcmMvbWFpbG1hbi0x LjBiNS9NYWlsbWFuL1V0aWxzLnB5CU1vbiBKdWwgMjcgMTc6NDg6MzEgMTk5 OA0KLS0tIE1haWxtYW4vVXRpbHMucHkJU2F0IEF1ZyAyOSAwMDoyNDo1NiAx OTk4DQoqKioqKioqKioqKioqKioNCioqKiAxNTQsMTYwICoqKioNCiAgICAg IG1zZyA9IE1lc3NhZ2UuT3V0Z29pbmdNZXNzYWdlKCkNCiAgICAgIG1zZy5T ZXRTZW5kZXIoc2VuZGVyKQ0KICAgICAgbXNnLlNldEhlYWRlcignU3ViamVj dCcsIHN1YmplY3QsIDEpDQohICAgICBtc2cuU2V0Qm9keShRdW90ZVBlcmlv ZHModGV4dCkpDQogICAgICBEZWxpdmVyVG9Vc2VyKG1zZywgcmVjaXBpZW50 LCBhZGRfaGVhZGVycz1hZGRfaGVhZGVycykNCiAgDQogIGRlZiBEZWxpdmVy VG9Vc2VyKG1zZywgcmVjaXBpZW50LCBhZGRfaGVhZGVycz1bXSk6DQotLS0g MTU0LDE2MCAtLS0tDQogICAgICBtc2cgPSBNZXNzYWdlLk91dGdvaW5nTWVz c2FnZSgpDQogICAgICBtc2cuU2V0U2VuZGVyKHNlbmRlcikNCiAgICAgIG1z Zy5TZXRIZWFkZXIoJ1N1YmplY3QnLCBzdWJqZWN0LCAxKQ0KISAgICAgbXNn LlNldEJvZHkodGV4dCkNCiAgICAgIERlbGl2ZXJUb1VzZXIobXNnLCByZWNp cGllbnQsIGFkZF9oZWFkZXJzPWFkZF9oZWFkZXJzKQ0KICANCiAgZGVmIERl bGl2ZXJUb1VzZXIobXNnLCByZWNpcGllbnQsIGFkZF9oZWFkZXJzPVtdKToN CioqKioqKioqKioqKioqKg0KKioqIDE4NCwyMTIgKioqKg0KICAgICAgICAg ICAgICAgIGkgPSBpICsgJ1xuJw0KICAgICAgICAgICAgICBtc2cuaGVhZGVy cy5hcHBlbmQoaSkNCiAgDQohICAgICAgICAgdGV4dCA9IHN0cmluZy5qb2lu KG1zZy5oZWFkZXJzLCAnJykrICdcbicrIFF1b3RlUGVyaW9kcyhtc2cuYm9k eSkNCiAgICAgICAgICBpbXBvcnQgT3V0Z29pbmdRdWV1ZQ0KISAgICAgICAg IHF1ZXVlX2lkID0gT3V0Z29pbmdRdWV1ZS5lbnF1ZXVlTWVzc2FnZShzZW5k ZXIsIHJlY2lwaWVudCwgdGV4dCkNCiEgICAgICAgICBUcnlTTVRQRGVsaXZl cnkocmVjaXBpZW50LHNlbmRlcix0ZXh0LHF1ZXVlX2lkKQ0KICAgICAgICAg ICMgSnVzdCBpbiBjYXNlIHRoZXJlJ3Mgc3RpbGwgc29tZXRoaW5nIHdhaXRp bmcgdG8gYmUgc2VudC4uLg0KICAgICAgICAgIE91dGdvaW5nUXVldWUucHJv Y2Vzc1F1ZXVlKCkNCiAgICAgIGZpbmFsbHk6DQogICAgICAgICAgb3MuX2V4 aXQoMCkNCiAgDQogIGRlZiBUcnlTTVRQRGVsaXZlcnkocmVjaXBpZW50LCBz ZW5kZXIsIHRleHQsIHF1ZXVlX2VudHJ5KToNCiEgICAgIGltcG9ydCBzbXRw bGliDQogICAgICB0cnk6DQohICAgICAgICAgY29uID0gc210cGxpYi5TbXRw Q29ubmVjdGlvbihtbV9jZmcuU01UUEhPU1QpDQohICAgICAgICAgY29uLmhl bG8obW1fY2ZnLkRFRkFVTFRfSE9TVF9OQU1FKQ0KISAgICAgICAgIGNvbi5z ZW5kKHRvPXJlY2lwaWVudCxmcm09c2VuZGVyLHRleHQ9dGV4dCkNCiAgICAg ICAgICBjb24ucXVpdCgpDQogICAgICAgICAgaW1wb3J0IE91dGdvaW5nUXVl dWUNCiAgICAgICAgICBPdXRnb2luZ1F1ZXVlLmRlcXVldWVNZXNzYWdlKHF1 ZXVlX2VudHJ5KQ0KICAgICAgZmluYWxseToNCiAgIyAgICBleGNlcHQ6ICMg VG9kbzogVGhpcyBtaWdodCB3YW50IHRvIGhhbmRsZSBzcGVjaWFsIGNhc2Vz LiAgICANCiAgICAgICAgICBwYXNzICMgSnVzdCB0cnkgYWdhaW4gbGF0ZXIu DQohIGRlZiBRdW90ZVBlcmlvZHModGV4dCk6DQohICAgICByZXR1cm4gc3Ry aW5nLmpvaW4oc3RyaW5nLnNwbGl0KHRleHQsICdcbi5cbicpLCAnXG4gLlxu JykNCiAgDQogIGRlZiBWYWxpZEVtYWlsKHN0cik6DQogICAgICAiIiJWZXJp ZnkgdGhhdCB0aGUgYW4gZW1haWwgYWRkcmVzcyBpc24ndCBncm9zc2x5IGlu dmFsaWQuIiIiDQotLS0gMTg0LDI0MCAtLS0tDQogICAgICAgICAgICAgICAg aSA9IGkgKyAnXG4nDQogICAgICAgICAgICAgIG1zZy5oZWFkZXJzLmFwcGVu ZChpKQ0KICANCiEgICAgICAgICB0ZXh0ID0gc3RyaW5nLmpvaW4obXNnLmhl YWRlcnMsICcnKSsgJ1xuJysgbXNnLmJvZHkNCiAgICAgICAgICBpbXBvcnQg T3V0Z29pbmdRdWV1ZQ0KISAgICAgICAgIHF1ZXVlX2lkID0gT3V0Z29pbmdR dWV1ZS5lbnF1ZXVlTWVzc2FnZShzZW5kZXIsIFtyZWNpcGllbnRdLCB0ZXh0 KQ0KISAgICAgICAgIFRyeVNNVFBEZWxpdmVyeShbcmVjaXBpZW50XSxzZW5k ZXIsdGV4dCxxdWV1ZV9pZCkNCiAgICAgICAgICAjIEp1c3QgaW4gY2FzZSB0 aGVyZSdzIHN0aWxsIHNvbWV0aGluZyB3YWl0aW5nIHRvIGJlIHNlbnQuLi4N CiAgICAgICAgICBPdXRnb2luZ1F1ZXVlLnByb2Nlc3NRdWV1ZSgpDQogICAg ICBmaW5hbGx5Og0KICAgICAgICAgIG9zLl9leGl0KDApDQogIA0KKyAjIERP IG1ha2Ugc3VyZSByZWNpcGllbnQgaXMgYSBsaXN0ISAtZGRtDQogIGRlZiBU cnlTTVRQRGVsaXZlcnkocmVjaXBpZW50LCBzZW5kZXIsIHRleHQsIHF1ZXVl X2VudHJ5KToNCiEgICAgIGltcG9ydCBzbXRwbGliLHN5cw0KISAgICAgI2Zy b20gTWFpbG1hbi5Mb2dnaW5nLlN0YW1wZWRMb2dnZXIgaW1wb3J0IFN0YW1w ZWRMb2dnZXINCiEgICAgICNzdGRvdXRfbG9jYWw9c3lzLnN0ZG91dA0KISAg ICAgYmFkX2FkZHJzPXt9IA0KISAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj I1JlbW92ZSB0aGlzISEgIyMjIyMjIyMjIyMjIyMjIw0KISAgICAgIyBUaGlz IGlzIGEgdGVtcG9yYXJ5IGhhY2ssIHRvIG1ha2Ugb2xkIHEnZCBtZXNzYWdl cyB3b3JrISEhISEhISEhIC1kZG0NCiEgICAgIGlmIHR5cGUocmVjaXBpZW50 KSA9PSB0eXBlKCJzdHJpbmciKToNCiEgICAgICAgICByZWNpcGllbnQgPSBb cmVjaXBpZW50XQ0KISAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgdHJ5Og0KISAjICAg ICAgICBjb24gPSBzbXRwbGliLlNtdHBDb25uZWN0aW9uKG1tX2NmZy5TTVRQ SE9TVCkNCiEgIyAgICAgICAgY29uLmhlbG8obW1fY2ZnLkRFRkFVTFRfSE9T VF9OQU1FKQ0KISAjICAgICAgICBjb24uc2VuZCh0bz1yZWNpcGllbnQsZnJt PXNlbmRlcix0ZXh0PXRleHQpDQohICMgICAgICAgIGNvbi5xdWl0KCkNCiEg ICAgICAgICANCiEgIyAgICAgICAgc3lzLnN0ZG91dD1TdGFtcGVkTG9nZ2Vy KCdzbXRwbGliX2RlYnVnJywNCiEgIyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGFiZWw9c3lzLmFyZ3ZbMF0sDQohICMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbF9yZXByaW1lPTEsDQoh ICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZmFpbD0w KQ0KISANCiEgICAgICAgICBjb24gPSBzbXRwbGliLlNNVFAobW1fY2ZnLlNN VFBIT1NUKQ0KISAjICAgICAgICBjb24uc2V0X2RlYnVnbGV2ZWwoMSkNCiEg ICAgICAgICBpZiBjb24uZWhsbyhtbV9jZmcuREVGQVVMVF9IT1NUX05BTUUp ID49IDQwMDoNCiEgICAgICAgICAgICAgY29uLmhlbG8obW1fY2ZnLkRFRkFV TFRfSE9TVF9OQU1FKQ0KISAgICAgICAgIHRyeToNCiEgICAgICAgICAgICAg YmFkX2FkZHJzPWNvbi5zZW5kbWFpbCh0b19hZGRycyA9IHJlY2lwaWVudCwg ZnJvbV9hZGRyID0gc2VuZGVyLCBtc2cgPSB0ZXh0KQ0KISAgICAgICAgIGV4 Y2VwdCBzbXRwbGliLlNNVFBSZWNpcGllbnRzUmVmdXNlZDoNCiEgICAgICAg ICAgICAgZm9yIGVhY2ggaW4gcmVjaXBpZW50Og0KISAgICAgICAgICAgICAg ICAgYmFkX2FkZHJzW2VhY2hdPSg1MDAsIlJlZnVzZWQgW3NtdHBsaWJdIikN CiAgICAgICAgICBjb24ucXVpdCgpDQorIA0KICAgICAgICAgIGltcG9ydCBP dXRnb2luZ1F1ZXVlDQogICAgICAgICAgT3V0Z29pbmdRdWV1ZS5kZXF1ZXVl TWVzc2FnZShxdWV1ZV9lbnRyeSkNCiAgICAgIGZpbmFsbHk6DQorICMgICAg ICAgIHN5cy5zdGRvdXQ9c3Rkb3V0X2xvY2FsDQogICMgICAgZXhjZXB0OiAj IFRvZG86IFRoaXMgbWlnaHQgd2FudCB0byBoYW5kbGUgc3BlY2lhbCBjYXNl cy4gICAgDQogICAgICAgICAgcGFzcyAjIEp1c3QgdHJ5IGFnYWluIGxhdGVy Lg0KISANCiEgI2RlZiBRdW90ZVBlcmlvZHModGV4dCk6DQohICMgICAgcmV0 dXJuIHN0cmluZy5qb2luKHN0cmluZy5zcGxpdCh0ZXh0LCAnXG4uXG4nKSwg J1xuIC5cbicpDQogIA0KICBkZWYgVmFsaWRFbWFpbChzdHIpOg0KICAgICAg IiIiVmVyaWZ5IHRoYXQgdGhlIGFuIGVtYWlsIGFkZHJlc3MgaXNuJ3QgZ3Jv c3NseSBpbnZhbGlkLiIiIg0K ---1395546950-1591827097-904375847=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="contact_transport.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: contact_transportpatch KioqIC91c3Ivc3JjL21haWxtYW4tMS4wYjUvbWFpbC9jb250YWN0X3RyYW5z cG9ydAlNb24gSnVsIDI3IDE3OjQ4OjMzIDE5OTgNCi0tLSBjb250YWN0X3Ry YW5zcG9ydAlGcmkgQXVnIDI4IDIwOjM3OjA3IDE5OTgNCioqKioqKioqKioq KioqKg0KKioqIDMxLDM3ICoqKioNCiAgDQogICMgWFhYOiB0aGlzIHJlYWxs eSBzaG91bGQgYmUgbWVyZ2VkIHdpdGggUHl0aG9uJ3Mgc3RhbmRhcmQgc210 cGxpYiBsaWJyYXJ5DQogIGZyb20gTWFpbG1hbiBpbXBvcnQgbW1fY2ZnDQoh IGZyb20gTWFpbG1hbiBpbXBvcnQgc210cGxpYg0KICBmcm9tIE1haWxtYW4g aW1wb3J0IFV0aWxzDQogIGZyb20gTWFpbG1hbiBpbXBvcnQgT3V0Z29pbmdR dWV1ZQ0KICANCi0tLSAzMSwzNyAtLS0tDQogIA0KICAjIFhYWDogdGhpcyBy ZWFsbHkgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIFB5dGhvbidzIHN0YW5kYXJk IHNtdHBsaWIgbGlicmFyeQ0KICBmcm9tIE1haWxtYW4gaW1wb3J0IG1tX2Nm Zw0KISAjZnJvbSBNYWlsbWFuIGltcG9ydCBzbXRwbGliDQogIGZyb20gTWFp bG1hbiBpbXBvcnQgVXRpbHMNCiAgZnJvbSBNYWlsbWFuIGltcG9ydCBPdXRn b2luZ1F1ZXVlDQogIA0K ---1395546950-1591827097-904375847=:10023-- From dragondm@delta.integral.org Sat Aug 29 09:39:12 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sat, 29 Aug 1998 03:39:12 -0500 (CDT) Subject: [Mailman-Developers] Listinfo bug. Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-1388521529-904379952=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII Patch patch patch patch patch.... :> This fixes a nasty (mis)feature of listinfo that if the hostname you use for your lists' email addresses != the hostname for your base mailman url, the list won't show up on the listinfo page , even if advertized. :P (for example, all of my lists have host_name= 'lists.integral.org' and web_page_url = 'www.integral.org', so I got nothing on my listinfo page :/ ) -The Dragon De Monsyne ---1395546950-1388521529-904379952=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="listinfo.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: listinfo patch KioqIC91c3Ivc3JjL21haWxtYW4tMS4wYjUvTWFpbG1hbi9DZ2kvbGlzdGlu Zm8ucHkJTW9uIEp1bCAyNyAxNzo0ODozMSAxOTk4DQotLS0gbGlzdGluZm8u cHkJU2F0IEF1ZyAyOSAwMzoyNTo0OCAxOTk4DQoqKioqKioqKioqKioqKioN CioqKiA1Nyw2MiAqKioqDQotLS0gNTcsNjMgLS0tLQ0KICAMDQogIGRlZiBG b3JtYXRMaXN0aW5mb092ZXJ2aWV3KGVycm9yPU5vbmUpOg0KICAgICAgIlBy ZXNlbnQgYSBnZW5lcmFsIHdlbGNvbWUgYW5kIGl0ZW1pemUgdGhlIChwdWJs aWMpIGxpc3RzIGZvciB0aGlzIGhvc3QuIg0KKyAgICAgaW1wb3J0IHVybHBh cnNlDQogICAgICBkb2MgPSBEb2N1bWVudCgpDQogICAgICBsZWdlbmQgPSAi JXMgbWFpbGluZyBsaXN0cyIgJSBtbV9jZmcuREVGQVVMVF9IT1NUX05BTUUN CiAgICAgIGRvYy5TZXRUaXRsZShsZWdlbmQpDQoqKioqKioqKioqKioqKioN CioqKiA3NCw4OCAqKioqDQogICAgICAjICAgICB2aXNpdGVkISAgQW4gYWJz b2x1dGUgVVJMIHdvdWxkIGRvLi4uDQogICAgICBpZiBvcy5lbnZpcm9uLmhh c19rZXkoJ0hUVFBfSE9TVCcpOg0KICAJaHR0cF9ob3N0ID0gb3MuZW52aXJv blsnSFRUUF9IT1NUJ10NCiAgICAgIGVsc2U6DQohIAlodHRwX2hvc3QgPSBO b25lDQohIA0KICAgICAgZm9yIG4gaW4gbmFtZXM6DQogIAlsID0gTWFpbExp c3QuTWFpbExpc3QobiwgbG9jayA9IDApDQogIAlpZiBsLmFkdmVydGlzZWQ6 DQogIAkgICAgaWYgKGh0dHBfaG9zdA0KISAJCWFuZCAoc3RyaW5nLmZpbmQo aHR0cF9ob3N0LCBsLmhvc3RfbmFtZSkgPT0gLTENCiEgCQkgICAgIGFuZCBz dHJpbmcuZmluZChsLmhvc3RfbmFtZSwgaHR0cF9ob3N0KSA9PSAtMSkpOg0K ICAJCSMgTGlzdCBpcyBmb3IgZGlmZmVyZW50IGlkZW50aXR5IGZvciB0aGlz IGhvc3QgLSBza2lwIGl0Lg0KICAJCWNvbnRpbnVlDQogIAkgICAgZWxzZToN Ci0tLSA3NSw5MyAtLS0tDQogICAgICAjICAgICB2aXNpdGVkISAgQW4gYWJz b2x1dGUgVVJMIHdvdWxkIGRvLi4uDQogICAgICBpZiBvcy5lbnZpcm9uLmhh c19rZXkoJ0hUVFBfSE9TVCcpOg0KICAJaHR0cF9ob3N0ID0gb3MuZW52aXJv blsnSFRUUF9IT1NUJ10NCisgICAgICAgICBodHRwX2hvc3QgPSBzdHJpbmcu c3BsaXQoc3RyaW5nLmxvd2VyKGh0dHBfaG9zdCksJzonKVswXQ0KICAgICAg ZWxzZToNCiEgICAgICAgICBodHRwX2hvc3QgPSBOb25lDQogICAgICBmb3Ig biBpbiBuYW1lczoNCiAgCWwgPSBNYWlsTGlzdC5NYWlsTGlzdChuLCBsb2Nr ID0gMCkNCiAgCWlmIGwuYWR2ZXJ0aXNlZDoNCisgICAgICAgICAgICAgaWYg aHR0cF9ob3N0Og0KKyAgICAgICAgICAgICAgICAgbGlzdF9ob3N0ID0gc3Ry aW5nLnNwbGl0KHN0cmluZy5sb3dlcih1cmxwYXJzZS51cmxwYXJzZSgNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bC53ZWJfcGFnZV91cmwpWzFdKSwnOicpWzBdDQorIA0KICAJICAgIGlmICho dHRwX2hvc3QNCiEgCQlhbmQgKHN0cmluZy5maW5kKGh0dHBfaG9zdCwgbGlz dF9ob3N0KSA9PSAtMQ0KISAJCSAgICAgYW5kIHN0cmluZy5maW5kKGxpc3Rf aG9zdCxodHRwX2hvc3QpID09IC0xKSk6DQogIAkJIyBMaXN0IGlzIGZvciBk aWZmZXJlbnQgaWRlbnRpdHkgZm9yIHRoaXMgaG9zdCAtIHNraXAgaXQuDQog IAkJY29udGludWUNCiAgCSAgICBlbHNlOg0K ---1395546950-1388521529-904379952=:10023-- From dragondm@delta.integral.org Sat Aug 29 12:49:50 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sat, 29 Aug 1998 06:49:50 -0500 (CDT) Subject: [Mailman-Developers] Queue questions & thoughts... Message-ID: I just have a question.... Peering through the queueing system, I note that there does not seem to be any locking of the queuefiles... Correct? The way it appears to me that mailman is working is thus: every outgoing message is queued, then an attempt to feed it to the MTA is made. After that it tries to run the queue to catch anything waiting there. What keeps another process running the queue from grabbing & delivering the queued message whilst the first proccess is trying to send the same message to the MTA? Especially whence you have several proccesses rapidly forked all doing delivery at once? Here's the situation I'm worried about: Proccess 1 queues the message, and attempts to feed it to the MTA Proccess 2 running queue reads the queued message, and also attempts to deliver it to the MTA. Proccess 1 succeeds in in delivering the message and deletes it from the queue. Proccess 2 ALSO succeeds in delivering the message, creating a duplicate. Proccess 2 tries to delete the message from the queue, and can't since proccess 1 already deleted it, generating this traceback, which I _have_ seen in my error log: Aug 29 04:10:59 1998 contact_transport: Traceback (innermost last): contact_transport: File "/usr/services/mailman/scripts/contact_transport", line 52, in ? contact_transport: OutgoingQueue.processQueue() contact_transport: File "/usr/services/mailman/Mailman/OutgoingQueue.py", line 38, in processQueue contact_transport: Utils.TrySMTPDelivery(recip,sender,text,full_fname) contact_transport: File "/usr/services/mailman/Mailman/Utils.py", line 230, in TrySMTPDelivery contact_transport: OutgoingQueue.dequeueMessage(queue_entry) contact_transport: File "/usr/services/mailman/Mailman/OutgoingQueue.py", line 25, in dequeueMessage contact_transport: os.unlink(msg) contact_transport: os . error : (2, 'No such file or directory') Having pointed out a possible problem, perhaps I can suggest a possible solution? Howabout this: Whenever Mailman goes to deliver mail, it dosen't actually deliver it. Rather, it just queues the message. Instead, there is a single, separate proccess that is kept running, and all it does is dequeue messsages. It would keep a PID file and touch it periodically, so you could run a cron job to make sure it is still running. Since it would hold no locks on any lists, it wouldn't have to worry about forking to avoid deadlocks, and since it would be run under the mailman uid it wouldn't be affected by any possible setgid weirdness (i.e. w/ linux)). If anyone is interested in this, let me know, & I'll put something together. It should be really quick. -The Dragon De Monsyne From klm@python.org Sun Aug 30 02:44:06 1998 From: klm@python.org (Ken Manheimer) Date: Sat, 29 Aug 1998 21:44:06 -0400 (EDT) Subject: [Mailman-Developers] Listinfo bug. In-Reply-To: Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-1388521529-904379952=:10023 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: In Sat, 29 Aug 1998, The Dragon De Monsyne wrote: > Patch patch patch patch patch.... :> > > This fixes a nasty (mis)feature of listinfo that if the hostname > you use for your lists' email addresses != the hostname for your base > mailman url, the list won't show up on the listinfo page , even if > advertized. :P > > (for example, all of my lists have host_name= 'lists.integral.org' and > web_page_url = 'www.integral.org', so I got nothing on my listinfo page > :/ ) This actually is a deliberate feature, for what i consider a good reason - though perhaps the behavior ought to be selectable. Imagine you're an ISP who sells "virtual domains", each of which your customers situate their own sets of mailing lists. So each virtual domain has its own (virtual) set of lists. This scenario is by no means far fetched. In fact, here at CNRI we have one machine hosting the lists for a variety of projects, each with their own virtual domain. The people in the projects specifically wanted this partitioning of the lists - as far as their subscribers know, the lists in different virtual domains are in entirely different organizations, on entirely different hosts! I would imagine it'd be even more crucial in the ISP virtual domain scenario. I suppose it may make sense to offer a site setting by which the site administrator can select whether or not the different domains hosted by a machine are compartmented this way, but i would think the compartmenting mode would be the default one. (By the way, thanks for your efforts! Among other things, i'm particularly happy to see the standard sendmail.py integration. It'll be nice to not have to maintain our own version!) ken manheimer klm@python.org ---1395546950-1388521529-904379952=:10023-- From klm@python.org Sun Aug 30 02:56:27 1998 From: klm@python.org (Ken Manheimer) Date: Sat, 29 Aug 1998 21:56:27 -0400 (EDT) Subject: [Mailman-Developers] Queue questions & thoughts... In-Reply-To: Message-ID: On Sat, 29 Aug 1998, The Dragon De Monsyne wrote: > I just have a question.... Peering through the queueing system, I > note that there does not seem to be any locking of the queuefiles... > Correct? The way it appears to me that mailman is working is thus: > every outgoing message is queued, then an attempt to feed it to > the MTA is made. After that it tries to run the queue to catch anything > waiting there. > What keeps another process running the queue from grabbing & > delivering the queued message whilst the first proccess is trying to send > the same message to the MTA? Especially whence you have several proccesses > rapidly forked all doing delivery at once? John will have the authoritative answer on the queueing mechanism (though i've messed with, and contributed some refinements to it), but we have seen exactly the behavior you describe, where messages are delivered out from under a TrySMTPDelivery process. The solution you describe - a separate process, _plus_ a cron job to ensure it's always going - sounds a lot more cumbersome than simply using file locks, as you mention. (It occurred to me to wonder whether it's best to just have the absence of the queue file ignored, with the assumption that some other process did the delivery. But then i realized that this may in some cases mean duplicate deliveries, which again calls for file locking.) Note also that in the context of a persistent server, your idea of a process to handle the queue - probably a thread in the server - will make a lot of sense. But until that time, more processes hanging around strike me as undesirability administrative and conceptual complexity... ken manheimer klm@python.org From dragondm@delta.integral.org Sun Aug 30 03:08:28 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sat, 29 Aug 1998 21:08:28 -0500 (CDT) Subject: [Mailman-Developers] Listinfo bug. In-Reply-To: Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-1388521529-904379952=:10023 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: On Sat, 29 Aug 1998, Ken Manheimer wrote: > In Sat, 29 Aug 1998, The Dragon De Monsyne wrote: > > > Patch patch patch patch patch.... :> > > > > This fixes a nasty (mis)feature of listinfo that if the hostname > > you use for your lists' email addresses != the hostname for your base > > mailman url, the list won't show up on the listinfo page , even if > > advertized. :P > > > > (for example, all of my lists have host_name= 'lists.integral.org' and > > web_page_url = 'www.integral.org', so I got nothing on my listinfo page > > :/ ) > > This actually is a deliberate feature, for what i consider a good reason > - though perhaps the behavior ought to be selectable. > > Imagine you're an ISP who sells "virtual domains", each of which your > customers situate their own sets of mailing lists. So each virtual > domain has its own (virtual) set of lists. This scenario is by no means > far fetched. In fact, here at CNRI we have one machine hosting the > lists for a variety of projects, each with their own virtual domain. The > people in the projects specifically wanted this partitioning of the > lists - as far as their subscribers know, the lists in different virtual > domains are in entirely different organizations, on entirely different > hosts! I would imagine it'd be even more crucial in the ISP virtual > domain scenario. Oh, yes, I know that this is deleberate for virtual hosting. Virtual hosting will still work with this patch. The only thing this changes is _where_ mailman gets the name of the list's virtual hosname. Before it got it from the list's 'host_name' attribute, which is the hostname put on outgoing email. With this patch it gets the hostname fronm the hostname in the 'web_page_url'. This makes more sense, since it's web virtual hosts you are talking about here. -The Dragon De Monsyne ---1395546950-1388521529-904379952=:10023-- From dragondm@delta.integral.org Sun Aug 30 03:16:13 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sat, 29 Aug 1998 21:16:13 -0500 (CDT) Subject: [Mailman-Developers] Queue questions & thoughts... In-Reply-To: Message-ID: On Sat, 29 Aug 1998, Ken Manheimer wrote: > On Sat, 29 Aug 1998, The Dragon De Monsyne wrote: > > > I just have a question.... Peering through the queueing system, I > > note that there does not seem to be any locking of the queuefiles... > > Correct? The way it appears to me that mailman is working is thus: > > every outgoing message is queued, then an attempt to feed it to > > the MTA is made. After that it tries to run the queue to catch anything > > waiting there. > > What keeps another process running the queue from grabbing & > > delivering the queued message whilst the first proccess is trying to send > > the same message to the MTA? Especially whence you have several proccesses > > rapidly forked all doing delivery at once? > > John will have the authoritative answer on the queueing mechanism > (though i've messed with, and contributed some refinements to it), but > we have seen exactly the behavior you describe, where messages are > delivered out from under a TrySMTPDelivery process. The solution you > describe - a separate process, _plus_ a cron job to ensure it's always > going - sounds a lot more cumbersome than simply using file locks, as > you mention. > I don't see why it would be cumbersome at all... All ye'd have would be 1 script you would run. It would check a pid file to make sure it's not already running, so you could run it from a cronjob to have it automatically restarted if need be. Sounds alot less cumbersome than all the elaborate queueing, forking, queue-running, and now file-locking mailman otherwise need to do. -The Dragon De Monsyne From klm@python.org Sun Aug 30 04:10:32 1998 From: klm@python.org (Ken Manheimer) Date: Sat, 29 Aug 1998 23:10:32 -0400 (EDT) Subject: [Mailman-Developers] Queue questions & thoughts... In-Reply-To: Message-ID: > I don't see why it would be cumbersome at all... All ye'd have > would be 1 script you would run. It would check a pid file to make sure > it's not already running, so you could run it from a cronjob to have it > automatically restarted if need be. Sounds alot less cumbersome than all > the elaborate queueing, forking, queue-running, and now file-locking > mailman otherwise need to do. Actually, i'm thinking about it from the administrators point of view. It's another, separate component to keep track of. If all the queuing, forking, queue-running, etc, are taken care of behind the scenes and in an airtight way, from the system manager's point of view it's simple as pie. A separate, independent component seems like a whole other matter. I suppose all the forking and queueing suggests having a clear division for a mail dispatching subsystem, i dunno. Lets see how others weigh in on the matter... ken manheimer klm@python.org From dragondm@delta.integral.org Mon Aug 31 13:27:04 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Mon, 31 Aug 1998 07:27:04 -0500 (CDT) Subject: [Mailman-Developers] Eeeeppp! Editing options via web dosen't work!! Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-2037328761-904566424=:21973 Content-Type: TEXT/PLAIN; charset=US-ASCII It seems that entering one's email address to edit subscription options dosent work (It was prolly broken by the cgi 'driver' setup) Here's a patch to subscribe.py that seems to fix it. -The Dragon De Monsyne ---1395546950-2037328761-904566424=:21973 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="subscribe.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: subscribe patch KioqIC91c3Ivc3JjL21haWxtYW4tMS4wYjUvTWFpbG1hbi9DZ2kvc3Vic2Ny aWJlLnB5CU1vbiBKdWwgMjcgMTc6NDg6MzEgMTk5OA0KLS0tIE1haWxtYW4v Q2dpL3N1YnNjcmliZS5weQlNb24gQXVnIDMxIDA3OjIyOjE3IDE5OTgNCioq KioqKioqKioqKioqKg0KKioqIDYxLDY5ICoqKioNCiAgICAgIGRlZiBjYWxs X3NjcmlwdCh3aGljaCwgcGF0aGluZm8pOg0KICAgICAgICAgICJBIGxpdHRs ZSBiaXQgb2YgYSBoYWNrIHRvIGNhbGwgb25lIG9mIHRoZSBzY3JpcHRzLi4u Ig0KICAgICAgICAgIG9zLmVudmlyb25bJ1BBVEhfSU5GTyddID0gc3RyaW5n LmpvaW4ocGF0aGluZm8sICcvJykNCiEgICAgICAgICBmaWxlID0gb3MucGF0 aC5qb2luKG1tX2NmZy5TQ1JJUFRTX0RJUiwgd2hpY2gpDQohICAgICAgICAg bGlzdC5VbmxvY2soKQ0KISAgICAgICAgIGV4ZWNmaWxlKGZpbGUpDQogICAg ICAgICAgc3lzLmV4aXQoMCkNCiAgDQogICAgICAjIyMjIyMjDQotLS0gNjEs ODEgLS0tLQ0KICAgICAgZGVmIGNhbGxfc2NyaXB0KHdoaWNoLCBwYXRoaW5m byk6DQogICAgICAgICAgIkEgbGl0dGxlIGJpdCBvZiBhIGhhY2sgdG8gY2Fs bCBvbmUgb2YgdGhlIHNjcmlwdHMuLi4iDQogICAgICAgICAgb3MuZW52aXJv blsnUEFUSF9JTkZPJ10gPSBzdHJpbmcuam9pbihwYXRoaW5mbywgJy8nKQ0K ISANCiEgICAgICAgICAjIFNlZSB0aGUgcmVmZXJlbmNlIG1hbnVhbCBmb3Ig d2h5IHdlIGhhdmUgdG8gZG8gdGhpbmdzIHRoaXMgd2F5Lg0KISAgICAgICAg ICMgTm90ZSB0aGF0IGltcG9ydGluZyBzaG91bGQgaGF2ZSBubyBzaWRlLWVm ZmVjdHMhDQohICAgICAgICAgcGtnID0gX19pbXBvcnRfXygnTWFpbG1hbi5D Z2knLCBnbG9iYWxzKCksIGxvY2FscygpLCBbd2hpY2hdKQ0KISAgICAgICAg IG1vZHVsZSA9IGdldGF0dHIocGtnLCB3aGljaCkNCiEgICAgICAgICBtYWlu ID0gZ2V0YXR0cihtb2R1bGUsICdtYWluJykNCiEgICAgICAgICB0cnk6DQoh ICAgICAgICAgICAgIG1haW4oKQ0KISAgICAgICAgIGV4Y2VwdCBTeXN0ZW1F eGl0Og0KISAgICAgICAgICAgICAjIHRoaXMgaXMgYSB2YWxpZCB3YXkgZm9y IHRoZSBmdW5jdGlvbiB0byBleGl0DQohICAgICAgICAgICAgIHBhc3MNCiEg DQohICAgICAgICAgI2ZpbGUgPSBvcy5wYXRoLmpvaW4obW1fY2ZnLlNDUklQ VFNfRElSLCB3aGljaCkNCiEgICAgICAgICAjbGlzdC5VbmxvY2soKQ0KISAg ICAgICAgICNleGVjZmlsZShmaWxlKQ0KICAgICAgICAgIHN5cy5leGl0KDAp DQogIA0KICAgICAgIyMjIyMjIw0KKioqKioqKioqKioqKioqDQoqKiogOTIs OTcgKioqKg0KLS0tIDEwNCwxMTAgLS0tLQ0KICAgICAgICAgICAgICBwcmlu dCBkb2MuRm9ybWF0KCkNCiAgICAgICAgICAgICAgbGlzdC5VbmxvY2soKQ0K ICAgICAgICAgICAgICBzeXMuZXhpdCgwKQ0KKyAgICAgICAgIGxpc3QuVW5s b2NrKCkNCiAgICAgICAgICBjYWxsX3NjcmlwdCgnb3B0aW9ucycsIFtsaXN0 Ll9pbnRlcm5hbF9uYW1lLCBtZW1iZXJdKQ0KICAgICAgaWYgbm90IGZvcm0u aGFzX2tleSgiZW1haWwiKToNCiAgICAgICAgICBlcnJvciA9IDENCg== ---1395546950-2037328761-904566424=:21973-- From julian7@kva.hu Mon Aug 31 12:55:21 1998 From: julian7@kva.hu (Nagy Balazs) Date: Mon, 31 Aug 1998 13:55:21 +0200 (CEST) Subject: [Mailman-Developers] cgi/qmail patches Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---456965764-2069813568-904564521=:31564 Content-Type: TEXT/PLAIN; charset=US-ASCII Diff against yesterday's CVS checkout. Fixes / extends - decentralized CGI names - CGI extensions - Ack mail bug - qmail posting (set QMAIL to 1 in mm_cfg not to use inner spool) - other mailers will be handled soon - distclean dependencies - 'nofiles' group checking in configure (for qmail) -- hacker: /n./ One who enjoys the intellectual challenge of creatively overcoming or circumventing limitations. PGP 0x1DE3631D / A8 B4 92 EE 1F 55 27 C8 86 64 9C 42 41 A4 BD B8 ---456965764-2069813568-904564521=:31564 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="mailman.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: patch Content-Disposition: attachment; filename="mailman.diff" ZGlmZiAtYnJ1IC14IENWUyBtYWlsbWFuLm9yaWcvTWFpbG1hbi9Cb3VuY2Vy LnB5IG1haWxtYW4vTWFpbG1hbi9Cb3VuY2VyLnB5DQotLS0gbWFpbG1hbi5v cmlnL01haWxtYW4vQm91bmNlci5weQlTYXQgQXVnICA4IDE0OjE1OjQwIDE5 OTgNCisrKyBtYWlsbWFuL01haWxtYW4vQm91bmNlci5weQlGcmkgQXVnICA3 IDIwOjE1OjU1IDE5OTgNCkBAIC0xNzgsNyArMTc4LDcgQEANCiAgICAgICAg ICAgICBpZiBkaWQgPT0gJ2Rpc2FibGVkJyBhbmQgc3VjY2VlZGVkID09IDE6 DQogICAgICAgICAgICAgICAgIHJlZW5hYmxlID0gVXRpbHMubWFrZXRleHQo DQogICAgICAgICAgICAgICAgICAgICAncmVlbmFibGUudHh0JywNCi0gICAg ICAgICAgICAgICAgICAgIHsnbGlzdGluZm9fdXJsJzogc2VsZi5HZXRBYnNv bHV0ZVNjcmlwdFVSTCgnbGlzdGluZm8nKSwNCisgICAgICAgICAgICAgICAg ICAgIHsnbGlzdGluZm9fdXJsJzogc2VsZi5HZXRBYnNvbHV0ZVNjcmlwdFVS TChtbV9jZmcuTElTVElORk9fQ0dJKSwNCiAgICAgICAgICAgICAgICAgICAg ICB9KQ0KICAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgIHJl ZW5hYmxlID0gJycNCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5vcmlnL01h aWxtYW4vQ2dpL2FkbWluLnB5IG1haWxtYW4vTWFpbG1hbi9DZ2kvYWRtaW4u cHkNCi0tLSBtYWlsbWFuLm9yaWcvTWFpbG1hbi9DZ2kvYWRtaW4ucHkJU2F0 IEF1ZyAgOCAxNDoxNzoyNiAxOTk4DQorKysgbWFpbG1hbi9NYWlsbWFuL0Nn aS9hZG1pbi5weQlGcmkgQXVnICA3IDIwOjE1OjA5IDE5OTgNCkBAIC0xMzAs NyArMTMwLDcgQEANCiAgICAgICAgICAgICAgICAgJ2FkbWxvZ2luLnR4dCcs DQogICAgICAgICAgICAgICAgIHsibGlzdG5hbWUiOiBsaXN0X25hbWUsDQog ICAgICAgICAgICAgICAgICAicGF0aCIgICAgOiBvcy5lbnZpcm9uLmdldCgi UkVRVUVTVF9VUkkiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIi9tYWlsbWFuL2FkbWluLyIgKyBsaXN0X25hbWUp LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9tYWlsbWFuLyIg KyBtbV9jZmcuQURNSU5fQ0dJICsgIi8iICsgbGlzdF9uYW1lICksDQogICAg ICAgICAgICAgICAgICAibWVzc2FnZSIgOiBtZXNzYWdlLA0KICAgICAgICAg ICAgICAgICAgfSkNCiAgICAgICAgICAgICBwcmludCB0ZXh0DQpAQCAtMjI0 LDcgKzIyNCw3IEBADQogICAgICAgICAgICAgICAgICAgICAgICsNCiAgICAg ICAgICAgICAgICAgICAgICAgIiBHZW5lcmFsIGxpc3QgaW5mb3JtYXRpb24g Y2FuIGJlIGZvdW5kIGF0ICIsDQogICAgICAgICAgICAgICAgICAgICAgIExp bmsob3MucGF0aC5qb2luKCcuLi8nKiBVdGlscy5HZXROZXN0aW5nTGV2ZWwo KSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdGluZm8vIiks ICJ0aGUgbWFpbGluZyBsaXN0IG92ZXJ2aWV3IHBhZ2UiKSwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgIG1tX2NmZy5MSVNUSU5GT19DR0kgKyAiLyIp LCAidGhlIG1haWxpbmcgbGlzdCBvdmVydmlldyBwYWdlIiksDQogICAgICAg ICAgICAgICAgICAgICAgICIuIg0KICAgICAgICAgICAgICAgICAgICAgICAi PHA+KFNlbmQgcXVlc3Rpb25zIGFuZCBjb21tZW50cyB0byAiLA0KICAgICAg ICAgICAgICAgICAgICAgIExpbmsoIm1haWx0bzolcyIgJSBtbV9jZmcuTUFJ TE1BTl9PV05FUiwNCkBAIC0yMzksNyArMjM5LDcgQEANCiAgICAgaWYgYWR2 ZXJ0aXNlZDoNCiAgICAgICAgIHRhYmxlLkFkZFJvdyhbSXRhbGljKCJMaXN0 IiksIEl0YWxpYygiRGVzY3JpcHRpb24iKV0pDQogICAgICAgICBmb3IgbCBp biBhZHZlcnRpc2VkOg0KLSAgICAgICAgICAgIHRhYmxlLkFkZFJvdyhbTGlu ayhsLkdldFJlbGF0aXZlU2NyaXB0VVJMKCdhZG1pbicpLCANCisgICAgICAg ICAgICB0YWJsZS5BZGRSb3coW0xpbmsobC5HZXRSZWxhdGl2ZVNjcmlwdFVS TChtbV9jZmcuQURNSU5fQ0dJKSwgDQogCSAgICAgICAgICAgICAgICAgIEJv bGQobC5yZWFsX25hbWUpKSxsLmRlc2NyaXB0aW9uXSkNCiANCiAgICAgZG9j LkFkZEl0ZW0odGFibGUpDQpAQCAtMjYxLDEzICsyNjEsMTMgQEANCiAgICAg bGlua3NfdGFibGUuQWRkUm93KFtDZW50ZXIoQm9sZCgiQ29uZmlndXJhdGlv biBDYXRlZ29yaWVzIikpLA0KICAgICAgICAgICAgICAgICAgICAgICAgIENl bnRlcihCb2xkKCJPdGhlciBBZG1pbmlzdHJhdGl2ZSBBY3Rpdml0aWVzIikp XSkNCiAgICAgb3RoZXJfbGlua3MgPSBVbm9yZGVyZWRMaXN0KCkNCi0gICAg bGluayA9IExpbmsobHN0LkdldFJlbGF0aXZlU2NyaXB0VVJMKCdhZG1pbmRi JyksIA0KKyAgICBsaW5rID0gTGluayhsc3QuR2V0UmVsYXRpdmVTY3JpcHRV UkwobW1fY2ZnLkFETUlOREJfQ0dJKSwgDQogICAgICAgICAgICAgICAgICdU ZW5kIHRvIHBlbmRpbmcgYWRtaW5pc3RyYXRpdmUgcmVxdWVzdHMuJykNCiAg ICAgb3RoZXJfbGlua3MuQWRkSXRlbShsaW5rKQ0KLSAgICBsaW5rID0gTGlu ayhsc3QuR2V0UmVsYXRpdmVTY3JpcHRVUkwoJ2xpc3RpbmZvJyksDQorICAg IGxpbmsgPSBMaW5rKGxzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTChtbV9jZmcu TElTVElORk9fQ0dJKSwNCiAgICAgICAgICAgICAgICAgJ0dvIHRvIHRoZSBn ZW5lcmFsIGxpc3QgaW5mb3JtYXRpb24gcGFnZS4nKQ0KICAgICBvdGhlcl9s aW5rcy5BZGRJdGVtKGxpbmspDQotICAgIGxpbmsgPSBMaW5rKGxzdC5HZXRS ZWxhdGl2ZVNjcmlwdFVSTCgnZWRpdGh0bWwnKSwNCisgICAgbGluayA9IExp bmsobHN0LkdldFJlbGF0aXZlU2NyaXB0VVJMKG1tX2NmZy5FRElUSFRNTF9D R0kpLA0KICAgICAgICAgICAgICAgICAnRWRpdCB0aGUgSFRNTCBmb3IgdGhl IHB1YmxpYyBsaXN0IHBhZ2VzLicpDQogICAgIG90aGVyX2xpbmtzLkFkZEl0 ZW0obGluaykNCiANCkBAIC0yNzcsNyArMjc3LDcgQEANCiAgICAgICAgICAg ICB0aGVzZV9saW5rcy5BZGRJdGVtKCI8Yj4gPSZndDsgIiArIHYgKyAiICZs dDs9IDwvYj4iKQ0KICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICB0aGVz ZV9saW5rcy5BZGRJdGVtKExpbmsoIiVzLyVzIiAlIA0KLQkgICAgICAgICAg ICAgICAgIChsc3QuR2V0UmVsYXRpdmVTY3JpcHRVUkwoJ2FkbWluJyksayks dikpDQorCSAgICAgICAgICAgICAgICAgKGxzdC5HZXRSZWxhdGl2ZVNjcmlw dFVSTChtbV9jZmcuQURNSU5fQ0dJKSxrKSx2KSkNCiANCiAgICAgbGlua3Nf dGFibGUuQWRkUm93KFt0aGVzZV9saW5rcywgb3RoZXJfbGlua3NdKQ0KICAg ICBsaW5rc190YWJsZS5BZGRSb3dJbmZvKG1heChsaW5rc190YWJsZS5HZXRD dXJyZW50Um93SW5kZXgoKSwgMCksDQpAQCAtMjg2LDEwICsyODYsMTAgQEAN CiAgICAgZG9jLkFkZEl0ZW0obGlua3NfdGFibGUpDQogICAgIGRvYy5BZGRJ dGVtKCc8aHI+JykNCiAgICAgaWYgY2F0ZWdvcnlfc3VmZml4Og0KLSAgICAg ICAgZm9ybSA9IEZvcm0oIiVzLyVzIiAlIChsc3QuR2V0UmVsYXRpdmVTY3Jp cHRVUkwoJ2FkbWluJyksDQorICAgICAgICBmb3JtID0gRm9ybSgiJXMvJXMi ICUgKGxzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTChtbV9jZmcuQURNSU5fQ0dJ KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdv cnlfc3VmZml4KSkNCiAgICAgZWxzZToNCi0gICAgICAgIGZvcm0gPSBGb3Jt KGxzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTCgnYWRtaW4nKSkNCisgICAgICAg IGZvcm0gPSBGb3JtKGxzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTChtbV9jZmcu QURNSU5fQ0dJKSkNCiAgICAgZG9jLkFkZEl0ZW0oZm9ybSkNCiANCiAgICAg Zm9ybS5BZGRJdGVtKCJNYWtlIHlvdXIgY2hhbmdlcywgYmVsb3csIGFuZCB0 aGVuIHN1Ym1pdCBpdCBhbGwgYXQgdGhlIg0KQEAgLTQwNCw3ICs0MDQsNyBA QA0KICAgICBkb2MuQWRkSXRlbSgiPGI+JXM8L2I+ICglcyk6ICVzPHA+IiAl ICh2YXJuYW1lLCBjYXRlZ29yeSwgaXRlbVs0XSkpDQogICAgIGRvYy5BZGRJ dGVtKCIlczxwPiIgJSBpdGVtWzVdKQ0KIA0KLSAgICBmb3JtID0gRm9ybShv cy5wYXRoLmpvaW4obHN0LkdldFJlbGF0aXZlU2NyaXB0VVJMKCdhZG1pbicp LCBjYXRlZ29yeSkpDQorICAgIGZvcm0gPSBGb3JtKG9zLnBhdGguam9pbihs c3QuR2V0UmVsYXRpdmVTY3JpcHRVUkwobW1fY2ZnLkFETUlOX0NHSSksIGNh dGVnb3J5KSkNCiAgICAgdmFsdGFiID0gVGFibGUoY2VsbHNwYWNpbmc9Mywg Y2VsbHBhZGRpbmc9NCkNCiAgICAgQWRkT3B0aW9uc1RhYmxlSXRlbSh2YWx0 YWIsIGl0ZW0sIGNhdGVnb3J5LCBsc3QsIG5vZGV0YWlscz0xKQ0KICAgICBm b3JtLkFkZEl0ZW0odmFsdGFiKQ0KQEAgLTUwNCw4ICs1MDQsOCBAQA0KICAg ICAgICAgcGkgPSBvcy5lbnZpcm9uWyJQQVRIX0lORk8iXQ0KICAgICAgICAg Zm9yIGNpIGluIGNodW5rX2luZGljZXM6DQogICAgICAgICAgICAgc3RhcnQs IGVuZCA9IGNodW5rc1tjaV1bMF0sIGNodW5rc1tjaV1bLTFdDQotICAgICAg ICAgICAgYnV0dG9ucy5hcHBlbmQoIjxhIGhyZWY9L21haWxtYW4vYWRtaW4l cz9jaHVuaz0lZD4gZnJvbSAlcyB0byAlcyA8L2E+IiAlIFwNCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAoIHBpLCBjaSwgc3RhcnQsIGVuZCkpDQor ICAgICAgICAgICAgYnV0dG9ucy5hcHBlbmQoIjxhIGhyZWY9L21haWxtYW4v JXMlcz9jaHVuaz0lZD4gZnJvbSAlcyB0byAlcyA8L2E+IiAlIFwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAoIG1tX2NmZy5BRE1JTl9DR0ksIHBp LCBjaSwgc3RhcnQsIGVuZCkpDQogICAgICAgICBidXR0b25zID0gYXBwbHko VW5vcmRlcmVkTGlzdCwgdHVwbGUoYnV0dG9ucykpDQogICAgICAgICBmb290 ZXIgPSBmb290ZXIgKyBidXR0b25zLkZvcm1hdCgpICsgIjxwPiIgDQogICAg IGVsc2U6DQpkaWZmIC1icnUgLXggQ1ZTIG1haWxtYW4ub3JpZy9NYWlsbWFu L0NnaS9hZG1pbmRiLnB5IG1haWxtYW4vTWFpbG1hbi9DZ2kvYWRtaW5kYi5w eQ0KLS0tIG1haWxtYW4ub3JpZy9NYWlsbWFuL0NnaS9hZG1pbmRiLnB5CVNh dCBBdWcgIDggMTQ6MTc6MjkgMTk5OA0KKysrIG1haWxtYW4vTWFpbG1hbi9D Z2kvYWRtaW5kYi5weQlGcmkgQXVnICA3IDIwOjEyOjI5IDE5OTgNCkBAIC0y MDcsMTQgKzIwNywxNCBAQA0KICAgICBkb2MuQWRkSXRlbShodG1sZm9ybWF0 LkhlYWRlcigyLCAiQWRtaW5pc3RyYXRpdmUgcmVxdWVzdHMgZm9yICINCiAJ CQkJICAiJyVzJyBtYWlsaW5nIGxpc3QiICUgbGlzdC5yZWFsX25hbWUpKQ0K ICAgICBkb2MuQWRkSXRlbShodG1sZm9ybWF0LkZvbnRTaXplKCIrMSIsIGh0 bWxmb3JtYXQuTGluaygNCi0JbGlzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTCgn YWRtaW4nKSwgaHRtbGZvcm1hdC5JdGFsaWMoDQorCWxpc3QuR2V0UmVsYXRp dmVTY3JpcHRVUkwobW1fY2ZnLkFETUlOX0NHSSksIGh0bWxmb3JtYXQuSXRh bGljKA0KIAkgICAgJ1ZpZXcgb3IgZWRpdCB0aGUgbGlzdCBjb25maWd1cmF0 aW9uIGluZm9ybWF0aW9uJykpKSkNCiAgICAgZG9jLkFkZEl0ZW0oJzxwPjxo cj4nKQ0KICAgICBpZiBub3QgbGlzdC5OdW1SZXF1ZXN0c1BlbmRpbmcoKToN CiAJZG9jLkFkZEl0ZW0oaHRtbGZvcm1hdC5IZWFkZXIoMywnVGhlcmUgYXJl IG5vIHBlbmRpbmcgcmVxdWVzdHMuJykpDQogCWRvYy5BZGRJdGVtKGxpc3Qu R2V0TWFpbG1hbkZvb3RlcigpKQ0KIAlyZXR1cm4NCi0gICAgZm9ybSA9IGh0 bWxmb3JtYXQuRm9ybShsaXN0LkdldFJlbGF0aXZlU2NyaXB0VVJMKCdhZG1p bmRiJykpDQorICAgIGZvcm0gPSBodG1sZm9ybWF0LkZvcm0obGlzdC5HZXRS ZWxhdGl2ZVNjcmlwdFVSTChtbV9jZmcuQURNSU5EQl9DR0kpKQ0KICAgICBk b2MuQWRkSXRlbShmb3JtKQ0KICAgICBmb3JtLkFkZEl0ZW0oJ0FkbWluIHBh c3N3b3JkOiAnKQ0KICAgICBmb3JtLkFkZEl0ZW0oaHRtbGZvcm1hdC5QYXNz d29yZEJveCgnYWRtaW5wdycpKQ0KZGlmZiAtYnJ1IC14IENWUyBtYWlsbWFu Lm9yaWcvTWFpbG1hbi9DZ2kvZWRpdGh0bWwucHkgbWFpbG1hbi9NYWlsbWFu L0NnaS9lZGl0aHRtbC5weQ0KLS0tIG1haWxtYW4ub3JpZy9NYWlsbWFuL0Nn aS9lZGl0aHRtbC5weQlTYXQgQXVnICA4IDE0OjE3OjMyIDE5OTgNCisrKyBt YWlsbWFuL01haWxtYW4vQ2dpL2VkaXRodG1sLnB5CUZyaSBBdWcgIDcgMjA6 MTc6NTMgMTk5OA0KQEAgLTg3LDcgKzg3LDcgQEANCiAgICAgICAgIGRvYy5B ZGRJdGVtKGh0bWxmb3JtYXQuSGVhZGVyKDIsICdTZWxlY3QgcGFnZSB0byBl ZGl0OicpKQ0KICAgICAgICAgdGVtcGxhdGVfbGlzdCA9IGh0bWxmb3JtYXQu VW5vcmRlcmVkTGlzdCgpDQogICAgICAgICBmb3IgKHRlbXBsYXRlLCBpbmZv KSBpbiB0ZW1wbGF0ZV9kYXRhOg0KLSAgICAgICAgICAgIGwgPSBodG1sZm9y bWF0Lkxpbmsob3MucGF0aC5qb2luKGxpc3QuR2V0UmVsYXRpdmVTY3JpcHRV UkwoJ2VkaXRodG1sJyksDQorICAgICAgICAgICAgbCA9IGh0bWxmb3JtYXQu TGluayhvcy5wYXRoLmpvaW4obGlzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTCht bV9jZmcuRURJVEhUTUxfQ0dJKSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSksIGluZm8pDQogDQog ICAgICAgICAgICAgdGVtcGxhdGVfbGlzdC5BZGRJdGVtKGwpDQpAQCAtMTQ2 LDE0ICsxNDYsMTQgQEANCiANCiAgICAgZG9jLkFkZEl0ZW0oJzxocj4nKQ0K IA0KLSAgICBsaW5rID0gaHRtbGZvcm1hdC5MaW5rKGxpc3QuR2V0UmVsYXRp dmVTY3JpcHRVUkwoJ2FkbWluJyksDQorICAgIGxpbmsgPSBodG1sZm9ybWF0 LkxpbmsobGlzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTChtbV9jZmcuQURNSU5f Q0dJKSwNCiAJCQkgICAnVmlldyBvciBlZGl0IHRoZSBsaXN0IGNvbmZpZ3Vy YXRpb24gaW5mb3JtYXRpb24uJykNCiAgICAgZG9jLkFkZEl0ZW0oaHRtbGZv cm1hdC5Gb250U2l6ZSgiKzEiLCBsaW5rKSkNCiAgICAgZG9jLkFkZEl0ZW0o JzxwPicpDQogDQogICAgIGRvYy5BZGRJdGVtKCc8aHI+JykNCiANCi0gICAg Zm9ybSA9IGh0bWxmb3JtYXQuRm9ybShvcy5wYXRoLmpvaW4obGlzdC5HZXRS ZWxhdGl2ZVNjcmlwdFVSTCgnZWRpdGh0bWwnKSwNCisgICAgZm9ybSA9IGh0 bWxmb3JtYXQuRm9ybShvcy5wYXRoLmpvaW4obGlzdC5HZXRSZWxhdGl2ZVNj cmlwdFVSTChtbV9jZmcuRURJVEhUTUxfQ0dJKSwNCiAJCQkJCXRlbXBsYXRl X25hbWUpKQ0KICAgICBkb2MuQWRkSXRlbShmb3JtKQ0KIA0KZGlmZiAtYnJ1 IC14IENWUyBtYWlsbWFuLm9yaWcvTWFpbG1hbi9DZ2kvbGlzdGluZm8ucHkg bWFpbG1hbi9NYWlsbWFuL0NnaS9saXN0aW5mby5weQ0KLS0tIG1haWxtYW4u b3JpZy9NYWlsbWFuL0NnaS9saXN0aW5mby5weQlTYXQgQXVnICA4IDE0OjE3 OjQzIDE5OTgNCisrKyBtYWlsbWFuL01haWxtYW4vQ2dpL2xpc3RpbmZvLnB5 CUZyaSBBdWcgIDcgMjA6MTg6MTYgMTk5OA0KQEAgLTEyMiw3ICsxMjIsNyBA QA0KICAgICAgICAgICAgICAgICAgICAgICArDQogICAgICAgICAgICAgICAg ICAgICAgICc8cD4gTGlzdCBhZG1pbmlzdHJhdG9ycywgeW91IGNhbiB2aXNp dCAnLA0KICAgICAgICAgICAgICAgICAgICAgICBMaW5rKG9zLnBhdGguam9p bignLi4vJyAqIFV0aWxzLkdldE5lc3RpbmdMZXZlbCgpLA0KLQkgICAgICAg ICAgICAgICAgICAgJ2FkbWluLycpLCAidGhlIGxpc3QgYWRtaW4gb3ZlcnZp ZXcgcGFnZSIpLA0KKwkgICAgICAgICAgICAgICAgICAgbW1fY2ZnLkFETUlO X0NHSSArICcvJyksICJ0aGUgbGlzdCBhZG1pbiBvdmVydmlldyBwYWdlIiks DQogICAgICAgICAgICAgICAgICAgICAgICIgdG8gZmluZCB0aGUgbWFuYWdl bWVudCBpbnRlcmZhY2UgZm9yIHlvdXIgbGlzdC4iDQogICAgICAgICAgICAg ICAgICAgICAgICI8cD4oU2VuZCBxdWVzdGlvbnMgb3IgY29tbWVudHMgdG8g IiwNCiAgICAgICAgICAgICAgICAgICAgICAgTGluaygibWFpbHRvOiVzIiAl IG1tX2NmZy5NQUlMTUFOX09XTkVSLA0KQEAgLTEzNSw3ICsxMzUsNyBAQA0K ICAgICBpZiBhZHZlcnRpc2VkOg0KICAgICAgICAgdGFibGUuQWRkUm93KFtJ dGFsaWMoIkxpc3QiKSwgSXRhbGljKCJEZXNjcmlwdGlvbiIpXSkNCiAgICAg Zm9yIGwgaW4gYWR2ZXJ0aXNlZDoNCi0gICAgICAgIHRhYmxlLkFkZFJvdyhb TGluayhsLkdldFJlbGF0aXZlU2NyaXB0VVJMKCdsaXN0aW5mbycpLCANCisg ICAgICAgIHRhYmxlLkFkZFJvdyhbTGluayhsLkdldFJlbGF0aXZlU2NyaXB0 VVJMKG1tX2NmZy5MSVNUSU5GT19DR0kpLCANCiAJICAgICAgQm9sZChsLnJl YWxfbmFtZSkpLCBsLmRlc2NyaXB0aW9uXSkNCiANCiAgICAgZG9jLkFkZEl0 ZW0odGFibGUpDQpAQCAtMTY0LDggKzE2NCw4IEBADQogICAgIHJlcGxhY2Vt ZW50c1snPG1tLW5ldy1wYXNzd29yZC1ib3g+J10gPSBsaXN0LkZvcm1hdFNl Y3VyZUJveCgncHcnKQ0KICAgICByZXBsYWNlbWVudHNbJzxtbS1jb25maXJt LXBhc3N3b3JkPiddID0gbGlzdC5Gb3JtYXRTZWN1cmVCb3goJ3B3LWNvbmYn KQ0KICAgICByZXBsYWNlbWVudHNbJzxtbS1zdWJzY3JpYmUtZm9ybS1zdGFy dD4nXSA9IFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlzdC5Gb3JtYXRGb3JtU3RhcnQoJ3N1YnNjcmliZScp DQotICAgIHJlcGxhY2VtZW50c1snPG1tLXJvc3Rlci1mb3JtLXN0YXJ0Pidd ID0gbGlzdC5Gb3JtYXRGb3JtU3RhcnQoJ3Jvc3RlcicpDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuRm9y bWF0Rm9ybVN0YXJ0KG1tX2NmZy5TVUJTQ1JJQkVfQ0dJKQ0KKyAgICByZXBs YWNlbWVudHNbJzxtbS1yb3N0ZXItZm9ybS1zdGFydD4nXSA9IGxpc3QuRm9y bWF0Rm9ybVN0YXJ0KG1tX2NmZy5ST1NURVJfQ0dJKQ0KICAgICByZXBsYWNl bWVudHNbJzxtbS1lZGl0aW5nLW9wdGlvbnM+J10gPSBsaXN0LkZvcm1hdEVk aXRpbmdPcHRpb24oKQ0KICAgICByZXBsYWNlbWVudHNbJzxtbS1pbmZvLWJ1 dHRvbj4nXSA9IFN1Ym1pdEJ1dHRvbignVXNlck9wdGlvbnMnLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnRWRpdCBPcHRpb25zJykuRm9ybWF0KCkNCmRpZmYgLWJydSAteCBDVlMg bWFpbG1hbi5vcmlnL01haWxtYW4vQ2dpL29wdGlvbnMucHkgbWFpbG1hbi9N YWlsbWFuL0NnaS9vcHRpb25zLnB5DQotLS0gbWFpbG1hbi5vcmlnL01haWxt YW4vQ2dpL29wdGlvbnMucHkJU2F0IEF1ZyAgOCAxNDoxNzo0NSAxOTk4DQor KysgbWFpbG1hbi9NYWlsbWFuL0NnaS9vcHRpb25zLnB5CVNhdCBBdWcgIDgg MTQ6NDA6MTAgMTk5OA0KQEAgLTExNSw3ICsxMTUsNyBAQA0KICAgICByZXBs YWNlbWVudHNbJzxtbS1jb25maXJtLXBhc3MtYm94PiddID0gbGlzdC5Gb3Jt YXRTZWN1cmVCb3goJ2NvbmZwdycpDQogICAgIHJlcGxhY2VtZW50c1snPG1t LWNoYW5nZS1wYXNzLWJ1dHRvbj4nXSA9IGxpc3QuRm9ybWF0QnV0dG9uKCdj aGFuZ2VwdycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGFuZ2UgTXkgUGFz c3dvcmQiKQ0KLSAgICByZXBsYWNlbWVudHNbJzxtbS1mb3JtLXN0YXJ0Pidd ID0gbGlzdC5Gb3JtYXRGb3JtU3RhcnQoJ2hhbmRsZV9vcHRzJywgdXNlcikN CisgICAgcmVwbGFjZW1lbnRzWyc8bW0tZm9ybS1zdGFydD4nXSA9IGxpc3Qu Rm9ybWF0Rm9ybVN0YXJ0KG1tX2NmZy5IT1BUU19DR0ksIHVzZXIpDQogICAg IHJlcGxhY2VtZW50c1snPG1tLXVzZXI+J10gPSB1c2VyDQogICAgIHJlcGxh Y2VtZW50c1snPG1tLXByZXNlbnRhYmxlLXVzZXI+J10gPSBwcmVzZW50YWJs ZV91c2VyDQogICAgIHJlcGxhY2VtZW50c1snPG1tLWVtYWlsLW15LXB3Pidd ID0gbGlzdC5Gb3JtYXRCdXR0b24oJ2VtYWlscHcnLA0KZGlmZiAtYnJ1IC14 IENWUyBtYWlsbWFuLm9yaWcvTWFpbG1hbi9EZWZhdWx0cy5weS5pbiBtYWls bWFuL01haWxtYW4vRGVmYXVsdHMucHkuaW4NCi0tLSBtYWlsbWFuLm9yaWcv TWFpbG1hbi9EZWZhdWx0cy5weS5pbglTYXQgQXVnICA4IDE0OjE1OjQzIDE5 OTgNCisrKyBtYWlsbWFuL01haWxtYW4vRGVmYXVsdHMucHkuaW4JRnJpIEF1 ZyAyMSAxNTowMTozMyAxOTk4DQpAQCAtMjE3LDMgKzIxNywxNSBAQA0KIA0K ICMgRGF0YSBmaWxlIHZlcnNpb24gbnVtYmVyDQogREFUQV9GSUxFX1ZFUlNJ T04gPSAzDQorDQorIyBDR0kgZmlsZSBuYW1lcw0KK0FETUlOX0NHSSAgICAg ICA9ICJhZG1pbkBDR0lFWFRAIg0KK0FETUlOREJfQ0dJICAgICA9ICJhZG1p bmRiQENHSUVYVEAiDQorQVJDSElWRV9DR0kgICAgID0gImFyY2hpdmVAQ0dJ RVhUQCINCitMSVNUSU5GT19DR0kgICAgPSAibGlzdGluZm9AQ0dJRVhUQCIN CitPUFRJT05TX0NHSSAgICAgPSAib3B0aW9uc0BDR0lFWFRAIg0KK0VESVRI VE1MX0NHSSAgICA9ICJlZGl0aHRtbEBDR0lFWFRAIg0KK1JPU1RFUl9DR0kg ICAgICA9ICJyb3N0ZXJAQ0dJRVhUQCINCitIT1BUU19DR0kgICAgICAgPSAi aGFuZGxlX29wdHNAQ0dJRVhUQCINCitTVUJTQ1JJQkVfQ0dJICAgPSAic3Vi c2NyaWJlQENHSUVYVEAiDQorUFJJVkFURV9DR0kgICAgID0gInByaXZhdGVA Q0dJRVhUQCINCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5vcmlnL01haWxt YW4vRGVsaXZlcmVyLnB5IG1haWxtYW4vTWFpbG1hbi9EZWxpdmVyZXIucHkN Ci0tLSBtYWlsbWFuLm9yaWcvTWFpbG1hbi9EZWxpdmVyZXIucHkJU3VuIEF1 ZyAzMCAxNTo1NTo1NCAxOTk4DQorKysgbWFpbG1hbi9NYWlsbWFuL0RlbGl2 ZXJlci5weQlTdW4gQXVnIDMwIDE2OjI5OjQ0IDE5OTgNCkBAIC05NCwxMyAr OTQsMTMgQEANCiAgICAgICAgICAgICBpZiAobGVuKHN1YmplY3QpID4gbGVu KHNwKQ0KICAgICAgICAgICAgICAgICBhbmQgc3ViamVjdFswOmxlbihzcCld ID09IHNwKToNCiAgICAgICAgICAgICAgICAgIyBUcmltIG9mZiBzdWJqZWN0 IHByZWZpeA0KLSAgICAgICAgICAgICAgICBzdWJqZWN0ID0gc3ViamVjdFts ZW4oc3ApICsgMTpdDQorICAgICAgICAgICAgICAgIHN1YmplY3QgPSBzdWJq ZWN0W2xlbihzcCk6XQ0KICAgICAgICAgIyBnZXQgdGhlIHRleHQgZnJvbSB0 aGUgdGVtcGxhdGUNCiAgICAgICAgIGJvZHkgPSBVdGlscy5tYWtldGV4dCgN CiAgICAgICAgICAgICAncG9zdGFjay50eHQnLA0KICAgICAgICAgICAgIHsn c3ViamVjdCcgICAgIDogc3ViamVjdCwNCiAgICAgICAgICAgICAgJ2xpc3Ru YW1lJyAgICA6IHNlbGYucmVhbF9uYW1lLA0KLSAgICAgICAgICAgICAnbGlz dGluZm9fdXJsJzogc2VsZi5HZXRBYnNvbHV0ZVNjcmlwdFVSTCgnbGlzdGlu Zm8nKSwNCisgICAgICAgICAgICAgJ2xpc3RpbmZvX3VybCc6IHNlbGYuR2V0 QWJzb2x1dGVTY3JpcHRVUkwobW1fY2ZnLkxJU1RJTkZPX0NHSSksDQogICAg ICAgICAgICAgIH0pDQogCXNlbGYuU2VuZFRleHRUb1VzZXIoJyVzIHBvc3Qg YWNrbm93bGVnZW1lbnQnICUgc2VsZi5yZWFsX25hbWUsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJvZHksIHNlbmRlcikNCkBAIC0xMTgsNyAr MTE4LDcgQEANCiAgICAgICAgICAgICAgJ2hvc3RfbmFtZScgICA6IHNlbGYu aG9zdF9uYW1lLA0KICAgICAgICAgICAgICAnd2VsY29tZScgICAgIDogd2Vs Y29tZSwNCiAgICAgICAgICAgICAgJ2VtYWlsYWRkcicgICA6IHNlbGYuR2V0 TGlzdEVtYWlsKCksDQotICAgICAgICAgICAgICdsaXN0aW5mb191cmwnOiBz ZWxmLkdldEFic29sdXRlU2NyaXB0VVJMKCdsaXN0aW5mbycpLA0KKyAgICAg ICAgICAgICAnbGlzdGluZm9fdXJsJzogc2VsZi5HZXRBYnNvbHV0ZVNjcmlw dFVSTChtbV9jZmcuTElTVElORk9fQ0dJKSwNCiAgICAgICAgICAgICAgJ29w dGlvbnN1cmwnICA6IHNlbGYuR2V0QWJzb2x1dGVPcHRpb25zVVJMKG5hbWUp LA0KICAgICAgICAgICAgICAncGFzc3dvcmQnICAgIDogcGFzc3dvcmQsDQog ICAgICAgICAgICAgIH0pDQpkaWZmIC1icnUgLXggQ1ZTIG1haWxtYW4ub3Jp Zy9NYWlsbWFuL0RpZ2VzdGVyLnB5IG1haWxtYW4vTWFpbG1hbi9EaWdlc3Rl ci5weQ0KLS0tIG1haWxtYW4ub3JpZy9NYWlsbWFuL0RpZ2VzdGVyLnB5CVNh dCBBdWcgIDggMTQ6MTU6NDggMTk5OA0KKysrIG1haWxtYW4vTWFpbG1hbi9E aWdlc3Rlci5weQlGcmkgQXVnIDIxIDE0OjMzOjUwIDE5OTgNCkBAIC0zMzAs NyArMzMwLDcgQEANCiAgICAgICAgICAgICBzdWJzdHMgPSB7fQ0KICAgICAg ICAgICAgIHN1YnN0cy51cGRhdGUobHN0Ll9fZGljdF9fKQ0KICAgICAgICAg ICAgIHN1YnN0cy51cGRhdGUoeydnb3RfbGlzdGluZm9fdXJsJzogDQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzdC5HZXRB YnNvbHV0ZVNjcmlwdFVSTCgnbGlzdGluZm8nKSwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN0LkdldEFic29sdXRlU2Ny aXB0VVJMKG1tX2NmZy5MSVNUSU5GT19DR0kpLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdnb3RfcmVxdWVzdF9lbWFpbCc6IGxzdC5HZXRSZXF1 ZXN0RW1haWwoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ290 X2xpc3RfZW1haWwnOiBsc3QuR2V0TGlzdEVtYWlsKCksDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2dvdF9vd25lcl9lbWFpbCc6IGxzdC5HZXRB ZG1pbkVtYWlsKCksDQpkaWZmIC1icnUgLXggQ1ZTIG1haWxtYW4ub3JpZy9N YWlsbWFuL0hUTUxGb3JtYXR0ZXIucHkgbWFpbG1hbi9NYWlsbWFuL0hUTUxG b3JtYXR0ZXIucHkNCi0tLSBtYWlsbWFuLm9yaWcvTWFpbG1hbi9IVE1MRm9y bWF0dGVyLnB5CVNhdCBBdWcgIDggMTQ6MTU6NTQgMTk5OA0KKysrIG1haWxt YW4vTWFpbG1hbi9IVE1MRm9ybWF0dGVyLnB5CUZyaSBBdWcgMjEgMTQ6MzQ6 NTYgMTk5OA0KQEAgLTkzLDcgKzkzLDcgQEANCiAJCXNob3dpbmcgPSBPYnNj dXJlRW1haWwocGVyc29uLCBmb3JfdGV4dD0xKQ0KIAkgICAgZWxzZToNCiAJ CXNob3dpbmcgPSBwZXJzb24NCi0JICAgIGdvdCA9IExpbmsob3MucGF0aC5q b2luKG1lLkdldFJlbGF0aXZlU2NyaXB0VVJMKCdvcHRpb25zJyksDQorCSAg ICBnb3QgPSBMaW5rKG9zLnBhdGguam9pbihtZS5HZXRSZWxhdGl2ZVNjcmlw dFVSTChtbV9jZmcuT1BUSU9OU19DR0kpLA0KIAkJCQkgICAgaWQpLCBzaG93 aW5nKQ0KICAgICAgICAgICAgIGlmIG1lLkdldFVzZXJPcHRpb24ocGVyc29u LCBkaXNkZWwpOg0KICAgICAgICAgICAgICAgICBnb3QgPSBJdGFsaWMoIigi LCBnb3QsICIpIikNCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5vcmlnL01h aWxtYW4vTGlzdEFkbWluLnB5IG1haWxtYW4vTWFpbG1hbi9MaXN0QWRtaW4u cHkNCi0tLSBtYWlsbWFuLm9yaWcvTWFpbG1hbi9MaXN0QWRtaW4ucHkJU2F0 IEF1ZyAgOCAxNDoxNjoxMCAxOTk4DQorKysgbWFpbG1hbi9NYWlsbWFuL0xp c3RBZG1pbi5weQlGcmkgQXVnIDIxIDE0OjM1OjM5IDE5OTgNCkBAIC01NSw3 ICs1NSw3IEBADQogICAgICAgICAgICAgICAgICAgICB7J3VzZXJuYW1lJyAg IDogd2hvLA0KICAgICAgICAgICAgICAgICAgICAgICdsaXN0bmFtZScgICA6 IHNlbGYucmVhbF9uYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICdob3N0 bmFtZScgICA6IHNlbGYuaG9zdF9uYW1lLA0KLSAgICAgICAgICAgICAgICAg ICAgICdhZG1pbmRiX3VybCc6IHNlbGYuR2V0QWJzb2x1dGVTY3JpcHRVUkwo J2FkbWluZGInKSwNCisgICAgICAgICAgICAgICAgICAgICAnYWRtaW5kYl91 cmwnOiBzZWxmLkdldEFic29sdXRlU2NyaXB0VVJMKG1tX2NmZy5BRE1JTkRC X0NHSSksDQogICAgICAgICAgICAgICAgICAgICAgfSkNCiAJCXNlbGYuU2Vu ZFRleHRUb1VzZXIoc3ViamVjdCA9IHN1YmosDQogCQkJCSAgICByZWNpcGll bnQgPSBzZWxmLkdldEFkbWluRW1haWwoKSwNCkBAIC03OCw3ICs3OCw3IEBA DQogICAgICAgICAgICAgICAgICAgICAgJ3JlYXNvbicgICAgIDogcmVhc29u LA0KICAgICAgICAgICAgICAgICAgICAgICdzZW5kZXInICAgICA6IHNlbmRl ciwNCiAgICAgICAgICAgICAgICAgICAgICAnc3ViamVjdCcgICAgOiBzdWJq ZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgICdhZG1pbmRiX3VybCc6IHNl bGYuR2V0QWJzb2x1dGVTY3JpcHRVUkwoJ2FkbWluZGInKSwNCisgICAgICAg ICAgICAgICAgICAgICAnYWRtaW5kYl91cmwnOiBzZWxmLkdldEFic29sdXRl U2NyaXB0VVJMKG1tX2NmZy5BRE1JTkRCX0NHSSksDQogICAgICAgICAgICAg ICAgICAgICAgfSkNCiAJCXNlbGYuU2VuZFRleHRUb1VzZXIoc3ViamVjdCA9 IHN1YmosDQogCQkJCSAgICByZWNpcGllbnQgPSBzZWxmLkdldEFkbWluRW1h aWwoKSwNCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5vcmlnL01haWxtYW4v TWFpbExpc3QucHkgbWFpbG1hbi9NYWlsbWFuL01haWxMaXN0LnB5DQotLS0g bWFpbG1hbi5vcmlnL01haWxtYW4vTWFpbExpc3QucHkJU2F0IEF1ZyAgOCAx NDoxNjozNCAxOTk4DQorKysgbWFpbG1hbi9NYWlsbWFuL01haWxMaXN0LnB5 CUZyaSBBdWcgMjEgMTQ6Mzc6NTYgMTk5OA0KQEAgLTg0LDcgKzg0LDcgQEAN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNlbGYuX2ludGVybmFsX25hbWUpKQ0KIA0KICAgICBkZWYgR2V0QWJz b2x1dGVPcHRpb25zVVJMKHNlbGYsIGFkZHIsIG9ic2N1cmVkPTAsKToNCi0J b3B0aW9ucyA9IHNlbGYuR2V0QWJzb2x1dGVTY3JpcHRVUkwoJ29wdGlvbnMn KQ0KKwlvcHRpb25zID0gc2VsZi5HZXRBYnNvbHV0ZVNjcmlwdFVSTChtbV9j ZmcuT1BUSU9OU19DR0kpDQogICAgICAgICBpZiBvYnNjdXJlZDoNCiAgICAg ICAgICAgICB0cmVhdGVkID0gVXRpbHMuT2JzY3VyZUVtYWlsKGFkZHIsIGZv cl90ZXh0PTApDQogICAgICAgICBlbHNlOg0KQEAgLTM1OSw3ICszNTksNyBA QA0KICAgICAgICAgICAgICIgY292ZXJpbmcgbWVtYmVycyBhbmQgb3V0c2lk ZXJzLiINCiAgICAgICAgICAgICAnICAoU2VlIGFsc28gdGhlIDxhIGhyZWY9 IiVzIj5BcmNoaXZhbCBPcHRpb25zIHNlY3Rpb248L2E+IGZvcicNCiAgICAg ICAgICAgICAnIHNlcGFyYXRlIGFyY2hpdmUtcHJpdmFjeSBzZXR0aW5ncy4p Jw0KLSAgICAgICAgICAgICUgb3MucGF0aC5qb2luKHNlbGYuR2V0UmVsYXRp dmVTY3JpcHRVUkwoJ2FkbWluJyksICdhcmNoaXZlJyksDQorICAgICAgICAg ICAgJSBvcy5wYXRoLmpvaW4oc2VsZi5HZXRSZWxhdGl2ZVNjcmlwdFVSTCht bV9jZmcuQURNSU5fQ0dJKSwgJ2FyY2hpdmUnKSwNCiANCiAJICAgICJTdWJz Y3JpYmluZyIsDQogDQpkaWZmIC1icnUgLXggQ1ZTIG1haWxtYW4ub3JpZy9N YWlsbWFuL01ha2VmaWxlLmluIG1haWxtYW4vTWFpbG1hbi9NYWtlZmlsZS5p bg0KLS0tIG1haWxtYW4ub3JpZy9NYWlsbWFuL01ha2VmaWxlLmluCVNhdCBB dWcgIDggMTQ6MTY6MzYgMTk5OA0KKysrIG1haWxtYW4vTWFpbG1hbi9NYWtl ZmlsZS5pbglGcmkgQXVnIDIxIDE0OjM5OjE2IDE5OTgNCkBAIC04Myw3ICs4 Myw3IEBADQogCWRvbmUNCiANCiBkaXN0Y2xlYW46DQotCS1ybSBNYWtlZmls ZSBEZWZhdWx0cy5weQ0KKwktcm0gTWFrZWZpbGUgRGVmYXVsdHMucHkgbW1f Y2ZnLnB5DQogCWZvciBkIGluICQoU1VCRElSUyk7IFwNCiAJZG8gXA0KIAkg ICAgKGNkICQkZDsgJChNQUtFKSBkaXN0Y2xlYW4pOyBcDQpkaWZmIC1icnUg LXggQ1ZTIG1haWxtYW4ub3JpZy9NYWlsbWFuL091dGdvaW5nUXVldWUucHkg bWFpbG1hbi9NYWlsbWFuL091dGdvaW5nUXVldWUucHkNCi0tLSBtYWlsbWFu Lm9yaWcvTWFpbG1hbi9PdXRnb2luZ1F1ZXVlLnB5CVNhdCBBdWcgIDggMTQ6 MTY6MzkgMTk5OA0KKysrIG1haWxtYW4vTWFpbG1hbi9PdXRnb2luZ1F1ZXVl LnB5CUZyaSBBdWcgMjEgMTQ6NDE6NDYgMTk5OA0KQEAgLTIwLDcgKzIwLDE0 IEBADQogDQogVEVNUExBVEUgPSAibW1fcS4iDQogDQordHJ5Og0KKyAgICBp c1FtYWlsID0gbW1fY2ZnLlFNQUlMDQorZXhjZXB0Og0KKyAgICBpc1FtYWls ID0gMA0KKw0KIGRlZiBkZXF1ZXVlTWVzc2FnZShtc2cpOg0KKyAgICBpZiBp c1FtYWlsOg0KKwlyZXR1cm4NCiAgICAgaW1wb3J0IG9zDQogICAgIG9zLnVu bGluayhtc2cpDQogDQpAQCAtMzksNiArNDYsOCBAQA0KICAgICAgICAgDQog ICAgICAgICAgICAgDQogZGVmIGVucXVldWVNZXNzYWdlKHRoZV9zZW5kZXIs IHJlY2lwLCB0ZXh0KToNCisgICAgaWYgaXNRbWFpbDoNCisJcmV0dXJuICIi DQogICAgIHRlbXBmaWxlLnRlbXBkaXIgPSBtbV9jZmcuREFUQV9ESVINCiAg ICAgdGVtcGZpbGUudGVtcGxhdGUgPSBURU1QTEFURQ0KICAgICBmbmFtZSA9 IHRlbXBmaWxlLm1rdGVtcCgpDQpkaWZmIC1icnUgLXggQ1ZTIG1haWxtYW4u b3JpZy9NYWlsbWFuL1V0aWxzLnB5IG1haWxtYW4vTWFpbG1hbi9VdGlscy5w eQ0KLS0tIG1haWxtYW4ub3JpZy9NYWlsbWFuL1V0aWxzLnB5CVNhdCBBdWcg IDggMTQ6MTY6NDYgMTk5OA0KKysrIG1haWxtYW4vTWFpbG1hbi9VdGlscy5w eQlTdW4gQXVnIDMwIDE2OjQ3OjEwIDE5OTgNCkBAIC0xOTQsNiArMTk0LDIx IEBADQogICAgICAgICBvcy5fZXhpdCgwKQ0KIA0KIGRlZiBUcnlTTVRQRGVs aXZlcnkocmVjaXBpZW50LCBzZW5kZXIsIHRleHQsIHF1ZXVlX2VudHJ5KToN CisgICAgaW1wb3J0IE91dGdvaW5nUXVldWUNCisgICAgaWYgdHlwZShtbV9j ZmcuU0VMRl9NQUlMRVIpID09IFN0cmluZ1R5cGU6DQorCWZyb20gdHlwZXMg aW1wb3J0ICoNCisJaWYgdHlwZShyZWNpcGllbnQpID09IFN0cmluZ1R5cGU6 DQorCSAgICB0b2MgPSByZWNpcGllbnQNCisJZWxzZToNCisJICAgIHRvYyA9 IHN0cmluZy5qb2luKHJlY2lwaWVudCwgJyAnKQ0KKwl0cnk6DQorCSAgICBw aXBlID0gb3MucG9wZW4oIiVzICVzIiAlIChtbV9jZmcuU0VMRl9NQUlMRVIp LCB0b2MpLCAidyIpDQorCSAgICBwaXBlLndyaXRlKHRleHQpDQorCSAgICBw aXBlLmNsb3NlKCkNCisJICAgIE91dGdvaW5nUXVldWUuZGVxdWV1ZU1lc3Nh Z2UocXVldWVfZW50cnkpDQorCWZpbmFsbHk6DQorCSAgICBwYXNzDQorICAg IGVsc2U6DQogICAgIGltcG9ydCBzeXMsIHNvY2tldA0KICAgICBpbXBvcnQg c210cGxpYg0KICAgICBpbXBvcnQgT3V0Z29pbmdRdWV1ZQ0KZGlmZiAtYnJ1 IC14IENWUyBtYWlsbWFuLm9yaWcvTWFpbG1hbi9tbV9jZmcucHkuaW4gbWFp bG1hbi9NYWlsbWFuL21tX2NmZy5weS5pbg0KLS0tIG1haWxtYW4ub3JpZy9N YWlsbWFuL21tX2NmZy5weS5pbglTYXQgQXVnICA4IDE0OjE2OjU0IDE5OTgN CisrKyBtYWlsbWFuL01haWxtYW4vbW1fY2ZnLnB5LmluCUZyaSBBdWcgMjEg MTU6MDE6NDkgMTk5OA0KQEAgLTUzLDcgKzUzLDkgQEANCiBNQUlMTUFOX09X TkVSICAgICA9ICdtYWlsbWFuLW93bmVyQCVzJyAlIERFRkFVTFRfSE9TVF9O QU1FDQogDQogUFVCTElDX0FSQ0hJVkVfVVJMID0gJy9waXBlcm1haWwnDQot UFJJVkFURV9BUkNISVZFX1VSTCA9ICcvbWFpbG1hbi9wcml2YXRlJw0KK1BS SVZBVEVfQVJDSElWRV9VUkwgPSAnL21haWxtYW4vcHJpdmF0ZUBDR0lFWFRA Jw0KKw0KK1FNQUlMICAgICAgICAgICAgICA9IDANCiANCiAjIE5vdGUgLSBp ZiB5b3UncmUgbG9va2luZyBmb3Igc29tZXRoaW5nIHRoYXQgaXMgaW1wb3J0 ZWQgZnJvbSBtbV9jZmcsIGJ1dCB5b3UNCiAjIGRpZG4ndCBmaW5kIGl0IGFi b3ZlLCBpdCdzIHByb2JhYmx5IGluIERlZmF1bHRzLnB5Lg0KZGlmZiAtYnJ1 IC14IENWUyBtYWlsbWFuLm9yaWcvYmluL2NvbnZlcnRfbGlzdCBtYWlsbWFu L2Jpbi9jb252ZXJ0X2xpc3QNCi0tLSBtYWlsbWFuLm9yaWcvYmluL2NvbnZl cnRfbGlzdAlTdW4gQXVnIDMwIDE1OjU1OjU1IDE5OTgNCisrKyBtYWlsbWFu L2Jpbi9jb252ZXJ0X2xpc3QJRnJpIEF1ZyAyMSAxNDo1MToxNCAxOTk4DQpA QCAtODQsNyArODQsNyBAQA0KICAgICBkaWN0ID0geydsaXN0bmFtZScgICAg OiBtbC5yZWFsX25hbWUsDQogICAgICAgICAgICAgJ2xpc3Rob3N0JyAgICA6 IG1sLmhvc3RfbmFtZSwNCiAgICAgICAgICAgICAnbGlzdGFkZHInICAgIDog bWwuR2V0TGlzdEVtYWlsKCksDQotICAgICAgICAgICAgJ2xpc3RpbmZvX3Vy bCc6IG1sLkdldEFic29sdXRlU2NyaXB0VVJMKCdsaXN0aW5mbycpLA0KKyAg ICAgICAgICAgICdsaXN0aW5mb191cmwnOiBtbC5HZXRBYnNvbHV0ZVNjcmlw dFVSTChtbV9jZmcuTElTVElORk9fQ0dJKSwNCiAgICAgICAgICAgICAncmVx dWVzdGFkZHInIDogbWwuR2V0UmVxdWVzdEVtYWlsKCksDQogICAgICAgICAg ICAgJ2FkbWluYWRkcicgICA6IG1sLkdldEFkbWluRW1haWwoKSwNCiAgICAg ICAgICAgICAndmVyc2lvbicgICAgIDogTWFpbG1hbi5tbV9jZmcuVkVSU0lP TiwNCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5vcmlnL2Jpbi9uZXdsaXN0 IG1haWxtYW4vYmluL25ld2xpc3QNCi0tLSBtYWlsbWFuLm9yaWcvYmluL25l d2xpc3QJU2F0IEF1ZyAgOCAxNDoxODo0OCAxOTk4DQorKysgbWFpbG1hbi9i aW4vbmV3bGlzdAlGcmkgQXVnIDIxIDE0OjUyOjQzIDE5OTgNCkBAIC0xMjAs OCArMTIwLDggQEANCiAgICAgICAgICduZXdsaXN0LnR4dCcsDQogICAgICAg ICB7J2xpc3RuYW1lJyAgICA6IGxpc3RfbmFtZSwNCiAgICAgICAgICAncGFz c3dvcmQnICAgIDogbGlzdF9wdywgDQotICAgICAgICAgJ2FkbWluX3VybCcg ICA6IG5ld2xpc3QuR2V0QWJzb2x1dGVTY3JpcHRVUkwoJ2FkbWluJyksIA0K LSAgICAgICAgICdsaXN0aW5mb191cmwnOiBuZXdsaXN0LkdldEFic29sdXRl U2NyaXB0VVJMKCdsaXN0aW5mbycpLA0KKyAgICAgICAgICdhZG1pbl91cmwn ICAgOiBuZXdsaXN0LkdldEFic29sdXRlU2NyaXB0VVJMKG1tX2NmZy5BRE1J Tl9DR0kpLCANCisgICAgICAgICAnbGlzdGluZm9fdXJsJzogbmV3bGlzdC5H ZXRBYnNvbHV0ZVNjcmlwdFVSTChtbV9jZmcuTElTVElORk9fQ0dJKSwNCiAg ICAgICAgICAncmVxdWVzdGFkZHInIDogIiVzLXJlcXVlc3RAJXMiICUgKGxp c3RfbmFtZSwgbmV3bGlzdC5ob3N0X25hbWUpLA0KICAgICAgICAgICdob3N0 bmFtZScgICAgOiBuZXdsaXN0Lmhvc3RfbmFtZSwNCiAgICAgICAgICB9KQ0K ZGlmZiAtYnJ1IC14IENWUyBtYWlsbWFuLm9yaWcvY29uZmlndXJlIG1haWxt YW4vY29uZmlndXJlDQotLS0gbWFpbG1hbi5vcmlnL2NvbmZpZ3VyZQlTYXQg QXVnICA4IDE0OjE1OjI1IDE5OTgNCisrKyBtYWlsbWFuL2NvbmZpZ3VyZQlG cmkgQXVnIDIxIDE1OjIwOjIxIDE5OTgNCkBAIC0xLDYgKzEsNiBAQA0KICMh IC9iaW4vc2gNCiANCi0jIEZyb20gY29uZmlndXJlLmluIFJldmlzaW9uOiAx LjIwIA0KKyMgRnJvbSBjb25maWd1cmUuaW4gUmV2aXNpb246IDEuMjEgDQog DQogIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFi bGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLg0KICMgR2VuZXJhdGVkIGF1dG9t YXRpY2FsbHkgdXNpbmcgYXV0b2NvbmYgdmVyc2lvbiAyLjEyIA0KQEAgLTI1 LDYgKzI1LDkgQEANCiBhY19oZWxwPSIkYWNfaGVscA0KIA0KIAktLXdpdGgt Y2dpLWdpZCAgCXNwZWNpZnkgR0lEIENHSSBwcm9ncmFtcyBydW4gYXMiDQor YWNfaGVscD0iJGFjX2hlbHANCisNCisJLS13aXRoLWNnaS1leHQgICAgICAg IHNwZWNpZnkgZXh0ZW5zaW9ucyBvZiBDR0kgcHJvZ3JhbXMiDQogDQogIyBJ bml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLg0KICMg VGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRp b25zLCB3aXRoDQpAQCAtNTQ1LDcgKzU0OCw3IEBADQogDQogIyBDaGVjayBm b3IgUHl0aG9uISAgQmV0dGVyIGJlIGZvdW5kIG9uICRQQVRIDQogZWNobyAk YWNfbiAiY2hlY2tpbmcgZm9yIC0td2l0aC1weXRob24iIi4uLiAkYWNfYyIg MT4mNg0KLWVjaG8gImNvbmZpZ3VyZTo1NDk6IGNoZWNraW5nIGZvciAtLXdp dGgtcHl0aG9uIiA+JjUNCitlY2hvICJjb25maWd1cmU6NTUyOiBjaGVja2lu ZyBmb3IgLS13aXRoLXB5dGhvbiIgPiY1DQogIyBDaGVjayB3aGV0aGVyIC0t d2l0aC1weXRob24gb3IgLS13aXRob3V0LXB5dGhvbiB3YXMgZ2l2ZW4uDQog aWYgdGVzdCAiJHt3aXRoX3B5dGhvbitzZXR9IiA9IHNldDsgdGhlbg0KICAg d2l0aHZhbD0iJHdpdGhfcHl0aG9uIg0KQEAgLTU1OSw3ICs1NjIsNyBAQA0K IAkjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInB5dGhvbiIsIHNvIGl0 IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuDQogc2V0IGR1bW15 IHB5dGhvbjsgYWNfd29yZD0kMg0KIGVjaG8gJGFjX24gImNoZWNraW5nIGZv ciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmlndXJl OjU2MzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUNCitlY2hvICJjb25m aWd1cmU6NTY2OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQ0KIGlmIGV2 YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX3dpdGhfcHl0aG9u JytzZXR9J2BcIiA9IHNldCI7IHRoZW4NCiAgIGVjaG8gJGFjX24gIihjYWNo ZWQpICRhY19jIiAxPiY2DQogZWxzZQ0KQEAgLTU5MSw3ICs1OTQsNyBAQA0K IGZpDQogDQogZWNobyAkYWNfbiAiY2hlY2tpbmcgUHl0aG9uIGludGVycHJl dGVyIiIuLi4gJGFjX2MiIDE+JjYNCi1lY2hvICJjb25maWd1cmU6NTk1OiBj aGVja2luZyBQeXRob24gaW50ZXJwcmV0ZXIiID4mNQ0KK2VjaG8gImNvbmZp Z3VyZTo1OTg6IGNoZWNraW5nIFB5dGhvbiBpbnRlcnByZXRlciIgPiY1DQog aWYgdGVzdCAhIC14ICR3aXRoX3B5dGhvbg0KIHRoZW4NCiAgICAgeyBlY2hv ICJjb25maWd1cmU6IGVycm9yOiANCkBAIC02MzUsNyArNjM4LDcgQEANCiAj IFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRo ZSBub25leGlzdGVudCBncm91cCAic3RhZmYiDQogIyAuL2luc3RhbGwsIHdo aWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAu L2luc3RhbGwuc2guDQogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGEgQlNE IGNvbXBhdGlibGUgaW5zdGFsbCIiLi4uICRhY19jIiAxPiY2DQotZWNobyAi Y29uZmlndXJlOjYzOTogY2hlY2tpbmcgZm9yIGEgQlNEIGNvbXBhdGlibGUg aW5zdGFsbCIgPiY1DQorZWNobyAiY29uZmlndXJlOjY0MjogY2hlY2tpbmcg Zm9yIGEgQlNEIGNvbXBhdGlibGUgaW5zdGFsbCIgPiY1DQogaWYgdGVzdCAt eiAiJElOU1RBTEwiOyB0aGVuDQogaWYgZXZhbCAidGVzdCBcImBlY2hvICck Jyd7J2FjX2N2X3BhdGhfaW5zdGFsbCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVu DQogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KQEAgLTY4 NSw3ICs2ODgsNyBAQA0KIHRlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElO U1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnDQogDQogZWNobyAkYWNf biAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJHtNQUtF fSIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmlndXJlOjY4OTogY2hl Y2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJHtNQUtFfSIgPiY1 DQorZWNobyAiY29uZmlndXJlOjY5MjogY2hlY2tpbmcgd2hldGhlciAke01B S0UtbWFrZX0gc2V0cyBcJHtNQUtFfSIgPiY1DQogc2V0IGR1bW15ICR7TUFL RS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICd5JS4vKy0lX19w XyUnYA0KIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9n X21ha2VfJHthY19tYWtlfV9zZXQnK3NldH0nYFwiID0gc2V0IjsgdGhlbg0K ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYNCkBAIC03MTQs NyArNzE3LDcgQEANCiANCiAjIEZpbmQgY29tcGlsZXIsIGFsbG93IGFsdGVy bmF0aXZlcyB0byBnY2MNCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgLS13 aXRob3V0LWdjYyIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmlndXJl OjcxODogY2hlY2tpbmcgZm9yIC0td2l0aG91dC1nY2MiID4mNQ0KK2VjaG8g ImNvbmZpZ3VyZTo3MjE6IGNoZWNraW5nIGZvciAtLXdpdGhvdXQtZ2NjIiA+ JjUNCiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdjYyBvciAtLXdpdGhvdXQt Z2NjIHdhcyBnaXZlbi4NCiBpZiB0ZXN0ICIke3dpdGhfZ2NjK3NldH0iID0g c2V0OyB0aGVuDQogICB3aXRodmFsPSIkd2l0aF9nY2MiDQpAQCAtNzQzLDcg Kzc0Niw3IEBADQogIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2Mi LCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLg0KIHNl dCBkdW1teSBnY2M7IGFjX3dvcmQ9JDINCiBlY2hvICRhY19uICJjaGVja2lu ZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNg0KLWVjaG8gImNvbmZp Z3VyZTo3NDc6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1DQorZWNobyAi Y29uZmlndXJlOjc1MDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUNCiBp ZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19DQycrc2V0 fSdgXCIgPSBzZXQiOyB0aGVuDQogICBlY2hvICRhY19uICIoY2FjaGVkKSAk YWNfYyIgMT4mNg0KIGVsc2UNCkBAIC03NzIsNyArNzc1LDcgQEANCiAgICMg RXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUg YSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLg0KIHNldCBkdW1teSBjYzsgYWNf d29yZD0kMg0KIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIi Li4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmlndXJlOjc3NjogY2hlY2tp bmcgZm9yICRhY193b3JkIiA+JjUNCitlY2hvICJjb25maWd1cmU6Nzc5OiBj aGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQ0KIGlmIGV2YWwgInRlc3QgXCJg ZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRo ZW4NCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2DQogZWxz ZQ0KQEAgLTgyMCw3ICs4MjMsNyBAQA0KIGZpDQogDQogZWNobyAkYWNfbiAi Y2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1Mg JExERkxBR1MpIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYNCi1lY2hvICJjb25m aWd1cmU6ODI0OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgk Q0MgJENGTEFHUyAkTERGTEFHUykgd29ya3MiID4mNQ0KK2VjaG8gImNvbmZp Z3VyZTo4Mjc6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRD QyAkQ0ZMQUdTICRMREZMQUdTKSB3b3JrcyIgPiY1DQogDQogYWNfZXh0PWMN CiAjIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBl dGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuDQpAQCAtODMwLDExICs4 MzMsMTEgQEANCiBjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jv c3MNCiANCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GDQotI2xpbmUg ODM0ICJjb25maWd1cmUiDQorI2xpbmUgODM3ICJjb25maWd1cmUiDQogI2lu Y2x1ZGUgImNvbmZkZWZzLmgiDQogbWFpbigpe3JldHVybigwKTt9DQogRU9G DQotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4Mzg6IFwiJGFjX2xpbmtc IikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBj b25mdGVzdDsgdGhlbg0KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODQx OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9 ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4NCiAgIGFjX2N2X3Byb2dfY2Nf d29ya3M9eWVzDQogICAjIElmIHdlIGNhbid0IHJ1biBhIHRyaXZpYWwgcHJv Z3JhbSwgd2UgYXJlIHByb2JhYmx5IHVzaW5nIGEgY3Jvc3MgY29tcGlsZXIu DQogICBpZiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4N CkBAIC04NTQsMTIgKzg1NywxMiBAQA0KICAgeyBlY2hvICJjb25maWd1cmU6 IGVycm9yOiBpbnN0YWxsYXRpb24gb3IgY29uZmlndXJhdGlvbiBwcm9ibGVt OiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMuIiAxPiYy OyBleGl0IDE7IH0NCiBmaQ0KIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRo ZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSBpcyBh IGNyb3NzLWNvbXBpbGVyIiIuLi4gJGFjX2MiIDE+JjYNCi1lY2hvICJjb25m aWd1cmU6ODU4OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgk Q0MgJENGTEFHUyAkTERGTEFHUykgaXMgYSBjcm9zcy1jb21waWxlciIgPiY1 DQorZWNobyAiY29uZmlndXJlOjg2MTogY2hlY2tpbmcgd2hldGhlciB0aGUg QyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIGlzIGEgY3Jvc3Mt Y29tcGlsZXIiID4mNQ0KIGVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19j cm9zcyIgMT4mNg0KIGNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19j cm9zcw0KIA0KIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJl IHVzaW5nIEdOVSBDIiIuLi4gJGFjX2MiIDE+JjYNCi1lY2hvICJjb25maWd1 cmU6ODYzOiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQyIg PiY1DQorZWNobyAiY29uZmlndXJlOjg2NjogY2hlY2tpbmcgd2hldGhlciB3 ZSBhcmUgdXNpbmcgR05VIEMiID4mNQ0KIGlmIGV2YWwgInRlc3QgXCJgZWNo byAnJCcneydhY19jdl9wcm9nX2djYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVu DQogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KIGVsc2UN CkBAIC04NjgsNyArODcxLDcgQEANCiAgIHllczsNCiAjZW5kaWYNCiBFT0YN Ci1pZiB7IGFjX3RyeT0nJHtDQy1jY30gLUUgY29uZnRlc3QuYyc7IHsgKGV2 YWwgZWNobyBjb25maWd1cmU6ODcyOiBcIiRhY190cnlcIikgMT4mNTsgKGV2 YWwgJGFjX3RyeSkgMj4mNTsgfTsgfSB8IGVncmVwIHllcyA+L2Rldi9udWxs IDI+JjE7IHRoZW4NCitpZiB7IGFjX3RyeT0nJHtDQy1jY30gLUUgY29uZnRl c3QuYyc7IHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODc1OiBcIiRhY190cnlc IikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfTsgfSB8IGVncmVwIHll cyA+L2Rldi9udWxsIDI+JjE7IHRoZW4NCiAgIGFjX2N2X3Byb2dfZ2NjPXll cw0KIGVsc2UNCiAgIGFjX2N2X3Byb2dfZ2NjPW5vDQpAQCAtODgzLDcgKzg4 Niw3IEBADQogICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyINCiAgIENGTEFH Uz0NCiAgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgJHtDQy1jY30g YWNjZXB0cyAtZyIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmlndXJl Ojg4NzogY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBhY2NlcHRzIC1nIiA+ JjUNCitlY2hvICJjb25maWd1cmU6ODkwOiBjaGVja2luZyB3aGV0aGVyICR7 Q0MtY2N9IGFjY2VwdHMgLWciID4mNQ0KIGlmIGV2YWwgInRlc3QgXCJgZWNo byAnJCcneydhY19jdl9wcm9nX2NjX2cnK3NldH0nYFwiID0gc2V0IjsgdGhl bg0KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYNCiBlbHNl DQpAQCAtOTMxLDcgKzkzNCw3IEBADQogIyBQdWxsIHRoZSBoYXNoIG1hcmsg b3V0IG9mIHRoZSBtYWNybyBjYWxsIHRvIGF2b2lkIG00IHByb2JsZW1zLg0K IGFjX21zZz0id2hldGhlciAjISB3b3JrcyBpbiBzaGVsbCBzY3JpcHRzIg0K IGVjaG8gJGFjX24gImNoZWNraW5nICRhY19tc2ciIi4uLiAkYWNfYyIgMT4m Ng0KLWVjaG8gImNvbmZpZ3VyZTo5MzU6IGNoZWNraW5nICRhY19tc2ciID4m NQ0KK2VjaG8gImNvbmZpZ3VyZTo5Mzg6IGNoZWNraW5nICRhY19tc2ciID4m NQ0KIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9zeXNfaW50 ZXJwcmV0ZXInK3NldH0nYFwiID0gc2V0IjsgdGhlbg0KICAgZWNobyAkYWNf biAiKGNhY2hlZCkgJGFjX2MiIDE+JjYNCiBlbHNlDQpAQCAtOTY1LDcgKzk2 OCw3IEBADQogDQogIyBHcm91cCBgbWFpbG1hbicgbXVzdCBleGlzdA0KIGVj aG8gJGFjX24gImNoZWNraW5nIGZvciBtYWlsbWFuIEdJRCIiLi4uICRhY19j IiAxPiY2DQotZWNobyAiY29uZmlndXJlOjk2OTogY2hlY2tpbmcgZm9yIG1h aWxtYW4gR0lEIiA+JjUNCitlY2hvICJjb25maWd1cmU6OTcyOiBjaGVja2lu ZyBmb3IgbWFpbG1hbiBHSUQiID4mNQ0KIA0KICMgTUFJTE1BTl9HSUQgPT0g dmFyaWFibGUgbmFtZQ0KICMgbWFpbG1hbiA9PSB1c2VyIGlkIHRvIGNoZWNr IGZvcg0KQEAgLTEwMTcsNyArMTAyMCw3IEBADQogZmkNCiANCiBlY2hvICRh Y19uICJjaGVja2luZyBwZXJtaXNzaW9ucyBvbiAkcHJlZml4Y2hlY2siIi4u LiAkYWNfYyIgMT4mNg0KLWVjaG8gImNvbmZpZ3VyZToxMDIxOiBjaGVja2lu ZyBwZXJtaXNzaW9ucyBvbiAkcHJlZml4Y2hlY2siID4mNQ0KK2VjaG8gImNv bmZpZ3VyZToxMDI0OiBjaGVja2luZyBwZXJtaXNzaW9ucyBvbiAkcHJlZml4 Y2hlY2siID4mNQ0KIA0KIGNhdCA+IGNvbmZ0ZXN0LnB5IDw8RU9GDQogaW1w b3J0IG9zLCBncnAsIHN0cmluZw0KQEAgLTEwNjMsNyArMTA2Niw3IEBADQog IyBOb3cgZmluZCB0aGUgVUlEcyBhbmQgR0lEcw0KICMgU3VwcG9ydCAtLXdp dGgtbWFpbC1naWQgYW5kIC0td2l0aC1jZ2ktZ2lkDQogZWNobyAkYWNfbiAi Y2hlY2tpbmcgZm9yIG1haWwgd3JhcHBlciBHSUQiIi4uLiAkYWNfYyIgMT4m Ng0KLWVjaG8gImNvbmZpZ3VyZToxMDY3OiBjaGVja2luZyBmb3IgbWFpbCB3 cmFwcGVyIEdJRCIgPiY1DQorZWNobyAiY29uZmlndXJlOjEwNzA6IGNoZWNr aW5nIGZvciBtYWlsIHdyYXBwZXIgR0lEIiA+JjUNCiAjIENoZWNrIHdoZXRo ZXIgLS13aXRoLW1haWwtZ2lkIG9yIC0td2l0aG91dC1tYWlsLWdpZCB3YXMg Z2l2ZW4uDQogaWYgdGVzdCAiJHt3aXRoX21haWxfZ2lkK3NldH0iID0gc2V0 OyB0aGVuDQogICB3aXRodmFsPSIkd2l0aF9tYWlsX2dpZCINCkBAIC0xMDc1 LDcgKzEwNzgsNyBAQA0KICAgICBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQn J3snYWNfY3ZfZ3JvdXBfbWFpbCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuDQog ICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KIGVsc2UNCi0g ICAgICBhY19jdl9ncm91cF9tYWlsPSJvdGhlciBtYWlsIGRhZW1vbiINCisg ICAgICBhY19jdl9ncm91cF9tYWlsPSJub2ZpbGVzIG90aGVyIG1haWwgZGFl bW9uIg0KIGZpDQogDQogZWxzZQ0KQEAgLTExMjQsNyArMTEyNyw3IEBADQog DQogDQogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIENHSSB3cmFwcGVyIEdJ RCIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmlndXJlOjExMjg6IGNo ZWNraW5nIGZvciBDR0kgd3JhcHBlciBHSUQiID4mNQ0KK2VjaG8gImNvbmZp Z3VyZToxMTMxOiBjaGVja2luZyBmb3IgQ0dJIHdyYXBwZXIgR0lEIiA+JjUN CiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWNnaS1naWQgb3IgLS13aXRob3V0 LWNnaS1naWQgd2FzIGdpdmVuLg0KIGlmIHRlc3QgIiR7d2l0aF9jZ2lfZ2lk K3NldH0iID0gc2V0OyB0aGVuDQogICB3aXRodmFsPSIkd2l0aF9jZ2lfZ2lk Ig0KQEAgLTExODcsNiArMTE5MCwyNSBAQA0KICNNTV9GSU5EX1VTRVJfSUQo QUxJQVNfVUlELCBtYWlsbWFuLCBhbGlhc193cmFwcGVyKQ0KICNNTV9GSU5E X0dST1VQX0lEKEFMSUFTX0dJRCwgbWFpbCwgYWxpYXNfd3JhcHBlcikNCiAN CisjIENHSSBleHRlbnNpb24gY2hlY2tpbmcNCisNCitlY2hvICRhY19uICJj aGVja2luZyBmb3IgQ0dJIGV4dGVuc2lvbiIiLi4uICRhY19jIiAxPiY2DQor ZWNobyAiY29uZmlndXJlOjExOTc6IGNoZWNraW5nIGZvciBDR0kgZXh0ZW5z aW9uIiA+JjUNCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWNnaS1leHQgb3Ig LS13aXRob3V0LWNnaS1leHQgd2FzIGdpdmVuLg0KK2lmIHRlc3QgIiR7d2l0 aF9jZ2lfZXh0K3NldH0iID0gc2V0OyB0aGVuDQorICB3aXRodmFsPSIkd2l0 aF9jZ2lfZXh0Ig0KKyAgOg0KK2ZpDQorDQoraWYgdGVzdCAteiAiJHdpdGhf Y2dpX2V4dCINCit0aGVuDQorICAgIENHSUVYVD0nJw0KKyAgICB3aXRoX2Nn aV9leHQ9J25vJw0KK2Vsc2UNCisgICAgQ0dJRVhUPSR3aXRoX2NnaV9leHQN CitmaQ0KK2VjaG8gIiRhY190IiIkd2l0aF9jZ2lfZXh0IiAxPiY2DQorDQog IyBmaWd1cmUgb3V0IHRoZSBERUZBVUxUX0hPU1RfTkFNRSBhbmQgREVGQVVM VF9VUkwNCiANCiANCkBAIC0xMjE5LDE0ICsxMjQxLDE0IEBADQogJFBZVEhP TiBjb25mdGVzdC5weQ0KIA0KIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBk ZWZhdWx0IGZ1bGx5IHF1YWxpZmllZCBob3N0IG5hbWUiIi4uLiAkYWNfYyIg MT4mNg0KLWVjaG8gImNvbmZpZ3VyZToxMjIzOiBjaGVja2luZyBmb3IgZGVm YXVsdCBmdWxseSBxdWFsaWZpZWQgaG9zdCBuYW1lIiA+JjUNCitlY2hvICJj b25maWd1cmU6MTI0NTogY2hlY2tpbmcgZm9yIGRlZmF1bHQgZnVsbHkgcXVh bGlmaWVkIGhvc3QgbmFtZSIgPiY1DQogaWYgdGVzdCAteiAiJEZRRE4iDQog dGhlbg0KICAgICBGUUROPWBoZWFkIC0xIGNvbmZ0ZXN0Lm91dGANCiBmaQ0K IGVjaG8gIiRhY190IiIkRlFETiIgMT4mNg0KIGVjaG8gJGFjX24gImNoZWNr aW5nIGZvciBkZWZhdWx0IFVSTCBob3N0IGNvbXBvbmVudCIiLi4uICRhY19j IiAxPiY2DQotZWNobyAiY29uZmlndXJlOjEyMzA6IGNoZWNraW5nIGZvciBk ZWZhdWx0IFVSTCBob3N0IGNvbXBvbmVudCIgPiY1DQorZWNobyAiY29uZmln dXJlOjEyNTI6IGNoZWNraW5nIGZvciBkZWZhdWx0IFVSTCBob3N0IGNvbXBv bmVudCIgPiY1DQogaWYgdGVzdCAteiAiJFVSTCINCiB0aGVuDQogICAgIFVS TD1gdGFpbCAtMSBjb25mdGVzdC5vdXRgDQpAQCAtMTIzOCwxMiArMTI2MCwx MiBAQA0KIGZvciBhY19mdW5jIGluIHN0cmVycm9yDQogZG8NCiBlY2hvICRh Y19uICJjaGVja2luZyBmb3IgJGFjX2Z1bmMiIi4uLiAkYWNfYyIgMT4mNg0K LWVjaG8gImNvbmZpZ3VyZToxMjQyOiBjaGVja2luZyBmb3IgJGFjX2Z1bmMi ID4mNQ0KK2VjaG8gImNvbmZpZ3VyZToxMjY0OiBjaGVja2luZyBmb3IgJGFj X2Z1bmMiID4mNQ0KIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19j dl9mdW5jXyRhY19mdW5jJytzZXR9J2BcIiA9IHNldCI7IHRoZW4NCiAgIGVj aG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2DQogZWxzZQ0KICAgY2F0 ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRg0KLSNsaW5lIDEyNDcgImNvbmZp Z3VyZSINCisjbGluZSAxMjY5ICJjb25maWd1cmUiDQogI2luY2x1ZGUgImNv bmZkZWZzLmgiDQogLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHVi IG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLA0KICAgICB3 aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jKCk7IGJlbG93 LiAgKi8NCkBAIC0xMjY2LDcgKzEyODgsNyBAQA0KIA0KIDsgcmV0dXJuIDA7 IH0NCiBFT0YNCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEyNzA6IFwi JGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYg dGVzdCAtcyBjb25mdGVzdDsgdGhlbg0KK2lmIHsgKGV2YWwgZWNobyBjb25m aWd1cmU6MTI5MjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGlu aykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuDQogICBybSAt cmYgY29uZnRlc3QqDQogICBldmFsICJhY19jdl9mdW5jXyRhY19mdW5jPXll cyINCiBlbHNlDQpAQCAtMTI5Myw3ICsxMzE1LDcgQEANCiANCiAjIENoZWNr cyBmb3IgaGVhZGVyIGZpbGVzLg0KIGVjaG8gJGFjX24gImNoZWNraW5nIGhv dyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiIuLi4gJGFjX2MiIDE+JjYN Ci1lY2hvICJjb25maWd1cmU6MTI5NzogY2hlY2tpbmcgaG93IHRvIHJ1biB0 aGUgQyBwcmVwcm9jZXNzb3IiID4mNQ0KK2VjaG8gImNvbmZpZ3VyZToxMzE5 OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1 DQogIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9y eS4NCiBpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhl bg0KICAgQ1BQPQ0KQEAgLTEzMDgsMTMgKzEzMzAsMTMgQEANCiAgICMgT24g dGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29t cGlsZXIncyBwYXJzZXIsDQogICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLg0K ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRg0KLSNsaW5lIDEzMTIg ImNvbmZpZ3VyZSINCisjbGluZSAxMzM0ICJjb25maWd1cmUiDQogI2luY2x1 ZGUgImNvbmZkZWZzLmgiDQogI2luY2x1ZGUgPGFzc2VydC5oPg0KIFN5bnRh eCBFcnJvcg0KIEVPRg0KIGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNf ZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiDQoteyAoZXZhbCBlY2hv IGNvbmZpZ3VyZToxMzE4OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFj X3RyeSkgMj4mNTsgfQ0KK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MTM0MDog XCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0NCiBh Y19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dGANCiBpZiB0ZXN0 IC16ICIkYWNfZXJyIjsgdGhlbg0KICAgOg0KQEAgLTEzMjUsMTMgKzEzNDcs MTMgQEANCiAgIHJtIC1yZiBjb25mdGVzdCoNCiAgIENQUD0iJHtDQy1jY30g LUUgLXRyYWRpdGlvbmFsLWNwcCINCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19l eHQgPDxFT0YNCi0jbGluZSAxMzI5ICJjb25maWd1cmUiDQorI2xpbmUgMTM1 MSAiY29uZmlndXJlIg0KICNpbmNsdWRlICJjb25mZGVmcy5oIg0KICNpbmNs dWRlIDxhc3NlcnQuaD4NCiBTeW50YXggRXJyb3INCiBFT0YNCiBhY190cnk9 IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRl c3Qub3V0Ig0KLXsgKGV2YWwgZWNobyBjb25maWd1cmU6MTMzNTogXCIkYWNf dHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0NCit7IChldmFs IGVjaG8gY29uZmlndXJlOjEzNTc6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZh bCAkYWNfdHJ5KSAyPiY1OyB9DQogYWNfZXJyPWBncmVwIC12ICdeICorJyBj b25mdGVzdC5vdXRgDQogaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4NCiAg IDoNCkBAIC0xMzU0LDEyICsxMzc2LDEyIEBADQogZWNobyAiJGFjX3QiIiRD UFAiIDE+JjYNCiANCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgQU5TSSBD IGhlYWRlciBmaWxlcyIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmln dXJlOjEzNTg6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+ JjUNCitlY2hvICJjb25maWd1cmU6MTM4MDogY2hlY2tpbmcgZm9yIEFOU0kg QyBoZWFkZXIgZmlsZXMiID4mNQ0KIGlmIGV2YWwgInRlc3QgXCJgZWNobyAn JCcneydhY19jdl9oZWFkZXJfc3RkYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVu DQogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KIGVsc2UN CiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YNCi0jbGluZSAxMzYz ICJjb25maWd1cmUiDQorI2xpbmUgMTM4NSAiY29uZmlndXJlIg0KICNpbmNs dWRlICJjb25mZGVmcy5oIg0KICNpbmNsdWRlIDxzdGRsaWIuaD4NCiAjaW5j bHVkZSA8c3RkYXJnLmg+DQpAQCAtMTM2Nyw3ICsxMzg5LDcgQEANCiAjaW5j bHVkZSA8ZmxvYXQuaD4NCiBFT0YNCiBhY190cnk9IiRhY19jcHAgY29uZnRl c3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0Ig0KLXsgKGV2 YWwgZWNobyBjb25maWd1cmU6MTM3MTogXCIkYWNfdHJ5XCIpIDE+JjU7IChl dmFsICRhY190cnkpIDI+JjU7IH0NCit7IChldmFsIGVjaG8gY29uZmlndXJl OjEzOTM6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1 OyB9DQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXRgDQog aWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4NCiAgIHJtIC1yZiBjb25mdGVz dCoNCkBAIC0xMzg0LDcgKzE0MDYsNyBAQA0KIGlmIHRlc3QgJGFjX2N2X2hl YWRlcl9zdGRjID0geWVzOyB0aGVuDQogICAjIFN1bk9TIDQueCBzdHJpbmcu aCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuDQog Y2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRg0KLSNsaW5lIDEzODggImNv bmZpZ3VyZSINCisjbGluZSAxNDEwICJjb25maWd1cmUiDQogI2luY2x1ZGUg ImNvbmZkZWZzLmgiDQogI2luY2x1ZGUgPHN0cmluZy5oPg0KIEVPRg0KQEAg LTE0MDIsNyArMTQyNCw3IEBADQogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0 ZGMgPSB5ZXM7IHRoZW4NCiAgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMg bm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4NCiBjYXQgPiBj b25mdGVzdC4kYWNfZXh0IDw8RU9GDQotI2xpbmUgMTQwNiAiY29uZmlndXJl Ig0KKyNsaW5lIDE0MjggImNvbmZpZ3VyZSINCiAjaW5jbHVkZSAiY29uZmRl ZnMuaCINCiAjaW5jbHVkZSA8c3RkbGliLmg+DQogRU9GDQpAQCAtMTQyMyw3 ICsxNDQ1LDcgQEANCiAgIDoNCiBlbHNlDQogICBjYXQgPiBjb25mdGVzdC4k YWNfZXh0IDw8RU9GDQotI2xpbmUgMTQyNyAiY29uZmlndXJlIg0KKyNsaW5l IDE0NDkgImNvbmZpZ3VyZSINCiAjaW5jbHVkZSAiY29uZmRlZnMuaCINCiAj aW5jbHVkZSA8Y3R5cGUuaD4NCiAjZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8 PSAoYykgJiYgKGMpIDw9ICd6JykNCkBAIC0xNDM0LDcgKzE0NTYsNyBAQA0K IGV4aXQgKDApOyB9DQogDQogRU9GDQotaWYgeyAoZXZhbCBlY2hvIGNvbmZp Z3VyZToxNDM4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5r KSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3QgJiYgKC4vY29uZnRlc3Q7 IGV4aXQpIDI+L2Rldi9udWxsDQoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3Vy ZToxNDYwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAy PiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3QgJiYgKC4vY29uZnRlc3Q7IGV4 aXQpIDI+L2Rldi9udWxsDQogdGhlbg0KICAgOg0KIGVsc2UNCkBAIC0xNDYx LDE3ICsxNDgzLDE3IEBADQogZG8NCiBhY19zYWZlPWBlY2hvICIkYWNfaGRy IiB8IHNlZCAneSUuLystJV9fcF8lJ2ANCiBlY2hvICRhY19uICJjaGVja2lu ZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmln dXJlOjE0NjU6IGNoZWNraW5nIGZvciAkYWNfaGRyIiA+JjUNCitlY2hvICJj b25maWd1cmU6MTQ4NzogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQ0KIGlm IGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3Nh ZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbg0KICAgZWNobyAkYWNfbiAiKGNh Y2hlZCkgJGFjX2MiIDE+JjYNCiBlbHNlDQogICBjYXQgPiBjb25mdGVzdC4k YWNfZXh0IDw8RU9GDQotI2xpbmUgMTQ3MCAiY29uZmlndXJlIg0KKyNsaW5l IDE0OTIgImNvbmZpZ3VyZSINCiAjaW5jbHVkZSAiY29uZmRlZnMuaCINCiAj aW5jbHVkZSA8JGFjX2hkcj4NCiBFT0YNCiBhY190cnk9IiRhY19jcHAgY29u ZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0Ig0KLXsg KGV2YWwgZWNobyBjb25maWd1cmU6MTQ3NTogXCIkYWNfdHJ5XCIpIDE+JjU7 IChldmFsICRhY190cnkpIDI+JjU7IH0NCit7IChldmFsIGVjaG8gY29uZmln dXJlOjE0OTc6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAy PiY1OyB9DQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXRg DQogaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4NCiAgIHJtIC1yZiBjb25m dGVzdCoNCkBAIC0xNTAwLDEyICsxNTIyLDEyIEBADQogDQogIyBDaGVja3Mg Zm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFj dGVyaXN0aWNzLg0KIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciB1aWRfdCBp biBzeXMvdHlwZXMuaCIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmln dXJlOjE1MDQ6IGNoZWNraW5nIGZvciB1aWRfdCBpbiBzeXMvdHlwZXMuaCIg PiY1DQorZWNobyAiY29uZmlndXJlOjE1MjY6IGNoZWNraW5nIGZvciB1aWRf dCBpbiBzeXMvdHlwZXMuaCIgPiY1DQogaWYgZXZhbCAidGVzdCBcImBlY2hv ICckJyd7J2FjX2N2X3R5cGVfdWlkX3QnK3NldH0nYFwiID0gc2V0IjsgdGhl bg0KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYNCiBlbHNl DQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GDQotI2xpbmUgMTUw OSAiY29uZmlndXJlIg0KKyNsaW5lIDE1MzEgImNvbmZpZ3VyZSINCiAjaW5j bHVkZSAiY29uZmRlZnMuaCINCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQog RU9GDQpAQCAtMTUzNCw3ICsxNTU2LDcgQEANCiBmaQ0KIA0KIGVjaG8gJGFj X24gImNoZWNraW5nIHR5cGUgb2YgYXJyYXkgYXJndW1lbnQgdG8gZ2V0Z3Jv dXBzIiIuLi4gJGFjX2MiIDE+JjYNCi1lY2hvICJjb25maWd1cmU6MTUzODog Y2hlY2tpbmcgdHlwZSBvZiBhcnJheSBhcmd1bWVudCB0byBnZXRncm91cHMi ID4mNQ0KK2VjaG8gImNvbmZpZ3VyZToxNTYwOiBjaGVja2luZyB0eXBlIG9m IGFycmF5IGFyZ3VtZW50IHRvIGdldGdyb3VwcyIgPiY1DQogaWYgZXZhbCAi dGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfZ2V0Z3JvdXBzJytzZXR9 J2BcIiA9IHNldCI7IHRoZW4NCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRh Y19jIiAxPiY2DQogZWxzZQ0KQEAgLTE1NDIsNyArMTU2NCw3IEBADQogICBh Y19jdl90eXBlX2dldGdyb3Vwcz1jcm9zcw0KIGVsc2UNCiAgIGNhdCA+IGNv bmZ0ZXN0LiRhY19leHQgPDxFT0YNCi0jbGluZSAxNTQ2ICJjb25maWd1cmUi DQorI2xpbmUgMTU2OCAiY29uZmlndXJlIg0KICNpbmNsdWRlICJjb25mZGVm cy5oIg0KIA0KIC8qIFRoYW5rcyB0byBNaWtlIFJlbmRlbGwgZm9yIHRoaXMg dGVzdC4gICovDQpAQCAtMTU2Nyw3ICsxNTg5LDcgQEANCiB9DQogDQogRU9G DQotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNTcxOiBcIiRhY19saW5r XCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMg Y29uZnRlc3QgJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsDQor aWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNTkzOiBcIiRhY19saW5rXCIp IDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29u ZnRlc3QgJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsDQogdGhl bg0KICAgICBhY19jdl90eXBlX2dldGdyb3Vwcz1naWRfdA0KIGVsc2UNCkBA IC0xNTgxLDcgKzE2MDMsNyBAQA0KIA0KIGlmIHRlc3QgJGFjX2N2X3R5cGVf Z2V0Z3JvdXBzID0gY3Jvc3M7IHRoZW4NCiAgICAgICAgIGNhdCA+IGNvbmZ0 ZXN0LiRhY19leHQgPDxFT0YNCi0jbGluZSAxNTg1ICJjb25maWd1cmUiDQor I2xpbmUgMTYwNyAiY29uZmlndXJlIg0KICNpbmNsdWRlICJjb25mZGVmcy5o Ig0KICNpbmNsdWRlIDx1bmlzdGQuaD4NCiBFT0YNCkBAIC0xNjA3LDEyICsx NjI5LDEyIEBADQogDQogIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25z Lg0KIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciB2cHJpbnRmIiIuLi4gJGFj X2MiIDE+JjYNCi1lY2hvICJjb25maWd1cmU6MTYxMTogY2hlY2tpbmcgZm9y IHZwcmludGYiID4mNQ0KK2VjaG8gImNvbmZpZ3VyZToxNjMzOiBjaGVja2lu ZyBmb3IgdnByaW50ZiIgPiY1DQogaWYgZXZhbCAidGVzdCBcImBlY2hvICck Jyd7J2FjX2N2X2Z1bmNfdnByaW50Zicrc2V0fSdgXCIgPSBzZXQiOyB0aGVu DQogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KIGVsc2UN CiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YNCi0jbGluZSAxNjE2 ICJjb25maWd1cmUiDQorI2xpbmUgMTYzOCAiY29uZmlndXJlIg0KICNpbmNs dWRlICJjb25mZGVmcy5oIg0KIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5l IF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywN CiAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciB2cHJpbnRmKCk7 IGJlbG93LiAgKi8NCkBAIC0xNjM1LDcgKzE2NTcsNyBAQA0KIA0KIDsgcmV0 dXJuIDA7IH0NCiBFT0YNCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE2 Mzk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7 IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbg0KK2lmIHsgKGV2YWwgZWNo byBjb25maWd1cmU6MTY2MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAk YWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuDQog ICBybSAtcmYgY29uZnRlc3QqDQogICBldmFsICJhY19jdl9mdW5jX3Zwcmlu dGY9eWVzIg0KIGVsc2UNCkBAIC0xNjU5LDEyICsxNjgxLDEyIEBADQogDQog aWYgdGVzdCAiJGFjX2N2X2Z1bmNfdnByaW50ZiIgIT0geWVzOyB0aGVuDQog ZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIF9kb3BybnQiIi4uLiAkYWNfYyIg MT4mNg0KLWVjaG8gImNvbmZpZ3VyZToxNjYzOiBjaGVja2luZyBmb3IgX2Rv cHJudCIgPiY1DQorZWNobyAiY29uZmlndXJlOjE2ODU6IGNoZWNraW5nIGZv ciBfZG9wcm50IiA+JjUNCiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3sn YWNfY3ZfZnVuY19fZG9wcm50JytzZXR9J2BcIiA9IHNldCI7IHRoZW4NCiAg IGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2DQogZWxzZQ0KICAg Y2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRg0KLSNsaW5lIDE2NjggImNv bmZpZ3VyZSINCisjbGluZSAxNjkwICJjb25maWd1cmUiDQogI2luY2x1ZGUg ImNvbmZkZWZzLmgiDQogLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19z dHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLA0KICAg ICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIF9kb3BybnQoKTsgYmVs b3cuICAqLw0KQEAgLTE2ODcsNyArMTcwOSw3IEBADQogDQogOyByZXR1cm4g MDsgfQ0KIEVPRg0KLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTY5MTog XCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAm JiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuDQoraWYgeyAoZXZhbCBlY2hvIGNv bmZpZ3VyZToxNzEzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19s aW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4NCiAgIHJt IC1yZiBjb25mdGVzdCoNCiAgIGV2YWwgImFjX2N2X2Z1bmNfX2RvcHJudD15 ZXMiDQogZWxzZQ0KQEAgLTE4NzEsNiArMTg5Myw3IEBADQogcyVATUFJTE1B Tl9HSURAJSRNQUlMTUFOX0dJRCVnDQogcyVATUFJTF9HSURAJSRNQUlMX0dJ RCVnDQogcyVAQ0dJX0dJREAlJENHSV9HSUQlZw0KK3MlQENHSUVYVEAlJENH SUVYVCVnDQogcyVARlFETkAlJEZRRE4lZw0KIHMlQFVSTEAlJFVSTCVnDQog cyVAQ1BQQCUkQ1BQJWcNCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5vcmln L2NvbmZpZ3VyZS5pbiBtYWlsbWFuL2NvbmZpZ3VyZS5pbg0KLS0tIG1haWxt YW4ub3JpZy9jb25maWd1cmUuaW4JU2F0IEF1ZyAgOCAxNDoxNToyOCAxOTk4 DQorKysgbWFpbG1hbi9jb25maWd1cmUuaW4JRnJpIEF1ZyAyMSAxNToyMDox NSAxOTk4DQpAQCAtMjEzLDcgKzIxMyw3IEBADQogaWYgdGVzdCAteiAiJHdp dGhfbWFpbF9naWQiDQogdGhlbg0KICAgICBBQ19DQUNIRV9WQUwoYWNfY3Zf Z3JvdXBfbWFpbCwgW2RubA0KLSAgICBhY19jdl9ncm91cF9tYWlsPSJvdGhl ciBtYWlsIGRhZW1vbiJdKQ0KKyAgICBhY19jdl9ncm91cF9tYWlsPSJub2Zp bGVzIG90aGVyIG1haWwgZGFlbW9uIl0pDQogZWxzZQ0KICAgICBhY19jdl9n cm91cF9tYWlsPSR3aXRoX21haWxfZ2lkDQogZmkNCkBAIC0yNTUsNiArMjU1 LDIwIEBADQogDQogI01NX0ZJTkRfVVNFUl9JRChBTElBU19VSUQsIG1haWxt YW4sIGFsaWFzX3dyYXBwZXIpDQogI01NX0ZJTkRfR1JPVVBfSUQoQUxJQVNf R0lELCBtYWlsLCBhbGlhc193cmFwcGVyKQ0KKw0KKyMgQ0dJIGV4dGVuc2lv biBjaGVja2luZw0KK0FDX1NVQlNUKENHSUVYVCkNCitBQ19NU0dfQ0hFQ0tJ TkcoZm9yIENHSSBleHRlbnNpb24pDQorQUNfQVJHX1dJVEgoY2dpLWV4dCwg Ww0KKwktLXdpdGgtY2dpLWV4dCAgICAgICAgc3BlY2lmeSBleHRlbnNpb25z IG9mIENHSSBwcm9ncmFtc10pDQoraWYgdGVzdCAteiAiJHdpdGhfY2dpX2V4 dCINCit0aGVuDQorICAgIENHSUVYVD0nJw0KKyAgICB3aXRoX2NnaV9leHQ9 J25vJw0KK2Vsc2UNCisgICAgQ0dJRVhUPSR3aXRoX2NnaV9leHQNCitmaQ0K K0FDX01TR19SRVNVTFQoJHdpdGhfY2dpX2V4dCkNCiANCiAjIGZpZ3VyZSBv dXQgdGhlIERFRkFVTFRfSE9TVF9OQU1FIGFuZCBERUZBVUxUX1VSTA0KIEFD X1NVQlNUKEZRRE4pDQpkaWZmIC1icnUgLXggQ1ZTIG1haWxtYW4ub3JpZy9j cm9uL01ha2VmaWxlLmluIG1haWxtYW4vY3Jvbi9NYWtlZmlsZS5pbg0KLS0t IG1haWxtYW4ub3JpZy9jcm9uL01ha2VmaWxlLmluCVNhdCBBdWcgIDggMTQ6 MTg6NTMgMTk5OA0KKysrIG1haWxtYW4vY3Jvbi9NYWtlZmlsZS5pbglGcmkg QXVnIDIxIDE0OjU1OjA0IDE5OTgNCkBAIC02Nyw0ICs2Nyw0IEBADQogY2xl YW46DQogDQogZGlzdGNsZWFuOg0KLQktcm0gTWFrZWZpbGUNCisJLXJtIE1h a2VmaWxlIGNyb250YWIuaW4NCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5v cmlnL3NjcmlwdHMvTWFrZWZpbGUuaW4gbWFpbG1hbi9zY3JpcHRzL01ha2Vm aWxlLmluDQotLS0gbWFpbG1hbi5vcmlnL3NjcmlwdHMvTWFrZWZpbGUuaW4J U2F0IEF1ZyAgOCAxNDoxOTo1NCAxOTk4DQorKysgbWFpbG1hbi9zY3JpcHRz L01ha2VmaWxlLmluCUZyaSBBdWcgMjEgMTU6MTI6MzcgMTk5OA0KQEAgLTMx LDYgKzMxLDcgQEANCiBDQz0JCUBDQ0ANCiBDSE1PRD0gIAlAQ0hNT0RADQog SU5TVEFMTD0JQElOU1RBTExADQorQ0dJRVhUPQkJQENHSUVYVEANCiANCiBE RUZTPSAgIAlAREVGU0ANCiANCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5v cmlnL3NyYy9NYWtlZmlsZS5pbiBtYWlsbWFuL3NyYy9NYWtlZmlsZS5pbg0K LS0tIG1haWxtYW4ub3JpZy9zcmMvTWFrZWZpbGUuaW4JU2F0IEF1ZyAgOCAx NDoyMDoxNiAxOTk4DQorKysgbWFpbG1hbi9zcmMvTWFrZWZpbGUuaW4JRnJp IEF1ZyAyMSAxNToyMTo1NiAxOTk4DQpAQCAtNDUsNyArNDUsNyBAQA0KIE9Q VD0JCUBPUFRADQogQ0ZMQUdTPQkJJChPUFQpICQoREVGUykNCiBDR0lESVI9 IAkkKGV4ZWNfcHJlZml4KS9jZ2ktYmluDQotQ0dJRVhUPQkJDQorQ0dJRVhU PQkJQENHSUVYVEANCiBNQUlMRElSPQkkKGV4ZWNfcHJlZml4KS9tYWlsDQog DQogU0hFTEw9CQkvYmluL3NoDQo= ---456965764-2069813568-904564521=:31564-- From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Sat Aug 1 00:31:24 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 31 Jul 1998 19:31:24 -0400 (EDT) Subject: [Mailman-Developers] Reposting Form Data Message-ID: <13762.21452.924625.782129@anthem.cnri.reston.va.us> Maybe someone out there with more HTTP experience than me can answer this question. If I have a CGI script that issues a redirect using the `Location:' header, I can get the Web browser to go to the relocated page with no problem. It even still shows the original URL in browser. Cool so far. However, if what I'm doing is posting some form data, the browser gets redirected, but the form data doesn't get reposted to the new URL. Verified under NS4/Unix and IE3. This is a real pain for something I'm trying to add to Mailman. I'm sure there's some haughty security justification for the non-reposting of form data, so the natural question is: can I get around this? :-) Thanks, -Barry From fleck@informatik.uni-bonn.de, bwarsaw@CNRI.Reston.Va.US Sat Aug 1 00:59:28 1998 From: fleck@informatik.uni-bonn.de, bwarsaw@CNRI.Reston.Va.US (Markus Fleck) Date: Sat, 01 Aug 1998 01:59:28 +0200 Subject: [Mailman-Developers] Re: [Mailman-Users] Reposting Form Data References: <13762.21452.924625.782129@anthem.cnri.reston.va.us> Message-ID: <35C25A60.6361@informatik.uni-bonn.de> Barry A. Warsaw wrote: > [Redirecting POST] > I'm sure there's some haughty security justification for the > non-reposting of form data, so the natural question is: can I get > around this? :-) I don't think so. You either have to post to the "other" URL yourself in the CGI script (eek), or try to attach your parameters, URL-encoded, to the URL (as a GET request). The latter aproach looks ugly in browsers (and might reveal passwords in clear text), and the former might be a security problem (if access to the "other" CGI script is restricted). OTOH, if you're on the same server, you could just exec (or "import") the "other" CGI script directly from the local file system. I don't think that there is a portable way to redirect POSTs. Yours, Markus. From dragondm@delta.integral.org Mon Aug 3 13:39:36 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Mon, 3 Aug 1998 07:39:36 -0500 (CDT) Subject: [Mailman-Developers] Little password tweak... Message-ID: I've been poking 'round 1.0b5.. I've got stuff that I'll be working on, but first I'd thought I'd submit this. It's just a really simple little mnemnonic password generator. Ive been using it fer months on my much-hacked up 1.0b1 install (which should be retiering soon), and it's just a little niceity. Basically, what ye do, is, if ye install the following module, and apply this patch, afterward, instead of your list subscribers getting passwords like 'lPg_' when mailman assigns a password (like during a mass subscribe, or email sub w/ no password supplied), they get passwords like 'cold-blue-tiger', or similar. ----Begin PassGen.py ----- import string, whrandom # this generates (hopefully) easy to remember random passwords -ddm passphrase = [ [ "hot", "cold" , "warm" , "tall", "short", "wide" , "thin", "heavy", "light", "fast" ,"slow", "wet", "dry", "furry", "scaled", "smart", "dumb", "happy", "sad", "sly", "bouncy", "sleepy", "early" ,"late", "wise" ], [ "red", "orange", "yellow", "green", "blue", "violet" , "white", "black", "grey" , "brown", "tan", "silver", "gold", "aqua", "pink" , "navy", "azure","plaid", "paisley", "beige", "clear", "copper" ], [ "dragon", "gryphon", "centaur", "faun", "wolf", "fox" ,"bear", "eagle", "lizard", "newt", "fish", "snake", "horse", "unicorn", "deer", "dog", "cat", "lion", "puma", "rat", "mouse", "racoon", "badger","gopher", "seal", "whale", "mule", "walrus", "otter","turtle", "zebra", "tiger", "dingo" ,"koala", "kangaroo", "dinosaur", "pegasus", "bigfoot", "beaver", "possum", "skunk", "hawk", "orca", "panda", "raven" ] ] rgen= whrandom.whrandom() def RandomPhrase(): """Generates random, AOL-style passphrases. """ p=[] for each in passphrase: p.append(rgen.choice(each)) return string.join(p,"-") ----End PassGen.py ----- ----Begin patch -------- diff -c -r /tmp/mailman-1.0b5/Mailman/Cgi/admin.py Mailman/Cgi/admin.py *** Mailman/Cgi/admin.py Mon Jul 27 17:48:31 1998 --- Mailman/Cgi/admin.py Mon Aug 3 06:31:12 1998 *************** *** 27,32 **** --- 27,34 ---- import paths # path hacking from Mailman import Utils, MailList, Errors, MailCommandHandler from Mailman import Cookie + from Mailman import PassGen + from Mailman.htmlformat import * from Mailman.Crypt import crypt from Mailman import mm_cfg *************** *** 711,718 **** if not lst.nondigestable: digest = 1 try: ! lst.ApprovedAddMember(new_name, (Utils.GetRandomSeed() + ! Utils.GetRandomSeed()), digest) subscribe_success.append(new_name) except Errors.MMAlreadyAMember: subscribe_errors.append((new_name, 'Already a member')) --- 713,719 ---- if not lst.nondigestable: digest = 1 try: ! lst.ApprovedAddMember(new_name, PassGen.RandomPhrase(), digest) subscribe_success.append(new_name) except Errors.MMAlreadyAMember: subscribe_errors.append((new_name, 'Already a member')) diff -c -r /tmp/mailman-1.0b5/Mailman/MailCommandHandler.py Mailman/MailCommandHandler.py *** Mailman/MailCommandHandler.py Mon Jul 27 17:48:31 1998 --- Mailman/MailCommandHandler.py Mon Aug 3 06:51:54 1998 *************** *** 29,35 **** import mm_cfg import Utils import Pending ! option_descs = { 'digest' : 'receive mail from the list bundled together instead of ' --- 29,35 ---- import mm_cfg import Utils import Pending ! import PassGen option_descs = { 'digest' : 'receive mail from the list bundled together instead of ' *************** *** 413,420 **** address = "" done_digest = 0 if not len(args): ! password = "%s%s" % (Utils.GetRandomSeed(), ! Utils.GetRandomSeed()) elif len(args) > 3: self.AddError("Usage: subscribe [password] " "[digest|nodigest] [address=]") --- 413,419 ---- address = "" done_digest = 0 if not len(args): ! password = PassGen.RandomPhrase() elif len(args) > 3: self.AddError("Usage: subscribe [password] " "[digest|nodigest] [address=]") *************** *** 437,444 **** "[address=]") return if not password: ! password = "%s%s" % (Utils.GetRandomSeed(), ! Utils.GetRandomSeed()) if not address: pending_addr = mail.GetSender() else: --- 436,442 ---- "[address=]") return if not password: ! password = PassGen.RandomPhrase() if not address: pending_addr = mail.GetSender() else: ----End patch -------- -The Dragon De Monsyne From cklempay@acm.jhu.edu Mon Aug 3 18:37:30 1998 From: cklempay@acm.jhu.edu (Corbett J. Klempay) Date: Mon, 3 Aug 1998 13:37:30 -0400 (EDT) Subject: [Mailman-Developers] Odd b5 behavior Message-ID: I've been having this problem for a few days, and I am just trying to find out if anyone else here is experiencing a similar phenomenon (so that maybe I'll get lucky and talk to you and figure out what the story is): - 1.0b5 + sendmail 8.9.1 - RH Linux 5.1 (if you need more info, it's also http://www2.acm.jhu.edu -- there's lots of stuff there) There was some weirdness with permissions being set wrong with Linux + b5, but Barry issued a patch in about 2 seconds flat that cleared that one up. The current problem is that I have several lists set up, but if you send mail to them (like test@acm.jhu.edu), your mail is swallowed into a bottomless pit...it never sees the light of day again. If you look at /var/log/maillog, it claims the mail has been sent. Users have that they did get their monthly password reminder from Mailman itself, however. I don't think this is really something misconfigured with sendmail on my end; this same setup was chugging right along with 1.0b4 until I tried to switch. ------------------------------------------------------------------------------- Corbett J. Klempay Quote of the Week: http://www2.acm.jhu.edu/~cklempay "Money is the root of all good." PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 ------------------------------------------------------------------------------- From klm@python.org Mon Aug 3 19:00:11 1998 From: klm@python.org (Ken Manheimer) Date: Mon, 3 Aug 1998 14:00:11 -0400 (EDT) Subject: [Mailman-Developers] Odd b5 behavior In-Reply-To: Message-ID: Corbett, i've been hoping to find a minute to look into this behavior - i may be able to get to it later today. In the meanwhile, please check for any relevant entries in your ~mailman/logs/errors log file, and if there are any, send copies to me. And let me see if i understand correctly - you say that /var/log/maillog indicates that your sendmail sent the messages to the users, but the users never see them? This would suggest that the messages *really* foul up the receiving side - and that brings one possibilty to mind. There is a known bug in some recent versions of sendmail (8.8.x for some x, and 8.9.0) such that the sendmail will core dump when attempting to deliver mailman's (or any 8-bit encoded) Mime-format digests in certain (somewhat uncommon) circumstances. The question then is, were the messages that never appeared in the users mailbox Mime digests? And if not, could you construct a repeatable test that at least reduces the likelihood that the problem is on the receiving ends? For that matter, might you happen to be running sendmail 8.8.x or 8.9.0? Your sendmail may be getting so far as negotiating the delivery and then failing partway through... With the info available currently it's hard to know what of mailman to investigate on this end, since mailman evidently got the messages to your MTA. Ken Manheimer klm@python.org 703 620-8990 x268 (orporation for National Research |nitiatives # If you appreciate Python, consider joining the PSA! # # . # From janne@avocado.pc.helsinki.fi Mon Aug 3 19:09:12 1998 From: janne@avocado.pc.helsinki.fi (Janne Sinkkonen) Date: 03 Aug 1998 21:09:12 +0300 Subject: [Mailman-Developers] Odd b5 behavior In-Reply-To: Ken Manheimer's message of "Mon, 3 Aug 1998 14:00:11 -0400 (EDT)" References: Message-ID: Ken Manheimer writes: > There is a known bug in some recent versions of sendmail (8.8.x for some > x, and 8.9.0) such that the sendmail will core dump when attempting to > deliver mailman's (or any 8-bit encoded) Mime-format digests in certain > (somewhat uncommon) circumstances. The question then is, were the > messages that never appeared in the users mailbox Mime digests? And if > not, could you construct a repeatable test that at least reduces the > likelihood that the problem is on the receiving ends? For that matter, > might you happen to be running sendmail 8.8.x or 8.9.0? Your sendmail > may be getting so far as negotiating the delivery and then failing > partway through... He should check his mail spool. If sendmail dies, it leaves the undelivered message to the spool, which then starts to gradually grow. When I had a broken sendmail, most of the messages still went through. -- Janne From Corbett J. Klempay" Message-ID: Ken & company: More info...to correct myself earlier on the sendmail logs (and to be precise), I sent a test message (no MIME, just a 1 sentence text message) to one of our small lists (it's the list shown at http://www2.acm.jhu.edu/mailman/listinfo/tm). Sending out that message generated the below entries in /var/log/maillog: Aug 3 14:04:36 chimera sendmail[15085]: OAA15085: from=, size=657, class=0, pri=30657, nrcpts=1, msgid=, proto=SMTP, relay=cklempay@localhost Aug 3 14:04:36 chimera sendmail[15086]: OAA15086: clone OAA15085, owner=tm-admin Aug 3 14:04:37 chimera sendmail[15086]: OAA15086: to=|"/home/mailman/mail/wrapper post tm", delay=00:00:01, xdelay=00:00:01, mailer=prog, stat=Sent As for ~mailman/logs/errors...there is no such file in that directory (so no recorded errors, I guess). I'm running sendmail 8.9.1. All of the previous messages I tried were simple text messages (with whole bodies of things like "Holler if ya hear me"). ------------------------------------------------------------------------------- Corbett J. Klempay Quote of the Week: http://www2.acm.jhu.edu/~cklempay "Money is the root of all good." PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 ------------------------------------------------------------------------------- From janne@avocado.pc.helsinki.fi Mon Aug 3 19:38:44 1998 From: janne@avocado.pc.helsinki.fi (Janne Sinkkonen) Date: 03 Aug 1998 21:38:44 +0300 Subject: [Mailman-Developers] Re: [Mailman-Users] Re: [Mailman-Developers] Odd b5 behavior In-Reply-To: "Corbett J. Klempay"'s message of "Mon, 3 Aug 1998 14:12:31 -0400 (EDT)" References: Message-ID: "Corbett J. Klempay" writes: > How do I check? Is this what I see when I do mailq? If that's it, it's > empty. Ok. > > When I had a broken sendmail, most of the messages still went through. > > I don't know that my sendmail is really broken..it works with b4, and all > of our non-mailman mail is running smoothly. At least the MIME bug is not your problem, since it doesn't exist in 8.9.1. (BTW, practically all of our non-mailman mail ran smoothly as well, so that's not an indicator of anything.) To see whether the mail really goes to the MTA, change the logging level of sendmail high enough (if it isn't). That's just the 'O' thing in sendmail.cf - it is easy to edit manually. -- Janne From root@chronis.icgroup.com Mon Aug 3 20:19:05 1998 From: root@chronis.icgroup.com (root) Date: Mon, 3 Aug 1998 15:19:05 -0400 Subject: [Mailman-Developers] confirmation duplicates and stuff Message-ID: <19980803151905.54813@chronis.icgroup.com> there's a quick and easy fix to the confirmation duplicates bug. in the file MailCommandHandler.py, at the end of the definition of the ProcessConfirmCommand method, add "self.__NoMailCmdResponse = 1". This will cause the confirmation handler to either send out only the welcome to the list message, or only the error message if there is one. I also noticed that listed under Bugs at www.list.org was the fact that confirmations where always called, even when the subscribing address has to be approved administratively. I'd like to point out that the confirmatin step does not take place when a memeber is subscribed via the admin/membership management cgi. However, I believe it does when someone subscribes to a closed list via mail. I thought that we had all pretty much stated that we always wanted confirmations to happen, but i guess not, seeing how this is listed as a bug. i can see how it could be inconvenient. The question is: what do we do about this? do we: 1) drop the confirmation step completely when a list has closed subscriptions? or 2) make the confirmation step an option only for closed subscriptions? #1 is FAR simpler to implement because it doesn't involve any changes to the cgi admin interface. #2 would require a good bit of changes to the interface: either only presenting the confirmation as an option when the list is closed, or allowing it as an option and presenting an error if anyone chooses not have confirmations for an open list. thoughts? scott From klm@python.org Mon Aug 3 22:46:03 1998 From: klm@python.org (Ken Manheimer) Date: Mon, 3 Aug 1998 17:46:03 -0400 (EDT) Subject: [Mailman-Developers] Sendmail.cf wizard question - virtual-hosting Message-ID: <13766.9360.336144.362732@glyph.cnri.reston.va.us> I have a question for any sendmail.cf wizards out there - a hack to a recent cf ruleset (mine is from 8.9.0) to circumvent what i consider a bug, or at least a misfeature, that interferes with using sendmail for "virtual hosting". The problem was that no matter what i did (building the cf with masquerading, virtual user, whatever it was), the "to:" header of messages posted to a maillist was always transformed to the primary address of the host where the maillist was situated, even when the original message was addressed to one of the "virtual" host addrs. I eventually poked and prodded in the rulesets (shudder), and discovered that commenting out one rule, which is supposed to use the name server to canonicalize an address, prevents that transformation from happening. (It's part of ruleset 96, which was apparently is "the bottom half of ruleset 3" - boy, i *do not like* touching cf ruleset code!) I've been running this change for a few weeks on my workstation and on python.org, and it doesn't seem to be causing any problems. Even better (:-), it does seem to prevent the unwanted transformation of the original "to:" addresses. However, i don't _really_ know that my change won't disrupt something that isn't exercised on my machines. So i'm hoping that informed sendmail folk out there might be able to do a sanity check on this change. I'm including, below, an artifical diff of the cf file before and after, to show the specific difference, for a sendmail 8.9.0 cf file. Please let me know what you think, if you have some clear knowledge of this stuff! Ken Manheimer klm@python.org 703 620-8990 x268 (orporation for National Research |nitiatives # If you appreciate Python, consider joining the PSA! # # . # *** sendmail.cf 1998/08/03 21:27:06 1.6 --- sendmail.cf 1998/08/03 21:27:17 *************** *** 516,522 **** R$* < @ $+ . . UUCP . > $* $@ $1 < @ $2 . > $3 # pass to name server to make hostname canonical ! R$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4 # local host aliases and pseudo-domains are always canonical R$* < @ $=w > $* $: $1 < @ $2 . > $3 --- 516,524 ---- R$* < @ $+ . . UUCP . > $* $@ $1 < @ $2 . > $3 # pass to name server to make hostname canonical ! # klm - looks like this converts to primary canonical, which transforms ! # e.g. a virtual-hosted "to:" address when we don't want it to be... ! #R$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4 # local host aliases and pseudo-domains are always canonical R$* < @ $=w > $* $: $1 < @ $2 . > $3 From root@chronis.icgroup.com Tue Aug 4 01:38:51 1998 From: root@chronis.icgroup.com (root) Date: Mon, 3 Aug 1998 20:38:51 -0400 Subject: [Mailman-Developers] REQUEST_URI not so reliable Message-ID: <19980803203851.49009@chronis.icgroup.com> I just helped a friend put mailman on a linux box that was running a slightly old version of redhat (4.X??) which in turn came with apache version 1.1.3. It appears that with that version of apache, the REQUEST_URI environmental variable is not set for transactions to the localhost. this was causing the admin cgi to always return to the AdminOverview page. because there was a line in admin.py that formated the admlogin.txt template with this dict: dict = { ... "path": os.environ.get("REQUEST_URI", "/mailman/admin") ... } I upgraded his server so other things wouldn't break, but if we want to make mailman work for that (granted ancient) version of apache, the fix for this script was to replace the above with dict = {... "path": os.environ.get("REQUEST_URI", "mailman/admin/" + list_name) .... } there may be other places that use that, like private, listinfo, etc. scott From dragondm@delta.integral.org Tue Aug 4 03:05:52 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Mon, 3 Aug 1998 21:05:52 -0500 (CDT) Subject: [Mailman-Developers] Sendmail.cf wizard question - virtual-hosting In-Reply-To: <13766.9360.336144.362732@glyph.cnri.reston.va.us> Message-ID: On Mon, 3 Aug 1998, Ken Manheimer wrote: > I have a question for any sendmail.cf wizards out there - a hack to a > recent cf ruleset (mine is from 8.9.0) to circumvent what i consider a > bug, or at least a misfeature, that interferes with using sendmail for > "virtual hosting". > > The problem was that no matter what i did (building the cf with > masquerading, virtual user, whatever it was), the "to:" header of > messages posted to a maillist was always transformed to the primary > address of the host where the maillist was situated, even when the > original message was addressed to one of the "virtual" host addrs. I > eventually poked and prodded in the rulesets (shudder), and discovered > that commenting out one rule, which is supposed to use the name server > to canonicalize an address, prevents that transformation from > happening. (It's part of ruleset 96, which was apparently is "the > bottom half of ruleset 3" - boy, i *do not like* touching cf ruleset > code!) Hmmmm... I have a Debian linux system with Sendmail 8.8.5 on it, and I actually have this working. I didn't have to change the sendmail.cf by hand, tho. My cf is generated by the sendmailconfig tool that comes with debian (tho' I do grok sendmail.cf's reasonabally well), which uses M4. The keys to getting this to work are: 1) use the limited_masquerade feature (see sendmail.org website) 2) the vhost name must be in class w (i.e. in the sendmail.cw file, usually) 3) The major key is your DNS setup. the vhost has to have an Address record, or just an MX. It can't be a CNAME (I think this is spec'ed in the RFC's somewhere. ) -The Dragon De Monsyne From scott@chronis.icgroup.com Tue Aug 4 04:48:30 1998 From: scott@chronis.icgroup.com (Scott) Date: Mon, 3 Aug 1998 23:48:30 -0400 Subject: [Mailman-Developers] password from a tty Message-ID: <19980803234830.47258@chronis.icgroup.com> here's a patch that will get passwords from a tty with echo off for mmsitepass and newlist only if it's possible, otherwise it gets the password the normal, more portable, less secure way. scott diff -c Mailman/Utils.py /home/mm/Mailman/Utils.py *** Mailman/Utils.py Mon Jul 27 18:48:31 1998 --- /home/mm/Mailman/Utils.py Mon Aug 3 23:27:55 1998 *************** *** 429,431 **** --- 429,476 ---- if raw: return template % dict return wrap(template % dict) + + + def getapwtty(prmpt="Password: "): + wrote_prmpt = 0 + try: + import termios, TERMIOS + fd = sys.stdin.fileno() + org = termios.tcgetattr(fd) + new = termios.tcgetattr(fd) + new[3] = new[3] & ~TERMIOS.ECHO + termios.tcsetattr(fd, TERMIOS.TCSANOW, new) + sys.stdout.write(prmpt) + sys.stdout.flush() + wrote_prmpt = 1 + pw = string.strip(raw_input()) + sys.stdout.write("\n") + sys.stdout.flush() + termios.tcsetattr(fd, TERMIOS.TCSAFLUSH, org) + return pw + except: + if wrote_prmpt: + prmpt = "" + pw = string.strip(raw_input(prmtp)) + return pw + + def getpw(): + while 1: + pw1 = getapwtty() + pw2 = getapwtty("Verify: ") + if pw1 == pw2: + break + else: + print "passwords didn't match, try again" + return pw1 + + + + + + + + + + + diff -c bin/mmsitepass /home/mm/bin/mmsitepass *** bin/mmsitepass Mon Jul 27 18:48:31 1998 --- /home/mm/bin/mmsitepass Mon Aug 3 23:32:11 1998 *************** *** 22,38 **** administrator's password can be used, which in turn can be used in most places that a list users password can be used.""" - import sys import paths from Mailman import MailList ! def main(argv): ! if len(sys.argv) != 2: ! print "Usage: mmsitepass password" ! raise SystemExit, 1 l = MailList.MailList() ! l.SetSiteAdminPassword(sys.argv[1]) ! if l.CheckSiteAdminPassword(sys.argv[1]): print "Password changed." raise SystemExit, 0 else: --- 22,36 ---- administrator's password can be used, which in turn can be used in most places that a list users password can be used.""" import paths from Mailman import MailList + from Mailman.Utils import getpw ! def main(): ! print "enter a site password for mailman" ! pw = getpw() l = MailList.MailList() ! if l.CheckSiteAdminPassword(pw): print "Password changed." raise SystemExit, 0 else: *************** *** 40,43 **** raise SystemExit, 1 if __name__ == "__main__": ! main(sys.argv) --- 38,48 ---- raise SystemExit, 1 if __name__ == "__main__": ! main() ! ! ! ! ! ! ! diff -c bin/newlist /home/mm/bin/newlist *** bin/newlist Mon Jul 27 18:48:31 1998 --- /home/mm/bin/newlist Mon Aug 3 23:33:22 1998 *************** *** 71,77 **** if len(argv) > 3: list_pw = argv[3] else: ! list_pw = raw_input("Enter the initial list password: ") newlist = MailList.MailList() pw = crypt(list_pw , Utils.GetRandomSeed()) --- 71,78 ---- if len(argv) > 3: list_pw = argv[3] else: ! print "Please Enter the initial list password." ! list_pw = Utils.getpw() newlist = MailList.MailList() pw = crypt(list_pw , Utils.GetRandomSeed()) From scott@chronis.icgroup.com Wed Aug 5 01:03:26 1998 From: scott@chronis.icgroup.com (Scott) Date: Tue, 4 Aug 1998 20:03:26 -0400 Subject: [Mailman-Developers] run_queue bug Message-ID: <19980804200326.48041@chronis.icgroup.com> run_queue quits with the following traceback whenever i run it with python1.5.1 on an old ret hat linux box :( scott Traceback (innermost last): File "/home/mailman/cron/run_queue", line 31, in ? OutgoingQueue.processQueue() File "/home/mailman/Mailman/OutgoingQueue.py", line 38, in processQueue Utils.TrySMTPDelivery(recip,sender,text,full_fname) File "/home/mailman/Mailman/Utils.py", line 199, in TrySMTPDelivery con = smtplib.SmtpConnection(mm_cfg.SMTPHOST) File "/home/mailman/Mailman/smtplib.py", line 49, in __init__ self.connect() File "/home/mailman/Mailman/smtplib.py", line 54, in connect self._file = self._sock.makefile('r') socket.error: (29, 'Illegal seek') From scott@chronis.icgroup.com Wed Aug 5 02:42:41 1998 From: scott@chronis.icgroup.com (Scott) Date: Tue, 4 Aug 1998 21:42:41 -0400 Subject: [Mailman-Developers] run_queue bug In-Reply-To: <19980804200326.48041@chronis.icgroup.com>; from Scott on Tue, Aug 04, 1998 at 08:03:26PM -0400 References: <19980804200326.48041@chronis.icgroup.com> Message-ID: <19980804214241.47823@chronis.icgroup.com> I don't know all the specifics of why this is happening (seems like some system librarires do a seek while coercing a socket struct to a FILE *?), but the following patch takes use of .makefile() out of smtplib.py and fixes the problem. scott *** /home/mailman/Mailman/smtplib.py Tue Aug 4 00:05:27 1998 --- /home/scott/smtplib.py Tue Aug 4 21:36:19 1998 *************** *** 45,57 **** class SmtpConnection: def __init__(self, host=''): self.host = host - self._file = None self.connect() def connect(self): self._sock = socket(AF_INET, SOCK_STREAM) self._sock.connect(self.host, SMTP_PORT) - self._file = self._sock.makefile('r') self.getresp() def helo(self, host): --- 45,55 ---- *************** *** 103,109 **** # Private crap from here down. def getline(self): ! line = self._file.readline() if not line: raise EOFError if line[-2:] == CRLF: line = line[:-2] elif line[-1:] in CRLF: line = line[:-1] --- 101,114 ---- # Private crap from here down. def getline(self): ! line = "" ! while 1: ! c = self._sock.recv(1) ! if not c: ! break ! line = line + c ! if c == "\n": ! break if not line: raise EOFError if line[-2:] == CRLF: line = line[:-2] elif line[-1:] in CRLF: line = line[:-1] On Tue, Aug 04, 1998 at 08:03:26PM -0400, Scott wrote: | | run_queue quits with the following traceback whenever i run it with | python1.5.1 on an old ret hat linux box :( | | scott | | Traceback (innermost last): | File "/home/mailman/cron/run_queue", line 31, in ? | OutgoingQueue.processQueue() | File "/home/mailman/Mailman/OutgoingQueue.py", line 38, in | processQueue | Utils.TrySMTPDelivery(recip,sender,text,full_fname) | File "/home/mailman/Mailman/Utils.py", line 199, in TrySMTPDelivery | con = smtplib.SmtpConnection(mm_cfg.SMTPHOST) | File "/home/mailman/Mailman/smtplib.py", line 49, in __init__ | self.connect() | File "/home/mailman/Mailman/smtplib.py", line 54, in connect | self._file = self._sock.makefile('r') | socket.error: (29, 'Illegal seek') | | _______________________________________________ | Mailman-Developers maillist - Mailman-Developers@python.org | http://www.python.org/mailman/listinfo/mailman-developers | From scott@chronis.icgroup.com Wed Aug 5 02:46:27 1998 From: scott@chronis.icgroup.com (Scott) Date: Tue, 4 Aug 1998 21:46:27 -0400 Subject: [Mailman-Developers] run_queue bug In-Reply-To: <19980804200326.48041@chronis.icgroup.com>; from Scott on Tue, Aug 04, 1998 at 08:03:26PM -0400 References: <19980804200326.48041@chronis.icgroup.com> Message-ID: <19980804214627.21810@chronis.icgroup.com> Now that i got this working, there's a permissions bug in the mail queue system: my mailqueue looks like this: -rw------- 1 root mailman 1515 Aug 4 19:25 mm_q.2 -rw------- 1 nobody mailman 230 Aug 4 19:59 mm_q.3 -rw------- 1 www mailman 1360 Aug 4 20:12 mm_q.4 so when run_queue runs as user mailman, it can't open the files. I think it got those ownerships from root running newlist, from subscribing someone from the web, and from vmailer doing the delivery to a mailcmd as user nobody. Shouldn't they be made g+rw? scott On Tue, Aug 04, 1998 at 08:03:26PM -0400, Scott wrote: | | run_queue quits with the following traceback whenever i run it with | python1.5.1 on an old ret hat linux box :( | | scott | | Traceback (innermost last): | File "/home/mailman/cron/run_queue", line 31, in ? | OutgoingQueue.processQueue() | File "/home/mailman/Mailman/OutgoingQueue.py", line 38, in | processQueue | Utils.TrySMTPDelivery(recip,sender,text,full_fname) | File "/home/mailman/Mailman/Utils.py", line 199, in TrySMTPDelivery | con = smtplib.SmtpConnection(mm_cfg.SMTPHOST) | File "/home/mailman/Mailman/smtplib.py", line 49, in __init__ | self.connect() | File "/home/mailman/Mailman/smtplib.py", line 54, in connect | self._file = self._sock.makefile('r') | socket.error: (29, 'Illegal seek') | | _______________________________________________ | Mailman-Developers maillist - Mailman-Developers@python.org | http://www.python.org/mailman/listinfo/mailman-developers | From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Wed Aug 5 23:56:14 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Wed, 5 Aug 1998 18:56:14 -0400 (EDT) Subject: [Mailman-Developers] Experimental remote CVS repository Message-ID: <13768.58126.479940.336421@anthem.cnri.reston.va.us> Hi all, I think I finally have a publically accessible read-only remote CVS repository available to y'all. I say "experimental" because I'm not 100% sure it's working, so please try it out. Note that this will keep you on the absolute bleeding edge because syncs are done to the repository on every check-in. Also, by tomorrow or so I hope we'll have a Mailman mailing list you can join to get CVS checkin messages. That's not quite running yet. I may also try to get CVSweb access and remote rsync access if time allows and there is enough demand (and I can polish off my very dusty Perl manual :-). For now, here's what you need to do to check out a copy of the Mailman source code: % cvs -d :pserver:anoncvs@cvs.python.org:/projects/cvsroot login [password is `anoncvs'] % cvs -d :pserver:anoncvs@cvs.python.org:/projects/cvsroot co mailman After that, you don't need to specify a CVSROOT while inside the mailman directory. Please let me know how it goes. -Barry From klm@python.org Thu Aug 6 00:09:59 1998 From: klm@python.org (Ken Manheimer) Date: Wed, 5 Aug 1998 19:09:59 -0400 (EDT) Subject: [Mailman-Developers] Odd b5 behavior In-Reply-To: Message-ID: I've identified the reason for the problem corbett was having, and have a workaround. The problem appears to be another linux-specific item, having to do with the apparent fact that effective gid's are not inherited by forked processes. I'd be curious to get the scoop on this from any linux gurus out there. Corbett was seeing mail submissions completely disappearing - making it to the maillist, but never showing up, without any logged error messages. The failure was happening when the new delivery mechanism was attempting to place the messages on the outgoing queue. The data directory was writable by mailman, and the mail wrapper executable forks and execs the maillist script with the mailman effective group id. However, the delivery mechanism runs in a subsequently forked process of the maillist script - and apparently, forked processes (at least, forked scripts) in linux do *not* inherit the effective group id - contrary to the practice on other unices. Linux folk, is this correct? The immediate workaround for those of you running mailman 1.0b5 under linux is to fiddle with the ownership of the ~mailman/data directory a bit: set the owner id to 'mail' (or whatever your mail process runs with), make sure the group id is 'mailman', and make sure that it enables user and group write. The real question, though, is whether there is any way in linux to enable forked processes, even scripts, to inherit the effective gid of the forking script. Any obscure system call for that, or something, which requires only membership in the group, not root privileges, to run? It might make sense for the installation mechanism to change the owner of the data dir to that of the mail system, as the workaround does - but that would sacrifice the ability to do that part of the installation process as a regular user - root privilege is needed to chown. So this solution does not seem ideal. There are other avenues, but we could need to get the last word on the way that (redhat 5.x) linux is supposed to be working, and what people normally to do achieve the kinds of things we're aiming for. Insight and suggestions are welcome! Ken Manheimer klm@python.org 703 620-8990 x268 (orporation for National Research |nitiatives # If you appreciate Python, consider joining the PSA! # # . # From cklempay@acm.jhu.edu Thu Aug 6 03:29:20 1998 From: cklempay@acm.jhu.edu (Corbett J. Klempay) Date: Wed, 5 Aug 1998 22:29:20 -0400 (EDT) Subject: [Mailman-Developers] Double-sends Message-ID: Heheh......now that Ken finished fixing the list, I forget...did anyone ever find out what was causing the multiple-send problem? I think I just experienced a double-send on my first 'welcome back to a working list server' message to one of my lists.... ------------------------------------------------------------------------------- Corbett J. Klempay Quote of the Week: http://www2.acm.jhu.edu/~cklempay "Money is the root of all good." PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 ------------------------------------------------------------------------------- From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Fri Aug 7 17:16:02 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 7 Aug 1998 12:16:02 -0400 (EDT) Subject: [Mailman-Developers] password from a tty References: <19980803234830.47258@chronis.icgroup.com> Message-ID: <13771.10306.597033.81511@anthem.cnri.reston.va.us> >>>>> "S" == Scott writes: S> here's a patch that will get passwords from a tty with echo S> off for mmsitepass and newlist only if it's possible, otherwise S> it gets the password the normal, more portable, less secure S> way. Why would you not want to use the Python standard getpass module? -Barry From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Fri Aug 7 17:17:28 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 7 Aug 1998 12:17:28 -0400 (EDT) Subject: [Mailman-Developers] password from a tty References: <19980803234830.47258@chronis.icgroup.com> <13771.10306.597033.81511@anthem.cnri.reston.va.us> Message-ID: <13771.10392.798542.460484@anthem.cnri.reston.va.us> >>>>> "BAW" == Barry A Warsaw writes: BAW> Why would you not want to use the Python standard getpass BAW> module? Oops, should have mentioned that I changed newlist and mmsitepass to use getpass.getpass(). -Barry From Nagy Balazs Fri Aug 7 21:50:59 1998 From: Nagy Balazs (Nagy Balazs) Date: Fri, 7 Aug 1998 22:50:59 +0200 (CEST) Subject: [Mailman-Developers] multiple delivery (answer) In-Reply-To: <13771.10306.597033.81511@anthem.cnri.reston.va.us> Message-ID: Hiyas, I've caught the multiple delivery bug: if processQueue() runs while another processQueue() is running, the delivery will have messed up (== multiple delivery). BTW where can I find the package's configure.in file? It can be very helpful. -- hacker: /n./ One who enjoys the intellectual challenge of creatively overcoming or circumventing limitations. PGP 0x1DE3631D / A8 B4 92 EE 1F 55 27 C8 86 64 9C 42 41 A4 BD B8 From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Fri Aug 7 22:25:48 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 7 Aug 1998 17:25:48 -0400 (EDT) Subject: [Mailman-Developers] multiple delivery (answer) References: <13771.10306.597033.81511@anthem.cnri.reston.va.us> Message-ID: <13771.28892.217748.173322@anthem.cnri.reston.va.us> >>>>> "NB" == Nagy Balazs writes: NB> I've caught the multiple delivery bug: if processQueue() runs NB> while another processQueue() is running, the delivery will NB> have messed up (== multiple delivery). Thanks for the clue. Hopefull one of us will get time to look at this very soon. NB> BTW where can I find the package's configure.in file? It can NB> be very helpful. Is it not distributed in the 1.0b5 tarball? Darn. Well, this is your chance to try out the read-only anoncvs access I sent a message out about. You can definitely get that file through CVS. -Barry From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Fri Aug 7 22:42:35 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 7 Aug 1998 17:42:35 -0400 (EDT) Subject: [Mailman-Developers] run_queue bug References: <19980804200326.48041@chronis.icgroup.com> <19980804214241.47823@chronis.icgroup.com> Message-ID: <13771.29899.11496.593870@anthem.cnri.reston.va.us> >>>>> "S" == Scott writes: S> I don't know all the specifics of why this is happening (seems S> like some system librarires do a seek while coercing a socket S> struct to a FILE *?), but the following patch takes use of S> .makefile() out of smtplib.py and fixes the problem. It would be interesting to know if Python 1.5.2's smtplib.py suffers the same fate in it's getreply() method? One of the things on my to-do list is to convert to using the standard smtplib.py module that Dragon's done a lot of work on, rather than our hacked up version. It also does a makefile(), but in a different place. Could this be another Linux-ism that's biting us? Dragon? -Barry From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Fri Aug 7 22:47:03 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 7 Aug 1998 17:47:03 -0400 (EDT) Subject: [Mailman-Developers] run_queue bug References: <19980804200326.48041@chronis.icgroup.com> <19980804214627.21810@chronis.icgroup.com> Message-ID: <13771.30167.434975.265904@anthem.cnri.reston.va.us> >>>>> "S" == Scott writes: S> so when run_queue runs as user mailman, it can't open the S> files. I think it got those ownerships from root running S> newlist, from subscribing someone from the web, and from S> vmailer doing the delivery to a mailcmd as user nobody. S> Shouldn't they be made g+rw? I'm sure they should (in general Mailman should do all permissions based on group membership). I think all the scripts are going to have to ensure that the umask is at least 002. -Barry From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Fri Aug 7 22:56:08 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 7 Aug 1998 17:56:08 -0400 (EDT) Subject: [Mailman-Developers] REQUEST_URI not so reliable References: <19980803203851.49009@chronis.icgroup.com> Message-ID: <13771.30712.823261.961333@anthem.cnri.reston.va.us> >>>>> "root" == writes: root> dict = {... >> "path": os.environ.get("REQUEST_URI", "mailman/admin/" + list_name) >> .... root> } Thanks Scott, I've made this change in the source. root> there may be other places that use that, like private, root> listinfo, etc. AFAICT, that's the only place that environment variable is accessed. -Barry From scott@chronis.icgroup.com Sat Aug 8 00:56:59 1998 From: scott@chronis.icgroup.com (Scott) Date: Fri, 7 Aug 1998 19:56:59 -0400 Subject: [Mailman-Developers] run_queue bug In-Reply-To: <13771.29899.11496.593870@anthem.cnri.reston.va.us>; from Barry A. Warsaw on Fri, Aug 07, 1998 at 05:42:35PM -0400 References: <19980804200326.48041@chronis.icgroup.com> <19980804214241.47823@chronis.icgroup.com> <13771.29899.11496.593870@anthem.cnri.reston.va.us> Message-ID: <19980807195658.01412@chronis.icgroup.com> On Fri, Aug 07, 1998 at 05:42:35PM -0400, Barry A. Warsaw wrote: | | >>>>> "S" == Scott writes: | | S> I don't know all the specifics of why this is happening (seems | S> like some system librarires do a seek while coercing a socket | S> struct to a FILE *?), but the following patch takes use of | S> .makefile() out of smtplib.py and fixes the problem. | | It would be interesting to know if Python 1.5.2's smtplib.py suffers | the same fate in it's getreply() method? One of the things on my | to-do list is to convert to using the standard smtplib.py module that | Dragon's done a lot of work on, rather than our hacked up version. | It also does a makefile(), but in a different place. | | Could this be another Linux-ism that's biting us? Dragon? i've got mailman running on 3 linux box's now, and only one of them had this problem, it's redhat somethign or other (i inherited this one and don't know off hand) with kernel version 2.0.22 scott From dragondm@delta.integral.org Sun Aug 9 07:59:58 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sun, 9 Aug 1998 01:59:58 -0500 (CDT) Subject: [Mailman-Developers] run_queue bug In-Reply-To: <13771.29899.11496.593870@anthem.cnri.reston.va.us> Message-ID: On Fri, 7 Aug 1998, Barry A. Warsaw wrote: > > >>>>> "S" == Scott writes: > > S> I don't know all the specifics of why this is happening (seems > S> like some system librarires do a seek while coercing a socket > S> struct to a FILE *?), but the following patch takes use of > S> .makefile() out of smtplib.py and fixes the problem. > > It would be interesting to know if Python 1.5.2's smtplib.py suffers > the same fate in it's getreply() method? One of the things on my > to-do list is to convert to using the standard smtplib.py module that > Dragon's done a lot of work on, rather than our hacked up version. > It also does a makefile(), but in a different place. > > Could this be another Linux-ism that's biting us? Dragon? Hm.... Not from what I've seen. The Python smtplib was developed on a linux box, and I've been using it with an earlier version of mailman on the same linux box for 8 months now & I haven't seen this one. It seems fine both on the rather mongrel linux system I use for development, and on my Debian box. -The Dragon De Monsyne From dragondm@delta.integral.org Sun Aug 9 09:02:25 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sun, 9 Aug 1998 03:02:25 -0500 (CDT) Subject: [Mailman-Developers] run_queue bug In-Reply-To: <13771.29899.11496.593870@anthem.cnri.reston.va.us> Message-ID: On Fri, 7 Aug 1998, Barry A. Warsaw wrote: > > >>>>> "S" == Scott writes: > > S> I don't know all the specifics of why this is happening (seems > S> like some system librarires do a seek while coercing a socket > S> struct to a FILE *?), but the following patch takes use of > S> .makefile() out of smtplib.py and fixes the problem. > Oh, one thing I just thought of... If you want to try tracking this down, It might help to know that the socket object's 'makefile ' method is equivilent to this function: def makefile(sock,mode='r',bufsize=-1): fd_sock=sock.fileno() fd=os.dup(fd_sock) sockfile=os.fdopen(fd,mode,bufsize) return sockfile This might tell you something more.. -The Dragon De Monsyne From scott@chronis.icgroup.com Tue Aug 11 20:42:43 1998 From: scott@chronis.icgroup.com (Scott) Date: Tue, 11 Aug 1998 15:42:43 -0400 Subject: [Mailman-Developers] duplicate messages Message-ID: <19980811154243.61320@chronis.icgroup.com> I have a test list set up on a linux box that is regularly sending out 2 copies of messages. The list has 2 subscribers, and inevitably one of the two subscribers (different host names) gets a duplicate message. Which one gets the duplicate appears to be random. If i only have one subscriber, then no duplicates are produced. I poked around the sources a bit and found that if I take out the fork() in this deliver script function, i no longer get duplicates. I don't know why this fork() would create duplicate deliveries, but i am certain that eliminating the call to forker() causes no duplicates to be produced. def ContactTransportForEachGroup(sender, groups, text): if len(groups) == 1: ContactTransport(sender,groups[0],text) return for group in groups: if not forker(): # if we don't fork here, there are no duplicates ContactTransport(sender,group,text) os._exit(0) interestingly enough, the following script never seems to produce duplicates: import os l = [1,2,3,4,5,6,7,8,9] for x in l: if not os.fork(): print x os._exit(0) any help on how to fix this would be greatly appreciated. I am running Linux chronis 2.0.33 #1 Mon Apr 27 22:50:00 EDT 1998 i586 with glibc2.07, python 1.5.1, mailman 1.0b5. scott From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Thu Aug 13 00:40:49 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Wed, 12 Aug 1998 19:40:49 -0400 (EDT) Subject: [Mailman-Developers] Checkin messages now available Message-ID: <13778.10241.353309.492720@anthem.cnri.reston.va.us> Folks, I've created a Mailman mailing list that you can join to get the CVS checkin messages as we make changes to the tree. Please see for details. -Barry From cklempay@acm.jhu.edu Thu Aug 13 02:00:34 1998 From: cklempay@acm.jhu.edu (Corbett J. Klempay) Date: Wed, 12 Aug 1998 21:00:34 -0400 (EDT) Subject: [Mailman-Developers] cvs + cvsweb Message-ID: Just one note: I'd highly recommend the Hans Zeller-modified version of CVSWeb (I thought I remembered one of you guys saying you were going to CVSWeb it)...it's a lot prettier (the diff support is much nicer too)...if you want to see one of what I mean, http://www2.acm.jhu.edu/cgi-bin/cvsweb.cgi ------------------------------------------------------------------------------- Corbett J. Klempay Quote of the Week: http://www2.acm.jhu.edu/~cklempay "There are two things a real man likes - danger and play. And he likes women because she is the most dangerous of playthings." PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 ------------------------------------------------------------------------------- From klm@python.org Thu Aug 13 20:13:18 1998 From: klm@python.org (Ken Manheimer) Date: Thu, 13 Aug 1998 15:13:18 -0400 (EDT) Subject: [Mailman-Developers] duplicate messages In-Reply-To: <19980811154243.61320@chronis.icgroup.com> Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---559023410-1712289374-903035598=:1139 Content-Type: TEXT/PLAIN; charset=US-ASCII Scott and developers, I've got a couple of things to try re the duplicate delivery problem. I suspect it's related to the new queuing mechanism, and also to the linux permissions problem that i unravelled for corbett last week. I suspect it's related because of the sensitivity to forking - and the fact that you're on a linux system. When forking on recent rh linux, you lose the effective UID needed to access the files already written in the queue directory, so the queued files remain around despite being successfully sent. The residual queue files then get processed next time around, yielding the duplicate messages. I don't have the time to verify this, but it sounds like a likely prospect to me. If it is in fact the cause, you might profit from the same workaround as for corbett's posting failure problems - set the ownership of the ~mailman/data directory to 'mail', or whatever ID your MTA runs with, and see if that helps. Alternately, before i went away last week i refined the queuing mechanism a bit to take care of some particular exceptions that can foul the delivery. You might try substituting the following replacements for TrySMTPDelivery() and DeliverToUser() in ~mailman/Mailman/Utils.py, and using the attached version of ~mailman/scripts/contact_transport instead of the installed one, to get some error detection for uncooperative queue files. NOTE that i don't have a vanilla 1.0b5 installation to test these against, so try them a bit at a time - i really can't guarantee that they're compatable, though the interface changes ought to be small enough to be ok... If any of you try these things, please let me know what you find. Ken def DeliverToUser(msg, recipient, add_headers=[]): """Use smtplib to deliver message. Optional argument add_headers should be a list of headers to be added to the message, e.g. for Errors-To and X-No-Archive.""" # We fork to ensure no deadlock. Otherwise, even if sendmail is # invoked in forking mode, if it eg detects a bad address before # forking, then it will try deliver to the errorsto addr *in the # foreground*. If the errorsto happens to be the list owner for a list # that is doing the send - and holding a lock - then the delivery will # hang pending release of the lock - deadlock. if os.fork(): return sender = msg.GetSender() try: try: msg.headers.remove('\n') except ValueError: pass if not msg.getheader('to'): msg.headers.append('To: %s\n' % recipient) for i in add_headers: if i and i[-1] != '\n': i = i + '\n' msg.headers.append(i) text = string.join(msg.headers, '')+ '\n'+ QuotePeriods(msg.body) import OutgoingQueue queue_id = OutgoingQueue.enqueueMessage(sender, recipient, text) TrySMTPDelivery(recipient,sender,text,queue_id) # Just in case there's still something waiting to be sent... OutgoingQueue.processQueue() finally: os._exit(0) def TrySMTPDelivery(recipient, sender, text, queue_entry): import sys, socket import smtplib import OutgoingQueue try: con = smtplib.SmtpConnection(mm_cfg.SMTPHOST) con.helo(mm_cfg.DEFAULT_HOST_NAME) con.send(to=recipient,frm=sender,text=text) con.quit() dequeue = 1 failure = None # Any exceptions that warrant leaving the message on the queue should # be identified by their exception, below, with setting 'dequeue' to 1 # and 'failure' to something suitable. Without a particular exception # we fall through to the blanket 'except:', which dequeues the message. except socket.error: # MTA not responding, or other socket prob - leave on queue. dequeue = 0 failure = sys.exc_info() except: # Unanticipated cause of delivery failure - *don't* leave message # queued, or it may stay, with reattempted delivery, forever... dequeue = 1 failure = sys.exc_info() if dequeue: OutgoingQueue.dequeueMessage(queue_entry) if failure: # XXX Here may be the place to get the failure info back to the # list object, so it can disable the recipient, etc. But how? from Logging.StampedLogger import StampedLogger l = StampedLogger("smtp-failures", "TrySMTPDelivery", immediate=1) l.write("To %s:\n" % recipient) l.write("\t %s / %s\n" % (failure[0], failure[1])) l.flush() ---559023410-1712289374-903035598=:1139 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=contact_transport Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: ~mailman/scripts/contact_transport IyEgL3Vzci9iaW4vZW52IHB5dGhvbg0KIw0KIyBDb3B5cmlnaHQgKEMpIDE5 OTggYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KIw0K IyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yDQojIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyDQojIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIyANCiMgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsDQojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUNCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4NCiMgDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlIA0KIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug LSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLg0KDQoi IiJTZW5kIGEgbWVzc2FnZSB2aWEgbG9jYWwgU01UUCwgb3IgcXVldWUgaXQg aWYgU01UUCBwb3J0IGlzIG5vdCByZXNwb25kaW5nLg0KDQpUaGUgc2NyaXB0 IHRha2VzIHRoZSBmb2xsb3dpbmcgcHJvdG9jb2wgb24gc3RkaW46DQoNCiBs aW5lIFsxXTogc2VuZGVyDQogbGluZSBbMjpuKzFdOiBuIHJlY2lwaWVudHMN CiBsaW5lIFtuKzJdOiA8ZW1wdHk+IC0gZGVsaW1pdGluZyBlbmQgb2YgcmVj aXBpZW50cw0KIGxpbmUgW24rMzpdOiBtZXNzYWdlIGNvbnRlbnQNCiIiIg0K DQppbXBvcnQgc3lzLCBvcw0KaW1wb3J0IHBhdGhzDQoNCiMgWFhYOiB0aGlz IHJlYWxseSBzaG91bGQgYmUgbWVyZ2VkIHdpdGggUHl0aG9uJ3Mgc3RhbmRh cmQgc210cGxpYiBsaWJyYXJ5DQpmcm9tIE1haWxtYW4gaW1wb3J0IG1tX2Nm Zw0KZnJvbSBNYWlsbWFuIGltcG9ydCBzbXRwbGliDQpmcm9tIE1haWxtYW4g aW1wb3J0IFV0aWxzDQpmcm9tIE1haWxtYW4gaW1wb3J0IE91dGdvaW5nUXVl dWUNCg0KZnJvbSBNYWlsbWFuLkxvZ2dpbmcuVXRpbHMgaW1wb3J0IExvZ1N0 ZEVycg0KTG9nU3RkRXJyKCJlcnJvciIsICJjb250YWN0X3RyYW5zcG9ydCIp DQoNCmZyb21fYWRkciA9IHN5cy5zdGRpbi5yZWFkbGluZSgpWzotMV0NCnRv X2FkZHJzICA9IFtdDQp3aGlsZSAxOg0KICAgIGwgPSBzeXMuc3RkaW4ucmVh ZGxpbmUoKVs6LTFdDQogICAgaWYgbm90IGw6DQogICAgICAgIGJyZWFrDQog ICAgdG9fYWRkcnMuYXBwZW5kKGwpDQp0ZXh0ID0gc3lzLnN0ZGluLnJlYWQo KQ0KDQpxdWV1ZV9pZCA9IE91dGdvaW5nUXVldWUuZW5xdWV1ZU1lc3NhZ2Uo ZnJvbV9hZGRyLCB0b19hZGRycywgdGV4dCkNClV0aWxzLlRyeVNNVFBEZWxp dmVyeSh0b19hZGRycywgZnJvbV9hZGRyLCB0ZXh0LCBxdWV1ZV9pZCkNCk91 dGdvaW5nUXVldWUucHJvY2Vzc1F1ZXVlKCkNCg0K ---559023410-1712289374-903035598=:1139-- From klm@python.org Thu Aug 13 21:16:27 1998 From: klm@python.org (Ken Manheimer) Date: Thu, 13 Aug 1998 16:16:27 -0400 (EDT) Subject: [Mailman-Developers] duplicate messages In-Reply-To: Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---559023410-1712289374-903035598=:1139 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: On Thu, 13 Aug 1998, Ken Manheimer wrote: > I've got a couple of things to try re the duplicate delivery problem. I > suspect it's related to the new queuing mechanism, and also to the linux > permissions problem that i unravelled for corbett last week. > [...] > Alternately, before i went away last week i refined the queuing > mechanism a bit to take care of some particular exceptions that can foul > the delivery. You might try substituting the following replacements for > TrySMTPDelivery() and DeliverToUser() in ~mailman/Mailman/Utils.py, and > using the attached version of ~mailman/scripts/contact_transport instead > of the installed one, to get some error detection for uncooperative > queue files. Darn - i attached the wrong version of contact_transport to the previous message - i think that one was unchanged w.r.t. the distributed 1.0b5 one. Attached is my new version, with additional logging to notice an unwritable queue dir... Ken again. ---559023410-1712289374-903035598=:1139 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=r Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: *new* version of ~mailman/scripts/contact_transport IyEgL3Vzci9iaW4vZW52IHB5dGhvbg0KIw0KIyBDb3B5cmlnaHQgKEMpIDE5 OTggYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KIw0K IyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yDQojIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyDQojIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIyANCiMgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsDQojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUNCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4NCiMgDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlIA0KIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug LSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLg0KDQoi IiJTZW5kIGEgbWVzc2FnZSB2aWEgbG9jYWwgU01UUCwgb3IgcXVldWUgaXQg aWYgU01UUCBwb3J0IGlzIG5vdCByZXNwb25kaW5nLg0KDQpUaGUgc2NyaXB0 IHRha2VzIHRoZSBmb2xsb3dpbmcgcHJvdG9jb2wgb24gc3RkaW46DQoNCiBs aW5lIFsxXTogc2VuZGVyDQogbGluZSBbMjpuKzFdOiBuIHJlY2lwaWVudHMN CiBsaW5lIFtuKzJdOiA8ZW1wdHk+IC0gZGVsaW1pdGluZyBlbmQgb2YgcmVj aXBpZW50cw0KIGxpbmUgW24rMzpdOiBtZXNzYWdlIGNvbnRlbnQNCiIiIg0K DQppbXBvcnQgc3lzLCBvcw0KaW1wb3J0IHBhdGhzDQoNCiMgWFhYOiB0aGlz IHJlYWxseSBzaG91bGQgYmUgbWVyZ2VkIHdpdGggUHl0aG9uJ3Mgc3RhbmRh cmQgc210cGxpYiBsaWJyYXJ5DQpmcm9tIE1haWxtYW4gaW1wb3J0IG1tX2Nm Zw0KZnJvbSBNYWlsbWFuIGltcG9ydCBzbXRwbGliDQpmcm9tIE1haWxtYW4g aW1wb3J0IFV0aWxzDQpmcm9tIE1haWxtYW4gaW1wb3J0IE91dGdvaW5nUXVl dWUNCg0KZnJvbSBNYWlsbWFuLkxvZ2dpbmcuVXRpbHMgaW1wb3J0IExvZ1N0 ZEVycg0KTG9nU3RkRXJyKCJlcnJvciIsICJjb250YWN0X3RyYW5zcG9ydCIp DQoNCmZyb21fYWRkciA9IHN5cy5zdGRpbi5yZWFkbGluZSgpWzotMV0NCnRv X2FkZHJzICA9IFtdDQp3aGlsZSAxOg0KICAgIGwgPSBzeXMuc3RkaW4ucmVh ZGxpbmUoKVs6LTFdDQogICAgaWYgbm90IGw6DQogICAgICAgIGJyZWFrDQog ICAgdG9fYWRkcnMuYXBwZW5kKGwpDQp0ZXh0ID0gc3lzLnN0ZGluLnJlYWQo KQ0KDQp0cnk6DQogICAgcXVldWVfaWQgPSBPdXRnb2luZ1F1ZXVlLmVucXVl dWVNZXNzYWdlKGZyb21fYWRkciwgdG9fYWRkcnMsIHRleHQpDQpleGNlcHQg SU9FcnJvcjoNCiAgICAjIExvZyB0aGUgZXJyb3IgZXZlbnQgYW5kIHJlcmFp c2UgdGhlIGV4Y2VwdGlvbi4NCiAgICAoZXhjLCBleGNfbXNnLCBleGNfdGIp ID0gc3lzLmV4Y19pbmZvKCkNCiAgICBzeXMuc3RkZXJyLndyaXRlKCJJT0Vy cm9yIHdyaXRpbmcgb3V0Z29pbmcgcXVldWVcblx0JXMvJXNcbiINCiAgICAg ICAgICAgICAgICAgICAgICUgKHN0cihleGMpLCBzdHIoZXhjX21zZykpKQ0K ICAgIHN5cy5zdGRlcnIuZmx1c2goKQ0KICAgIHJhaXNlIGV4YywgZXhjX21z ZywgZXhjX3RiDQpVdGlscy5UcnlTTVRQRGVsaXZlcnkodG9fYWRkcnMsIGZy b21fYWRkciwgdGV4dCwgcXVldWVfaWQpDQpPdXRnb2luZ1F1ZXVlLnByb2Nl c3NRdWV1ZSgpDQoNCg== ---559023410-1712289374-903035598=:1139-- From dragondm@delta.integral.org Mon Aug 17 18:51:40 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Mon, 17 Aug 1998 12:51:40 -0500 (CDT) Subject: [Mailman-Developers] Built-in archiver for mailman... Message-ID: Just thought I'd let anyone interested know, I've got an internal archiving module for mailman 1.0b5, based on the latest pipermail. It does yearly, monthly and quarterly archives, and all the html it generates is created from templates, for easy customization. (also if you dont use it, it won't interfere with an external archiver. ) I have a few patches to get together, then, sometime this week, whence I get a spare moment or two, I'll put it all together and post it. -The Dragon De Monsyne From dragondm@delta.integral.org Wed Aug 19 15:36:38 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Wed, 19 Aug 1998 09:36:38 -0500 (CDT) Subject: [Mailman-Developers] edithtml bug... Message-ID: I just stumbled upon a bug that prevents edithtml from working in 1.0b5. (It refuses to accept any password. ) Here's a patch: *** /usr/src/mailman-1.0b5/Mailman/HTMLFormatter.py Mon Jul 27 17:48:31 1998 --- HTMLFormatter.py Wed Aug 19 09:16:34 1998 *************** *** 29,39 **** class HTMLFormatter: def InitVars(self): if self._internal_name: ! self._template_dir = os.path.join(mm_cfg.LIST_DATA_DIR, ! self._internal_name) else: ! self._template_dir = mm_cfg.TEMPLATE_DIR def GetMailmanFooter(self): owners_html = Container() --- 29,47 ---- class HTMLFormatter: def InitVars(self): + pass + # if self._internal_name: + # self._template_dir = os.path.join(mm_cfg.LIST_DATA_DIR, + # self._internal_name) + # else: + # self._template_dir = mm_cfg.TEMPLATE_DIR + + def GetTemplateDir(self): if self._internal_name: ! return os.path.join(mm_cfg.LIST_DATA_DIR, self._internal_name) else: ! return mm_cfg.TEMPLATE_DIR ! def GetMailmanFooter(self): owners_html = Container() *************** *** 58,65 **** def SnarfHTMLTemplate(self, file): # XXX: hack, blech, yuk ! HTMLFormatter.InitVars(self) ! filename = os.path.join(self._template_dir, file) f = open(filename,'r') str = f.read() f.close() --- 66,74 ---- def SnarfHTMLTemplate(self, file): # XXX: hack, blech, yuk ! # HTMLFormatter.InitVars(self) ! # Yoiks! that was ugly! -ddm ! filename = os.path.join(self.GetTemplateDir(), file) f = open(filename,'r') str = f.read() f.close() *************** *** 332,342 **** return item[-5:] == '.html' files = filter(ExtensionFilter, os.listdir(mm_cfg.TEMPLATE_DIR)) ! Utils.MakeDirTree(self._template_dir) for filename in files: file1 = open(os.path.join(mm_cfg.TEMPLATE_DIR, filename), 'r') text = file1.read() file1.close() ! file2 = open(os.path.join(self._template_dir, filename), 'w+') file2.write(text) file2.close() --- 341,351 ---- return item[-5:] == '.html' files = filter(ExtensionFilter, os.listdir(mm_cfg.TEMPLATE_DIR)) ! Utils.MakeDirTree(self.GetTemplateDir()) for filename in files: file1 = open(os.path.join(mm_cfg.TEMPLATE_DIR, filename), 'r') text = file1.read() file1.close() ! file2 = open(os.path.join(self.GetTemplateDir(), filename), 'w+') file2.write(text) file2.close() *** /usr/src/mailman-1.0b5/Mailman/Cgi/edithtml.py Mon Jul 27 17:48:31 1998 --- Cgi/edithtml.py Wed Aug 19 09:26:59 1998 *************** *** 20,26 **** import sys import os, cgi, string, types ! from Mailman import Utils, MailList from Mailman import htmlformat --- 20,26 ---- import sys import os, cgi, string, types ! from Mailman import Utils, MailList, Errors from Mailman import htmlformat *************** *** 38,44 **** ('subscribe.html', 'Subscribe results page'), ('options.html', 'User specific options page'), ('handle_opts.html', 'Changing user options results page'), ! ('archives.html', 'Archives index page') ) --- 38,44 ---- ('subscribe.html', 'Subscribe results page'), ('options.html', 'User specific options page'), ('handle_opts.html', 'Changing user options results page'), ! ('roster.html', 'List roster page') ) *************** *** 56,62 **** try: list = MailList.MailList(list_name, lock=0) ! except: doc.AddItem(htmlformat.Header(2, "%s : No such list" % list_name)) print doc.Format() sys.exit(0) --- 56,62 ---- try: list = MailList.MailList(list_name, lock=0) ! except Errors.MMUnknownListError: doc.AddItem(htmlformat.Header(2, "%s : No such list" % list_name)) print doc.Format() sys.exit(0) *************** *** 110,116 **** try: list.ConfirmAdminPassword(cgi_data['adminpw'].value) ChangeHTML(list, cgi_data, template_name, doc) ! except: m = 'Error: Incorrect admin password.' doc.AddItem(htmlformat.Header(3, htmlformat.Italic( --- 110,116 ---- try: list.ConfirmAdminPassword(cgi_data['adminpw'].value) ChangeHTML(list, cgi_data, template_name, doc) ! except Errors.MMBadPasswordError: m = 'Error: Incorrect admin password.' doc.AddItem(htmlformat.Header(3, htmlformat.Italic( *************** *** 130,136 **** pass - def InitDocument(): return htmlformat.HeadlessDocument() --- 130,135 ---- *************** *** 176,182 **** doc.AddItem('
') return code = cgi_info['html_code'].value ! f = open(os.path.join(list._template_dir, template_name), 'w') f.write(code) f.close() doc.AddItem(htmlformat.Header(3, 'HTML successfully updated.')) --- 175,181 ---- doc.AddItem('
') return code = cgi_info['html_code'].value ! f = open(os.path.join(list.GetTemplateDir(), template_name), 'w') f.write(code) f.close() doc.AddItem(htmlformat.Header(3, 'HTML successfully updated.')) -The Dragon De Monsyne From cklempay@acm.jhu.edu Wed Aug 19 16:04:11 1998 From: cklempay@acm.jhu.edu (Corbett J. Klempay) Date: Wed, 19 Aug 1998 11:04:11 -0400 (EDT) Subject: [Mailman-Developers] edithtml bug... In-Reply-To: Message-ID: Geez...a patch and everything! Yes, I have yet to try editing the HTML under b5, but I experienced this same problem under b4, actually. It would not accept any password...I don't know if perhaps it was something related to the Linux whackness that Ken unraveled the other week or not...but I'll be sure to try this one out when I get a chance. ------------------------------------------------------------------------------- Corbett J. Klempay Quote of the Week: http://www2.acm.jhu.edu/~cklempay "There are two things a real man likes - danger and play. And he likes women because she is the most dangerous of playthings." PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 ------------------------------------------------------------------------------- On Wed, 19 Aug 1998, The Dragon De Monsyne wrote: > > I just stumbled upon a bug that prevents edithtml from working in > 1.0b5. (It refuses to accept any password. ) > > Here's a patch: > > *** /usr/src/mailman-1.0b5/Mailman/HTMLFormatter.py Mon Jul 27 17:48:31 1998 > --- HTMLFormatter.py Wed Aug 19 09:16:34 1998 > *************** > *** 29,39 **** > > class HTMLFormatter: > def InitVars(self): > if self._internal_name: > ! self._template_dir = os.path.join(mm_cfg.LIST_DATA_DIR, > ! self._internal_name) > else: > ! self._template_dir = mm_cfg.TEMPLATE_DIR > > def GetMailmanFooter(self): > owners_html = Container() > --- 29,47 ---- > > class HTMLFormatter: > def InitVars(self): > + pass > + # if self._internal_name: > + # self._template_dir = os.path.join(mm_cfg.LIST_DATA_DIR, > + # self._internal_name) > + # else: > + # self._template_dir = mm_cfg.TEMPLATE_DIR > + > + def GetTemplateDir(self): > if self._internal_name: > ! return os.path.join(mm_cfg.LIST_DATA_DIR, self._internal_name) > else: > ! return mm_cfg.TEMPLATE_DIR > ! > > def GetMailmanFooter(self): > owners_html = Container() > *************** > *** 58,65 **** > > def SnarfHTMLTemplate(self, file): > # XXX: hack, blech, yuk > ! HTMLFormatter.InitVars(self) > ! filename = os.path.join(self._template_dir, file) > f = open(filename,'r') > str = f.read() > f.close() > --- 66,74 ---- > > def SnarfHTMLTemplate(self, file): > # XXX: hack, blech, yuk > ! # HTMLFormatter.InitVars(self) > ! # Yoiks! that was ugly! -ddm > ! filename = os.path.join(self.GetTemplateDir(), file) > f = open(filename,'r') > str = f.read() > f.close() > *************** > *** 332,342 **** > return item[-5:] == '.html' > > files = filter(ExtensionFilter, os.listdir(mm_cfg.TEMPLATE_DIR)) > ! Utils.MakeDirTree(self._template_dir) > for filename in files: > file1 = open(os.path.join(mm_cfg.TEMPLATE_DIR, filename), 'r') > text = file1.read() > file1.close() > ! file2 = open(os.path.join(self._template_dir, filename), 'w+') > file2.write(text) > file2.close() > --- 341,351 ---- > return item[-5:] == '.html' > > files = filter(ExtensionFilter, os.listdir(mm_cfg.TEMPLATE_DIR)) > ! Utils.MakeDirTree(self.GetTemplateDir()) > for filename in files: > file1 = open(os.path.join(mm_cfg.TEMPLATE_DIR, filename), 'r') > text = file1.read() > file1.close() > ! file2 = open(os.path.join(self.GetTemplateDir(), filename), 'w+') > file2.write(text) > file2.close() > *** /usr/src/mailman-1.0b5/Mailman/Cgi/edithtml.py Mon Jul 27 17:48:31 1998 > --- Cgi/edithtml.py Wed Aug 19 09:26:59 1998 > *************** > *** 20,26 **** > > import sys > import os, cgi, string, types > ! from Mailman import Utils, MailList > from Mailman import htmlformat > > > --- 20,26 ---- > > import sys > import os, cgi, string, types > ! from Mailman import Utils, MailList, Errors > from Mailman import htmlformat > > > *************** > *** 38,44 **** > ('subscribe.html', 'Subscribe results page'), > ('options.html', 'User specific options page'), > ('handle_opts.html', 'Changing user options results page'), > ! ('archives.html', 'Archives index page') > ) > > > --- 38,44 ---- > ('subscribe.html', 'Subscribe results page'), > ('options.html', 'User specific options page'), > ('handle_opts.html', 'Changing user options results page'), > ! ('roster.html', 'List roster page') > ) > > > *************** > *** 56,62 **** > > try: > list = MailList.MailList(list_name, lock=0) > ! except: > doc.AddItem(htmlformat.Header(2, "%s : No such list" % list_name)) > print doc.Format() > sys.exit(0) > --- 56,62 ---- > > try: > list = MailList.MailList(list_name, lock=0) > ! except Errors.MMUnknownListError: > doc.AddItem(htmlformat.Header(2, "%s : No such list" % list_name)) > print doc.Format() > sys.exit(0) > *************** > *** 110,116 **** > try: > list.ConfirmAdminPassword(cgi_data['adminpw'].value) > ChangeHTML(list, cgi_data, template_name, doc) > ! except: > m = 'Error: Incorrect admin password.' > doc.AddItem(htmlformat.Header(3, > htmlformat.Italic( > --- 110,116 ---- > try: > list.ConfirmAdminPassword(cgi_data['adminpw'].value) > ChangeHTML(list, cgi_data, template_name, doc) > ! except Errors.MMBadPasswordError: > m = 'Error: Incorrect admin password.' > doc.AddItem(htmlformat.Header(3, > htmlformat.Italic( > *************** > *** 130,136 **** > pass > > > - > def InitDocument(): > return htmlformat.HeadlessDocument() > > --- 130,135 ---- > *************** > *** 176,182 **** > doc.AddItem('
') > return > code = cgi_info['html_code'].value > ! f = open(os.path.join(list._template_dir, template_name), 'w') > f.write(code) > f.close() > doc.AddItem(htmlformat.Header(3, 'HTML successfully updated.')) > --- 175,181 ---- > doc.AddItem('
') > return > code = cgi_info['html_code'].value > ! f = open(os.path.join(list.GetTemplateDir(), template_name), 'w') > f.write(code) > f.close() > doc.AddItem(htmlformat.Header(3, 'HTML successfully updated.')) > > > > -The Dragon De Monsyne > > > _______________________________________________ > Mailman-Developers maillist - Mailman-Developers@python.org > http://www.python.org/mailman/listinfo/mailman-developers > From dragondm@delta.integral.org Thu Aug 20 02:53:18 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Wed, 19 Aug 1998 20:53:18 -0500 (CDT) Subject: [Mailman-Developers] edithtml bug... In-Reply-To: Message-ID: On Wed, 19 Aug 1998, Corbett J. Klempay wrote: > Geez...a patch and everything! Service with a smile :> > Yes, I have yet to try editing the HTML under b5, but I experienced this > same problem under b4, actually. It would not accept any password...I > don't know if perhaps it was something related to the Linux whackness that > Ken unraveled the other week or not...but I'll be sure to try this one out > when I get a chance. Hmm... Actually, it was weirdness in HTMLFormatter that lead to a bug in edithtml that was covered up by a wildcard except: clause (gotta get rid of those... ) -The Dragon De Monsyne From bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) Thu Aug 20 17:39:53 1998 From: bwarsaw@CNRI.Reston.Va.US (Barry A. Warsaw) (Barry A. Warsaw) Date: Thu, 20 Aug 1998 12:39:53 -0400 (EDT) Subject: [Mailman-Developers] Re: [Mailman-Users] Localization References: <003101bdcc2c$9d30cb90$f6d52dc1@bishop.twinspot.net> Message-ID: <13788.20825.540091.529960@anthem.cnri.reston.va.us> [[Note that I've changed the CC to mm-dev]] >>>>> "KM" == Ken Manheimer writes: KM> If you take a look at the latest mailman version (see KM> http://www.python.org/mailman/listinfo/mailman-checkins for KM> instructions on following the current CVS revision), you'll KM> see that we've (primarily barry has) begun to separate out all KM> the multi-line text messages into separate files, and also are KM> using a functional interface to the messages. Seems like this KM> would be an opportune place to incorporate locale sensitivity, KM> among other things. It would have to be generalized a good KM> bit to apply to *all* messages, but we suspect that it's a KM> start... We had a discussion about this topic a couple of months ago (sadly, I realize this was in mailman-users 1998q3 archive). Ken's right about the groundwork I laid to rip most of the in-code text messages out of the .py files and into separate .txt files inside templates. I did it primarily for the cleanliness such separation provides, but also with a thought toward localization. We need to go one step further: we would need separate language specific subdirs inside templates that would hold the appropriate texts for other languages. We would need to modify Mailman.Utils.maketext() so that it takes an optional language argument, and would pick the text template out of proper subdir. Other issues: the keys interpolated into templates need to be localized. Other end-user intended text sprinkled in the code should be localized. Language preference on a per-list or per-user basis (or both)? Support for alternative localized HTML templates? Option names and descriptions? -Barry From cklempay@acm.jhu.edu Fri Aug 21 15:41:14 1998 From: cklempay@acm.jhu.edu (Corbett J. Klempay) Date: Fri, 21 Aug 1998 10:41:14 -0400 (EDT) Subject: [Mailman-Developers] multiples patch Message-ID: I seem to remember at least one person posting some replacement code to try to clear up the duplicates problem...anyone know if it works yet? I need to go dig that code out (assuming I'm right in remembering it) ------------------------------------------------------------------------------- Corbett J. Klempay Quote of the Week: http://www2.acm.jhu.edu/~cklempay "There are two things a real man likes - danger and play. And he likes women because she is the most dangerous of playthings." PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 ------------------------------------------------------------------------------- From Nagy Balazs Mon Aug 24 13:15:33 1998 From: Nagy Balazs (Nagy Balazs) Date: Mon, 24 Aug 1998 14:15:33 +0200 (CEST) Subject: [Mailman-Developers] Why just SMTP? Message-ID: Hiyas, I think there are a lot of mtu programs which works good in delivery/queue handling. OK, you wanted to write a 200% compatible program, but I think this isn't as good as it seems: 1| QMail doesn't put Date: and Message-ID: fields to the mail when you use smtp. 2| You can use 'mailx' anyway. 3| Delivery-locking is bogus. Ok, I think this is a good idea to handle smtp directly, but *please let us select* which method we prefer. I think you can use TryDelivery() (with a jumper table) instead of TrySMTPDelivery(). -- hacker: /n./ One who enjoys the intellectual challenge of creatively overcoming or circumventing limitations. PGP 0x1DE3631D / A8 B4 92 EE 1F 55 27 C8 86 64 9C 42 41 A4 BD B8 From cklempay@acm.jhu.edu Wed Aug 26 05:29:19 1998 From: cklempay@acm.jhu.edu (Corbett J. Klempay) Date: Wed, 26 Aug 1998 00:29:19 -0400 (EDT) Subject: [Mailman-Developers] Cron /usr/local/bin/python /home/mailman/cron/run_queue (fwd) /home/mailman/cron/run_queue (fwd) Message-ID: I just got this; if it's relevant, I am using the fix to prevent forking. ---------- Forwarded message ---------- Date: Tue, 25 Aug 1998 22:42:06 -0400 From: Cron Daemon To: mailman@chimera.acm.jhu.edu Subject: Cron /usr/local/bin/python /home/mailman/cron/run_queue Traceback (innermost last): File "/home/mailman/cron/run_queue", line 31, in ? OutgoingQueue.processQueue() File "/home/mailman/Mailman/OutgoingQueue.py", line 38, in processQueue Utils.TrySMTPDelivery(recip,sender,text,full_fname) File "/home/mailman/Mailman/Utils.py", line 204, in TrySMTPDelivery OutgoingQueue.dequeueMessage(queue_entry) File "/home/mailman/Mailman/OutgoingQueue.py", line 25, in dequeueMessage os.unlink(msg) os.error: (2, 'No such file or directory') From tomas@euronetics.se Wed Aug 26 09:09:33 1998 From: tomas@euronetics.se (Tomas Fasth) Date: Wed, 26 Aug 1998 10:09:33 +0200 Subject: [Mailman-Developers] Re: [Mailman-Users] Localization Message-ID: <003301bdd0c8$dc5f6d80$f6d52dc1@bishop.twinspot.net> >>>>>> "KM" == Ken Manheimer writes: > > KM> If you take a look at the latest mailman version (see > KM> http://www.python.org/mailman/listinfo/mailman-checkins for > KM> instructions on following the current CVS revision), you'll > KM> see that we've (primarily barry has) begun to separate out all > KM> the multi-line text messages into separate files, and also are > KM> using a functional interface to the messages. Seems like this > KM> would be an opportune place to incorporate locale sensitivity, > KM> among other things. It would have to be generalized a good > KM> bit to apply to *all* messages, but we suspect that it's a > KM> start... I followed your recommendation and examined the latest sources. It wasn't that obvious to me where to look for text separation changes. Can you give me a direction? Or maybe it's not part of the 1.06b code I checked out? Is there a separate branch for this maybe? I think a decent level of ambition would be to localize all interaction with users, owners and moderators. Other "system" stuff like logging and admin interaction is not that important, IMO. Tomas From John@list.org Wed Aug 26 16:08:28 1998 From: John@list.org (John Viega) Date: Wed, 26 Aug 1998 08:08:28 -0700 Subject: [Mailman-Developers] The fog lifts... Message-ID: <19980826080828.A30991@viega.org> As many of you know, I have been absent for the past few weeks, mainly because I've just become a new father. Things are starting to settle down for me now, and I'm looking forward to getting back to Mailman. I'll try to catch up on list traffic from the last few weeks ASAP. Anyway, my big priority is to try to get all the issues you guys have had with Mailman addressed by the end of September at the latest. Anyone with code to submit that hasn't already been posted to the list, please let me know ASAP. Right now, I think the most important submissions will be the bug fixes. However, I'm still interested in additions. In particular, I'm interested in the pipermail integration that someone mentioned a few weeks ago, assuming that it uses a solution for the database interface that will work out of the box on all Python installs. John From John@list.org Wed Aug 26 16:19:45 1998 From: John@list.org (John Viega) Date: Wed, 26 Aug 1998 08:19:45 -0700 Subject: [Mailman-Developers] multiples patch In-Reply-To: ; from Corbett J. Klempay on Fri, Aug 21, 1998 at 10:41:14AM -0400 References: Message-ID: <19980826081945.C30554@viega.org> You know, I thought I saw such a thing too, but now I can't find it. Has anyone fixed this problem yet, and if so, can you make patches? If not, it's the first thing I'll go after. I think people have given enough information to find the problem pretty easily. John On Fri, Aug 21, 1998 at 10:41:14AM -0400, Corbett J. Klempay wrote: > I seem to remember at least one person posting some replacement code to > try to clear up the duplicates problem...anyone know if it works yet? I > need to go dig that code out (assuming I'm right in remembering it) > > ------------------------------------------------------------------------------- > Corbett J. Klempay Quote of the Week: > http://www2.acm.jhu.edu/~cklempay "There are two things a real man likes - > danger and play. And he likes women > because she is the most dangerous of > playthings." > > PGP Fingerprint: 7DA2 DB6E 7F5E 8973 A8E7 347B 2429 7728 76C2 BEA1 > ------------------------------------------------------------------------------- > > > _______________________________________________ > Mailman-Developers maillist - Mailman-Developers@python.org > http://www.python.org/mailman/listinfo/mailman-developers From John@list.org Wed Aug 26 16:20:53 1998 From: John@list.org (John Viega) Date: Wed, 26 Aug 1998 08:20:53 -0700 Subject: [Mailman-Developers] Why just SMTP? In-Reply-To: ; from Nagy Balazs on Mon, Aug 24, 1998 at 02:15:33PM +0200 References: Message-ID: <19980826082053.D30554@viega.org> Eventually we'll do that, especially if people contribute diffs... (hint, hint). John On Mon, Aug 24, 1998 at 02:15:33PM +0200, Nagy Balazs wrote: > Hiyas, > > Ok, I think this is a good idea to handle smtp directly, but *please let us > select* which method we prefer. From klm@python.org Wed Aug 26 19:22:06 1998 From: klm@python.org (Ken Manheimer) Date: Wed, 26 Aug 1998 14:22:06 -0400 (EDT) Subject: [Mailman-Developers] multiples patch In-Reply-To: <19980826081945.C30554@viega.org> Message-ID: On Wed, 26 Aug 1998, John Viega wrote: > You know, I thought I saw such a thing too, but now I can't find it. > Has anyone fixed this problem yet, and if so, can you make patches? > If not, it's the first thing I'll go after. I think people have given > enough information to find the problem pretty easily. John, i think this is related to the linux gid problems that i identified in relation to corbett's duplicates problems. In brief: - On linux systems, scripts forked by the object executables (eg, the wrapper executables) do inherit the effective gid that the wrappers wants them to get - but then, scripts forked by *those* scripts do not! - This permissions problem, combined with the initial insensitivity of Utils.TrySMTPDelivery (i think it was) was causing things to be left on the queue despite successful delivery, and then the queue processing script - launched from the cron job with the right euid - would do a redundant delivery and then delete. I think that was the upshot - but check the messages (with apparent fixes) that i posted about it, they should give the full scoop. (Note that part of the fix for linux systems was to open up the permissions on the queue directory - not an optimal solution.) http://www.python.org/pipermail/1998q3.mailman-developers/989f2234d905.html http://www.python.org/pipermail/1998q3.mailman-developers/c1aa27e70661.html Sorry i don't have more time to dedicate to this stuff at the moment - hopefully soon... ken klm@python.org From tomas@euronetics.se Thu Aug 27 08:20:37 1998 From: tomas@euronetics.se (Tomas Fasth) Date: Thu, 27 Aug 1998 09:20:37 +0200 Subject: [Mailman-Developers] Localization, again Message-ID: <002001bdd18b$302f2fa0$f6d52dc1@bishop.twinspot.net> This is a multi-part message in MIME format. ------=_NextPart_000_001D_01BDD19B.F3797000 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi. I checked out the latest sources in order to try a translation to = Swedish. I quickly found out that this was to become a rather = complicated task. Presentation texts are practically shattered all over = the sources. Is there currently any work going on in this area? What can I do to help improving the situation? Note that I have limited time to allocate in this matter (well, who = doesn't :), but want to do my part if others are interested to make an = effort as well. The Mailman software is a really good peice of software = in concept and design, part from the localization aspects that is. I also want to mention that I earlier made a try to localize Majordomo. = Same problem. Since I'm a python fan, I was delighted to find out about = Mailman. Anyway, localization is an important issue, IMHO. Cheers, Tomas ------=_NextPart_000_001D_01BDD19B.F3797000 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hi.
I checked out the latest sources in = order to try=20 a translation to Swedish. I = quickly found out=20 that this was to become a rather complicated task. Presentation texts are practically shattered all over the=20 sources.
Is there currently any work going on = in this=20 area?
What can I do to help improving the=20 situation?
Note that I have limited time to = allocate in=20 this matter (well, who doesn't :), but want to do my part if others are=20 interested to make an effort as well. The=20 Mailman software is a really good peice of software in concept and = design, part=20 from the localization aspects that is.
I also want to mention that I = earlier made a try=20 to localize Majordomo. Same problem. Since I'm a python fan, I was = delighted to=20 find out about Mailman. Anyway, localization is an important issue,=20 IMHO.
 
Cheers,
Tomas
 
------=_NextPart_000_001D_01BDD19B.F3797000-- From dragondm@delta.integral.org Thu Aug 27 07:48:58 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Thu, 27 Aug 1998 01:48:58 -0500 (CDT) Subject: [Mailman-Developers] Mailman web-archiver Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-237318664-904200538=:1550 Content-Type: TEXT/PLAIN; charset=US-ASCII Well, it's a bit rough, and there's a few more things i'd like to do with it, But my free time may be scarse lately & I'm going on vacation in a week, so I figure I'd better post this & let some folks play with it. Anyway, this is the intgrated web-archiver module for Mailman. For the moment, it still needs bsddb (mebbe after I get back I can try tackling replacing that) To get this working, here is what ye need to do: 1) Make sure you have the bsddb module compiled :P 2) Make sure you have somewhere in your PYTHONPATH the following python modules: a) The latest pipermail (0.0.5) b) Digicool's DocumentTemplate package 3) Make sure you get rid of the old pipermail 0.0.2 sitting in the Mailman package. 4) Put HyperArch.py in the Mailman package directory. 5) Put the 'arch' script in the ${prefix}/cron directory 6) Apply the included patch. 7) add an entry like this to your crontab: # Periodically update the webarchive. 0 3,9,17,23 * * * /usr/local/bin/python /usr/services/mailman/cron/arch Notes: You can run the arch script as often as you like, depending on how up-to-date you want your webarchives to be. You also can run the script from the command line to manually add articles to the archive. (I just ran three years worth of traffic from a reasonabally high-volume majordomo list I'm moving over thru this system, and it went thru fine.) You can set archives to use yearly, quarterly, or monthly archives with this. You will probably want to use the 'Set date to when re-sent' option on your lists with this module. All the HTML generated by this module is generated from a template. This makes customizing the output trivial, just edit the template. (Right now the templates are static strings. This should be changed soon.) If you do not run the arch cronjob, then this module will do nothing, and will not interfere with an external archiver. -The Dragon De Monsyne ---1395546950-237318664-904200538=:1550 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: ZGlmZiAtYyAvdXNyL3NyYy9tYWlsbWFuLTEuMGI1L01haWxtYW4vQXJjaGl2 ZXIucHkgTWFpbG1hbi9BcmNoaXZlci5weQ0KKioqIC91c3Ivc3JjL21haWxt YW4tMS4wYjUvTWFpbG1hbi9BcmNoaXZlci5weQlNb24gSnVsIDI3IDE3OjQ4 OjMxIDE5OTgNCi0tLSBNYWlsbWFuL0FyY2hpdmVyLnB5CVN1biBBdWcgMTYg MTE6MTE6NTIgMTk5OA0KKioqKioqKioqKioqKioqDQoqKiogNDIsNDkgKioq Kg0KICAJc2VsZi5hcmNoaXZlX3ByaXZhdGUgPSBtbV9jZmcuREVGQVVMVF9B UkNISVZFX1BSSVZBVEUNCiAgIyMgCXNlbGYuYXJjaGl2ZV91cGRhdGVfZnJl cXVlbmN5ID0gXA0KICAjIyAJCSBtbV9jZmcuREVGQVVMVF9BUkNISVZFX1VQ REFURV9GUkVRVUVOQ1kNCiEgIyMgCXNlbGYuYXJjaGl2ZV92b2x1bWVfZnJl cXVlbmN5ID0gXA0KISAjIyAJCW1tX2NmZy5ERUZBVUxUX0FSQ0hJVkVfVk9M VU1FX0ZSRVFVRU5DWQ0KICAjIyAJc2VsZi5hcmNoaXZlX3JldGFpbl90ZXh0 X2NvcHkgPSBcDQogICMjIAkJbW1fY2ZnLkRFRkFVTFRfQVJDSElWRV9SRVRB SU5fVEVYVF9DT1BZDQogIA0KLS0tIDQyLDQ5IC0tLS0NCiAgCXNlbGYuYXJj aGl2ZV9wcml2YXRlID0gbW1fY2ZnLkRFRkFVTFRfQVJDSElWRV9QUklWQVRF DQogICMjIAlzZWxmLmFyY2hpdmVfdXBkYXRlX2ZyZXF1ZW5jeSA9IFwNCiAg IyMgCQkgbW1fY2ZnLkRFRkFVTFRfQVJDSElWRV9VUERBVEVfRlJFUVVFTkNZ DQohICAJc2VsZi5hcmNoaXZlX3ZvbHVtZV9mcmVxdWVuY3kgPSBcDQohICAJ CW1tX2NmZy5ERUZBVUxUX0FSQ0hJVkVfVk9MVU1FX0ZSRVFVRU5DWQ0KICAj IyAJc2VsZi5hcmNoaXZlX3JldGFpbl90ZXh0X2NvcHkgPSBcDQogICMjIAkJ bW1fY2ZnLkRFRkFVTFRfQVJDSElWRV9SRVRBSU5fVEVYVF9DT1BZDQogIA0K KioqKioqKioqKioqKioqDQoqKiogNjIsNzEgKioqKg0KICAgICAgZGVmIEdl dEJhc2VBcmNoaXZlVVJMKHNlbGYpOg0KICAgICAgICAgIGlmIHNlbGYuYXJj aGl2ZV9wcml2YXRlOg0KICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5q b2luKG1tX2NmZy5QUklWQVRFX0FSQ0hJVkVfVVJMLA0KISAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludGVybmFsX25hbWUgKyAi Lmh0bWwiKQ0KICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgIHJldHVy biBvcy5wYXRoLmpvaW4obW1fY2ZnLlBVQkxJQ19BUkNISVZFX1VSTCwNCiEg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnRlcm5h bF9uYW1lICsgIi5odG1sIikNCiAgDQogICAgICBkZWYgR2V0Q29uZmlnSW5m byhzZWxmKToNCiAgCXJldHVybiBbDQotLS0gNjIsNzEgLS0tLQ0KICAgICAg ZGVmIEdldEJhc2VBcmNoaXZlVVJMKHNlbGYpOg0KICAgICAgICAgIGlmIHNl bGYuYXJjaGl2ZV9wcml2YXRlOg0KICAgICAgICAgICAgICByZXR1cm4gb3Mu cGF0aC5qb2luKG1tX2NmZy5QUklWQVRFX0FSQ0hJVkVfVVJMLA0KISAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludGVybmFsX25h bWUgKyBtbV9jZmcuUFJJVkFURV9BUkNISVZFX1VSTF9FWFQpDQogICAgICAg ICAgZWxzZToNCiAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbiht bV9jZmcuUFVCTElDX0FSQ0hJVkVfVVJMLA0KISAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNlbGYuX2ludGVybmFsX25hbWUgKyBtbV9jZmcu UFJJVkFURV9BUkNISVZFX1VSTF9FWFQpDQogIA0KICAgICAgZGVmIEdldENv bmZpZ0luZm8oc2VsZik6DQogIAlyZXR1cm4gWw0KKioqKioqKioqKioqKioq DQoqKiogODUsOTMgKioqKg0KICAjIyAJICAgICAiSG93IG9mdGVuIHNob3Vs ZCBuZXcgbWVzc2FnZXMgYmUgaW5jb3Jwb3JhdGVkPyAgIg0KICAjIyAJICAg ICAiMCBmb3Igbm8gYXJjaGl2YWwsIDEgZm9yIGRhaWx5LCAyIGZvciBob3Vy bHkiKSwNCiAgDQohICMjIAkgICAgKCdhcmNoaXZlX3ZvbHVtZV9mcmVxdWVu Y3knLCBtbV9jZmcuUmFkaW8sICgnWWVhcmx5JywgJ01vbnRobHknKSwNCiEg IyMgCSAgICAgMCwNCiEgIyMgCSAgICAgJ0hvdyBvZnRlbiBzaG91bGQgYSBu ZXcgYXJjaGl2ZSB2b2x1bWUgYmUgc3RhcnRlZD8nKSwNCiAgDQogICMjIAkg ICAgKCdhcmNoaXZlX3JldGFpbl90ZXh0X2NvcHknLCBtbV9jZmcuVG9nZ2xl LCAoJ05vJywgJ1llcycpLA0KICAjIyAJICAgICAwLA0KLS0tIDg1LDkzIC0t LS0NCiAgIyMgCSAgICAgIkhvdyBvZnRlbiBzaG91bGQgbmV3IG1lc3NhZ2Vz IGJlIGluY29ycG9yYXRlZD8gICINCiAgIyMgCSAgICAgIjAgZm9yIG5vIGFy Y2hpdmFsLCAxIGZvciBkYWlseSwgMiBmb3IgaG91cmx5IiksDQogIA0KISAg CSAgICAoJ2FyY2hpdmVfdm9sdW1lX2ZyZXF1ZW5jeScsIG1tX2NmZy5SYWRp bywgDQohICAgICAgICAgICAgICAgICgnWWVhcmx5JywgJ01vbnRobHknLCdR dWFydGVybHknKSwgMCwNCiEgIAkgICAgICdIb3cgb2Z0ZW4gc2hvdWxkIGEg bmV3IGFyY2hpdmUgdm9sdW1lIGJlIHN0YXJ0ZWQ/JyksDQogIA0KICAjIyAJ ICAgICgnYXJjaGl2ZV9yZXRhaW5fdGV4dF9jb3B5JywgbW1fY2ZnLlRvZ2ds ZSwgKCdObycsICdZZXMnKSwNCiAgIyMgCSAgICAgMCwNCmRpZmYgLWMgL3Vz ci9zcmMvbWFpbG1hbi0xLjBiNS9NYWlsbWFuL0RlZmF1bHRzLnB5IE1haWxt YW4vRGVmYXVsdHMucHkNCioqKiAvdXNyL3NyYy9tYWlsbWFuLTEuMGI1L01h aWxtYW4vRGVmYXVsdHMucHkJV2VkIEF1ZyAxOSAwMTo0NjozNyAxOTk4DQot LS0gTWFpbG1hbi9EZWZhdWx0cy5weQlUaHUgQXVnIDI3IDAwOjIyOjQ2IDE5 OTgNCioqKioqKioqKioqKioqKg0KKioqIDM3LDQyICoqKioNCi0tLSAzNyw0 OCAtLS0tDQogIFBVQkxJQ19BUkNISVZFX1VSTCA9ICdodHRwOi8vd3d3Lk9W RVJSSURFLldJVEguWU9VUi5QVUJMSUMuQVJDSElWRS5VUkwvJw0KICBQUklW QVRFX0FSQ0hJVkVfVVJMID0gJ2h0dHA6Ly93d3cuT1ZFUlJJREUuV0lUSC5Z T1VSLlBSSVZBVEUuQVJDSElWRS5VUkwvJw0KICANCisgREVGQVVMVF9BUkNI SVZFX1ZPTFVNRV9GUkVRVUVOQ1kgPSAxDQorIA0KKyANCisgUFVCTElDX0FS Q0hJVkVfVVJMX0VYVCA9ICcnDQorIFBSSVZBVEVfQVJDSElWRV9VUkxfRVhU ID0gJycNCisgDQogIERFRkFVTFRfQVJDSElWRV9QUklWQVRFICAgID0gMAkJ IyAwPXB1YmxpYywgMT1wcml2YXRlDQogIEhPTUVfUEFHRSAgICAgICAgID0g J2luZGV4Lmh0bWwnDQogIE1BSUxNQU5fT1dORVIgICAgID0gJ21haWxtYW4t b3duZXJAJXMnICUgREVGQVVMVF9IT1NUX05BTUUNCioqKioqKioqKioqKioq Kg0KKioqIDIxNiwyMTkgKioqKg0KICBWRVJTSU9OICAgICAgICAgICA9ICcx LjBiNScNCiAgDQogICMgRGF0YSBmaWxlIHZlcnNpb24gbnVtYmVyDQohIERB VEFfRklMRV9WRVJTSU9OID0gMw0KLS0tIDIyMiwyMjUgLS0tLQ0KICBWRVJT SU9OICAgICAgICAgICA9ICcxLjBiNScNCiAgDQogICMgRGF0YSBmaWxlIHZl cnNpb24gbnVtYmVyDQohIERBVEFfRklMRV9WRVJTSU9OID0gNA0KZGlmZiAt YyAvdXNyL3NyYy9tYWlsbWFuLTEuMGI1L01haWxtYW4vaHRtbGZvcm1hdC5w eSBNYWlsbWFuL2h0bWxmb3JtYXQucHkNCioqKiAvdXNyL3NyYy9tYWlsbWFu LTEuMGI1L01haWxtYW4vaHRtbGZvcm1hdC5weQlNb24gSnVsIDI3IDE3OjQ4 OjMxIDE5OTgNCi0tLSBNYWlsbWFuL2h0bWxmb3JtYXQucHkJV2VkIEF1ZyAx OSAwMjoyNDo0MyAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAzODMsMzg5 ICoqKioNCiAgCUlucHV0T2JqLl9faW5pdF9fKHNlbGYsIG5hbWUsICJURVhU IiwgdmFsdWUsIGNoZWNrZWQ9MCwgc2l6ZT1zaXplKQ0KICANCiAgY2xhc3Mg VGV4dEFyZWE6DQohICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdGV4 dD0nJywgcm93cz1Ob25lLCBjb2xzPU5vbmUsIHdyYXA9J3NvZnQnKToNCiAg CXNlbGYubmFtZSA9IG5hbWUNCiAgCXNlbGYudGV4dCA9IHRleHQNCiAgCXNl bGYucm93cyA9IHJvd3MNCi0tLSAzODMsMzg5IC0tLS0NCiAgCUlucHV0T2Jq Ll9faW5pdF9fKHNlbGYsIG5hbWUsICJURVhUIiwgdmFsdWUsIGNoZWNrZWQ9 MCwgc2l6ZT1zaXplKQ0KICANCiAgY2xhc3MgVGV4dEFyZWE6DQohICAgICBk ZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdGV4dD0nJywgcm93cz1Ob25lLCBj b2xzPU5vbmUsIHdyYXA9J29mZicpOg0KICAJc2VsZi5uYW1lID0gbmFtZQ0K ICAJc2VsZi50ZXh0ID0gdGV4dA0KICAJc2VsZi5yb3dzID0gcm93cw0KZGlm ZiAtYyAvdXNyL3NyYy9tYWlsbWFuLTEuMGI1L01haWxtYW4vdmVyc2lvbnMu cHkgTWFpbG1hbi92ZXJzaW9ucy5weQ0KKioqIC91c3Ivc3JjL21haWxtYW4t MS4wYjUvTWFpbG1hbi92ZXJzaW9ucy5weQlNb24gSnVsIDI3IDE3OjQ4OjMx IDE5OTgNCi0tLSBNYWlsbWFuL3ZlcnNpb25zLnB5CVdlZCBBdWcgMTkgMDI6 MzE6MDYgMTk5OA0KKioqKioqKioqKioqKioqDQoqKiogNjMsNzAgKioqKg0K ICAgICAgUHJlZmVyU3RvcmVkKCdhdXRvbWF0aWNhbGx5X3JlbW92ZScsICdh dXRvbWF0aWNfYm91bmNlX2FjdGlvbicpDQogICAgICAjICAtIGRyb3BwZWQg dmFyczoNCiAgICAgIGZvciBhIGluIFsnYXJjaGl2ZV9yZXRhaW5fdGV4dF9j b3B5JywNCiEgICAgICAgICAgICAgICAnYXJjaGl2ZV91cGRhdGVfZnJlcXVl bmN5JywNCiEgICAgICAgICAgICAgICAnYXJjaGl2ZV92b2x1bWVfZnJlcXVl bmN5J106DQogICAgICAgICAgaWYgaGFzYXR0cihsLCBhKTogZGVsYXR0cihs LCBhKQ0KICANCiAgZGVmIFVwZGF0ZU9sZFVzZXJzKGwpOg0KLS0tIDYzLDY5 IC0tLS0NCiAgICAgIFByZWZlclN0b3JlZCgnYXV0b21hdGljYWxseV9yZW1v dmUnLCAnYXV0b21hdGljX2JvdW5jZV9hY3Rpb24nKQ0KICAgICAgIyAgLSBk cm9wcGVkIHZhcnM6DQogICAgICBmb3IgYSBpbiBbJ2FyY2hpdmVfcmV0YWlu X3RleHRfY29weScsDQohICAgICAgICAgICAgICAgJ2FyY2hpdmVfdXBkYXRl X2ZyZXF1ZW5jeSddOg0KICAgICAgICAgIGlmIGhhc2F0dHIobCwgYSk6IGRl bGF0dHIobCwgYSkNCiAgDQogIGRlZiBVcGRhdGVPbGRVc2VycyhsKToNCg== ---1395546950-237318664-904200538=:1550 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=arch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: IyEvdXNyL2xvY2FsL2Jpbi9weXRob24NCg0KaW1wb3J0IHN5cywgc3RyaW5n LCBnZXRvcHQsIG9zDQppbXBvcnQgcGF0aHMNCmltcG9ydCBNYWlsbWFuLkh5 cGVyQXJjaA0KaW1wb3J0IE1haWxtYW4uVXRpbHMNCmZyb20gTWFpbG1hbi5I eXBlckFyY2ggaW1wb3J0IEh5cGVyQXJjaGl2ZQ0KZnJvbSBNYWlsbWFuLk1h aWxMaXN0IGltcG9ydCBNYWlsTGlzdA0KDQpkZWYgQXJjaExpc3QobGlzdCk6 DQogICAgbD1NYWlsTGlzdChsaXN0KQ0KICAgIGg9SHlwZXJBcmNoaXZlKGwp DQogICAgaC5wcm9jZXNzTGlzdEFyY2goKQ0KICAgIGguY2xvc2UoKQ0KDQpk ZWYgUHJpbnRVc2FnZSgpOg0KICAgIHByaW50ICgnICB1c2FnZTogYXJjaCBb LXYgfCAtLXZlcmJvc2VdIFstbCAibGlzdCIgfCAtLWxpc3QgImxpc3QiXSAn IA0KICAgICAgICAgICdbbWFpbGJveGZpbGVzXScpDQogICAgaW1wb3J0IHN5 cw0KICAgIHN5cy5leGl0KDEpDQoNCmRlZiBtYWluKCk6DQogICAgaWYgJy1o JyBpbiBzeXMuYXJndiBvciAnLT8nIGluIHN5cy5hcmd2OiANCglQcmludFVz YWdlKCkNCiAgICAgICAgcmV0dXJuDQoNCiAgICBjb25maWc9eydWRVJCT1NF JzowfQ0KICAgIA0KICAgICMgTm93IHdlIHBhcnNlIHRoZSBjb21tYW5kIGxp bmUgb3B0aW9ucw0KICAgIG9wdHMsIHBhcmFtcyA9IGdldG9wdC5nZXRvcHQo c3lzLmFyZ3ZbMTpdLCAndmw6JywgWyd2ZXJib3NlJywnbGlzdD0nXSkNCiAg ICBmb3Igb3B0aW9uLCBhcmcgaW4gb3B0czoNCglpZiBvcHRpb249PSctbCc6 IGNvbmZpZ1snTElTVCddPWFyZw0KCWlmIG9wdGlvbj09Jy12JzogY29uZmln WydWRVJCT1NFJ109MQ0KCWlmIG9wdGlvbj09Jy0tbGlzdCc6IGNvbmZpZ1sn TElTVCddPWFyZw0KCWlmIG9wdGlvbj09Jy0tdmVyYm9zZSc6IGNvbmZpZ1sn VkVSQk9TRSddPTENCg0KICAgIGlmIGNvbmZpZy5oYXNfa2V5KCdMSVNUJyk6 DQogICAgICAgIGlmIHBhcmFtczoNCiAgICAgICAgICAgIGw9TWFpbExpc3Qo Y29uZmlnWydMSVNUJ10sbG9jaz0wKQ0KICAgICAgICAgICAgaD1IeXBlckFy Y2hpdmUobCkNCiAgICAgICAgICAgIGlmIGNvbmZpZ1snVkVSQk9TRSddOg0K ICAgICAgICAgICAgICAgIGguVkVSQk9TRT0xDQogICAgICAgICAgICBmb3Ig ZWFjaCBpbiBwYXJhbXM6DQogICAgICAgICAgICAgICAgdHJ5Og0KICAgICAg ICAgICAgICAgICAgICBmPW9wZW4oZWFjaCwncicpDQogICAgICAgICAgICAg ICAgZXhjZXB0IElPRXJyb3I6DQogICAgICAgICAgICAgICAgICAgIHN5cy5z dGRlcnIud3JpdGUoIkNhbm5vdCBvcGVuICVzXG4iICUgZWFjaCApDQogICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgaC5w cm9jZXNzVW5peE1haWxib3goZixNYWlsbWFuLkh5cGVyQXJjaC5BcnRpY2xl KQ0KICAgICAgICAgICAgICAgIGYuY2xvc2UoKQ0KICAgICAgICAgICAgaC5j bG9zZSgpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBsPU1haWxMaXN0 KGNvbmZpZ1snTElTVCddKQ0KICAgICAgICAgICAgaD1IeXBlckFyY2hpdmUo bCkNCiAgICAgICAgICAgIGlmIGNvbmZpZ1snVkVSQk9TRSddOg0KICAgICAg ICAgICAgICAgIGguVkVSQk9TRT0xDQogICAgICAgICAgICBoLnByb2Nlc3NM aXN0QXJjaCgpDQogICAgICAgICAgICBoLmNsb3NlKCkNCiAgICBlbHNlOg0K ICAgICAgICAjbG9vcCB0aHJ1IGFsbCB0aGUgbGlzdHMsIGRvaW5nIGFyY2hp dmluZyAtZGRtLiAgICAgDQogICAgICAgIGZvciBlYWNoIGluIE1haWxtYW4u VXRpbHMubGlzdF9uYW1lcygpOg0KICAgICAgICAgICAgaWYgY29uZmlnWydW RVJCT1NFJ106DQogICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgi UHJvY2Vzc2luZyBsaXN0ICVzXG4iICUgZWFjaCkNCiAgICAgICAgICAgIGw9 TWFpbExpc3QoZWFjaCkNCiAgICAgICAgICAgIGlmIG5vdCBsLmFyY2hpdmU6 DQogICAgICAgICAgICAgICAgbC5VbmxvY2soKQ0KICAgICAgICAgICAgICAg IGRlbCBsDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgIGg9 SHlwZXJBcmNoaXZlKGwpDQogICAgICAgICAgICAgICAgaWYgY29uZmlnWydW RVJCT1NFJ106DQogICAgICAgICAgICAgICAgICAgIGguVkVSQk9TRT0xDQog ICAgICAgICAgICAgICAgaC5wcm9jZXNzTGlzdEFyY2goKQ0KICAgICAgICAg ICAgICAgIGguY2xvc2UoKQ0KICAgICAgICAgICAgICAgICAgICANCmlmIF9f bmFtZV9fID09ICdfX21haW5fXyc6DQogICAgbWFpbigpDQo= ---1395546950-237318664-904200538=:1550 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="HyperArch.py" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: IiIiSHlwZXJBcmNoOiAgUGlwZXJtYWlsIGFyY2hpdmluZyBmb3IgTWFpbE1h biwgdXNpbmcgRG9jdW1lbnRUZW1wbGF0ZQ0KICAgdGVtcGxhdGVzIA0KDQog ICAgICAgLSBUaGUgRHJhZ29uIERlIE1vbnN5bmUgPGRyYWdvbmRtQGludGVn cmFsLm9yZz4gDQoNCiAgIFNlZSA8aHR0cDovL3d3dy5kaWdpY29vbC5jb20v c2l0ZS9QcmluY2lwaWEvRFRNTC5odG1sPiBmb3Igc29tZSBleHBsYW5hdGlv bg0KICAgb2YgRFRNTCAoRG9jdW1lbnRUZW1wbGF0ZSkgU3ludGF4LiANCiAg ICAoTm90ZTogdGhlIFVSTCBsaXN0ZWQgYWN1YWxseSBkb2N1bWVudHMgYSBz bGlnaHRseSBleHRlbmRlZCBEVE1MIHN5bnRheCANCiAgICAgdXNlZCBieSBh IHByb2R1Y3QgY2FsbGVkIFByaW5jaXBpYS4gQnVnIHRoZSBmb2xrcyBhdCBE aWdpY29vbCBmZXIgJ3BsYWluJw0KICAgICBEVE1MIGRvY3VtZW50YXRpb24g Oj4gKQ0KDQogICBUT0RPOg0KICAgICAtIFRoZSB0ZW1wbGF0ZXMgc2hvdWxk IGJlIGJlIGZpbGVzIGluIE1haWxtYW4ncyBUZW1wbGF0ZSBkaXIsIGluc3Rl YWQNCiAgICAgICBvZiBzdGF0aWMgc3RyaW5ncy4NCiAgICAgLSBFYWNoIGxp c3Qgc2hvdWxkIGJlIGFibGUgdG8gaGF2ZSBpdCdzIG93biB0ZW1wbGF0ZXMu DQogICAgICAgQWxzbywgaXQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZmFsbCBi YWNrIHRvIGRlZmF1bHQgdGVtcGxhdGUgaW4gY2FzZSANCiAgICAgICBvZiBl cnJvciBpbiBsaXN0IHNwZWNpZmljIHRlbXBsYXRlLiANCiAgICAgLSBTaG91 bGQgYmUgYWJsZSB0byBmb3JjZSBhbGwgSFRNTCB0byBiZSByZWdlbmVyYXRl ZCBuZXh0IHRpbWUgdGhlIGFyY2hpdmUNCiAgICAgICBpcyBydW4sIGluY2Fz ZSBhIHRlbXBsYXRlIGlzIGNoYW5nZWQuIA0KICAgICAtIFJlcGxhY2UgcGlw ZXJtYWlsLkJTRERCZGF0YWJhc2Ugd2l0aCBzb21ldGhpbmcgdGhhdCBkb3Nl bid0IHJlcXVpcmUgYSBDDQogICAgICAgZXh0ZW50aW9uIChpLmUuIGJzZGRi KS4gIA0KICAgICAgIChQZXJoYXBzIEJvYm9QT1MgPGh0dHA6Ly93d3cuZGln aWNvb2wuY29tL3JlbGVhc2VzL2JvYm8vQm9ib1BPUy1ybi5odG1sPg0KICAg ICAgIGNvdWxkIGJlIHVzZWQgaGVyZT8pDQogICAgIC0gUnVuIGEgY29tbWFu ZCB0byBnZW5lcmF0ZSB0YXJiYWxsIG9mIGh0bWwgYXJjaGl2ZXMgZm9yIGRv d25sb2FkaW5nDQogICAgICAgKHByb2xseSBpbiB0aGUgJ3VwZGF0ZV9kaXJ0 eV9hcmNoaXZlcycgbWV0aG9kICkNCg0KIiIiICAgDQoNCmltcG9ydCByZSwg Y2dpLCB1cmxsaWIsIHN0cmluZw0KaW1wb3J0IHRpbWUsIHBpY2tsZSwgb3Ms IHBvc2l4ZmlsZQ0KaW1wb3J0IERvY3VtZW50VGVtcGxhdGUNCmltcG9ydCBw aXBlcm1haWwNCmltcG9ydCBtbV9jZmcNCg0KYXJ0aWNsZV90ZXh0X3RlbXBs YXRlPSIiIkZyb20gPCEtLSN2YXIgZW1haWwgLS0+ICA8IS0tI3ZhciBkYXRl c3RyIC0tPg0KRGF0ZTogPCEtLSN2YXIgZGF0ZXN0ciAtLT4NCkZyb206IDwh LS0jdmFyIGF1dGhvciAtLT4gPDwhLS0jdmFyIGVtYWlsIC0tPj4NClN1Ympl Y3Q6IDwhLS0jdmFyIHN1YmplY3QgLS0+DQoNCjwhLS0jaW4gYm9keSAtLT48 IS0tI3ZhciBzZXF1ZW5jZS1pdGVtICAtLT48IS0tIy9pbiAtLT4NCg0KIiIi DQoNCmFydGljbGVfdGVtcGxhdGU9IiIiPCFET0NUWVBFIEhUTUwgUFVCTElD ICItLy9XM0MvL0RURCBIVE1MIDMuMi8vRU4iPg0KPEhUTUw+DQogPEhFQUQ+ DQogICA8VElUTEU+PCEtLSN2YXIgc3ViamVjdCBodG1sX3F1b3RlIC0tPjwv VElUTEU+DQogICA8TElOSyBSRUw9IkluZGV4IiBIUkVGPSJpbmRleC5odG1s IiA+DQogICA8TElOSyBSRUw9Im1hZGUiIEhSRUY9Im1haWx0bzo8IS0tI3Zh ciBlbWFpbCB1cmxfcXVvdGUgLS0+Ij4NCiAgIDwhLS1saW5rdGhyZWFkcy0t Pg0KICAgPCEtLSNpZiBwcmV2IC0tPg0KICAgIDxMSU5LIFJFTD0iUHJldmlv dXMiICBIUkVGPSI8IS0tI3ZhciBleHByPSJwcmV2LmZpbGVuYW1lIiB1cmxf cXVvdGUgLS0+Ij4gDQogICA8IS0tIy9pZiAtLT4NCiAgIDwhLS0jaWYgbmV4 dCAtLT4NCiAgICA8TElOSyBSRUw9Ik5leHQiICBIUkVGPSI8IS0tI3ZhciBl eHByPSJuZXh0LmZpbGVuYW1lIiB1cmxfcXVvdGUgLS0+Ij4gDQogICA8IS0t Iy9pZiAtLT4NCiAgIDwhLS1lbmRsaW5rdGhyZWFkcy0tPg0KIDwvSEVBRD4N CiA8Qk9EWSBCR0NPTE9SPSIjZmZmZmZmIj4NCiAgIDxIMT48IS0tI3ZhciBz dWJqZWN0IGh0bWxfcXVvdGUgLS0+PC9IMT4NCiAgICA8Qj48IS0tI3ZhciBh dXRob3IgaHRtbF9xdW90ZSAtLT48L0I+IA0KICAgIDxBIEhSRUY9Im1haWx0 bzo8IS0tI3ZhciBlbWFpbCB1cmxfcXVvdGUgLS0+IiBUSVRMRT0iPCEtLSN2 YXIgc3ViamVjdCBodG1sX3F1b3RlIC0tPiI+PCEtLSN2YXIgZW1haWwgaHRt bF9xdW90ZSAtLT48L0E+PEJSPg0KICAgIDxJPjwhLS0jdmFyIGRhdGVzdHIg aHRtbF9xdW90ZSAtLT48L0k+DQogICAgPFA+PFVMPg0KICAgICAgICAgPCEt LXRocmVhZHMtLT4NCiAgICAgICAgPCEtLSNpZiBwcmV2IC0tPg0KICAgICAg ICAgPExJPiBQcmV2aW91cyBtZXNzYWdlOiA8QSBIUkVGPSI8IS0tI3ZhciBl eHByPSJwcmV2LmZpbGVuYW1lIiB1cmxfcXVvdGUgLS0+Ij48IS0tI3ZhciBl eHByPSJwcmV2LnN1YmplY3QiIGh0bWxfcXVvdGUtLT48L0E+PC9saT4gDQog ICAgICAgIDwhLS0jL2lmIC0tPg0KICAgICAgICA8IS0tI2lmIG5leHQgLS0+ DQogICAgICAgICA8TEk+IE5leHQgbWVzc2FnZTogPEEgSFJFRj0iPCEtLSN2 YXIgZXhwcj0ibmV4dC5maWxlbmFtZSIgdXJsX3F1b3RlIC0tPiI+PCEtLSN2 YXIgZXhwcj0ibmV4dC5zdWJqZWN0IiBodG1sX3F1b3RlIC0tPjwvQT48L2xp PiANCiAgICAgICAgPCEtLSMvaWYgLS0+DQogICAgICAgICA8IS0tZW5kdGhy ZWFkcy0tPg0KICAgICAgICAgPExJPiA8Qj5NZXNzYWdlcyBzb3J0ZWQgYnk6 PC9CPiANCiAgICAgICAgICAgICAgPGEgaHJlZj0iZGF0ZS5odG1sIzwhLS0j dmFyIHNlcXVlbmNlIC0tPiI+WyBkYXRlIF08L2E+DQogICAgICAgICAgICAg IDxhIGhyZWY9InRocmVhZC5odG1sIzwhLS0jdmFyIHNlcXVlbmNlIC0tPiI+ WyB0aHJlYWQgXTwvYT4NCiAgICAgICAgICAgICAgPGEgaHJlZj0ic3ViamVj dC5odG1sIzwhLS0jdmFyIHNlcXVlbmNlIC0tPiI+WyBzdWJqZWN0IF08L2E+ DQogICAgICAgICAgICAgIDxhIGhyZWY9ImF1dGhvci5odG1sIzwhLS0jdmFy IHNlcXVlbmNlIC0tPiI+WyBhdXRob3IgXTwvYT4NCiAgICAgICAgIDwvTEk+ DQogICAgICAgPC9VTD4NCiAgICA8SFI+ICANCjwhLS1iZWdpbmFydGljbGUt LT4NCjwhLS0jaW4gYm9keSAtLT48IS0tI3ZhciBzZXF1ZW5jZS1pdGVtICAt LT48IS0tIy9pbiAtLT4NCg0KPCEtLWVuZGFydGljbGUtLT4NCiAgICA8SFI+ DQogICAgPFA+PFVMPg0KICAgICAgICAgPCEtLXRocmVhZHMtLT4NCiAgICAg ICAgPCEtLSNpZiBwcmV2IC0tPg0KICAgICAgICAgPExJPiBQcmV2aW91cyBt ZXNzYWdlOiA8QSBIUkVGPSI8IS0tI3ZhciBleHByPSJwcmV2LmZpbGVuYW1l IiB1cmxfcXVvdGUgLS0+Ij48IS0tI3ZhciBleHByPSJwcmV2LnN1YmplY3Qi IGh0bWxfcXVvdGUtLT48L0E+PC9saT4gDQogICAgICAgIDwhLS0jL2lmIC0t Pg0KICAgICAgICA8IS0tI2lmIG5leHQgLS0+DQogICAgICAgICA8TEk+IE5l eHQgbWVzc2FnZTogPEEgSFJFRj0iPCEtLSN2YXIgZXhwcj0ibmV4dC5maWxl bmFtZSIgdXJsX3F1b3RlIC0tPiI+PCEtLSN2YXIgZXhwcj0ibmV4dC5zdWJq ZWN0IiBodG1sX3F1b3RlIC0tPjwvQT48L2xpPiANCiAgICAgICAgPCEtLSMv aWYgLS0+DQogICAgICAgICA8IS0tZW5kdGhyZWFkcy0tPg0KICAgICAgICAg PExJPiA8Qj5NZXNzYWdlcyBzb3J0ZWQgYnk6PC9CPiANCiAgICAgICAgICAg ICAgPGEgaHJlZj0iZGF0ZS5odG1sIzwhLS0jdmFyIHNlcXVlbmNlIC0tPiI+ WyBkYXRlIF08L2E+DQogICAgICAgICAgICAgIDxhIGhyZWY9InRocmVhZC5o dG1sIzwhLS0jdmFyIHNlcXVlbmNlIC0tPiI+WyB0aHJlYWQgXTwvYT4NCiAg ICAgICAgICAgICAgPGEgaHJlZj0ic3ViamVjdC5odG1sIzwhLS0jdmFyIHNl cXVlbmNlIC0tPiI+WyBzdWJqZWN0IF08L2E+DQogICAgICAgICAgICAgIDxh IGhyZWY9ImF1dGhvci5odG1sIzwhLS0jdmFyIHNlcXVlbmNlIC0tPiI+WyBh dXRob3IgXTwvYT4NCiAgICAgICAgIDwvTEk+DQogICAgICAgPC9VTD4NCjwv Ym9keT48L2h0bWw+DQoiIiINCg0KaW5kZXhfaGVhZGVyX3RlbXBsYXRlPSIi IjwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIv L0VOIj4NCjxIVE1MPg0KICA8SEVBRD4NCiAgICAgPHRpdGxlPlRoZSA8IS0t I3ZhciBleHByPSJtYWlsbGlzdC5yZWFsX25hbWUiIC0tPiA8IS0tI3ZhciBh cmNoaXZlIC0tPiBBcmNoaXZlIGJ5IDwhLS0jdmFyIHR5cGUgLS0+PC90aXRs ZT4NCiAgPC9IRUFEPg0KICA8Qk9EWSBCR0NPTE9SPSIjZmZmZmZmIj4NCiAg ICAgIDxhIG5hbWU9InN0YXJ0Ij48L0E+DQogICAgICA8aDE+PCEtLSN2YXIg YXJjaGl2ZSAtLT4gQXJjaGl2ZXMgYnkgPCEtLSN2YXIgdHlwZSAtLT48L2gx Pg0KICAgICAgPHVsPg0KICAgICAgICAgPGxpPiA8Yj5NZXNzYWdlcyBzb3J0 ZWQgYnk6PC9iPg0KICAgICAgICAgICAgICA8IS0tI2lmIGV4cHI9InR5cGU8 PidUaHJlYWQnICIgLS0+DQoJCTxhIGhyZWY9InRocmVhZC5odG1sI3N0YXJ0 Ij5bIHRocmVhZCBdPC9hPg0KICAgICAgICAgICAgICA8IS0tIy9pZiAtLT4g DQogICAgICAgICAgICAgIDwhLS0jaWYgZXhwcj0idHlwZTw+J1N1YmplY3Qn ICIgLS0+DQoJCTxhIGhyZWY9InN1YmplY3QuaHRtbCNzdGFydCI+WyBzdWJq ZWN0IF08L2E+DQogICAgICAgICAgICAgIDwhLS0jL2lmIC0tPiANCiAgICAg ICAgICAgICAgPCEtLSNpZiBleHByPSJ0eXBlPD4nQXV0aG9yJyAiIC0tPg0K CQk8YSBocmVmPSJhdXRob3IuaHRtbCNzdGFydCI+WyBhdXRob3IgXTwvYT4N CiAgICAgICAgICAgICAgPCEtLSMvaWYgLS0+IA0KICAgICAgICAgICAgICA8 IS0tI2lmIGV4cHI9InR5cGU8PiAnRGF0ZScgIiAtLT4NCgkJPGEgaHJlZj0i ZGF0ZS5odG1sI3N0YXJ0Ij5bIGRhdGUgXTwvYT4NCiAgICAgICAgICAgICAg PCEtLSMvaWYgLS0+IDwvbGk+DQoJICAgICA8bGk+PGI+PGEgaHJlZj0iPCEt LSN2YXIgZXhwcj0ibWFpbGxpc3QuR2V0QWJzb2x1dGVTY3JpcHRVUkwoJ2xp c3RpbmZvJykiIC0tPiI+TW9yZSBpbmZvIG9uIHRoaXMgbGlzdC4uLjwvYT48 L2I+PC9saT4NCiAJIDwhLS0jaWYgQVJDSElWRVMgLS0+DQoJICAgICA8bGk+ IDxiPjxhIGhyZWY9IjwhLS0jdmFyIEFSQ0hJVkVTIC0tPiI+T3RoZXIgbWFp bCBhcmNoaXZlczwvYT48L2I+IDwvbGk+DQoJIDwhLS0jL2lmIC0tPg0KICAg ICAgPC91bD4NCiAgICAgIDxwPjxiPlN0YXJ0aW5nOjwvYj4gPGk+PCEtLSN2 YXIgZmlyc3RkYXRlIC0tPjwvaT48YnI+DQogICAgICAgICA8Yj5FbmRpbmc6 PC9iPiA8aT48IS0tI3ZhciBsYXN0ZGF0ZSAtLT48L2k+PGJyPg0KICAgICAg ICAgPGI+TWVzc2FnZXM6PC9iPiA8IS0tI3ZhciBzaXplIC0tPjxwPg0KICAg ICA8dWw+DQoNCiIiIg0KDQppbmRleF9mb290ZXJfdGVtcGxhdGU9IiIiDQog ICAgPC91bD4NCiAgICA8cD4NCiAgICAgIDxhIG5hbWU9ImVuZCI+PGI+TGFz dCBtZXNzYWdlIGRhdGU6PC9iPjwvYT4gDQogICAgICAgPGk+PCEtLSN2YXIg bGFzdGRhdGUgLS0+PC9pPjxicj4NCiAgICA8Yj5BcmNoaXZlZCBvbjo8L2I+ IDxpPjwhLS0jdmFyIGFyY2hpdmVkYXRlIC0tPjwvaT4NCiAgICA8cD4NCiAg IDx1bD4NCiAgICAgICAgIDxsaT4gPGI+TWVzc2FnZXMgc29ydGVkIGJ5Ojwv Yj4NCiAgICAgICAgICAgICAgPCEtLSNpZiBleHByPSJ0eXBlPD4nVGhyZWFk JyAiIC0tPg0KCQk8YSBocmVmPSJ0aHJlYWQuaHRtbCNzdGFydCI+WyB0aHJl YWQgXTwvYT4NCiAgICAgICAgICAgICAgPCEtLSMvaWYgLS0+IA0KICAgICAg ICAgICAgICA8IS0tI2lmIGV4cHI9InR5cGU8PidTdWJqZWN0JyAiIC0tPg0K CQk8YSBocmVmPSJzdWJqZWN0Lmh0bWwjc3RhcnQiPlsgc3ViamVjdCBdPC9h Pg0KICAgICAgICAgICAgICA8IS0tIy9pZiAtLT4gDQogICAgICAgICAgICAg IDwhLS0jaWYgZXhwcj0idHlwZTw+J0F1dGhvcicgIiAtLT4NCgkJPGEgaHJl Zj0iYXV0aG9yLmh0bWwjc3RhcnQiPlsgYXV0aG9yIF08L2E+DQogICAgICAg ICAgICAgIDwhLS0jL2lmIC0tPiANCiAgICAgICAgICAgICAgPCEtLSNpZiBl eHByPSJ0eXBlPD4gJ0RhdGUnICIgLS0+DQoJCTxhIGhyZWY9ImRhdGUuaHRt bCNzdGFydCI+WyBkYXRlIF08L2E+DQogICAgICAgICAgICAgIDwhLS0jL2lm IC0tPiA8L2xpPg0KCSAgICAgPGxpPjxiPjxhIGhyZWY9IjwhLS0jdmFyIGV4 cHI9Im1haWxsaXN0LkdldEFic29sdXRlU2NyaXB0VVJMKCdsaXN0aW5mbycp IiAtLT4iPk1vcmUgaW5mbyBvbiB0aGlzIGxpc3QuLi48L2E+PC9iPjwvbGk+ DQogCSA8IS0tI2lmIEFSQ0hJVkVTIC0tPg0KCSAgICAgPGxpPiA8Yj48YSBo cmVmPSI8IS0tI3ZhciBBUkNISVZFUyAtLT4iPk90aGVyIG1haWwgYXJjaGl2 ZXM8L2E+PC9iPiA8L2xpPg0KCSA8IS0tIy9pZiAtLT4NCiAgICAgPC91bD4N CiAgICAgPHA+DQogICAgIDxocj4NCiAgICAgPGk+VGhpcyBhcmNoaXZlIHdh cyBnZW5lcmF0ZWQgYnkgPGEgaHJlZj0iaHR0cDovL3N0YXJzaGlwLnNreXBv cnQubmV0L2NyZXcvYW1rL21haW50YWluZWQvcGlwZXJtYWlsLmh0bWwiPlBp cGVybWFpbCA8IS0tI3ZhciB2ZXJzaW9uIC0tPjwvYT4uPC9pPg0KICA8L0JP RFk+DQo8L0hUTUw+IiIiDQoNCg0KVE9DX3RlbXBsYXRlPSIiIjwhRE9DVFlQ RSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCAzLjIvL0VOIj4NCjxI VE1MPg0KICA8SEVBRD4NCiAgICAgPHRpdGxlPlRoZSA8IS0tI3ZhciBleHBy PSJtYWlsbGlzdC5yZWFsX25hbWUiICAtLT4gQXJjaGl2ZXM8L3RpdGxlPg0K ICA8L0hFQUQ+DQogIDxCT0RZIEJHQ09MT1I9IiNmZmZmZmYiPg0KICAgICA8 aDE+VGhlIDwhLS0jdmFyIGV4cHI9Im1haWxsaXN0LnJlYWxfbmFtZSIgIC0t PiBBcmNoaXZlcyA8L2gxPg0KICAgICA8cD4NCiAgICAgIDxhIGhyZWY9Ijwh LS0jdmFyIGV4cHI9Im1haWxsaXN0LkdldEFic29sdXRlU2NyaXB0VVJMKCds aXN0aW5mbycpIiAtLT4iPk1vcmUgaW5mbyBvbiB0aGlzIGxpc3QuLi48L2E+ DQogICAgIDwvcD4NCiAgICAgPCEtLSNpZiBhcmNoaXZlcyAtLT4NCiAgICAg IDwhLS0jaW4gYXJjaGl2ZXMgLS0+DQogICAgICAgIDwhLS0jaWYgc2VxdWVu Y2Utc3RhcnQgIC0tPg0KICAgICAgICAgPHRhYmxlIGJvcmRlcj0zPg0KICAg ICAgICAgIDx0cj48dGQ+QXJjaGl2ZTwvdGQ+IDx0ZD5WaWV3IGJ5OjwvdGQ+ IDx0ZD5Eb3dubG9hZGFibGUgdmVyc2lvbjwvdGQ+PC90cj4NCiAgICAgICAg PCEtLSMvaWYgLS0+DQogICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRk PjwhLS0jdmFyIHNlcXVlbmNlLWl0ZW0gIC0tPjo8L3RkPg0KICAgICAgICAg ICAgPHRkPg0KICAgICAgICAgICAgICA8QSBocmVmPSI8IS0tI3ZhciBzZXF1 ZW5jZS1pdGVtICAtLT4vdGhyZWFkLmh0bWwiPlsgVGhyZWFkIF08L2E+DQog ICAgICAgICAgICAgIDxBIGhyZWY9IjwhLS0jdmFyIHNlcXVlbmNlLWl0ZW0g IC0tPi9zdWJqZWN0Lmh0bWwiPlsgU3ViamVjdCBdPC9hPg0KICAgICAgICAg ICAgICA8QSBocmVmPSI8IS0tI3ZhciBzZXF1ZW5jZS1pdGVtICAtLT4vYXV0 aG9yLmh0bWwiPlsgQXV0aG9yIF08L2E+DQogICAgICAgICAgICAgIDxBIGhy ZWY9IjwhLS0jdmFyIHNlcXVlbmNlLWl0ZW0gIC0tPi9kYXRlLmh0bWwiPlsg RGF0ZSBdPC9hPg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0 ZD48QSBocmVmPSI8IS0tI3ZhciBzZXF1ZW5jZS1pdGVtICAtLT4udHh0Lmd6 Ij5bIFRleHQgXTwvYT48L3RkPiANCiAgICAgICAgICA8L3RyPg0KICAgICAg ICA8IS0tI2lmIHNlcXVlbmNlLWVuZCAtLT4NCiAgICAgICAgIDwvdGFibGU+ DQogICAgICAgIDwhLS0jL2lmIC0tPg0KICAgICAgPCEtLSMvaW4gLS0+DQoN CiAgICAgPCEtLSNlbHNlIC0tPg0KICAgICAgIDxQPkN1cnJlbnRseSwgdGhl cmUgYXJlIG5vIGFyY2hpdmVzLiA8L1A+IA0KICAgICA8IS0tIy9pZiAtLT4N CiAgPC9CT0RZPg0KPC9IVE1MPiIiIg0KDQpkZWYgQ0dJZXNjYXBlKGFyZyk6 IA0KICAgIHM9Y2dpLmVzY2FwZShzdHIoYXJnKSkNCiAgICBzPXJlLnN1Yign IicsICcmcXVvdDsnLCBzKQ0KICAgIHJldHVybiBzDQoNCiMgUGFyZW50aGVz aXplZCBodW1hbiBuYW1lIA0KcGFyZW5fbmFtZV9wYXQ9cmUuY29tcGlsZShy JyhbKF0uKlspXSknKSANCiMgU3ViamVjdCBsaW5lcyBwcmVjZWRlZCB3aXRo ICdSZTonIA0KUkVwYXQ9cmUuY29tcGlsZSggciJccypSRVxzKjpccyoiLA0K CQkgIHJlLklHTk9SRUNBU0UpDQojIEUtbWFpbCBhZGRyZXNzZXMgYW5kIFVS THMgaW4gdGV4dA0KZW1haWxwYXQ9cmUuY29tcGlsZShyJyhbLSssLlx3XStA Wy0rLlx3XSspJykgDQojICBBcmdoISAgVGhpcyBwYXR0ZXJuIGlzIGJ1Z2d5 LCBhbmQgd2lsbCBjaG9rZSBvbiBVUkxzIHdpdGggR0VUIHBhcmFtZXRlcnMu DQp1cmxwYXQ9cmUuY29tcGlsZShyJyhcdys6Ly9bXj4pXHNdKyknKSAjIFVS THMgaW4gdGV4dA0KIyBCbGFuayBsaW5lcw0KYmxhbmtwYXQ9cmUuY29tcGls ZShyJ15ccyokJykNCg0KIyANCiMgU3RhcnRpbmcgPGh0bWw+IGRpcmVjdGl2 ZQ0KaHRtbHBhdD1yZS5jb21waWxlKHInXlxzKjxIVE1MPlxzKiQnLCByZS5J R05PUkVDQVNFKSAgICANCiMgRW5kaW5nIDwvaHRtbD4gZGlyZWN0aXZlDQpu b2h0bWxwYXQ9cmUuY29tcGlsZShyJ15ccyo8L0hUTUw+XHMqJCcsIHJlLklH Tk9SRUNBU0UpIA0KIyBNYXRjaCBxdW90ZWQgdGV4dA0KcXVvdGVkcGF0PXJl LmNvbXBpbGUocideKFs+fDpdfCZndDspKycpDQoNCg0KIyBOb3RlOiBJJ20g b3ZlcnJpZGluZyBtb3N0LCBpZiBub3QgYWxsIG9mIHRoZSBwaXBlcm1haWwg QXJ0aWNsZSBjbGFzcyBoZXJlIC1kZG0NCiMgVGhlIEFydGljbGUgY2xhc3Mg ZW5jYXBzdWxhdGVzIGEgc2luZ2xlIHBvc3RpbmcuICBUaGUgYXR0cmlidXRl cyANCiMgYXJlOg0KIw0KIyAgc2VxdWVuY2UgOiBTZXF1ZW5jZSBudW1iZXIs IHVuaXF1ZSBmb3IgZWFjaCBhcnRpY2xlIGluIGEgc2V0IG9mIGFyY2hpdmVz DQojICBzdWJqZWN0ICA6IFN1YmplY3QNCiMgIGRhdGVzdHIgIDogVGhlIHBv c3RpbmcgZGF0ZSwgaW4gaHVtYW4tcmVhZGFibGUgZm9ybWF0DQojICBkYXRl ICAgICA6IFRoZSBwb3N0aW5nIGRhdGUsIGluIHB1cmVseSBudW1lcmljIGZv cm1hdA0KIyAgaGVhZGVycyAgOiBBbnkgb3RoZXIgaGVhZGVycyBvZiBpbnRl cmVzdA0KIyAgYXV0aG9yICAgOiBUaGUgYXV0aG9yJ3MgbmFtZSAoYW5kIHBv c3NpYmx5IG9yZ2FuaXphdGlvbikNCiMgIGVtYWlsICAgIDogVGhlIGF1dGhv cidzIGUtbWFpbCBhZGRyZXNzDQojICBtc2dpZCAgICA6IEEgdW5pcXVlIG1l c3NhZ2UgSUQNCiMgIGluX3JlcGx5X3RvIDogSWYgIT0iIiwgdGhpcyBpcyB0 aGUgbXNnaWQgb2YgdGhlIGFydGljbGUgYmVpbmcgcmVwbGllZCB0bw0KIyAg cmVmZXJlbmNlczogQSAocG9zc2libHkgZW1wdHkpIGxpc3Qgb2YgbXNnaWQn cyBvZiBlYXJsaWVyIGFydGljbGVzIGluIHRoZSB0aHJlYWQNCiMgIGJvZHkg ICAgIDogQSBsaXN0IG9mIHN0cmluZ3MgbWFraW5nIHVwIHRoZSBtZXNzYWdl IGJvZHkNCg0KY2xhc3MgQXJ0aWNsZShwaXBlcm1haWwuQXJ0aWNsZSk6DQog ICAgX19sYXN0X2FydGljbGVfdGltZT10aW1lLnRpbWUoKQ0KDQogICAgaHRt bF90bXBsPURvY3VtZW50VGVtcGxhdGUuSFRNTChhcnRpY2xlX3RlbXBsYXRl KQ0KICAgIHRleHRfdG1wbD1Eb2N1bWVudFRlbXBsYXRlLkhUTUwoYXJ0aWNs ZV90ZXh0X3RlbXBsYXRlKQ0KDQogICAgZGVmIGFzX2h0bWwoc2VsZik6DQog ICAgICAgIHJldHVybiBzZWxmLmh0bWxfdG1wbChzZWxmKQ0KDQogICAgZGVm IGFzX3RleHQoc2VsZik6DQogICAgICAgIHJldHVybiBzZWxmLnRleHRfdG1w bChzZWxmKQ0KDQogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2U9Tm9u ZSwgc2VxdWVuY2U9MCwga2VlcEhlYWRlcnM9W10pOg0KCWltcG9ydCB0aW1l DQoJaWYgbWVzc2FnZT09Tm9uZTogcmV0dXJuDQoJc2VsZi5zZXF1ZW5jZT1z ZXF1ZW5jZQ0KDQoJc2VsZi5wYXJlbnRJRCA9IE5vbmUgDQogICAgICAgIHNl bGYudGhyZWFkS2V5ID0gTm9uZQ0KICAgICAgICBzZWxmLnByZXY9Tm9uZQ0K ICAgICAgICBzZWxmLm5leHQ9Tm9uZQ0KCSMgb3RoZXJ3aXNlIHRoZSBjdXJy ZW50IHNlcXVlbmNlIG51bWJlciBpcyB1c2VkLg0KCWlkPXBpcGVybWFpbC5z dHJpcF9zZXBhcmF0b3JzKG1lc3NhZ2UuZ2V0aGVhZGVyKCdNZXNzYWdlLUlk JykpDQoJaWYgaWQ9PSIiOiBzZWxmLm1zZ2lkPXN0cihzZWxmLnNlcXVlbmNl KQ0KCWVsc2U6IHNlbGYubXNnaWQ9aWQNCg0KCWlmIG1lc3NhZ2UuaGFzX2tl eSgnU3ViamVjdCcpOiBzZWxmLnN1YmplY3Q9c3RyKG1lc3NhZ2VbJ1N1Ympl Y3QnXSkNCgllbHNlOiBzZWxmLnN1YmplY3Q9J05vIHN1YmplY3QnDQoJaT0w DQoJd2hpbGUgKGkhPS0xKToNCgkgICAgcmVzdWx0PVJFcGF0Lm1hdGNoKHNl bGYuc3ViamVjdCkNCgkgICAgaWYgcmVzdWx0OiANCgkJaSA9IHJlc3VsdC5l bmQoMCkNCgkJc2VsZi5zdWJqZWN0PXNlbGYuc3ViamVjdFtpOl0NCgkgICAg ZWxzZTogaT0tMQ0KCWlmIHNlbGYuc3ViamVjdD09IiI6IHNlbGYuc3ViamVj dD0nTm8gc3ViamVjdCcNCg0KCWlmIG1lc3NhZ2UuaGFzX2tleSgnRGF0ZScp OiANCgkgICAgc2VsZi5kYXRlc3RyPXN0cihtZXNzYWdlWydEYXRlJ10pDQog ICAJICAgIGRhdGU9bWVzc2FnZS5nZXRkYXRlX3R6KCdEYXRlJykNCgllbHNl OiANCgkgICAgc2VsZi5kYXRlc3RyPSdOb25lJyANCgkgICAgZGF0ZT1Ob25l DQoJaWYgZGF0ZSE9Tm9uZToNCgkgICAgZGF0ZSwgdHpvZmZzZXQ9ZGF0ZVs6 OV0sIGRhdGVbLTFdIA0KICAgICAgICAgICAgaWYgbm90IHR6b2Zmc2V0Og0K ICAgICAgICAgICAgICAgIHR6b2Zmc2V0ID0gMA0KCSAgICBkYXRlPXRpbWUu bWt0aW1lKGRhdGUpLXR6b2Zmc2V0DQoJZWxzZToNCgkgICAgZGF0ZT1zZWxm Ll9fbGFzdF9hcnRpY2xlX3RpbWUrMSANCiMgICAgICAgICAgICBwcmludCAn QXJ0aWNsZSB3aXRob3V0IGRhdGU6Jywgc2VsZi5tc2dpZA0KCSAgICANCglz ZWxmLl9fbGFzdF9hcnRpY2xlX3RpbWU9ZGF0ZSANCglzZWxmLmRhdGU9JyUw MTFpJyAlIChkYXRlLCkNCg0KCSMgRmlndXJlIG91dCB0aGUgZS1tYWlsIGFk ZHJlc3MgYW5kIHBvc3RlcidzIG5hbWUNCglzZWxmLmF1dGhvciwgc2VsZi5l bWFpbD1tZXNzYWdlLmdldGFkZHIoJ0Zyb20nKQ0KIwllPW1lc3NhZ2UuZ2V0 aGVhZGVyKCdSZXBseS1UbycpDQojCWlmIGUhPU5vbmU6IHNlbGYuZW1haWw9 ZQ0KCXNlbGYuZW1haWw9cGlwZXJtYWlsLnN0cmlwX3NlcGFyYXRvcnMoc2Vs Zi5lbWFpbCkNCglzZWxmLmF1dGhvcj1waXBlcm1haWwuc3RyaXBfc2VwYXJh dG9ycyhzZWxmLmF1dGhvcikNCg0KCWlmIHNlbGYuYXV0aG9yPT0iIjogc2Vs Zi5hdXRob3I9c2VsZi5lbWFpbA0KDQoJIyBTYXZlIHRoZSAnSW4tUmVwbHkt VG86JyBhbmQgJ1JlZmVyZW5jZXM6JyBsaW5lcw0KCWlfcl90PW1lc3NhZ2Uu Z2V0aGVhZGVyKCdJbi1SZXBseS1UbycpDQoJaWYgaV9yX3Q9PU5vbmU6IHNl bGYuaW5fcmVwbHlfdG89JycNCgllbHNlOg0KCSAgICBtYXRjaD1waXBlcm1h aWwubXNnaWRfcGF0LnNlYXJjaChpX3JfdCkNCgkgICAgaWYgbWF0Y2g9PU5v bmU6IHNlbGYuaW5fcmVwbHlfdG89JycNCgkgICAgZWxzZTogc2VsZi5pbl9y ZXBseV90bz1waXBlcm1haWwuc3RyaXBfc2VwYXJhdG9ycyhtYXRjaC5ncm91 cCgxKSkNCgkJDQoJcmVmZXJlbmNlcz1tZXNzYWdlLmdldGhlYWRlcignUmVm ZXJlbmNlcycpDQoJaWYgcmVmZXJlbmNlcz09Tm9uZTogc2VsZi5yZWZlcmVu Y2VzPVtdDQoJZWxzZTogc2VsZi5yZWZlcmVuY2VzPW1hcChwaXBlcm1haWwu c3RyaXBfc2VwYXJhdG9ycywgc3RyaW5nLnNwbGl0KHJlZmVyZW5jZXMpKQ0K DQoJIyBTYXZlIGFueSBvdGhlciBpbnRlcmVzdGluZyBoZWFkZXJzDQoJc2Vs Zi5oZWFkZXJzPXt9DQoJZm9yIGkgaW4ga2VlcEhlYWRlcnM6DQoJICAgIGlm IG1lc3NhZ2UuaGFzX2tleShpKTogc2VsZi5oZWFkZXJzW2ldPW1lc3NhZ2Vb aV0NCg0KCSMgUmVhZCB0aGUgbWVzc2FnZSBib2R5DQoJc2VsZi5ib2R5PVtd DQoJbWVzc2FnZS5yZXdpbmRib2R5KCkNCgl3aGlsZSAoMSk6DQoJICAgIGxp bmU9bWVzc2FnZS5mcC5yZWFkbGluZSgpDQoJICAgIGlmIGxpbmU9PSIiOiBi cmVhaw0KCSAgICBzZWxmLmJvZHkuYXBwZW5kKGxpbmUpDQoJDQogICAgZGVm IGxvYWRib2R5X2Zyb21IVE1MKHNlbGYsZmlsZW9iaik6DQogICAgICAgIHNl bGYuYm9keT1bXQ0KICAgICAgICBiZWdpbj0wDQoJd2hpbGUoMSk6DQogICAg ICAgICAgICBsaW5lPWZpbGVvYmoucmVhZGxpbmUoKQ0KICAgICAgICAgICAg aWYgbm90IGxpbmU6DQogICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAg ICAgIGlmIChub3QgYmVnaW4pIGFuZCBzdHJpbmcuc3RyaXAobGluZSk9PSc8 IS0tYmVnaW5hcnRpY2xlLS0+JzoNCgkgICAgICAgIGJlZ2luPTENCiAgICAg ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgaWYgc3RyaW5nLnN0 cmlwKGxpbmUpPT0nPCEtLWVuZGFydGljbGUtLT4nOg0KICAgICAgICAgICAg ICAgIGJyZWFrDQogICAgICAgICAgICBpZiBiZWdpbjoNCiAgICAgICAgICAg ICAgICBzZWxmLmJvZHkuYXBwZW5kKGxpbmUpDQoNCiAgICBkZWYgX19nZXRz dGF0ZV9fKHNlbGYpOg0KICAgICAgICBkPXt9DQogICAgICAgIGZvciBlYWNo IGluIHNlbGYuX19kaWN0X18ua2V5cygpOg0KICAgICAgICAgICAgaWYgZWFj aCBpbiBbJ21haWxsaXN0JywncHJldicsJ25leHQnLCdib2R5J106DQogICAg ICAgICAgICAgICAgZFtlYWNoXSA9IE5vbmUNCiAgICAgICAgICAgIGVsc2U6 DQogICAgICAgICAgICAgICAgZFtlYWNoXSA9IHNlbGYuX19kaWN0X19bZWFj aF0NCiAgICAgICAgZFsnYm9keSddPVtdDQogICAgICAgIHJldHVybiBkDQog DQoNCmNsYXNzIEh5cGVyQXJjaGl2ZShwaXBlcm1haWwuVCk6DQoNCiAgICAj IHNvbWUgZGVmYXVsdHMNCiAgICBESVJNT0RFPTA3NTUgDQogICAgRklMRU1P REU9MDY0NCANCg0KICAgIFZFUkJPU0U9MA0KICAgIERFRkFVTFRJTkRFWD0n dGhyZWFkJw0KICAgIEFSQ0hJVkVfUEVSSU9EPSdtb250aCcNCiANCiAgICBU SFJFQURMQVpZPTANCiAgICBUSFJFQURMRVZFTFM9Mw0KDQogICAgQUxMT1dI VE1MPTENCiAgICBTSE9XSFRNTD0xDQogICAgSVFVT1RFUz0xDQogICAgU0hP V0JSPTENCg0KICAgIGh0bWxfaGRyX3RtcGw9RG9jdW1lbnRUZW1wbGF0ZS5I VE1MKGluZGV4X2hlYWRlcl90ZW1wbGF0ZSkNCiAgICBodG1sX2Zvb3RfdG1w bD1Eb2N1bWVudFRlbXBsYXRlLkhUTUwoaW5kZXhfZm9vdGVyX3RlbXBsYXRl KQ0KICAgIGh0bWxfVE9DX3RtcGw9RG9jdW1lbnRUZW1wbGF0ZS5IVE1MKFRP Q190ZW1wbGF0ZSkNCg0KICAgIGRlZiBodG1sX2Zvb3Qoc2VsZik6DQogICAg ICAgIHJldHVybiBzZWxmLmh0bWxfZm9vdF90bXBsKHNlbGYpDQoNCiAgICBk ZWYgaHRtbF9oZWFkKHNlbGYpOg0KICAgICAgICByZXR1cm4gc2VsZi5odG1s X2hkcl90bXBsKHNlbGYpDQoNCiAgICBkZWYgaHRtbF9UT0Moc2VsZik6DQog ICAgICAgIHJldHVybiBzZWxmLmh0bWxfVE9DX3RtcGwoc2VsZikNCg0KDQog ICAgZGVmIF9faW5pdF9fKHNlbGYsIG1haWxsaXN0LHVubG9jaz0xKToNCiAg ICAgICAgc2VsZi5tYWlsbGlzdD1tYWlsbGlzdA0KICAgICAgICBzZWxmLl91 bmxvY2tsaXN0PXVubG9jaw0KICAgICAgICBzZWxmLl9sb2NrX2ZpbGU9Tm9u ZQ0KIA0KICAgICAgICBpZiBoYXNhdHRyKHNlbGYubWFpbGxpc3QsJ2FyY2hp dmVfdm9sdW1lX2ZyZXF1ZW5jeScpOg0KICAgICAgICAgICAgaWYgc2VsZi5t YWlsbGlzdC5hcmNoaXZlX3ZvbHVtZV9mcmVxdWVuY3kgPT0gMDoNCiAgICAg ICAgICAgICAgICBzZWxmLkFSQ0hJVkVfUEVSSU9EPSd5ZWFyJw0KICAgICAg ICAgICAgZWxpZiBzZWxmLm1haWxsaXN0LmFyY2hpdmVfdm9sdW1lX2ZyZXF1 ZW5jeSA9PSAyOg0KICAgICAgICAgICAgICAgIHNlbGYuQVJDSElWRV9QRVJJ T0Q9J3F1YXJ0ZXInDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAg ICAgIHNlbGYuQVJDSElWRV9QRVJJT0Q9J21vbnRoJw0KDQoJcGlwZXJtYWls LlQuX19pbml0X18oc2VsZiwgbWFpbGxpc3QuYXJjaGl2ZV9kaXJlY3Rvcnks IHJlbG9hZD0xLCBkYXRhYmFzZT1waXBlcm1haWwuQlNEREJkYXRhYmFzZSht YWlsbGlzdC5hcmNoaXZlX2RpcmVjdG9yeSkpDQoNCiAgICBkZWYgR2V0QXJj aExvY2soc2VsZik6DQogICAgICAgIGlmIHNlbGYuX2xvY2tfZmlsZToNCiAg ICAgICAgICAgIHJldHVybiAxDQogICAgICAgIG91ID0gb3MudW1hc2soMCkN CiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgc2VsZi5fbG9ja19maWxlID0g cG9zaXhmaWxlLm9wZW4oDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvcy5wYXRoLmpvaW4obW1fY2ZnLkxPQ0tfRElSLCAnJXNAYXJjaC5sb2Nr JyAlIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWls bGlzdC5faW50ZXJuYWxfbmFtZSksICdhKycpDQogICAgICAgIGZpbmFsbHk6 DQogICAgICAgICAgICBvcy51bWFzayhvdSkNCiAgICAgICAgIyBtaW5vciBy YWNlIGNvbmRpdGlvbiBoZXJlLCB0aGVyZSBpcyBubyB3YXkgdG8gYXRvbWlj bHkgDQogICAgICAgICMgY2hlY2sgJiBnZXQgYSBsb2NrLiBUaGF0IHNob3Vs ZG4ndCBtYXR0ZXIgaGVyZSB0aG8nIC1kZG0NCiAgICAgICAgaWYgbm90IHNl bGYuX2xvY2tfZmlsZS5sb2NrKCd3PycsIDEpOg0KICAgICAgICAgICAgc2Vs Zi5fbG9ja19maWxlLmxvY2soJ3d8JywgMSkNCiAgICAgICAgZWxzZToNCiAg ICAgICAgICAgIHJldHVybiAwDQogICAgICAgIHJldHVybiAxDQoNCiAgICBk ZWYgRHJvcEFyY2hMb2NrKHNlbGYpOg0KICAgICAgICBpZiBzZWxmLl9sb2Nr X2ZpbGU6DQogICAgICAgICAgICBzZWxmLl9sb2NrX2ZpbGUubG9jaygndScp DQogICAgICAgICAgICBzZWxmLl9sb2NrX2ZpbGUuY2xvc2UoKQ0KICAgICAg ICAgICAgc2VsZi5fbG9ja19maWxlID0gTm9uZQ0KDQogICAgZGVmIHByb2Nl c3NMaXN0QXJjaChzZWxmKToNCiAgICAgICAgbmFtZSA9IHNlbGYubWFpbGxp c3QuQXJjaGl2ZUZpbGVOYW1lKCkNCiAgICAgICAgd25hbWU9IG5hbWUrJy53 b3JraW5nJw0KICAgICAgICBlbmFtZT0gbmFtZSsnLmVycl91bmFyY2hpdmVk Jw0KICAgICAgICB0cnk6DQogICAgICAgICAgICBvcy5zdGF0KG5hbWUpDQog ICAgICAgIGV4Y2VwdCAoSU9FcnJvcixvcy5lcnJvcik6DQogICAgICAgICAg ICAjbm8gYXJjaGl2ZSBmaWxlLCBub3RoaW4gdG8gZG8gLWRkbQ0KICAgICAg ICAgICAgcmV0dXJuDQogDQogICAgICAgICNzZWUgaWYgYXJjaCBpcyBsb2Nr ZWQgaGVyZSAtZGRtIA0KICAgICAgICBpZiBub3Qgc2VsZi5HZXRBcmNoTG9j aygpOg0KICAgICAgICAgICAgI2Fub3RoZXIgYXJjaGl2ZXIgaXMgcnVubmlu Zywgbm90aGluZyB0byBkby4gLWRkbQ0KICAgICAgICAgICAgcmV0dXJuDQoN CiAgICAgICAgI2lmIHRoZSB3b3JraW5nIGZpbGUgaXMgc3RpbGwgaGVyZSwg dGhlIGFyY2hpdmVyIG1heSBoYXZlIA0KICAgICAgICAjIGNyYXNoZWQgZHVy aW5nIGFyY2hpdmluZy4gU2F2ZSBpdCwgbG9nIGFuIGVycm9yLCBhbmQgbW92 ZSBvbi4gDQoJdHJ5Og0KICAgICAgICAgICAgd2Y9b3Blbih3bmFtZSwncicp DQogICAgICAgICAgICBzZWxmLm1haWxsaXN0LkxvZ01zZygiZXJyb3IiLCJB cmNoaXZlIHdvcmtpbmcgZmlsZSAlcyBwcmVzZW50LiAiDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiQ2hlY2sgJXMgZm9yIHBvc3NpYmx5 IHVuYXJjaGl2ZWQgbXNncyIgJQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICh3bmFtZSxlbmFtZSkgKQ0KICAgICAgICAgICAgZWY9b3Bl bihlbmFtZSwgJ2ErJykNCiAgICAgICAgICAgIGVmLnNlZWsoMSwyKQ0KICAg ICAgICAgICAgaWYgZWYucmVhZCgxKSA8PiAnXG4nOg0KICAgICAgICAgICAg ICAgIGVmLndyaXRlKCdcbicpDQogICAgICAgICAgICBlZi53cml0ZSh3Zi5y ZWFkKCkpDQogICAgICAgICAgICBlZi5jbG9zZSgpDQogICAgICAgICAgICB3 Zi5jbG9zZSgpDQogICAgICAgICAgICBvcy51bmxpbmsod25hbWUpDQogICAg ICAgIGV4Y2VwdCBJT0Vycm9yOg0KICAgICAgICAgICAgcGFzcw0KICAgICAg ICBvcy5yZW5hbWUobmFtZSx3bmFtZSkNCiAgICAgICAgaWYgc2VsZi5fdW5s b2NrbGlzdDoNCiAgICAgICAgICAgIHNlbGYubWFpbGxpc3QuVW5sb2NrKCkN CiAgICAgICAgYXJjaGZpbGU9b3Blbih3bmFtZSwncicpDQogICAgICAgIHNl bGYucHJvY2Vzc1VuaXhNYWlsYm94KGFyY2hmaWxlLCBBcnRpY2xlKQ0KICAg ICAgICBhcmNoZmlsZS5jbG9zZSgpDQogICAgICAgIG9zLnVubGluayh3bmFt ZSkNCiAgICAgICAgc2VsZi5Ecm9wQXJjaExvY2soKQ0KDQogICAgZGVmIGdl dF9maWxlbmFtZShzZWxmLCBhcnRpY2xlKToNCglyZXR1cm4gJyUwNmkuaHRt bCcgJSAoYXJ0aWNsZS5zZXF1ZW5jZSwpDQoNCiAgICBkZWYgZ2V0X2FyY2hp dmVzKHNlbGYsIGFydGljbGUpOg0KCSIiIlJldHVybiBhIGxpc3Qgb2YgaW5k ZXhlcyB3aGVyZSB0aGUgYXJ0aWNsZSBzaG91bGQgYmUgZmlsZWQuDQoJQSBz dHJpbmcgY2FuIGJlIHJldHVybmVkIGlmIHRoZSBsaXN0IG9ubHkgY29udGFp bnMgb25lIGVudHJ5LCANCglhbmQgdGhlIGVtcHR5IGxpc3QgaXMgbGVnYWwu IiIiDQoJaWYgYXJ0aWNsZS5zdWJqZWN0IGluIFsnc3Vic2NyaWJlJywgJ3Vu c3Vic2NyaWJlJ106IHJldHVybiBOb25lDQogICAgICAgIHJldHVybiBzZWxm LmRhdGVUb1ZvbE5hbWUoc3RyaW5nLmF0b2YoYXJ0aWNsZS5kYXRlKSkNCg0K DQojIFRoZSBmb2xsb3dpbmcgdHdvIG1ldGhvZHMgc2hvdWxkIGJlIGludmVy c2VzIG9mIGVhY2ggb3RoZXIuIC1kZG0NCg0KICAgIGRlZiBkYXRlVG9Wb2xO YW1lKHNlbGYsZGF0ZSk6DQogICAgICAgIGRhdGV0dXBsZT10aW1lLmdtdGlt ZShkYXRlKQ0KCWlmIHNlbGYuQVJDSElWRV9QRVJJT0Q9PSd5ZWFyJzoNCgkg ICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoIiVZIixkYXRldHVwbGUpDQoJZWxp ZiBzZWxmLkFSQ0hJVkVfUEVSSU9EPT0ncXVhcnRlcic6DQoJICAgIGlmIGFk YXRlWzFdIGluIFsxLDIsM106DQoJICAgICAgICByZXR1cm4gdGltZS5zdHJm dGltZSgiJVlxMSIsZGF0ZXR1cGxlKQ0KCSAgICBlbGlmIGFkYXRlWzFdIGlu IFs0LDUsNl06DQoJICAgICAgICByZXR1cm4gdGltZS5zdHJmdGltZSgiJVlx MiIsZGF0ZXR1cGxlKQ0KCSAgICBlbGlmIGFkYXRlWzFdIGluIFs3LDgsOV06 DQoJICAgICAgICByZXR1cm4gdGltZS5zdHJmdGltZSgiJVlxMyIsZGF0ZXR1 cGxlKQ0KCSAgICBlbHNlOg0KCSAgICAgICAgcmV0dXJuIHRpbWUuc3RyZnRp bWUoIiVZcTQiLGRhdGV0dXBsZSkNCiAgICAgICAgIyBtb250aC4gLWRkbQ0K IAllbHNlOg0KICAgICAgICAgICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoIiVZ LSVCIixkYXRldHVwbGUpDQoNCiAgICBkZWYgdm9sTmFtZVRvRGF0ZShzZWxm LHZvbG5hbWUpOg0KICAgICAgICB2b2xuYW1lPXN0cmluZy5zdHJpcCh2b2xu YW1lKQ0KICAgICAgICB2b2xyZT0geyAneWVhcicgOiByJ14oP1A8eWVhcj5b MC05XXs0LDR9KSQnLA0KICAgICAgICAgICAgICAgICAncXVhcnRlcicgOiBy J14oP1A8eWVhcj5bMC05XXs0LDR9KXEoP1A8cXVhcnRlcj5bMTIzNF0pJCcs DQogICAgICAgICAgICAgICAgICdtb250aCcgOiByJ14oP1A8eWVhcj5bMC05 XXs0LDR9KS0oP1A8bW9udGg+W2EtekEtWl0rKSQnIH0NCiAgICAgICAgZm9y IGVhY2ggaW4gdm9scmUua2V5cygpOg0KICAgICAgICAgICAgbWF0Y2g9cmUu bWF0Y2godm9scmVbZWFjaF0sdm9sbmFtZSkNCiAgICAgICAgICAgIGlmIG1h dGNoOg0KICAgICAgICAgICAgICAgIHllYXI9c3RyaW5nLmF0b2kobWF0Y2gu Z3JvdXAoJ3llYXInKSkNCiAgICAgICAgICAgICAgICBtb250aD0xDQogICAg ICAgICAgICAgICAgaWYgZWFjaCA9PSAncXVhcnRlcic6DQogICAgICAgICAg ICAgICAgICAgIHE9c3RyaW5nLmF0b2kobWF0Y2guZ3JvdXAoJ3F1YXJ0ZXIn KSkNCiAgICAgICAgICAgICAgICAgICAgbW9udGg9KHEqMyktMg0KICAgICAg ICAgICAgICAgIGVsaWYgZWFjaCA9PSAnbW9udGgnOg0KICAgICAgICAgICAg ICAgICAgICBtb250aHN0cj1zdHJpbmcubG93ZXIobWF0Y2guZ3JvdXAoJ21v bnRoJykpDQogICAgICAgICAgICAgICAgICAgIG09W10NCiAgICAgICAgICAg ICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwxMyk6DQogICAgICAgICAgICAg ICAgICAgICAgICBtLmFwcGVuZChzdHJpbmcubG93ZXIoDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCIlQiIsKDE5 OTksaSwxLDAsMCwwLDAsMSwwKSkpKQ0KICAgICAgICAgICAgICAgICAgICB0 cnk6DQogICAgICAgICAgICAgICAgICAgICAgICBtb250aD1tLmluZGV4KG1v bnRoc3RyKSsxDQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVy cm9yOg0KICAgICAgICAgICAgICAgICAgICAgICAgcGFzcw0KICAgICAgICAg ICAgICAgIHJldHVybiB0aW1lLm1rdGltZSgoeWVhcixtb250aCwxLDAsMCww LDAsMSwtMSkpDQogICAgICAgIHJldHVybiAwLjANCg0KICAgIGRlZiBzb3J0 YXJjaGl2ZXMoc2VsZik6DQogICAgICAgIGRlZiBzZihhLGIscz1zZWxmKToN CiAgICAgICAgICAgIGFsPXMudm9sTmFtZVRvRGF0ZShhKQ0KICAgICAgICAg ICAgYmw9cy52b2xOYW1lVG9EYXRlKGIpDQogICAgICAgICAgICBpZiBhbD5i bDoNCiAgICAgICAgICAgICAgICByZXR1cm4gMQ0KICAgICAgICAgICAgZWxp ZiBhbDxibDoNCiAgICAgICAgICAgICAgICByZXR1cm4gLTENCiAgICAgICAg ICAgIGVsc2U6DQogICAgICAgICAgICAgICAgcmV0dXJuIDANCiAgICAgICAg aWYgc2VsZi5BUkNISVZFX1BFUklPRCBpbiAoJ21vbnRoJywneWVhcicsJ3F1 YXJ0ZXInKToNCiAgICAgICAgICAgIHNlbGYuYXJjaGl2ZXMuc29ydChzZikN CiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIHNlbGYuYXJjaGl2ZXMuc29y dCgpDQoNCiAgICBkZWYgbWVzc2FnZShzZWxmLCBtc2cpOg0KCWlmIHNlbGYu VkVSQk9TRToNCgkgICAgaW1wb3J0IHN5cw0KCSAgICBzeXMuc3RkZXJyLndy aXRlKG1zZykNCgkgICAgaWYgbXNnWy0xOl0hPSdcbic6IHN5cy5zdGRlcnIu d3JpdGUoJ1xuJykNCg0KICAgIGRlZiBvcGVuX25ld19hcmNoaXZlKHNlbGYs IGFyY2hpdmUsIGFyY2hpdmVkaXIpOg0KCWltcG9ydCBvcw0KCWluZGV4X2h0 bWw9b3MucGF0aC5qb2luKGFyY2hpdmVkaXIsICdpbmRleC5odG1sJykgDQoJ dHJ5OiBvcy51bmxpbmsoaW5kZXhfaHRtbCkNCglleGNlcHQ6IHBhc3MNCglv cy5zeW1saW5rKHNlbGYuREVGQVVMVElOREVYKycuaHRtbCcsaW5kZXhfaHRt bCkNCg0KICAgIGRlZiB3cml0ZV9pbmRleF9oZWFkZXIoc2VsZik6DQoJc2Vs Zi5kZXB0aD0wDQogICAgICAgIHByaW50IHNlbGYuaHRtbF9oZWFkKCkNCg0K ICAgICAgICBpZiBub3Qgc2VsZi5USFJFQURMQVpZIGFuZCBzZWxmLnR5cGU9 PSdUaHJlYWQnOg0KCSAgICAjIFVwZGF0ZSB0aGUgdGhyZWFkZWQgaW5kZXgN CgkgICAgc2VsZi5tZXNzYWdlKCJDb21wdXRpbmcgdGhyZWFkZWQgaW5kZXhc biIpDQoJICAgIHNlbGYudXBkYXRlVGhyZWFkZWRJbmRleCgpDQoNCg0KICAg IGRlZiB3cml0ZV9pbmRleF9mb290ZXIoc2VsZik6DQoJaW1wb3J0IHN0cmlu Zw0KCWZvciBpIGluIHJhbmdlKHNlbGYuZGVwdGgpOiBwcmludCAnPC9VTD4n DQogICAgICAgIHByaW50IHNlbGYuaHRtbF9mb290KCkNCg0KICAgIGRlZiB3 cml0ZV9pbmRleF9lbnRyeShzZWxmLCBhcnRpY2xlKToNCglwcmludCAnPExJ PiA8QSBIUkVGPSIlcyI+JXM8L0E+IDxBIE5BTUU9IiVpIj48L0E+PEk+JXM8 L0k+JyAlICh1cmxsaWIucXVvdGUoYXJ0aWNsZS5maWxlbmFtZSksIA0KCQkJ CQkJCQkgICAgIENHSWVzY2FwZShhcnRpY2xlLnN1YmplY3QpLCBhcnRpY2xl LnNlcXVlbmNlLCANCgkJCQkJCQkJICAgICBDR0llc2NhcGUoYXJ0aWNsZS5h dXRob3IpKQ0KDQogICAgZGVmIHdyaXRlX3RocmVhZGluZGV4X2VudHJ5KHNl bGYsIGFydGljbGUsIGRlcHRoKToNCglpZiBkZXB0aDwwOiANCgkgICAgc3lz LnN0ZGVyci53cml0ZSgnZGVwdGg8MCcpIDsgZGVwdGg9MA0KCWlmIGRlcHRo PnNlbGYuVEhSRUFETEVWRUxTOiBkZXB0aD1zZWxmLlRIUkVBRExFVkVMUw0K CWlmIGRlcHRoPHNlbGYuZGVwdGg6IA0KCSAgICBmb3IgaSBpbiByYW5nZShz ZWxmLmRlcHRoLWRlcHRoKTogcHJpbnQgJzwvVUw+Jw0KCWVsaWYgZGVwdGg+ c2VsZi5kZXB0aDogDQoJICAgIGZvciBpIGluIHJhbmdlKGRlcHRoLXNlbGYu ZGVwdGgpOiBwcmludCAnPFVMPicNCglwcmludCAnPCEtLSVpICVzIC0tPicg JSAoZGVwdGgsIGFydGljbGUudGhyZWFkS2V5KQ0KCXNlbGYuZGVwdGg9ZGVw dGgNCglwcmludCAnPExJPiA8QSBIUkVGPSIlcyI+JXM8L0E+IDxBIE5BTUU9 IiVpIj48L0E+PEk+JXM8L0k+JyAlIChDR0llc2NhcGUodXJsbGliLnF1b3Rl KGFydGljbGUuZmlsZW5hbWUpKSwNCgkJCQkJCQkJICAgICBDR0llc2NhcGUo YXJ0aWNsZS5zdWJqZWN0KSwgYXJ0aWNsZS5zZXF1ZW5jZSs5MTAsIA0KCQkJ CQkJCQkgICAgIENHSWVzY2FwZShhcnRpY2xlLmF1dGhvcikpDQoNCiAgICBk ZWYgd3JpdGVfVE9DKHNlbGYpOg0KICAgICAgICBzZWxmLnNvcnRhcmNoaXZl cygpDQogICAgICAgIHRvYz1vcGVuKG9zLnBhdGguam9pbihzZWxmLmJhc2Vk aXIsICdpbmRleC5odG1sJyksICd3JykNCiAgICAgICAgdG9jLndyaXRlKHNl bGYuaHRtbF9UT0MoKSkNCiAgICAgICAgdG9jLmNsb3NlKCkNCg0KDQogICAg IyBBcmNoaXZlIGFuIEFydGljbGUgb2JqZWN0Lg0KICAgIGRlZiBhZGRfYXJ0 aWNsZShzZWxmLCBhcnRpY2xlKToNCiAgICAgICAgIyBEZXRlcm1pbmUgaW50 byB3aGF0IGFyY2hpdmVzIHRoZSBhcnRpY2xlIHNob3VsZCBiZSBwbGFjZWQN CiAgICAgICAgYXJjaGl2ZXM9c2VsZi5nZXRfYXJjaGl2ZXMoYXJ0aWNsZSkN CiAgICAgICAgaWYgYXJjaGl2ZXM9PU5vbmU6IGFyY2hpdmVzPVtdICAgICAg ICAjIElmIG5vIHZhbHVlIHdhcyByZXR1cm5lZCwgaWdub3JlIGl0DQogICAg ICAgIGlmIHR5cGUoYXJjaGl2ZXMpPT10eXBlKCcnKTogYXJjaGl2ZXM9W2Fy Y2hpdmVzXSAgICAgICAgIyBJZiBhIHN0cmluZyB3YXMgcmV0dXJuZWQsIGNv bnZlcnQgdG8gYSBsaXN0DQogICAgICAgIGlmIGFyY2hpdmVzPT1bXTogcmV0 dXJuICAgICAgICAgIyBJZ25vcmUgdGhlIGFydGljbGUNCg0KICAgICAgICAj IEFkZCB0aGUgYXJ0aWNsZSB0byBlYWNoIGFyY2hpdmUgaW4gdHVybg0KICAg ICAgICBhcnRpY2xlLmZpbGVuYW1lPWZpbGVuYW1lPXNlbGYuZ2V0X2ZpbGVu YW1lKGFydGljbGUpDQogICAgICAgIGFydGljbGVfdGV4dD1hcnRpY2xlLmFz X3RleHQoKQ0KICAgICAgICB0ZW1wPXNlbGYuZm9ybWF0X2FydGljbGUoYXJ0 aWNsZSkgIyBSZWZvcm1hdCB0aGUgYXJ0aWNsZQ0KICAgICAgICBzZWxmLm1l c3NhZ2UoIlByb2Nlc3NpbmcgYXJ0aWNsZSAjIitzdHIoYXJ0aWNsZS5zZXF1 ZW5jZSkrJyBpbnRvIGFyY2hpdmVzICcrc3RyKGFyY2hpdmVzKSkNCiAgICAg ICAgZm9yIGkgaW4gYXJjaGl2ZXM6DQogICAgICAgICAgICBzZWxmLmFyY2hp dmU9aQ0KICAgICAgICAgICAgYXJjaGl2ZWRpcj1vcy5wYXRoLmpvaW4oc2Vs Zi5iYXNlZGlyLCBpKQ0KICAgICAgICAgICAgIyBJZiBpdCdzIGEgbmV3IGFy Y2hpdmUsIGNyZWF0ZSBpdA0KICAgICAgICAgICAgaWYgaSBub3QgaW4gc2Vs Zi5hcmNoaXZlczogDQogICAgICAgICAgICAgICAgc2VsZi5hcmNoaXZlcy5h cHBlbmQoaSkgOyBzZWxmLnVwZGF0ZV9UT0M9MQ0KICAgICAgICAgICAgICAg IHNlbGYuZGF0YWJhc2UubmV3QXJjaGl2ZShpKQ0KICAgICAgICAgICAgICAg ICMgSWYgdGhlIGFyY2hpdmUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIGNy ZWF0ZSBpdA0KICAgICAgICAgICAgICAgIHRyeTogb3Muc3RhdChhcmNoaXZl ZGlyKQ0KICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgZXJyZGF0 YToNCiAgICAgICAgICAgICAgICAgICAgZXJybm8sIGVycm1zZz1lcnJkYXRh DQogICAgICAgICAgICAgICAgICAgIGlmIGVycm5vPT0yOiANCiAgICAgICAg ICAgICAgICAgICAgICAgIG9zLm1rZGlyKGFyY2hpdmVkaXIsIHNlbGYuRElS TU9ERSkNCiAgICAgICAgICAgICAgICAgICAgZWxzZTogcmFpc2Ugb3MuZXJy b3IsIGVycmRhdGENCiAgICAgICAgICAgICAgICBzZWxmLm9wZW5fbmV3X2Fy Y2hpdmUoaSwgYXJjaGl2ZWRpcikNCg0KICAgICAgICAgICAgIyBXcml0ZSB0 aGUgSFRNTC1pemVkIGFydGljbGUgdG8gdGhlIGh0bWwgYXJjaGl2ZS4NCiAg ICAgICAgICAgIGY9b3Blbihvcy5wYXRoLmpvaW4oYXJjaGl2ZWRpciwgZmls ZW5hbWUpLCAndycpDQogICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpv aW4oYXJjaGl2ZWRpciwgZmlsZW5hbWUpLCBzZWxmLkZJTEVNT0RFKQ0KICAg ICAgICAgICAgZi53cml0ZSh0ZW1wLmFzX2h0bWwoKSkNCiAgICAgICAgICAg IGYuY2xvc2UoKQ0KDQoNCiAgICAgICAgICAgICMgV3JpdGUgdGhlIHRleHQg YXJ0aWNsZSB0byB0aGUgdGV4dCBhcmNoaXZlLg0KICAgICAgICAgICAgYXJj aGl2ZXRleHRmaWxlPW9zLnBhdGguam9pbihzZWxmLmJhc2VkaXIsIiVzLnR4 dCIgJSBpKQ0KICAgICAgICAgICAgZj1vcGVuKGFyY2hpdmV0ZXh0ZmlsZSwg J2ErJykNCiAgICAgICAgICAgIG9zLmNobW9kKGFyY2hpdmV0ZXh0ZmlsZSwg c2VsZi5GSUxFTU9ERSkNCiAgICAgICAgICAgIGYud3JpdGUoYXJ0aWNsZV90 ZXh0KQ0KICAgICAgICAgICAgZi5jbG9zZSgpDQoNCg0KICAgICAgICAgICAg YXV0aG9ya2V5PXBpcGVybWFpbC5maXhBdXRob3IoYXJ0aWNsZS5hdXRob3Ip KydcMDAwJythcnRpY2xlLmRhdGUNCiAgICAgICAgICAgIHN1YmplY3RrZXk9 c3RyaW5nLmxvd2VyKGFydGljbGUuc3ViamVjdCkrJ1wwMDAnK2FydGljbGUu ZGF0ZQ0KDQogICAgICAgICAgICAjIFVwZGF0ZSBwYXJlbnRpbmcgaW5mbw0K ICAgICAgICAgICAgcGFyZW50SUQ9Tm9uZQ0KICAgICAgICAgICAgaWYgYXJ0 aWNsZS5pbl9yZXBseV90byE9Jyc6IHBhcmVudElEPWFydGljbGUuaW5fcmVw bHlfdG8NCiAgICAgICAgICAgIGVsaWYgYXJ0aWNsZS5yZWZlcmVuY2VzIT1b XTogDQogICAgICAgICAgICAgICAgIyBSZW1vdmUgYXJ0aWNsZSBJRHMgdGhh dCBhcmVuJ3QgaW4gdGhlIGFyY2hpdmUNCiAgICAgICAgICAgICAgICByZWZz PWZpbHRlcihsYW1iZGEgeCwgc2VsZj1zZWxmOiBzZWxmLmRhdGFiYXNlLmhh c0FydGljbGUoc2VsZi5hcmNoaXZlLCB4KSwgDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXJ0aWNsZS5yZWZlcmVuY2VzKQ0KICAgICAgICAgICAg ICAgIGlmIGxlbihyZWZzKToNCiAgICAgICAgICAgICAgICAgICAgcmVmcz1t YXAobGFtYmRhIHgsIHM9c2VsZjogcy5kYXRhYmFzZS5nZXRBcnRpY2xlKHMu YXJjaGl2ZSwgeCksIHJlZnMpDQogICAgICAgICAgICAgICAgICAgIG1heGRh dGU9cmVmc1swXQ0KICAgICAgICAgICAgICAgICAgICBmb3IgcmVmIGluIHJl ZnNbMTpdOiANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlZi5kYXRl Pm1heGRhdGUuZGF0ZTogbWF4ZGF0ZT1yZWYNCiAgICAgICAgICAgICAgICAg ICAgcGFyZW50SUQ9bWF4ZGF0ZS5tc2dpZA0KICAgICAgICAgICAgZWxzZToN CiAgICAgICAgICAgICAgICAjIEdldCB0aGUgb2xkZXN0IGFydGljbGUgd2l0 aCBhIG1hdGNoaW5nIHN1YmplY3QsIGFuZCBhc3N1bWUgdGhpcyBpcyANCiAg ICAgICAgICAgICAgICAjIGEgZm9sbG93LXVwIHRvIHRoYXQgYXJ0aWNsZQ0K ICAgICAgICAgICAgICAgIHBhcmVudElEPXNlbGYuZGF0YWJhc2UuZ2V0T2xk ZXN0QXJ0aWNsZShzZWxmLmFyY2hpdmUsIGFydGljbGUuc3ViamVjdCkNCg0K ICAgICAgICAgICAgaWYgcGFyZW50SUQhPU5vbmUgYW5kIG5vdCBzZWxmLmRh dGFiYXNlLmhhc0FydGljbGUoc2VsZi5hcmNoaXZlLCBwYXJlbnRJRCk6IA0K ICAgICAgICAgICAgICAgIHBhcmVudElEPU5vbmUNCiAgICAgICAgICAgIGFy dGljbGUucGFyZW50SUQ9cGFyZW50SUQgDQogICAgICAgICAgICBpZiBwYXJl bnRJRCE9Tm9uZToNCiAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZi5kYXRh YmFzZS5nZXRBcnRpY2xlKHNlbGYuYXJjaGl2ZSwgcGFyZW50SUQpDQogICAg ICAgICAgICAgICAgYXJ0aWNsZS50aHJlYWRLZXk9cGFyZW50LnRocmVhZEtl eSthcnRpY2xlLmRhdGUrJy0nDQogICAgICAgICAgICBlbHNlOiBhcnRpY2xl LnRocmVhZEtleT1hcnRpY2xlLmRhdGUrJy0nDQogICAgICAgICAgICBzZWxm LmRhdGFiYXNlLnNldFRocmVhZEtleShzZWxmLmFyY2hpdmUsIGFydGljbGUu dGhyZWFkS2V5KydcMDAwJythcnRpY2xlLm1zZ2lkLCBhcnRpY2xlLm1zZ2lk KQ0KICAgICAgICAgICAgc2VsZi5kYXRhYmFzZS5hZGRBcnRpY2xlKGksIHRl bXAsIHN1YmplY3RrZXksIGF1dGhvcmtleSkNCiAgICAgICAgICAgIA0KICAg ICAgICAgICAgaWYgaSBub3QgaW4gc2VsZi5fZGlydHlfYXJjaGl2ZXM6IA0K ICAgICAgICAgICAgICAgIHNlbGYuX2RpcnR5X2FyY2hpdmVzLmFwcGVuZChp KQ0KICAgICAgICBkZWwgdGVtcA0KDQoNCiAgICAjIFVwZGF0ZSBvbmx5IGFy Y2hpdmVzIHRoYXQgaGF2ZSBiZWVuIG1hcmtlZCBhcyAiY2hhbmdlZCIuDQog ICAgZGVmIHVwZGF0ZV9kaXJ0eV9hcmNoaXZlcyhzZWxmKToNCiAgICAgICAg Zm9yIGkgaW4gc2VsZi5fZGlydHlfYXJjaGl2ZXM6DQogICAgICAgICAgICBz ZWxmLnVwZGF0ZV9hcmNoaXZlKGkpDQogICAgICAgICAgICBhcmNoej1Ob25l DQogICAgICAgICAgICBhcmNodD1Ob25lDQogICAgICAgICAgICB0cnk6DQog ICAgICAgICAgICAgICAgaW1wb3J0IGd6aXANCiAgICAgICAgICAgICAgICB0 cnk6IA0KICAgICAgICAgICAgICAgICAgICBhcmNodD1vcGVuKG9zLnBhdGgu am9pbihzZWxmLmJhc2VkaXIsIiVzLnR4dCIgJSBpKSwiciIpIA0KICAgICAg ICAgICAgICAgICAgICB0cnk6IA0KICAgICAgICAgICAgICAgICAgICAgICAg b3MucmVuYW1lKG9zLnBhdGguam9pbihzZWxmLmJhc2VkaXIsIiVzLnR4dC5n eiIgJSBpKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBh dGguam9pbihzZWxmLmJhc2VkaXIsIiVzLm9sZC50eHQuZ3oiICUgaSkpDQog ICAgICAgICAgICAgICAgICAgICAgICBhcmNoej1nemlwLm9wZW4ob3MucGF0 aC5qb2luKHNlbGYuYmFzZWRpciwiJXMub2xkLnR4dC5neiIgJSBpKSwiciIp DQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgUnVudGlt ZUVycm9yLCBvcy5lcnJvcik6DQogICAgICAgICAgICAgICAgICAgICAgICBw YXNzDQogICAgICAgICAgICAgICAgICAgIG5ld3o9Z3ppcC5vcGVuKG9zLnBh dGguam9pbihzZWxmLmJhc2VkaXIsIiVzLnR4dC5neiIgJSBpKSwidyIpIA0K CQkgICAgaWYgYXJjaHogOg0KICAgICAgICAgICAgICAgICAgICAgICAgbmV3 ei53cml0ZShhcmNoei5yZWFkKCkpDQogICAgICAgICAgICAgICAgICAgICAg ICBhcmNoei5jbG9zZSgpDQogICAgICAgICAgICAgICAgICAgICAgICBvcy51 bmxpbmsob3MucGF0aC5qb2luKHNlbGYuYmFzZWRpciwiJXMub2xkLnR4dC5n eiIgJSBpKSkNCiAgICAgICAgICAgICAgICAgICAgbmV3ei53cml0ZShhcmNo dC5yZWFkKCkpDQogICAgICAgICAgICAgICAgICAgIG5ld3ouY2xvc2UoKQ0K ICAgICAgICAgICAgICAgICAgICBhcmNodC5jbG9zZSgpDQogICAgICAgICAg ICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4oc2VsZi5iYXNlZGly LCIlcy50eHQiICUgaSkpDQogICAgICAgICAgICAgICAgZXhjZXB0IElPRXJy b3I6DQogICAgICAgICAgICAgICAgICAgIHBhc3MNCiAgICAgICAgICAgIGV4 Y2VwdCBJbXBvcnRFcnJvcjoNCiAgICAgICAgICAgICAgICBwYXNzDQogICAg ICAgIHNlbGYuX2RpcnR5X2FyY2hpdmVzPVtdDQoNCiAgICBkZWYgY2xvc2Uo c2VsZik6DQogICAgICAgICJDbG9zZSBhbiBhcmNoaXZlLCBzYXZpbmcgaXRz IHN0YXRlIGFuZCB1cGRhdGluZyBhbnkgY2hhbmdlZCBhcmNoaXZlcy4iDQog ICAgICAgIHNlbGYudXBkYXRlX2RpcnR5X2FyY2hpdmVzKCkjIFVwZGF0ZSBh bGwgY2hhbmdlZCBhcmNoaXZlcw0KICAgICAgICAjIElmIHJlcXVpcmVkLCB1 cGRhdGUgdGhlIHRhYmxlIG9mIGNvbnRlbnRzDQogICAgICAgIGlmIHNlbGYu dXBkYXRlX1RPQyBvciAxOg0KICAgICAgICAgICAgc2VsZi51cGRhdGVfVE9D PTANCiAgICAgICAgICAgIHNlbGYud3JpdGVfVE9DKCkNCiAgICAgICAgIyBT YXZlIHRoZSBjb2xsZWN0aXZlIHN0YXRlIA0KICAgICAgICBzZWxmLm1lc3Nh Z2UoJ1BpY2tsaW5nIGFyY2hpdmUgc3RhdGUgaW50byAnK29zLnBhdGguam9p bihzZWxmLmJhc2VkaXIsICdwaXBlcm1haWwucGNrJykpDQogICAgICAgIHNl bGYuZGF0YWJhc2UuY2xvc2UoKQ0KICAgICAgICBkZWwgc2VsZi5kYXRhYmFz ZQ0KICAgICAgICBmPW9wZW4ob3MucGF0aC5qb2luKHNlbGYuYmFzZWRpciwg J3BpcGVybWFpbC5wY2snKSwgJ3cnKQ0KICAgICAgICBwaWNrbGUuZHVtcChz ZWxmLl9fZ2V0c3RhdGVfXygpLCBmKQ0KICAgICAgICBmLmNsb3NlKCkNCg0K ICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6DQogICAgICAgIGQ9e30NCiAg ICAgICAgZm9yIGVhY2ggaW4gc2VsZi5fX2RpY3RfXy5rZXlzKCk6DQogICAg ICAgICAgICBpZiBub3QgKGVhY2ggaW4gWydtYWlsbGlzdCcsJ19sb2NrX2Zp bGUnLCdfdW5sb2NrbGlzdCddKToNCiAgICAgICAgICAgICAgICBkW2VhY2hd ID0gc2VsZi5fX2RpY3RfX1tlYWNoXQ0KICAgICAgICByZXR1cm4gZA0KDQog ICAgICAgIA0KIA0KDQogICAgIyBBZGQgPEEgSFJFRj0iLi4uIj4gdGFncyBh cm91bmQgVVJMcyBhbmQgZS1tYWlsIGFkZHJlc3Nlcy4NCg0KICAgIGRlZiBf X3Byb2Nlc3Nib2R5X1VSTHF1b3RlKHNlbGYsIHNvdXJjZSwgZGVzdCk6DQoJ Ym9keTI9W10NCglsYXN0X2xpbmVfd2FzX3F1b3RlZD0wDQoJZm9yIGkgaW4g eHJhbmdlKDAsIGxlbihzb3VyY2UpKToNCgkgICAgTG9yaWc9TD1zb3VyY2Vb aV0gOyBwcmVmaXg9c3VmZml4PSIiDQoJICAgIGlmIEw9PU5vbmU6IGNvbnRp bnVlDQoJICAgICMgSXRhbGljaXNlIHF1b3RlZCB0ZXh0DQoJICAgIGlmIHNl bGYuSVFVT1RFUzoNCgkJcXVvdGVkPXF1b3RlZHBhdC5tYXRjaChMKQ0KCQlp ZiBxdW90ZWQ9PU5vbmU6IGxhc3RfbGluZV93YXNfcXVvdGVkPTANCgkJZWxz ZToNCgkJICAgIHF1b3RlZCA9IHF1b3RlZC5lbmQoMCkNCgkJICAgIHByZWZp eD1DR0llc2NhcGUoTFs6cXVvdGVkXSkgKyAnPGk+JyANCgkJICAgIHN1ZmZp eD0nPC9JPicNCgkJICAgIGlmIHNlbGYuU0hPV0hUTUw6IHN1ZmZpeD1zdWZm aXgrJzxCUj4nDQoJCSAgICBpZiBub3QgbGFzdF9saW5lX3dhc19xdW90ZWQ6 IHByZWZpeD0nPEJSPicrcHJlZml4DQoJCSAgICBMPSBMW3F1b3RlZDpdIA0K CQkgICAgbGFzdF9saW5lX3dhc19xdW90ZWQ9MQ0KCSAgICAjIENoZWNrIGZv ciBhbiBlLW1haWwgYWRkcmVzcw0KCSAgICBMMj0iIiA7IGpyPWVtYWlscGF0 LnNlYXJjaChMKSA7IGtyPXVybHBhdC5zZWFyY2goTCkNCgkgICAgd2hpbGUg anIhPU5vbmUgb3Iga3IhPU5vbmU6DQoJCWlmIGpyPT1Ob25lOiBqPS0xDQoJ CWVsc2U6IGogPSBqci5zdGFydCgwKQ0KCQlpZiBrcj09Tm9uZTogaz0tMQ0K CQllbHNlOiBrID0ga3Iuc3RhcnQoMCkNCgkJaWYgaiE9LTEgYW5kIChqPGsg b3Igaz09LTEpOiB0ZXh0PWpyLmdyb3VwKDEpIDsgVVJMPSdtYWlsdG86Jyt0 ZXh0IDsgcG9zPWoNCgkJZWxpZiBrIT0tMSBhbmQgKGo+ayBvciBqPT0tMSk6 IHRleHQ9VVJMPWtyLmdyb3VwKDEpIDsgcG9zPWsNCgkJZWxzZTogIyBqPT1r DQoJCSAgICByYWlzZSBWYWx1ZUVycm9yLCAiaj09azogVGhpcyBjYW4ndCBo YXBwZW4hIg0KCQlsZW5ndGg9bGVuKHRleHQpDQojCQlzeXMuc3RkZXJyLndy aXRlKCJVUkw6ICVzICVzICVzIFxuIiAlIChDR0llc2NhcGUoTFs6cG9zXSks IFVSTCwgQ0dJZXNjYXBlKHRleHQpKSkNCgkJTDI9TDIrJyVzPEEgSFJFRj0i JXMiPiVzPC9BPicgJSAoQ0dJZXNjYXBlKExbOnBvc10pLCBVUkwsIENHSWVz Y2FwZSh0ZXh0KSkNCgkJTD1MW3BvcytsZW5ndGg6XQ0KCQlqcj1lbWFpbHBh dC5zZWFyY2goTCkgOyBrcj11cmxwYXQuc2VhcmNoKEwpDQoJICAgIGlmIGpy PT1Ob25lIGFuZCBrcj09Tm9uZTogTD1DR0llc2NhcGUoTCkNCgkgICAgTD1w cmVmaXgrTDIrTCtzdWZmaXgNCgkgICAgaWYgTCE9TG9yaWc6IHNvdXJjZVtp XSwgZGVzdFtpXT1Ob25lLCBMDQoNCiAgICAjIEVzY2FwZSBhbGwgc3BlY2lh bCBjaGFyYWN0ZXJzDQogICAgZGVmIF9fcHJvY2Vzc2JvZHlfQ0dJZXNjYXBl KHNlbGYsIHNvdXJjZSwgZGVzdCk6DQogICAgICAgIGltcG9ydCBjZ2kNCiAg ICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpKToNCgkgICAg aWYgc291cmNlW2ldIT1Ob25lOiANCgkgICAgICAgIGRlc3RbaV09Y2dpLmVz Y2FwZShzb3VyY2VbaV0pIDsgc291cmNlW2ldPU5vbmUNCgkJDQogICAgIyBQ ZXJmb3JtIEh5cGVybWFpbC1zdHlsZSBwcm9jZXNzaW5nIG9mIDxIVE1MPjwv SFRNTD4gZGlyZWN0aXZlcw0KICAgICMgaW4gbWVzc2FnZSBib2RpZXMuICBM aW5lcyBiZXR3ZWVuIDxIVE1MPiBhbmQgPC9IVE1MPiB3aWxsIGJlIHdyaXR0 ZW4NCiAgICAjIG91dCBwcmVjaXNlbHkgYXMgdGhleSBhcmU7IG90aGVyIGxp bmVzIHdpbGwgYmUgcGFzc2VkIHRvIGZ1bmMyDQogICAgIyBmb3IgZnVydGhl ciBwcm9jZXNzaW5nIC4NCg0KICAgIGRlZiBfX3Byb2Nlc3Nib2R5X0hUTUwo c2VsZiwgc291cmNlLCBkZXN0KToNCiAgICAgICAgbD1sZW4oc291cmNlKSA7 IGk9MA0KCXdoaWxlIGk8bDoNCgkgICAgd2hpbGUgaTxsIGFuZCBodG1scGF0 Lm1hdGNoKHNvdXJjZVtpXSk9PU5vbmU6IGk9aSsxDQoJICAgIGlmIGk8bDog c291cmNlW2ldPU5vbmUgOyBpPWkrMQ0KCSAgICB3aGlsZSBpPGwgYW5kIG5v aHRtbHBhdC5tYXRjaChzb3VyY2VbaV0pPT1Ob25lOg0KCSAgICAgICAgZGVz dFtpXSwgc291cmNlW2ldID0gc291cmNlW2ldLCBOb25lDQoJICAgICAgICBp PWkrMQ0KCSAgICBpZiBpPGw6IHNvdXJjZVtpXT1Ob25lIDsgaT1pKzENCgkg ICAgDQogICAgZGVmIGZvcm1hdF9hcnRpY2xlKHNlbGYsIGFydGljbGUpOg0K CXNvdXJjZT1hcnRpY2xlLmJvZHkgOyBkZXN0PVtOb25lXSpsZW4oc291cmNl KQ0KCSMgSGFuZGxlIDxIVE1MPiA8L0hUTUw+IGRpcmVjdGl2ZXMNCglpZiBz ZWxmLkFMTE9XSFRNTDogDQoJICAgIHNlbGYuX19wcm9jZXNzYm9keV9IVE1M KHNvdXJjZSwgZGVzdCkNCglzZWxmLl9fcHJvY2Vzc2JvZHlfVVJMcXVvdGUo c291cmNlLCBkZXN0KQ0KCWlmIG5vdCBzZWxmLlNIT1dIVE1MOiANCgkgICAg IyBEbyBzaW1wbGUgZm9ybWF0dGluZyBoZXJlOiA8UFJFPi4uPC9QUkU+DQoJ ICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzb3VyY2UpKToNCgkJcz1zb3Vy Y2VbaV0NCgkJaWYgcz09Tm9uZTogY29udGludWUNCgkJZGVzdFtpXT1DR0ll c2NhcGUocykgOyBzb3VyY2VbaV09Tm9uZQ0KCSAgICBpZiBsZW4oZGVzdCkg PiAwOg0KCQlkZXN0WzBdPSc8UFJFPicrZGVzdFswXSA7IGRlc3RbLTFdPWRl c3RbLTFdKyc8L1BSRT4nDQoJZWxzZToNCgkgICAgIyBEbyBmYW5jeSBmb3Jt YXR0aW5nIGhlcmUNCgkgICAgaWYgc2VsZi5TSE9XQlI6DQoJCSMgQWRkIDxC Uj4gb250byBldmVyeSBsaW5lDQoJCWZvciBpIGluIHJhbmdlKDAsIGxlbihz b3VyY2UpKToNCgkJICAgIHM9c291cmNlW2ldDQoJCSAgICBpZiBzPT1Ob25l OiBjb250aW51ZQ0KCQkgICAgcz1DR0llc2NhcGUocykgKyc8QlI+Jw0KCQkg ICAgZGVzdFtpXT1zIDsgc291cmNlW2ldPU5vbmUNCgkgICAgZWxzZToNCgkJ Zm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNvdXJjZSkpOg0KCQkgICAgcz1zb3Vy Y2VbaV0NCgkJICAgIGlmIHM9PU5vbmU6IGNvbnRpbnVlDQoJCSAgICBzPUNH SWVzY2FwZShzKQ0KCQkgICAgaWYgc1swOjFdIGluICcgXHRcbic6IHM9JzxQ Picrcw0KCQkgICAgZGVzdFtpXT1zIDsgc291cmNlW2ldPU5vbmUNCiAgICAg ICAgYXJ0aWNsZS5ib2R5PWZpbHRlcihsYW1iZGEgeDogeCE9Tm9uZSwgZGVz dCkNCglyZXR1cm4gYXJ0aWNsZQ0KDQogICAgZGVmIHVwZGF0ZV9hcnRpY2xl KHNlbGYsIGFyY2RpciwgYXJ0aWNsZSwgcHJldiwgbmV4dCk6DQoJaW1wb3J0 IG9zDQoJc2VsZi5tZXNzYWdlKCdVcGRhdGluZyBIVE1MIGZvciBhcnRpY2xl ICcrc3RyKGFydGljbGUuc2VxdWVuY2UpKQ0KCXRyeToNCgkgICAgZj1vcGVu KG9zLnBhdGguam9pbihhcmNkaXIsIGFydGljbGUuZmlsZW5hbWUpLCAncicp DQogICAgICAgICAgICBhcnRpY2xlLmxvYWRib2R5X2Zyb21IVE1MKGYpDQoJ ICAgIGYuY2xvc2UoKQ0KICAgICAgICBleGNlcHQgSU9FcnJvcjoNCiAgICAg ICAgICAgIHNlbGYubWVzc2FnZSgiYXJ0aWNsZSBmaWxlICVzIGlzIG1pc3Np bmchIiAlIG9zLnBhdGguam9pbihhcmNkaXIsIGFydGljbGUuZmlsZW5hbWUp KSANCiAgICAgICAgYXJ0aWNsZS5wcmV2PXByZXYNCiAgICAgICAgYXJ0aWNs ZS5uZXh0PW5leHQNCglmPW9wZW4ob3MucGF0aC5qb2luKGFyY2RpciwgYXJ0 aWNsZS5maWxlbmFtZSksICd3JykNCglmLndyaXRlKGFydGljbGUuYXNfaHRt bCgpKQ0KCWYuY2xvc2UoKQ0K ---1395546950-237318664-904200538=:1550-- From John@list.org Thu Aug 27 22:18:40 1998 From: John@list.org (John Viega) Date: Thu, 27 Aug 1998 14:18:40 -0700 Subject: [Mailman-Developers] Localization, again In-Reply-To: <002001bdd18b$302f2fa0$f6d52dc1@bishop.twinspot.net>; from Tomas Fasth on Thu, Aug 27, 1998 at 09:20:37AM +0200 References: <002001bdd18b$302f2fa0$f6d52dc1@bishop.twinspot.net> Message-ID: <19980827141840.A11851@viega.org> We've been talking about this recently, and we're going to work on moving stuff out. Barry's done a bit of it already, I think. Like you said, we're all fairly limited on time, so we can definitely use all the help we can get... John On Thu, Aug 27, 1998 at 09:20:37AM +0200, Tomas Fasth wrote: > Hi. > I checked out the latest sources in order to try a translation to Swedish. I quickly found out that this was to become a rather complicated task. Presentation texts are practically shattered all over the sources. > Is there currently any work going on in this area? > What can I do to help improving the situation? > Note that I have limited time to allocate in this matter (well, who doesn't :), but want to do my part if others are interested to make an effort as well. The Mailman software is a really good peice of software in concept and design, part from the localization aspects that is. > I also want to mention that I earlier made a try to localize Majordomo. Same problem. Since I'm a python fan, I was delighted to find out about Mailman. Anyway, localization is an important issue, IMHO. > > Cheers, > Tomas > From brianl@real.com Thu Aug 27 23:47:18 1998 From: brianl@real.com (Brian Lenihan) Date: Thu, 27 Aug 1998 15:47:18 -0700 Subject: [Mailman-Developers] A couple minor annoyances Message-ID: <199808272247.AA29130@murrow.prognet.com> I have a couple minor problems with mailman: 1) If a message exceeds the configured size (40k), I get a bounce notice from sendmail as well as the normal approval notice from mailman. The error is unknown mailer error 1 This behavior is new in b5. Aug 27 14:07:03 1998 post: Traceback (innermost last): post: File "/home/mailman/scripts/post", line 100, in ? post: current_list.SendTextToUser( subject = 'Mail sent to %s' % post: TypeError : unexpected keyword argument: raw Aug 27 14:07:09 1998 contact_transport: Traceback (innermost last): contact_transport: File "/home/mailman/scripts/contact_transport", line 52, in ? contact_transport: OutgoingQueue.processQueue() contact_transport: File "/home/mailman/Mailman/OutgoingQueue.py", line 38, in processQueue contact_transport: Utils.TrySMTPDelivery(recip,sender,text,full_fname) contact_transport: File "../Mailman/Utils.py", line 204, in TrySMTPDelivery contact_transport: File "/home/mailman/Mailman/OutgoingQueue.py", line 25, in dequeueMessage contact_transport: os.unlink(msg) contact_transport: OSError : [Errno 2] No such file or directory: '/home/mailma n/data/mm_q.2' I'm not sure what raw=1 is intended to do, but it is causing the error when the attempt is made to notify the user their mail is being held. The definition of SendTextToUser in Mailman/Deliverer.py does not have raw as an argument. scripts/post: current_list.SendTextToUser( subject = 'Mail sent to %s' % current_list.real_name, recipient = the_sender, text = body, raw = 1) 2) After performing some admin functions, e.g. mass subscribing or attending to administrative requests, the list info page shows up with all the fields blank and I have to re-enter data. There are no apparent errors and I'm not sure how to debug this. Does anyone else have this problem? I have had it in every version since the original I found at list.org before the crash, however, prior to b5 it only happened when mass subscribing. From jerrya@fastrans.net Thu Aug 27 23:57:06 1998 From: jerrya@fastrans.net (Jerry Adlersfluegel) Date: Thu, 27 Aug 1998 17:57:06 -0500 (CDT) Subject: [Mailman-Developers] A couple minor annoyances In-Reply-To: <199808272247.AA29130@murrow.prognet.com> Message-ID: On Thu, 27 Aug 1998, Brian Lenihan wrote: > I have a couple minor problems with mailman: > > 1) If a message exceeds the configured size (40k), I get a bounce notice > from sendmail as well as the normal approval notice from mailman. The > error is unknown mailer error 1 > This behavior is new in b5. I see this also. In addition, I get the same type of error when a message is held for approval, due to being sent from a non-subscribed address. The approval message is sent twice, also. > 2) After performing some admin functions, e.g. mass subscribing or > attending to administrative requests, the list info page shows up with all > the fields blank and I have to re-enter data. There are no apparent errors > and I'm not sure how to debug this. Does anyone else have this problem? I > have had it in every version since the original I found at list.org before > the crash, however, prior to b5 it only happened when mass subscribing. I think I get this as well, but I have only done this once. -- Jerry Adlersfluegel http://quake.fastrans.net/~jerrya/ From dragondm@delta.integral.org Sat Aug 29 06:48:33 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sat, 29 Aug 1998 00:48:33 -0500 (CDT) Subject: [Mailman-Developers] Dunno what this is but I fixed it. Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-482516321-904369713=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII Hmm.. I found a bug in the post script whilst I was doing soething else.. Dunno what the effect of this is, but it's a trivial fix. Have a patch... -The Dragon De Monsyne ---1395546950-482516321-904369713=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="post.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: post patch KioqIC91c3Ivc3JjL21haWxtYW4tMS4wYjUvc2NyaXB0cy9wb3N0CVNhdCBB dWcgMjkgMDA6Mzg6NTAgMTk5OA0KLS0tIHBvc3QJRnJpIEF1ZyAyOCAyMDo0 Nzo1MyAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAxMDAsMTA3ICoqKioN CiAgCWN1cnJlbnRfbGlzdC5TZW5kVGV4dFRvVXNlciggc3ViamVjdCA9ICdN YWlsIHNlbnQgdG8gJXMnICUgDQogIAkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbGlzdC5yZWFsX25hbWUsDQog IAkJCQkgICAgIHJlY2lwaWVudCA9IHRoZV9zZW5kZXIsDQohIAkgICAgIAkJ CSAgICAgdGV4dCA9IGJvZHksDQohICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByYXcgPSAxKQ0KICAjIExldCBhbm90aGVyIHByb2Nl c3MgcnVuLg0KICBmaW5hbGx5Og0KICAgICAgY3VycmVudF9saXN0LlVubG9j aygpDQotLS0gMTAwLDEwOSAtLS0tDQogIAljdXJyZW50X2xpc3QuU2VuZFRl eHRUb1VzZXIoIHN1YmplY3QgPSAnTWFpbCBzZW50IHRvICVzJyAlIA0KICAJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy ZW50X2xpc3QucmVhbF9uYW1lLA0KICAJCQkJICAgICByZWNpcGllbnQgPSB0 aGVfc2VuZGVyLA0KISAJICAgICAJCQkgICAgIHRleHQgPSBib2R5KQ0KISAj IFdoYXQncyB0aGlzPyAtZGRtDQohICMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmF3ID0gMSkNCiEgDQogICMgTGV0IGFub3RoZXIg cHJvY2VzcyBydW4uDQogIGZpbmFsbHk6DQogICAgICBjdXJyZW50X2xpc3Qu VW5sb2NrKCkNCg== ---1395546950-482516321-904369713=:10023-- From bwarsaw@cnri.reston.va.us (Barry A. Warsaw) Sat Aug 29 07:41:10 1998 From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw) Date: Sat, 29 Aug 1998 02:41:10 -0400 (EDT) Subject: [Mailman-Developers] Dunno what this is but I fixed it. References: Message-ID: <13799.41606.151124.966937@anthem.cnri.reston.va.us> >>>>> "TDDM" == The Dragon De Monsyne writes: TDDM> Hmm.. I found a bug in the post script whilst I was TDDM> doing soething else.. Dunno what the effect of this is, but TDDM> it's a trivial fix. Thanks for the report! From dragondm@delta.integral.org Sat Aug 29 08:30:47 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sat, 29 Aug 1998 02:30:47 -0500 (CDT) Subject: [Mailman-Developers] Python standard SMTPLib patch. Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-1591827097-904375847=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII Ok, this patch changes mailman to use the smtplib.py included here, instead of the current one. The smtplib.py included here is the most recent version of the smtplib included in the Python 1.5.1 distribution. This exact version will likely be included in the python 1.5.2 distribution Having Mailman use this smtplib is good b'cause any improvements/bugfixes made to it because of mailman can then be folded back into tyhe Python distribution. Plus this lib has esmtp support, which could be usefull for DSN tweaking. To aply this: -Remove the smtplib in the Mailman package -Put this smplib.py in your PYTHONPATH. (If you have 1.5.1, replace the smtplib that came with the python distribution with this one, it has a few bugfixes) -apply the two included patches. Ones for the Mailman package, ones a very minor one for the contact_transport script. -The Dragon De Monsyne ---1395546950-1591827097-904375847=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="smtplib.py" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: smtplib.py IyEvdXNyL2Jpbi9weXRob24NCiIiIlNNVFAvRVNNVFAgY2xpZW50IGNsYXNz Lg0KDQpBdXRob3I6IFRoZSBEcmFnb24gRGUgTW9uc3luZSA8ZHJhZ29uZG1A aW50ZWdyYWwub3JnPg0KRVNNVFAgc3VwcG9ydCwgdGVzdCBjb2RlIGFuZCBk b2MgZml4ZXMgYWRkZWQgYnkNCiAgICBFcmljIFMuIFJheW1vbmQgPGVzckB0 aHlyc3VzLmNvbT4NCkJldHRlciBSRkMgODIxIGNvbXBsaWFuY2UgKE1BSUwg YW5kIFJDUFQsIGFuZCBDUkxGIGluIGRhdGEpDQogICAgYnkgQ2FyZXkgRXZh bnMgPGMuZXZhbnNAY2xlYXIubmV0Lm56PiwgZm9yIHBpY2t5IG1haWwgc2Vy dmVycy4NCiAgIA0KKFRoaXMgd2FzIG1vZGlmaWVkIGZyb20gdGhlIFB5dGhv biAxLjUgbGlicmFyeSBIVFRQIGxpYi4pDQoNClRoaXMgc2hvdWxkIGZvbGxv dyBSRkMgODIxIChTTVRQKSBhbmQgUkZDIDE4NjkgKEVTTVRQKS4NCg0KTm90 ZXM6DQoJUGxlYXNlIHJlbWVtYmVyLCB3aGVuIGRvaW5nIEVTTVRQLCB0aGF0 IHRoZSBuYW1lcyBvZiB0aGUgU01UUCBzZXJ2aWNlIA0KZXh0ZW50aW9ucyAg YXJlIE5PVCB0aGUgc2FtZSB0aGluZyBhcyB0aGUgb3B0aW9uIGtleW9yZHMg Zm9yIHRoZSBSQ1BUIGFuZCBNQUlMDQpjb21tYW5kcyEgDQoNCkV4YW1wbGU6 DQoNCj4+PiBpbXBvcnQgc210cGxpYg0KPj4+IHM9c210cGxpYi5TTVRQKCJs b2NhbGhvc3QiKQ0KPj4+IHByaW50IHMuaGVscCgpDQpUaGlzIGlzIFNlbmRt YWlsIHZlcnNpb24gOC44LjQNClRvcGljczoNCiAgICBIRUxPICAgIEVITE8g ICAgTUFJTCAgICBSQ1BUICAgIERBVEENCiAgICBSU0VUICAgIE5PT1AgICAg UVVJVCAgICBIRUxQICAgIFZSRlkNCiAgICBFWFBOICAgIFZFUkIgICAgRVRS TiAgICBEU04NCkZvciBtb3JlIGluZm8gdXNlICJIRUxQIDx0b3BpYz4iLg0K VG8gcmVwb3J0IGJ1Z3MgaW4gdGhlIGltcGxlbWVudGF0aW9uIHNlbmQgZW1h aWwgdG8NCiAgICBzZW5kbWFpbC1idWdzQHNlbmRtYWlsLm9yZy4NCkZvciBs b2NhbCBpbmZvcm1hdGlvbiBzZW5kIGVtYWlsIHRvIFBvc3RtYXN0ZXIgYXQg eW91ciBzaXRlLg0KRW5kIG9mIEhFTFAgaW5mbw0KPj4+IHMucHV0Y21kKCJ2 cmZ5Iiwic29tZW9uZUBoZXJlIikNCj4+PiBzLmdldHJlcGx5KCkNCigyNTAs ICJTb21lYm9keSBPdmVySGVyZSA8c29tZWJvZHlAaGVyZS5teS5vcmc+IikN Cj4+PiBzLnF1aXQoKQ0KDQoiIiINCg0KaW1wb3J0IHNvY2tldA0KaW1wb3J0 IHN0cmluZyxyZSxyZmM4MjINCg0KU01UUF9QT1JUID0gMjUNCkNSTEY9Ilxy XG4iDQoNCiMgdXNlZCBmb3IgZXhjZXB0aW9ucyANClNNVFBTZXJ2ZXJEaXNj b25uZWN0ZWQ9IlNlcnZlciBub3QgY29ubmVjdGVkIg0KU01UUFNlbmRlclJl ZnVzZWQ9IlNlbmRlciBhZGRyZXNzIHJlZnVzZWQiDQpTTVRQUmVjaXBpZW50 c1JlZnVzZWQ9IkFsbCBSZWNpcGllbnRzIHJlZnVzZWQiDQpTTVRQRGF0YUVy cm9yPSJFcnJvciB0cmFuc21pdHRpbmcgbWVzc2FnZSBkYXRhIg0KDQpkZWYg cXVvdGVhZGRyKGFkZHIpOg0KICAgICIiIlF1b3RlIGEgc3Vic2V0IG9mIHRo ZSBlbWFpbCBhZGRyZXNzZXMgZGVmaW5lZCBieSBSRkMgODIxLg0KDQogICAg U2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGFueXRoaW5nIHJmYzgyMi5wYXJz ZWFkZHIgY2FuIGhhbmRsZS4iIiINCg0KICAgIG09Tm9uZQ0KICAgIHRyeToN CiAgICAgICAgbT1yZmM4MjIucGFyc2VhZGRyKGFkZHIpWzFdDQogICAgZXhj ZXB0IEF0dHJpYnV0ZUVycm9yOg0KICAgICAgICBwYXNzDQogICAgaWYgbm90 IG06DQogICAgICAgICNzb21ldGhpbmcgd2VpcmQgaGVyZS4uIHB1bnQgLWRk bQ0KICAgICAgICByZXR1cm4gYWRkcg0KICAgIGVsc2U6DQogICAgICAgIHJl dHVybiAiPCVzPiIgJSBtDQoNCmRlZiBxdW90ZWRhdGEoZGF0YSk6DQogICAg IiIiUXVvdGUgZGF0YSBmb3IgZW1haWwuDQoNCiAgICBEb3VibGUgbGVhZGlu ZyAnLicsIGFuZCBjaGFuZ2UgVW5peCBuZXdsaW5lICdcbicsIG9yIE1hYyAn XHInIGludG8NCiAgICBJbnRlcm5ldCBDUkxGIGVuZC1vZi1saW5lLiIiIg0K ICAgIHJldHVybiByZS5zdWIocicoP20pXlwuJywgJy4uJywNCiAgICAgICAg cmUuc3ViKHInKD86XHJcbnxcbnxccig/IVxuKSknLCBDUkxGLCBkYXRhKSkN Cg0KY2xhc3MgU01UUDoNCiAgICAiIiJUaGlzIGNsYXNzIG1hbmFnZXMgYSBj b25uZWN0aW9uIHRvIGFuIFNNVFAgb3IgRVNNVFAgc2VydmVyLg0KICAgIFNN VFAgT2JqZWN0czoNCiAgICAgICAgU01UUCBvYmplY3RzIGhhdmUgdGhlIGZv bGxvd2luZyBhdHRyaWJ1dGVzOiAgICANCiAgICAgICAgICAgIGhlbG9fcmVz cCANCiAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBtZXNzYWdlIGdpdmVu IGJ5IHRoZSBzZXJ2ZXIgaW4gcmVzcG9uY2UgdG8gdGhlIA0KICAgICAgICAg ICAgICAgIG1vc3QgcmVjZW50IEhFTE8gY29tbWFuZC4NCiAgICAgICAgICAg ICAgICANCiAgICAgICAgICAgIGVobG9fcmVzcA0KICAgICAgICAgICAgICAg IFRoaXMgaXMgdGhlIG1lc3NhZ2UgZ2l2ZW4gYnkgdGhlIHNlcnZlciBpbiBy ZXNwb25jZSB0byB0aGUgDQogICAgICAgICAgICAgICAgbW9zdCByZWNlbnQg RUhMTyBjb21tYW5kLiBUaGlzIGlzIHVzdWFsbHkgbXVsdGlsaW5lLg0KDQog ICAgICAgICAgICBkb2VzX2VzbXRwIA0KICAgICAgICAgICAgICAgIFRoaXMg aXMgYSBUcnVlIHZhbHVlIF9hZnRlciB5b3UgZG8gYW4gRUhMTyBjb21tYW5k XywgaWYgdGhlDQogICAgICAgICAgICAgICAgc2VydmVyIHN1cHBvcnRzIEVT TVRQLg0KDQogICAgICAgICAgICBlc210cF9mZWF0dXJlcyANCiAgICAgICAg ICAgICAgICBUaGlzIGlzIGEgZGljdGlvbmFyeSwgd2hpY2gsIGlmIHRoZSBz ZXJ2ZXIgc3VwcG9ydHMgRVNNVFAsDQogICAgICAgICAgICAgICAgd2lsbCAg X2FmdGVyIHlvdSBkbyBhbiBFSExPIGNvbW1hbmRfLCBjb250YWluIHRoZSBu YW1lcyBvZiB0aGUNCiAgICAgICAgICAgICAgICBTTVRQIHNlcnZpY2UgIGV4 dGVudGlvbnMgdGhpcyBzZXJ2ZXIgc3VwcG9ydHMsIGFuZCB0aGVpciANCiAg ICAgICAgICAgICAgICBwYXJhbWV0ZXJzIChpZiBhbnkpLg0KICAgICAgICAg ICAgICAgIE5vdGUsIGFsbCBleHRlbnRpb24gbmFtZXMgYXJlIG1hcHBlZCB0 byBsb3dlciBjYXNlIGluIHRoZSANCiAgICAgICAgICAgICAgICBkaWN0aW9u YXJ5LiANCg0KICAgICAgICBGb3IgbWV0aG9kIGRvY3MsIHNlZSBlYWNoIG1l dGhvZCdzIGRvY3N0cmluZ3MuIEluIGdlbmVyYWwsIHRoZXJlIGlzIA0KICAg ICAgICAgICAgYSBtZXRob2Qgb2YgdGhlIHNhbWUgbmFtZSB0byBwcmVmb3Jt IGVhY2ggU01UUCBjb21hbmQsIGFuZCB0aGVyZSANCiAgICAgICAgICAgIGlz IGEgbWV0aG9kIGNhbGxlZCAnc2VuZG1haWwnIHRoYXQgd2lsbCBkbyBhbiBl bnRpZXJlIG1haWwgDQogICAgICAgICAgICB0cmFuc2FjdGlvbi4iIiINCg0K ICAgIGRlYnVnbGV2ZWwgPSAwDQogICAgZmlsZSA9IE5vbmUNCiAgICBoZWxv X3Jlc3AgPSBOb25lDQogICAgZWhsb19yZXNwID0gTm9uZQ0KICAgIGRvZXNf ZXNtdHAgPSAwDQoNCiAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCA9ICcn LCBwb3J0ID0gMCk6DQogICAgICAgICIiIkluaXRpYWxpemUgYSBuZXcgaW5z dGFuY2UuDQoNCiAgICAgICAgSWYgc3BlY2lmaWVkLCBgaG9zdCcgaXMgdGhl IG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IHRvIHdoaWNoDQogICAgICAgIHRv IGNvbm5lY3QuICBJZiBzcGVjaWZpZWQsIGBwb3J0JyBzcGVjaWZpZXMgdGhl IHBvcnQgdG8gd2hpY2gNCiAgICAgICAgdG8gY29ubmVjdC4gIEJ5IGRlZmF1 bHQsIHNtdHBsaWIuU01UUF9QT1JUIGlzIHVzZWQuDQoNCiAgICAgICAgIiIi DQogICAgICAgIHNlbGYuZXNtdHBfZmVhdHVyZXMgPSB7fQ0KICAgICAgICBp ZiBob3N0OiBzZWxmLmNvbm5lY3QoaG9zdCwgcG9ydCkNCiAgICANCiAgICBk ZWYgc2V0X2RlYnVnbGV2ZWwoc2VsZiwgZGVidWdsZXZlbCk6DQogICAgICAg ICIiIlNldCB0aGUgZGVidWcgb3V0cHV0IGxldmVsLg0KDQogICAgICAgIEEg bm9uLWZhbHNlIHZhbHVlIHJlc3VsdHMgaW4gZGVidWcgbWVzc2FnZXMgZm9y IGNvbm5lY3Rpb24gYW5kDQogICAgICAgIGZvciBhbGwgbWVzc2FnZXMgc2Vu dCB0byBhbmQgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLg0KDQogICAgICAg ICIiIg0KICAgICAgICBzZWxmLmRlYnVnbGV2ZWwgPSBkZWJ1Z2xldmVsDQoN CiAgICBkZWYgY29ubmVjdChzZWxmLCBob3N0PSdsb2NhbGhvc3QnLCBwb3J0 ID0gMCk6DQogICAgICAgICIiIkNvbm5lY3QgdG8gYSBob3N0IG9uIGEgZ2l2 ZW4gcG9ydC4NCg0KICAgICAgICBJZiB0aGUgaG9zdG5hbWUgZW5kcyB3aXRo IGEgY29sb24gKGA6JykgZm9sbG93ZWQgYnkgYSBudW1iZXIsDQoJYW5kIHRo ZXJlIGlzIG5vIHBvcnQgc3BlY2lmaWVkLCAgdGhhdCBzdWZmaXggd2lsbCBi ZSBzdHJpcHBlZCANCiAgICAgICAgb2ZmIGFuZCB0aGUgbnVtYmVyIGludGVy cHJldGVkIGFzIHRoZSBwb3J0IG51bWJlciB0byB1c2UuDQoNCiAgICAgICAg Tm90ZTogIFRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgaW52b2tlZCBi eSBfX2luaXRfXywNCiAgICAgICAgaWYgYSBob3N0IGlzIHNwZWNpZmllZCBk dXJpbmcgaW5zdGFudGlhdGlvbi4NCg0KICAgICAgICAiIiINCiAgICAgICAg aWYgbm90IHBvcnQ6DQogICAgICAgICAgICBpID0gc3RyaW5nLmZpbmQoaG9z dCwgJzonKQ0KICAgICAgICAgICAgaWYgaSA+PSAwOg0KICAgICAgICAgICAg ICAgIGhvc3QsIHBvcnQgPSBob3N0WzppXSwgaG9zdFtpKzE6XQ0KICAgICAg ICAgICAgICAgIHRyeTogcG9ydCA9IHN0cmluZy5hdG9pKHBvcnQpDQogICAg ICAgICAgICAgICAgZXhjZXB0IHN0cmluZy5hdG9pX2Vycm9yOg0KICAgICAg ICAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IsICJub25udW1lcmlj IHBvcnQiDQogICAgICAgIGlmIG5vdCBwb3J0OiBwb3J0ID0gU01UUF9QT1JU DQogICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFG X0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkNCiAgICAgICAgaWYgc2VsZi5k ZWJ1Z2xldmVsID4gMDogcHJpbnQgJ2Nvbm5lY3Q6JywgKGhvc3QsIHBvcnQp DQogICAgICAgIHNlbGYuc29jay5jb25uZWN0KGhvc3QsIHBvcnQpDQogICAg ICAgIChjb2RlLG1zZyk9c2VsZi5nZXRyZXBseSgpDQogICAgICAgIGlmIHNl bGYuZGVidWdsZXZlbCA+MCA6IHByaW50ICJjb25uZWN0OiIsIG1zZw0KICAg ICAgICByZXR1cm4gbXNnDQogICAgDQogICAgZGVmIHNlbmQoc2VsZiwgc3Ry KToNCiAgICAgICAgIiIiU2VuZCBgc3RyJyB0byB0aGUgc2VydmVyLiIiIg0K ICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCAnc2VuZDon LCBgc3RyYA0KICAgICAgICBpZiBzZWxmLnNvY2s6DQoJICAgIHRyeToNCiAg ICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZChzdHIpDQoJICAgIGV4Y2Vw dCBzb2NrZXQuZXJyb3I6DQogICAgICAgICAgICAgICAgcmFpc2UgU01UUFNl cnZlckRpc2Nvbm5lY3RlZA0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAg cmFpc2UgU01UUFNlcnZlckRpc2Nvbm5lY3RlZA0KIA0KICAgIGRlZiBwdXRj bWQoc2VsZiwgY21kLCBhcmdzPSIiKToNCiAgICAgICAgIiIiU2VuZCBhIGNv bW1hbmQgdG8gdGhlIHNlcnZlci4NCiAgICAgICAgIiIiDQogICAgICAgIHN0 ciA9ICclcyAlcyVzJyAlIChjbWQsIGFyZ3MsIENSTEYpDQogICAgICAgIHNl bGYuc2VuZChzdHIpDQogICAgDQogICAgZGVmIGdldHJlcGx5KHNlbGYpOg0K ICAgICAgICAiIiJHZXQgYSByZXBseSBmcm9tIHRoZSBzZXJ2ZXIuDQogICAg ICAgIA0KICAgICAgICBSZXR1cm5zIGEgdHVwbGUgY29uc2lzdGluZyBvZjoN CiAgICAgICAgLSBzZXJ2ZXIgcmVzcG9uc2UgY29kZSAoZS5nLiAnMjUwJywg b3Igc3VjaCwgaWYgYWxsIGdvZXMgd2VsbCkNCiAgICAgICAgICBOb3RlOiBy ZXR1cm5zIC0xIGlmIGl0IGNhbid0IHJlYWQgcmVzcG9uc2UgY29kZS4NCiAg ICAgICAgLSBzZXJ2ZXIgcmVzcG9uc2Ugc3RyaW5nIGNvcnJlc3BvbmRpbmcg dG8gcmVzcG9uc2UgY29kZQ0KICAgICAgICAgICAgICAgIChub3RlIDogbXVs dGlsaW5lIHJlc3BvbnNlcyBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUsIA0KICAg ICAgICAgICAgICAgICBtdWx0aWxpbmUgc3RyaW5nKQ0KICAgICAgICAiIiIN CiAgICAgICAgcmVzcD1bXQ0KICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNv Y2subWFrZWZpbGUoJ3JiJykNCiAgICAgICAgd2hpbGUgMToNCiAgICAgICAg ICAgIGxpbmUgPSBzZWxmLmZpbGUucmVhZGxpbmUoKQ0KICAgICAgICAgICAg aWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQgJ3JlcGx5OicsIGBsaW5l YA0KICAgICAgICAgICAgcmVzcC5hcHBlbmQoc3RyaW5nLnN0cmlwKGxpbmVb NDpdKSkNCiAgICAgICAgICAgIGNvZGU9bGluZVs6M10NCiAgICAgICAgICAg ICNjaGVjayBpZiBtdWx0aWxpbmUgcmVzcA0KICAgICAgICAgICAgaWYgbGlu ZVszOjRdIT0iLSI6DQogICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAg dHJ5Og0KICAgICAgICAgICAgZXJyY29kZSA9IHN0cmluZy5hdG9pKGNvZGUp DQogICAgICAgIGV4Y2VwdChWYWx1ZUVycm9yKToNCiAgICAgICAgICAgIGVy cmNvZGUgPSAtMQ0KDQogICAgICAgIGVycm1zZyA9IHN0cmluZy5qb2luKHJl c3AsIlxuIikNCiAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogDQog ICAgICAgICAgICBwcmludCAncmVwbHk6IHJldGNvZGUgKCVzKTsgTXNnOiAl cycgJSAoZXJyY29kZSxlcnJtc2cpDQogICAgICAgIHJldHVybiBlcnJjb2Rl LCBlcnJtc2cNCiAgICANCiAgICBkZWYgZG9jbWQoc2VsZiwgY21kLCBhcmdz PSIiKToNCiAgICAgICAgIiIiIFNlbmQgYSBjb21tYW5kLCBhbmQgcmV0dXJu IGl0cyByZXNwb25zZSBjb2RlICIiIg0KICAgICAgICANCiAgICAgICAgc2Vs Zi5wdXRjbWQoY21kLGFyZ3MpDQogICAgICAgIChjb2RlLG1zZyk9c2VsZi5n ZXRyZXBseSgpDQogICAgICAgIHJldHVybiBjb2RlDQojIHN0ZCBzbXRwIGNv bW1hbmRzDQoNCiAgICBkZWYgaGVsbyhzZWxmLCBuYW1lPScnKToNCiAgICAg ICAgIiIiIFNNVFAgJ2hlbG8nIGNvbW1hbmQuIEhvc3RuYW1lIHRvIHNlbmQg Zm9yIHRoaXMgY29tbWFuZCAgDQogICAgICAgIGRlZmF1bHRzIHRvIHRoZSBG UUROIG9mIHRoZSBsb2NhbCBob3N0ICIiIg0KICAgICAgICBuYW1lPXN0cmlu Zy5zdHJpcChuYW1lKQ0KICAgICAgICBpZiBsZW4obmFtZSk9PTA6DQogICAg ICAgICAgICAgICAgbmFtZT1zb2NrZXQuZ2V0aG9zdGJ5YWRkcihzb2NrZXQu Z2V0aG9zdG5hbWUoKSlbMF0NCiAgICAgICAgc2VsZi5wdXRjbWQoImhlbG8i LG5hbWUpDQogICAgICAgIChjb2RlLG1zZyk9c2VsZi5nZXRyZXBseSgpDQog ICAgICAgIHNlbGYuaGVsb19yZXNwPW1zZw0KICAgICAgICByZXR1cm4gY29k ZQ0KDQogICAgZGVmIGVobG8oc2VsZiwgbmFtZT0nJyk6DQogICAgICAgICIi IiBTTVRQICdlaGxvJyBjb21tYW5kLiBIb3N0bmFtZSB0byBzZW5kIGZvciB0 aGlzIGNvbW1hbmQgIA0KICAgICAgICBkZWZhdWx0cyB0byB0aGUgRlFETiBv ZiB0aGUgbG9jYWwgaG9zdC4gICIiIg0KICAgICAgICBuYW1lPXN0cmluZy5z dHJpcChuYW1lKQ0KICAgICAgICBpZiBsZW4obmFtZSk9PTA6DQogICAgICAg ICAgICAgICAgbmFtZT1zb2NrZXQuZ2V0aG9zdGJ5YWRkcihzb2NrZXQuZ2V0 aG9zdG5hbWUoKSlbMF0NCiAgICAgICAgc2VsZi5wdXRjbWQoImVobG8iLG5h bWUpDQogICAgICAgIChjb2RlLG1zZyk9c2VsZi5nZXRyZXBseSgpDQogICAg ICAgICMgQWNjb3JkaW5nIHRvIFJGQzE4Njkgc29tZSAoYmFkbHkgd3JpdHRl bikgDQogICAgICAgICMgTVRBJ3Mgd2lsbCBkaXNjb25uZWN0IG9uIGFuIGVo bG8uIFRvc3MgYW4gZXhjZXB0aW9uIGlmIA0KICAgICAgICAjIHRoYXQgaGFw cGVucyAtZGRtDQogICAgICAgIGlmIGNvZGUgPT0gLTEgYW5kIGxlbihtc2cp ID09IDA6DQogICAgICAgICAgICByYWlzZSBTTVRQU2VydmVyRGlzY29ubmVj dGVkDQogICAgICAgIHNlbGYuZWhsb19yZXNwPW1zZw0KICAgICAgICBpZiBj b2RlPD4yNTA6DQogICAgICAgICAgICByZXR1cm4gY29kZQ0KICAgICAgICBz ZWxmLmRvZXNfZXNtdHA9MQ0KICAgICAgICAjcGFyc2UgdGhlIGVobG8gcmVz cG9uY2UgLWRkbQ0KCXJlc3A9c3RyaW5nLnNwbGl0KHNlbGYuZWhsb19yZXNw LCdcbicpDQogICAgICAgIGRlbCByZXNwWzBdDQoJZm9yIGVhY2ggaW4gcmVz cDoNCiAgICAgICAgICAgIG09cmUubWF0Y2gocicoP1A8ZmVhdHVyZT5bQS1a YS16MC05XVtBLVphLXowLTlcLV0qKScsZWFjaCkNCiAgICAgICAgICAgIGlm IG06DQogICAgICAgICAgICAgICAgZmVhdHVyZT1zdHJpbmcubG93ZXIobS5n cm91cCgiZmVhdHVyZSIpKQ0KICAgICAgICAgICAgICAgIHBhcmFtcz1zdHJp bmcuc3RyaXAobS5zdHJpbmdbbS5lbmQoImZlYXR1cmUiKTpdKQ0KICAgICAg ICAgICAgICAgIHNlbGYuZXNtdHBfZmVhdHVyZXNbZmVhdHVyZV09cGFyYW1z DQogICAgICAgIHJldHVybiBjb2RlDQoNCiAgICBkZWYgaGFzX2V4dG4oc2Vs Ziwgb3B0KToNCiAgICAgICAgIiIiRG9lcyB0aGUgc2VydmVyIHN1cHBvcnQg YSBnaXZlbiBTTVRQIHNlcnZpY2UgZXh0ZW5zaW9uPyIiIg0KICAgICAgICBy ZXR1cm4gc2VsZi5lc210cF9mZWF0dXJlcy5oYXNfa2V5KHN0cmluZy5sb3dl cihvcHQpKQ0KDQogICAgZGVmIGhlbHAoc2VsZiwgYXJncz0nJyk6DQogICAg ICAgICIiIiBTTVRQICdoZWxwJyBjb21tYW5kLiBSZXR1cm5zIGhlbHAgdGV4 dCBmcm9tIHNlcnZlciAiIiINCiAgICAgICAgc2VsZi5wdXRjbWQoImhlbHAi LCBhcmdzKQ0KICAgICAgICAoY29kZSxtc2cpPXNlbGYuZ2V0cmVwbHkoKQ0K ICAgICAgICByZXR1cm4gbXNnDQoNCiAgICBkZWYgcnNldChzZWxmKToNCiAg ICAgICAgIiIiIFNNVFAgJ3JzZXQnIGNvbW1hbmQuIFJlc2V0cyBzZXNzaW9u LiAiIiINCiAgICAgICAgY29kZT1zZWxmLmRvY21kKCJyc2V0IikNCiAgICAg ICAgcmV0dXJuIGNvZGUNCg0KICAgIGRlZiBub29wKHNlbGYpOg0KICAgICAg ICAiIiIgU01UUCAnbm9vcCcgY29tbWFuZC4gRG9lc24ndCBkbyBhbnl0aGlu ZyA6PiAiIiINCiAgICAgICAgY29kZT1zZWxmLmRvY21kKCJub29wIikNCiAg ICAgICAgcmV0dXJuIGNvZGUNCg0KICAgIGRlZiBtYWlsKHNlbGYsc2VuZGVy LG9wdGlvbnM9W10pOg0KICAgICAgICAiIiIgU01UUCAnbWFpbCcgY29tbWFu ZC4gQmVnaW5zIG1haWwgeGZlciBzZXNzaW9uLiAiIiINCiAgICAgICAgb3B0 aW9ubGlzdCA9ICcnDQogICAgICAgIGlmIG9wdGlvbnMgYW5kIHNlbGYuZG9l c19lc210cDoNCiAgICAgICAgICAgIG9wdGlvbmxpc3QgPSBzdHJpbmcuam9p bihvcHRpb25zLCAnICcpDQogICAgICAgIHNlbGYucHV0Y21kKCJtYWlsIiwg IkZST006JXMgJXMiICUgKHF1b3RlYWRkcihzZW5kZXIpICxvcHRpb25saXN0 KSkNCiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0cmVwbHkoKQ0KDQogICAgZGVm IHJjcHQoc2VsZixyZWNpcCxvcHRpb25zPVtdKToNCiAgICAgICAgIiIiIFNN VFAgJ3JjcHQnIGNvbW1hbmQuIEluZGljYXRlcyAxIHJlY2lwaWVudCBmb3Ig dGhpcyBtYWlsLiAiIiINCiAgICAgICAgb3B0aW9ubGlzdCA9ICcnDQogICAg ICAgIGlmIG9wdGlvbnMgYW5kIHNlbGYuZG9lc19lc210cDoNCiAgICAgICAg ICAgIG9wdGlvbmxpc3QgPSBzdHJpbmcuam9pbihvcHRpb25zLCAnICcpDQog ICAgICAgIHNlbGYucHV0Y21kKCJyY3B0IiwiVE86JXMgJXMiICUgKHF1b3Rl YWRkcihyZWNpcCksb3B0aW9ubGlzdCkpDQogICAgICAgIHJldHVybiBzZWxm LmdldHJlcGx5KCkNCg0KICAgIGRlZiBkYXRhKHNlbGYsbXNnKToNCiAgICAg ICAgIiIiIFNNVFAgJ0RBVEEnIGNvbW1hbmQuIFNlbmRzIG1lc3NhZ2UgZGF0 YSB0byBzZXJ2ZXIuIA0KICAgICAgICAgICAgQXV0b21hdGljYWxseSBxdW90 ZXMgbGluZXMgYmVnaW5uaW5nIHdpdGggYSBwZXJpb2QgcGVyIHJmYzgyMS4g IiIiDQogICAgICAgIHNlbGYucHV0Y21kKCJkYXRhIikNCiAgICAgICAgKGNv ZGUscmVwbCk9c2VsZi5nZXRyZXBseSgpDQogICAgICAgIGlmIHNlbGYuZGVi dWdsZXZlbCA+MCA6IHByaW50ICJkYXRhOiIsIChjb2RlLHJlcGwpDQogICAg ICAgIGlmIGNvZGUgPD4gMzU0Og0KICAgICAgICAgICAgcmV0dXJuIC0xDQog ICAgICAgIGVsc2U6DQogICAgICAgICAgICBzZWxmLnNlbmQocXVvdGVkYXRh KG1zZykpDQogICAgICAgICAgICBzZWxmLnNlbmQoIiVzLiVzIiAlIChDUkxG LCBDUkxGKSkNCiAgICAgICAgICAgIChjb2RlLG1zZyk9c2VsZi5nZXRyZXBs eSgpDQogICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPjAgOiBwcmlu dCAiZGF0YToiLCAoY29kZSxtc2cpDQogICAgICAgICAgICByZXR1cm4gY29k ZQ0KDQogICAgZGVmIHZyZnkoc2VsZiwgYWRkcmVzcyk6DQogICAgICAgIHJl dHVybiBzZWxmLnZlcmlmeShhZGRyZXNzKQ0KDQogICAgZGVmIHZlcmlmeShz ZWxmLCBhZGRyZXNzKToNCiAgICAgICAgIiIiIFNNVFAgJ3ZlcmlmeScgY29t bWFuZC4gQ2hlY2tzIGZvciBhZGRyZXNzIHZhbGlkaXR5LiAiIiINCiAgICAg ICAgc2VsZi5wdXRjbWQoInZyZnkiLCBxdW90ZWFkZHIoYWRkcmVzcykpDQog ICAgICAgIHJldHVybiBzZWxmLmdldHJlcGx5KCkNCg0KICAgIGRlZiBleHBu KHNlbGYsIGFkZHJlc3MpOg0KICAgICAgICAiIiIgU01UUCAndmVyaWZ5JyBj b21tYW5kLiBDaGVja3MgZm9yIGFkZHJlc3MgdmFsaWRpdHkuICIiIg0KICAg ICAgICBzZWxmLnB1dGNtZCgiZXhwbiIsIHF1b3RlYWRkcihhZGRyZXNzKSkN CiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0cmVwbHkoKQ0KDQoNCiNzb21lIHVz ZWZ1bCBtZXRob2RzDQogICAgZGVmIHNlbmRtYWlsKHNlbGYsZnJvbV9hZGRy LHRvX2FkZHJzLG1zZyxtYWlsX29wdGlvbnM9W10scmNwdF9vcHRpb25zPVtd KToNCiAgICAgICAgIiIiIFRoaXMgY29tbWFuZCBwZXJmb3JtcyBhbiBlbnRp cmUgbWFpbCB0cmFuc2FjdGlvbi4gDQogICAgICAgICAgICBUaGUgYXJndW1l bnRzIGFyZTogDQogICAgICAgICAgICAgICAtIGZyb21fYWRkciA6IFRoZSBh ZGRyZXNzIHNlbmRpbmcgdGhpcyBtYWlsLg0KICAgICAgICAgICAgICAgLSB0 b19hZGRycyA6ICBhIGxpc3Qgb2YgYWRkcmVzc2VzIHRvIHNlbmQgdGhpcyBt YWlsIHRvDQogICAgICAgICAgICAgICAtIG1zZyA6IHRoZSBtZXNzYWdlIHRv IHNlbmQuIA0KICAgICAgICAgICAgICAgLSBtYWlsX29wdGlvbnMgOiBsaXN0 IG9mIEVTTVRQIG9wdGlvbnMgKHN1Y2ggYXMgOGJpdG1pbWUpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgbWFpbCBjb21tYW5k DQogICAgICAgICAgICAgICAtIHJjcHRfb3B0aW9ucyA6IExpc3Qgb2YgRVNN VFAgb3B0aW9ucyAoc3VjaCBhcyBEU04gY29tbWFuZHMpDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yIGFsbCB0aGUgcmNwdCBjb21tYW5k cw0KCUlmIHRoZXJlIGhhcyBiZWVuIG5vIHByZXZpb3VzIEVITE8gb3IgSEVM TyBjb21tYW5kIHRoaXMgc2Vzc2lvbiwNCgl0aGlzIG1ldGhvZCB0cmllcyBF U01UUCBFSExPIGZpcnN0LiBJZiB0aGUgc2VydmVyIGRvZXMgRVNNVFAsIG1l c3NhZ2UNCiAgICAgICAgc2l6ZSBhbmQgZWFjaCBvZiB0aGUgc3BlY2lmaWVk IG9wdGlvbnMgd2lsbCBiZSBwYXNzZWQgdG8gaXQuICANCiAgICAgICAgSWYg RUhMTyBmYWlscywgSEVMTyB3aWxsIGJlIHRyaWVkIGFuZCBFU01UUCBvcHRp b25zIHN1cHByZXNzZWQuDQoNCiAgICAgICAgVGhpcyBtZXRob2Qgd2lsbCBy ZXR1cm4gbm9ybWFsbHkgaWYgdGhlIG1haWwgaXMgYWNjZXB0ZWQgZm9yIGF0 IGxlYXN0IA0KICAgICAgICBvbmUgcmVjaXBpZW50LiBPdGhlcndpc2UgaXQg d2lsbCB0aHJvdyBhbiBleGNlcHRpb24gKGVpdGhlcg0KICAgICAgICBTTVRQ U2VuZGVyUmVmdXNlZCwgU01UUFJlY2lwaWVudHNSZWZ1c2VkLCBvciBTTVRQ RGF0YUVycm9yKQ0KICAgICAgICBUaGF0IGlzLCBpZiB0aGlzIG1ldGhvZCBk b2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24sIHRoZW4gc29tZW9uZSANCiAg ICAgICAgc2hvdWxkIGdldCB5b3VyIG1haWwuICBJZiB0aGlzIG1ldGhvZCBk b2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24sDQogICAgICAgIGl0IHJldHVy bnMgYSBkaWN0aW9uYXJ5LCB3aXRoIG9uZSBlbnRyeSBmb3IgZWFjaCByZWNp cGllbnQgdGhhdCB3YXMgDQogICAgICAgIHJlZnVzZWQuIA0KDQogICAgICAg IEV4YW1wbGU6DQogICAgICANCiAgICAgICAgID4+PiBpbXBvcnQgc210cGxp Yg0KICAgICAgICAgPj4+IHM9c210cGxpYi5TTVRQKCJsb2NhbGhvc3QiKQ0K ICAgICAgICAgPj4+IHRvbGlzdD1bIm9uZUBvbmUub3JnIiwidHdvQHR3by5v cmciLCJ0aHJlZUB0aHJlZS5vcmciLCJmb3VyQGZvdXIub3JnIl0NCiAgICAg ICAgID4+PiBtc2cgPSAnJycNCiAgICAgICAgIC4uLiBGcm9tOiBNZUBteS5v cmcNCiAgICAgICAgIC4uLiBTdWJqZWN0OiB0ZXN0aW4nLi4uDQogICAgICAg ICAuLi4NCiAgICAgICAgIC4uLiBUaGlzIGlzIGEgdGVzdCAnJycNCiAgICAg ICAgID4+PiBzLnNlbmRtYWlsKCJtZUBteS5vcmciLHRvbGlzdCxtc2cpDQog ICAgICAgICB7ICJ0aHJlZUB0aHJlZS5vcmciIDogKCA1NTAgLCJVc2VyIHVu a25vd24iICkgfQ0KICAgICAgICAgPj4+IHMucXVpdCgpDQogICAgICAgIA0K ICAgICAgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBtZXNzYWdlIHdh cyBhY2NlcHRlZCBmb3IgZGVsaXZlcnkgdG8gDQogICAgICAgICB0aHJlZSBv ZiB0aGUgZm91ciBhZGRyZXNzZXMsIGFuZCBvbmUgd2FzIHJlamVjdGVkLCB3 aXRoIHRoZSBlcnJvcg0KICAgICAgICAgY29kZSA1NTAuIElmIGFsbCBhZGRy ZXNzZXMgYXJlIGFjY2VwdGVkLCB0aGVuIHRoZSBtZXRob2QNCiAgICAgICAg IHdpbGwgcmV0dXJuIGFuIGVtcHR5IGRpY3Rpb25hcnkuICANCiAgICAgICAg ICIiIg0KICAgICAgICBpZiBub3Qgc2VsZi5oZWxvX3Jlc3AgYW5kIG5vdCBz ZWxmLmVobG9fcmVzcDoNCiAgICAgICAgICAgIGlmIHNlbGYuZWhsbygpID49 IDQwMDoNCiAgICAgICAgICAgICAgICBzZWxmLmhlbG8oKQ0KICAgICAgICBl c210cF9vcHRzID0gW10NCiAgICAgICAgaWYgc2VsZi5kb2VzX2VzbXRwOg0K ICAgICAgICAgICAgIyBIbW1tPyB3aGF0J3MgdGhpcz8gLWRkbQ0KICAgICAg ICAgICAgIyBzZWxmLmVzbXRwX2ZlYXR1cmVzWyc3Yml0J109IiINCiAgICAg ICAgICAgIGlmIHNlbGYuaGFzX2V4dG4oJ3NpemUnKToNCiAgICAgICAgICAg ICAgICBlc210cF9vcHRzLmFwcGVuZCgic2l6ZT0iICsgYGxlbihtc2cpYCkN CiAgICAgICAgICAgIGZvciBvcHRpb24gaW4gbWFpbF9vcHRpb25zOg0KICAg ICAgICAgICAgICAgIGVzbXRwX29wdHMuYXBwZW5kKG9wdGlvbikNCg0KICAg ICAgICAoY29kZSxyZXNwKSA9IHNlbGYubWFpbChmcm9tX2FkZHIsIGVzbXRw X29wdHMpDQogICAgICAgIGlmIGNvZGUgPD4gMjUwOg0KICAgICAgICAgICAg c2VsZi5yc2V0KCkNCiAgICAgICAgICAgIHJhaXNlIFNNVFBTZW5kZXJSZWZ1 c2VkDQogICAgICAgIHNlbmRlcnJzPXt9DQogICAgICAgIGZvciBlYWNoIGlu IHRvX2FkZHJzOg0KICAgICAgICAgICAgKGNvZGUscmVzcCk9c2VsZi5yY3B0 KGVhY2gsIHJjcHRfb3B0aW9ucykNCiAgICAgICAgICAgIGlmIChjb2RlIDw+ IDI1MCkgYW5kIChjb2RlIDw+IDI1MSk6DQogICAgICAgICAgICAgICAgc2Vu ZGVycnNbZWFjaF09KGNvZGUscmVzcCkNCiAgICAgICAgaWYgbGVuKHNlbmRl cnJzKT09bGVuKHRvX2FkZHJzKToNCiAgICAgICAgICAgICMgdGhlIHNlcnZl ciByZWZ1c2VkIGFsbCBvdXIgcmVjaXBpZW50cw0KICAgICAgICAgICAgc2Vs Zi5yc2V0KCkNCiAgICAgICAgICAgIHJhaXNlIFNNVFBSZWNpcGllbnRzUmVm dXNlZA0KICAgICAgICBjb2RlPXNlbGYuZGF0YShtc2cpDQogICAgICAgIGlm IGNvZGUgPD4yNTAgOg0KICAgICAgICAgICAgc2VsZi5yc2V0KCkNCiAgICAg ICAgICAgIHJhaXNlIFNNVFBEYXRhRXJyb3INCiAgICAgICAgI2lmIHdlIGdv dCBoZXJlIHRoZW4gc29tZWJvZHkgZ290IG91ciBtYWlsDQogICAgICAgIHJl dHVybiBzZW5kZXJycyAgICAgICAgIA0KDQoNCiAgICBkZWYgY2xvc2Uoc2Vs Zik6DQogICAgICAgICIiIkNsb3NlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBT TVRQIHNlcnZlci4iIiINCiAgICAgICAgaWYgc2VsZi5maWxlOg0KICAgICAg ICAgICAgc2VsZi5maWxlLmNsb3NlKCkNCiAgICAgICAgc2VsZi5maWxlID0g Tm9uZQ0KICAgICAgICBpZiBzZWxmLnNvY2s6DQogICAgICAgICAgICBzZWxm LnNvY2suY2xvc2UoKQ0KICAgICAgICBzZWxmLnNvY2sgPSBOb25lDQoNCg0K ICAgIGRlZiBxdWl0KHNlbGYpOg0KICAgICAgICAiIiJUZXJtaW5hdGUgdGhl IFNNVFAgc2Vzc2lvbi4iIiINCiAgICAgICAgc2VsZi5kb2NtZCgicXVpdCIp DQogICAgICAgIHNlbGYuY2xvc2UoKQ0KDQojIFRlc3QgdGhlIHNlbmRtYWls IG1ldGhvZCwgd2hpY2ggdGVzdHMgbW9zdCBvZiB0aGUgb3RoZXJzLg0KIyBO b3RlOiBUaGlzIGFsd2F5cyBzZW5kcyB0byBsb2NhbGhvc3QuDQppZiBfX25h bWVfXyA9PSAnX19tYWluX18nOg0KICAgIGltcG9ydCBzeXMsIHJmYzgyMg0K DQogICAgZGVmIHByb21wdChwcm9tcHQpOg0KICAgICAgICBzeXMuc3Rkb3V0 LndyaXRlKHByb21wdCArICI6ICIpDQogICAgICAgIHJldHVybiBzdHJpbmcu c3RyaXAoc3lzLnN0ZGluLnJlYWRsaW5lKCkpDQoNCiAgICBmcm9tYWRkciA9 IHByb21wdCgiRnJvbSIpDQogICAgdG9hZGRycyAgPSBzdHJpbmcuc3BsaXRm aWVsZHMocHJvbXB0KCJUbyIpLCAnLCcpDQogICAgcHJpbnQgIkVudGVyIG1l c3NhZ2UsIGVuZCB3aXRoIF5EOiINCiAgICBtc2cgPSAnJw0KICAgIHdoaWxl IDE6DQogICAgICAgIGxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKQ0KICAg ICAgICBpZiBub3QgbGluZToNCiAgICAgICAgICAgIGJyZWFrDQogICAgICAg IG1zZyA9IG1zZyArIGxpbmUNCiAgICBwcmludCAiTWVzc2FnZSBsZW5ndGgg aXMgIiArIGBsZW4obXNnKWANCg0KICAgIHNlcnZlciA9IFNNVFAoJ2xvY2Fs aG9zdCcpDQogICAgc2VydmVyLnNldF9kZWJ1Z2xldmVsKDEpDQogICAgc2Vy dmVyLnNlbmRtYWlsKGZyb21hZGRyLCB0b2FkZHJzLCBtc2cpDQogICAgc2Vy dmVyLnF1aXQoKQ0KDQoNCg0K ---1395546950-1591827097-904375847=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="patch.smtplib" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Mailman patch ZGlmZiAtYyAvdXNyL3NyYy9tYWlsbWFuLTEuMGI1L01haWxtYW4vQm91bmNl ci5weSBNYWlsbWFuL0JvdW5jZXIucHkNCioqKiAvdXNyL3NyYy9tYWlsbWFu LTEuMGI1L01haWxtYW4vQm91bmNlci5weQlNb24gSnVsIDI3IDE3OjQ4OjMx IDE5OTgNCi0tLSBNYWlsbWFuL0JvdW5jZXIucHkJU2F0IEF1ZyAyOSAwMDox MToxMCAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAyMDIsMjA4ICoqKioN CiAgICAgICAgICAgICAgIyAnYm91bmNlLnR4dCcgaGFzIGEgdHJhaWxpbmcg bmV3bGluZQ0KICAgICAgICAgICAgICB0ZXh0ID0gdGV4dCArIFwNCiAgICAg ICAgICAgICAgICAgICAgIHN0cmluZy5qb2luKG1zZy5oZWFkZXJzLCAnJykg KyAnXG4nICsgXA0KISAgICAgICAgICAgICAgICAgICAgVXRpbHMuUXVvdGVQ ZXJpb2RzKG1zZy5ib2R5KSArICdcbicgKyBcDQogICAgICAgICAgICAgICAg ICAgICAnLS0nICsgYm91bmRhcnkgKyAnLS0nDQogIA0KICAgICAgICAgICAg ICBpZiBuZWdhdGl2ZToNCi0tLSAyMDIsMjA4IC0tLS0NCiAgICAgICAgICAg ICAgIyAnYm91bmNlLnR4dCcgaGFzIGEgdHJhaWxpbmcgbmV3bGluZQ0KICAg ICAgICAgICAgICB0ZXh0ID0gdGV4dCArIFwNCiAgICAgICAgICAgICAgICAg ICAgIHN0cmluZy5qb2luKG1zZy5oZWFkZXJzLCAnJykgKyAnXG4nICsgXA0K ISAgICAgICAgICAgICAgICAgICAgbXNnLmJvZHkgKyAnXG4nICsgXA0KICAg ICAgICAgICAgICAgICAgICAgJy0tJyArIGJvdW5kYXJ5ICsgJy0tJw0KICAN CiAgICAgICAgICAgICAgaWYgbmVnYXRpdmU6DQpkaWZmIC1jIC91c3Ivc3Jj L21haWxtYW4tMS4wYjUvTWFpbG1hbi9EZWxpdmVyZXIucHkgTWFpbG1hbi9E ZWxpdmVyZXIucHkNCioqKiAvdXNyL3NyYy9tYWlsbWFuLTEuMGI1L01haWxt YW4vRGVsaXZlcmVyLnB5CU1vbiBKdWwgMjcgMTc6NDg6MzEgMTk5OA0KLS0t IE1haWxtYW4vRGVsaXZlcmVyLnB5CVNhdCBBdWcgMjkgMDA6MTI6MDkgMTk5 OA0KKioqKioqKioqKioqKioqDQoqKiogNDMsNTAgKioqKg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2hlYWRlcnM9WydFcnJvcnMt VG86ICVzXG4nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJSBTZWxmLkdldEFkbWluRW1haWwoKV0pDQogIA0KISAg ICAgZGVmIFF1b3RlUGVyaW9kcyhzZWxmLCB0ZXh0KToNCiEgCXJldHVybiBz dHJpbmcuam9pbihzdHJpbmcuc3BsaXQodGV4dCwgJ1xuLlxuJyksICdcbiAu XG4nKQ0KICAgICAgZGVmIERlbGl2ZXJUb0xpc3Qoc2VsZiwgbXNnLCByZWNp cGllbnRzLCANCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcj0iIiwg Zm9vdGVyPSIiLCByZW1vdmVfdG89MCwgdG1wZmlsZV9wcmVmaXggPSAiIik6 DQogIAlpZiBub3QobGVuKHJlY2lwaWVudHMpKToNCi0tLSA0Myw1MCAtLS0t DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfaGVhZGVy cz1bJ0Vycm9ycy1UbzogJXNcbicNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAlIFNlbGYuR2V0QWRtaW5FbWFpbCgp XSkNCiAgDQohICMgICAgZGVmIFF1b3RlUGVyaW9kcyhzZWxmLCB0ZXh0KToN CiEgIwlyZXR1cm4gc3RyaW5nLmpvaW4oc3RyaW5nLnNwbGl0KHRleHQsICdc bi5cbicpLCAnXG4gLlxuJykNCiAgICAgIGRlZiBEZWxpdmVyVG9MaXN0KHNl bGYsIG1zZywgcmVjaXBpZW50cywgDQogICAgICAgICAgICAgICAgICAgICAg ICBoZWFkZXI9IiIsIGZvb3Rlcj0iIiwgcmVtb3ZlX3RvPTAsIHRtcGZpbGVf cHJlZml4ID0gIiIpOg0KICAJaWYgbm90KGxlbihyZWNpcGllbnRzKSk6DQoq KioqKioqKioqKioqKioNCioqKiA3NSw4MSAqKioqDQogICAgICAgICAgY21k cHJvYy53cml0ZShzdHJpbmcuam9pbihtc2cuaGVhZGVycywgJycpICsgIlxu IikNCiAgCWlmIGhlYWRlcjogICAgICAgICAgICAgICAgICAgICAgIyBUaGUg KmJvZHkqIGhlYWRlcjoNCiAgCSAgICBjbWRwcm9jLndyaXRlKGhlYWRlciAr ICJcbiIpDQohIAljbWRwcm9jLndyaXRlKHNlbGYuUXVvdGVQZXJpb2RzKG1z Zy5ib2R5KSkNCiAgCWlmIGZvb3RlcjoNCiAgCSAgICBjbWRwcm9jLndyaXRl KGZvb3RlcikNCiAgDQotLS0gNzUsODEgLS0tLQ0KICAgICAgICAgIGNtZHBy b2Mud3JpdGUoc3RyaW5nLmpvaW4obXNnLmhlYWRlcnMsICcnKSArICJcbiIp DQogIAlpZiBoZWFkZXI6ICAgICAgICAgICAgICAgICAgICAgICMgVGhlICpi b2R5KiBoZWFkZXI6DQogIAkgICAgY21kcHJvYy53cml0ZShoZWFkZXIgKyAi XG4iKQ0KISAJY21kcHJvYy53cml0ZShtc2cuYm9keSkNCiAgCWlmIGZvb3Rl cjoNCiAgCSAgICBjbWRwcm9jLndyaXRlKGZvb3RlcikNCiAgDQpkaWZmIC1j IC91c3Ivc3JjL21haWxtYW4tMS4wYjUvTWFpbG1hbi9PdXRnb2luZ1F1ZXVl LnB5IE1haWxtYW4vT3V0Z29pbmdRdWV1ZS5weQ0KKioqIC91c3Ivc3JjL21h aWxtYW4tMS4wYjUvTWFpbG1hbi9PdXRnb2luZ1F1ZXVlLnB5CU1vbiBKdWwg MjcgMTc6NDg6MzEgMTk5OA0KLS0tIE1haWxtYW4vT3V0Z29pbmdRdWV1ZS5w eQlGcmkgQXVnIDI4IDIwOjUwOjUxIDE5OTgNCioqKioqKioqKioqKioqKg0K KioqIDI1LDMxICoqKioNCiAgICAgIG9zLnVubGluayhtc2cpDQogIA0KICBk ZWYgcHJvY2Vzc1F1ZXVlKCk6DQohICAgICBpbXBvcnQgb3MsIHNtdHBsaWIN CiAgICAgIGZpbGVzID0gb3MubGlzdGRpcihtbV9jZmcuREFUQV9ESVIpDQog ICAgICBmb3IgZmlsZSBpbiBmaWxlczoNCiAgICAgICAgICBpZiBURU1QTEFU RSA8PiBmaWxlWzpsZW4oVEVNUExBVEUpXToNCi0tLSAyNSwzMSAtLS0tDQog ICAgICBvcy51bmxpbmsobXNnKQ0KICANCiAgZGVmIHByb2Nlc3NRdWV1ZSgp Og0KISAgICAgaW1wb3J0IG9zDQogICAgICBmaWxlcyA9IG9zLmxpc3RkaXIo bW1fY2ZnLkRBVEFfRElSKQ0KICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6DQog ICAgICAgICAgaWYgVEVNUExBVEUgPD4gZmlsZVs6bGVuKFRFTVBMQVRFKV06 DQpkaWZmIC1jIC91c3Ivc3JjL21haWxtYW4tMS4wYjUvTWFpbG1hbi9VdGls cy5weSBNYWlsbWFuL1V0aWxzLnB5DQoqKiogL3Vzci9zcmMvbWFpbG1hbi0x LjBiNS9NYWlsbWFuL1V0aWxzLnB5CU1vbiBKdWwgMjcgMTc6NDg6MzEgMTk5 OA0KLS0tIE1haWxtYW4vVXRpbHMucHkJU2F0IEF1ZyAyOSAwMDoyNDo1NiAx OTk4DQoqKioqKioqKioqKioqKioNCioqKiAxNTQsMTYwICoqKioNCiAgICAg IG1zZyA9IE1lc3NhZ2UuT3V0Z29pbmdNZXNzYWdlKCkNCiAgICAgIG1zZy5T ZXRTZW5kZXIoc2VuZGVyKQ0KICAgICAgbXNnLlNldEhlYWRlcignU3ViamVj dCcsIHN1YmplY3QsIDEpDQohICAgICBtc2cuU2V0Qm9keShRdW90ZVBlcmlv ZHModGV4dCkpDQogICAgICBEZWxpdmVyVG9Vc2VyKG1zZywgcmVjaXBpZW50 LCBhZGRfaGVhZGVycz1hZGRfaGVhZGVycykNCiAgDQogIGRlZiBEZWxpdmVy VG9Vc2VyKG1zZywgcmVjaXBpZW50LCBhZGRfaGVhZGVycz1bXSk6DQotLS0g MTU0LDE2MCAtLS0tDQogICAgICBtc2cgPSBNZXNzYWdlLk91dGdvaW5nTWVz c2FnZSgpDQogICAgICBtc2cuU2V0U2VuZGVyKHNlbmRlcikNCiAgICAgIG1z Zy5TZXRIZWFkZXIoJ1N1YmplY3QnLCBzdWJqZWN0LCAxKQ0KISAgICAgbXNn LlNldEJvZHkodGV4dCkNCiAgICAgIERlbGl2ZXJUb1VzZXIobXNnLCByZWNp cGllbnQsIGFkZF9oZWFkZXJzPWFkZF9oZWFkZXJzKQ0KICANCiAgZGVmIERl bGl2ZXJUb1VzZXIobXNnLCByZWNpcGllbnQsIGFkZF9oZWFkZXJzPVtdKToN CioqKioqKioqKioqKioqKg0KKioqIDE4NCwyMTIgKioqKg0KICAgICAgICAg ICAgICAgIGkgPSBpICsgJ1xuJw0KICAgICAgICAgICAgICBtc2cuaGVhZGVy cy5hcHBlbmQoaSkNCiAgDQohICAgICAgICAgdGV4dCA9IHN0cmluZy5qb2lu KG1zZy5oZWFkZXJzLCAnJykrICdcbicrIFF1b3RlUGVyaW9kcyhtc2cuYm9k eSkNCiAgICAgICAgICBpbXBvcnQgT3V0Z29pbmdRdWV1ZQ0KISAgICAgICAg IHF1ZXVlX2lkID0gT3V0Z29pbmdRdWV1ZS5lbnF1ZXVlTWVzc2FnZShzZW5k ZXIsIHJlY2lwaWVudCwgdGV4dCkNCiEgICAgICAgICBUcnlTTVRQRGVsaXZl cnkocmVjaXBpZW50LHNlbmRlcix0ZXh0LHF1ZXVlX2lkKQ0KICAgICAgICAg ICMgSnVzdCBpbiBjYXNlIHRoZXJlJ3Mgc3RpbGwgc29tZXRoaW5nIHdhaXRp bmcgdG8gYmUgc2VudC4uLg0KICAgICAgICAgIE91dGdvaW5nUXVldWUucHJv Y2Vzc1F1ZXVlKCkNCiAgICAgIGZpbmFsbHk6DQogICAgICAgICAgb3MuX2V4 aXQoMCkNCiAgDQogIGRlZiBUcnlTTVRQRGVsaXZlcnkocmVjaXBpZW50LCBz ZW5kZXIsIHRleHQsIHF1ZXVlX2VudHJ5KToNCiEgICAgIGltcG9ydCBzbXRw bGliDQogICAgICB0cnk6DQohICAgICAgICAgY29uID0gc210cGxpYi5TbXRw Q29ubmVjdGlvbihtbV9jZmcuU01UUEhPU1QpDQohICAgICAgICAgY29uLmhl bG8obW1fY2ZnLkRFRkFVTFRfSE9TVF9OQU1FKQ0KISAgICAgICAgIGNvbi5z ZW5kKHRvPXJlY2lwaWVudCxmcm09c2VuZGVyLHRleHQ9dGV4dCkNCiAgICAg ICAgICBjb24ucXVpdCgpDQogICAgICAgICAgaW1wb3J0IE91dGdvaW5nUXVl dWUNCiAgICAgICAgICBPdXRnb2luZ1F1ZXVlLmRlcXVldWVNZXNzYWdlKHF1 ZXVlX2VudHJ5KQ0KICAgICAgZmluYWxseToNCiAgIyAgICBleGNlcHQ6ICMg VG9kbzogVGhpcyBtaWdodCB3YW50IHRvIGhhbmRsZSBzcGVjaWFsIGNhc2Vz LiAgICANCiAgICAgICAgICBwYXNzICMgSnVzdCB0cnkgYWdhaW4gbGF0ZXIu DQohIGRlZiBRdW90ZVBlcmlvZHModGV4dCk6DQohICAgICByZXR1cm4gc3Ry aW5nLmpvaW4oc3RyaW5nLnNwbGl0KHRleHQsICdcbi5cbicpLCAnXG4gLlxu JykNCiAgDQogIGRlZiBWYWxpZEVtYWlsKHN0cik6DQogICAgICAiIiJWZXJp ZnkgdGhhdCB0aGUgYW4gZW1haWwgYWRkcmVzcyBpc24ndCBncm9zc2x5IGlu dmFsaWQuIiIiDQotLS0gMTg0LDI0MCAtLS0tDQogICAgICAgICAgICAgICAg aSA9IGkgKyAnXG4nDQogICAgICAgICAgICAgIG1zZy5oZWFkZXJzLmFwcGVu ZChpKQ0KICANCiEgICAgICAgICB0ZXh0ID0gc3RyaW5nLmpvaW4obXNnLmhl YWRlcnMsICcnKSsgJ1xuJysgbXNnLmJvZHkNCiAgICAgICAgICBpbXBvcnQg T3V0Z29pbmdRdWV1ZQ0KISAgICAgICAgIHF1ZXVlX2lkID0gT3V0Z29pbmdR dWV1ZS5lbnF1ZXVlTWVzc2FnZShzZW5kZXIsIFtyZWNpcGllbnRdLCB0ZXh0 KQ0KISAgICAgICAgIFRyeVNNVFBEZWxpdmVyeShbcmVjaXBpZW50XSxzZW5k ZXIsdGV4dCxxdWV1ZV9pZCkNCiAgICAgICAgICAjIEp1c3QgaW4gY2FzZSB0 aGVyZSdzIHN0aWxsIHNvbWV0aGluZyB3YWl0aW5nIHRvIGJlIHNlbnQuLi4N CiAgICAgICAgICBPdXRnb2luZ1F1ZXVlLnByb2Nlc3NRdWV1ZSgpDQogICAg ICBmaW5hbGx5Og0KICAgICAgICAgIG9zLl9leGl0KDApDQogIA0KKyAjIERP IG1ha2Ugc3VyZSByZWNpcGllbnQgaXMgYSBsaXN0ISAtZGRtDQogIGRlZiBU cnlTTVRQRGVsaXZlcnkocmVjaXBpZW50LCBzZW5kZXIsIHRleHQsIHF1ZXVl X2VudHJ5KToNCiEgICAgIGltcG9ydCBzbXRwbGliLHN5cw0KISAgICAgI2Zy b20gTWFpbG1hbi5Mb2dnaW5nLlN0YW1wZWRMb2dnZXIgaW1wb3J0IFN0YW1w ZWRMb2dnZXINCiEgICAgICNzdGRvdXRfbG9jYWw9c3lzLnN0ZG91dA0KISAg ICAgYmFkX2FkZHJzPXt9IA0KISAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj I1JlbW92ZSB0aGlzISEgIyMjIyMjIyMjIyMjIyMjIw0KISAgICAgIyBUaGlz IGlzIGEgdGVtcG9yYXJ5IGhhY2ssIHRvIG1ha2Ugb2xkIHEnZCBtZXNzYWdl cyB3b3JrISEhISEhISEhIC1kZG0NCiEgICAgIGlmIHR5cGUocmVjaXBpZW50 KSA9PSB0eXBlKCJzdHJpbmciKToNCiEgICAgICAgICByZWNpcGllbnQgPSBb cmVjaXBpZW50XQ0KISAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgdHJ5Og0KISAjICAg ICAgICBjb24gPSBzbXRwbGliLlNtdHBDb25uZWN0aW9uKG1tX2NmZy5TTVRQ SE9TVCkNCiEgIyAgICAgICAgY29uLmhlbG8obW1fY2ZnLkRFRkFVTFRfSE9T VF9OQU1FKQ0KISAjICAgICAgICBjb24uc2VuZCh0bz1yZWNpcGllbnQsZnJt PXNlbmRlcix0ZXh0PXRleHQpDQohICMgICAgICAgIGNvbi5xdWl0KCkNCiEg ICAgICAgICANCiEgIyAgICAgICAgc3lzLnN0ZG91dD1TdGFtcGVkTG9nZ2Vy KCdzbXRwbGliX2RlYnVnJywNCiEgIyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGFiZWw9c3lzLmFyZ3ZbMF0sDQohICMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbF9yZXByaW1lPTEsDQoh ICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZmFpbD0w KQ0KISANCiEgICAgICAgICBjb24gPSBzbXRwbGliLlNNVFAobW1fY2ZnLlNN VFBIT1NUKQ0KISAjICAgICAgICBjb24uc2V0X2RlYnVnbGV2ZWwoMSkNCiEg ICAgICAgICBpZiBjb24uZWhsbyhtbV9jZmcuREVGQVVMVF9IT1NUX05BTUUp ID49IDQwMDoNCiEgICAgICAgICAgICAgY29uLmhlbG8obW1fY2ZnLkRFRkFV TFRfSE9TVF9OQU1FKQ0KISAgICAgICAgIHRyeToNCiEgICAgICAgICAgICAg YmFkX2FkZHJzPWNvbi5zZW5kbWFpbCh0b19hZGRycyA9IHJlY2lwaWVudCwg ZnJvbV9hZGRyID0gc2VuZGVyLCBtc2cgPSB0ZXh0KQ0KISAgICAgICAgIGV4 Y2VwdCBzbXRwbGliLlNNVFBSZWNpcGllbnRzUmVmdXNlZDoNCiEgICAgICAg ICAgICAgZm9yIGVhY2ggaW4gcmVjaXBpZW50Og0KISAgICAgICAgICAgICAg ICAgYmFkX2FkZHJzW2VhY2hdPSg1MDAsIlJlZnVzZWQgW3NtdHBsaWJdIikN CiAgICAgICAgICBjb24ucXVpdCgpDQorIA0KICAgICAgICAgIGltcG9ydCBP dXRnb2luZ1F1ZXVlDQogICAgICAgICAgT3V0Z29pbmdRdWV1ZS5kZXF1ZXVl TWVzc2FnZShxdWV1ZV9lbnRyeSkNCiAgICAgIGZpbmFsbHk6DQorICMgICAg ICAgIHN5cy5zdGRvdXQ9c3Rkb3V0X2xvY2FsDQogICMgICAgZXhjZXB0OiAj IFRvZG86IFRoaXMgbWlnaHQgd2FudCB0byBoYW5kbGUgc3BlY2lhbCBjYXNl cy4gICAgDQogICAgICAgICAgcGFzcyAjIEp1c3QgdHJ5IGFnYWluIGxhdGVy Lg0KISANCiEgI2RlZiBRdW90ZVBlcmlvZHModGV4dCk6DQohICMgICAgcmV0 dXJuIHN0cmluZy5qb2luKHN0cmluZy5zcGxpdCh0ZXh0LCAnXG4uXG4nKSwg J1xuIC5cbicpDQogIA0KICBkZWYgVmFsaWRFbWFpbChzdHIpOg0KICAgICAg IiIiVmVyaWZ5IHRoYXQgdGhlIGFuIGVtYWlsIGFkZHJlc3MgaXNuJ3QgZ3Jv c3NseSBpbnZhbGlkLiIiIg0K ---1395546950-1591827097-904375847=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="contact_transport.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: contact_transportpatch KioqIC91c3Ivc3JjL21haWxtYW4tMS4wYjUvbWFpbC9jb250YWN0X3RyYW5z cG9ydAlNb24gSnVsIDI3IDE3OjQ4OjMzIDE5OTgNCi0tLSBjb250YWN0X3Ry YW5zcG9ydAlGcmkgQXVnIDI4IDIwOjM3OjA3IDE5OTgNCioqKioqKioqKioq KioqKg0KKioqIDMxLDM3ICoqKioNCiAgDQogICMgWFhYOiB0aGlzIHJlYWxs eSBzaG91bGQgYmUgbWVyZ2VkIHdpdGggUHl0aG9uJ3Mgc3RhbmRhcmQgc210 cGxpYiBsaWJyYXJ5DQogIGZyb20gTWFpbG1hbiBpbXBvcnQgbW1fY2ZnDQoh IGZyb20gTWFpbG1hbiBpbXBvcnQgc210cGxpYg0KICBmcm9tIE1haWxtYW4g aW1wb3J0IFV0aWxzDQogIGZyb20gTWFpbG1hbiBpbXBvcnQgT3V0Z29pbmdR dWV1ZQ0KICANCi0tLSAzMSwzNyAtLS0tDQogIA0KICAjIFhYWDogdGhpcyBy ZWFsbHkgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIFB5dGhvbidzIHN0YW5kYXJk IHNtdHBsaWIgbGlicmFyeQ0KICBmcm9tIE1haWxtYW4gaW1wb3J0IG1tX2Nm Zw0KISAjZnJvbSBNYWlsbWFuIGltcG9ydCBzbXRwbGliDQogIGZyb20gTWFp bG1hbiBpbXBvcnQgVXRpbHMNCiAgZnJvbSBNYWlsbWFuIGltcG9ydCBPdXRn b2luZ1F1ZXVlDQogIA0K ---1395546950-1591827097-904375847=:10023-- From dragondm@delta.integral.org Sat Aug 29 09:39:12 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sat, 29 Aug 1998 03:39:12 -0500 (CDT) Subject: [Mailman-Developers] Listinfo bug. Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-1388521529-904379952=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII Patch patch patch patch patch.... :> This fixes a nasty (mis)feature of listinfo that if the hostname you use for your lists' email addresses != the hostname for your base mailman url, the list won't show up on the listinfo page , even if advertized. :P (for example, all of my lists have host_name= 'lists.integral.org' and web_page_url = 'www.integral.org', so I got nothing on my listinfo page :/ ) -The Dragon De Monsyne ---1395546950-1388521529-904379952=:10023 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="listinfo.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: listinfo patch KioqIC91c3Ivc3JjL21haWxtYW4tMS4wYjUvTWFpbG1hbi9DZ2kvbGlzdGlu Zm8ucHkJTW9uIEp1bCAyNyAxNzo0ODozMSAxOTk4DQotLS0gbGlzdGluZm8u cHkJU2F0IEF1ZyAyOSAwMzoyNTo0OCAxOTk4DQoqKioqKioqKioqKioqKioN CioqKiA1Nyw2MiAqKioqDQotLS0gNTcsNjMgLS0tLQ0KICAMDQogIGRlZiBG b3JtYXRMaXN0aW5mb092ZXJ2aWV3KGVycm9yPU5vbmUpOg0KICAgICAgIlBy ZXNlbnQgYSBnZW5lcmFsIHdlbGNvbWUgYW5kIGl0ZW1pemUgdGhlIChwdWJs aWMpIGxpc3RzIGZvciB0aGlzIGhvc3QuIg0KKyAgICAgaW1wb3J0IHVybHBh cnNlDQogICAgICBkb2MgPSBEb2N1bWVudCgpDQogICAgICBsZWdlbmQgPSAi JXMgbWFpbGluZyBsaXN0cyIgJSBtbV9jZmcuREVGQVVMVF9IT1NUX05BTUUN CiAgICAgIGRvYy5TZXRUaXRsZShsZWdlbmQpDQoqKioqKioqKioqKioqKioN CioqKiA3NCw4OCAqKioqDQogICAgICAjICAgICB2aXNpdGVkISAgQW4gYWJz b2x1dGUgVVJMIHdvdWxkIGRvLi4uDQogICAgICBpZiBvcy5lbnZpcm9uLmhh c19rZXkoJ0hUVFBfSE9TVCcpOg0KICAJaHR0cF9ob3N0ID0gb3MuZW52aXJv blsnSFRUUF9IT1NUJ10NCiAgICAgIGVsc2U6DQohIAlodHRwX2hvc3QgPSBO b25lDQohIA0KICAgICAgZm9yIG4gaW4gbmFtZXM6DQogIAlsID0gTWFpbExp c3QuTWFpbExpc3QobiwgbG9jayA9IDApDQogIAlpZiBsLmFkdmVydGlzZWQ6 DQogIAkgICAgaWYgKGh0dHBfaG9zdA0KISAJCWFuZCAoc3RyaW5nLmZpbmQo aHR0cF9ob3N0LCBsLmhvc3RfbmFtZSkgPT0gLTENCiEgCQkgICAgIGFuZCBz dHJpbmcuZmluZChsLmhvc3RfbmFtZSwgaHR0cF9ob3N0KSA9PSAtMSkpOg0K ICAJCSMgTGlzdCBpcyBmb3IgZGlmZmVyZW50IGlkZW50aXR5IGZvciB0aGlz IGhvc3QgLSBza2lwIGl0Lg0KICAJCWNvbnRpbnVlDQogIAkgICAgZWxzZToN Ci0tLSA3NSw5MyAtLS0tDQogICAgICAjICAgICB2aXNpdGVkISAgQW4gYWJz b2x1dGUgVVJMIHdvdWxkIGRvLi4uDQogICAgICBpZiBvcy5lbnZpcm9uLmhh c19rZXkoJ0hUVFBfSE9TVCcpOg0KICAJaHR0cF9ob3N0ID0gb3MuZW52aXJv blsnSFRUUF9IT1NUJ10NCisgICAgICAgICBodHRwX2hvc3QgPSBzdHJpbmcu c3BsaXQoc3RyaW5nLmxvd2VyKGh0dHBfaG9zdCksJzonKVswXQ0KICAgICAg ZWxzZToNCiEgICAgICAgICBodHRwX2hvc3QgPSBOb25lDQogICAgICBmb3Ig biBpbiBuYW1lczoNCiAgCWwgPSBNYWlsTGlzdC5NYWlsTGlzdChuLCBsb2Nr ID0gMCkNCiAgCWlmIGwuYWR2ZXJ0aXNlZDoNCisgICAgICAgICAgICAgaWYg aHR0cF9ob3N0Og0KKyAgICAgICAgICAgICAgICAgbGlzdF9ob3N0ID0gc3Ry aW5nLnNwbGl0KHN0cmluZy5sb3dlcih1cmxwYXJzZS51cmxwYXJzZSgNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bC53ZWJfcGFnZV91cmwpWzFdKSwnOicpWzBdDQorIA0KICAJICAgIGlmICho dHRwX2hvc3QNCiEgCQlhbmQgKHN0cmluZy5maW5kKGh0dHBfaG9zdCwgbGlz dF9ob3N0KSA9PSAtMQ0KISAJCSAgICAgYW5kIHN0cmluZy5maW5kKGxpc3Rf aG9zdCxodHRwX2hvc3QpID09IC0xKSk6DQogIAkJIyBMaXN0IGlzIGZvciBk aWZmZXJlbnQgaWRlbnRpdHkgZm9yIHRoaXMgaG9zdCAtIHNraXAgaXQuDQog IAkJY29udGludWUNCiAgCSAgICBlbHNlOg0K ---1395546950-1388521529-904379952=:10023-- From dragondm@delta.integral.org Sat Aug 29 12:49:50 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sat, 29 Aug 1998 06:49:50 -0500 (CDT) Subject: [Mailman-Developers] Queue questions & thoughts... Message-ID: I just have a question.... Peering through the queueing system, I note that there does not seem to be any locking of the queuefiles... Correct? The way it appears to me that mailman is working is thus: every outgoing message is queued, then an attempt to feed it to the MTA is made. After that it tries to run the queue to catch anything waiting there. What keeps another process running the queue from grabbing & delivering the queued message whilst the first proccess is trying to send the same message to the MTA? Especially whence you have several proccesses rapidly forked all doing delivery at once? Here's the situation I'm worried about: Proccess 1 queues the message, and attempts to feed it to the MTA Proccess 2 running queue reads the queued message, and also attempts to deliver it to the MTA. Proccess 1 succeeds in in delivering the message and deletes it from the queue. Proccess 2 ALSO succeeds in delivering the message, creating a duplicate. Proccess 2 tries to delete the message from the queue, and can't since proccess 1 already deleted it, generating this traceback, which I _have_ seen in my error log: Aug 29 04:10:59 1998 contact_transport: Traceback (innermost last): contact_transport: File "/usr/services/mailman/scripts/contact_transport", line 52, in ? contact_transport: OutgoingQueue.processQueue() contact_transport: File "/usr/services/mailman/Mailman/OutgoingQueue.py", line 38, in processQueue contact_transport: Utils.TrySMTPDelivery(recip,sender,text,full_fname) contact_transport: File "/usr/services/mailman/Mailman/Utils.py", line 230, in TrySMTPDelivery contact_transport: OutgoingQueue.dequeueMessage(queue_entry) contact_transport: File "/usr/services/mailman/Mailman/OutgoingQueue.py", line 25, in dequeueMessage contact_transport: os.unlink(msg) contact_transport: os . error : (2, 'No such file or directory') Having pointed out a possible problem, perhaps I can suggest a possible solution? Howabout this: Whenever Mailman goes to deliver mail, it dosen't actually deliver it. Rather, it just queues the message. Instead, there is a single, separate proccess that is kept running, and all it does is dequeue messsages. It would keep a PID file and touch it periodically, so you could run a cron job to make sure it is still running. Since it would hold no locks on any lists, it wouldn't have to worry about forking to avoid deadlocks, and since it would be run under the mailman uid it wouldn't be affected by any possible setgid weirdness (i.e. w/ linux)). If anyone is interested in this, let me know, & I'll put something together. It should be really quick. -The Dragon De Monsyne From klm@python.org Sun Aug 30 02:44:06 1998 From: klm@python.org (Ken Manheimer) Date: Sat, 29 Aug 1998 21:44:06 -0400 (EDT) Subject: [Mailman-Developers] Listinfo bug. In-Reply-To: Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-1388521529-904379952=:10023 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: In Sat, 29 Aug 1998, The Dragon De Monsyne wrote: > Patch patch patch patch patch.... :> > > This fixes a nasty (mis)feature of listinfo that if the hostname > you use for your lists' email addresses != the hostname for your base > mailman url, the list won't show up on the listinfo page , even if > advertized. :P > > (for example, all of my lists have host_name= 'lists.integral.org' and > web_page_url = 'www.integral.org', so I got nothing on my listinfo page > :/ ) This actually is a deliberate feature, for what i consider a good reason - though perhaps the behavior ought to be selectable. Imagine you're an ISP who sells "virtual domains", each of which your customers situate their own sets of mailing lists. So each virtual domain has its own (virtual) set of lists. This scenario is by no means far fetched. In fact, here at CNRI we have one machine hosting the lists for a variety of projects, each with their own virtual domain. The people in the projects specifically wanted this partitioning of the lists - as far as their subscribers know, the lists in different virtual domains are in entirely different organizations, on entirely different hosts! I would imagine it'd be even more crucial in the ISP virtual domain scenario. I suppose it may make sense to offer a site setting by which the site administrator can select whether or not the different domains hosted by a machine are compartmented this way, but i would think the compartmenting mode would be the default one. (By the way, thanks for your efforts! Among other things, i'm particularly happy to see the standard sendmail.py integration. It'll be nice to not have to maintain our own version!) ken manheimer klm@python.org ---1395546950-1388521529-904379952=:10023-- From klm@python.org Sun Aug 30 02:56:27 1998 From: klm@python.org (Ken Manheimer) Date: Sat, 29 Aug 1998 21:56:27 -0400 (EDT) Subject: [Mailman-Developers] Queue questions & thoughts... In-Reply-To: Message-ID: On Sat, 29 Aug 1998, The Dragon De Monsyne wrote: > I just have a question.... Peering through the queueing system, I > note that there does not seem to be any locking of the queuefiles... > Correct? The way it appears to me that mailman is working is thus: > every outgoing message is queued, then an attempt to feed it to > the MTA is made. After that it tries to run the queue to catch anything > waiting there. > What keeps another process running the queue from grabbing & > delivering the queued message whilst the first proccess is trying to send > the same message to the MTA? Especially whence you have several proccesses > rapidly forked all doing delivery at once? John will have the authoritative answer on the queueing mechanism (though i've messed with, and contributed some refinements to it), but we have seen exactly the behavior you describe, where messages are delivered out from under a TrySMTPDelivery process. The solution you describe - a separate process, _plus_ a cron job to ensure it's always going - sounds a lot more cumbersome than simply using file locks, as you mention. (It occurred to me to wonder whether it's best to just have the absence of the queue file ignored, with the assumption that some other process did the delivery. But then i realized that this may in some cases mean duplicate deliveries, which again calls for file locking.) Note also that in the context of a persistent server, your idea of a process to handle the queue - probably a thread in the server - will make a lot of sense. But until that time, more processes hanging around strike me as undesirability administrative and conceptual complexity... ken manheimer klm@python.org From dragondm@delta.integral.org Sun Aug 30 03:08:28 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sat, 29 Aug 1998 21:08:28 -0500 (CDT) Subject: [Mailman-Developers] Listinfo bug. In-Reply-To: Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-1388521529-904379952=:10023 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: On Sat, 29 Aug 1998, Ken Manheimer wrote: > In Sat, 29 Aug 1998, The Dragon De Monsyne wrote: > > > Patch patch patch patch patch.... :> > > > > This fixes a nasty (mis)feature of listinfo that if the hostname > > you use for your lists' email addresses != the hostname for your base > > mailman url, the list won't show up on the listinfo page , even if > > advertized. :P > > > > (for example, all of my lists have host_name= 'lists.integral.org' and > > web_page_url = 'www.integral.org', so I got nothing on my listinfo page > > :/ ) > > This actually is a deliberate feature, for what i consider a good reason > - though perhaps the behavior ought to be selectable. > > Imagine you're an ISP who sells "virtual domains", each of which your > customers situate their own sets of mailing lists. So each virtual > domain has its own (virtual) set of lists. This scenario is by no means > far fetched. In fact, here at CNRI we have one machine hosting the > lists for a variety of projects, each with their own virtual domain. The > people in the projects specifically wanted this partitioning of the > lists - as far as their subscribers know, the lists in different virtual > domains are in entirely different organizations, on entirely different > hosts! I would imagine it'd be even more crucial in the ISP virtual > domain scenario. Oh, yes, I know that this is deleberate for virtual hosting. Virtual hosting will still work with this patch. The only thing this changes is _where_ mailman gets the name of the list's virtual hosname. Before it got it from the list's 'host_name' attribute, which is the hostname put on outgoing email. With this patch it gets the hostname fronm the hostname in the 'web_page_url'. This makes more sense, since it's web virtual hosts you are talking about here. -The Dragon De Monsyne ---1395546950-1388521529-904379952=:10023-- From dragondm@delta.integral.org Sun Aug 30 03:16:13 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Sat, 29 Aug 1998 21:16:13 -0500 (CDT) Subject: [Mailman-Developers] Queue questions & thoughts... In-Reply-To: Message-ID: On Sat, 29 Aug 1998, Ken Manheimer wrote: > On Sat, 29 Aug 1998, The Dragon De Monsyne wrote: > > > I just have a question.... Peering through the queueing system, I > > note that there does not seem to be any locking of the queuefiles... > > Correct? The way it appears to me that mailman is working is thus: > > every outgoing message is queued, then an attempt to feed it to > > the MTA is made. After that it tries to run the queue to catch anything > > waiting there. > > What keeps another process running the queue from grabbing & > > delivering the queued message whilst the first proccess is trying to send > > the same message to the MTA? Especially whence you have several proccesses > > rapidly forked all doing delivery at once? > > John will have the authoritative answer on the queueing mechanism > (though i've messed with, and contributed some refinements to it), but > we have seen exactly the behavior you describe, where messages are > delivered out from under a TrySMTPDelivery process. The solution you > describe - a separate process, _plus_ a cron job to ensure it's always > going - sounds a lot more cumbersome than simply using file locks, as > you mention. > I don't see why it would be cumbersome at all... All ye'd have would be 1 script you would run. It would check a pid file to make sure it's not already running, so you could run it from a cronjob to have it automatically restarted if need be. Sounds alot less cumbersome than all the elaborate queueing, forking, queue-running, and now file-locking mailman otherwise need to do. -The Dragon De Monsyne From klm@python.org Sun Aug 30 04:10:32 1998 From: klm@python.org (Ken Manheimer) Date: Sat, 29 Aug 1998 23:10:32 -0400 (EDT) Subject: [Mailman-Developers] Queue questions & thoughts... In-Reply-To: Message-ID: > I don't see why it would be cumbersome at all... All ye'd have > would be 1 script you would run. It would check a pid file to make sure > it's not already running, so you could run it from a cronjob to have it > automatically restarted if need be. Sounds alot less cumbersome than all > the elaborate queueing, forking, queue-running, and now file-locking > mailman otherwise need to do. Actually, i'm thinking about it from the administrators point of view. It's another, separate component to keep track of. If all the queuing, forking, queue-running, etc, are taken care of behind the scenes and in an airtight way, from the system manager's point of view it's simple as pie. A separate, independent component seems like a whole other matter. I suppose all the forking and queueing suggests having a clear division for a mail dispatching subsystem, i dunno. Lets see how others weigh in on the matter... ken manheimer klm@python.org From dragondm@delta.integral.org Mon Aug 31 13:27:04 1998 From: dragondm@delta.integral.org (The Dragon De Monsyne) Date: Mon, 31 Aug 1998 07:27:04 -0500 (CDT) Subject: [Mailman-Developers] Eeeeppp! Editing options via web dosen't work!! Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1395546950-2037328761-904566424=:21973 Content-Type: TEXT/PLAIN; charset=US-ASCII It seems that entering one's email address to edit subscription options dosent work (It was prolly broken by the cgi 'driver' setup) Here's a patch to subscribe.py that seems to fix it. -The Dragon De Monsyne ---1395546950-2037328761-904566424=:21973 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="subscribe.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: subscribe patch KioqIC91c3Ivc3JjL21haWxtYW4tMS4wYjUvTWFpbG1hbi9DZ2kvc3Vic2Ny aWJlLnB5CU1vbiBKdWwgMjcgMTc6NDg6MzEgMTk5OA0KLS0tIE1haWxtYW4v Q2dpL3N1YnNjcmliZS5weQlNb24gQXVnIDMxIDA3OjIyOjE3IDE5OTgNCioq KioqKioqKioqKioqKg0KKioqIDYxLDY5ICoqKioNCiAgICAgIGRlZiBjYWxs X3NjcmlwdCh3aGljaCwgcGF0aGluZm8pOg0KICAgICAgICAgICJBIGxpdHRs ZSBiaXQgb2YgYSBoYWNrIHRvIGNhbGwgb25lIG9mIHRoZSBzY3JpcHRzLi4u Ig0KICAgICAgICAgIG9zLmVudmlyb25bJ1BBVEhfSU5GTyddID0gc3RyaW5n LmpvaW4ocGF0aGluZm8sICcvJykNCiEgICAgICAgICBmaWxlID0gb3MucGF0 aC5qb2luKG1tX2NmZy5TQ1JJUFRTX0RJUiwgd2hpY2gpDQohICAgICAgICAg bGlzdC5VbmxvY2soKQ0KISAgICAgICAgIGV4ZWNmaWxlKGZpbGUpDQogICAg ICAgICAgc3lzLmV4aXQoMCkNCiAgDQogICAgICAjIyMjIyMjDQotLS0gNjEs ODEgLS0tLQ0KICAgICAgZGVmIGNhbGxfc2NyaXB0KHdoaWNoLCBwYXRoaW5m byk6DQogICAgICAgICAgIkEgbGl0dGxlIGJpdCBvZiBhIGhhY2sgdG8gY2Fs bCBvbmUgb2YgdGhlIHNjcmlwdHMuLi4iDQogICAgICAgICAgb3MuZW52aXJv blsnUEFUSF9JTkZPJ10gPSBzdHJpbmcuam9pbihwYXRoaW5mbywgJy8nKQ0K ISANCiEgICAgICAgICAjIFNlZSB0aGUgcmVmZXJlbmNlIG1hbnVhbCBmb3Ig d2h5IHdlIGhhdmUgdG8gZG8gdGhpbmdzIHRoaXMgd2F5Lg0KISAgICAgICAg ICMgTm90ZSB0aGF0IGltcG9ydGluZyBzaG91bGQgaGF2ZSBubyBzaWRlLWVm ZmVjdHMhDQohICAgICAgICAgcGtnID0gX19pbXBvcnRfXygnTWFpbG1hbi5D Z2knLCBnbG9iYWxzKCksIGxvY2FscygpLCBbd2hpY2hdKQ0KISAgICAgICAg IG1vZHVsZSA9IGdldGF0dHIocGtnLCB3aGljaCkNCiEgICAgICAgICBtYWlu ID0gZ2V0YXR0cihtb2R1bGUsICdtYWluJykNCiEgICAgICAgICB0cnk6DQoh ICAgICAgICAgICAgIG1haW4oKQ0KISAgICAgICAgIGV4Y2VwdCBTeXN0ZW1F eGl0Og0KISAgICAgICAgICAgICAjIHRoaXMgaXMgYSB2YWxpZCB3YXkgZm9y IHRoZSBmdW5jdGlvbiB0byBleGl0DQohICAgICAgICAgICAgIHBhc3MNCiEg DQohICAgICAgICAgI2ZpbGUgPSBvcy5wYXRoLmpvaW4obW1fY2ZnLlNDUklQ VFNfRElSLCB3aGljaCkNCiEgICAgICAgICAjbGlzdC5VbmxvY2soKQ0KISAg ICAgICAgICNleGVjZmlsZShmaWxlKQ0KICAgICAgICAgIHN5cy5leGl0KDAp DQogIA0KICAgICAgIyMjIyMjIw0KKioqKioqKioqKioqKioqDQoqKiogOTIs OTcgKioqKg0KLS0tIDEwNCwxMTAgLS0tLQ0KICAgICAgICAgICAgICBwcmlu dCBkb2MuRm9ybWF0KCkNCiAgICAgICAgICAgICAgbGlzdC5VbmxvY2soKQ0K ICAgICAgICAgICAgICBzeXMuZXhpdCgwKQ0KKyAgICAgICAgIGxpc3QuVW5s b2NrKCkNCiAgICAgICAgICBjYWxsX3NjcmlwdCgnb3B0aW9ucycsIFtsaXN0 Ll9pbnRlcm5hbF9uYW1lLCBtZW1iZXJdKQ0KICAgICAgaWYgbm90IGZvcm0u aGFzX2tleSgiZW1haWwiKToNCiAgICAgICAgICBlcnJvciA9IDENCg== ---1395546950-2037328761-904566424=:21973-- From julian7@kva.hu Mon Aug 31 12:55:21 1998 From: julian7@kva.hu (Nagy Balazs) Date: Mon, 31 Aug 1998 13:55:21 +0200 (CEST) Subject: [Mailman-Developers] cgi/qmail patches Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---456965764-2069813568-904564521=:31564 Content-Type: TEXT/PLAIN; charset=US-ASCII Diff against yesterday's CVS checkout. Fixes / extends - decentralized CGI names - CGI extensions - Ack mail bug - qmail posting (set QMAIL to 1 in mm_cfg not to use inner spool) - other mailers will be handled soon - distclean dependencies - 'nofiles' group checking in configure (for qmail) -- hacker: /n./ One who enjoys the intellectual challenge of creatively overcoming or circumventing limitations. PGP 0x1DE3631D / A8 B4 92 EE 1F 55 27 C8 86 64 9C 42 41 A4 BD B8 ---456965764-2069813568-904564521=:31564 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="mailman.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: patch Content-Disposition: attachment; filename="mailman.diff" ZGlmZiAtYnJ1IC14IENWUyBtYWlsbWFuLm9yaWcvTWFpbG1hbi9Cb3VuY2Vy LnB5IG1haWxtYW4vTWFpbG1hbi9Cb3VuY2VyLnB5DQotLS0gbWFpbG1hbi5v cmlnL01haWxtYW4vQm91bmNlci5weQlTYXQgQXVnICA4IDE0OjE1OjQwIDE5 OTgNCisrKyBtYWlsbWFuL01haWxtYW4vQm91bmNlci5weQlGcmkgQXVnICA3 IDIwOjE1OjU1IDE5OTgNCkBAIC0xNzgsNyArMTc4LDcgQEANCiAgICAgICAg ICAgICBpZiBkaWQgPT0gJ2Rpc2FibGVkJyBhbmQgc3VjY2VlZGVkID09IDE6 DQogICAgICAgICAgICAgICAgIHJlZW5hYmxlID0gVXRpbHMubWFrZXRleHQo DQogICAgICAgICAgICAgICAgICAgICAncmVlbmFibGUudHh0JywNCi0gICAg ICAgICAgICAgICAgICAgIHsnbGlzdGluZm9fdXJsJzogc2VsZi5HZXRBYnNv bHV0ZVNjcmlwdFVSTCgnbGlzdGluZm8nKSwNCisgICAgICAgICAgICAgICAg ICAgIHsnbGlzdGluZm9fdXJsJzogc2VsZi5HZXRBYnNvbHV0ZVNjcmlwdFVS TChtbV9jZmcuTElTVElORk9fQ0dJKSwNCiAgICAgICAgICAgICAgICAgICAg ICB9KQ0KICAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgIHJl ZW5hYmxlID0gJycNCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5vcmlnL01h aWxtYW4vQ2dpL2FkbWluLnB5IG1haWxtYW4vTWFpbG1hbi9DZ2kvYWRtaW4u cHkNCi0tLSBtYWlsbWFuLm9yaWcvTWFpbG1hbi9DZ2kvYWRtaW4ucHkJU2F0 IEF1ZyAgOCAxNDoxNzoyNiAxOTk4DQorKysgbWFpbG1hbi9NYWlsbWFuL0Nn aS9hZG1pbi5weQlGcmkgQXVnICA3IDIwOjE1OjA5IDE5OTgNCkBAIC0xMzAs NyArMTMwLDcgQEANCiAgICAgICAgICAgICAgICAgJ2FkbWxvZ2luLnR4dCcs DQogICAgICAgICAgICAgICAgIHsibGlzdG5hbWUiOiBsaXN0X25hbWUsDQog ICAgICAgICAgICAgICAgICAicGF0aCIgICAgOiBvcy5lbnZpcm9uLmdldCgi UkVRVUVTVF9VUkkiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIi9tYWlsbWFuL2FkbWluLyIgKyBsaXN0X25hbWUp LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9tYWlsbWFuLyIg KyBtbV9jZmcuQURNSU5fQ0dJICsgIi8iICsgbGlzdF9uYW1lICksDQogICAg ICAgICAgICAgICAgICAibWVzc2FnZSIgOiBtZXNzYWdlLA0KICAgICAgICAg ICAgICAgICAgfSkNCiAgICAgICAgICAgICBwcmludCB0ZXh0DQpAQCAtMjI0 LDcgKzIyNCw3IEBADQogICAgICAgICAgICAgICAgICAgICAgICsNCiAgICAg ICAgICAgICAgICAgICAgICAgIiBHZW5lcmFsIGxpc3QgaW5mb3JtYXRpb24g Y2FuIGJlIGZvdW5kIGF0ICIsDQogICAgICAgICAgICAgICAgICAgICAgIExp bmsob3MucGF0aC5qb2luKCcuLi8nKiBVdGlscy5HZXROZXN0aW5nTGV2ZWwo KSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdGluZm8vIiks ICJ0aGUgbWFpbGluZyBsaXN0IG92ZXJ2aWV3IHBhZ2UiKSwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgIG1tX2NmZy5MSVNUSU5GT19DR0kgKyAiLyIp LCAidGhlIG1haWxpbmcgbGlzdCBvdmVydmlldyBwYWdlIiksDQogICAgICAg ICAgICAgICAgICAgICAgICIuIg0KICAgICAgICAgICAgICAgICAgICAgICAi PHA+KFNlbmQgcXVlc3Rpb25zIGFuZCBjb21tZW50cyB0byAiLA0KICAgICAg ICAgICAgICAgICAgICAgIExpbmsoIm1haWx0bzolcyIgJSBtbV9jZmcuTUFJ TE1BTl9PV05FUiwNCkBAIC0yMzksNyArMjM5LDcgQEANCiAgICAgaWYgYWR2 ZXJ0aXNlZDoNCiAgICAgICAgIHRhYmxlLkFkZFJvdyhbSXRhbGljKCJMaXN0 IiksIEl0YWxpYygiRGVzY3JpcHRpb24iKV0pDQogICAgICAgICBmb3IgbCBp biBhZHZlcnRpc2VkOg0KLSAgICAgICAgICAgIHRhYmxlLkFkZFJvdyhbTGlu ayhsLkdldFJlbGF0aXZlU2NyaXB0VVJMKCdhZG1pbicpLCANCisgICAgICAg ICAgICB0YWJsZS5BZGRSb3coW0xpbmsobC5HZXRSZWxhdGl2ZVNjcmlwdFVS TChtbV9jZmcuQURNSU5fQ0dJKSwgDQogCSAgICAgICAgICAgICAgICAgIEJv bGQobC5yZWFsX25hbWUpKSxsLmRlc2NyaXB0aW9uXSkNCiANCiAgICAgZG9j LkFkZEl0ZW0odGFibGUpDQpAQCAtMjYxLDEzICsyNjEsMTMgQEANCiAgICAg bGlua3NfdGFibGUuQWRkUm93KFtDZW50ZXIoQm9sZCgiQ29uZmlndXJhdGlv biBDYXRlZ29yaWVzIikpLA0KICAgICAgICAgICAgICAgICAgICAgICAgIENl bnRlcihCb2xkKCJPdGhlciBBZG1pbmlzdHJhdGl2ZSBBY3Rpdml0aWVzIikp XSkNCiAgICAgb3RoZXJfbGlua3MgPSBVbm9yZGVyZWRMaXN0KCkNCi0gICAg bGluayA9IExpbmsobHN0LkdldFJlbGF0aXZlU2NyaXB0VVJMKCdhZG1pbmRi JyksIA0KKyAgICBsaW5rID0gTGluayhsc3QuR2V0UmVsYXRpdmVTY3JpcHRV UkwobW1fY2ZnLkFETUlOREJfQ0dJKSwgDQogICAgICAgICAgICAgICAgICdU ZW5kIHRvIHBlbmRpbmcgYWRtaW5pc3RyYXRpdmUgcmVxdWVzdHMuJykNCiAg ICAgb3RoZXJfbGlua3MuQWRkSXRlbShsaW5rKQ0KLSAgICBsaW5rID0gTGlu ayhsc3QuR2V0UmVsYXRpdmVTY3JpcHRVUkwoJ2xpc3RpbmZvJyksDQorICAg IGxpbmsgPSBMaW5rKGxzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTChtbV9jZmcu TElTVElORk9fQ0dJKSwNCiAgICAgICAgICAgICAgICAgJ0dvIHRvIHRoZSBn ZW5lcmFsIGxpc3QgaW5mb3JtYXRpb24gcGFnZS4nKQ0KICAgICBvdGhlcl9s aW5rcy5BZGRJdGVtKGxpbmspDQotICAgIGxpbmsgPSBMaW5rKGxzdC5HZXRS ZWxhdGl2ZVNjcmlwdFVSTCgnZWRpdGh0bWwnKSwNCisgICAgbGluayA9IExp bmsobHN0LkdldFJlbGF0aXZlU2NyaXB0VVJMKG1tX2NmZy5FRElUSFRNTF9D R0kpLA0KICAgICAgICAgICAgICAgICAnRWRpdCB0aGUgSFRNTCBmb3IgdGhl IHB1YmxpYyBsaXN0IHBhZ2VzLicpDQogICAgIG90aGVyX2xpbmtzLkFkZEl0 ZW0obGluaykNCiANCkBAIC0yNzcsNyArMjc3LDcgQEANCiAgICAgICAgICAg ICB0aGVzZV9saW5rcy5BZGRJdGVtKCI8Yj4gPSZndDsgIiArIHYgKyAiICZs dDs9IDwvYj4iKQ0KICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICB0aGVz ZV9saW5rcy5BZGRJdGVtKExpbmsoIiVzLyVzIiAlIA0KLQkgICAgICAgICAg ICAgICAgIChsc3QuR2V0UmVsYXRpdmVTY3JpcHRVUkwoJ2FkbWluJyksayks dikpDQorCSAgICAgICAgICAgICAgICAgKGxzdC5HZXRSZWxhdGl2ZVNjcmlw dFVSTChtbV9jZmcuQURNSU5fQ0dJKSxrKSx2KSkNCiANCiAgICAgbGlua3Nf dGFibGUuQWRkUm93KFt0aGVzZV9saW5rcywgb3RoZXJfbGlua3NdKQ0KICAg ICBsaW5rc190YWJsZS5BZGRSb3dJbmZvKG1heChsaW5rc190YWJsZS5HZXRD dXJyZW50Um93SW5kZXgoKSwgMCksDQpAQCAtMjg2LDEwICsyODYsMTAgQEAN CiAgICAgZG9jLkFkZEl0ZW0obGlua3NfdGFibGUpDQogICAgIGRvYy5BZGRJ dGVtKCc8aHI+JykNCiAgICAgaWYgY2F0ZWdvcnlfc3VmZml4Og0KLSAgICAg ICAgZm9ybSA9IEZvcm0oIiVzLyVzIiAlIChsc3QuR2V0UmVsYXRpdmVTY3Jp cHRVUkwoJ2FkbWluJyksDQorICAgICAgICBmb3JtID0gRm9ybSgiJXMvJXMi ICUgKGxzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTChtbV9jZmcuQURNSU5fQ0dJ KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdv cnlfc3VmZml4KSkNCiAgICAgZWxzZToNCi0gICAgICAgIGZvcm0gPSBGb3Jt KGxzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTCgnYWRtaW4nKSkNCisgICAgICAg IGZvcm0gPSBGb3JtKGxzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTChtbV9jZmcu QURNSU5fQ0dJKSkNCiAgICAgZG9jLkFkZEl0ZW0oZm9ybSkNCiANCiAgICAg Zm9ybS5BZGRJdGVtKCJNYWtlIHlvdXIgY2hhbmdlcywgYmVsb3csIGFuZCB0 aGVuIHN1Ym1pdCBpdCBhbGwgYXQgdGhlIg0KQEAgLTQwNCw3ICs0MDQsNyBA QA0KICAgICBkb2MuQWRkSXRlbSgiPGI+JXM8L2I+ICglcyk6ICVzPHA+IiAl ICh2YXJuYW1lLCBjYXRlZ29yeSwgaXRlbVs0XSkpDQogICAgIGRvYy5BZGRJ dGVtKCIlczxwPiIgJSBpdGVtWzVdKQ0KIA0KLSAgICBmb3JtID0gRm9ybShv cy5wYXRoLmpvaW4obHN0LkdldFJlbGF0aXZlU2NyaXB0VVJMKCdhZG1pbicp LCBjYXRlZ29yeSkpDQorICAgIGZvcm0gPSBGb3JtKG9zLnBhdGguam9pbihs c3QuR2V0UmVsYXRpdmVTY3JpcHRVUkwobW1fY2ZnLkFETUlOX0NHSSksIGNh dGVnb3J5KSkNCiAgICAgdmFsdGFiID0gVGFibGUoY2VsbHNwYWNpbmc9Mywg Y2VsbHBhZGRpbmc9NCkNCiAgICAgQWRkT3B0aW9uc1RhYmxlSXRlbSh2YWx0 YWIsIGl0ZW0sIGNhdGVnb3J5LCBsc3QsIG5vZGV0YWlscz0xKQ0KICAgICBm b3JtLkFkZEl0ZW0odmFsdGFiKQ0KQEAgLTUwNCw4ICs1MDQsOCBAQA0KICAg ICAgICAgcGkgPSBvcy5lbnZpcm9uWyJQQVRIX0lORk8iXQ0KICAgICAgICAg Zm9yIGNpIGluIGNodW5rX2luZGljZXM6DQogICAgICAgICAgICAgc3RhcnQs IGVuZCA9IGNodW5rc1tjaV1bMF0sIGNodW5rc1tjaV1bLTFdDQotICAgICAg ICAgICAgYnV0dG9ucy5hcHBlbmQoIjxhIGhyZWY9L21haWxtYW4vYWRtaW4l cz9jaHVuaz0lZD4gZnJvbSAlcyB0byAlcyA8L2E+IiAlIFwNCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAoIHBpLCBjaSwgc3RhcnQsIGVuZCkpDQor ICAgICAgICAgICAgYnV0dG9ucy5hcHBlbmQoIjxhIGhyZWY9L21haWxtYW4v JXMlcz9jaHVuaz0lZD4gZnJvbSAlcyB0byAlcyA8L2E+IiAlIFwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAoIG1tX2NmZy5BRE1JTl9DR0ksIHBp LCBjaSwgc3RhcnQsIGVuZCkpDQogICAgICAgICBidXR0b25zID0gYXBwbHko VW5vcmRlcmVkTGlzdCwgdHVwbGUoYnV0dG9ucykpDQogICAgICAgICBmb290 ZXIgPSBmb290ZXIgKyBidXR0b25zLkZvcm1hdCgpICsgIjxwPiIgDQogICAg IGVsc2U6DQpkaWZmIC1icnUgLXggQ1ZTIG1haWxtYW4ub3JpZy9NYWlsbWFu L0NnaS9hZG1pbmRiLnB5IG1haWxtYW4vTWFpbG1hbi9DZ2kvYWRtaW5kYi5w eQ0KLS0tIG1haWxtYW4ub3JpZy9NYWlsbWFuL0NnaS9hZG1pbmRiLnB5CVNh dCBBdWcgIDggMTQ6MTc6MjkgMTk5OA0KKysrIG1haWxtYW4vTWFpbG1hbi9D Z2kvYWRtaW5kYi5weQlGcmkgQXVnICA3IDIwOjEyOjI5IDE5OTgNCkBAIC0y MDcsMTQgKzIwNywxNCBAQA0KICAgICBkb2MuQWRkSXRlbShodG1sZm9ybWF0 LkhlYWRlcigyLCAiQWRtaW5pc3RyYXRpdmUgcmVxdWVzdHMgZm9yICINCiAJ CQkJICAiJyVzJyBtYWlsaW5nIGxpc3QiICUgbGlzdC5yZWFsX25hbWUpKQ0K ICAgICBkb2MuQWRkSXRlbShodG1sZm9ybWF0LkZvbnRTaXplKCIrMSIsIGh0 bWxmb3JtYXQuTGluaygNCi0JbGlzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTCgn YWRtaW4nKSwgaHRtbGZvcm1hdC5JdGFsaWMoDQorCWxpc3QuR2V0UmVsYXRp dmVTY3JpcHRVUkwobW1fY2ZnLkFETUlOX0NHSSksIGh0bWxmb3JtYXQuSXRh bGljKA0KIAkgICAgJ1ZpZXcgb3IgZWRpdCB0aGUgbGlzdCBjb25maWd1cmF0 aW9uIGluZm9ybWF0aW9uJykpKSkNCiAgICAgZG9jLkFkZEl0ZW0oJzxwPjxo cj4nKQ0KICAgICBpZiBub3QgbGlzdC5OdW1SZXF1ZXN0c1BlbmRpbmcoKToN CiAJZG9jLkFkZEl0ZW0oaHRtbGZvcm1hdC5IZWFkZXIoMywnVGhlcmUgYXJl IG5vIHBlbmRpbmcgcmVxdWVzdHMuJykpDQogCWRvYy5BZGRJdGVtKGxpc3Qu R2V0TWFpbG1hbkZvb3RlcigpKQ0KIAlyZXR1cm4NCi0gICAgZm9ybSA9IGh0 bWxmb3JtYXQuRm9ybShsaXN0LkdldFJlbGF0aXZlU2NyaXB0VVJMKCdhZG1p bmRiJykpDQorICAgIGZvcm0gPSBodG1sZm9ybWF0LkZvcm0obGlzdC5HZXRS ZWxhdGl2ZVNjcmlwdFVSTChtbV9jZmcuQURNSU5EQl9DR0kpKQ0KICAgICBk b2MuQWRkSXRlbShmb3JtKQ0KICAgICBmb3JtLkFkZEl0ZW0oJ0FkbWluIHBh c3N3b3JkOiAnKQ0KICAgICBmb3JtLkFkZEl0ZW0oaHRtbGZvcm1hdC5QYXNz d29yZEJveCgnYWRtaW5wdycpKQ0KZGlmZiAtYnJ1IC14IENWUyBtYWlsbWFu Lm9yaWcvTWFpbG1hbi9DZ2kvZWRpdGh0bWwucHkgbWFpbG1hbi9NYWlsbWFu L0NnaS9lZGl0aHRtbC5weQ0KLS0tIG1haWxtYW4ub3JpZy9NYWlsbWFuL0Nn aS9lZGl0aHRtbC5weQlTYXQgQXVnICA4IDE0OjE3OjMyIDE5OTgNCisrKyBt YWlsbWFuL01haWxtYW4vQ2dpL2VkaXRodG1sLnB5CUZyaSBBdWcgIDcgMjA6 MTc6NTMgMTk5OA0KQEAgLTg3LDcgKzg3LDcgQEANCiAgICAgICAgIGRvYy5B ZGRJdGVtKGh0bWxmb3JtYXQuSGVhZGVyKDIsICdTZWxlY3QgcGFnZSB0byBl ZGl0OicpKQ0KICAgICAgICAgdGVtcGxhdGVfbGlzdCA9IGh0bWxmb3JtYXQu VW5vcmRlcmVkTGlzdCgpDQogICAgICAgICBmb3IgKHRlbXBsYXRlLCBpbmZv KSBpbiB0ZW1wbGF0ZV9kYXRhOg0KLSAgICAgICAgICAgIGwgPSBodG1sZm9y bWF0Lkxpbmsob3MucGF0aC5qb2luKGxpc3QuR2V0UmVsYXRpdmVTY3JpcHRV UkwoJ2VkaXRodG1sJyksDQorICAgICAgICAgICAgbCA9IGh0bWxmb3JtYXQu TGluayhvcy5wYXRoLmpvaW4obGlzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTCht bV9jZmcuRURJVEhUTUxfQ0dJKSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSksIGluZm8pDQogDQog ICAgICAgICAgICAgdGVtcGxhdGVfbGlzdC5BZGRJdGVtKGwpDQpAQCAtMTQ2 LDE0ICsxNDYsMTQgQEANCiANCiAgICAgZG9jLkFkZEl0ZW0oJzxocj4nKQ0K IA0KLSAgICBsaW5rID0gaHRtbGZvcm1hdC5MaW5rKGxpc3QuR2V0UmVsYXRp dmVTY3JpcHRVUkwoJ2FkbWluJyksDQorICAgIGxpbmsgPSBodG1sZm9ybWF0 LkxpbmsobGlzdC5HZXRSZWxhdGl2ZVNjcmlwdFVSTChtbV9jZmcuQURNSU5f Q0dJKSwNCiAJCQkgICAnVmlldyBvciBlZGl0IHRoZSBsaXN0IGNvbmZpZ3Vy YXRpb24gaW5mb3JtYXRpb24uJykNCiAgICAgZG9jLkFkZEl0ZW0oaHRtbGZv cm1hdC5Gb250U2l6ZSgiKzEiLCBsaW5rKSkNCiAgICAgZG9jLkFkZEl0ZW0o JzxwPicpDQogDQogICAgIGRvYy5BZGRJdGVtKCc8aHI+JykNCiANCi0gICAg Zm9ybSA9IGh0bWxmb3JtYXQuRm9ybShvcy5wYXRoLmpvaW4obGlzdC5HZXRS ZWxhdGl2ZVNjcmlwdFVSTCgnZWRpdGh0bWwnKSwNCisgICAgZm9ybSA9IGh0 bWxmb3JtYXQuRm9ybShvcy5wYXRoLmpvaW4obGlzdC5HZXRSZWxhdGl2ZVNj cmlwdFVSTChtbV9jZmcuRURJVEhUTUxfQ0dJKSwNCiAJCQkJCXRlbXBsYXRl X25hbWUpKQ0KICAgICBkb2MuQWRkSXRlbShmb3JtKQ0KIA0KZGlmZiAtYnJ1 IC14IENWUyBtYWlsbWFuLm9yaWcvTWFpbG1hbi9DZ2kvbGlzdGluZm8ucHkg bWFpbG1hbi9NYWlsbWFuL0NnaS9saXN0aW5mby5weQ0KLS0tIG1haWxtYW4u b3JpZy9NYWlsbWFuL0NnaS9saXN0aW5mby5weQlTYXQgQXVnICA4IDE0OjE3 OjQzIDE5OTgNCisrKyBtYWlsbWFuL01haWxtYW4vQ2dpL2xpc3RpbmZvLnB5 CUZyaSBBdWcgIDcgMjA6MTg6MTYgMTk5OA0KQEAgLTEyMiw3ICsxMjIsNyBA QA0KICAgICAgICAgICAgICAgICAgICAgICArDQogICAgICAgICAgICAgICAg ICAgICAgICc8cD4gTGlzdCBhZG1pbmlzdHJhdG9ycywgeW91IGNhbiB2aXNp dCAnLA0KICAgICAgICAgICAgICAgICAgICAgICBMaW5rKG9zLnBhdGguam9p bignLi4vJyAqIFV0aWxzLkdldE5lc3RpbmdMZXZlbCgpLA0KLQkgICAgICAg ICAgICAgICAgICAgJ2FkbWluLycpLCAidGhlIGxpc3QgYWRtaW4gb3ZlcnZp ZXcgcGFnZSIpLA0KKwkgICAgICAgICAgICAgICAgICAgbW1fY2ZnLkFETUlO X0NHSSArICcvJyksICJ0aGUgbGlzdCBhZG1pbiBvdmVydmlldyBwYWdlIiks DQogICAgICAgICAgICAgICAgICAgICAgICIgdG8gZmluZCB0aGUgbWFuYWdl bWVudCBpbnRlcmZhY2UgZm9yIHlvdXIgbGlzdC4iDQogICAgICAgICAgICAg ICAgICAgICAgICI8cD4oU2VuZCBxdWVzdGlvbnMgb3IgY29tbWVudHMgdG8g IiwNCiAgICAgICAgICAgICAgICAgICAgICAgTGluaygibWFpbHRvOiVzIiAl IG1tX2NmZy5NQUlMTUFOX09XTkVSLA0KQEAgLTEzNSw3ICsxMzUsNyBAQA0K ICAgICBpZiBhZHZlcnRpc2VkOg0KICAgICAgICAgdGFibGUuQWRkUm93KFtJ dGFsaWMoIkxpc3QiKSwgSXRhbGljKCJEZXNjcmlwdGlvbiIpXSkNCiAgICAg Zm9yIGwgaW4gYWR2ZXJ0aXNlZDoNCi0gICAgICAgIHRhYmxlLkFkZFJvdyhb TGluayhsLkdldFJlbGF0aXZlU2NyaXB0VVJMKCdsaXN0aW5mbycpLCANCisg ICAgICAgIHRhYmxlLkFkZFJvdyhbTGluayhsLkdldFJlbGF0aXZlU2NyaXB0 VVJMKG1tX2NmZy5MSVNUSU5GT19DR0kpLCANCiAJICAgICAgQm9sZChsLnJl YWxfbmFtZSkpLCBsLmRlc2NyaXB0aW9uXSkNCiANCiAgICAgZG9jLkFkZEl0 ZW0odGFibGUpDQpAQCAtMTY0LDggKzE2NCw4IEBADQogICAgIHJlcGxhY2Vt ZW50c1snPG1tLW5ldy1wYXNzd29yZC1ib3g+J10gPSBsaXN0LkZvcm1hdFNl Y3VyZUJveCgncHcnKQ0KICAgICByZXBsYWNlbWVudHNbJzxtbS1jb25maXJt LXBhc3N3b3JkPiddID0gbGlzdC5Gb3JtYXRTZWN1cmVCb3goJ3B3LWNvbmYn KQ0KICAgICByZXBsYWNlbWVudHNbJzxtbS1zdWJzY3JpYmUtZm9ybS1zdGFy dD4nXSA9IFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlzdC5Gb3JtYXRGb3JtU3RhcnQoJ3N1YnNjcmliZScp DQotICAgIHJlcGxhY2VtZW50c1snPG1tLXJvc3Rlci1mb3JtLXN0YXJ0Pidd ID0gbGlzdC5Gb3JtYXRGb3JtU3RhcnQoJ3Jvc3RlcicpDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuRm9y bWF0Rm9ybVN0YXJ0KG1tX2NmZy5TVUJTQ1JJQkVfQ0dJKQ0KKyAgICByZXBs YWNlbWVudHNbJzxtbS1yb3N0ZXItZm9ybS1zdGFydD4nXSA9IGxpc3QuRm9y bWF0Rm9ybVN0YXJ0KG1tX2NmZy5ST1NURVJfQ0dJKQ0KICAgICByZXBsYWNl bWVudHNbJzxtbS1lZGl0aW5nLW9wdGlvbnM+J10gPSBsaXN0LkZvcm1hdEVk aXRpbmdPcHRpb24oKQ0KICAgICByZXBsYWNlbWVudHNbJzxtbS1pbmZvLWJ1 dHRvbj4nXSA9IFN1Ym1pdEJ1dHRvbignVXNlck9wdGlvbnMnLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnRWRpdCBPcHRpb25zJykuRm9ybWF0KCkNCmRpZmYgLWJydSAteCBDVlMg bWFpbG1hbi5vcmlnL01haWxtYW4vQ2dpL29wdGlvbnMucHkgbWFpbG1hbi9N YWlsbWFuL0NnaS9vcHRpb25zLnB5DQotLS0gbWFpbG1hbi5vcmlnL01haWxt YW4vQ2dpL29wdGlvbnMucHkJU2F0IEF1ZyAgOCAxNDoxNzo0NSAxOTk4DQor KysgbWFpbG1hbi9NYWlsbWFuL0NnaS9vcHRpb25zLnB5CVNhdCBBdWcgIDgg MTQ6NDA6MTAgMTk5OA0KQEAgLTExNSw3ICsxMTUsNyBAQA0KICAgICByZXBs YWNlbWVudHNbJzxtbS1jb25maXJtLXBhc3MtYm94PiddID0gbGlzdC5Gb3Jt YXRTZWN1cmVCb3goJ2NvbmZwdycpDQogICAgIHJlcGxhY2VtZW50c1snPG1t LWNoYW5nZS1wYXNzLWJ1dHRvbj4nXSA9IGxpc3QuRm9ybWF0QnV0dG9uKCdj aGFuZ2VwdycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGFuZ2UgTXkgUGFz c3dvcmQiKQ0KLSAgICByZXBsYWNlbWVudHNbJzxtbS1mb3JtLXN0YXJ0Pidd ID0gbGlzdC5Gb3JtYXRGb3JtU3RhcnQoJ2hhbmRsZV9vcHRzJywgdXNlcikN CisgICAgcmVwbGFjZW1lbnRzWyc8bW0tZm9ybS1zdGFydD4nXSA9IGxpc3Qu Rm9ybWF0Rm9ybVN0YXJ0KG1tX2NmZy5IT1BUU19DR0ksIHVzZXIpDQogICAg IHJlcGxhY2VtZW50c1snPG1tLXVzZXI+J10gPSB1c2VyDQogICAgIHJlcGxh Y2VtZW50c1snPG1tLXByZXNlbnRhYmxlLXVzZXI+J10gPSBwcmVzZW50YWJs ZV91c2VyDQogICAgIHJlcGxhY2VtZW50c1snPG1tLWVtYWlsLW15LXB3Pidd ID0gbGlzdC5Gb3JtYXRCdXR0b24oJ2VtYWlscHcnLA0KZGlmZiAtYnJ1IC14 IENWUyBtYWlsbWFuLm9yaWcvTWFpbG1hbi9EZWZhdWx0cy5weS5pbiBtYWls bWFuL01haWxtYW4vRGVmYXVsdHMucHkuaW4NCi0tLSBtYWlsbWFuLm9yaWcv TWFpbG1hbi9EZWZhdWx0cy5weS5pbglTYXQgQXVnICA4IDE0OjE1OjQzIDE5 OTgNCisrKyBtYWlsbWFuL01haWxtYW4vRGVmYXVsdHMucHkuaW4JRnJpIEF1 ZyAyMSAxNTowMTozMyAxOTk4DQpAQCAtMjE3LDMgKzIxNywxNSBAQA0KIA0K ICMgRGF0YSBmaWxlIHZlcnNpb24gbnVtYmVyDQogREFUQV9GSUxFX1ZFUlNJ T04gPSAzDQorDQorIyBDR0kgZmlsZSBuYW1lcw0KK0FETUlOX0NHSSAgICAg ICA9ICJhZG1pbkBDR0lFWFRAIg0KK0FETUlOREJfQ0dJICAgICA9ICJhZG1p bmRiQENHSUVYVEAiDQorQVJDSElWRV9DR0kgICAgID0gImFyY2hpdmVAQ0dJ RVhUQCINCitMSVNUSU5GT19DR0kgICAgPSAibGlzdGluZm9AQ0dJRVhUQCIN CitPUFRJT05TX0NHSSAgICAgPSAib3B0aW9uc0BDR0lFWFRAIg0KK0VESVRI VE1MX0NHSSAgICA9ICJlZGl0aHRtbEBDR0lFWFRAIg0KK1JPU1RFUl9DR0kg ICAgICA9ICJyb3N0ZXJAQ0dJRVhUQCINCitIT1BUU19DR0kgICAgICAgPSAi aGFuZGxlX29wdHNAQ0dJRVhUQCINCitTVUJTQ1JJQkVfQ0dJICAgPSAic3Vi c2NyaWJlQENHSUVYVEAiDQorUFJJVkFURV9DR0kgICAgID0gInByaXZhdGVA Q0dJRVhUQCINCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5vcmlnL01haWxt YW4vRGVsaXZlcmVyLnB5IG1haWxtYW4vTWFpbG1hbi9EZWxpdmVyZXIucHkN Ci0tLSBtYWlsbWFuLm9yaWcvTWFpbG1hbi9EZWxpdmVyZXIucHkJU3VuIEF1 ZyAzMCAxNTo1NTo1NCAxOTk4DQorKysgbWFpbG1hbi9NYWlsbWFuL0RlbGl2 ZXJlci5weQlTdW4gQXVnIDMwIDE2OjI5OjQ0IDE5OTgNCkBAIC05NCwxMyAr OTQsMTMgQEANCiAgICAgICAgICAgICBpZiAobGVuKHN1YmplY3QpID4gbGVu KHNwKQ0KICAgICAgICAgICAgICAgICBhbmQgc3ViamVjdFswOmxlbihzcCld ID09IHNwKToNCiAgICAgICAgICAgICAgICAgIyBUcmltIG9mZiBzdWJqZWN0 IHByZWZpeA0KLSAgICAgICAgICAgICAgICBzdWJqZWN0ID0gc3ViamVjdFts ZW4oc3ApICsgMTpdDQorICAgICAgICAgICAgICAgIHN1YmplY3QgPSBzdWJq ZWN0W2xlbihzcCk6XQ0KICAgICAgICAgIyBnZXQgdGhlIHRleHQgZnJvbSB0 aGUgdGVtcGxhdGUNCiAgICAgICAgIGJvZHkgPSBVdGlscy5tYWtldGV4dCgN CiAgICAgICAgICAgICAncG9zdGFjay50eHQnLA0KICAgICAgICAgICAgIHsn c3ViamVjdCcgICAgIDogc3ViamVjdCwNCiAgICAgICAgICAgICAgJ2xpc3Ru YW1lJyAgICA6IHNlbGYucmVhbF9uYW1lLA0KLSAgICAgICAgICAgICAnbGlz dGluZm9fdXJsJzogc2VsZi5HZXRBYnNvbHV0ZVNjcmlwdFVSTCgnbGlzdGlu Zm8nKSwNCisgICAgICAgICAgICAgJ2xpc3RpbmZvX3VybCc6IHNlbGYuR2V0 QWJzb2x1dGVTY3JpcHRVUkwobW1fY2ZnLkxJU1RJTkZPX0NHSSksDQogICAg ICAgICAgICAgIH0pDQogCXNlbGYuU2VuZFRleHRUb1VzZXIoJyVzIHBvc3Qg YWNrbm93bGVnZW1lbnQnICUgc2VsZi5yZWFsX25hbWUsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJvZHksIHNlbmRlcikNCkBAIC0xMTgsNyAr MTE4LDcgQEANCiAgICAgICAgICAgICAgJ2hvc3RfbmFtZScgICA6IHNlbGYu aG9zdF9uYW1lLA0KICAgICAgICAgICAgICAnd2VsY29tZScgICAgIDogd2Vs Y29tZSwNCiAgICAgICAgICAgICAgJ2VtYWlsYWRkcicgICA6IHNlbGYuR2V0 TGlzdEVtYWlsKCksDQotICAgICAgICAgICAgICdsaXN0aW5mb191cmwnOiBz ZWxmLkdldEFic29sdXRlU2NyaXB0VVJMKCdsaXN0aW5mbycpLA0KKyAgICAg ICAgICAgICAnbGlzdGluZm9fdXJsJzogc2VsZi5HZXRBYnNvbHV0ZVNjcmlw dFVSTChtbV9jZmcuTElTVElORk9fQ0dJKSwNCiAgICAgICAgICAgICAgJ29w dGlvbnN1cmwnICA6IHNlbGYuR2V0QWJzb2x1dGVPcHRpb25zVVJMKG5hbWUp LA0KICAgICAgICAgICAgICAncGFzc3dvcmQnICAgIDogcGFzc3dvcmQsDQog ICAgICAgICAgICAgIH0pDQpkaWZmIC1icnUgLXggQ1ZTIG1haWxtYW4ub3Jp Zy9NYWlsbWFuL0RpZ2VzdGVyLnB5IG1haWxtYW4vTWFpbG1hbi9EaWdlc3Rl ci5weQ0KLS0tIG1haWxtYW4ub3JpZy9NYWlsbWFuL0RpZ2VzdGVyLnB5CVNh dCBBdWcgIDggMTQ6MTU6NDggMTk5OA0KKysrIG1haWxtYW4vTWFpbG1hbi9E aWdlc3Rlci5weQlGcmkgQXVnIDIxIDE0OjMzOjUwIDE5OTgNCkBAIC0zMzAs NyArMzMwLDcgQEANCiAgICAgICAgICAgICBzdWJzdHMgPSB7fQ0KICAgICAg ICAgICAgIHN1YnN0cy51cGRhdGUobHN0Ll9fZGljdF9fKQ0KICAgICAgICAg ICAgIHN1YnN0cy51cGRhdGUoeydnb3RfbGlzdGluZm9fdXJsJzogDQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzdC5HZXRB YnNvbHV0ZVNjcmlwdFVSTCgnbGlzdGluZm8nKSwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN0LkdldEFic29sdXRlU2Ny aXB0VVJMKG1tX2NmZy5MSVNUSU5GT19DR0kpLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdnb3RfcmVxdWVzdF9lbWFpbCc6IGxzdC5HZXRSZXF1 ZXN0RW1haWwoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ290 X2xpc3RfZW1haWwnOiBsc3QuR2V0TGlzdEVtYWlsKCksDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2dvdF9vd25lcl9lbWFpbCc6IGxzdC5HZXRB ZG1pbkVtYWlsKCksDQpkaWZmIC1icnUgLXggQ1ZTIG1haWxtYW4ub3JpZy9N YWlsbWFuL0hUTUxGb3JtYXR0ZXIucHkgbWFpbG1hbi9NYWlsbWFuL0hUTUxG b3JtYXR0ZXIucHkNCi0tLSBtYWlsbWFuLm9yaWcvTWFpbG1hbi9IVE1MRm9y bWF0dGVyLnB5CVNhdCBBdWcgIDggMTQ6MTU6NTQgMTk5OA0KKysrIG1haWxt YW4vTWFpbG1hbi9IVE1MRm9ybWF0dGVyLnB5CUZyaSBBdWcgMjEgMTQ6MzQ6 NTYgMTk5OA0KQEAgLTkzLDcgKzkzLDcgQEANCiAJCXNob3dpbmcgPSBPYnNj dXJlRW1haWwocGVyc29uLCBmb3JfdGV4dD0xKQ0KIAkgICAgZWxzZToNCiAJ CXNob3dpbmcgPSBwZXJzb24NCi0JICAgIGdvdCA9IExpbmsob3MucGF0aC5q b2luKG1lLkdldFJlbGF0aXZlU2NyaXB0VVJMKCdvcHRpb25zJyksDQorCSAg ICBnb3QgPSBMaW5rKG9zLnBhdGguam9pbihtZS5HZXRSZWxhdGl2ZVNjcmlw dFVSTChtbV9jZmcuT1BUSU9OU19DR0kpLA0KIAkJCQkgICAgaWQpLCBzaG93 aW5nKQ0KICAgICAgICAgICAgIGlmIG1lLkdldFVzZXJPcHRpb24ocGVyc29u LCBkaXNkZWwpOg0KICAgICAgICAgICAgICAgICBnb3QgPSBJdGFsaWMoIigi LCBnb3QsICIpIikNCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5vcmlnL01h aWxtYW4vTGlzdEFkbWluLnB5IG1haWxtYW4vTWFpbG1hbi9MaXN0QWRtaW4u cHkNCi0tLSBtYWlsbWFuLm9yaWcvTWFpbG1hbi9MaXN0QWRtaW4ucHkJU2F0 IEF1ZyAgOCAxNDoxNjoxMCAxOTk4DQorKysgbWFpbG1hbi9NYWlsbWFuL0xp c3RBZG1pbi5weQlGcmkgQXVnIDIxIDE0OjM1OjM5IDE5OTgNCkBAIC01NSw3 ICs1NSw3IEBADQogICAgICAgICAgICAgICAgICAgICB7J3VzZXJuYW1lJyAg IDogd2hvLA0KICAgICAgICAgICAgICAgICAgICAgICdsaXN0bmFtZScgICA6 IHNlbGYucmVhbF9uYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICdob3N0 bmFtZScgICA6IHNlbGYuaG9zdF9uYW1lLA0KLSAgICAgICAgICAgICAgICAg ICAgICdhZG1pbmRiX3VybCc6IHNlbGYuR2V0QWJzb2x1dGVTY3JpcHRVUkwo J2FkbWluZGInKSwNCisgICAgICAgICAgICAgICAgICAgICAnYWRtaW5kYl91 cmwnOiBzZWxmLkdldEFic29sdXRlU2NyaXB0VVJMKG1tX2NmZy5BRE1JTkRC X0NHSSksDQogICAgICAgICAgICAgICAgICAgICAgfSkNCiAJCXNlbGYuU2Vu ZFRleHRUb1VzZXIoc3ViamVjdCA9IHN1YmosDQogCQkJCSAgICByZWNpcGll bnQgPSBzZWxmLkdldEFkbWluRW1haWwoKSwNCkBAIC03OCw3ICs3OCw3IEBA DQogICAgICAgICAgICAgICAgICAgICAgJ3JlYXNvbicgICAgIDogcmVhc29u LA0KICAgICAgICAgICAgICAgICAgICAgICdzZW5kZXInICAgICA6IHNlbmRl ciwNCiAgICAgICAgICAgICAgICAgICAgICAnc3ViamVjdCcgICAgOiBzdWJq ZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgICdhZG1pbmRiX3VybCc6IHNl bGYuR2V0QWJzb2x1dGVTY3JpcHRVUkwoJ2FkbWluZGInKSwNCisgICAgICAg ICAgICAgICAgICAgICAnYWRtaW5kYl91cmwnOiBzZWxmLkdldEFic29sdXRl U2NyaXB0VVJMKG1tX2NmZy5BRE1JTkRCX0NHSSksDQogICAgICAgICAgICAg ICAgICAgICAgfSkNCiAJCXNlbGYuU2VuZFRleHRUb1VzZXIoc3ViamVjdCA9 IHN1YmosDQogCQkJCSAgICByZWNpcGllbnQgPSBzZWxmLkdldEFkbWluRW1h aWwoKSwNCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5vcmlnL01haWxtYW4v TWFpbExpc3QucHkgbWFpbG1hbi9NYWlsbWFuL01haWxMaXN0LnB5DQotLS0g bWFpbG1hbi5vcmlnL01haWxtYW4vTWFpbExpc3QucHkJU2F0IEF1ZyAgOCAx NDoxNjozNCAxOTk4DQorKysgbWFpbG1hbi9NYWlsbWFuL01haWxMaXN0LnB5 CUZyaSBBdWcgMjEgMTQ6Mzc6NTYgMTk5OA0KQEAgLTg0LDcgKzg0LDcgQEAN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNlbGYuX2ludGVybmFsX25hbWUpKQ0KIA0KICAgICBkZWYgR2V0QWJz b2x1dGVPcHRpb25zVVJMKHNlbGYsIGFkZHIsIG9ic2N1cmVkPTAsKToNCi0J b3B0aW9ucyA9IHNlbGYuR2V0QWJzb2x1dGVTY3JpcHRVUkwoJ29wdGlvbnMn KQ0KKwlvcHRpb25zID0gc2VsZi5HZXRBYnNvbHV0ZVNjcmlwdFVSTChtbV9j ZmcuT1BUSU9OU19DR0kpDQogICAgICAgICBpZiBvYnNjdXJlZDoNCiAgICAg ICAgICAgICB0cmVhdGVkID0gVXRpbHMuT2JzY3VyZUVtYWlsKGFkZHIsIGZv cl90ZXh0PTApDQogICAgICAgICBlbHNlOg0KQEAgLTM1OSw3ICszNTksNyBA QA0KICAgICAgICAgICAgICIgY292ZXJpbmcgbWVtYmVycyBhbmQgb3V0c2lk ZXJzLiINCiAgICAgICAgICAgICAnICAoU2VlIGFsc28gdGhlIDxhIGhyZWY9 IiVzIj5BcmNoaXZhbCBPcHRpb25zIHNlY3Rpb248L2E+IGZvcicNCiAgICAg ICAgICAgICAnIHNlcGFyYXRlIGFyY2hpdmUtcHJpdmFjeSBzZXR0aW5ncy4p Jw0KLSAgICAgICAgICAgICUgb3MucGF0aC5qb2luKHNlbGYuR2V0UmVsYXRp dmVTY3JpcHRVUkwoJ2FkbWluJyksICdhcmNoaXZlJyksDQorICAgICAgICAg ICAgJSBvcy5wYXRoLmpvaW4oc2VsZi5HZXRSZWxhdGl2ZVNjcmlwdFVSTCht bV9jZmcuQURNSU5fQ0dJKSwgJ2FyY2hpdmUnKSwNCiANCiAJICAgICJTdWJz Y3JpYmluZyIsDQogDQpkaWZmIC1icnUgLXggQ1ZTIG1haWxtYW4ub3JpZy9N YWlsbWFuL01ha2VmaWxlLmluIG1haWxtYW4vTWFpbG1hbi9NYWtlZmlsZS5p bg0KLS0tIG1haWxtYW4ub3JpZy9NYWlsbWFuL01ha2VmaWxlLmluCVNhdCBB dWcgIDggMTQ6MTY6MzYgMTk5OA0KKysrIG1haWxtYW4vTWFpbG1hbi9NYWtl ZmlsZS5pbglGcmkgQXVnIDIxIDE0OjM5OjE2IDE5OTgNCkBAIC04Myw3ICs4 Myw3IEBADQogCWRvbmUNCiANCiBkaXN0Y2xlYW46DQotCS1ybSBNYWtlZmls ZSBEZWZhdWx0cy5weQ0KKwktcm0gTWFrZWZpbGUgRGVmYXVsdHMucHkgbW1f Y2ZnLnB5DQogCWZvciBkIGluICQoU1VCRElSUyk7IFwNCiAJZG8gXA0KIAkg ICAgKGNkICQkZDsgJChNQUtFKSBkaXN0Y2xlYW4pOyBcDQpkaWZmIC1icnUg LXggQ1ZTIG1haWxtYW4ub3JpZy9NYWlsbWFuL091dGdvaW5nUXVldWUucHkg bWFpbG1hbi9NYWlsbWFuL091dGdvaW5nUXVldWUucHkNCi0tLSBtYWlsbWFu Lm9yaWcvTWFpbG1hbi9PdXRnb2luZ1F1ZXVlLnB5CVNhdCBBdWcgIDggMTQ6 MTY6MzkgMTk5OA0KKysrIG1haWxtYW4vTWFpbG1hbi9PdXRnb2luZ1F1ZXVl LnB5CUZyaSBBdWcgMjEgMTQ6NDE6NDYgMTk5OA0KQEAgLTIwLDcgKzIwLDE0 IEBADQogDQogVEVNUExBVEUgPSAibW1fcS4iDQogDQordHJ5Og0KKyAgICBp c1FtYWlsID0gbW1fY2ZnLlFNQUlMDQorZXhjZXB0Og0KKyAgICBpc1FtYWls ID0gMA0KKw0KIGRlZiBkZXF1ZXVlTWVzc2FnZShtc2cpOg0KKyAgICBpZiBp c1FtYWlsOg0KKwlyZXR1cm4NCiAgICAgaW1wb3J0IG9zDQogICAgIG9zLnVu bGluayhtc2cpDQogDQpAQCAtMzksNiArNDYsOCBAQA0KICAgICAgICAgDQog ICAgICAgICAgICAgDQogZGVmIGVucXVldWVNZXNzYWdlKHRoZV9zZW5kZXIs IHJlY2lwLCB0ZXh0KToNCisgICAgaWYgaXNRbWFpbDoNCisJcmV0dXJuICIi DQogICAgIHRlbXBmaWxlLnRlbXBkaXIgPSBtbV9jZmcuREFUQV9ESVINCiAg ICAgdGVtcGZpbGUudGVtcGxhdGUgPSBURU1QTEFURQ0KICAgICBmbmFtZSA9 IHRlbXBmaWxlLm1rdGVtcCgpDQpkaWZmIC1icnUgLXggQ1ZTIG1haWxtYW4u b3JpZy9NYWlsbWFuL1V0aWxzLnB5IG1haWxtYW4vTWFpbG1hbi9VdGlscy5w eQ0KLS0tIG1haWxtYW4ub3JpZy9NYWlsbWFuL1V0aWxzLnB5CVNhdCBBdWcg IDggMTQ6MTY6NDYgMTk5OA0KKysrIG1haWxtYW4vTWFpbG1hbi9VdGlscy5w eQlTdW4gQXVnIDMwIDE2OjQ3OjEwIDE5OTgNCkBAIC0xOTQsNiArMTk0LDIx IEBADQogICAgICAgICBvcy5fZXhpdCgwKQ0KIA0KIGRlZiBUcnlTTVRQRGVs aXZlcnkocmVjaXBpZW50LCBzZW5kZXIsIHRleHQsIHF1ZXVlX2VudHJ5KToN CisgICAgaW1wb3J0IE91dGdvaW5nUXVldWUNCisgICAgaWYgdHlwZShtbV9j ZmcuU0VMRl9NQUlMRVIpID09IFN0cmluZ1R5cGU6DQorCWZyb20gdHlwZXMg aW1wb3J0ICoNCisJaWYgdHlwZShyZWNpcGllbnQpID09IFN0cmluZ1R5cGU6 DQorCSAgICB0b2MgPSByZWNpcGllbnQNCisJZWxzZToNCisJICAgIHRvYyA9 IHN0cmluZy5qb2luKHJlY2lwaWVudCwgJyAnKQ0KKwl0cnk6DQorCSAgICBw aXBlID0gb3MucG9wZW4oIiVzICVzIiAlIChtbV9jZmcuU0VMRl9NQUlMRVIp LCB0b2MpLCAidyIpDQorCSAgICBwaXBlLndyaXRlKHRleHQpDQorCSAgICBw aXBlLmNsb3NlKCkNCisJICAgIE91dGdvaW5nUXVldWUuZGVxdWV1ZU1lc3Nh Z2UocXVldWVfZW50cnkpDQorCWZpbmFsbHk6DQorCSAgICBwYXNzDQorICAg IGVsc2U6DQogICAgIGltcG9ydCBzeXMsIHNvY2tldA0KICAgICBpbXBvcnQg c210cGxpYg0KICAgICBpbXBvcnQgT3V0Z29pbmdRdWV1ZQ0KZGlmZiAtYnJ1 IC14IENWUyBtYWlsbWFuLm9yaWcvTWFpbG1hbi9tbV9jZmcucHkuaW4gbWFp bG1hbi9NYWlsbWFuL21tX2NmZy5weS5pbg0KLS0tIG1haWxtYW4ub3JpZy9N YWlsbWFuL21tX2NmZy5weS5pbglTYXQgQXVnICA4IDE0OjE2OjU0IDE5OTgN CisrKyBtYWlsbWFuL01haWxtYW4vbW1fY2ZnLnB5LmluCUZyaSBBdWcgMjEg MTU6MDE6NDkgMTk5OA0KQEAgLTUzLDcgKzUzLDkgQEANCiBNQUlMTUFOX09X TkVSICAgICA9ICdtYWlsbWFuLW93bmVyQCVzJyAlIERFRkFVTFRfSE9TVF9O QU1FDQogDQogUFVCTElDX0FSQ0hJVkVfVVJMID0gJy9waXBlcm1haWwnDQot UFJJVkFURV9BUkNISVZFX1VSTCA9ICcvbWFpbG1hbi9wcml2YXRlJw0KK1BS SVZBVEVfQVJDSElWRV9VUkwgPSAnL21haWxtYW4vcHJpdmF0ZUBDR0lFWFRA Jw0KKw0KK1FNQUlMICAgICAgICAgICAgICA9IDANCiANCiAjIE5vdGUgLSBp ZiB5b3UncmUgbG9va2luZyBmb3Igc29tZXRoaW5nIHRoYXQgaXMgaW1wb3J0 ZWQgZnJvbSBtbV9jZmcsIGJ1dCB5b3UNCiAjIGRpZG4ndCBmaW5kIGl0IGFi b3ZlLCBpdCdzIHByb2JhYmx5IGluIERlZmF1bHRzLnB5Lg0KZGlmZiAtYnJ1 IC14IENWUyBtYWlsbWFuLm9yaWcvYmluL2NvbnZlcnRfbGlzdCBtYWlsbWFu L2Jpbi9jb252ZXJ0X2xpc3QNCi0tLSBtYWlsbWFuLm9yaWcvYmluL2NvbnZl cnRfbGlzdAlTdW4gQXVnIDMwIDE1OjU1OjU1IDE5OTgNCisrKyBtYWlsbWFu L2Jpbi9jb252ZXJ0X2xpc3QJRnJpIEF1ZyAyMSAxNDo1MToxNCAxOTk4DQpA QCAtODQsNyArODQsNyBAQA0KICAgICBkaWN0ID0geydsaXN0bmFtZScgICAg OiBtbC5yZWFsX25hbWUsDQogICAgICAgICAgICAgJ2xpc3Rob3N0JyAgICA6 IG1sLmhvc3RfbmFtZSwNCiAgICAgICAgICAgICAnbGlzdGFkZHInICAgIDog bWwuR2V0TGlzdEVtYWlsKCksDQotICAgICAgICAgICAgJ2xpc3RpbmZvX3Vy bCc6IG1sLkdldEFic29sdXRlU2NyaXB0VVJMKCdsaXN0aW5mbycpLA0KKyAg ICAgICAgICAgICdsaXN0aW5mb191cmwnOiBtbC5HZXRBYnNvbHV0ZVNjcmlw dFVSTChtbV9jZmcuTElTVElORk9fQ0dJKSwNCiAgICAgICAgICAgICAncmVx dWVzdGFkZHInIDogbWwuR2V0UmVxdWVzdEVtYWlsKCksDQogICAgICAgICAg ICAgJ2FkbWluYWRkcicgICA6IG1sLkdldEFkbWluRW1haWwoKSwNCiAgICAg ICAgICAgICAndmVyc2lvbicgICAgIDogTWFpbG1hbi5tbV9jZmcuVkVSU0lP TiwNCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5vcmlnL2Jpbi9uZXdsaXN0 IG1haWxtYW4vYmluL25ld2xpc3QNCi0tLSBtYWlsbWFuLm9yaWcvYmluL25l d2xpc3QJU2F0IEF1ZyAgOCAxNDoxODo0OCAxOTk4DQorKysgbWFpbG1hbi9i aW4vbmV3bGlzdAlGcmkgQXVnIDIxIDE0OjUyOjQzIDE5OTgNCkBAIC0xMjAs OCArMTIwLDggQEANCiAgICAgICAgICduZXdsaXN0LnR4dCcsDQogICAgICAg ICB7J2xpc3RuYW1lJyAgICA6IGxpc3RfbmFtZSwNCiAgICAgICAgICAncGFz c3dvcmQnICAgIDogbGlzdF9wdywgDQotICAgICAgICAgJ2FkbWluX3VybCcg ICA6IG5ld2xpc3QuR2V0QWJzb2x1dGVTY3JpcHRVUkwoJ2FkbWluJyksIA0K LSAgICAgICAgICdsaXN0aW5mb191cmwnOiBuZXdsaXN0LkdldEFic29sdXRl U2NyaXB0VVJMKCdsaXN0aW5mbycpLA0KKyAgICAgICAgICdhZG1pbl91cmwn ICAgOiBuZXdsaXN0LkdldEFic29sdXRlU2NyaXB0VVJMKG1tX2NmZy5BRE1J Tl9DR0kpLCANCisgICAgICAgICAnbGlzdGluZm9fdXJsJzogbmV3bGlzdC5H ZXRBYnNvbHV0ZVNjcmlwdFVSTChtbV9jZmcuTElTVElORk9fQ0dJKSwNCiAg ICAgICAgICAncmVxdWVzdGFkZHInIDogIiVzLXJlcXVlc3RAJXMiICUgKGxp c3RfbmFtZSwgbmV3bGlzdC5ob3N0X25hbWUpLA0KICAgICAgICAgICdob3N0 bmFtZScgICAgOiBuZXdsaXN0Lmhvc3RfbmFtZSwNCiAgICAgICAgICB9KQ0K ZGlmZiAtYnJ1IC14IENWUyBtYWlsbWFuLm9yaWcvY29uZmlndXJlIG1haWxt YW4vY29uZmlndXJlDQotLS0gbWFpbG1hbi5vcmlnL2NvbmZpZ3VyZQlTYXQg QXVnICA4IDE0OjE1OjI1IDE5OTgNCisrKyBtYWlsbWFuL2NvbmZpZ3VyZQlG cmkgQXVnIDIxIDE1OjIwOjIxIDE5OTgNCkBAIC0xLDYgKzEsNiBAQA0KICMh IC9iaW4vc2gNCiANCi0jIEZyb20gY29uZmlndXJlLmluIFJldmlzaW9uOiAx LjIwIA0KKyMgRnJvbSBjb25maWd1cmUuaW4gUmV2aXNpb246IDEuMjEgDQog DQogIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFi bGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLg0KICMgR2VuZXJhdGVkIGF1dG9t YXRpY2FsbHkgdXNpbmcgYXV0b2NvbmYgdmVyc2lvbiAyLjEyIA0KQEAgLTI1 LDYgKzI1LDkgQEANCiBhY19oZWxwPSIkYWNfaGVscA0KIA0KIAktLXdpdGgt Y2dpLWdpZCAgCXNwZWNpZnkgR0lEIENHSSBwcm9ncmFtcyBydW4gYXMiDQor YWNfaGVscD0iJGFjX2hlbHANCisNCisJLS13aXRoLWNnaS1leHQgICAgICAg IHNwZWNpZnkgZXh0ZW5zaW9ucyBvZiBDR0kgcHJvZ3JhbXMiDQogDQogIyBJ bml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLg0KICMg VGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRp b25zLCB3aXRoDQpAQCAtNTQ1LDcgKzU0OCw3IEBADQogDQogIyBDaGVjayBm b3IgUHl0aG9uISAgQmV0dGVyIGJlIGZvdW5kIG9uICRQQVRIDQogZWNobyAk YWNfbiAiY2hlY2tpbmcgZm9yIC0td2l0aC1weXRob24iIi4uLiAkYWNfYyIg MT4mNg0KLWVjaG8gImNvbmZpZ3VyZTo1NDk6IGNoZWNraW5nIGZvciAtLXdp dGgtcHl0aG9uIiA+JjUNCitlY2hvICJjb25maWd1cmU6NTUyOiBjaGVja2lu ZyBmb3IgLS13aXRoLXB5dGhvbiIgPiY1DQogIyBDaGVjayB3aGV0aGVyIC0t d2l0aC1weXRob24gb3IgLS13aXRob3V0LXB5dGhvbiB3YXMgZ2l2ZW4uDQog aWYgdGVzdCAiJHt3aXRoX3B5dGhvbitzZXR9IiA9IHNldDsgdGhlbg0KICAg d2l0aHZhbD0iJHdpdGhfcHl0aG9uIg0KQEAgLTU1OSw3ICs1NjIsNyBAQA0K IAkjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInB5dGhvbiIsIHNvIGl0 IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuDQogc2V0IGR1bW15 IHB5dGhvbjsgYWNfd29yZD0kMg0KIGVjaG8gJGFjX24gImNoZWNraW5nIGZv ciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmlndXJl OjU2MzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUNCitlY2hvICJjb25m aWd1cmU6NTY2OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQ0KIGlmIGV2 YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX3dpdGhfcHl0aG9u JytzZXR9J2BcIiA9IHNldCI7IHRoZW4NCiAgIGVjaG8gJGFjX24gIihjYWNo ZWQpICRhY19jIiAxPiY2DQogZWxzZQ0KQEAgLTU5MSw3ICs1OTQsNyBAQA0K IGZpDQogDQogZWNobyAkYWNfbiAiY2hlY2tpbmcgUHl0aG9uIGludGVycHJl dGVyIiIuLi4gJGFjX2MiIDE+JjYNCi1lY2hvICJjb25maWd1cmU6NTk1OiBj aGVja2luZyBQeXRob24gaW50ZXJwcmV0ZXIiID4mNQ0KK2VjaG8gImNvbmZp Z3VyZTo1OTg6IGNoZWNraW5nIFB5dGhvbiBpbnRlcnByZXRlciIgPiY1DQog aWYgdGVzdCAhIC14ICR3aXRoX3B5dGhvbg0KIHRoZW4NCiAgICAgeyBlY2hv ICJjb25maWd1cmU6IGVycm9yOiANCkBAIC02MzUsNyArNjM4LDcgQEANCiAj IFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRo ZSBub25leGlzdGVudCBncm91cCAic3RhZmYiDQogIyAuL2luc3RhbGwsIHdo aWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAu L2luc3RhbGwuc2guDQogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGEgQlNE IGNvbXBhdGlibGUgaW5zdGFsbCIiLi4uICRhY19jIiAxPiY2DQotZWNobyAi Y29uZmlndXJlOjYzOTogY2hlY2tpbmcgZm9yIGEgQlNEIGNvbXBhdGlibGUg aW5zdGFsbCIgPiY1DQorZWNobyAiY29uZmlndXJlOjY0MjogY2hlY2tpbmcg Zm9yIGEgQlNEIGNvbXBhdGlibGUgaW5zdGFsbCIgPiY1DQogaWYgdGVzdCAt eiAiJElOU1RBTEwiOyB0aGVuDQogaWYgZXZhbCAidGVzdCBcImBlY2hvICck Jyd7J2FjX2N2X3BhdGhfaW5zdGFsbCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVu DQogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KQEAgLTY4 NSw3ICs2ODgsNyBAQA0KIHRlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElO U1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnDQogDQogZWNobyAkYWNf biAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJHtNQUtF fSIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmlndXJlOjY4OTogY2hl Y2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJHtNQUtFfSIgPiY1 DQorZWNobyAiY29uZmlndXJlOjY5MjogY2hlY2tpbmcgd2hldGhlciAke01B S0UtbWFrZX0gc2V0cyBcJHtNQUtFfSIgPiY1DQogc2V0IGR1bW15ICR7TUFL RS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICd5JS4vKy0lX19w XyUnYA0KIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9n X21ha2VfJHthY19tYWtlfV9zZXQnK3NldH0nYFwiID0gc2V0IjsgdGhlbg0K ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYNCkBAIC03MTQs NyArNzE3LDcgQEANCiANCiAjIEZpbmQgY29tcGlsZXIsIGFsbG93IGFsdGVy bmF0aXZlcyB0byBnY2MNCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgLS13 aXRob3V0LWdjYyIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmlndXJl OjcxODogY2hlY2tpbmcgZm9yIC0td2l0aG91dC1nY2MiID4mNQ0KK2VjaG8g ImNvbmZpZ3VyZTo3MjE6IGNoZWNraW5nIGZvciAtLXdpdGhvdXQtZ2NjIiA+ JjUNCiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdjYyBvciAtLXdpdGhvdXQt Z2NjIHdhcyBnaXZlbi4NCiBpZiB0ZXN0ICIke3dpdGhfZ2NjK3NldH0iID0g c2V0OyB0aGVuDQogICB3aXRodmFsPSIkd2l0aF9nY2MiDQpAQCAtNzQzLDcg Kzc0Niw3IEBADQogIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2Mi LCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLg0KIHNl dCBkdW1teSBnY2M7IGFjX3dvcmQ9JDINCiBlY2hvICRhY19uICJjaGVja2lu ZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNg0KLWVjaG8gImNvbmZp Z3VyZTo3NDc6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1DQorZWNobyAi Y29uZmlndXJlOjc1MDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUNCiBp ZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19DQycrc2V0 fSdgXCIgPSBzZXQiOyB0aGVuDQogICBlY2hvICRhY19uICIoY2FjaGVkKSAk YWNfYyIgMT4mNg0KIGVsc2UNCkBAIC03NzIsNyArNzc1LDcgQEANCiAgICMg RXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUg YSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLg0KIHNldCBkdW1teSBjYzsgYWNf d29yZD0kMg0KIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIi Li4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmlndXJlOjc3NjogY2hlY2tp bmcgZm9yICRhY193b3JkIiA+JjUNCitlY2hvICJjb25maWd1cmU6Nzc5OiBj aGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQ0KIGlmIGV2YWwgInRlc3QgXCJg ZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRo ZW4NCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2DQogZWxz ZQ0KQEAgLTgyMCw3ICs4MjMsNyBAQA0KIGZpDQogDQogZWNobyAkYWNfbiAi Y2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1Mg JExERkxBR1MpIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYNCi1lY2hvICJjb25m aWd1cmU6ODI0OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgk Q0MgJENGTEFHUyAkTERGTEFHUykgd29ya3MiID4mNQ0KK2VjaG8gImNvbmZp Z3VyZTo4Mjc6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRD QyAkQ0ZMQUdTICRMREZMQUdTKSB3b3JrcyIgPiY1DQogDQogYWNfZXh0PWMN CiAjIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBl dGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuDQpAQCAtODMwLDExICs4 MzMsMTEgQEANCiBjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jv c3MNCiANCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GDQotI2xpbmUg ODM0ICJjb25maWd1cmUiDQorI2xpbmUgODM3ICJjb25maWd1cmUiDQogI2lu Y2x1ZGUgImNvbmZkZWZzLmgiDQogbWFpbigpe3JldHVybigwKTt9DQogRU9G DQotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo4Mzg6IFwiJGFjX2xpbmtc IikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBj b25mdGVzdDsgdGhlbg0KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODQx OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9 ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4NCiAgIGFjX2N2X3Byb2dfY2Nf d29ya3M9eWVzDQogICAjIElmIHdlIGNhbid0IHJ1biBhIHRyaXZpYWwgcHJv Z3JhbSwgd2UgYXJlIHByb2JhYmx5IHVzaW5nIGEgY3Jvc3MgY29tcGlsZXIu DQogICBpZiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4N CkBAIC04NTQsMTIgKzg1NywxMiBAQA0KICAgeyBlY2hvICJjb25maWd1cmU6 IGVycm9yOiBpbnN0YWxsYXRpb24gb3IgY29uZmlndXJhdGlvbiBwcm9ibGVt OiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMuIiAxPiYy OyBleGl0IDE7IH0NCiBmaQ0KIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRo ZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSBpcyBh IGNyb3NzLWNvbXBpbGVyIiIuLi4gJGFjX2MiIDE+JjYNCi1lY2hvICJjb25m aWd1cmU6ODU4OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgk Q0MgJENGTEFHUyAkTERGTEFHUykgaXMgYSBjcm9zcy1jb21waWxlciIgPiY1 DQorZWNobyAiY29uZmlndXJlOjg2MTogY2hlY2tpbmcgd2hldGhlciB0aGUg QyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIGlzIGEgY3Jvc3Mt Y29tcGlsZXIiID4mNQ0KIGVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19j cm9zcyIgMT4mNg0KIGNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19j cm9zcw0KIA0KIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJl IHVzaW5nIEdOVSBDIiIuLi4gJGFjX2MiIDE+JjYNCi1lY2hvICJjb25maWd1 cmU6ODYzOiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQyIg PiY1DQorZWNobyAiY29uZmlndXJlOjg2NjogY2hlY2tpbmcgd2hldGhlciB3 ZSBhcmUgdXNpbmcgR05VIEMiID4mNQ0KIGlmIGV2YWwgInRlc3QgXCJgZWNo byAnJCcneydhY19jdl9wcm9nX2djYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVu DQogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KIGVsc2UN CkBAIC04NjgsNyArODcxLDcgQEANCiAgIHllczsNCiAjZW5kaWYNCiBFT0YN Ci1pZiB7IGFjX3RyeT0nJHtDQy1jY30gLUUgY29uZnRlc3QuYyc7IHsgKGV2 YWwgZWNobyBjb25maWd1cmU6ODcyOiBcIiRhY190cnlcIikgMT4mNTsgKGV2 YWwgJGFjX3RyeSkgMj4mNTsgfTsgfSB8IGVncmVwIHllcyA+L2Rldi9udWxs IDI+JjE7IHRoZW4NCitpZiB7IGFjX3RyeT0nJHtDQy1jY30gLUUgY29uZnRl c3QuYyc7IHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODc1OiBcIiRhY190cnlc IikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfTsgfSB8IGVncmVwIHll cyA+L2Rldi9udWxsIDI+JjE7IHRoZW4NCiAgIGFjX2N2X3Byb2dfZ2NjPXll cw0KIGVsc2UNCiAgIGFjX2N2X3Byb2dfZ2NjPW5vDQpAQCAtODgzLDcgKzg4 Niw3IEBADQogICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyINCiAgIENGTEFH Uz0NCiAgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgJHtDQy1jY30g YWNjZXB0cyAtZyIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmlndXJl Ojg4NzogY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBhY2NlcHRzIC1nIiA+ JjUNCitlY2hvICJjb25maWd1cmU6ODkwOiBjaGVja2luZyB3aGV0aGVyICR7 Q0MtY2N9IGFjY2VwdHMgLWciID4mNQ0KIGlmIGV2YWwgInRlc3QgXCJgZWNo byAnJCcneydhY19jdl9wcm9nX2NjX2cnK3NldH0nYFwiID0gc2V0IjsgdGhl bg0KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYNCiBlbHNl DQpAQCAtOTMxLDcgKzkzNCw3IEBADQogIyBQdWxsIHRoZSBoYXNoIG1hcmsg b3V0IG9mIHRoZSBtYWNybyBjYWxsIHRvIGF2b2lkIG00IHByb2JsZW1zLg0K IGFjX21zZz0id2hldGhlciAjISB3b3JrcyBpbiBzaGVsbCBzY3JpcHRzIg0K IGVjaG8gJGFjX24gImNoZWNraW5nICRhY19tc2ciIi4uLiAkYWNfYyIgMT4m Ng0KLWVjaG8gImNvbmZpZ3VyZTo5MzU6IGNoZWNraW5nICRhY19tc2ciID4m NQ0KK2VjaG8gImNvbmZpZ3VyZTo5Mzg6IGNoZWNraW5nICRhY19tc2ciID4m NQ0KIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9zeXNfaW50 ZXJwcmV0ZXInK3NldH0nYFwiID0gc2V0IjsgdGhlbg0KICAgZWNobyAkYWNf biAiKGNhY2hlZCkgJGFjX2MiIDE+JjYNCiBlbHNlDQpAQCAtOTY1LDcgKzk2 OCw3IEBADQogDQogIyBHcm91cCBgbWFpbG1hbicgbXVzdCBleGlzdA0KIGVj aG8gJGFjX24gImNoZWNraW5nIGZvciBtYWlsbWFuIEdJRCIiLi4uICRhY19j IiAxPiY2DQotZWNobyAiY29uZmlndXJlOjk2OTogY2hlY2tpbmcgZm9yIG1h aWxtYW4gR0lEIiA+JjUNCitlY2hvICJjb25maWd1cmU6OTcyOiBjaGVja2lu ZyBmb3IgbWFpbG1hbiBHSUQiID4mNQ0KIA0KICMgTUFJTE1BTl9HSUQgPT0g dmFyaWFibGUgbmFtZQ0KICMgbWFpbG1hbiA9PSB1c2VyIGlkIHRvIGNoZWNr IGZvcg0KQEAgLTEwMTcsNyArMTAyMCw3IEBADQogZmkNCiANCiBlY2hvICRh Y19uICJjaGVja2luZyBwZXJtaXNzaW9ucyBvbiAkcHJlZml4Y2hlY2siIi4u LiAkYWNfYyIgMT4mNg0KLWVjaG8gImNvbmZpZ3VyZToxMDIxOiBjaGVja2lu ZyBwZXJtaXNzaW9ucyBvbiAkcHJlZml4Y2hlY2siID4mNQ0KK2VjaG8gImNv bmZpZ3VyZToxMDI0OiBjaGVja2luZyBwZXJtaXNzaW9ucyBvbiAkcHJlZml4 Y2hlY2siID4mNQ0KIA0KIGNhdCA+IGNvbmZ0ZXN0LnB5IDw8RU9GDQogaW1w b3J0IG9zLCBncnAsIHN0cmluZw0KQEAgLTEwNjMsNyArMTA2Niw3IEBADQog IyBOb3cgZmluZCB0aGUgVUlEcyBhbmQgR0lEcw0KICMgU3VwcG9ydCAtLXdp dGgtbWFpbC1naWQgYW5kIC0td2l0aC1jZ2ktZ2lkDQogZWNobyAkYWNfbiAi Y2hlY2tpbmcgZm9yIG1haWwgd3JhcHBlciBHSUQiIi4uLiAkYWNfYyIgMT4m Ng0KLWVjaG8gImNvbmZpZ3VyZToxMDY3OiBjaGVja2luZyBmb3IgbWFpbCB3 cmFwcGVyIEdJRCIgPiY1DQorZWNobyAiY29uZmlndXJlOjEwNzA6IGNoZWNr aW5nIGZvciBtYWlsIHdyYXBwZXIgR0lEIiA+JjUNCiAjIENoZWNrIHdoZXRo ZXIgLS13aXRoLW1haWwtZ2lkIG9yIC0td2l0aG91dC1tYWlsLWdpZCB3YXMg Z2l2ZW4uDQogaWYgdGVzdCAiJHt3aXRoX21haWxfZ2lkK3NldH0iID0gc2V0 OyB0aGVuDQogICB3aXRodmFsPSIkd2l0aF9tYWlsX2dpZCINCkBAIC0xMDc1 LDcgKzEwNzgsNyBAQA0KICAgICBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQn J3snYWNfY3ZfZ3JvdXBfbWFpbCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuDQog ICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KIGVsc2UNCi0g ICAgICBhY19jdl9ncm91cF9tYWlsPSJvdGhlciBtYWlsIGRhZW1vbiINCisg ICAgICBhY19jdl9ncm91cF9tYWlsPSJub2ZpbGVzIG90aGVyIG1haWwgZGFl bW9uIg0KIGZpDQogDQogZWxzZQ0KQEAgLTExMjQsNyArMTEyNyw3IEBADQog DQogDQogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIENHSSB3cmFwcGVyIEdJ RCIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmlndXJlOjExMjg6IGNo ZWNraW5nIGZvciBDR0kgd3JhcHBlciBHSUQiID4mNQ0KK2VjaG8gImNvbmZp Z3VyZToxMTMxOiBjaGVja2luZyBmb3IgQ0dJIHdyYXBwZXIgR0lEIiA+JjUN CiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWNnaS1naWQgb3IgLS13aXRob3V0 LWNnaS1naWQgd2FzIGdpdmVuLg0KIGlmIHRlc3QgIiR7d2l0aF9jZ2lfZ2lk K3NldH0iID0gc2V0OyB0aGVuDQogICB3aXRodmFsPSIkd2l0aF9jZ2lfZ2lk Ig0KQEAgLTExODcsNiArMTE5MCwyNSBAQA0KICNNTV9GSU5EX1VTRVJfSUQo QUxJQVNfVUlELCBtYWlsbWFuLCBhbGlhc193cmFwcGVyKQ0KICNNTV9GSU5E X0dST1VQX0lEKEFMSUFTX0dJRCwgbWFpbCwgYWxpYXNfd3JhcHBlcikNCiAN CisjIENHSSBleHRlbnNpb24gY2hlY2tpbmcNCisNCitlY2hvICRhY19uICJj aGVja2luZyBmb3IgQ0dJIGV4dGVuc2lvbiIiLi4uICRhY19jIiAxPiY2DQor ZWNobyAiY29uZmlndXJlOjExOTc6IGNoZWNraW5nIGZvciBDR0kgZXh0ZW5z aW9uIiA+JjUNCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWNnaS1leHQgb3Ig LS13aXRob3V0LWNnaS1leHQgd2FzIGdpdmVuLg0KK2lmIHRlc3QgIiR7d2l0 aF9jZ2lfZXh0K3NldH0iID0gc2V0OyB0aGVuDQorICB3aXRodmFsPSIkd2l0 aF9jZ2lfZXh0Ig0KKyAgOg0KK2ZpDQorDQoraWYgdGVzdCAteiAiJHdpdGhf Y2dpX2V4dCINCit0aGVuDQorICAgIENHSUVYVD0nJw0KKyAgICB3aXRoX2Nn aV9leHQ9J25vJw0KK2Vsc2UNCisgICAgQ0dJRVhUPSR3aXRoX2NnaV9leHQN CitmaQ0KK2VjaG8gIiRhY190IiIkd2l0aF9jZ2lfZXh0IiAxPiY2DQorDQog IyBmaWd1cmUgb3V0IHRoZSBERUZBVUxUX0hPU1RfTkFNRSBhbmQgREVGQVVM VF9VUkwNCiANCiANCkBAIC0xMjE5LDE0ICsxMjQxLDE0IEBADQogJFBZVEhP TiBjb25mdGVzdC5weQ0KIA0KIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBk ZWZhdWx0IGZ1bGx5IHF1YWxpZmllZCBob3N0IG5hbWUiIi4uLiAkYWNfYyIg MT4mNg0KLWVjaG8gImNvbmZpZ3VyZToxMjIzOiBjaGVja2luZyBmb3IgZGVm YXVsdCBmdWxseSBxdWFsaWZpZWQgaG9zdCBuYW1lIiA+JjUNCitlY2hvICJj b25maWd1cmU6MTI0NTogY2hlY2tpbmcgZm9yIGRlZmF1bHQgZnVsbHkgcXVh bGlmaWVkIGhvc3QgbmFtZSIgPiY1DQogaWYgdGVzdCAteiAiJEZRRE4iDQog dGhlbg0KICAgICBGUUROPWBoZWFkIC0xIGNvbmZ0ZXN0Lm91dGANCiBmaQ0K IGVjaG8gIiRhY190IiIkRlFETiIgMT4mNg0KIGVjaG8gJGFjX24gImNoZWNr aW5nIGZvciBkZWZhdWx0IFVSTCBob3N0IGNvbXBvbmVudCIiLi4uICRhY19j IiAxPiY2DQotZWNobyAiY29uZmlndXJlOjEyMzA6IGNoZWNraW5nIGZvciBk ZWZhdWx0IFVSTCBob3N0IGNvbXBvbmVudCIgPiY1DQorZWNobyAiY29uZmln dXJlOjEyNTI6IGNoZWNraW5nIGZvciBkZWZhdWx0IFVSTCBob3N0IGNvbXBv bmVudCIgPiY1DQogaWYgdGVzdCAteiAiJFVSTCINCiB0aGVuDQogICAgIFVS TD1gdGFpbCAtMSBjb25mdGVzdC5vdXRgDQpAQCAtMTIzOCwxMiArMTI2MCwx MiBAQA0KIGZvciBhY19mdW5jIGluIHN0cmVycm9yDQogZG8NCiBlY2hvICRh Y19uICJjaGVja2luZyBmb3IgJGFjX2Z1bmMiIi4uLiAkYWNfYyIgMT4mNg0K LWVjaG8gImNvbmZpZ3VyZToxMjQyOiBjaGVja2luZyBmb3IgJGFjX2Z1bmMi ID4mNQ0KK2VjaG8gImNvbmZpZ3VyZToxMjY0OiBjaGVja2luZyBmb3IgJGFj X2Z1bmMiID4mNQ0KIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19j dl9mdW5jXyRhY19mdW5jJytzZXR9J2BcIiA9IHNldCI7IHRoZW4NCiAgIGVj aG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2DQogZWxzZQ0KICAgY2F0 ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRg0KLSNsaW5lIDEyNDcgImNvbmZp Z3VyZSINCisjbGluZSAxMjY5ICJjb25maWd1cmUiDQogI2luY2x1ZGUgImNv bmZkZWZzLmgiDQogLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHVi IG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLA0KICAgICB3 aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jKCk7IGJlbG93 LiAgKi8NCkBAIC0xMjY2LDcgKzEyODgsNyBAQA0KIA0KIDsgcmV0dXJuIDA7 IH0NCiBFT0YNCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEyNzA6IFwi JGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYg dGVzdCAtcyBjb25mdGVzdDsgdGhlbg0KK2lmIHsgKGV2YWwgZWNobyBjb25m aWd1cmU6MTI5MjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGlu aykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuDQogICBybSAt cmYgY29uZnRlc3QqDQogICBldmFsICJhY19jdl9mdW5jXyRhY19mdW5jPXll cyINCiBlbHNlDQpAQCAtMTI5Myw3ICsxMzE1LDcgQEANCiANCiAjIENoZWNr cyBmb3IgaGVhZGVyIGZpbGVzLg0KIGVjaG8gJGFjX24gImNoZWNraW5nIGhv dyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiIuLi4gJGFjX2MiIDE+JjYN Ci1lY2hvICJjb25maWd1cmU6MTI5NzogY2hlY2tpbmcgaG93IHRvIHJ1biB0 aGUgQyBwcmVwcm9jZXNzb3IiID4mNQ0KK2VjaG8gImNvbmZpZ3VyZToxMzE5 OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1 DQogIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9y eS4NCiBpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhl bg0KICAgQ1BQPQ0KQEAgLTEzMDgsMTMgKzEzMzAsMTMgQEANCiAgICMgT24g dGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29t cGlsZXIncyBwYXJzZXIsDQogICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLg0K ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRg0KLSNsaW5lIDEzMTIg ImNvbmZpZ3VyZSINCisjbGluZSAxMzM0ICJjb25maWd1cmUiDQogI2luY2x1 ZGUgImNvbmZkZWZzLmgiDQogI2luY2x1ZGUgPGFzc2VydC5oPg0KIFN5bnRh eCBFcnJvcg0KIEVPRg0KIGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNf ZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiDQoteyAoZXZhbCBlY2hv IGNvbmZpZ3VyZToxMzE4OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFj X3RyeSkgMj4mNTsgfQ0KK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MTM0MDog XCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0NCiBh Y19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dGANCiBpZiB0ZXN0 IC16ICIkYWNfZXJyIjsgdGhlbg0KICAgOg0KQEAgLTEzMjUsMTMgKzEzNDcs MTMgQEANCiAgIHJtIC1yZiBjb25mdGVzdCoNCiAgIENQUD0iJHtDQy1jY30g LUUgLXRyYWRpdGlvbmFsLWNwcCINCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19l eHQgPDxFT0YNCi0jbGluZSAxMzI5ICJjb25maWd1cmUiDQorI2xpbmUgMTM1 MSAiY29uZmlndXJlIg0KICNpbmNsdWRlICJjb25mZGVmcy5oIg0KICNpbmNs dWRlIDxhc3NlcnQuaD4NCiBTeW50YXggRXJyb3INCiBFT0YNCiBhY190cnk9 IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRl c3Qub3V0Ig0KLXsgKGV2YWwgZWNobyBjb25maWd1cmU6MTMzNTogXCIkYWNf dHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0NCit7IChldmFs IGVjaG8gY29uZmlndXJlOjEzNTc6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZh bCAkYWNfdHJ5KSAyPiY1OyB9DQogYWNfZXJyPWBncmVwIC12ICdeICorJyBj b25mdGVzdC5vdXRgDQogaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4NCiAg IDoNCkBAIC0xMzU0LDEyICsxMzc2LDEyIEBADQogZWNobyAiJGFjX3QiIiRD UFAiIDE+JjYNCiANCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgQU5TSSBD IGhlYWRlciBmaWxlcyIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmln dXJlOjEzNTg6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+ JjUNCitlY2hvICJjb25maWd1cmU6MTM4MDogY2hlY2tpbmcgZm9yIEFOU0kg QyBoZWFkZXIgZmlsZXMiID4mNQ0KIGlmIGV2YWwgInRlc3QgXCJgZWNobyAn JCcneydhY19jdl9oZWFkZXJfc3RkYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVu DQogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KIGVsc2UN CiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YNCi0jbGluZSAxMzYz ICJjb25maWd1cmUiDQorI2xpbmUgMTM4NSAiY29uZmlndXJlIg0KICNpbmNs dWRlICJjb25mZGVmcy5oIg0KICNpbmNsdWRlIDxzdGRsaWIuaD4NCiAjaW5j bHVkZSA8c3RkYXJnLmg+DQpAQCAtMTM2Nyw3ICsxMzg5LDcgQEANCiAjaW5j bHVkZSA8ZmxvYXQuaD4NCiBFT0YNCiBhY190cnk9IiRhY19jcHAgY29uZnRl c3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0Ig0KLXsgKGV2 YWwgZWNobyBjb25maWd1cmU6MTM3MTogXCIkYWNfdHJ5XCIpIDE+JjU7IChl dmFsICRhY190cnkpIDI+JjU7IH0NCit7IChldmFsIGVjaG8gY29uZmlndXJl OjEzOTM6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1 OyB9DQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXRgDQog aWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4NCiAgIHJtIC1yZiBjb25mdGVz dCoNCkBAIC0xMzg0LDcgKzE0MDYsNyBAQA0KIGlmIHRlc3QgJGFjX2N2X2hl YWRlcl9zdGRjID0geWVzOyB0aGVuDQogICAjIFN1bk9TIDQueCBzdHJpbmcu aCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuDQog Y2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRg0KLSNsaW5lIDEzODggImNv bmZpZ3VyZSINCisjbGluZSAxNDEwICJjb25maWd1cmUiDQogI2luY2x1ZGUg ImNvbmZkZWZzLmgiDQogI2luY2x1ZGUgPHN0cmluZy5oPg0KIEVPRg0KQEAg LTE0MDIsNyArMTQyNCw3IEBADQogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0 ZGMgPSB5ZXM7IHRoZW4NCiAgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMg bm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4NCiBjYXQgPiBj b25mdGVzdC4kYWNfZXh0IDw8RU9GDQotI2xpbmUgMTQwNiAiY29uZmlndXJl Ig0KKyNsaW5lIDE0MjggImNvbmZpZ3VyZSINCiAjaW5jbHVkZSAiY29uZmRl ZnMuaCINCiAjaW5jbHVkZSA8c3RkbGliLmg+DQogRU9GDQpAQCAtMTQyMyw3 ICsxNDQ1LDcgQEANCiAgIDoNCiBlbHNlDQogICBjYXQgPiBjb25mdGVzdC4k YWNfZXh0IDw8RU9GDQotI2xpbmUgMTQyNyAiY29uZmlndXJlIg0KKyNsaW5l IDE0NDkgImNvbmZpZ3VyZSINCiAjaW5jbHVkZSAiY29uZmRlZnMuaCINCiAj aW5jbHVkZSA8Y3R5cGUuaD4NCiAjZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8 PSAoYykgJiYgKGMpIDw9ICd6JykNCkBAIC0xNDM0LDcgKzE0NTYsNyBAQA0K IGV4aXQgKDApOyB9DQogDQogRU9GDQotaWYgeyAoZXZhbCBlY2hvIGNvbmZp Z3VyZToxNDM4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5r KSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3QgJiYgKC4vY29uZnRlc3Q7 IGV4aXQpIDI+L2Rldi9udWxsDQoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3Vy ZToxNDYwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAy PiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3QgJiYgKC4vY29uZnRlc3Q7IGV4 aXQpIDI+L2Rldi9udWxsDQogdGhlbg0KICAgOg0KIGVsc2UNCkBAIC0xNDYx LDE3ICsxNDgzLDE3IEBADQogZG8NCiBhY19zYWZlPWBlY2hvICIkYWNfaGRy IiB8IHNlZCAneSUuLystJV9fcF8lJ2ANCiBlY2hvICRhY19uICJjaGVja2lu ZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmln dXJlOjE0NjU6IGNoZWNraW5nIGZvciAkYWNfaGRyIiA+JjUNCitlY2hvICJj b25maWd1cmU6MTQ4NzogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQ0KIGlm IGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3Nh ZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbg0KICAgZWNobyAkYWNfbiAiKGNh Y2hlZCkgJGFjX2MiIDE+JjYNCiBlbHNlDQogICBjYXQgPiBjb25mdGVzdC4k YWNfZXh0IDw8RU9GDQotI2xpbmUgMTQ3MCAiY29uZmlndXJlIg0KKyNsaW5l IDE0OTIgImNvbmZpZ3VyZSINCiAjaW5jbHVkZSAiY29uZmRlZnMuaCINCiAj aW5jbHVkZSA8JGFjX2hkcj4NCiBFT0YNCiBhY190cnk9IiRhY19jcHAgY29u ZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0Ig0KLXsg KGV2YWwgZWNobyBjb25maWd1cmU6MTQ3NTogXCIkYWNfdHJ5XCIpIDE+JjU7 IChldmFsICRhY190cnkpIDI+JjU7IH0NCit7IChldmFsIGVjaG8gY29uZmln dXJlOjE0OTc6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAy PiY1OyB9DQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXRg DQogaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4NCiAgIHJtIC1yZiBjb25m dGVzdCoNCkBAIC0xNTAwLDEyICsxNTIyLDEyIEBADQogDQogIyBDaGVja3Mg Zm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFj dGVyaXN0aWNzLg0KIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciB1aWRfdCBp biBzeXMvdHlwZXMuaCIiLi4uICRhY19jIiAxPiY2DQotZWNobyAiY29uZmln dXJlOjE1MDQ6IGNoZWNraW5nIGZvciB1aWRfdCBpbiBzeXMvdHlwZXMuaCIg PiY1DQorZWNobyAiY29uZmlndXJlOjE1MjY6IGNoZWNraW5nIGZvciB1aWRf dCBpbiBzeXMvdHlwZXMuaCIgPiY1DQogaWYgZXZhbCAidGVzdCBcImBlY2hv ICckJyd7J2FjX2N2X3R5cGVfdWlkX3QnK3NldH0nYFwiID0gc2V0IjsgdGhl bg0KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYNCiBlbHNl DQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GDQotI2xpbmUgMTUw OSAiY29uZmlndXJlIg0KKyNsaW5lIDE1MzEgImNvbmZpZ3VyZSINCiAjaW5j bHVkZSAiY29uZmRlZnMuaCINCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQog RU9GDQpAQCAtMTUzNCw3ICsxNTU2LDcgQEANCiBmaQ0KIA0KIGVjaG8gJGFj X24gImNoZWNraW5nIHR5cGUgb2YgYXJyYXkgYXJndW1lbnQgdG8gZ2V0Z3Jv dXBzIiIuLi4gJGFjX2MiIDE+JjYNCi1lY2hvICJjb25maWd1cmU6MTUzODog Y2hlY2tpbmcgdHlwZSBvZiBhcnJheSBhcmd1bWVudCB0byBnZXRncm91cHMi ID4mNQ0KK2VjaG8gImNvbmZpZ3VyZToxNTYwOiBjaGVja2luZyB0eXBlIG9m IGFycmF5IGFyZ3VtZW50IHRvIGdldGdyb3VwcyIgPiY1DQogaWYgZXZhbCAi dGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfZ2V0Z3JvdXBzJytzZXR9 J2BcIiA9IHNldCI7IHRoZW4NCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRh Y19jIiAxPiY2DQogZWxzZQ0KQEAgLTE1NDIsNyArMTU2NCw3IEBADQogICBh Y19jdl90eXBlX2dldGdyb3Vwcz1jcm9zcw0KIGVsc2UNCiAgIGNhdCA+IGNv bmZ0ZXN0LiRhY19leHQgPDxFT0YNCi0jbGluZSAxNTQ2ICJjb25maWd1cmUi DQorI2xpbmUgMTU2OCAiY29uZmlndXJlIg0KICNpbmNsdWRlICJjb25mZGVm cy5oIg0KIA0KIC8qIFRoYW5rcyB0byBNaWtlIFJlbmRlbGwgZm9yIHRoaXMg dGVzdC4gICovDQpAQCAtMTU2Nyw3ICsxNTg5LDcgQEANCiB9DQogDQogRU9G DQotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNTcxOiBcIiRhY19saW5r XCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMg Y29uZnRlc3QgJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsDQor aWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNTkzOiBcIiRhY19saW5rXCIp IDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29u ZnRlc3QgJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsDQogdGhl bg0KICAgICBhY19jdl90eXBlX2dldGdyb3Vwcz1naWRfdA0KIGVsc2UNCkBA IC0xNTgxLDcgKzE2MDMsNyBAQA0KIA0KIGlmIHRlc3QgJGFjX2N2X3R5cGVf Z2V0Z3JvdXBzID0gY3Jvc3M7IHRoZW4NCiAgICAgICAgIGNhdCA+IGNvbmZ0 ZXN0LiRhY19leHQgPDxFT0YNCi0jbGluZSAxNTg1ICJjb25maWd1cmUiDQor I2xpbmUgMTYwNyAiY29uZmlndXJlIg0KICNpbmNsdWRlICJjb25mZGVmcy5o Ig0KICNpbmNsdWRlIDx1bmlzdGQuaD4NCiBFT0YNCkBAIC0xNjA3LDEyICsx NjI5LDEyIEBADQogDQogIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25z Lg0KIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciB2cHJpbnRmIiIuLi4gJGFj X2MiIDE+JjYNCi1lY2hvICJjb25maWd1cmU6MTYxMTogY2hlY2tpbmcgZm9y IHZwcmludGYiID4mNQ0KK2VjaG8gImNvbmZpZ3VyZToxNjMzOiBjaGVja2lu ZyBmb3IgdnByaW50ZiIgPiY1DQogaWYgZXZhbCAidGVzdCBcImBlY2hvICck Jyd7J2FjX2N2X2Z1bmNfdnByaW50Zicrc2V0fSdgXCIgPSBzZXQiOyB0aGVu DQogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNg0KIGVsc2UN CiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YNCi0jbGluZSAxNjE2 ICJjb25maWd1cmUiDQorI2xpbmUgMTYzOCAiY29uZmlndXJlIg0KICNpbmNs dWRlICJjb25mZGVmcy5oIg0KIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5l IF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywN CiAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciB2cHJpbnRmKCk7 IGJlbG93LiAgKi8NCkBAIC0xNjM1LDcgKzE2NTcsNyBAQA0KIA0KIDsgcmV0 dXJuIDA7IH0NCiBFT0YNCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE2 Mzk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7 IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbg0KK2lmIHsgKGV2YWwgZWNo byBjb25maWd1cmU6MTY2MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAk YWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuDQog ICBybSAtcmYgY29uZnRlc3QqDQogICBldmFsICJhY19jdl9mdW5jX3Zwcmlu dGY9eWVzIg0KIGVsc2UNCkBAIC0xNjU5LDEyICsxNjgxLDEyIEBADQogDQog aWYgdGVzdCAiJGFjX2N2X2Z1bmNfdnByaW50ZiIgIT0geWVzOyB0aGVuDQog ZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIF9kb3BybnQiIi4uLiAkYWNfYyIg MT4mNg0KLWVjaG8gImNvbmZpZ3VyZToxNjYzOiBjaGVja2luZyBmb3IgX2Rv cHJudCIgPiY1DQorZWNobyAiY29uZmlndXJlOjE2ODU6IGNoZWNraW5nIGZv ciBfZG9wcm50IiA+JjUNCiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3sn YWNfY3ZfZnVuY19fZG9wcm50JytzZXR9J2BcIiA9IHNldCI7IHRoZW4NCiAg IGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2DQogZWxzZQ0KICAg Y2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRg0KLSNsaW5lIDE2NjggImNv bmZpZ3VyZSINCisjbGluZSAxNjkwICJjb25maWd1cmUiDQogI2luY2x1ZGUg ImNvbmZkZWZzLmgiDQogLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19z dHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLA0KICAg ICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIF9kb3BybnQoKTsgYmVs b3cuICAqLw0KQEAgLTE2ODcsNyArMTcwOSw3IEBADQogDQogOyByZXR1cm4g MDsgfQ0KIEVPRg0KLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTY5MTog XCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAm JiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuDQoraWYgeyAoZXZhbCBlY2hvIGNv bmZpZ3VyZToxNzEzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19s aW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4NCiAgIHJt IC1yZiBjb25mdGVzdCoNCiAgIGV2YWwgImFjX2N2X2Z1bmNfX2RvcHJudD15 ZXMiDQogZWxzZQ0KQEAgLTE4NzEsNiArMTg5Myw3IEBADQogcyVATUFJTE1B Tl9HSURAJSRNQUlMTUFOX0dJRCVnDQogcyVATUFJTF9HSURAJSRNQUlMX0dJ RCVnDQogcyVAQ0dJX0dJREAlJENHSV9HSUQlZw0KK3MlQENHSUVYVEAlJENH SUVYVCVnDQogcyVARlFETkAlJEZRRE4lZw0KIHMlQFVSTEAlJFVSTCVnDQog cyVAQ1BQQCUkQ1BQJWcNCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5vcmln L2NvbmZpZ3VyZS5pbiBtYWlsbWFuL2NvbmZpZ3VyZS5pbg0KLS0tIG1haWxt YW4ub3JpZy9jb25maWd1cmUuaW4JU2F0IEF1ZyAgOCAxNDoxNToyOCAxOTk4 DQorKysgbWFpbG1hbi9jb25maWd1cmUuaW4JRnJpIEF1ZyAyMSAxNToyMDox NSAxOTk4DQpAQCAtMjEzLDcgKzIxMyw3IEBADQogaWYgdGVzdCAteiAiJHdp dGhfbWFpbF9naWQiDQogdGhlbg0KICAgICBBQ19DQUNIRV9WQUwoYWNfY3Zf Z3JvdXBfbWFpbCwgW2RubA0KLSAgICBhY19jdl9ncm91cF9tYWlsPSJvdGhl ciBtYWlsIGRhZW1vbiJdKQ0KKyAgICBhY19jdl9ncm91cF9tYWlsPSJub2Zp bGVzIG90aGVyIG1haWwgZGFlbW9uIl0pDQogZWxzZQ0KICAgICBhY19jdl9n cm91cF9tYWlsPSR3aXRoX21haWxfZ2lkDQogZmkNCkBAIC0yNTUsNiArMjU1 LDIwIEBADQogDQogI01NX0ZJTkRfVVNFUl9JRChBTElBU19VSUQsIG1haWxt YW4sIGFsaWFzX3dyYXBwZXIpDQogI01NX0ZJTkRfR1JPVVBfSUQoQUxJQVNf R0lELCBtYWlsLCBhbGlhc193cmFwcGVyKQ0KKw0KKyMgQ0dJIGV4dGVuc2lv biBjaGVja2luZw0KK0FDX1NVQlNUKENHSUVYVCkNCitBQ19NU0dfQ0hFQ0tJ TkcoZm9yIENHSSBleHRlbnNpb24pDQorQUNfQVJHX1dJVEgoY2dpLWV4dCwg Ww0KKwktLXdpdGgtY2dpLWV4dCAgICAgICAgc3BlY2lmeSBleHRlbnNpb25z IG9mIENHSSBwcm9ncmFtc10pDQoraWYgdGVzdCAteiAiJHdpdGhfY2dpX2V4 dCINCit0aGVuDQorICAgIENHSUVYVD0nJw0KKyAgICB3aXRoX2NnaV9leHQ9 J25vJw0KK2Vsc2UNCisgICAgQ0dJRVhUPSR3aXRoX2NnaV9leHQNCitmaQ0K K0FDX01TR19SRVNVTFQoJHdpdGhfY2dpX2V4dCkNCiANCiAjIGZpZ3VyZSBv dXQgdGhlIERFRkFVTFRfSE9TVF9OQU1FIGFuZCBERUZBVUxUX1VSTA0KIEFD X1NVQlNUKEZRRE4pDQpkaWZmIC1icnUgLXggQ1ZTIG1haWxtYW4ub3JpZy9j cm9uL01ha2VmaWxlLmluIG1haWxtYW4vY3Jvbi9NYWtlZmlsZS5pbg0KLS0t IG1haWxtYW4ub3JpZy9jcm9uL01ha2VmaWxlLmluCVNhdCBBdWcgIDggMTQ6 MTg6NTMgMTk5OA0KKysrIG1haWxtYW4vY3Jvbi9NYWtlZmlsZS5pbglGcmkg QXVnIDIxIDE0OjU1OjA0IDE5OTgNCkBAIC02Nyw0ICs2Nyw0IEBADQogY2xl YW46DQogDQogZGlzdGNsZWFuOg0KLQktcm0gTWFrZWZpbGUNCisJLXJtIE1h a2VmaWxlIGNyb250YWIuaW4NCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5v cmlnL3NjcmlwdHMvTWFrZWZpbGUuaW4gbWFpbG1hbi9zY3JpcHRzL01ha2Vm aWxlLmluDQotLS0gbWFpbG1hbi5vcmlnL3NjcmlwdHMvTWFrZWZpbGUuaW4J U2F0IEF1ZyAgOCAxNDoxOTo1NCAxOTk4DQorKysgbWFpbG1hbi9zY3JpcHRz L01ha2VmaWxlLmluCUZyaSBBdWcgMjEgMTU6MTI6MzcgMTk5OA0KQEAgLTMx LDYgKzMxLDcgQEANCiBDQz0JCUBDQ0ANCiBDSE1PRD0gIAlAQ0hNT0RADQog SU5TVEFMTD0JQElOU1RBTExADQorQ0dJRVhUPQkJQENHSUVYVEANCiANCiBE RUZTPSAgIAlAREVGU0ANCiANCmRpZmYgLWJydSAteCBDVlMgbWFpbG1hbi5v cmlnL3NyYy9NYWtlZmlsZS5pbiBtYWlsbWFuL3NyYy9NYWtlZmlsZS5pbg0K LS0tIG1haWxtYW4ub3JpZy9zcmMvTWFrZWZpbGUuaW4JU2F0IEF1ZyAgOCAx NDoyMDoxNiAxOTk4DQorKysgbWFpbG1hbi9zcmMvTWFrZWZpbGUuaW4JRnJp IEF1ZyAyMSAxNToyMTo1NiAxOTk4DQpAQCAtNDUsNyArNDUsNyBAQA0KIE9Q VD0JCUBPUFRADQogQ0ZMQUdTPQkJJChPUFQpICQoREVGUykNCiBDR0lESVI9 IAkkKGV4ZWNfcHJlZml4KS9jZ2ktYmluDQotQ0dJRVhUPQkJDQorQ0dJRVhU PQkJQENHSUVYVEANCiBNQUlMRElSPQkkKGV4ZWNfcHJlZml4KS9tYWlsDQog DQogU0hFTEw9CQkvYmluL3NoDQo= ---456965764-2069813568-904564521=:31564--