X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id CD6F955F20 for ; Mon, 7 Mar 2005 16:14:14 +0000 (GMT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 14462-01 for ; Mon, 7 Mar 2005 16:14:13 +0000 (GMT) Received: from amanda.contactbda.com (ipn36372-e65122.cidr.lightship.net [216.204.66.226]) by svr1.postgresql.org (Postfix) with ESMTP id BBA9255056 for ; Mon, 7 Mar 2005 16:14:11 +0000 (GMT) Received: from amanda.contactbda.com (amanda.contactbda.com [192.168.1.2]) by amanda.contactbda.com (8.12.11/8.12.11/Debian-3) with ESMTP id j27GE9j6029763; Mon, 7 Mar 2005 11:14:09 -0500 From: "Jim Buttafuoco" To: Stef , Tom Lane Cc: pgsql-sql@postgresql.org Reply-To: jim@contactbda.com Subject: Re: [ADMIN] Postgres schema comparison. Date: Mon, 7 Mar 2005 11:14:09 -0500 Message-Id: <20050307160942.M57950@contactbda.com> In-Reply-To: <20050307173155.285dc2eb@svb.ucs.co.za> References: <20050307113312.2200b65c@svb.ucs.co.za> <422C42B7.1030509@logix-tt.com> <20050307145444.459e54fe@svb.ucs.co.za> <22961.1110205853@sss.pgh.pa.us> <20050307173155.285dc2eb@svb.ucs.co.za> X-Mailer: Open WebMail 2.41 20040926 X-OriginatingIP: 192.168.1.1 (jim) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=OPENWEBMAIL_ATT_0.350456424596818" X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, hits=0.052 tagged_above=0 required=5 tests=AWL, FORGED_RCVD_HELO X-Spam-Level: X-Archive-Number: 200503/109 X-Sequence-Number: 20588 This is a multi-part message in MIME format. ------=OPENWEBMAIL_ATT_0.350456424596818 Content-Type: text/plain; charset=iso-8859-1 Stef, I use dblink to attach to both databases and query pg_namespace, pg_class, pg_attribute ... to get the diffs. See attached as an example. look for the dblink_connect lines to specify your database. You will need to install contrib/dblink. I used this with 7.4.X series and have NOT tested yet with 8.0.X. You can adjust the output to fit your needs. Jim ---------- Original Message ----------- From: Stef To: Tom Lane Cc: pgsql-ADMIN@postgresql.org, pgsql-sql@postgresql.org Sent: Mon, 7 Mar 2005 17:31:55 +0200 Subject: Re: [ADMIN] [SQL] Postgres schema comparison. > Tom Lane mentioned : > => > The problem I have with this, is that I have to run the command per table, > => > => Why? > => > => If the problem is varying order of table declarations, try 8.0's > => pg_dump. > > Yes, this will solve the global schema check, but I will still need to split > it into "per table" dumps , to do "per table" comparisons. > > Kind Regards > Stefan > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly ------- End of Original Message ------- ------=OPENWEBMAIL_ATT_0.350456424596818 Content-Type: application/octet-stream; name="db_compare.sql" Content-Disposition: attachment; filename="db_compare.sql" Content-Transfer-Encoding: base64 ZHJvcCBmdW5jdGlvbiB0YWJsZV9kaWZmKHRleHQsdGV4dCx0ZXh0LHRleHQpOwoKY3JlYXRlIGZ1 bmN0aW9uIHRhYmxlX2RpZmYodGV4dCx0ZXh0LHRleHQsdGV4dCkgcmV0dXJucyB0ZXh0CmFzCicK ZGVjbGFyZQoJbGluazEgIGFsaWFzIGZvciAkMTsKCWxpbmsyICBhbGlhcyBmb3IgJDI7CglzY2hl bWEgYWxpYXMgZm9yICQzOwoJdGFiICAgIGFsaWFzIGZvciAkNDsKCWMxICAgICByZWNvcmQ7Cglj MiAgICAgcmVjb3JkOwoJY2ExICAgIHJlY29yZDsKICAgICAgICBjYTIgICAgcmVjb3JkOwoJYW4g ICAgIHJlY29yZDsKCXEgICAgICB0ZXh0OwoJcWEgICAgIHRleHQ7CglhICAgICAgdGV4dDsKYmVn aW4KCWEgOj0gXCdcJzsKCXEgOj0gXCdzZWxlY3QgbnNwbmFtZSxyZWxuYW1lLHJlbGtpbmQscmVs aGFzaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlzc2hhcmVkLHJlbG5hdHRzLHJl bGNoZWNrcyxyZWx0cmlnZ2VycywKICAgICAgICAgICAgICAgICAgICAgICAgcmVsdWtleXMscmVs ZmtleXMscmVscmVmcyxyZWxoYXNvaWRzLHJlbGhhc3BrZXksCiAgICAgICAgICAgICAgICAgICAg ICAgIHJlbGhhc3J1bGVzLHJlbGhhc3N1YmNsYXNzIAogICAgICAgICAgICAgICAgICAgICAgICBm cm9tIHBnX2NsYXNzIGpvaW4gcGdfbmFtZXNwYWNlIG9uIChwZ19uYW1lc3BhY2Uub2lkPXJlbG5h bWVzcGFjZSlcJzsKCXEgOj0gcSB8fCBcJyB3aGVyZSBuc3BuYW1lID0gXFxcJ1wnIHx8ICBzY2hl bWEgfHwgXCdcXFwnXCc7CglxIDo9IHEgfHwgXCcgYW5kICByZWxuYW1lID0gXFxcJ1wnIHx8ICB0 YWIgfHwgXCdcXFwnXCc7CgoJc2VsZWN0ICogaW50byBjMSBmcm9tCglkYmxpbmsobGluazEscSkK CWFzIGRiMV9wZ19jbGFzcyhuc3BuYW1lIHRleHQscmVsbmFtZSB0ZXh0LHJlbGtpbmQgY2hhcixy ZWxoYXNpbmRleCBib29sLAogICAgICAgICAgICAgICAgICAgICAgICByZWxpc3NoYXJlZCBib29s LHJlbG5hdHRzIHNtYWxsaW50LHJlbGNoZWNrcyBzbWFsbGludCwKICAgICAgICAgICAgICAgICAg ICAgICAgcmVsdHJpZ2dlcnMgc21hbGxpbnQscmVsdWtleXMgc21hbGxpbnQscmVsZmtleXMgc21h bGxpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbHJlZnMgc21hbGxpbnQscmVsaGFzb2lk cyBib29sZWFuLHJlbGhhc3BrZXkgYm9vbGVhbiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVs aGFzcnVsZXMgYm9vbGVhbixyZWxoYXNzdWJjbGFzcyBib29sZWFuKQoJOwoJc2VsZWN0ICogaW50 byBjMiBmcm9tCglkYmxpbmsobGluazIscSkKCWFzIGRiMl9wZ19jbGFzcyhuc3BuYW1lIHRleHQs cmVsbmFtZSB0ZXh0LHJlbGtpbmQgY2hhcixyZWxoYXNpbmRleCBib29sLAogICAgICAgICAgICAg ICAgICAgICAgICByZWxpc3NoYXJlZCBib29sLHJlbG5hdHRzIHNtYWxsaW50LHJlbGNoZWNrcyBz bWFsbGludCwKICAgICAgICAgICAgICAgICAgICAgICAgcmVsdHJpZ2dlcnMgc21hbGxpbnQscmVs dWtleXMgc21hbGxpbnQscmVsZmtleXMgc21hbGxpbnQsCiAgICAgICAgICAgICAgICAgICAgICAg IHJlbHJlZnMgc21hbGxpbnQscmVsaGFzb2lkcyBib29sZWFuLHJlbGhhc3BrZXkgYm9vbGVhbiwK ICAgICAgICAgICAgICAgICAgICAgICAgcmVsaGFzcnVsZXMgYm9vbGVhbixyZWxoYXNzdWJjbGFz cyBib29sZWFuKQoJOwoKIAlpZiBjMS5yZWxraW5kIGlzIG51bGwgCiAgICAgICAgdGhlbgogICAg ICAgICAgIHJldHVybiBcJ3JlbGF0aW9uIG1pc3NpbmcgaW4gZGIxXCc7CiAgICAgICAgZW5kIGlm OwoKIAlpZiBjMi5yZWxraW5kIGlzIG51bGwgCiAgICAgICAgdGhlbgogICAgICAgICAgIHJldHVy biBcJ3JlbGF0aW9uIG1pc3NpbmcgaW4gZGIyXCc7CiAgICAgICAgZW5kIGlmOwoKCWlmKGMxLnJl bGtpbmQgPD4gYzIucmVsa2luZCkJCiAgICAgICAgdGhlbgogICAgICAgICAgIGEgOj0gYSB8fCBc JyxyZWxraW5kIGlzIGRpZmZlcmVudFwnOwogICAgICAgIGVuZCBpZjsKCWlmKGMxLnJlbGhhc2lu ZGV4IDw+IGMyLnJlbGhhc2luZGV4KQogICAgICAgIHRoZW4KICAgICAgICAgICBhIDo9IGEgfHwg XCcscmVsaGFzaW5kZXggaXMgZGlmZmVyZW50XCc7CiAgICAgICAgZW5kIGlmOwoJaWYoYzEucmVs aXNzaGFyZWQgPD4gYzIucmVsaXNzaGFyZWQpCiAgICAgICAgdGhlbgogICAgICAgICAgIGEgOj0g YSB8fCBcJyxyZWxpc3NoYXJlZCBpcyBkaWZmZXJlbnRcJzsKICAgICAgICBlbmQgaWY7CglpZihj MS5yZWxuYXR0cyA8PiBjMi5yZWxuYXR0cykKICAgICAgICB0aGVuCiAgICAgICAgICAgYSA6PSBh IHx8IFwnLHJlbG5hdHRzIGlzIGRpZmZlcmVudFwnOwogICAgICAgIGVuZCBpZjsKCWlmKGMxLnJl bGNoZWNrcyA8PiBjMi5yZWxjaGVja3MpCiAgICAgICAgdGhlbgogICAgICAgICAgIGEgOj0gYSB8 fCBcJyxyZWxjaGVja3MgaXMgZGlmZmVyZW50XCc7CiAgICAgICAgZW5kIGlmOwoJaWYoYzEucmVs dHJpZ2dlcnMgPD4gYzIucmVsdHJpZ2dlcnMpCiAgICAgICAgdGhlbgogICAgICAgICAgIGEgOj0g YSB8fCBcJyxyZWx0cmlnZ2VycyBpcyBkaWZmZXJlbnRcJzsKICAgICAgICBlbmQgaWY7CglpZihj MS5yZWx1a2V5cyA8PiBjMi5yZWx1a2V5cykKICAgICAgICB0aGVuCiAgICAgICAgICAgYSA6PSBh IHx8IFwnLHJlbHVrZXlzIGlzIGRpZmZlcmVudFwnOwogICAgICAgIGVuZCBpZjsKCWlmKGMxLnJl bGZrZXlzIDw+IGMyLnJlbGZrZXlzKQogICAgICAgIHRoZW4KICAgICAgICAgICBhIDo9IGEgfHwg XCcscmVsZmtleXMgaXMgZGlmZmVyZW50XCc7CiAgICAgICAgZW5kIGlmOwoJaWYoYzEucmVscmVm cyA8PiBjMi5yZWxyZWZzKQogICAgICAgIHRoZW4KICAgICAgICAgICBhIDo9IGEgfHwgXCcscmVs cmVmcyBpcyBkaWZmZXJlbnRcJzsKICAgICAgICBlbmQgaWY7CglpZihjMS5yZWxoYXNvaWRzIDw+ IGMyLnJlbGhhc29pZHMpCiAgICAgICAgdGhlbgogICAgICAgICAgIGEgOj0gYSB8fCBcJyxyZWxo YXNvaWRzIGlzIGRpZmZlcmVudFwnOwogICAgICAgIGVuZCBpZjsKCWlmKGMxLnJlbGhhc3BrZXkg PD4gYzIucmVsaGFzcGtleSkKICAgICAgICB0aGVuCiAgICAgICAgICAgYSA6PSBhIHx8IFwnLHJl bGhhc3BrZXkgaXMgZGlmZmVyZW50XCc7CiAgICAgICAgZW5kIGlmOwoJaWYoYzEucmVsaGFzcnVs ZXMgPD4gYzIucmVsaGFzcnVsZXMpCiAgICAgICAgdGhlbgogICAgICAgICAgIGEgOj0gYSB8fCBc JyxyZWxoYXNydWxlcyBpcyBkaWZmZXJlbnRcJzsKICAgICAgICBlbmQgaWY7CglpZihjMS5yZWxo YXNzdWJjbGFzcwkgPD4gYzIucmVsaGFzc3ViY2xhc3MJKQogICAgICAgIHRoZW4KICAgICAgICAg ICBhIDo9IGEgfHwgXCcscmVsaGFzc3ViY2xhc3MJIGlzIGRpZmZlcmVudFwnOwogICAgICAgIGVu ZCBpZjsKCgoJcSA6PSBcJ3NlbGVjdCBhdHRuYW1lCgkgICAgICAgZnJvbSBwZ19hdHRyaWJ1dGUg am9pbiBwZ19jbGFzcyBvbiAoYXR0cmVsaWQgPSBwZ19jbGFzcy5vaWQpIAogICAgICAgICAgICAg ICBqb2luIHBnX25hbWVzcGFjZSBvbiAocmVsbmFtZXNwYWNlPXBnX25hbWVzcGFjZS5vaWQpCiAg ICAgICAgICAgICAgIHdoZXJlIGF0dG51bSA+IDAgXCc7CglxIDo9IHEgfHwgXCcgYW5kIG5zcG5h bWUgPSBcXFwnXCcgfHwgIHNjaGVtYSB8fCBcJ1xcXCdcJzsKCXEgOj0gcSB8fCBcJyBhbmQgcmVs bmFtZSA9IFxcXCdcJyB8fCAgdGFiIHx8IFwnXFxcJ1wnOwoKCWZvciBhbiBpbiBzZWxlY3QgYXR0 bmFtZSBmcm9tCiAgICAgICAgICAgICAgICAgICgKCSAgICAgICAgICBzZWxlY3QgKiBmcm9tCgkJ ICBkYmxpbmsobGluazEscSkgYXMgZGIxX2F0dHMoYXR0bmFtZSB0ZXh0KQogICAgICAgICAgICAg ICAgICB1bmlvbgoJICAgICAgICAgIHNlbGVjdCAqIGZyb20KCQkgIGRibGluayhsaW5rMixxKSBh cyBkYjJfYXR0cyhhdHRuYW1lIHRleHQpCgkgICAgICAgICAgKSBzMQogICAgICAgIGxvb3AKCSAg ICBxYSA6PSBcJ3NlbGVjdCBhLioscGdfY2F0YWxvZy5mb3JtYXRfdHlwZShhLmF0dHR5cGlkLCBh LmF0dHR5cG1vZCkgYXMgZnQKCSAgICAgICAgICBmcm9tIHBnX2F0dHJpYnV0ZSBhIGpvaW4gcGdf Y2xhc3Mgb24gKGF0dHJlbGlkID0gcGdfY2xhc3Mub2lkKSAKICAgICAgICAgICAgICAgICAgam9p biBwZ19uYW1lc3BhY2Ugb24gKHJlbG5hbWVzcGFjZT1wZ19uYW1lc3BhY2Uub2lkKVwnOwoJICAg IHFhIDo9IHFhIHx8IFwnIHdoZXJlIG5zcG5hbWUgPSBcXFwnXCcgfHwgIHNjaGVtYSB8fCBcJ1xc XCdcJzsKCSAgICBxYSA6PSBxYSB8fCBcJyBhbmQgcmVsbmFtZSA9IFxcXCdcJyB8fCAgdGFiIHx8 IFwnXFxcJ1wnOwoJICAgIHFhIDo9IHFhIHx8IFwnIGFuZCBhdHRuYW1lID0gXFxcJ1wnIHx8ICBh bi5hdHRuYW1lIHx8IFwnXFxcJ1wnOwoKCSAgICBzZWxlY3QgKiBpbnRvIGNhMSBmcm9tCiAgICAg ICAgICAgICAgICAgICBkYmxpbmsobGluazEscWEpIGFzIGRiMV9hdHRzKAkKCQkJIGF0dHJlbGlk IG9pZCwgYXR0bmFtZSBuYW1lLCBhdHR0eXBpZCBvaWQsYXR0c3RhdHRhcmdldCBpbnRlZ2VyLAoJ CQkgYXR0bGVuIHNtYWxsaW50LGF0dG51bSBzbWFsbGludCxhdHRuZGltcyBpbnRlZ2VyLCBhdHRj YWNoZW9mZiBpbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgYXR0dHlwbW9kIGludGVn ZXIsIGF0dGJ5dmFsIGJvb2xlYW4sIGF0dHN0b3JhZ2UgY2hhciwKICAgICAgICAgICAgICAgICAg ICAgICAgIGF0dGlzc2V0IGJvb2xlYW4sIGF0dGFsaWduIGNoYXIsIGF0dG5vdG51bGwgYm9vbGVh biwgCiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRoYXNkZWYgIGJvb2xlYW4sIGF0dGlzZHJv cHBlZCBib29sZWFuLAogICAgICAgICAgICAgICAgICAgICAgICAgYXR0aXNsb2NhbCAgIGJvb2xl YW4sIGF0dGluaGNvdW50ICBpbnRlZ2VyLGZ0IHRleHQpOwoJICAgIHNlbGVjdCAqIGludG8gY2Ey IGZyb20KICAgICAgICAgICAgICAgICAgIGRibGluayhsaW5rMixxYSkgYXMgZGIxX2F0dHMoCQoJ CQkgYXR0cmVsaWQgb2lkLCBhdHRuYW1lIG5hbWUsIGF0dHR5cGlkIG9pZCxhdHRzdGF0dGFyZ2V0 IGludGVnZXIsCgkJCSBhdHRsZW4gc21hbGxpbnQsYXR0bnVtIHNtYWxsaW50LGF0dG5kaW1zIGlu dGVnZXIsIGF0dGNhY2hlb2ZmIGludGVnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBhdHR0 eXBtb2QgaW50ZWdlciwgYXR0Ynl2YWwgYm9vbGVhbiwgYXR0c3RvcmFnZSBjaGFyLAogICAgICAg ICAgICAgICAgICAgICAgICAgYXR0aXNzZXQgYm9vbGVhbiwgYXR0YWxpZ24gY2hhciwgYXR0bm90 bnVsbCBib29sZWFuLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGhhc2RlZiAgYm9vbGVh biwgYXR0aXNkcm9wcGVkIGJvb2xlYW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRpc2xv Y2FsICAgYm9vbGVhbiwgYXR0aW5oY291bnQgIGludGVnZXIsZnQgdGV4dCk7CgoJCWlmIGNhMS5h dHRuYW1lIGlzIG51bGwgCiAgICAgICAgICAgICAgICB0aGVuIAogICAgICAgICAgICAgICAgICAg IGEgOj0gYSB8fCBcJyxjb2x1bW4gXCcgfHwgYW4uYXR0bmFtZSB8fCBcJyBtaXNzaW5nIGluIGRi MVwnOwogICAgICAgICAgICAgICAgZW5kIGlmOwoJCWlmIGNhMi5hdHRuYW1lIGlzIG51bGwgCiAg ICAgICAgICAgICAgICB0aGVuIAogICAgICAgICAgICAgICAgICAgIGEgOj0gYSB8fCBcJyxjb2x1 bW4gXCcgfHwgYW4uYXR0bmFtZSB8fCBcJyBtaXNzaW5nIGluIGRiMlwnOwogICAgICAgICAgICAg ICAgZW5kIGlmOwoKCQlpZiBjYTEuYXR0c3RhdHRhcmdldCA8PiBjYTIuYXR0c3RhdHRhcmdldAog ICAgICAgICAgICAgICAgdGhlbgogICAgICAgICAgICAgICAgICAgIGEgOj0gYSB8fCBcJyxjb2x1 bW4gXCcgfHwgYW4uYXR0bmFtZSB8fCBcJyBhdHRyaWJ1dGUgYXR0c3RhdHRhcmdldCBpcyBkaWZm ZXJlbnRcJzsKICAgICAgICAgICAgICAgIGVuZCBpZjsKCgkJaWYgY2ExLmF0dGxlbiA8PiBjYTIu YXR0bGVuCiAgICAgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgICAgYSA6PSBhIHx8 IFwnLGNvbHVtbiBcJyB8fCBhbi5hdHRuYW1lIHx8IFwnIGF0dHJpYnV0ZSBhdHRsZW4gaXMgZGlm ZmVyZW50XCc7CiAgICAgICAgICAgICAgICBlbmQgaWY7CgkJaWYgY2ExLmF0dG51bSA8PiBjYTIu YXR0bnVtCiAgICAgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgICAgYSA6PSBhIHx8 IFwnLGNvbHVtbiBcJyB8fCBhbi5hdHRuYW1lIHx8IFwnIGF0dHJpYnV0ZSBhdHRudW0gaXMgZGlm ZmVyZW50IChcJyB8fCBjYTEuYXR0bnVtIHx8IFwnPD0+XCcgfHwgY2EyLmF0dG51bSB8fCBcJylc JzsKICAgICAgICAgICAgICAgIGVuZCBpZjsKCQlpZiBjYTEuYXR0bmRpbXMgPD4gY2EyLmF0dG5k aW1zCiAgICAgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgICAgYSA6PSBhIHx8IFwn LGNvbHVtbiBcJyB8fCBhbi5hdHRuYW1lIHx8IFwnIGF0dHJpYnV0ZSBhdHRuZGltcyBpcyBkaWZm ZXJlbnRcJzsKICAgICAgICAgICAgICAgIGVuZCBpZjsKCQlpZiBjYTEuYXR0Y2FjaGVvZmYgPD4g Y2EyLmF0dGNhY2hlb2ZmCiAgICAgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgICAg YSA6PSBhIHx8IFwnLGNvbHVtbiBcJyB8fCBhbi5hdHRuYW1lIHx8IFwnIGF0dHJpYnV0ZSBhdHRj YWNoZW9mZiBpcyBkaWZmZXJlbnRcJzsKICAgICAgICAgICAgICAgIGVuZCBpZjsKCQlpZiBjYTEu YXR0dHlwbW9kIDw+IGNhMi5hdHR0eXBtb2QKICAgICAgICAgICAgICAgIHRoZW4KICAgICAgICAg ICAgICAgICAgICBhIDo9IGEgfHwgXCcsY29sdW1uIFwnIHx8IGFuLmF0dG5hbWUgfHwgXCcgYXR0 cmlidXRlIGF0dHR5cG1vZCBpcyBkaWZmZXJlbnRcJzsKICAgICAgICAgICAgICAgIGVuZCBpZjsK CQlpZiBjYTEuYXR0Ynl2YWwgPD4gY2EyLmF0dGJ5dmFsCiAgICAgICAgICAgICAgICB0aGVuCiAg ICAgICAgICAgICAgICAgICAgYSA6PSBhIHx8IFwnLGNvbHVtbiBcJyB8fCBhbi5hdHRuYW1lIHx8 IFwnIGF0dHJpYnV0ZSBhdHRieXZhbCBpcyBkaWZmZXJlbnRcJzsKICAgICAgICAgICAgICAgIGVu ZCBpZjsKCQlpZiBjYTEuYXR0c3RvcmFnZSA8PiBjYTIuYXR0c3RvcmFnZQogICAgICAgICAgICAg ICAgdGhlbgogICAgICAgICAgICAgICAgICAgIGEgOj0gYSB8fCBcJyxjb2x1bW4gXCcgfHwgYW4u YXR0bmFtZSB8fCBcJyBhdHRyaWJ1dGUgYXR0c3RvcmFnZSBpcyBkaWZmZXJlbnRcJzsKICAgICAg ICAgICAgICAgIGVuZCBpZjsKCQlpZiBjYTEuYXR0aXNzZXQgPD4gY2EyLmF0dGlzc2V0CiAgICAg ICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgICAgYSA6PSBhIHx8IFwnLGNvbHVtbiBc JyB8fCBhbi5hdHRuYW1lIHx8IFwnIGF0dHJpYnV0ZSBhdHRpc3NldCBpcyBkaWZmZXJlbnRcJzsK ICAgICAgICAgICAgICAgIGVuZCBpZjsKCQlpZiBjYTEuYXR0YWxpZ24gPD4gY2EyLmF0dGFsaWdu CiAgICAgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgICAgYSA6PSBhIHx8IFwnLGNv bHVtbiBcJyB8fCBhbi5hdHRuYW1lIHx8IFwnIGF0dHJpYnV0ZSBhdHRhbGlnbiBpcyBkaWZmZXJl bnRcJzsKICAgICAgICAgICAgICAgIGVuZCBpZjsKCQlpZiBjYTEuYXR0bm90bnVsbCA8PiBjYTIu YXR0bm90bnVsbAogICAgICAgICAgICAgICAgdGhlbgogICAgICAgICAgICAgICAgICAgIGEgOj0g YSB8fCBcJyxjb2x1bW4gXCcgfHwgYW4uYXR0bmFtZSB8fCBcJyBhdHRyaWJ1dGUgYXR0bm90bnVs bCBpcyBkaWZmZXJlbnRcJzsKICAgICAgICAgICAgICAgIGVuZCBpZjsKCQlpZiBjYTEuYXR0aGFz ZGVmIDw+IGNhMi5hdHRoYXNkZWYKICAgICAgICAgICAgICAgIHRoZW4KICAgICAgICAgICAgICAg ICAgICBhIDo9IGEgfHwgXCcsY29sdW1uIFwnIHx8IGFuLmF0dG5hbWUgfHwgXCcgYXR0cmlidXRl IGF0dGhhc2RlZiBpcyBkaWZmZXJlbnRcJzsKICAgICAgICAgICAgICAgIGVuZCBpZjsKCQlpZiBj YTEuYXR0aXNkcm9wcGVkIDw+IGNhMi5hdHRpc2Ryb3BwZWQKICAgICAgICAgICAgICAgIHRoZW4K ICAgICAgICAgICAgICAgICAgICBhIDo9IGEgfHwgXCcsY29sdW1uIFwnIHx8IGFuLmF0dG5hbWUg fHwgXCcgYXR0cmlidXRlIGF0dGlzZHJvcHBlZCBpcyBkaWZmZXJlbnRcJzsKICAgICAgICAgICAg ICAgIGVuZCBpZjsKCQlpZiBjYTEuYXR0aXNsb2NhbCA8PiBjYTIuYXR0aXNsb2NhbAogICAgICAg ICAgICAgICAgdGhlbgogICAgICAgICAgICAgICAgICAgIGEgOj0gYSB8fCBcJyxjb2x1bW4gXCcg fHwgYW4uYXR0bmFtZSB8fCBcJyBhdHRyaWJ1dGUgYXR0aXNsb2NhbCBpcyBkaWZmZXJlbnRcJzsK ICAgICAgICAgICAgICAgIGVuZCBpZjsKCQlpZiBjYTEuYXR0aW5oY291bnQgPD4gY2EyLmF0dGlu aGNvdW50CiAgICAgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgICAgYSA6PSBhIHx8 IFwnLGNvbHVtbiBcJyB8fCBhbi5hdHRuYW1lIHx8IFwnIGF0dHJpYnV0ZSBhdHRpbmhjb3VudCBp cyBkaWZmZXJlbnRcJzsKICAgICAgICAgICAgICAgIGVuZCBpZjsKCQlpZiBjYTEuZnQgPD4gY2Ey LmZ0CiAgICAgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgICAgYSA6PSBhIHx8IFwn LGNvbHVtbiBcJyB8fCBhbi5hdHRuYW1lIHx8IFwnIGNvbHVtbiB0eXBlIGlzIGRpZmZlcmVudFwn OwogICAgICAgICAgICAgICAgZW5kIGlmOwoJCgkgICAgCiAgICAgICAgZW5kIGxvb3A7CgoKCWlm IGEgPSBcJ1wnCiAgICAgICAgdGhlbgogICAgICAgICAgIHJldHVybiBcJ3JlbGF0aW9ucyBhcmUg aWRlbnRpY2FsXCc7CiAgICAgICAgZW5kIGlmOwoJaWYgc3Vic3RyKGEsMSwxKSA9IFwnLFwnCiAg ICAgICAgdGhlbgogICAgICAgICAgIHJldHVybiBzdWJzdHIoYSwyKTsKICAgICAgICBlbmQgaWY7 CglyZXR1cm4gYTsKZW5kOwonCkxBTkdVQUdFICdwbHBnc3FsJwo7Ci0tICAgICAgICAgICAgICAg ICAgICAgICAgd2hlcmUgbnNwbmFtZSA9IFwnJyB8fCBzY2hlbWEgfHwgJ1wnIGFuZCByZWxuYW1l ID0gXCcnIHx8IHRhYiB8fCAnXCcnOwoKCnNlbGVjdCBkYmxpbmtfZGlzY29ubmVjdCgnZGIxJyk7 CnNlbGVjdCBkYmxpbmtfZGlzY29ubmVjdCgnZGIyJyk7CgotLSBjaGFuZ2UgYm90aCBvZiB0aGVz ZSBidXQgbGVhdmUgdGhlICJkYjEvZGIyIiBhcyBmaXJzdCBhcmd1bWVudApzZWxlY3QgZGJsaW5r X2Nvbm5lY3QoJ2RiMScsJ2RibmFtZT10ZW1wbGF0ZV9iZGEgdXNlcj1qaW0nKTsKc2VsZWN0IGRi bGlua19jb25uZWN0KCdkYjInLCdkYm5hbWU9TCB1c2VyPWppbScpOwotLXNlbGVjdCB0YWJsZV9k aWZmKCdkYjEnLCdkYjInLCdwdWJsaWMnLCdkYXRhZmlsZXMnKTsKCgoKc2VsZWN0IApjb2FsZXNj ZShuc3BuYW1lMSxuc3BuYW1lMikgYXMgc2NoZW1hLApjb2FsZXNjZShyZWxuYW1lMSxyZWxuYW1l MikgYXMgcmVsbmFtZSwKdGFibGVfZGlmZignZGIxJywnZGIyJyxjb2FsZXNjZShuc3BuYW1lMSxu c3BuYW1lMiksY29hbGVzY2UocmVsbmFtZTEscmVsbmFtZTIpKSBhcyBkaWZmZXJlbmNlcwpmcm9t IGRibGluaygnZGIxJywnc2VsZWN0IG5zcG5hbWUscmVsbmFtZSBmcm9tIHBnX2NsYXNzIGpvaW4g cGdfbmFtZXNwYWNlIG9uIChwZ19uYW1lc3BhY2Uub2lkPXJlbG5hbWVzcGFjZSkgd2hlcmUgbnNw bmFtZSBub3QgaW4gKFwnaW5mb3JtYXRpb25fc2NoZW1hXCcsXCdwZ19jYXRhbG9nXCcsXCdwZ190 b2FzdFwnKScpCmFzIGRiMV9wZ19jbGFzcyhuc3BuYW1lMSB0ZXh0LHJlbG5hbWUxIHRleHQpCmZ1 bGwgb3V0ZXIgam9pbgpkYmxpbmsoJ2RiMicsJ3NlbGVjdCBuc3BuYW1lLHJlbG5hbWUgZnJvbSBw Z19jbGFzcyBqb2luIHBnX25hbWVzcGFjZSBvbiAocGdfbmFtZXNwYWNlLm9pZD1yZWxuYW1lc3Bh Y2UpIHdoZXJlIG5zcG5hbWUgbm90IGluIChcJ2luZm9ybWF0aW9uX3NjaGVtYVwnLFwncGdfY2F0 YWxvZ1wnLFwncGdfdG9hc3RcJyknKQphcyBkYjJfcGdfY2xhc3MobnNwbmFtZTIgdGV4dCxyZWxu YW1lMiB0ZXh0KQpvbiAobnNwbmFtZTEgPSBuc3BuYW1lMiBhbmQgcmVsbmFtZTEgPSByZWxuYW1l MikKb3JkZXIgYnkgMSwyCjsKCnNlbGVjdCBkYmxpbmtfZGlzY29ubmVjdCgnZGIxJyk7CnNlbGVj dCBkYmxpbmtfZGlzY29ubmVjdCgnZGIyJyk7Cg== ------=OPENWEBMAIL_ATT_0.350456424596818--