nmfirehose - a crude nmbug companion tool
authorJani Nikula <jani@nikula.org>
Sun, 11 Mar 2012 00:01:34 +0000 (02:01 +0200)
committerW. Trevor King <wking@tremily.us>
Fri, 7 Nov 2014 17:45:23 +0000 (09:45 -0800)
0d/3c0743ca80c89a76540b46f0fef7d7c7f0b8a1 [new file with mode: 0644]

diff --git a/0d/3c0743ca80c89a76540b46f0fef7d7c7f0b8a1 b/0d/3c0743ca80c89a76540b46f0fef7d7c7f0b8a1
new file mode 100644 (file)
index 0000000..aedcd1c
--- /dev/null
@@ -0,0 +1,237 @@
+Return-Path: <jani@nikula.org>\r
+X-Original-To: notmuch@notmuchmail.org\r
+Delivered-To: notmuch@notmuchmail.org\r
+Received: from localhost (localhost [127.0.0.1])\r
+       by olra.theworths.org (Postfix) with ESMTP id 21C82431FBC\r
+       for <notmuch@notmuchmail.org>; Sat, 10 Mar 2012 16:01:44 -0800 (PST)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: -0.69\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=-0.69 tagged_above=-999 required=5\r
+       tests=[RCVD_IN_DNSWL_LOW=-0.7, T_MIME_NO_TEXT=0.01] autolearn=disabled\r
+Received: from olra.theworths.org ([127.0.0.1])\r
+       by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
+       with ESMTP id DUvvKmH6+jNZ for <notmuch@notmuchmail.org>;\r
+       Sat, 10 Mar 2012 16:01:41 -0800 (PST)\r
+Received: from mail-lb0-f181.google.com (mail-lb0-f181.google.com\r
+       [209.85.217.181]) (using TLSv1 with cipher RC4-SHA (128/128 bits))\r
+       (No client certificate requested)\r
+       by olra.theworths.org (Postfix) with ESMTPS id 7A7C1431FAE\r
+       for <notmuch@notmuchmail.org>; Sat, 10 Mar 2012 16:01:41 -0800 (PST)\r
+Received: by lbok6 with SMTP id k6so897268lbo.26\r
+       for <notmuch@notmuchmail.org>; Sat, 10 Mar 2012 16:01:39 -0800 (PST)\r
+X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;\r
+       d=google.com; s=20120113;\r
+       h=from:to:subject:user-agent:date:message-id:mime-version\r
+       :content-type:x-gm-message-state;\r
+       bh=lV5I7y15GbGVscgaCQFk4KxInlQcQOlA2Ne9bzgF5s8=;\r
+       b=CxTMnEoH5/gEQYflCRKwxMBxPU7vRUbDyh03EQdohVikf17aTFMQdzT9rgIxGNCMVl\r
+       nBqP7HWyHoYbS8+LEnDaKLzsnQdckH/xkHJZoDl8FM4RNgzEHkwc/NLLsQcNSCuJXVUl\r
+       410zh11+u3Mp6CdU00yly7vSYzTxQ6i+sMC44Il/Kx2MKjWqkXYoFYRwPkMI2uvmSbOI\r
+       ZM4v8DFBiJw7rqOaziLOP6uNFHQ7t+Ro5pIsST1UUg4a4nR6ndg7pnETb5vv1PEGdYzb\r
+       C3IRGoZ/8PRiejWHCB/CYP7ATViD38YQ0ANrmq865KKhGSfwYmwD27EV7Qi+3MS+1Qe0\r
+       XGZQ==\r
+Received: by 10.112.25.225 with SMTP id f1mr2748196lbg.6.1331424099729;\r
+       Sat, 10 Mar 2012 16:01:39 -0800 (PST)\r
+Received: from localhost (dsl-hkibrasgw4-fe50f800-253.dhcp.inet.fi.\r
+       [84.248.80.253])\r
+       by mx.google.com with ESMTPS id a8sm12166918lba.15.2012.03.10.16.01.36\r
+       (version=SSLv3 cipher=OTHER); Sat, 10 Mar 2012 16:01:38 -0800 (PST)\r
+From: Jani Nikula <jani@nikula.org>\r
+To: notmuch@notmuchmail.org\r
+Subject: nmfirehose - a crude nmbug companion tool\r
+User-Agent: Notmuch/0.11.1+295~g780f284 (http://notmuchmail.org) Emacs/23.3.1\r
+       (i686-pc-linux-gnu)\r
+Date: Sun, 11 Mar 2012 02:01:34 +0200\r
+Message-ID: <87wr6sypi9.fsf@nikula.org>\r
+MIME-Version: 1.0\r
+Content-Type: multipart/mixed; boundary="=-=-="\r
+X-Gm-Message-State:\r
+ ALoCoQlWcDYFbpG5jaIztI1pStEoi+7DFO5gz/podaDGRB39XSjzFze9b3Y4ij0t7qvxV+UjSNKH\r
+X-BeenThere: notmuch@notmuchmail.org\r
+X-Mailman-Version: 2.1.13\r
+Precedence: list\r
+List-Id: "Use and development of the notmuch mail system."\r
+       <notmuch.notmuchmail.org>\r
+List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
+List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
+List-Post: <mailto:notmuch@notmuchmail.org>\r
+List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
+List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
+X-List-Received-Date: Sun, 11 Mar 2012 00:01:44 -0000\r
+\r
+--=-=-=\r
+\r
+\r
+Hi all -\r
+\r
+There was some talk on IRC about maintaining a development branch\r
+containing the "maybe ready" patches [1] to better expose them to\r
+real-life use before merging to master.\r
+\r
+I set out to automate this a little, and ended up with nmfirehose. It's\r
+a shell script that can be used to grab a bunch of patches from the\r
+notmuch mail store based on queries, and apply them to a repository. In\r
+particular, it can grab the "maybe ready" patches and apply them against\r
+notmuch master.\r
+\r
+Inevitable conflicts are handled by applying patches in oldest first\r
+order, and dropping any conflicting series. An email thread approximates\r
+a patch series; more than one patch series in a thread are folded into\r
+one series.\r
+\r
+Patches are applied incrementally, on top of each other by default, but\r
+there's also support for non-incremental per-series apply against master\r
+to see if there are conflicts. This is useful for the "review"\r
+query. Conflicting patches can be automatically tagged if so desired\r
+(but I don't recommend pushing these to nmbug without human review).\r
+\r
+How well any of this works very much depends on how accurately the patch\r
+messages are tagged.\r
+\r
+Some examples (run within a notmuch git repo, with up-to-date nmbug tags\r
+in the database):\r
+\r
+# take nmbug maybe-ready patches and apply them against origin/master\r
+$ nmfirehose\r
+\r
+# use local branch firehose and force use it even if existing\r
+$ nmfirehose -l firehose -F\r
+\r
+# keep going after conflicts without reverting whole series\r
+$ nmfirehose -k\r
+\r
+# check each series in review queue against master, and tag conflicting\r
+$ nmfirehose -q review -n -t\r
+\r
+# help\r
+$ nmfirehose -h\r
+\r
+I originally planned on putting this to cron and pushing the result\r
+(supported out-of-the-box) to some public repo, but in the end I think\r
+people can use this locally just as well, at the pace they want.\r
+\r
+The script tries not to screw up anything in your notmuch repo, but be\r
+careful nonetheless.\r
+\r
+Script attached; comments welcome. Is this worth adding to contrib?\r
+\r
+\r
+BR,\r
+Jani.\r
+\r
+[1] http://nmbug.tethera.net/status/\r
+\r
+--=-=-=\r
+Content-Type: application/octet-stream\r
+Content-Disposition: attachment; filename=nmfirehose\r
+Content-Transfer-Encoding: base64\r
+Content-Description: nmfirehose\r
+\r
+IyEvYmluL3NoCiMgQ29weXJpZ2h0IChjKSAyMDEyIEphbmkgTmlrdWxhCiMgTGljZW5zZTogc2Ft\r
+ZSBhcyBub3RtdWNoCgojIFByZWRlZmluZWQgcXVlcmllcy4gU2VlIGh0dHA6Ly9ubWJ1Zy50ZXRo\r
+ZXJhLm5ldC9zdGF0dXMvClFVRVJZX01BWUJFX1JFQURZPSJ0YWc6bm90bXVjaDo6cGF0Y2ggYW5k\r
+IG5vdCB0YWc6bm90bXVjaDo6cHVzaGVkIGFuZCBub3QgdGFnOm5vdG11Y2g6Om9ic29sZXRlIGFu\r
+ZCBub3QgdGFnOm5vdG11Y2g6OndpcCBhbmQgbm90IHRhZzpub3RtdWNoOjpzdGFsZSBhbmQgbm90\r
+IHRhZzpub3RtdWNoOjpjb250cmliIGFuZCBub3QgdGFnOm5vdG11Y2g6Om1vcmVpbmZvIGFuZCBu\r
+b3QgdGFnOm5vdG11Y2g6OnB5dGhvbiBhbmQgbm90IHRhZzpub3RtdWNoOjp2aW0gYW5kIG5vdCB0\r
+YWc6bm90bXVjaDo6d29udGZpeCBhbmQgbm90IHRhZzpub3RtdWNoOjpuZWVkcy1yZXZpZXciCgpR\r
+VUVSWV9SRVZJRVc9InRhZzpub3RtdWNoOjpwYXRjaCBhbmQgbm90IHRhZzpub3RtdWNoOjpwdXNo\r
+ZWQgYW5kIG5vdCB0YWc6bm90bXVjaDo6b2Jzb2xldGUgYW5kIG5vdCB0YWc6bm90bXVjaDo6c3Rh\r
+bGUgYW5kIG5vdCB0YWc6bm90bXVjaDo6d29udGZpeCBhbmQgKHRhZzpub3RtdWNoOjptb3JlaW5m\r
+byBvciB0YWc6bm90bXVjaDo6bmVlZHMtcmV2aWV3KSIKCiMgRGVmYXVsdHMgZm9yIGNvbW1hbmQg\r
+bGluZSBvcHRpb25zCiMgbG9jYWwKTE9DQUxfQlJBTkNIPSJmaXJlaG9zZS1gZGF0ZSArJUYuJUgl\r
+TSVTYCIKRk9SQ0VfTE9DQUw9CkdJVF9DSEVDS09VVF9NT0RFPSItYiIKUVVFUlk9IiRRVUVSWV9N\r
+QVlCRV9SRUFEWSIKIyB1cHN0cmVhbQpET19GRVRDSD0KVVBTVFJFQU1fTkFNRT0ib3JpZ2luIgpV\r
+UFNUUkVBTV9CUkFOQ0g9Im1hc3RlciIKIyBwdXNoaW5nCkRPX1BVU0g9CkdJVF9QVVNIX0ZPUkNF\r
+PQpSRU1PVEVfQlJBTkNIPSJmaXJlaG9zZSIKUkVNT1RFX05BTUU9ImZpcmVob3NlIgojIGNvbmZs\r
+aWN0IG1hbmFnZW1lbnQKRE9fTk9OX0lOQ1JFTUVOVEFMPQpET19LRUVQX0dPSU5HPQpET19UQUc9\r
+CkNPTkZMSUNUX1RBRz0ibWF5YmUtc3RhbGUiCgp1c2FnZSgpCnsKICAgIGNhdCA8PEVPRgpubWZp\r
+cmVob3NlIFtvcHRpb25zIC4uLl0KCkFwcGx5IHBhdGNoZXMgb24gdG9wIG9mIGFuIHVwc3RyZWFt\r
+IHJlcG9zaXRvcnkgZnJvbSBhIG5vdG11Y2ggbWFpbCBzdG9yZSBiYXNlZApvbiBub3RtdWNoIHF1\r
+ZXJpZXMuCgpSdW4gaW4gYSBnaXQgdHJlZSB3aXRoIHN1aXRhYmxlIHJlbW90ZShzKSBzZXQgKCRV\r
+UFNUUkVBTV9OQU1FIGlzIHRoZSBkZWZhdWx0CnVwc3RyZWFtIHJlbW90ZSkuCgpBbiBlbWFpbCB0\r
+aHJlYWQgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBleGFjdGx5IG9uZSBwYXRjaCBzZXJpZXMuIE11\r
+bHRpcGxlIHNlcmllcwppbiBhIHRocmVhZCBhcmUgY29uc2lkZXJlZCBvbmUgc2VyaWVzLiBUaGUg\r
+cGF0Y2ggb3JkZXIgaW4gYSBzZXJpZXMgaXMgYmFzZWQgb24Kbm90bXVjaCBzZWFyY2ggLS1zb3J0\r
+PW9sZGVzdC1maXJzdC4KCkxvY2FsOgogIC1sIExPQ0FMX0JSQU5DSCAgICAgbG9jYWwgYnJhbmNo\r
+IHRvIHVzZSAoZGVmYXVsdDogJExPQ0FMX0JSQU5DSCkKICAtRiAgICAgICAgICAgICAgICAgIGZv\r
+cmNlIHVzZSBsb2NhbCBicmFuY2ggZXZlbiBpZiBleGlzdGluZwogIC1xIFFVRVJZX05BTUUgICAg\r
+ICAgcHJlZGVmaW5lZCBxdWVyeSB0byB1c2UsIHNlZSBiZWxvdyAoZGVmYXVsdDogbWF5YmUtcmVh\r
+ZHkpCiAgLVEgUVVFUlkgICAgICAgICAgICBxdWVyeSB0byB1c2UgKGRlZmF1bHQ6IHNhbWUgYXMg\r
+LXEgbWF5YmUtcmVhZHkpCgpVcHN0cmVhbSBiYXNlbGluZSB0byBhcHBseSBwYXRjaGVzIG9uOgog\r
+IC1mICAgICAgICAgICAgICAgICAgZmV0Y2ggdXBzdHJlYW0gZmlyc3QKICAtdSBVUFNUUkVBTV9C\r
+UkFOQ0ggIHVwc3RyZWFtIGJyYW5jaCAoZGVmYXVsdDogJFVQU1RSRUFNX0JSQU5DSCkKICAtVSBV\r
+UFNUUkVBTV9OQU1FICAgIHVwc3RyZWFtIHJlbW90ZSBuYW1lIChkZWZhdWx0OiAkVVBTVFJFQU1f\r
+TkFNRSkKClB1c2hpbmcgdGhlIHJlc3VsdDoKICAtcCAgICAgICAgICAgICAgICAgIHB1c2ggdGhl\r
+IHJlc3VsdCBhZnRlcndhcmRzCiAgLVAgICAgICAgICAgICAgICAgICBmb3JjZSBwdXNoIHRoZSBy\r
+ZXN1bHQgYWZ0ZXJ3YXJkcwogIC1yIFJFTU9URV9CUkFOQ0ggICAgcmVtb3RlIGJyYW5jaCB0byBw\r
+dXNoIHRvIChkZWZhdWx0OiAkUkVNT1RFX0JSQU5DSCkKICAtUiBSRU1PVEVfTkFNRSAgICAgIHJl\r
+bW90ZSBuYW1lIHRvIHB1c2ggdG8gKGRlZmF1bHQ6ICRSRU1PVEVfTkFNRSkKCkNvbmZsaWN0IG1h\r
+bmFnZW1lbnQ6CiAgLW4gICAgICAgICAgICAgICAgICBub24taW5jcmVtZW50YWwsIGFwcGx5IGVh\r
+Y2ggc2VyaWVzIG9uIHVwc3RyZWFtCiAgLWsgICAgICAgICAgICAgICAgICBrZWVwIGdvaW5nIGFm\r
+dGVyIGNvbmZsaWN0cyB3aXRob3V0IHJldmVydGluZyBzZXJpZXMKICAtdCAgICAgICAgICAgICAg\r
+ICAgIHRhZyBjb25mbGljdGluZyBwYXRjaGVzCiAgLVQgVEFHICAgICAgICAgICAgICB0YWcgZm9y\r
+IGNvbmZsaWN0aW5nIHBhdGNoZXMgKGRlZmF1bHQ6ICRDT05GTElDVF9UQUcpCgpQcmVkZWZpbmVk\r
+IHF1ZXJpZXM6CgptYXliZS1yZWFkeSA9ICRRVUVSWV9NQVlCRV9SRUFEWQoKcmV2aWV3ID0gJFFV\r
+RVJZX1JFVklFVwpFT0YKICAgIGV4aXQgMAp9CgplcnJvcigpCnsKICAgIGVjaG8gIm5tZmlyZWhv\r
+c2U6ICQqIiA+JjIKICAgIGV4aXQgMQp9CgpzZXQgLWV1Cgp3aGlsZSBnZXRvcHRzIGw6RnE6UTpm\r
+dTpVOnBQcjpSOm5rdFQ6aCBvcHQ7IGRvCiAgICBjYXNlICIkb3B0IiBpbgoJIyBsb2NhbAoJbCkg\r
+TE9DQUxfQlJBTkNIPSIkT1BUQVJHIjs7CglGKSBGT1JDRV9MT0NBTD0xOyBHSVRfQ0hFQ0tPVVRf\r
+TU9ERT0iLUIiOzsKCXEpCgkgICAgaWYgWyAiJE9QVEFSRyIgPSAibWF5YmUtcmVhZHkiIF07IHRo\r
+ZW4KCQlRVUVSWT0iJFFVRVJZX01BWUJFX1JFQURZIgoJICAgIGVsaWYgWyAiJE9QVEFSRyIgPSAi\r
+cmV2aWV3IiBdOyB0aGVuCgkJUVVFUlk9IiRRVUVSWV9SRVZJRVciCgkgICAgZWxzZQoJCWVycm9y\r
+ICJ1bmtub3duIHByZWRlZmluZWQgcXVlcnkgJyRPUFRBUkcnIgoJICAgIGZpCgkgICAgOzsKCVEp\r
+IFFVRVJZPSIkT1BUQVJHIjs7CgkjIHVwc3RyZWFtCglmKSBET19GRVRDSD0xOzsKCXUpIFVQU1RS\r
+RUFNX0JSQU5DSD0iJE9QVEFSRyI7OwoJVSkgVVBTVFJFQU1fTkFNRT0iJE9QVEFSRyI7OwoJIyBw\r
+dXNoaW5nCglwKSBET19QVVNIPTE7OwoJUCkgRE9fUFVTSD0xOyBHSVRfUFVTSF9GT1JDRT0iLS1m\r
+b3JjZSI7OwoJcikgUkVNT1RFX0JSQU5DSD0iJE9QVEFSRyI7OwoJUikgUkVNT1RFX05BTUU9IiRP\r
+UFRBUkciOzsKCSMgY29uZmxpY3QgbWFuYWdlbWVudAoJbikgRE9fTk9OX0lOQ1JFTUVOVEFMPTE7\r
+OwoJaykgRE9fS0VFUF9HT0lORz0xOzsKCXQpIERPX1RBRz0xOzsKCVQpIENPTkZMSUNUX1RBRz0i\r
+JE9QVEFSRyI7OwoJIyBoZWxwCgloKSB1c2FnZTs7CglcPykgZXJyb3IgInRyeSAtaCBmb3IgdXNh\r
+Z2UiOzsKICAgIGVzYWMKZG9uZQpzaGlmdCBgZXhwciAkT1BUSU5EIC0gMWAKCmlmIFsgIiQjIiAh\r
+PSAiMCIgXTsgdGhlbgogICAgZXJyb3IgInVuc3VwcG9ydGVkIHBvc2l0aW9uYWwgYXJndW1lbnQo\r
+cykgJyQqJzsgdHJ5IC1oIGZvciB1c2FnZSIKZmkKCmlmIFsgLW4gIiRET19QVVNIIiAtYSAtbiAi\r
+JERPX05PTl9JTkNSRU1FTlRBTCIgXTsgdGhlbgogICAgZXJyb3IgIm5vbi1pbmNyZW1lbnRhbCBw\r
+dXNoIGlzIG5vdCBzdXBwb3J0ZWQiCmZpCgojIE5PVEU6IFRoaXMgZG9lcyBub3QgY2F0Y2ggYWxs\r
+IHRoZSB3YXlzIHVzZXJzIGNhbiBzaG9vdCB0aGVtc2VsdmVzIGluIHRoZSBmZWV0LgppZiAhIGdp\r
+dCBkaWZmIC0tcXVpZXQgfHwgISBnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0OyB0aGVuCiAgICBl\r
+cnJvciAidW5jb21taXR0ZWQgbG9jYWwgY2hhbmdlcyIKZmkKCiMgRklYTUU6IENoZWNrIHRoYXQg\r
+d2UncmUgaW4gYSBnaXQtZGlyIGFuZCB3b3JrLWRpciBhbmQgbm90IGJhcmUuIGdpdCByZXYtcGFy\r
+c2UuCgppZiBbIC1uICIkRE9fRkVUQ0giIF07IHRoZW4KICAgIGdpdCBmZXRjaCAkVVBTVFJFQU1f\r
+TkFNRQpmaQoKUkVTRVRfSEVBRD0kVVBTVFJFQU1fTkFNRS8kVVBTVFJFQU1fQlJBTkNICgojIE5P\r
+VEU6IFRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIHRoZSB3YXlzIHVzZXJzIGNhbiBzaG9vdCB0aGVt\r
+c2VsdmVzIGluIHRoZSBmZWV0LgppZiBbICJgZ2l0IG5hbWUtcmV2IC0tbmFtZS1vbmx5IEhFQURg\r
+IiA9ICIkTE9DQUxfQlJBTkNIIiBdOyB0aGVuCiAgICBpZiBbIC1uICIkRk9SQ0VfTE9DQUwiIF07\r
+IHRoZW4KCWdpdCByZXNldCAtLWhhcmQgJFJFU0VUX0hFQUQKICAgIGVsc2UKCWVycm9yICJhbHJl\r
+YWR5IG9uIGJyYW5jaCAkTE9DQUxfQlJBTkNILCB0cnkgLUYgdG8gZm9yY2UiCiAgICBmaQplbHNl\r
+CiAgICBnaXQgY2hlY2tvdXQgJEdJVF9DSEVDS09VVF9NT0RFICRMT0NBTF9CUkFOQ0ggJFVQU1RS\r
+RUFNX05BTUUvJFVQU1RSRUFNX0JSQU5DSApmaQoKY2xlYW51cCgpCnsKICAgIHJ2PSQ/CiAgICAj\r
+IEZJWE1FOiBjb3VsZCBkbyBtb3JlIGNsZXZlciB0aGluZ3MgaGVyZQogICAgZ2l0IGFtIC0tYWJv\r
+cnQgPi9kZXYvbnVsbCAyPiYxCiAgICBleGl0ICRydgp9CnRyYXAgY2xlYW51cCAxIDIgMyA2IDE1\r
+CgpUSFJFQURTPWBub3RtdWNoIHNlYXJjaCAtLW91dHB1dD10aHJlYWRzIC0tc29ydD1vbGRlc3Qt\r
+Zmlyc3QgJFFVRVJZYAoKZm9yIHRocmVhZCBpbiAkVEhSRUFEUzsgZG8KICAgIE1FU1NBR0VTPWBu\r
+b3RtdWNoIHNlYXJjaCAtLW91dHB1dD1tZXNzYWdlcyAtLXNvcnQ9b2xkZXN0LWZpcnN0ICRRVUVS\r
+WSBBTkQgJHRocmVhZGAKICAgIHN1YmplY3Q9CgogICAgZm9yIG1lc3NhZ2UgaW4gJE1FU1NBR0VT\r
+OyBkbwoJaWYgWyAteiAiJHN1YmplY3QiIF07IHRoZW4KCSAgICBzdWJqZWN0PWBub3RtdWNoIHNo\r
+b3cgLS1mb3JtYXQ9cmF3ICRtZXNzYWdlIHwgZ3JlcCAtbSAxICJeU3ViamVjdDogIiB8IHNlZCAn\r
+cy9eU3ViamVjdDogLy8nYAoJICAgIGVjaG8gIiR0aHJlYWQ6IFwiJHN1YmplY3RcIjoiCglmaQoK\r
+CWlmIG5vdG11Y2ggc2hvdyAtLWZvcm1hdD1tYm94ICRtZXNzYWdlIHwgZ2l0IGFtIC0gPi9kZXYv\r
+bnVsbCAyPiYxOyB0aGVuCgkgICAgZWNobyAiKyAkbWVzc2FnZSBhcHBsaWVkLiIKCWVsc2UKCSAg\r
+ICBnaXQgYW0gLS1hYm9ydAoKCSAgICBpZiBbIC1uICIkRE9fVEFHIiAtYSAtbiAiJENPTkZMSUNU\r
+X1RBRyIgXTsgdGhlbgoJCW5vdG11Y2ggdGFnICskQ09ORkxJQ1RfVEFHIC0tICRtZXNzYWdlCgkg\r
+ICAgZmkKCgkgICAgaWYgWyAtbiAiJERPX0tFRVBfR09JTkciIF07IHRoZW4KCQllY2hvICIkbWVz\r
+c2FnZSBjb25mbGljdHMsIHNraXBwaW5nLiIKCSAgICBlbHNlCgkJaWYgWyAtbiAiJERPX05PTl9J\r
+TkNSRU1FTlRBTCIgXTsgdGhlbgoJCSAgICBlY2hvICItICRtZXNzYWdlIGNvbmZsaWN0cy4iCgkJ\r
+ICAgICMgYnJhbmNoIHdpbGwgYmUgcmVzZXQgYW55d2F5CgkJZWxzZQoJCSAgICBlY2hvICItICRt\r
+ZXNzYWdlIGNvbmZsaWN0cywgcmV2ZXJ0aW5nIHRocmVhZC4iCgkJICAgIGdpdCByZXNldCAtLWhh\r
+cmQgJFJFU0VUX0hFQUQKCQlmaQoJCWJyZWFrCgkgICAgZmkKCWZpCiAgICBkb25lCgogICAgaWYg\r
+WyAtbiAiJERPX05PTl9JTkNSRU1FTlRBTCIgXTsgdGhlbgoJZWNobyAibm9uLWluY3JlbWVudGFs\r
+IG1vZGUsIHJldmVydGluZyB0byAkUkVTRVRfSEVBRC4iCglnaXQgcmVzZXQgLS1oYXJkICRSRVNF\r
+VF9IRUFECiAgICBlbHNlCglSRVNFVF9IRUFEPWBnaXQgcmV2LXBhcnNlIEhFQURgCiAgICBmaQpk\r
+b25lCgppZiBbIC1uICIkRE9fUFVTSCIgXTsgdGhlbgogICAgZ2l0IHB1c2ggJEdJVF9QVVNIX0ZP\r
+UkNFICRSRU1PVEVfTkFNRSAkTE9DQUxfQlJBTkNIOiRSRU1PVEVfQlJBTkNICmZpCg==\r
+--=-=-=--\r