Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gZ6NM-0005cC-Vu for pgadmin-hackers@arkaria.postgresql.org; Tue, 18 Dec 2018 03:48:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gZ6NL-0007Wx-MS for pgadmin-hackers@arkaria.postgresql.org; Tue, 18 Dec 2018 03:48:55 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gZ6KH-0002xE-CM for pgadmin-hackers@lists.postgresql.org; Tue, 18 Dec 2018 03:45:45 +0000 Received: from mail-qt1-x830.google.com ([2607:f8b0:4864:20::830]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gZ6KE-0007pg-Ax for pgadmin-hackers@postgresql.org; Tue, 18 Dec 2018 03:45:44 +0000 Received: by mail-qt1-x830.google.com with SMTP id n32so16676282qte.11 for ; Mon, 17 Dec 2018 19:45:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=szvclhWsMk6iFJWqUu5SJoqgzsjtVN4YMv5vNJMx2p4=; b=DP3NmN1AcjgLqs4RllxTGLIQRCP1yo9WF3Bj1H+vjttWuNaNMWnnC8MnxzuqWRFq8S SV18gWEmaBC+lMLPzsLXBkDL9Oyw1jpOfdiQtycwE67hILJIYHKYTqRj+if1h1rgfDwR lSRczpPDij/SD/kQYeOZukoFi+k2vJqAytw5cEQbbgUNUkkReux+c/FXDbl6l9Ge0614 /jzws4zFreB8M1sRx21XZnN3zXvw3536e2NLs4YM8pcMDL5Hpap07+D3lMjXUoquq2kB pHqIQysRfDN+3MDf7ckb9jyiApNfijgVkTUiAyYUn2MA81jUh0T6DZyFRqVIy2xIXjvI CavQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=szvclhWsMk6iFJWqUu5SJoqgzsjtVN4YMv5vNJMx2p4=; b=pCwJz6vcsocfqaiZO9lLS0z4PCfdwgJFtK+sZHHowXY2JuUNmODwBLAR1To1Ze0i4s m9IuBjXEXaAY32qm1339vRuIqnbWDmuLRfm63Skagz7hdB8lPfW2BfwIMxUthhe9BHUN /LCYCx4B0iqXzQ3mGxHHfUGRTZR6cxLET7TVwBJTiMfmW1avTuy8Bg9f1XaZ2H4lgMh0 qSOdA0dy5dopOxD1dH86Daa1YVJShK6bixli4WvkFI6rp5T7kJlZ+7ARtVE2Is6E4AsD pl0gEJItmWEl2Ghau50NY6kwPuemlblhhr+kVMO+J/fQ8Zr1YrPK9YhABwOpkd875mf4 XVJw== X-Gm-Message-State: AA+aEWY5hpZ2Y7mUQWefa1Y/vRXpOj9gvfrWX4nf85KO6ja80oGQ/a5b rEVrrtDzmXgN1GFB29M6R2tge9Bg01RaeoCtMODSP6donLHB9w== X-Google-Smtp-Source: AFSGD/WavksRUccySPFmqnEjk7A7dKUoSiRW11s6aXqx2VWg1SCp+0EEWYRvirQ5wFBXZI7jbPc5auK/xKeX7I9MY7c= X-Received: by 2002:ac8:7201:: with SMTP id a1mr15936027qtp.291.1545104740989; Mon, 17 Dec 2018 19:45:40 -0800 (PST) MIME-Version: 1.0 From: Akshay Joshi Date: Tue, 18 Dec 2018 09:15:30 +0530 Message-ID: Subject: [pgAdmin4][Patch] - RM 3780 pgAdmin4 lacks ability to specify NULL values in CSV export To: pgadmin-hackers Content-Type: multipart/mixed; boundary="0000000000003a7505057d43bb9e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --0000000000003a7505057d43bb9e Content-Type: multipart/alternative; boundary="0000000000003a7501057d43bb9c" --0000000000003a7501057d43bb9c Content-Type: text/plain; charset="UTF-8" Hi Hackers, Attached is the patch to fix RM #3780 pgAdmin4 lacks ability to specify NULL values in CSV export. Please review it. -- *Akshay Joshi* *Sr. Software Architect * *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* --0000000000003a7501057d43bb9c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,

Attached i= s the patch to fix RM #3780=C2=A0pgAdmin4 lacks ability to specify NULL val= ues in CSV= export.

Please review it.


--
Akshay Jo= shi
Sr. Software Architect
<= font color=3D"#3333FF">
=
=
Phone: +91 20-3058-9517
Mobil= e: +91 976-788-8246
--0000000000003a7501057d43bb9c-- --0000000000003a7505057d43bb9e Content-Type: application/octet-stream; name="RM_3780.patch" Content-Disposition: attachment; filename="RM_3780.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jpt7e3sc0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3V0aWxzL2Nzdi5weSBiL3dlYi9wZ2FkbWluL3V0aWxz L2Nzdi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjQ2NDc4Ci0tLSAv ZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdXRpbHMvY3N2LnB5CkBAIC0wLDAgKzEsNDE0IEBA CisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIiIiQSBwb3J0IG9mIFB5dGhvbiAzJ3MgY3N2IG1v ZHVsZSB0byBQeXRob24gMi4KKworVGhlIEFQSSBvZiB0aGUgY3N2IG1vZHVsZSBpbiBQeXRob24g MiBpcyBkcmFzdGljYWxseSBkaWZmZXJlbnQgZnJvbQordGhlIGNzdiBtb2R1bGUgaW4gUHl0aG9u IDMuIFRoaXMgaXMgZHVlLCBmb3IgdGhlIG1vc3QgcGFydCwgdG8gdGhlCitkaWZmZXJlbmNlIGJl dHdlZW4gc3RyIGluIFB5dGhvbiAyIGFuZCBQeXRob24gMy4KKworVGhlIHNlbWFudGljcyBvZiBQ eXRob24gMydzIHZlcnNpb24gYXJlIG1vcmUgdXNlZnVsIGJlY2F1c2UgdGhleSBzdXBwb3J0Cit1 bmljb2RlIG5hdGl2ZWx5LCB3aGlsZSBQeXRob24gMidzIGNzdiBkb2VzIG5vdC4KKyIiIgorZnJv bSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzLCBhYnNvbHV0ZV9pbXBvcnQKKwor X19hbGxfXyA9IFsiUVVPVEVfTUlOSU1BTCIsICJRVU9URV9BTEwiLCAiUVVPVEVfTk9OTlVNRVJJ QyIsICJRVU9URV9OT05FIiwKKyAgICAgICAgICAgIkVycm9yIiwgIkRpYWxlY3QiLCAiZXhjZWwi LCAiZXhjZWxfdGFiIiwgIndyaXRlciIsCisgICAgICAgICAgICJyZWdpc3Rlcl9kaWFsZWN0Iiwg ImdldF9kaWFsZWN0IiwgIkRpY3RXcml0ZXIiXQorCitpbXBvcnQgcmUKK2ltcG9ydCBudW1iZXJz Citmcm9tIGNzdiBpbXBvcnQgKAorICAgIFFVT1RFX01JTklNQUwsIFFVT1RFX0FMTCwgUVVPVEVf Tk9OTlVNRVJJQywgUVVPVEVfTk9ORSwgRXJyb3IsCispCisKKyMgU3R1ZmYgbmVlZGVkIGZyb20g c2l4CitpbXBvcnQgc3lzCitQWTMgPSBzeXMudmVyc2lvbl9pbmZvWzBdID09IDMKK2lmIFBZMzoK KyAgICBzdHJpbmdfdHlwZXMgPSBzdHIKKyAgICB0ZXh0X3R5cGUgPSBzdHIKKyAgICBiaW5hcnlf dHlwZSA9IGJ5dGVzCisgICAgdW5pY2hyID0gY2hyCitlbHNlOgorICAgIHN0cmluZ190eXBlcyA9 IGJhc2VzdHJpbmcKKyAgICB0ZXh0X3R5cGUgPSB1bmljb2RlCisgICAgYmluYXJ5X3R5cGUgPSBz dHIKKworCitjbGFzcyBRdW90ZVN0cmF0ZWd5KG9iamVjdCk6CisgICAgcXVvdGluZyA9IE5vbmUK KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaWFsZWN0KToKKyAgICAgICAgaWYgc2VsZi5xdW90 aW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXNzZXJ0IGRpYWxlY3QucXVvdGluZyA9PSBz ZWxmLnF1b3RpbmcKKyAgICAgICAgc2VsZi5kaWFsZWN0ID0gZGlhbGVjdAorICAgICAgICBzZWxm LnNldHVwKCkKKworICAgICAgICBlc2NhcGVfcGF0dGVybl9xdW90ZWQgPSByJyh7cXVvdGVjaGFy fSknLmZvcm1hdCgKKyAgICAgICAgICAgIHF1b3RlY2hhcj1yZS5lc2NhcGUoc2VsZi5kaWFsZWN0 LnF1b3RlY2hhciBvciAnIicpKQorICAgICAgICBlc2NhcGVfcGF0dGVybl91bnF1b3RlZCA9IHIn KFt7c3BlY2lhbGNoYXJzfV0pJy5mb3JtYXQoCisgICAgICAgICAgICBzcGVjaWFsY2hhcnM9cmUu ZXNjYXBlKHNlbGYuc3BlY2lhbGNoYXJzKSkKKworICAgICAgICBzZWxmLmVzY2FwZV9yZV9xdW90 ZWQgPSByZS5jb21waWxlKGVzY2FwZV9wYXR0ZXJuX3F1b3RlZCkKKyAgICAgICAgc2VsZi5lc2Nh cGVfcmVfdW5xdW90ZWQgPSByZS5jb21waWxlKGVzY2FwZV9wYXR0ZXJuX3VucXVvdGVkKQorCisg ICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgZm9yIHN0cmF0 ZWd5LXdpZGUgb3B0aW1pemF0aW9ucy4iIiIKKworICAgIGRlZiBxdW90ZWQoc2VsZiwgZmllbGQ9 Tm9uZSwgcmF3X2ZpZWxkPU5vbmUsIG9ubHk9Tm9uZSk6CisgICAgICAgICIiIkRldGVybWluZSB3 aGV0aGVyIHRoaXMgZmllbGQgc2hvdWxkIGJlIHF1b3RlZC4iIiIKKyAgICAgICAgcmFpc2UgTm90 SW1wbGVtZW50ZWRFcnJvcigKKyAgICAgICAgICAgICdxdW90ZWQgbXVzdCBiZSBpbXBsZW1lbnRl ZCBieSBhIHN1YmNsYXNzJykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzcGVjaWFsY2hhcnMo c2VsZik6CisgICAgICAgICIiIlRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJl IGVzY2FwZWQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCisgICAgICAg ICAgICAnc3BlY2lhbGNoYXJzIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYSBzdWJjbGFzcycpCisK KyAgICBkZWYgZXNjYXBlX3JlKHNlbGYsIHF1b3RlZD1Ob25lKToKKyAgICAgICAgaWYgcXVvdGVk OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXNjYXBlX3JlX3F1b3RlZAorICAgICAgICByZXR1 cm4gc2VsZi5lc2NhcGVfcmVfdW5xdW90ZWQKKworICAgIGRlZiBlc2NhcGVjaGFyKHNlbGYsIHF1 b3RlZD1Ob25lKToKKyAgICAgICAgaWYgcXVvdGVkIGFuZCBzZWxmLmRpYWxlY3QuZG91YmxlcXVv dGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kaWFsZWN0LnF1b3RlY2hhcgorICAgICAgICBy ZXR1cm4gc2VsZi5kaWFsZWN0LmVzY2FwZWNoYXIKKworICAgIGRlZiBwcmVwYXJlKHNlbGYsIHJh d19maWVsZCwgb25seT1Ob25lKToKKyAgICAgICAgZmllbGQgPSB0ZXh0X3R5cGUocmF3X2ZpZWxk IGlmIHJhd19maWVsZCBpcyBub3QgTm9uZSBlbHNlICcnKQorICAgICAgICBxdW90ZWQgPSBzZWxm LnF1b3RlZChmaWVsZD1maWVsZCwgcmF3X2ZpZWxkPXJhd19maWVsZCwgb25seT1vbmx5KQorCisg ICAgICAgIGVzY2FwZV9yZSA9IHNlbGYuZXNjYXBlX3JlKHF1b3RlZD1xdW90ZWQpCisgICAgICAg IGVzY2FwZWNoYXIgPSBzZWxmLmVzY2FwZWNoYXIocXVvdGVkPXF1b3RlZCkKKworICAgICAgICBp ZiBlc2NhcGVfcmUuc2VhcmNoKGZpZWxkKToKKyAgICAgICAgICAgIGVzY2FwZWNoYXIgPSAnXFxc XCcgaWYgZXNjYXBlY2hhciA9PSAnXFwnIGVsc2UgZXNjYXBlY2hhcgorICAgICAgICAgICAgaWYg bm90IGVzY2FwZWNoYXI6CisgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ05vIGVzY2FwZWNo YXIgaXMgc2V0JykKKyAgICAgICAgICAgIGVzY2FwZV9yZXBsYWNlID0gcid7ZXNjYXBlY2hhcn1c MScuZm9ybWF0KGVzY2FwZWNoYXI9ZXNjYXBlY2hhcikKKyAgICAgICAgICAgIGZpZWxkID0gZXNj YXBlX3JlLnN1Yihlc2NhcGVfcmVwbGFjZSwgZmllbGQpCisKKyAgICAgICAgaWYgcXVvdGVkOgor ICAgICAgICAgICAgZmllbGQgPSAne3F1b3RlY2hhcn17ZmllbGR9e3F1b3RlY2hhcn0nLmZvcm1h dCgKKyAgICAgICAgICAgICAgICBxdW90ZWNoYXI9c2VsZi5kaWFsZWN0LnF1b3RlY2hhciwgZmll bGQ9ZmllbGQpCisKKyAgICAgICAgcmV0dXJuIGZpZWxkCisKKworY2xhc3MgUXVvdGVNaW5pbWFs U3RyYXRlZ3koUXVvdGVTdHJhdGVneSk6CisgICAgcXVvdGluZyA9IFFVT1RFX01JTklNQUwKKwor ICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgc2VsZi5xdW90ZWRfcmUgPSByZS5jb21waWxl KHInW3tzcGVjaWFsY2hhcnN9XScuZm9ybWF0KAorICAgICAgICAgICAgc3BlY2lhbGNoYXJzPXJl LmVzY2FwZShzZWxmLnNwZWNpYWxjaGFycykpKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNw ZWNpYWxjaGFycyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgIHNlbGYuZGlh bGVjdC5saW5ldGVybWluYXRvciArCisgICAgICAgICAgICBzZWxmLmRpYWxlY3QucXVvdGVjaGFy ICsKKyAgICAgICAgICAgIHNlbGYuZGlhbGVjdC5kZWxpbWl0ZXIgKworICAgICAgICAgICAgKHNl bGYuZGlhbGVjdC5lc2NhcGVjaGFyIG9yICcnKQorICAgICAgICApCisKKyAgICBkZWYgcXVvdGVk KHNlbGYsIGZpZWxkLCBvbmx5LCAqKmt3YXJncyk6CisgICAgICAgIGlmIGZpZWxkID09IHNlbGYu ZGlhbGVjdC5xdW90ZWNoYXIgYW5kIG5vdCBzZWxmLmRpYWxlY3QuZG91YmxlcXVvdGU6CisgICAg ICAgICAgICAjIElmIHRoZSBvbmx5IGNoYXJhY3RlciBpbiB0aGUgZmllbGQgaXMgdGhlIHF1b3Rl Y2hhciwgYW5kCisgICAgICAgICAgICAjIGRvdWJsZXF1b3RlIGlzIGZhbHNlLCB0aGVuIGp1c3Qg ZXNjYXBlIHdpdGhvdXQgb3V0ZXIgcXVvdGVzLgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg ICAgICAgIHJldHVybiBmaWVsZCA9PSAnJyBhbmQgb25seSBvciBib29sKHNlbGYucXVvdGVkX3Jl LnNlYXJjaChmaWVsZCkpCisKKworY2xhc3MgUXVvdGVBbGxTdHJhdGVneShRdW90ZVN0cmF0ZWd5 KToKKyAgICBxdW90aW5nID0gUVVPVEVfQUxMCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3Bl Y2lhbGNoYXJzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kaWFsZWN0LnF1b3RlY2hhcgor CisgICAgZGVmIHF1b3RlZChzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBUcnVlCisK KworY2xhc3MgUXVvdGVOb25udW1lcmljU3RyYXRlZ3koUXVvdGVTdHJhdGVneSk6CisgICAgcXVv dGluZyA9IFFVT1RFX05PTk5VTUVSSUMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzcGVjaWFs Y2hhcnMoc2VsZik6CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICBzZWxmLmRpYWxlY3Qu bGluZXRlcm1pbmF0b3IgKworICAgICAgICAgICAgc2VsZi5kaWFsZWN0LnF1b3RlY2hhciArCisg ICAgICAgICAgICBzZWxmLmRpYWxlY3QuZGVsaW1pdGVyICsKKyAgICAgICAgICAgIChzZWxmLmRp YWxlY3QuZXNjYXBlY2hhciBvciAnJykKKyAgICAgICAgKQorCisgICAgZGVmIHF1b3RlZChzZWxm LCByYXdfZmllbGQsICoqa3dhcmdzKToKKyAgICAgICAgaWYgcmF3X2ZpZWxkIGlzIE5vbmU6Cisg ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKHJh d19maWVsZCwgbnVtYmVycy5OdW1iZXIpCisKKworY2xhc3MgUXVvdGVOb25lU3RyYXRlZ3koUXVv dGVTdHJhdGVneSk6CisgICAgcXVvdGluZyA9IFFVT1RFX05PTkUKKworICAgIEBwcm9wZXJ0eQor ICAgIGRlZiBzcGVjaWFsY2hhcnMoc2VsZik6CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAg ICBzZWxmLmRpYWxlY3QubGluZXRlcm1pbmF0b3IgKworICAgICAgICAgICAgKHNlbGYuZGlhbGVj dC5xdW90ZWNoYXIgb3IgJycpICsKKyAgICAgICAgICAgIHNlbGYuZGlhbGVjdC5kZWxpbWl0ZXIg KworICAgICAgICAgICAgKHNlbGYuZGlhbGVjdC5lc2NhcGVjaGFyIG9yICcnKQorICAgICAgICAp CisKKyAgICBkZWYgcXVvdGVkKHNlbGYsIGZpZWxkLCBvbmx5LCAqKmt3YXJncyk6CisgICAgICAg IGlmIGZpZWxkID09ICcnIGFuZCBvbmx5OgorICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ3Npbmds ZSBlbXB0eSBmaWVsZCByZWNvcmQgbXVzdCBiZSBxdW90ZWQnKQorICAgICAgICByZXR1cm4gRmFs c2UKKworCitjbGFzcyB3cml0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmls ZW9iaiwgZGlhbGVjdD0nZXhjZWwnLCAqKmZtdHBhcmFtcyk6CisgICAgICAgIGlmIGZpbGVvYmog aXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZmlsZW9iaiBtdXN0IGJlIGZp bGUtbGlrZSwgbm90IE5vbmUnKQorCisgICAgICAgIHNlbGYuZmlsZW9iaiA9IGZpbGVvYmoKKwor ICAgICAgICBpZiBpc2luc3RhbmNlKGRpYWxlY3QsIHRleHRfdHlwZSk6CisgICAgICAgICAgICBk aWFsZWN0ID0gZ2V0X2RpYWxlY3QoZGlhbGVjdCkKKworICAgICAgICB0cnk6CisgICAgICAgICAg ICBzZWxmLmRpYWxlY3QgPSBEaWFsZWN0LmNvbWJpbmUoZGlhbGVjdCwgZm10cGFyYW1zKQorICAg ICAgICBleGNlcHQgRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigqZS5h cmdzKQorCisgICAgICAgIHN0cmF0ZWdpZXMgPSB7CisgICAgICAgICAgICBRVU9URV9NSU5JTUFM OiBRdW90ZU1pbmltYWxTdHJhdGVneSwKKyAgICAgICAgICAgIFFVT1RFX0FMTDogUXVvdGVBbGxT dHJhdGVneSwKKyAgICAgICAgICAgIFFVT1RFX05PTk5VTUVSSUM6IFF1b3RlTm9ubnVtZXJpY1N0 cmF0ZWd5LAorICAgICAgICAgICAgUVVPVEVfTk9ORTogUXVvdGVOb25lU3RyYXRlZ3ksCisgICAg ICAgIH0KKyAgICAgICAgc2VsZi5zdHJhdGVneSA9IHN0cmF0ZWdpZXNbc2VsZi5kaWFsZWN0LnF1 b3RpbmddKHNlbGYuZGlhbGVjdCkKKworICAgIGRlZiB3cml0ZXJvdyhzZWxmLCByb3cpOgorICAg ICAgICBpZiByb3cgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEVycm9yKCdyb3cgbXVzdCBi ZSBhbiBpdGVyYWJsZScpCisKKyAgICAgICAgcm93ID0gbGlzdChyb3cpCisgICAgICAgIG9ubHkg PSBsZW4ocm93KSA9PSAxCisgICAgICAgIHJvdyA9IFtzZWxmLnN0cmF0ZWd5LnByZXBhcmUoZmll bGQsIG9ubHk9b25seSkgZm9yIGZpZWxkIGluIHJvd10KKworICAgICAgICBsaW5lID0gc2VsZi5k aWFsZWN0LmRlbGltaXRlci5qb2luKHJvdykgKyBzZWxmLmRpYWxlY3QubGluZXRlcm1pbmF0b3IK KyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZW9iai53cml0ZShsaW5lKQorCisgICAgZGVmIHdyaXRl cm93cyhzZWxmLCByb3dzKToKKyAgICAgICAgZm9yIHJvdyBpbiByb3dzOgorICAgICAgICAgICAg c2VsZi53cml0ZXJvdyhyb3cpCisKKworX2RpYWxlY3RfcmVnaXN0cnkgPSB7fQorCisKK2RlZiBy ZWdpc3Rlcl9kaWFsZWN0KG5hbWUsIGRpYWxlY3Q9J2V4Y2VsJywgKipmbXRwYXJhbXMpOgorICAg IGlmIG5vdCBpc2luc3RhbmNlKG5hbWUsIHRleHRfdHlwZSk6CisgICAgICAgIHJhaXNlIFR5cGVF cnJvcignIm5hbWUiIG11c3QgYmUgYSBzdHJpbmcnKQorCisgICAgZGlhbGVjdCA9IERpYWxlY3Qu ZXh0ZW5kKGRpYWxlY3QsIGZtdHBhcmFtcykKKworICAgIHRyeToKKyAgICAgICAgRGlhbGVjdC52 YWxpZGF0ZShkaWFsZWN0KQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJhaXNlIFR5 cGVFcnJvcignZGlhbGVjdCBpcyBpbnZhbGlkJykKKworICAgIGFzc2VydCBuYW1lIG5vdCBpbiBf ZGlhbGVjdF9yZWdpc3RyeQorICAgIF9kaWFsZWN0X3JlZ2lzdHJ5W25hbWVdID0gZGlhbGVjdAor CisKK2RlZiBnZXRfZGlhbGVjdChuYW1lKToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBfZGlh bGVjdF9yZWdpc3RyeVtuYW1lXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmFpc2Ug RXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGRpYWxlY3QgezB9Jy5mb3JtYXQobmFtZSkpCisKKworY2xh c3MgRGlhbGVjdChvYmplY3QpOgorICAgICIiIkRlc2NyaWJlIGEgQ1NWIGRpYWxlY3QuCisgICAg VGhpcyBtdXN0IGJlIHN1YmNsYXNzZWQgKHNlZSBjc3YuZXhjZWwpLiAgVmFsaWQgYXR0cmlidXRl cyBhcmU6CisgICAgZGVsaW1pdGVyLCBxdW90ZWNoYXIsIGVzY2FwZWNoYXIsIGRvdWJsZXF1b3Rl LCBza2lwaW5pdGlhbHNwYWNlLAorICAgIGxpbmV0ZXJtaW5hdG9yLCBxdW90aW5nLCBzdHJpY3Qu CisgICAgIiIiCisgICAgX25hbWUgPSAiIgorICAgIF92YWxpZCA9IEZhbHNlCisgICAgIyBwbGFj ZWhvbGRlcnMKKyAgICBkZWxpbWl0ZXIgPSBOb25lCisgICAgcXVvdGVjaGFyID0gTm9uZQorICAg IGVzY2FwZWNoYXIgPSBOb25lCisgICAgZG91YmxlcXVvdGUgPSBOb25lCisgICAgc2tpcGluaXRp YWxzcGFjZSA9IE5vbmUKKyAgICBsaW5ldGVybWluYXRvciA9IE5vbmUKKyAgICBxdW90aW5nID0g Tm9uZQorICAgIHN0cmljdCA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAg ICAgc2VsZi52YWxpZGF0ZShzZWxmKQorICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyAhPSBEaWFs ZWN0OgorICAgICAgICAgICAgc2VsZi5fdmFsaWQgPSBUcnVlCisKKyAgICBAY2xhc3NtZXRob2QK KyAgICBkZWYgdmFsaWRhdGUoY2xzLCBkaWFsZWN0KToKKyAgICAgICAgZGlhbGVjdCA9IGNscy5l eHRlbmQoZGlhbGVjdCkKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkaWFsZWN0LnF1b3Rp bmcsIGludCk6CisgICAgICAgICAgICByYWlzZSBFcnJvcignInF1b3RpbmciIG11c3QgYmUgYW4g aW50ZWdlcicpCisKKyAgICAgICAgaWYgZGlhbGVjdC5kZWxpbWl0ZXIgaXMgTm9uZToKKyAgICAg ICAgICAgIHJhaXNlIEVycm9yKCdkZWxpbWl0ZXIgbXVzdCBiZSBzZXQnKQorICAgICAgICBjbHMu dmFsaWRhdGVfdGV4dChkaWFsZWN0LCAnZGVsaW1pdGVyJykKKworICAgICAgICBpZiBkaWFsZWN0 LmxpbmV0ZXJtaW5hdG9yIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBFcnJvcignbGluZXRl cm1pbmF0b3IgbXVzdCBiZSBzZXQnKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkaWFsZWN0 LmxpbmV0ZXJtaW5hdG9yLCB0ZXh0X3R5cGUpOgorICAgICAgICAgICAgcmFpc2UgRXJyb3IoJyJs aW5ldGVybWluYXRvciIgbXVzdCBiZSBhIHN0cmluZycpCisKKyAgICAgICAgaWYgZGlhbGVjdC5x dW90aW5nIG5vdCBpbiBbCisgICAgICAgICAgICAgICAgUVVPVEVfTk9ORSwgUVVPVEVfTUlOSU1B TCwgUVVPVEVfTk9OTlVNRVJJQywgUVVPVEVfQUxMXToKKyAgICAgICAgICAgIHJhaXNlIEVycm9y KCdJbnZhbGlkIHF1b3Rpbmcgc3BlY2lmaWVkJykKKworICAgICAgICBpZiBkaWFsZWN0LnF1b3Rp bmcgIT0gUVVPVEVfTk9ORToKKyAgICAgICAgICAgIGlmIGRpYWxlY3QucXVvdGVjaGFyIGlzIE5v bmUgYW5kIGRpYWxlY3QuZXNjYXBlY2hhciBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNl IEVycm9yKCdxdW90ZWNoYXIgbXVzdCBiZSBzZXQgaWYgcXVvdGluZyBlbmFibGVkJykKKyAgICAg ICAgICAgIGlmIGRpYWxlY3QucXVvdGVjaGFyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAg IGNscy52YWxpZGF0ZV90ZXh0KGRpYWxlY3QsICdxdW90ZWNoYXInKQorCisgICAgQHN0YXRpY21l dGhvZAorICAgIGRlZiB2YWxpZGF0ZV90ZXh0KGRpYWxlY3QsIGF0dHIpOgorICAgICAgICB2YWwg PSBnZXRhdHRyKGRpYWxlY3QsIGF0dHIpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbCwg dGV4dF90eXBlKToKKyAgICAgICAgICAgIGlmIHR5cGUodmFsKSA9PSBieXRlczoKKyAgICAgICAg ICAgICAgICByYWlzZSBFcnJvcignInswfSIgbXVzdCBiZSBzdHJpbmcsIG5vdCBieXRlcycuZm9y bWF0KGF0dHIpKQorICAgICAgICAgICAgcmFpc2UgRXJyb3IoJyJ7MH0iIG11c3QgYmUgc3RyaW5n LCBub3QgezF9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgYXR0ciwgdHlwZSh2YWwpLl9fbmFt ZV9fKSkKKworICAgICAgICBpZiBsZW4odmFsKSAhPSAxOgorICAgICAgICAgICAgcmFpc2UgRXJy b3IoJyJ7MH0iIG11c3QgYmUgYSAxLWNoYXJhY3RlciBzdHJpbmcnLmZvcm1hdChhdHRyKSkKKwor ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZGVmYXVsdHMoKToKKyAgICAgICAgcmV0dXJuIHsK KyAgICAgICAgICAgICdkZWxpbWl0ZXInOiAnLCcsCisgICAgICAgICAgICAnZG91YmxlcXVvdGUn OiBUcnVlLAorICAgICAgICAgICAgJ2VzY2FwZWNoYXInOiBOb25lLAorICAgICAgICAgICAgJ2xp bmV0ZXJtaW5hdG9yJzogJ1xyXG4nLAorICAgICAgICAgICAgJ3F1b3RlY2hhcic6ICciJywKKyAg ICAgICAgICAgICdxdW90aW5nJzogUVVPVEVfTUlOSU1BTCwKKyAgICAgICAgICAgICdza2lwaW5p dGlhbHNwYWNlJzogRmFsc2UsCisgICAgICAgICAgICAnc3RyaWN0JzogRmFsc2UsCisgICAgICAg IH0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBleHRlbmQoY2xzLCBkaWFsZWN0LCBmbXRw YXJhbXM9Tm9uZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGlhbGVjdCwgc3RyaW5nX3R5cGVz KToKKyAgICAgICAgICAgIGRpYWxlY3QgPSBnZXRfZGlhbGVjdChkaWFsZWN0KQorCisgICAgICAg IGlmIGZtdHBhcmFtcyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGRpYWxlY3QKKworICAg ICAgICBkZWZhdWx0cyA9IGNscy5kZWZhdWx0cygpCisKKyAgICAgICAgaWYgYW55KHBhcmFtIG5v dCBpbiBkZWZhdWx0cyBmb3IgcGFyYW0gaW4gZm10cGFyYW1zKToKKyAgICAgICAgICAgIHJhaXNl IFR5cGVFcnJvcignSW52YWxpZCBmbXRwYXJhbScpCisKKyAgICAgICAgc3BlY2lmaWVkID0gZGlj dCgKKyAgICAgICAgICAgIChhdHRyLCBnZXRhdHRyKGRpYWxlY3QsIGF0dHIsIE5vbmUpKQorICAg ICAgICAgICAgZm9yIGF0dHIgaW4gY2xzLmRlZmF1bHRzKCkKKyAgICAgICAgKQorCisgICAgICAg IHNwZWNpZmllZC51cGRhdGUoZm10cGFyYW1zKQorICAgICAgICByZXR1cm4gdHlwZShzdHIoJ0V4 dGVuZGVkRGlhbGVjdCcpLCAoY2xzLCksIHNwZWNpZmllZCkKKworICAgIEBjbGFzc21ldGhvZAor ICAgIGRlZiBjb21iaW5lKGNscywgZGlhbGVjdCwgZm10cGFyYW1zKToKKyAgICAgICAgIiIiQ3Jl YXRlIGEgbmV3IGRpYWxlY3Qgd2l0aCBkZWZhdWx0cyBhbmQgYWRkZWQgcGFyYW1ldGVycy4iIiIK KyAgICAgICAgZGlhbGVjdCA9IGNscy5leHRlbmQoZGlhbGVjdCwgZm10cGFyYW1zKQorICAgICAg ICBkZWZhdWx0cyA9IGNscy5kZWZhdWx0cygpCisgICAgICAgIHNwZWNpZmllZCA9IGRpY3QoCisg ICAgICAgICAgICAoYXR0ciwgZ2V0YXR0cihkaWFsZWN0LCBhdHRyLCBOb25lKSkKKyAgICAgICAg ICAgIGZvciBhdHRyIGluIGRlZmF1bHRzCisgICAgICAgICAgICBpZiBnZXRhdHRyKGRpYWxlY3Qs IGF0dHIsIE5vbmUpIGlzIG5vdCBOb25lIG9yCisgICAgICAgICAgICBhdHRyIGluIFsncXVvdGVj aGFyJywgJ2RlbGltaXRlcicsICdsaW5ldGVybWluYXRvcicsICdxdW90aW5nJ10KKyAgICAgICAg KQorCisgICAgICAgIGRlZmF1bHRzLnVwZGF0ZShzcGVjaWZpZWQpCisgICAgICAgIGRpYWxlY3Qg PSB0eXBlKHN0cignQ29tYmluZWREaWFsZWN0JyksIChjbHMsKSwgZGVmYXVsdHMpCisgICAgICAg IGNscy52YWxpZGF0ZShkaWFsZWN0KQorICAgICAgICByZXR1cm4gZGlhbGVjdCgpCisKKyAgICBk ZWYgX19kZWxhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgIGlmIHNlbGYuX3ZhbGlkOgorICAg ICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoJ2RpYWxlY3QgaXMgaW1tdXRhYmxlLicpCisg ICAgICAgIHN1cGVyKERpYWxlY3QsIHNlbGYpLl9fZGVsYXR0cl9fKGF0dHIpCisKKyAgICBkZWYg X19zZXRhdHRyX18oc2VsZiwgYXR0ciwgdmFsdWUpOgorICAgICAgICBpZiBzZWxmLl92YWxpZDoK KyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdkaWFsZWN0IGlzIGltbXV0YWJsZS4n KQorICAgICAgICBzdXBlcihEaWFsZWN0LCBzZWxmKS5fX3NldGF0dHJfXyhhdHRyLCB2YWx1ZSkK KworCitjbGFzcyBleGNlbChEaWFsZWN0KToKKyAgICAiIiJEZXNjcmliZSB0aGUgdXN1YWwgcHJv cGVydGllcyBvZiBFeGNlbC1nZW5lcmF0ZWQgQ1NWIGZpbGVzLiIiIgorICAgIGRlbGltaXRlciA9 ICcsJworICAgIHF1b3RlY2hhciA9ICciJworICAgIGRvdWJsZXF1b3RlID0gVHJ1ZQorICAgIHNr aXBpbml0aWFsc3BhY2UgPSBGYWxzZQorICAgIGxpbmV0ZXJtaW5hdG9yID0gJ1xyXG4nCisgICAg cXVvdGluZyA9IFFVT1RFX01JTklNQUwKKworCitjbGFzcyBleGNlbF90YWIoZXhjZWwpOgorICAg ICIiIkRlc2NyaWJlIHRoZSB1c3VhbCBwcm9wZXJ0aWVzIG9mIEV4Y2VsLWdlbmVyYXRlZCBUQUIt ZGVsaW1pdGVkIGZpbGVzLiIiIgorICAgIGRlbGltaXRlciA9ICdcdCcKKworCitjbGFzcyB1bml4 X2RpYWxlY3QoRGlhbGVjdCk6CisgICAgIiIiRGVzY3JpYmUgdGhlIHVzdWFsIHByb3BlcnRpZXMg b2YgVW5peC1nZW5lcmF0ZWQgQ1NWIGZpbGVzLiIiIgorICAgIGRlbGltaXRlciA9ICcsJworICAg IHF1b3RlY2hhciA9ICciJworICAgIGRvdWJsZXF1b3RlID0gVHJ1ZQorICAgIHNraXBpbml0aWFs c3BhY2UgPSBGYWxzZQorICAgIGxpbmV0ZXJtaW5hdG9yID0gJ1xuJworICAgIHF1b3RpbmcgPSBR VU9URV9BTEwKKworCityZWdpc3Rlcl9kaWFsZWN0KCJleGNlbCIsIGV4Y2VsKQorcmVnaXN0ZXJf ZGlhbGVjdCgiZXhjZWwtdGFiIiwgZXhjZWxfdGFiKQorcmVnaXN0ZXJfZGlhbGVjdCgidW5peCIs IHVuaXhfZGlhbGVjdCkKKworCitjbGFzcyBEaWN0V3JpdGVyKG9iamVjdCk6CisgICAgZGVmIF9f aW5pdF9fKHNlbGYsIGYsIGZpZWxkbmFtZXMsIHJlc3R2YWw9IiIsIGV4dHJhc2FjdGlvbj0icmFp c2UiLAorICAgICAgICAgICAgICAgICBkaWFsZWN0PSJleGNlbCIsICphcmdzLCAqKmt3ZHMpOgor ICAgICAgICBzZWxmLmZpZWxkbmFtZXMgPSBmaWVsZG5hbWVzICAgICMgbGlzdCBvZiBrZXlzIGZv ciB0aGUgZGljdAorICAgICAgICBzZWxmLnJlc3R2YWwgPSByZXN0dmFsICAgICAgICAgICMgZm9y IHdyaXRpbmcgc2hvcnQgZGljdHMKKyAgICAgICAgaWYgZXh0cmFzYWN0aW9uLmxvd2VyKCkgbm90 IGluICgicmFpc2UiLCAiaWdub3JlIik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJl eHRyYXNhY3Rpb24gKCVzKSBtdXN0IGJlICdyYWlzZScgb3IgJ2lnbm9yZSciCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICUgZXh0cmFzYWN0aW9uKQorICAgICAgICBzZWxmLmV4dHJhc2Fj dGlvbiA9IGV4dHJhc2FjdGlvbgorICAgICAgICBzZWxmLndyaXRlciA9IHdyaXRlcihmLCBkaWFs ZWN0LCAqYXJncywgKiprd2RzKQorCisgICAgZGVmIHdyaXRlaGVhZGVyKHNlbGYpOgorICAgICAg ICBoZWFkZXIgPSBkaWN0KHppcChzZWxmLmZpZWxkbmFtZXMsIHNlbGYuZmllbGRuYW1lcykpCisg ICAgICAgIHNlbGYud3JpdGVyb3coaGVhZGVyKQorCisgICAgZGVmIF9kaWN0X3RvX2xpc3Qoc2Vs Ziwgcm93ZGljdCk6CisgICAgICAgIGlmIHNlbGYuZXh0cmFzYWN0aW9uID09ICJyYWlzZSI6Cisg ICAgICAgICAgICB3cm9uZ19maWVsZHMgPSBbayBmb3IgayBpbiByb3dkaWN0IGlmIGsgbm90IGlu IHNlbGYuZmllbGRuYW1lc10KKyAgICAgICAgICAgIGlmIHdyb25nX2ZpZWxkczoKKyAgICAgICAg ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJkaWN0IGNvbnRhaW5zIGZpZWxkcyBub3QgaW4gZmll bGRuYW1lczogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCAiLmpvaW4o W3JlcHIoeCkgZm9yIHggaW4gd3JvbmdfZmllbGRzXSkpCisgICAgICAgIHJldHVybiAocm93ZGlj dC5nZXQoa2V5LCBzZWxmLnJlc3R2YWwpIGZvciBrZXkgaW4gc2VsZi5maWVsZG5hbWVzKQorCisg ICAgZGVmIHdyaXRlcm93KHNlbGYsIHJvd2RpY3QpOgorICAgICAgICByZXR1cm4gc2VsZi53cml0 ZXIud3JpdGVyb3coc2VsZi5fZGljdF90b19saXN0KHJvd2RpY3QpKQorCisgICAgZGVmIHdyaXRl cm93cyhzZWxmLCByb3dkaWN0cyk6CisgICAgICAgIHJldHVybiBzZWxmLndyaXRlci53cml0ZXJv d3MobWFwKHNlbGYuX2RpY3RfdG9fbGlzdCwgcm93ZGljdHMpKQpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL2Nvbm5lY3Rpb24ucHkgYi93ZWIvcGdhZG1pbi91 dGlscy9kcml2ZXIvcHN5Y29wZzIvY29ubmVjdGlvbi5weQppbmRleCAyYzlmY2I1Li5kMzFkZjRh IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvcHN5Y29wZzIvY29ubmVjdGlv bi5weQorKysgYi93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvcHN5Y29wZzIvY29ubmVjdGlvbi5w eQpAQCAtMzcsMTYgKzM3LDEzIEBAIGZyb20gLnR5cGVjYXN0IGltcG9ydCByZWdpc3Rlcl9nbG9i YWxfdHlwZWNhc3RlcnMsIFwKICAgICByZWdpc3Rlcl9zdHJpbmdfdHlwZWNhc3RlcnMsIHJlZ2lz dGVyX2JpbmFyeV90eXBlY2FzdGVycywgXAogICAgIHJlZ2lzdGVyX2FycmF5X3RvX3N0cmluZ190 eXBlY2FzdGVycywgQUxMX0pTT05fVFlQRVMKIGZyb20gLmVuY29kaW5nIGltcG9ydCBnZXRFbmNv ZGluZworZnJvbSBwZ2FkbWluLnV0aWxzIGltcG9ydCBjc3YKIAogaWYgc3lzLnZlcnNpb25faW5m byA8ICgzLCk6Ci0gICAgIyBQeXRob24yIGluLWJ1aWx0IGNzdiBtb2R1bGUgZG8gbm90IGhhbmRs ZSB1bmljb2RlCi0gICAgIyBiYWNrcG9ydHMuY3N2IG1vZHVsZSBwb3J0ZWQgZnJvbSBQWTMgY3N2 IG1vZHVsZSBmb3IgdW5pY29kZSBoYW5kbGluZwotICAgIGZyb20gYmFja3BvcnRzIGltcG9ydCBj c3YKICAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogICAgIElTX1BZMiA9IFRydWUK IGVsc2U6CiAgICAgZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KLSAgICBpbXBvcnQgY3N2CiAgICAg SVNfUFkyID0gRmFsc2UKIAogXyA9IGdldHRleHQK --0000000000003a7505057d43bb9e--