From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id E926F3857C4A for ; Tue, 9 Aug 2022 10:36:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E926F3857C4A Received: from mail-oi1-f198.google.com (mail-oi1-f198.google.com [209.85.167.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-83-9mRWER25MQ25-Qn0xA7JAw-1; Tue, 09 Aug 2022 06:35:58 -0400 X-MC-Unique: 9mRWER25MQ25-Qn0xA7JAw-1 Received: by mail-oi1-f198.google.com with SMTP id n189-20020acaefc6000000b00342fedaf7dfso1485660oih.2 for ; Tue, 09 Aug 2022 03:35:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc; bh=eMnP/GXPi06Y25WT0XDDYPtoeDbRiBF6/fMX3SNQlU0=; b=1o3W8UP90eBMWuXLCRDB1w37b4z9sXBQujUoaOdcv5x/Exoe/e/dodB5Jzq9uEHg9M f6OnlNRjiPSO4HmZeNuZMzsPD2B7EgDDQD98jN+Jt+GT5448QO9yG+iBKR6qzX+9Qbx1 m+jW5RmyoIpTlXZnU8QyyFzpg3v3p9IZYQPGevPSCAzYwac3jBLsGLhDuWkeH4dWzidc jzdRgyAeh/7YWJu2MfOEryZDfSZMT9tquyJNgTVtahvGN/53lNZyhG/aeMQTdnXNvffP OXtTVsIEiL7Z4TpPtvoI2E8Tw/kAnOCcwrrCxQ67T9Qpuls21llVS5+MeUOsLQ1e5SRl JVOw== X-Gm-Message-State: ACgBeo2+HmE+jl5AubH2IxK0mAm2eYSWhU+5Kv6DpMgewAa5cXCerUt4 P2ZjkOlxmFYEOQ8a50dpDXKWZ3xy8DZkR9J99UvnLJ8crxVs1/3S3+Kgm1bbvnreyvNBnjDK8eq CMVVYEd5+tX+UxtzUPru1vzV6Y2fY05k= X-Received: by 2002:a05:6808:8e1:b0:343:c7a:e9c7 with SMTP id d1-20020a05680808e100b003430c7ae9c7mr1529237oic.119.1660041358112; Tue, 09 Aug 2022 03:35:58 -0700 (PDT) X-Google-Smtp-Source: AA6agR6K38iFCZQ98/xIgk/OkLMPoOjFfFQ4QrJc+k9o85jO8D52DezI/clX4/QjrAWLegTkVCFM7FV61DYoW1Rpykg= X-Received: by 2002:a05:6808:8e1:b0:343:c7a:e9c7 with SMTP id d1-20020a05680808e100b003430c7ae9c7mr1529225oic.119.1660041357767; Tue, 09 Aug 2022 03:35:57 -0700 (PDT) MIME-Version: 1.0 From: Ulrich Drepper Date: Tue, 9 Aug 2022 12:35:47 +0200 Message-ID: Subject: Unify container pretty printers [PR65230] To: gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000716eed05e5cc7f4f" X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, HTML_MESSAGE, KAM_SHORT, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Aug 2022 10:36:02 -0000 --000000000000716eed05e5cc7f4f Content-Type: text/plain; charset="UTF-8" In PR65320 Martin raised the point that the pretty printer for the C++ containers is inconsistent across the different types. It's also inconsistent when it comes to showing different states (empty vs not) of the same type. In addition, IMO some more information should be printed like the template parameters which otherwise certainly can be retrieved through ptype but along with a lot more information one doesn't look for. In the attached patch I've changed the pretty printers of most of the containers to be mostly consistent, at least as far as it is possible given the different nature. I've also fixed some bugs (e.g., printing indeces for set elements). You can see the side-by-side comparison of the output in the text file I attached to the bug (https://gcc.gnu.org/bugzilla/attachment.cgi?id=53419). Bring very long lines or use 'less -S'. Jonathan and I discussed whether such big changes are possible. Someone could consider the output guaranteed by some ABI. We came to the conclusion that this is a bad idea and shouldn't even start to plant that idea in people's minds. The pretty printer output is meant for humans. Comments? --000000000000716eed05e5cc7f4f Content-Type: application/octet-stream; name=d-containers-printers Content-Disposition: attachment; filename=d-containers-printers Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l6m1iyrp0 LS0tIGxpYnN0ZGMrKy12My9weXRob24vbGlic3RkY3h4L3Y2L3ByaW50ZXJzLnB5CTIwMjItMDct MjcgMTg6Mzk6NTUuNjExOTQ0NzY1ICswMjAwCisrKyBsaWJzdGRjKystdjMvcHl0aG9uL2xpYnN0 ZGN4eC92Ni9wcmludGVycy5weQkyMDIyLTA4LTA1IDE4OjExOjEzLjIwNzgxMjE2OCArMDIwMApA QCAtMjQyLDcgKzI0Miw2IEBAIGNsYXNzIFNoYXJlZFBvaW50ZXJQcmludGVyOgogICAgICAgICBz dGF0ZSA9ICdlbXB0eScKICAgICAgICAgcmVmY291bnRzID0gc2VsZi5fZ2V0X3JlZmNvdW50cygp CiAgICAgICAgIHRhcmcgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50KDApCi0gICAg ICAgIHRhcmcgPSBzdHJpcF92ZXJzaW9uZWRfbmFtZXNwYWNlKHN0cih0YXJnKSkKIAogICAgICAg ICBpZiByZWZjb3VudHMgIT0gMDoKICAgICAgICAgICAgIHVzZWNvdW50ID0gcmVmY291bnRzWydf TV91c2VfY291bnQnXQpAQCAtMjUxLDcgKzI1MCw3IEBAIGNsYXNzIFNoYXJlZFBvaW50ZXJQcmlu dGVyOgogICAgICAgICAgICAgICAgIHN0YXRlID0gJ2V4cGlyZWQsIHdlYWsgY291bnQgJWQnICUg d2Vha2NvdW50CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHN0YXRlID0gJ3Vz ZSBjb3VudCAlZCwgd2VhayBjb3VudCAlZCcgJSAodXNlY291bnQsIHdlYWtjb3VudCAtIDEpCi0g ICAgICAgIHJldHVybiAnJXM8JXM+ICglcyknICUgKHNlbGYudHlwZW5hbWUsIHRhcmcsIHN0YXRl KQorICAgICAgICByZXR1cm4gJyVzPCVzPiAoJXMpJyAlIChzZWxmLnR5cGVuYW1lLCBzdHIodGFy ZyksIHN0YXRlKQogCiBkZWYgX3R1cGxlX2ltcGxfZ2V0KHZhbCk6CiAgICAgIlJldHVybiB0aGUg dHVwbGUgZWxlbWVudCBzdG9yZWQgaW4gYSBfVHVwbGVfaW1wbDxOLCBUPiBiYXNlIGNsYXNzLiIK QEAgLTQ4Miw3ICs0ODEsMTEgQEAgY2xhc3MgU3RkVmVjdG9yUHJpbnRlcjoKICAgICAgICAgICAg ICAgICByZXR1cm4gKCdbJWRdJyAlIGNvdW50LCBlbHQpCiAKICAgICBkZWYgX19pbml0X18oc2Vs ZiwgdHlwZW5hbWUsIHZhbCk6Ci0gICAgICAgIHNlbGYudHlwZW5hbWUgPSBzdHJpcF92ZXJzaW9u ZWRfbmFtZXNwYWNlKHR5cGVuYW1lKQorICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHInXihzdGQ6 OihfX2RlYnVnOjopP3ZlY3Rvcik8KC4qKSwgc3RkOjphbGxvY2F0b3I8XDMgPz4gPiQnLCB2YWwu dHlwZS5uYW1lKQorICAgICAgICBpZiBtYXRjaCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi50 eXBlbmFtZSA9IHN0cmlwX3ZlcnNpb25lZF9uYW1lc3BhY2UodmFsLnR5cGUubmFtZSkKKyAgICAg ICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudHlwZW5hbWUgPSAnJXM8JXM+JyAlIChtYXRjaFsx XSwgbWF0Y2hbM10pCiAgICAgICAgIHNlbGYudmFsID0gdmFsCiAgICAgICAgIHNlbGYuaXNfYm9v bCA9IHZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50KDApLmNvZGUgPT0gZ2RiLlRZUEVfQ09ERV9C T09MCiAKQEAgLTUwMywxMSArNTA2LDE3IEBAIGNsYXNzIFN0ZFZlY3RvclByaW50ZXI6CiAgICAg ICAgICAgICBibCA9IDggKiBpdHlwZS5zaXplb2YKICAgICAgICAgICAgIGxlbmd0aCAgID0gYmwg KiAoZmluaXNoIC0gc3RhcnQpICsgZm8KICAgICAgICAgICAgIGNhcGFjaXR5ID0gYmwgKiAoZW5k IC0gc3RhcnQpCi0gICAgICAgICAgICByZXR1cm4gKCclczxib29sPiBvZiBsZW5ndGggJWQsIGNh cGFjaXR5ICVkJwotICAgICAgICAgICAgICAgICAgICAlIChzZWxmLnR5cGVuYW1lLCBpbnQgKGxl bmd0aCksIGludCAoY2FwYWNpdHkpKSkKKyAgICAgICAgICAgIHJlcyA9ICgnJXMgb2YgbGVuZ3Ro ICVkLCBjYXBhY2l0eSAlZCcKKyAgICAgICAgICAgICAgICAgICAlIChzZWxmLnR5cGVuYW1lLCBp bnQgKGxlbmd0aCksIGludCAoY2FwYWNpdHkpKSkKKyAgICAgICAgICAgIGlmIGxlbmd0aCA9PSAw OgorICAgICAgICAgICAgICAgIHJlcyArPSAnID0ge30nCisgICAgICAgICAgICByZXR1cm4gcmVz CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gKCclcyBvZiBsZW5ndGggJWQsIGNh cGFjaXR5ICVkJwotICAgICAgICAgICAgICAgICAgICAlIChzZWxmLnR5cGVuYW1lLCBpbnQgKGZp bmlzaCAtIHN0YXJ0KSwgaW50IChlbmQgLSBzdGFydCkpKQorICAgICAgICAgICAgcmVzID0gKCcl cyBvZiBsZW5ndGggJWQsIGNhcGFjaXR5ICVkJworICAgICAgICAgICAgICAgICAgICUgKHNlbGYu dHlwZW5hbWUsIGludCAoZmluaXNoIC0gc3RhcnQpLCBpbnQgKGVuZCAtIHN0YXJ0KSkpCisgICAg ICAgICAgICBpZiBpbnQgKGZpbmlzaCAtIHN0YXJ0KSA9PSAwOgorICAgICAgICAgICAgICAgIHJl cyArPSAnID0ge30nCisgICAgICAgICAgICByZXR1cm4gcmVzCiAKICAgICBkZWYgZGlzcGxheV9o aW50KHNlbGYpOgogICAgICAgICByZXR1cm4gJ2FycmF5JwpAQCAtNTQ1LDYgKzU1NCw0NyBAQCBj bGFzcyBTdGRCaXRSZWZlcmVuY2VQcmludGVyOgogICAgICAgICAgICAgcmV0dXJuICdpbnZhbGlk IHN0ZDo6dmVjdG9yPGJvb2w+OjpyZWZlcmVuY2UnCiAgICAgICAgIHJldHVybiBib29sKHNlbGYu dmFsWydfTV9wJ10uZGVyZWZlcmVuY2UoKSAmIChzZWxmLnZhbFsnX01fbWFzayddKSkKIAorY2xh c3MgU3RkQXJyYXlQcmludGVyOgorICAgICJQcmludCBhIHN0ZDo6YXJyYXkiCisKKyAgICBjbGFz cyBfaXRlcmF0b3IoSXRlcmF0b3IpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYXJyKToK KyAgICAgICAgICAgIHNlbGYuZWxzID0gYXJyWydfTV9lbGVtcyddCisgICAgICAgICAgICBpZiBz ZWxmLmVscy50eXBlLmNvZGUgPT0gZ2RiLlRZUEVfQ09ERV9TVFJVQ1Q6CisgICAgICAgICAgICAg ICAgIyBBIHplcm8tc2l6ZWQgYXJyYXkgaGFzIGFuIGVtcHR5IHN0cnVjdCBhcyB2YWx1ZQorICAg ICAgICAgICAgICAgIHNlbGYubiA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg ICAgc2VsZi5uID0gc2VsZi5lbHMudHlwZS5zaXplb2YgLy8gc2VsZi5lbHNbMF0udHlwZS5zaXpl b2YKKyAgICAgICAgICAgIHNlbGYuY291bnQgPSAwCisKKyAgICAgICAgZGVmIF9faXRlcl9fKHNl bGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBkZWYgX19uZXh0X18oc2Vs Zik6CisgICAgICAgICAgICBpZiBzZWxmLmNvdW50ID09IHNlbGYubjoKKyAgICAgICAgICAgICAg ICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICBjb3VudCA9IHNlbGYuY291bnQKKyAg ICAgICAgICAgIHNlbGYuY291bnQgKz0gMQorICAgICAgICAgICAgZWx0ID0gc2VsZi5lbHNbY291 bnRdCisgICAgICAgICAgICByZXR1cm4gKCdbJWRdJyAlIGNvdW50LCBlbHQpCisKKyAgICBkZWYg X19pbml0X18oc2VsZiwgdHlwZW5hbWUsIHZhbCk6CisgICAgICAgIHNlbGYudHlwZW5hbWUgPSBz dHJpcF92ZXJzaW9uZWRfbmFtZXNwYWNlKHZhbC50eXBlLm5hbWUpCisgICAgICAgIHNlbGYudmFs ID0gdmFsCisKKyAgICBkZWYgY2hpbGRyZW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9p dGVyYXRvcihzZWxmLnZhbCkKKworICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CisgICAgICAgIHJl cyA9IHNlbGYudHlwZW5hbWUKKyAgICAgICAgaWYgc2VsZi52YWxbJ19NX2VsZW1zJ10udHlwZS5j b2RlID09IGdkYi5UWVBFX0NPREVfU1RSVUNUOgorICAgICAgICAgICAgIyBBIHplcm8tc2l6ZWQg YXJyYXkgaGFzIGFuIGVtcHR5IHN0cnVjdCBhcyB2YWx1ZQorICAgICAgICAgICAgcmVzICs9ICcg PSB7fScKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIGRpc3BsYXlfaGludChzZWxmKToK KyAgICAgICAgcmV0dXJuICdhcnJheScKKwogY2xhc3MgU3RkVHVwbGVQcmludGVyOgogICAgICJQ cmludCBhIHN0ZDo6dHVwbGUiCiAKQEAgLTYxNiwxNiArNjY2LDE4IEBAIGNsYXNzIFN0ZFR1cGxl UHJpbnRlcjoKICAgICAgICAgICAgICAgICByZXR1cm4gKCdbJWRdJyAlIChzZWxmLmNvdW50IC0g MSksIGltcGxbJ19NX2hlYWRfaW1wbCddKQogCiAgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBl bmFtZSwgdmFsKToKLSAgICAgICAgc2VsZi50eXBlbmFtZSA9IHN0cmlwX3ZlcnNpb25lZF9uYW1l c3BhY2UodHlwZW5hbWUpCisgICAgICAgIHNlbGYudHlwZW5hbWUgPSB2YWwudHlwZS5uYW1lCiAg ICAgICAgIHNlbGYudmFsID0gdmFsOwogCiAgICAgZGVmIGNoaWxkcmVuIChzZWxmKToKICAgICAg ICAgcmV0dXJuIHNlbGYuX2l0ZXJhdG9yIChzZWxmLnZhbCkKIAogICAgIGRlZiB0b19zdHJpbmcg KHNlbGYpOgorICAgICAgICByZXMgPSBzZWxmLnR5cGVuYW1lCiAgICAgICAgIGlmIGxlbiAoc2Vs Zi52YWwudHlwZS5maWVsZHMgKCkpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJ2VtcHR5ICVz JyAlIChzZWxmLnR5cGVuYW1lKQotICAgICAgICByZXR1cm4gJyVzIGNvbnRhaW5pbmcnICUgKHNl bGYudHlwZW5hbWUpCisgICAgICAgICAgICByZXMgKz0gJyA9IHt9JworICAgICAgICByZXR1cm4g cmVzCisKIAogY2xhc3MgU3RkU3RhY2tPclF1ZXVlUHJpbnRlcjoKICAgICAiUHJpbnQgYSBzdGQ6 OnN0YWNrIG9yIHN0ZDo6cXVldWUiCkBAIC03NjYsMTIgKzgxOCwyMyBAQCBjbGFzcyBTdGRNYXBQ cmludGVyOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIF9faW5pdF9fIChz ZWxmLCB0eXBlbmFtZSwgdmFsKToKLSAgICAgICAgc2VsZi50eXBlbmFtZSA9IHN0cmlwX3ZlcnNp b25lZF9uYW1lc3BhY2UodHlwZW5hbWUpCisgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocideKHN0 ZDo6KF9fZGVidWc6Oik/KG11bHRpKT9tYXApPCguKiksICguKiksIHN0ZDo6bGVzczxcNCA/Piwg c3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPFw0IGNvbnN0LCBcNT4gPiA+JCcsIHZhbC50eXBlLm5h bWUpCisgICAgICAgIGlmIG1hdGNoIGlzIE5vbmU6CisgICAgICAgICAgICBtYXRjaCA9IHJlLm1h dGNoKHInXihzdGQ6OihfX2RlYnVnOjopPyhtdWx0aSk/bWFwKTwoLiopLCAoLiopLCAoLiopLCBz dGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8XDQgY29uc3QsIFw1PiA+ID4kJywgdmFsLnR5cGUubmFt ZSkKKyAgICAgICAgICAgIGlmIG1hdGNoIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi50 eXBlbmFtZSA9IHZhbC50eXBlLm5hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg ICAgc2VsZi50eXBlbmFtZSA9ICclczwlcywgJXMsICVzPicgJSAobWF0Y2hbMV0sIG1hdGNoWzRd LCBtYXRjaFs1XSwgbWF0Y2hbNl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnR5 cGVuYW1lID0gJyVzPCVzLCAlcz4nICUgKG1hdGNoWzFdLCBtYXRjaFs0XSwgbWF0Y2hbNV0pCiAg ICAgICAgIHNlbGYudmFsID0gdmFsCiAKICAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKLSAgICAg ICAgcmV0dXJuICclcyB3aXRoICVzJyAlIChzZWxmLnR5cGVuYW1lLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG51bV9lbGVtZW50cyhsZW4oUmJ0cmVlSXRlcmF0b3IgKHNlbGYudmFs KSkpKQorICAgICAgICBuZWxlbXMgPSBsZW4oUmJ0cmVlSXRlcmF0b3IgKHNlbGYudmFsKSkKKyAg ICAgICAgcmVzID0gJyVzIHdpdGggJXMnICUgKHNlbGYudHlwZW5hbWUsIG51bV9lbGVtZW50cyhu ZWxlbXMpKQorICAgICAgICBpZiBuZWxlbXMgPT0gMDoKKyAgICAgICAgICAgIHJlcyArPSAnID0g e30nCisgICAgICAgIHJldHVybiByZXMKIAogICAgIGRlZiBjaGlsZHJlbiAoc2VsZik6CiAgICAg ICAgIG5vZGUgPSBsb29rdXBfbm9kZV90eXBlKCdfUmJfdHJlZV9ub2RlJywgc2VsZi52YWwudHlw ZSkucG9pbnRlcigpCkBAIC03OTcsMzUgKzg2MCw2NCBAQCBjbGFzcyBTdGRTZXRQcmludGVyOgog ICAgICAgICAgICAgaXRlbSA9IG5leHQoc2VsZi5yYml0ZXIpCiAgICAgICAgICAgICBpdGVtID0g aXRlbS5jYXN0KHNlbGYudHlwZSkuZGVyZWZlcmVuY2UoKQogICAgICAgICAgICAgaXRlbSA9IGdl dF92YWx1ZV9mcm9tX1JiX3RyZWVfbm9kZShpdGVtKQotICAgICAgICAgICAgIyBGSVhNRTogdGhp cyBpcyB3ZWlyZCAuLi4gd2hhdCB0byBkbz8KLSAgICAgICAgICAgICMgTWF5YmUgYSAnc2V0JyBk aXNwbGF5IGhpbnQ/CiAgICAgICAgICAgICByZXN1bHQgPSAoJ1slZF0nICUgc2VsZi5jb3VudCwg aXRlbSkKICAgICAgICAgICAgIHNlbGYuY291bnQgPSBzZWxmLmNvdW50ICsgMQogICAgICAgICAg ICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFs KToKLSAgICAgICAgc2VsZi50eXBlbmFtZSA9IHN0cmlwX3ZlcnNpb25lZF9uYW1lc3BhY2UodHlw ZW5hbWUpCisgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocideKHN0ZDo6KF9fZGVidWc6Oik/KG11 bHRpKT9zZXQpPCguKiksIHN0ZDo6bGVzczxcNCA/Piwgc3RkOjphbGxvY2F0b3I8XDQgPz4gPiQn LCB2YWwudHlwZS5uYW1lKQorICAgICAgICBpZiBtYXRjaCBpcyBOb25lOgorICAgICAgICAgICAg bWF0Y2ggPSByZS5tYXRjaChyJ14oc3RkOjooX19kZWJ1Zzo6KT8obXVsdGkpP3NldCk8KC4qKSgs IC4qKSwgc3RkOjphbGxvY2F0b3I8XDQgPz4gPiQnLCB2YWwudHlwZS5uYW1lKQorICAgICAgICAg ICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnR5cGVuYW1lID0gdmFs LnR5cGUubmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnR5cGVu YW1lID0gJyVzPCVzJXM+JyAlIChtYXRjaFsxXSwgbWF0Y2hbNF0sIG1hdGNoWzVdKQorICAgICAg ICBlbHNlOgorICAgICAgICAgICAgc2VsZi50eXBlbmFtZSA9ICclczwlcz4nICUgKG1hdGNoWzFd LCBtYXRjaFs0XSkKICAgICAgICAgc2VsZi52YWwgPSB2YWwKIAogICAgIGRlZiB0b19zdHJpbmcg KHNlbGYpOgotICAgICAgICByZXR1cm4gJyVzIHdpdGggJXMnICUgKHNlbGYudHlwZW5hbWUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2VsZW1lbnRzKGxlbihSYnRyZWVJdGVy YXRvciAoc2VsZi52YWwpKSkpCisgICAgICAgIG5lbGVtID0gbGVuKFJidHJlZUl0ZXJhdG9yIChz ZWxmLnZhbCkpCisgICAgICAgIHJlcyA9ICclcyB3aXRoICVzJyAlIChzZWxmLnR5cGVuYW1lLCBu dW1fZWxlbWVudHMobmVsZW0pKQorICAgICAgICBpZiBuZWxlbSA9PSAwOgorICAgICAgICAgICAg cmVzICs9ICcgPSB7fScKKyAgICAgICAgcmV0dXJuIHJlcwogCiAgICAgZGVmIGNoaWxkcmVuIChz ZWxmKToKICAgICAgICAgbm9kZSA9IGxvb2t1cF9ub2RlX3R5cGUoJ19SYl90cmVlX25vZGUnLCBz ZWxmLnZhbC50eXBlKS5wb2ludGVyKCkKICAgICAgICAgcmV0dXJuIHNlbGYuX2l0ZXIgKFJidHJl ZUl0ZXJhdG9yIChzZWxmLnZhbCksIG5vZGUpCiAKKyAgICBkZWYgZGlzcGxheV9oaW50IChzZWxm KToKKyAgICAgICAgcmV0dXJuICdhcnJheScKKwogY2xhc3MgU3RkQml0c2V0UHJpbnRlcjoKICAg ICAiUHJpbnQgYSBzdGQ6OmJpdHNldCIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlbmFt ZSwgdmFsKToKLSAgICAgICAgc2VsZi50eXBlbmFtZSA9IHN0cmlwX3ZlcnNpb25lZF9uYW1lc3Bh Y2UodHlwZW5hbWUpCisgICAgICAgIHNlbGYudHlwZW5hbWUgPSB2YWwudHlwZS5uYW1lCiAgICAg ICAgIHNlbGYudmFsID0gdmFsCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9pc19lbXB0 eShidHMpOgorICAgICAgICB3dHlwZSA9IGJ0cy50eXBlCisgICAgICAgIGlmIHd0eXBlLmNvZGUg IT0gZ2RiLlRZUEVfQ09ERV9BUlJBWToKKyAgICAgICAgICAgIHJldHVybiBidHMgPT0gMAorICAg ICAgICBmb3IgaWR4IGluIHJhbmdlKHd0eXBlLnNpemVvZiAvLyB3dHlwZS50YXJnZXQgKCkuc2l6 ZW9mKToKKyAgICAgICAgICAgIGlmIGJ0c1tpZHhdICE9IDA6CisgICAgICAgICAgICAgICAgcmV0 dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKICAgICBkZWYgdG9fc3RyaW5nIChzZWxm KToKICAgICAgICAgIyBJZiB0ZW1wbGF0ZV9hcmd1bWVudCBoYW5kbGVkIHZhbHVlcywgd2UgY291 bGQgcHJpbnQgdGhlCiAgICAgICAgICMgc2l6ZS4gIE9yIHdlIGNvdWxkIHVzZSBhIHJlZ2V4cCBv biB0aGUgdHlwZS4KLSAgICAgICAgcmV0dXJuICclcycgJSAoc2VsZi50eXBlbmFtZSkKKyAgICAg ICAgcmVzID0gJyVzJyAlIChzZWxmLnR5cGVuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAg ICAjIFplcm8tc2l6ZWQgYml0c2V0cyBkbyBub3QgaGF2ZSB0aGUgZGF0YSBlbGVtZW50IF9NX3cK KyAgICAgICAgICAgIGlmIHNlbGYuX2lzX2VtcHR5KHNlbGYudmFsWydfTV93J10pOgorICAgICAg ICAgICAgICAgIHJlcyArPSAnID0ge30nCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJl cyArPSAnID0ge30nCisgICAgICAgIHJldHVybiByZXMKIAogICAgIGRlZiBjaGlsZHJlbiAoc2Vs Zik6CiAgICAgICAgIHRyeToKQEAgLTg0Niw3ICs5MzgsNyBAQCBjbGFzcyBTdGRCaXRzZXRQcmlu dGVyOgogICAgICAgICAgICAgd29yZHMgPSBbd29yZHNdCiAgICAgICAgICAgICB0c2l6ZSA9IHd0 eXBlLnNpemVvZgogCi0gICAgICAgIG53b3JkcyA9IHd0eXBlLnNpemVvZiAvIHRzaXplCisgICAg ICAgIG53b3JkcyA9IHd0eXBlLnNpemVvZiAvLyB0c2l6ZQogICAgICAgICByZXN1bHQgPSBbXQog ICAgICAgICBieXRlID0gMAogICAgICAgICB3aGlsZSBieXRlIDwgbndvcmRzOgpAQCAtODk1LDcg Kzk4NywxMSBAQCBjbGFzcyBTdGREZXF1ZVByaW50ZXI6CiAgICAgICAgICAgICByZXR1cm4gcmVz dWx0CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZW5hbWUsIHZhbCk6Ci0gICAgICAgIHNl bGYudHlwZW5hbWUgPSBzdHJpcF92ZXJzaW9uZWRfbmFtZXNwYWNlKHR5cGVuYW1lKQorICAgICAg ICBtYXRjaCA9IHJlLm1hdGNoKHInXihzdGQ6OihfX2RlYnVnOjopP2RlcXVlKTwoLiopLCBzdGQ6 OmFsbG9jYXRvcjxcMyA/PiA+JCcsIHZhbC50eXBlLm5hbWUpCisgICAgICAgIGlmIG1hdGNoIGlz IE5vbmU6CisgICAgICAgICAgICBzZWxmLnR5cGVuYW1lID0gdmFsLnR5cGUubmFtZQorICAgICAg ICBlbHNlOgorICAgICAgICAgICAgc2VsZi50eXBlbmFtZSA9ICclczwlcz4nICUgKG1hdGNoWzFd LCBtYXRjaFszXSkKICAgICAgICAgc2VsZi52YWwgPSB2YWwKICAgICAgICAgc2VsZi5lbHR0eXBl ID0gdmFsLnR5cGUudGVtcGxhdGVfYXJndW1lbnQoMCkKICAgICAgICAgc2l6ZSA9IHNlbGYuZWx0 dHlwZS5zaXplb2YKQEAgLTkxNCw3ICsxMDEwLDEwIEBAIGNsYXNzIFN0ZERlcXVlUHJpbnRlcjoK IAogICAgICAgICBzaXplID0gc2VsZi5idWZmZXJfc2l6ZSAqIGRlbHRhX24gKyBkZWx0YV9zICsg ZGVsdGFfZQogCi0gICAgICAgIHJldHVybiAnJXMgd2l0aCAlcycgJSAoc2VsZi50eXBlbmFtZSwg bnVtX2VsZW1lbnRzKGxvbmcoc2l6ZSkpKQorICAgICAgICByZXMgPSAnJXMgd2l0aCAlcycgJSAo c2VsZi50eXBlbmFtZSwgbnVtX2VsZW1lbnRzKGxvbmcoc2l6ZSkpKQorICAgICAgICBpZiBzaXpl ID09IDA6CisgICAgICAgICAgICByZXMgKz0gJyA9IHt9JworICAgICAgICByZXR1cm4gcmVzCiAK ICAgICBkZWYgY2hpbGRyZW4oc2VsZik6CiAgICAgICAgIHN0YXJ0ID0gc2VsZi52YWxbJ19NX2lt cGwnXVsnX01fc3RhcnQnXQpAQCAtMTAyNSw3ICsxMTI0LDE5IEBAIGNsYXNzIFRyMVVub3JkZXJl ZFNldFByaW50ZXI6CiAgICAgIlByaW50IGEgc3RkOjp1bm9yZGVyZWRfc2V0IG9yIHRyMTo6dW5v cmRlcmVkX3NldCIKIAogICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgdHlwZW5hbWUsIHZhbCk6Ci0g ICAgICAgIHNlbGYudHlwZW5hbWUgPSBzdHJpcF92ZXJzaW9uZWRfbmFtZXNwYWNlKHR5cGVuYW1l KQorICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHInXihzdGQ6OihfX2RlYnVnOjopP3Vub3JkZXJl ZF8obXVsdGkpP3NldCk8KC4qKSwgc3RkOjpoYXNoPFw0ID8+LCBzdGQ6OmVxdWFsX3RvPFw0ID8+ LCBzdGQ6OmFsbG9jYXRvcjxcNCA/PiA+JCcsIHZhbC50eXBlLm5hbWUpCisgICAgICAgIGlmIG1h dGNoIGlzIE5vbmU6CisgICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHInXihzdGQ6OihfX2Rl YnVnOjopP3Vub3JkZXJlZF8obXVsdGkpP3NldCk8KC4qKSgsIC4qKSwgc3RkOjplcXVhbF90bzxc NCA/Piwgc3RkOjphbGxvY2F0b3I8XDQgPz4gPiQnLCB2YWwudHlwZS5uYW1lKQorICAgICAgICAg ICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHIn XihzdGQ6OihfX2RlYnVnOjopP3Vub3JkZXJlZF8obXVsdGkpP3NldCk8KC4qKSgsIC4qKSwgc3Rk OjphbGxvY2F0b3I8XDQgPz4gPiQnLCB2YWwudHlwZS5uYW1lKQorICAgICAgICAgICAgICAgIGlm IG1hdGNoIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudHlwZW5hbWUgPSB2YWwu dHlwZS5uYW1lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2Vs Zi50eXBlbmFtZSA9ICclczwlcyVzPicgJSAobWF0Y2hbMV0sIG1hdGNoWzRdLCBtYXRjaFs1XSkK KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi50eXBlbmFtZSA9ICclczwl cyVzPicgJSAobWF0Y2hbMV0sIG1hdGNoWzRdLCBtYXRjaFs1XSkKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIHNlbGYudHlwZW5hbWUgPSAnJXM8JXM+JyAlIChtYXRjaFsxXSwgbWF0Y2hbNF0p CiAgICAgICAgIHNlbGYudmFsID0gdmFsCiAKICAgICBkZWYgaGFzaHRhYmxlIChzZWxmKToKQEAg LTEwMzUsNyArMTE0NiwxMCBAQCBjbGFzcyBUcjFVbm9yZGVyZWRTZXRQcmludGVyOgogCiAgICAg ZGVmIHRvX3N0cmluZyAoc2VsZik6CiAgICAgICAgIGNvdW50ID0gc2VsZi5oYXNodGFibGUoKVsn X01fZWxlbWVudF9jb3VudCddCi0gICAgICAgIHJldHVybiAnJXMgd2l0aCAlcycgJSAoc2VsZi50 eXBlbmFtZSwgbnVtX2VsZW1lbnRzKGNvdW50KSkKKyAgICAgICAgcmVzID0gJyVzIHdpdGggJXMn ICUgKHNlbGYudHlwZW5hbWUsIG51bV9lbGVtZW50cyhjb3VudCkpCisgICAgICAgIGlmIGNvdW50 ID09IDA6CisgICAgICAgICAgICByZXMgKz0gJyA9IHt9JworICAgICAgICByZXR1cm4gcmVzCiAK ICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGZvcm1hdF9jb3VudCAoaSk6CkBAIC0xMDQ3LDEx ICsxMTYxLDI2IEBAIGNsYXNzIFRyMVVub3JkZXJlZFNldFByaW50ZXI6CiAgICAgICAgICAgICBy ZXR1cm4gaXppcCAoY291bnRlciwgVHIxSGFzaHRhYmxlSXRlcmF0b3IgKHNlbGYuaGFzaHRhYmxl KCkpKQogICAgICAgICByZXR1cm4gaXppcCAoY291bnRlciwgU3RkSGFzaHRhYmxlSXRlcmF0b3Ig KHNlbGYuaGFzaHRhYmxlKCkpKQogCisgICAgZGVmIGRpc3BsYXlfaGludChzZWxmKToKKyAgICAg ICAgcmV0dXJuICdhcnJheScKKwogY2xhc3MgVHIxVW5vcmRlcmVkTWFwUHJpbnRlcjoKICAgICAi UHJpbnQgYSBzdGQ6OnVub3JkZXJlZF9tYXAgb3IgdHIxOjp1bm9yZGVyZWRfbWFwIgogCiAgICAg ZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKLSAgICAgICAgc2VsZi50eXBlbmFt ZSA9IHN0cmlwX3ZlcnNpb25lZF9uYW1lc3BhY2UodHlwZW5hbWUpCisgICAgICAgIG1hdGNoID0g cmUubWF0Y2gocideKHN0ZDo6KF9fZGVidWc6Oik/dW5vcmRlcmVkXyhtdWx0aSk/bWFwKTwoLiop LCAoLiopLCBzdGQ6Omhhc2g8XDQgPz4sIHN0ZDo6ZXF1YWxfdG88XDQgPz4sIHN0ZDo6YWxsb2Nh dG9yPHN0ZDo6cGFpcjxcNCBjb25zdCwgXDU+ID4gPiQnLCB2YWwudHlwZS5uYW1lKQorICAgICAg ICBpZiBtYXRjaCBpcyBOb25lOgorICAgICAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChyJ14oc3Rk OjooX19kZWJ1Zzo6KT91bm9yZGVyZWRfKG11bHRpKT9tYXApPCguKiksICguKiksICguKiksIHN0 ZDo6ZXF1YWxfdG88XDQgPz4sIHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxcNCBjb25zdCwgXDU+ ID4gPiQnLCB2YWwudHlwZS5uYW1lKQorICAgICAgICAgICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAg ICAgICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHInXihzdGQ6OihfX2RlYnVnOjopP3Vub3Jk ZXJlZF8obXVsdGkpP21hcCk8KC4qKSwgKC4qKSwgKC4qKSwgKC4qKSwgc3RkOjphbGxvY2F0b3I8 c3RkOjpwYWlyPFw0IGNvbnN0LCBcNT4gPiA+JCcsIHZhbC50eXBlLm5hbWUpCisgICAgICAgICAg ICAgICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50eXBlbmFt ZSA9IHZhbC50eXBlLm5hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg ICAgICBzZWxmLnR5cGVuYW1lID0gJyVzPCVzLCAlcywgJXMsICVzPicgJSAobWF0Y2hbMV0sIG1h dGNoWzRdLCBtYXRjaFs1XSwgbWF0Y2hbNl0sIG1hdGNoWzddKQorICAgICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICAgICBzZWxmLnR5cGVuYW1lID0gJyVzPCVzLCAlcywgJXM+JyAlIChtYXRj aFsxXSwgbWF0Y2hbNF0sIG1hdGNoWzVdLCBtYXRjaFs2XSkKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIHNlbGYudHlwZW5hbWUgPSAnJXM8JXMsICVzPicgJSAobWF0Y2hbMV0sIG1hdGNoWzRd LCBtYXRjaFs1XSkKICAgICAgICAgc2VsZi52YWwgPSB2YWwKIAogICAgIGRlZiBoYXNodGFibGUg KHNlbGYpOgpAQCAtMTA2MSw3ICsxMTkwLDEwIEBAIGNsYXNzIFRyMVVub3JkZXJlZE1hcFByaW50 ZXI6CiAKICAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKICAgICAgICAgY291bnQgPSBzZWxmLmhh c2h0YWJsZSgpWydfTV9lbGVtZW50X2NvdW50J10KLSAgICAgICAgcmV0dXJuICclcyB3aXRoICVz JyAlIChzZWxmLnR5cGVuYW1lLCBudW1fZWxlbWVudHMoY291bnQpKQorICAgICAgICByZXMgPSAn JXMgd2l0aCAlcycgJSAoc2VsZi50eXBlbmFtZSwgbnVtX2VsZW1lbnRzKGNvdW50KSkKKyAgICAg ICAgaWYgY291bnQgPT0gMDoKKyAgICAgICAgICAgIHJlcyArPSAnID0ge30nCisgICAgICAgIHJl dHVybiByZXMKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgZmxhdHRlbiAobGlzdCk6CkBA IC0xNDkyLDI2ICsxNjI0LDIzIEBAIGNsYXNzIFN0ZFBhaXJQcmludGVyOgogCiAgICAgICAgIGRl ZiBfX2luaXRfXyhzZWxmLCB2YWwpOgogICAgICAgICAgICAgc2VsZi52YWwgPSB2YWwKLSAgICAg ICAgICAgIHNlbGYud2hpY2ggPSAnZmlyc3QnCisgICAgICAgICAgICBzZWxmLndoaWNoID0gMAog CiAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgICAgIHJldHVybiBzZWxmCiAK ICAgICAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi53aGljaCBp cyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi53aGljaCA+IDE6CiAgICAgICAgICAgICAgICAg cmFpc2UgU3RvcEl0ZXJhdGlvbgogICAgICAgICAgICAgd2hpY2ggPSBzZWxmLndoaWNoCi0gICAg ICAgICAgICBpZiB3aGljaCA9PSAnZmlyc3QnOgotICAgICAgICAgICAgICAgIHNlbGYud2hpY2gg PSAnc2Vjb25kJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLndoaWNo ID0gTm9uZQotICAgICAgICAgICAgcmV0dXJuICh3aGljaCwgc2VsZi52YWxbd2hpY2hdKQorICAg ICAgICAgICAgc2VsZi53aGljaCArPSAxCisgICAgICAgICAgICByZXR1cm4gKCdbJWRdJyAlIHdo aWNoLCBzZWxmLnZhbFsnZmlyc3QnIGlmIHdoaWNoID09IDAgZWxzZSAnc2Vjb25kJ10pCiAKICAg ICBkZWYgY2hpbGRyZW4oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9pdGVyKHNlbGYudmFs KQogCiAgICAgZGVmIHRvX3N0cmluZyhzZWxmKToKLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAg ICAgcmV0dXJuIHNlbGYudmFsLnR5cGUubmFtZQogCiBjbGFzcyBTdGRDbXBDYXRQcmludGVyOgog ICAgICJQcmludCBhIGNvbXBhcmlzb24gY2F0ZWdvcnkgb2JqZWN0IgpAQCAtMTU1MiwxNSArMTY4 MSw2IEBAIGNsYXNzIFN0ZEVycm9yQ29kZVByaW50ZXI6CiAgICAgICAgIHJldHVybiBOb25lCiAK ICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2ZpbmRfc3RhbmRhcmRfZXJyY19lbnVtKGNscywg bmFtZSk6Ci0gICAgICAgIGZvciBucyBpbiBbJycsIF92ZXJzaW9uZWRfbmFtZXNwYWNlXToKLSAg ICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBxbmFtZSA9ICdzdGQ6Ont9e30nLmZvcm1h dChucywgbmFtZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9maW5kX2VycmNfZW51bShx bmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6Ci0gICAgICAgICAgICAgICAg cGFzcwotCi0gICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9tYXRjaF9uZXRfdHNfY2F0ZWdvcnko Y2xzLCBjYXQpOgogICAgICAgICBuZXRfY2F0cyA9IFsnc3RyZWFtJywgJ3NvY2tldCcsICdpcDo6 cmVzb2x2ZXInXQogICAgICAgICBmb3IgYyBpbiBuZXRfY2F0czoKQEAgLTE2MDEsMTAgKzE3MjEs MTAgQEAgY2xhc3MgU3RkRXJyb3JDb2RlUHJpbnRlcjoKICAgICAgICAgICAgIGlzX2Vycm5vID0g Y2xzLl9zeXN0ZW1faXNfcG9zaXgKICAgICAgICAgaWYgdHlwLnRhZy5lbmRzd2l0aCgnOjpmdXR1 cmVfZXJyb3JfY2F0ZWdvcnknKToKICAgICAgICAgICAgIG5hbWUgPSAnZnV0dXJlJwotICAgICAg ICAgICAgZW51bSA9IGNscy5fZmluZF9zdGFuZGFyZF9lcnJjX2VudW0oJ2Z1dHVyZV9lcnJjJykK KyAgICAgICAgICAgIGVudW0gPSBjbHMuX2ZpbmRfZXJyY19lbnVtKCdzdGQ6OmZ1dHVyZV9lcnJj JykKICAgICAgICAgaWYgdHlwLnRhZy5lbmRzd2l0aCgnOjppb19lcnJvcl9jYXRlZ29yeScpOgog ICAgICAgICAgICAgbmFtZSA9ICdpbycKLSAgICAgICAgICAgIGVudW0gPSBjbHMuX2ZpbmRfc3Rh bmRhcmRfZXJyY19lbnVtKCdpb19lcnJjJykKKyAgICAgICAgICAgIGVudW0gPSBjbHMuX2ZpbmRf ZXJyY19lbnVtKCdzdGQ6OmlvX2VycmMnKQogCiAgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKICAg ICAgICAgICAgIHRyeToKQEAgLTE2OTcsNyArMTgxNyw3IEBAIGNsYXNzIFN0ZFNwYW5QcmludGVy OgogICAgICAgICAgICAgcmV0dXJuICdbJWRdJyAlIGNvdW50LCAoc2VsZi5iZWdpbiArIGNvdW50 KS5kZXJlZmVyZW5jZSgpCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZW5hbWUsIHZhbCk6 Ci0gICAgICAgIHNlbGYudHlwZW5hbWUgPSBzdHJpcF92ZXJzaW9uZWRfbmFtZXNwYWNlKHR5cGVu YW1lKQorICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKICAgICAgICAgc2VsZi52YWwg PSB2YWwKICAgICAgICAgaWYgdmFsLnR5cGUudGVtcGxhdGVfYXJndW1lbnQoMSkgPT0gZ2RiLnBh cnNlX2FuZF9ldmFsKCdzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oLTEpJyk6CiAgICAgICAgICAg ICBzZWxmLnNpemUgPSB2YWxbJ19NX2V4dGVudCddWydfTV9leHRlbnRfdmFsdWUnXQpAQCAtMTcz NCw3ICsxODU0LDcgQEAgY2xhc3MgU3RkQXRvbWljUHJpbnRlcjoKICAgICAiUHJpbnQgYSBzdGQ6 YXRvbWljIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgotICAgICAg ICBzZWxmLnR5cGVuYW1lID0gc3RyaXBfdmVyc2lvbmVkX25hbWVzcGFjZSh0eXBlbmFtZSkKKyAg ICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCiAgICAgICAgIHNlbGYudmFsID0gdmFsCiAg ICAgICAgIHNlbGYuc2hwdHJfcHJpbnRlciA9IE5vbmUKICAgICAgICAgc2VsZi52YWx1ZV90eXBl ID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCgwKQpAQCAtMjAwNCw3ICsyMTI0LDcg QEAgY2xhc3MgRmlsdGVyaW5nVHlwZVByaW50ZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5lbmFi bGVkID0gVHJ1ZQogCiAgICAgY2xhc3MgX3JlY29nbml6ZXIob2JqZWN0KToKLSAgICAgICAgIlRo ZSByZWNvZ25pemVyIGNsYXNzIGZvciBGaWx0ZXJpbmdUeXBlUHJpbnRlci4iCisgICAgICAgICJU aGUgcmVjb2duaXplciBjbGFzcyBmb3IgVGVtcGxhdGVUeXBlUHJpbnRlci4iCiAKICAgICAgICAg ZGVmIF9faW5pdF9fKHNlbGYsIG1hdGNoLCBuYW1lKToKICAgICAgICAgICAgIHNlbGYubWF0Y2gg PSBtYXRjaApAQCAtMjE2MCw4ICsyMjgwLDYgQEAgZGVmIGJ1aWxkX2xpYnN0ZGN4eF9kaWN0aW9u YXJ5ICgpOgogICAgIGxpYnN0ZGN4eF9wcmludGVyID0gUHJpbnRlcigibGlic3RkYysrLXY2IikK IAogICAgICMgbGlic3RkYysrIG9iamVjdHMgcmVxdWlyaW5nIHByZXR0eS1wcmludGluZy4KLSAg ICAjIEluIG9yZGVyIGZyb206Ci0gICAgIyBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9s aWJzdGRjKysvbGF0ZXN0LWRveHlnZW4vYTAxODQ3Lmh0bWwKICAgICBsaWJzdGRjeHhfcHJpbnRl ci5hZGRfdmVyc2lvbignc3RkOjonLCAnYmFzaWNfc3RyaW5nJywgU3RkU3RyaW5nUHJpbnRlcikK ICAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfdmVyc2lvbignc3RkOjpfX2N4eDExOjonLCAnYmFz aWNfc3RyaW5nJywgU3RkU3RyaW5nUHJpbnRlcikKICAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRf Y29udGFpbmVyKCdzdGQ6OicsICdiaXRzZXQnLCBTdGRCaXRzZXRQcmludGVyKQpAQCAtMjE4MCw2 ICsyMjk4LDcgQEAgZGVmIGJ1aWxkX2xpYnN0ZGN4eF9kaWN0aW9uYXJ5ICgpOgogICAgIGxpYnN0 ZGN4eF9wcmludGVyLmFkZF92ZXJzaW9uKCdzdGQ6OicsICdzdGFjaycsIFN0ZFN0YWNrT3JRdWV1 ZVByaW50ZXIpCiAgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkX3ZlcnNpb24oJ3N0ZDo6JywgJ3Vu aXF1ZV9wdHInLCBVbmlxdWVQb2ludGVyUHJpbnRlcikKICAgICBsaWJzdGRjeHhfcHJpbnRlci5h ZGRfY29udGFpbmVyKCdzdGQ6OicsICd2ZWN0b3InLCBTdGRWZWN0b3JQcmludGVyKQorICAgIGxp YnN0ZGN4eF9wcmludGVyLmFkZF9jb250YWluZXIoJ3N0ZDo6JywgJ2FycmF5JywgU3RkQXJyYXlQ cmludGVyKQogICAgICMgdmVjdG9yPGJvb2w+CiAKICAgICBpZiBoYXNhdHRyKGdkYi5WYWx1ZSwg J2R5bmFtaWNfdHlwZScpOgo= --000000000000716eed05e5cc7f4f--