From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.61]) by mx.groups.io with SMTP id smtpd.web12.1012.1582839559312709699 for ; Thu, 27 Feb 2020 13:39:19 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=gJOdNlW1; spf=pass (domain: redhat.com, ip: 205.139.110.61, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1582839558; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=vncfjRPyLbMbzTcfZjA5Ic7SrObpYzQ/hmBWdxrK+L8=; b=gJOdNlW1zLzTjpk/KE8ofFf0++754xDoSSjoU66I1adnhhOsiPC+4Bxztamh/RAzFOa84c HrY91/+wgfcVgKBx9RVx3UYq9HxyHGa80fk7cjFQ95H/AAVrhzmS0tzGZIm6IboYPB/ROO aLASXAN4cP1Nq+V1Nc252DCaQKs1wwc= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-74-14hZ2ZopPhKXZ5sZ3sIFwg-1; Thu, 27 Feb 2020 16:39:12 -0500 X-MC-Unique: 14hZ2ZopPhKXZ5sZ3sIFwg-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 4CA79107ACC5; Thu, 27 Feb 2020 21:39:11 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-46.ams2.redhat.com [10.36.116.46]) by smtp.corp.redhat.com (Postfix) with ESMTP id F16E690BC; Thu, 27 Feb 2020 21:39:09 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Leif Lindholm , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 3/3] ArmPlatformPkg: convert LFs to CRLF, expand hard TABs Date: Thu, 27 Feb 2020 22:39:03 +0100 Message-Id: <20200227213903.13884-4-lersek@redhat.com> In-Reply-To: <20200227213903.13884-1-lersek@redhat.com> References: <20200227213903.13884-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 V2UncmUgZ29pbmcgdG8gc3dpdGNoIHRoZSBpbnRlcm5hbCBsaW5lIHRlcm1pbmF0b3JzIGdsb2Jh bGx5IHRvIExGIGF0IHNvbWUKcG9pbnQsIGJ1dCB1bnRpbCB0aGVuLCBsZXQncyB1c2UgQ1JMRiBj b25zaXN0ZW50bHkuIENvbnZlcnQgc291cmNlIGZpbGVzCndpdGggTEZzIGluIHRoZW0gdG8gQ1JM RiwgdXNpbmcgInVuaXgyZG9zIi4KCiJnaXQgc2hvdyAtYiIgcHJpbnRzIG5vIGNvZGUgY2hhbmdl cyBmb3IgdGhpcyBwYXRjaC4KCihJIGNvbGxlY3RlZCBhbGwgdGhlIGZpbGUgbmFtZSBzdWZmaXhl cyBpbiB0aGlzIHBhY2thZ2UsIHdpdGg6CgokIGdpdCBscy1maWxlcyAtLSAkUEFDS0FHRSB8IHJl diB8IGN1dCAtZiAxIC1kIC4gfCBzb3J0IC11IHwgcmV2CgpJIGVsaW1pbmF0ZWQgdGhvc2Ugc3Vm Zml4ZXMgdGhhdCBkaWRuJ3Qgc3RhbmQgZm9yIHRleHQgZmlsZXMsIHRoZW4KYmxhbmtldC1jb252 ZXJ0ZWQgdGhlIHJlc3Qgd2l0aCB1bml4MmRvcy4gRmluYWxseSwgcGlja2VkIHVwIHRoZSBhY3R1 YWwKY2hhbmdlcyB3aXRoIGdpdC1hZGQuKQoKQXQgdGhlIHNhbWUgdGltZSwgdGhlIGZvbGxvd2lu ZyBmaWxlIGhhZCB0byB1bmRlcmdvIFRBQiBleHBhbnNpb246CgogIEFybVBsYXRmb3JtUGtnL1Nj cmlwdHMvRHM1L3Byb2ZpbGUucHkKCkkgdXNlZCAiZXhwYW5kIC10IDQiLCBjb25mb3JtaW5nIHRv IHRoZSBJbmRlbnRhdGlvbiBzZWN0aW9uIG9mIFBFUC04CjxodHRwczovL3d3dy5weXRob24ub3Jn L2Rldi9wZXBzL3BlcC0wMDA4LyNpbmRlbnRhdGlvbj4uCgpCb3RoIHRoZSBDUkxGIGNvbnZlcnNp b24gYW5kIHRoZSBUQUIgZXhwYW5zaW9uIGFyZSBtb3RpdmF0ZWQgYnkKIlBhdGNoQ2hlY2sucHki LiAiUGF0Y2hDaGVjay5weSIgaXMgYWxzbyB0aGUgcmVhc29uIHdoeSBDUkxGIGNvbnZlcnNpb24K YW5kIFRBQiBleHBhbnNpb24gaGF2ZSB0byBoYXBwZW4gaW4gdGhlIHNhbWUgcGF0Y2guCgpDYzog QXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+CkNjOiBMZWlmIExpbmRo b2xtIDxsZWlmQG51dmlhaW5jLmNvbT4KQ2M6IFBoaWxpcHBlIE1hdGhpZXUtRGF1ZMOpIDxwaGls bWRAcmVkaGF0LmNvbT4KUmVmOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19i dWcuY2dpP2lkPTE2NTkKU2lnbmVkLW9mZi1ieTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0 LmNvbT4KLS0tCiBBcm1QbGF0Zm9ybVBrZy9TY3JpcHRzL0RzNS9wcm9maWxlLnB5IHwgNjU2ICsr KysrKysrKystLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzI4IGluc2VydGlvbnMoKyksIDMy OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Bcm1QbGF0Zm9ybVBrZy9TY3JpcHRzL0RzNS9w cm9maWxlLnB5IGIvQXJtUGxhdGZvcm1Qa2cvU2NyaXB0cy9EczUvcHJvZmlsZS5weQppbmRleCBm ODdkZWUyNDY5NWMuLjk3OWM2ZWEyYmRjMiAxMDA2NDQKLS0tIGEvQXJtUGxhdGZvcm1Qa2cvU2Ny aXB0cy9EczUvcHJvZmlsZS5weQorKysgYi9Bcm1QbGF0Zm9ybVBrZy9TY3JpcHRzL0RzNS9wcm9m aWxlLnB5CkBAIC0xLDMyOCArMSwzMjggQEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0KLSMKLSMgIENv cHlyaWdodCAoYykgMjAxNCwgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0j ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudAotIwotCi1pbXBv cnQgZ2V0b3B0Ci1pbXBvcnQgb3BlcmF0b3IKLWltcG9ydCBvcwotaW1wb3J0IHBpY2tsZQotaW1w b3J0IHN5cwotZnJvbSBzeXMgaW1wb3J0IGFyZ3YKLWZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJp bmdJTwotCi1tb2R1bGVzID0ge30KLWZ1bmN0aW9ucyA9IHt9Ci1mdW5jdGlvbnNfYWRkciA9IHt9 Ci0KLWRlZiB1c2FnZSgpOgotCXByaW50ICItdCwtLXRyYWNlOiBMb2NhdGlvbiBvZiB0aGUgVHJh Y2UgZmlsZSIKLQlwcmludCAiLXMsLS1zeW1ib2xzOiBMb2NhdGlvbiBvZiB0aGUgc3ltYm9scyBh bmQgbW9kdWxlcyIKLQotZGVmIGdldF9hZGRyZXNzX2Zyb21fc3RyaW5nKGFkZHJlc3MpOgotCXJl dHVybiBpbnQoYWRkcmVzcy5zdHJpcCgiUzoiKS5zdHJpcCgiTjoiKS5zdHJpcCgiRUwyOiIpLnN0 cmlwKCJFTDE6IiksIDE2KQotCi1kZWYgZ2V0X21vZHVsZV9mcm9tX2FkZHIobW9kdWxlcywgYWRk cik6Ci0JZm9yIGtleSx2YWx1ZSBpbiBtb2R1bGVzLml0ZW1zKCk6Ci0JCWlmICh2YWx1ZVsnc3Rh cnQnXSA8PSBhZGRyKSBhbmQgKGFkZHIgPD0gdmFsdWVbJ2VuZCddKToKLQkJCXJldHVybiBrZXkK LQlyZXR1cm4gTm9uZQotCi1kZWYgYWRkX2N5Y2xlc190b19mdW5jdGlvbihmdW5jdGlvbnMsIGZ1 bmNfbmFtZSwgYWRkciwgY3ljbGVzKToKLQlpZiBmdW5jX25hbWUgIT0gIjxVbmtub3duPiI6Ci0J CSMgQ2hlY2sgaWYgd2UgYXJlIHN0aWxsIGluIHRoZSBwcmV2aW91cyBmdW5jdGlvbgotCQlpZiBh ZGRfY3ljbGVzX3RvX2Z1bmN0aW9uLnByZXZfZnVuY19uYW1lID09IGZ1bmNfbmFtZToKLQkJCWFk ZF9jeWNsZXNfdG9fZnVuY3Rpb24ucHJldl9lbnRyeVsnY3ljbGVzJ10gKz0gY3ljbGVzCi0JCQly ZXR1cm4gKGFkZF9jeWNsZXNfdG9fZnVuY3Rpb24ucHJldl9mdW5jX25hbWUsIGFkZF9jeWNsZXNf dG9fZnVuY3Rpb24ucHJldl9tb2R1bGVfbmFtZSkKLQotCQlpZiBmdW5jX25hbWUgaW4gZnVuY3Rp b25zLmtleXMoKToKLQkJCWZvciBtb2R1bGVfbmFtZSwgbW9kdWxlX3ZhbHVlIGluIGZ1bmN0aW9u c1tmdW5jX25hbWVdLml0ZXJpdGVtcygpOgotCQkJCWlmIChtb2R1bGVfdmFsdWVbJ3N0YXJ0J10g PD0gYWRkcikgYW5kIChhZGRyIDwgbW9kdWxlX3ZhbHVlWydlbmQnXSk6Ci0JCQkJCW1vZHVsZV92 YWx1ZVsnY3ljbGVzJ10gKz0gY3ljbGVzCi0KLQkJCQkJYWRkX2N5Y2xlc190b19mdW5jdGlvbi5w cmV2X2Z1bmNfbmFtZSAgID0gZnVuY19uYW1lCi0JCQkJCWFkZF9jeWNsZXNfdG9fZnVuY3Rpb24u cHJldl9tb2R1bGVfbmFtZSA9IG1vZHVsZV9uYW1lCi0JCQkJCWFkZF9jeWNsZXNfdG9fZnVuY3Rp b24ucHJldl9lbnRyeSAgICAgICA9IG1vZHVsZV92YWx1ZQotCQkJCQlyZXR1cm4gKGZ1bmNfbmFt ZSwgbW9kdWxlX25hbWUpCi0JCQkJZWxpZiAobW9kdWxlX3ZhbHVlWydlbmQnXSA9PSAwKToKLQkJ CQkJbW9kdWxlX3ZhbHVlWydjeWNsZXMnXSArPSBjeWNsZXMKLQotCQkJCQlhZGRfY3ljbGVzX3Rv X2Z1bmN0aW9uLnByZXZfZnVuY19uYW1lICAgPSBmdW5jX25hbWUKLQkJCQkJYWRkX2N5Y2xlc190 b19mdW5jdGlvbi5wcmV2X21vZHVsZV9uYW1lID0gbW9kdWxlX25hbWUKLQkJCQkJYWRkX2N5Y2xl c190b19mdW5jdGlvbi5wcmV2X2VudHJ5ICAgICAgID0gbW9kdWxlX3ZhbHVlCi0JCQkJCXJldHVy biAoZnVuY19uYW1lLCBtb2R1bGVfbmFtZSkKLQotCQkjIFdvcmthcm91bmQgdG8gZml4IHRoZSAn aW5mbyBmdW5jJyBsaW1pdGF0aW9uIHRoYXQgZG9lcyBub3QgZXhwb3NlIHRoZSAnc3RhdGljJyBm dW5jdGlvbgotCQltb2R1bGVfbmFtZSA9IGdldF9tb2R1bGVfZnJvbV9hZGRyKG1vZHVsZXMsIGFk ZHIpCi0JCWZ1bmN0aW9uc1tmdW5jX25hbWVdID0ge30KLQkJZnVuY3Rpb25zW2Z1bmNfbmFtZV1b bW9kdWxlX25hbWVdID0ge30KLQkJZnVuY3Rpb25zW2Z1bmNfbmFtZV1bbW9kdWxlX25hbWVdWydz dGFydCddICA9IDAKLQkJZnVuY3Rpb25zW2Z1bmNfbmFtZV1bbW9kdWxlX25hbWVdWydlbmQnXSAg ICA9IDAKLQkJZnVuY3Rpb25zW2Z1bmNfbmFtZV1bbW9kdWxlX25hbWVdWydjeWNsZXMnXSA9IGN5 Y2xlcwotCQlmdW5jdGlvbnNbZnVuY19uYW1lXVttb2R1bGVfbmFtZV1bJ2NvdW50J10gID0gMAot Ci0JCWFkZF9jeWNsZXNfdG9fZnVuY3Rpb24ucHJldl9mdW5jX25hbWUgICA9IGZ1bmNfbmFtZQot CQlhZGRfY3ljbGVzX3RvX2Z1bmN0aW9uLnByZXZfbW9kdWxlX25hbWUgPSBtb2R1bGVfbmFtZQot CQlhZGRfY3ljbGVzX3RvX2Z1bmN0aW9uLnByZXZfZW50cnkgICAgICAgPSBmdW5jdGlvbnNbZnVu Y19uYW1lXVttb2R1bGVfbmFtZV0KLQkJcmV0dXJuIChmdW5jX25hbWUsIG1vZHVsZV9uYW1lKQot CWVsc2U6Ci0JCSMgQ2hlY2sgaWYgd2UgYXJlIHN0aWxsIGluIHRoZSBwcmV2aW91cyBmdW5jdGlv bgotCQlpZiAoYWRkX2N5Y2xlc190b19mdW5jdGlvbi5wcmV2X2VudHJ5IGlzIG5vdCBOb25lKSBh bmQgKGFkZF9jeWNsZXNfdG9fZnVuY3Rpb24ucHJldl9lbnRyeVsnc3RhcnQnXSA8PSBhZGRyKSBh bmQgKGFkZHIgPCBhZGRfY3ljbGVzX3RvX2Z1bmN0aW9uLnByZXZfZW50cnlbJ2VuZCddKToKLQkJ CWFkZF9jeWNsZXNfdG9fZnVuY3Rpb24ucHJldl9lbnRyeVsnY3ljbGVzJ10gKz0gY3ljbGVzCi0J CQlyZXR1cm4gKGFkZF9jeWNsZXNfdG9fZnVuY3Rpb24ucHJldl9mdW5jX25hbWUsIGFkZF9jeWNs ZXNfdG9fZnVuY3Rpb24ucHJldl9tb2R1bGVfbmFtZSkKLQotCQkjIEdlbmVyYXRlIHRoZSBrZXkg Zm9yIHRoZSBnaXZlbiBhZGRyZXNzCi0JCWtleSA9IGFkZHIgJiB+MHgwRkZGCi0KLQkJaWYga2V5 IG5vdCBpbiBmdW5jdGlvbnNfYWRkci5rZXlzKCk6Ci0JCQlpZiAnVW5rbm93bicgbm90IGluIGZ1 bmN0aW9ucy5rZXlzKCk6Ci0JCQkJZnVuY3Rpb25zWydVbmtub3duJ10gPSB7fQotCQkJaWYgJ1Vu a25vd24nIG5vdCBpbiBmdW5jdGlvbnNbJ1Vua25vd24nXS5rZXlzKCk6Ci0JCQkJZnVuY3Rpb25z WydVbmtub3duJ11bJ1Vua25vd24nXSA9IHt9Ci0JCQkJZnVuY3Rpb25zWydVbmtub3duJ11bJ1Vu a25vd24nXVsnY3ljbGVzJ10gPSAwCi0JCQkJZnVuY3Rpb25zWydVbmtub3duJ11bJ1Vua25vd24n XVsnY291bnQnXSA9IDAKLQkJCWZ1bmN0aW9uc1snVW5rbm93biddWydVbmtub3duJ11bJ2N5Y2xl cyddICs9IGN5Y2xlcwotCi0JCQlhZGRfY3ljbGVzX3RvX2Z1bmN0aW9uLnByZXZfZnVuY19uYW1l ID0gTm9uZQotCQkJcmV0dXJuIE5vbmUKLQotCQlmb3IgZnVuY19rZXksIG1vZHVsZSBpbiBmdW5j dGlvbnNfYWRkcltrZXldLml0ZXJpdGVtcygpOgotCQkJZm9yIG1vZHVsZV9rZXksIG1vZHVsZV92 YWx1ZSBpbiBtb2R1bGUuaXRlcml0ZW1zKCk6Ci0JCQkJaWYgKG1vZHVsZV92YWx1ZVsnc3RhcnQn XSA8PSBhZGRyKSBhbmQgKGFkZHIgPCBtb2R1bGVfdmFsdWVbJ2VuZCddKToKLQkJCQkJbW9kdWxl X3ZhbHVlWydjeWNsZXMnXSArPSBjeWNsZXMKLQotCQkJCQkjIEluIGNhc2UgbyA8VW5rbm93bj4g d2UgcHJlZmVyIHRvIGZhbGxiYWNrIG9uIHRoZSBkaXJlY3Qgc2VhcmNoCi0JCQkJCWFkZF9jeWNs ZXNfdG9fZnVuY3Rpb24ucHJldl9mdW5jX25hbWUgICA9IGZ1bmNfa2V5Ci0JCQkJCWFkZF9jeWNs ZXNfdG9fZnVuY3Rpb24ucHJldl9tb2R1bGVfbmFtZSA9IG1vZHVsZV9rZXkKLQkJCQkJYWRkX2N5 Y2xlc190b19mdW5jdGlvbi5wcmV2X2VudHJ5ICAgICAgID0gbW9kdWxlX3ZhbHVlCi0JCQkJCXJl dHVybiAoZnVuY19rZXksIG1vZHVsZV9rZXkpCi0KLQlwcmludCAiV2FybmluZzogRnVuY3Rpb24g JXMgQCAweCV4IG5vdCBmb3VuZCIgJSAoZnVuY19uYW1lLCBhZGRyKQotCi0JYWRkX2N5Y2xlc190 b19mdW5jdGlvbi5wcmV2X2Z1bmNfbmFtZSA9IE5vbmUKLQlyZXR1cm4gTm9uZQotCi0jIFN0YXRp YyB2YXJpYWJsZXMgZm9yIHRoZSBwcmV2aW91cyBmdW5jdGlvbgotYWRkX2N5Y2xlc190b19mdW5j dGlvbi5wcmV2X2Z1bmNfbmFtZSA9IE5vbmUKLWFkZF9jeWNsZXNfdG9fZnVuY3Rpb24ucHJldl9l bnRyeSAgICAgPSBOb25lCi0KLWRlZiB0cmFjZV9yZWFkKCk6Ci0JZ2xvYmFsIHRyYWNlX3Byb2Nl c3MKLQlsaW5lID0gdHJhY2UucmVhZGxpbmUoKQotCXRyYWNlX3Byb2Nlc3MgKz0gbGVuKGxpbmUp Ci0JcmV0dXJuIGxpbmUKLQotIwotIyBQYXJzZSBhcmd1bWVudHMKLSMKLXRyYWNlX25hbWUgPSBO b25lCi1zeW1ib2xzX2ZpbGUgPSBOb25lCi0KLW9wdHMsYXJncyA9IGdldG9wdC5nZXRvcHQoc3lz LmFyZ3ZbMTpdLCAiaHQ6dnM6diIsIFsiaGVscCIsInRyYWNlPSIsInN5bWJvbHM9Il0pCi1pZiAo b3B0cyBpcyBOb25lKSBvciAobm90IG9wdHMpOgotCXVzYWdlKCkKLQlzeXMuZXhpdCgpCi0KLWZv ciBvLGEgaW4gb3B0czoKLSAgICBpZiBvIGluICgiLWgiLCItLWhlbHAiKToKLSAgICAgICAgdXNh Z2UoKQotICAgICAgICBzeXMuZXhpdCgpCi0gICAgZWxpZiBvIGluICgiLXQiLCItLXRyYWNlIik6 Ci0gICAgICAgIHRyYWNlX25hbWUgPSBhCi0gICAgZWxpZiBvIGluICgiLXMiLCItLXN5bWJvbHMi KToKLSAgICAgICAgc3ltYm9sc19maWxlID0gYQotICAgIGVsc2U6Ci0gICAgICAgIGFzc2VydCBG YWxzZSwgIlVuaGFuZGxlZCBvcHRpb24gKCVzKSIgJSBvCi0KLSMKLSMgV2UgdHJ5IGZpcnN0IHRv IHNlZSBpZiB3ZSBydW4gdGhlIHNjcmlwdCBmcm9tIERTLTUKLSMKLXRyeToKLQlmcm9tIGFybV9k cy5kZWJ1Z2dlcl92MSBpbXBvcnQgRGVidWdnZXIKLQlmcm9tIGFybV9kcy5kZWJ1Z2dlcl92MSBp bXBvcnQgRGVidWdFeGNlcHRpb24KLQotCSMgRGVidWdnZXIgb2JqZWN0IGZvciBhY2Nlc3Npbmcg dGhlIGRlYnVnZ2VyCi0JZGVidWdnZXIgPSBEZWJ1Z2dlcigpCi0KLQkjIEluaXRpYWxpc2F0aW9u IGNvbW1hbmRzCi0JZWMgPSBkZWJ1Z2dlci5nZXRFeGVjdXRpb25Db250ZXh0KDApCi0JZWMuZ2V0 RXhlY3V0aW9uU2VydmljZSgpLnN0b3AoKQotCWVjLmdldEV4ZWN1dGlvblNlcnZpY2UoKS53YWl0 Rm9yU3RvcCgpCi0JIyBpbiBjYXNlIHRoZSBleGVjdXRpb24gY29udGV4dCByZWZlcmVuY2UgaXMg b3V0IG9mIGRhdGUKLQllYyA9IGRlYnVnZ2VyLmdldEV4ZWN1dGlvbkNvbnRleHQoMCkKLQotCSMK LQkjIEdldCB0aGUgbW9kdWxlIG5hbWUgYW5kIHRoZWlyIG1lbW9yeSByYW5nZQotCSMKLQlpbmZv X2ZpbGUgPSBlYy5leGVjdXRlRFNDb21tYW5kKCJpbmZvIGZpbGUiKQotCWluZm9fZmlsZV9zdHIg PSBTdHJpbmdJTyhpbmZvX2ZpbGUpCi0KLQlsaW5lID0gaW5mb19maWxlX3N0ci5yZWFkbGluZSgp LnN0cmlwKCdcbicpCi0Jd2hpbGUgbGluZSAhPSAnJzoKLQkJaWYgKCJTeW1ib2xzIGZyb20iIGlu IGxpbmUpOgotCQkJIyBHZXQgdGhlIG1vZHVsZSBuYW1lIGZyb20gdGhlIGxpbmUgJ1N5bWJvbHMg ZnJvbSAiL2hvbWUvLi4uLiInCi0JCQltb2R1bGVfbmFtZSA9IGxpbmUuc3BsaXQoIlwiIilbMV0u c3BsaXQoIi8iKVstMV0KLQkJCW1vZHVsZXNbbW9kdWxlX25hbWVdID0ge30KLQotCQkJIyBMb29r IGZvciB0aGUgdGV4dCBzZWN0aW9uCi0JCQlsaW5lID0gaW5mb19maWxlX3N0ci5yZWFkbGluZSgp LnN0cmlwKCdcbicpCi0JCQl3aGlsZSAobGluZSAhPSAnJykgYW5kICgiU3ltYm9scyBmcm9tIiBu b3QgaW4gbGluZSk6Ci0JCQkJaWYgKCJFUl9STyIgaW4gbGluZSk6Ci0JCQkJCW1vZHVsZXNbbW9k dWxlX25hbWVdWydzdGFydCddID0gZ2V0X2FkZHJlc3NfZnJvbV9zdHJpbmcobGluZS5zcGxpdCgp WzBdKQotCQkJCQltb2R1bGVzW21vZHVsZV9uYW1lXVsnZW5kJ10gICA9IGdldF9hZGRyZXNzX2Zy b21fc3RyaW5nKGxpbmUuc3BsaXQoKVsyXSkKLQkJCQkJbGluZSA9IGluZm9fZmlsZV9zdHIucmVh ZGxpbmUoKS5zdHJpcCgnXG4nKQotCQkJCQlicmVhazsKLQkJCQlpZiAoIi50ZXh0IiBpbiBsaW5l KToKLQkJCQkJbW9kdWxlc1ttb2R1bGVfbmFtZV1bJ3N0YXJ0J10gPSBnZXRfYWRkcmVzc19mcm9t X3N0cmluZyhsaW5lLnNwbGl0KClbMF0pCi0JCQkJCW1vZHVsZXNbbW9kdWxlX25hbWVdWydlbmQn XSAgID0gZ2V0X2FkZHJlc3NfZnJvbV9zdHJpbmcobGluZS5zcGxpdCgpWzJdKQotCQkJCQlsaW5l ID0gaW5mb19maWxlX3N0ci5yZWFkbGluZSgpLnN0cmlwKCdcbicpCi0JCQkJCWJyZWFrOwotCQkJ CWxpbmUgPSBpbmZvX2ZpbGVfc3RyLnJlYWRsaW5lKCkuc3RyaXAoJ1xuJykKLQkJbGluZSA9IGlu Zm9fZmlsZV9zdHIucmVhZGxpbmUoKS5zdHJpcCgnXG4nKQotCi0JIwotCSMgR2V0IHRoZSBmdW5j dGlvbiBuYW1lIGFuZCB0aGVpciBtZW1vcnkgcmFuZ2UKLQkjCi0JaW5mb19mdW5jID0gZWMuZXhl Y3V0ZURTQ29tbWFuZCgiaW5mbyBmdW5jIikKLQlpbmZvX2Z1bmNfc3RyID0gU3RyaW5nSU8oaW5m b19mdW5jKQotCi0JIyBTa2lwIHRoZSBmaXJzdCBsaW5lICdMb3ctbGV2ZWwgc3ltYm9scyAuLi4n Ci0JbGluZSA9IGluZm9fZnVuY19zdHIucmVhZGxpbmUoKS5zdHJpcCgnXG4nKQotCWZ1bmNfcHJl diA9IE5vbmUKLQl3aGlsZSBsaW5lICE9ICcnOgotCQkjIFdlIGlnbm9yZSBhbGwgdGhlIGZ1bmN0 aW9ucyBhZnRlciAnRnVuY3Rpb25zIGluJwotCQlpZiAoIkZ1bmN0aW9ucyBpbiAiIGluIGxpbmUp OgotCQkJbGluZSA9IGluZm9fZnVuY19zdHIucmVhZGxpbmUoKS5zdHJpcCgnXG4nKQotCQkJd2hp bGUgbGluZSAhPSAnJzoKLQkJCQlsaW5lID0gaW5mb19mdW5jX3N0ci5yZWFkbGluZSgpLnN0cmlw KCdcbicpCi0JCQlsaW5lID0gaW5mb19mdW5jX3N0ci5yZWFkbGluZSgpLnN0cmlwKCdcbicpCi0J CQljb250aW51ZQotCi0JCWlmICgiTG93LWxldmVsIHN5bWJvbHMiIGluIGxpbmUpOgotCQkJIyBX ZSBuZWVkIHRvIGZpeHVwIHRoZSBsYXN0IGZ1bmN0aW9uIG9mIHRoZSBtb2R1bGUKLQkJCWlmIGZ1 bmNfcHJldiBpcyBub3QgTm9uZToKLQkJCQlmdW5jX3ByZXZbJ2VuZCddID0gbW9kdWxlc1ttb2R1 bGVfbmFtZV1bJ2VuZCddCi0JCQkJZnVuY19wcmV2ID0gTm9uZQotCi0JCQlsaW5lID0gaW5mb19m dW5jX3N0ci5yZWFkbGluZSgpLnN0cmlwKCdcbicpCi0JCQljb250aW51ZQotCi0JCWZ1bmNfbmFt ZSA9IGxpbmUuc3BsaXQoKVsxXQotCQlmdW5jX3N0YXJ0ID0gZ2V0X2FkZHJlc3NfZnJvbV9zdHJp bmcobGluZS5zcGxpdCgpWzBdKQotCQltb2R1bGVfbmFtZSA9IGdldF9tb2R1bGVfZnJvbV9hZGRy KG1vZHVsZXMsIGZ1bmNfc3RhcnQpCi0KLQkJaWYgZnVuY19uYW1lIG5vdCBpbiBmdW5jdGlvbnMu a2V5cygpOgotCQkJZnVuY3Rpb25zW2Z1bmNfbmFtZV0gPSB7fQotCQlmdW5jdGlvbnNbZnVuY19u YW1lXVttb2R1bGVfbmFtZV0gPSB7fQotCQlmdW5jdGlvbnNbZnVuY19uYW1lXVttb2R1bGVfbmFt ZV1bJ3N0YXJ0J10gPSBmdW5jX3N0YXJ0Ci0JCWZ1bmN0aW9uc1tmdW5jX25hbWVdW21vZHVsZV9u YW1lXVsnY3ljbGVzJ10gPSAwCi0JCWZ1bmN0aW9uc1tmdW5jX25hbWVdW21vZHVsZV9uYW1lXVsn Y291bnQnXSA9IDAKLQotCQkjIFNldCB0aGUgZW5kIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIGZ1 bmN0aW9uCi0JCWlmIGZ1bmNfcHJldiBpcyBub3QgTm9uZToKLQkJCWZ1bmNfcHJldlsnZW5kJ10g PSBmdW5jX3N0YXJ0Ci0JCWZ1bmNfcHJldiA9IGZ1bmN0aW9uc1tmdW5jX25hbWVdW21vZHVsZV9u YW1lXQotCi0JCWxpbmUgPSBpbmZvX2Z1bmNfc3RyLnJlYWRsaW5lKCkuc3RyaXAoJ1xuJykKLQot CSMgRml4dXAgdGhlIGxhc3QgZnVuY3Rpb24KLQlmdW5jX3ByZXZbJ2VuZCddID0gbW9kdWxlc1tt b2R1bGVfbmFtZV1bJ2VuZCddCi0KLQlpZiBzeW1ib2xzX2ZpbGUgaXMgbm90IE5vbmU6Ci0JCXBp Y2tsZS5kdW1wKChtb2R1bGVzLCBmdW5jdGlvbnMpLCBvcGVuKHN5bWJvbHNfZmlsZSwgInciKSkK LWV4Y2VwdDoKLQlpZiBzeW1ib2xzX2ZpbGUgaXMgTm9uZToKLQkJcHJpbnQgIkVycm9yOiBTeW1i b2xzIGZpbGUgaXMgcmVxdWlyZWQgd2hlbiBydW4gb3V0IG9mIEFSTSBEUy01IgotCQlzeXMuZXhp dCgpCi0KLQkobW9kdWxlcywgZnVuY3Rpb25zKSA9IHBpY2tsZS5sb2FkKG9wZW4oc3ltYm9sc19m aWxlLCAiciIpKQotCi0jCi0jIEJ1aWxkIG9wdGltaXplZCB0YWJsZSBmb3IgdGhlIDxVbmtub3du PiBmdW5jdGlvbnMKLSMKLWZ1bmN0aW9uc19hZGRyID0ge30KLWZvciBmdW5jX2tleSwgbW9kdWxl IGluIGZ1bmN0aW9ucy5pdGVyaXRlbXMoKToKLQlmb3IgbW9kdWxlX2tleSwgbW9kdWxlX3ZhbHVl IGluIG1vZHVsZS5pdGVyaXRlbXMoKToKLQkJa2V5ID0gbW9kdWxlX3ZhbHVlWydzdGFydCddICYg fjB4MEZGRgotCQlpZiBrZXkgbm90IGluIGZ1bmN0aW9uc19hZGRyLmtleXMoKToKLQkJCWZ1bmN0 aW9uc19hZGRyW2tleV0gPSB7fQotCQlpZiBmdW5jX2tleSBub3QgaW4gZnVuY3Rpb25zX2FkZHJb a2V5XS5rZXlzKCk6Ci0JCQlmdW5jdGlvbnNfYWRkcltrZXldW2Z1bmNfa2V5XSA9IHt9Ci0JCWZ1 bmN0aW9uc19hZGRyW2tleV1bZnVuY19rZXldW21vZHVsZV9rZXldID0gbW9kdWxlX3ZhbHVlCi0K LSMKLSMgUHJvY2VzcyB0aGUgdHJhY2UgZmlsZQotIwotaWYgdHJhY2VfbmFtZSBpcyBOb25lOgot CXN5cy5leGl0KCkKLQotdHJhY2UgPSBvcGVuKHRyYWNlX25hbWUsICJyIikKLXRyYWNlX3NpemUg PSBvcy5wYXRoLmdldHNpemUodHJhY2VfbmFtZSkKLXRyYWNlX3Byb2Nlc3MgPSAwCi0KLSMgR2V0 IHRoZSBjb2x1bW4gbmFtZXMgZnJvbSB0aGUgZmlyc3QgbGluZQotY29sdW1ucyA9IHRyYWNlX3Jl YWQoKS5zcGxpdCgpCi1jb2x1bW5fYWRkciAgICAgPSBjb2x1bW5zLmluZGV4KCdBZGRyZXNzJykK LWNvbHVtbl9jeWNsZXMgICA9IGNvbHVtbnMuaW5kZXgoJ0N5Y2xlcycpCi1jb2x1bW5fZnVuY3Rp b24gPSBjb2x1bW5zLmluZGV4KCdGdW5jdGlvbicpCi0KLWxpbmUgPSB0cmFjZV9yZWFkKCkKLWkg PSAwCi1wcmV2X2NhbGxlZSA9IE5vbmUKLXdoaWxlIGxpbmU6Ci0JdHJ5OgotCQlmdW5jX25hbWUg PSBsaW5lLnNwbGl0KCdcdCcpW2NvbHVtbl9mdW5jdGlvbl0uc3RyaXAoKQotCQlhZGRyZXNzICAg PSBnZXRfYWRkcmVzc19mcm9tX3N0cmluZyhsaW5lLnNwbGl0KCdcdCcpW2NvbHVtbl9hZGRyXSkK LQkJY3ljbGVzICAgID0gaW50KGxpbmUuc3BsaXQoJ1x0JylbY29sdW1uX2N5Y2xlc10pCi0JCWNh bGxlZSA9IGFkZF9jeWNsZXNfdG9fZnVuY3Rpb24oZnVuY3Rpb25zLCBmdW5jX25hbWUsIGFkZHJl c3MsIGN5Y2xlcykKLQkJaWYgKHByZXZfY2FsbGVlICE9IE5vbmUpIGFuZCAocHJldl9jYWxsZWUg IT0gY2FsbGVlKToKLQkJCWZ1bmN0aW9uc1twcmV2X2NhbGxlZVswXV1bcHJldl9jYWxsZWVbMV1d Wydjb3VudCddICs9IDEKLQkJcHJldl9jYWxsZWUgPSBjYWxsZWUKLQlleGNlcHQgVmFsdWVFcnJv cjoKLQkJcGFzcwotCWxpbmUgPSB0cmFjZV9yZWFkKCkKLQlpZiAoKGkgJSAxMDAwMDAwKSA9PSAw KSBhbmQgKGkgIT0gMCk6Ci0JCXBlcmNlbnQgPSAodHJhY2VfcHJvY2VzcyAqIDEwMC4wMCkgLyB0 cmFjZV9zaXplCi0JCXByaW50ICJQcm9jZXNzaW5nIGZpbGUgLi4uICglLjJmICUlKSIgJSAocGVy Y2VudCkKLQlpID0gaSArIDEKLQotIyBGaXh1cCB0aGUgbGFzdCBjYWxsZWUKLWZ1bmN0aW9uc1tw cmV2X2NhbGxlZVswXV1bcHJldl9jYWxsZWVbMV1dWydjb3VudCddICs9IDEKLQotIwotIyBQcm9j ZXNzIHJlc3VsdHMKLSMKLWZ1bmN0aW9uc19jeWNsZXMgICAgID0ge30KLWFsbF9mdW5jdGlvbnNf Y3ljbGVzID0ge30KLXRvdGFsX2N5Y2xlcyAgICAgICAgID0gMAotCi1mb3IgZnVuY19rZXksIG1v ZHVsZSBpbiBmdW5jdGlvbnMuaXRlcml0ZW1zKCk6Ci0JZm9yIG1vZHVsZV9rZXksIG1vZHVsZV92 YWx1ZSBpbiBtb2R1bGUuaXRlcml0ZW1zKCk6Ci0JCWtleSA9ICIlcy8lcyIgJSAobW9kdWxlX2tl eSwgZnVuY19rZXkpCi0JCWZ1bmN0aW9uc19jeWNsZXNba2V5XSA9IChtb2R1bGVfdmFsdWVbJ2N5 Y2xlcyddLCBtb2R1bGVfdmFsdWVbJ2NvdW50J10pCi0JCXRvdGFsX2N5Y2xlcyArPSBtb2R1bGVf dmFsdWVbJ2N5Y2xlcyddCi0KLQkJaWYgZnVuY19rZXkgbm90IGluIGFsbF9mdW5jdGlvbnNfY3lj bGVzLmtleXMoKToKLQkJCWFsbF9mdW5jdGlvbnNfY3ljbGVzW2Z1bmNfa2V5XSA9IChtb2R1bGVf dmFsdWVbJ2N5Y2xlcyddLCBtb2R1bGVfdmFsdWVbJ2NvdW50J10pCi0JCWVsc2U6Ci0JCQlhbGxf ZnVuY3Rpb25zX2N5Y2xlc1tmdW5jX2tleV0gPSB0dXBsZShtYXAoc3VtLCB6aXAoYWxsX2Z1bmN0 aW9uc19jeWNsZXNbZnVuY19rZXldLCAobW9kdWxlX3ZhbHVlWydjeWNsZXMnXSwgbW9kdWxlX3Zh bHVlWydjb3VudCddKSkpKQotCi1zb3J0ZWRfZnVuY3Rpb25zX2N5Y2xlcyAgICAgPSBzb3J0ZWQo ZnVuY3Rpb25zX2N5Y2xlcy5pdGVyaXRlbXMoKSwga2V5PW9wZXJhdG9yLml0ZW1nZXR0ZXIoMSks IHJldmVyc2UgPSBUcnVlKQotc29ydGVkX2FsbF9mdW5jdGlvbnNfY3ljbGVzID0gc29ydGVkKGFs bF9mdW5jdGlvbnNfY3ljbGVzLml0ZW1zKCksIGtleT1vcGVyYXRvci5pdGVtZ2V0dGVyKDEpLCBy ZXZlcnNlID0gVHJ1ZSkKLQotcHJpbnQKLXByaW50ICItLS0tIgotZm9yIChrZXksdmFsdWUpIGlu IHNvcnRlZF9mdW5jdGlvbnNfY3ljbGVzWzoyMF06Ci0JaWYgdmFsdWVbMF0gIT0gMDoKLQkJcHJp bnQgIiVzIChjeWNsZXM6ICVkIC0gJWQlJSwgY291bnQ6ICVkKSIgJSAoa2V5LCB2YWx1ZVswXSwg KHZhbHVlWzBdICogMTAwKSAvIHRvdGFsX2N5Y2xlcywgdmFsdWVbMV0pCi0JZWxzZToKLQkJYnJl YWs7Ci1wcmludCAiLS0tLSIKLWZvciAoa2V5LHZhbHVlKSBpbiBzb3J0ZWRfYWxsX2Z1bmN0aW9u c19jeWNsZXNbOjIwXToKLQlpZiB2YWx1ZVswXSAhPSAwOgotCQlwcmludCAiJXMgKGN5Y2xlczog JWQgLSAlZCUlLCBjb3VudDogJWQpIiAlIChrZXksIHZhbHVlWzBdLCAodmFsdWVbMF0gKiAxMDAp IC8gdG90YWxfY3ljbGVzLCB2YWx1ZVsxXSkKLQllbHNlOgotCQlicmVhazsKKyMhL3Vzci9iaW4v cHl0aG9uDQorDQorIw0KKyMgIENvcHlyaWdodCAoYykgMjAxNCwgQVJNIExpbWl0ZWQuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuDQorIw0KKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQorIw0KKw0KK2ltcG9ydCBnZXRvcHQNCitpbXBvcnQgb3BlcmF0b3INCitp bXBvcnQgb3MNCitpbXBvcnQgcGlja2xlDQoraW1wb3J0IHN5cw0KK2Zyb20gc3lzIGltcG9ydCBh cmd2DQorZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPDQorDQorbW9kdWxlcyA9IHt9DQor ZnVuY3Rpb25zID0ge30NCitmdW5jdGlvbnNfYWRkciA9IHt9DQorDQorZGVmIHVzYWdlKCk6DQor ICAgIHByaW50ICItdCwtLXRyYWNlOiBMb2NhdGlvbiBvZiB0aGUgVHJhY2UgZmlsZSINCisgICAg cHJpbnQgIi1zLC0tc3ltYm9sczogTG9jYXRpb24gb2YgdGhlIHN5bWJvbHMgYW5kIG1vZHVsZXMi DQorDQorZGVmIGdldF9hZGRyZXNzX2Zyb21fc3RyaW5nKGFkZHJlc3MpOg0KKyAgICByZXR1cm4g aW50KGFkZHJlc3Muc3RyaXAoIlM6Iikuc3RyaXAoIk46Iikuc3RyaXAoIkVMMjoiKS5zdHJpcCgi RUwxOiIpLCAxNikNCisNCitkZWYgZ2V0X21vZHVsZV9mcm9tX2FkZHIobW9kdWxlcywgYWRkcik6 DQorICAgIGZvciBrZXksdmFsdWUgaW4gbW9kdWxlcy5pdGVtcygpOg0KKyAgICAgICAgaWYgKHZh bHVlWydzdGFydCddIDw9IGFkZHIpIGFuZCAoYWRkciA8PSB2YWx1ZVsnZW5kJ10pOg0KKyAgICAg ICAgICAgIHJldHVybiBrZXkNCisgICAgcmV0dXJuIE5vbmUNCisNCitkZWYgYWRkX2N5Y2xlc190 b19mdW5jdGlvbihmdW5jdGlvbnMsIGZ1bmNfbmFtZSwgYWRkciwgY3ljbGVzKToNCisgICAgaWYg ZnVuY19uYW1lICE9ICI8VW5rbm93bj4iOg0KKyAgICAgICAgIyBDaGVjayBpZiB3ZSBhcmUgc3Rp bGwgaW4gdGhlIHByZXZpb3VzIGZ1bmN0aW9uDQorICAgICAgICBpZiBhZGRfY3ljbGVzX3RvX2Z1 bmN0aW9uLnByZXZfZnVuY19uYW1lID09IGZ1bmNfbmFtZToNCisgICAgICAgICAgICBhZGRfY3lj bGVzX3RvX2Z1bmN0aW9uLnByZXZfZW50cnlbJ2N5Y2xlcyddICs9IGN5Y2xlcw0KKyAgICAgICAg ICAgIHJldHVybiAoYWRkX2N5Y2xlc190b19mdW5jdGlvbi5wcmV2X2Z1bmNfbmFtZSwgYWRkX2N5 Y2xlc190b19mdW5jdGlvbi5wcmV2X21vZHVsZV9uYW1lKQ0KKw0KKyAgICAgICAgaWYgZnVuY19u YW1lIGluIGZ1bmN0aW9ucy5rZXlzKCk6DQorICAgICAgICAgICAgZm9yIG1vZHVsZV9uYW1lLCBt b2R1bGVfdmFsdWUgaW4gZnVuY3Rpb25zW2Z1bmNfbmFtZV0uaXRlcml0ZW1zKCk6DQorICAgICAg ICAgICAgICAgIGlmIChtb2R1bGVfdmFsdWVbJ3N0YXJ0J10gPD0gYWRkcikgYW5kIChhZGRyIDwg bW9kdWxlX3ZhbHVlWydlbmQnXSk6DQorICAgICAgICAgICAgICAgICAgICBtb2R1bGVfdmFsdWVb J2N5Y2xlcyddICs9IGN5Y2xlcw0KKw0KKyAgICAgICAgICAgICAgICAgICAgYWRkX2N5Y2xlc190 b19mdW5jdGlvbi5wcmV2X2Z1bmNfbmFtZSAgID0gZnVuY19uYW1lDQorICAgICAgICAgICAgICAg ICAgICBhZGRfY3ljbGVzX3RvX2Z1bmN0aW9uLnByZXZfbW9kdWxlX25hbWUgPSBtb2R1bGVfbmFt ZQ0KKyAgICAgICAgICAgICAgICAgICAgYWRkX2N5Y2xlc190b19mdW5jdGlvbi5wcmV2X2VudHJ5 ICAgICAgID0gbW9kdWxlX3ZhbHVlDQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGZ1bmNf bmFtZSwgbW9kdWxlX25hbWUpDQorICAgICAgICAgICAgICAgIGVsaWYgKG1vZHVsZV92YWx1ZVsn ZW5kJ10gPT0gMCk6DQorICAgICAgICAgICAgICAgICAgICBtb2R1bGVfdmFsdWVbJ2N5Y2xlcydd ICs9IGN5Y2xlcw0KKw0KKyAgICAgICAgICAgICAgICAgICAgYWRkX2N5Y2xlc190b19mdW5jdGlv bi5wcmV2X2Z1bmNfbmFtZSAgID0gZnVuY19uYW1lDQorICAgICAgICAgICAgICAgICAgICBhZGRf Y3ljbGVzX3RvX2Z1bmN0aW9uLnByZXZfbW9kdWxlX25hbWUgPSBtb2R1bGVfbmFtZQ0KKyAgICAg ICAgICAgICAgICAgICAgYWRkX2N5Y2xlc190b19mdW5jdGlvbi5wcmV2X2VudHJ5ICAgICAgID0g bW9kdWxlX3ZhbHVlDQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGZ1bmNfbmFtZSwgbW9k dWxlX25hbWUpDQorDQorICAgICAgICAjIFdvcmthcm91bmQgdG8gZml4IHRoZSAnaW5mbyBmdW5j JyBsaW1pdGF0aW9uIHRoYXQgZG9lcyBub3QgZXhwb3NlIHRoZSAnc3RhdGljJyBmdW5jdGlvbg0K KyAgICAgICAgbW9kdWxlX25hbWUgPSBnZXRfbW9kdWxlX2Zyb21fYWRkcihtb2R1bGVzLCBhZGRy KQ0KKyAgICAgICAgZnVuY3Rpb25zW2Z1bmNfbmFtZV0gPSB7fQ0KKyAgICAgICAgZnVuY3Rpb25z W2Z1bmNfbmFtZV1bbW9kdWxlX25hbWVdID0ge30NCisgICAgICAgIGZ1bmN0aW9uc1tmdW5jX25h bWVdW21vZHVsZV9uYW1lXVsnc3RhcnQnXSAgPSAwDQorICAgICAgICBmdW5jdGlvbnNbZnVuY19u YW1lXVttb2R1bGVfbmFtZV1bJ2VuZCddICAgID0gMA0KKyAgICAgICAgZnVuY3Rpb25zW2Z1bmNf bmFtZV1bbW9kdWxlX25hbWVdWydjeWNsZXMnXSA9IGN5Y2xlcw0KKyAgICAgICAgZnVuY3Rpb25z W2Z1bmNfbmFtZV1bbW9kdWxlX25hbWVdWydjb3VudCddICA9IDANCisNCisgICAgICAgIGFkZF9j eWNsZXNfdG9fZnVuY3Rpb24ucHJldl9mdW5jX25hbWUgICA9IGZ1bmNfbmFtZQ0KKyAgICAgICAg YWRkX2N5Y2xlc190b19mdW5jdGlvbi5wcmV2X21vZHVsZV9uYW1lID0gbW9kdWxlX25hbWUNCisg ICAgICAgIGFkZF9jeWNsZXNfdG9fZnVuY3Rpb24ucHJldl9lbnRyeSAgICAgICA9IGZ1bmN0aW9u c1tmdW5jX25hbWVdW21vZHVsZV9uYW1lXQ0KKyAgICAgICAgcmV0dXJuIChmdW5jX25hbWUsIG1v ZHVsZV9uYW1lKQ0KKyAgICBlbHNlOg0KKyAgICAgICAgIyBDaGVjayBpZiB3ZSBhcmUgc3RpbGwg aW4gdGhlIHByZXZpb3VzIGZ1bmN0aW9uDQorICAgICAgICBpZiAoYWRkX2N5Y2xlc190b19mdW5j dGlvbi5wcmV2X2VudHJ5IGlzIG5vdCBOb25lKSBhbmQgKGFkZF9jeWNsZXNfdG9fZnVuY3Rpb24u cHJldl9lbnRyeVsnc3RhcnQnXSA8PSBhZGRyKSBhbmQgKGFkZHIgPCBhZGRfY3ljbGVzX3RvX2Z1 bmN0aW9uLnByZXZfZW50cnlbJ2VuZCddKToNCisgICAgICAgICAgICBhZGRfY3ljbGVzX3RvX2Z1 bmN0aW9uLnByZXZfZW50cnlbJ2N5Y2xlcyddICs9IGN5Y2xlcw0KKyAgICAgICAgICAgIHJldHVy biAoYWRkX2N5Y2xlc190b19mdW5jdGlvbi5wcmV2X2Z1bmNfbmFtZSwgYWRkX2N5Y2xlc190b19m dW5jdGlvbi5wcmV2X21vZHVsZV9uYW1lKQ0KKw0KKyAgICAgICAgIyBHZW5lcmF0ZSB0aGUga2V5 IGZvciB0aGUgZ2l2ZW4gYWRkcmVzcw0KKyAgICAgICAga2V5ID0gYWRkciAmIH4weDBGRkYNCisN CisgICAgICAgIGlmIGtleSBub3QgaW4gZnVuY3Rpb25zX2FkZHIua2V5cygpOg0KKyAgICAgICAg ICAgIGlmICdVbmtub3duJyBub3QgaW4gZnVuY3Rpb25zLmtleXMoKToNCisgICAgICAgICAgICAg ICAgZnVuY3Rpb25zWydVbmtub3duJ10gPSB7fQ0KKyAgICAgICAgICAgIGlmICdVbmtub3duJyBu b3QgaW4gZnVuY3Rpb25zWydVbmtub3duJ10ua2V5cygpOg0KKyAgICAgICAgICAgICAgICBmdW5j dGlvbnNbJ1Vua25vd24nXVsnVW5rbm93biddID0ge30NCisgICAgICAgICAgICAgICAgZnVuY3Rp b25zWydVbmtub3duJ11bJ1Vua25vd24nXVsnY3ljbGVzJ10gPSAwDQorICAgICAgICAgICAgICAg IGZ1bmN0aW9uc1snVW5rbm93biddWydVbmtub3duJ11bJ2NvdW50J10gPSAwDQorICAgICAgICAg ICAgZnVuY3Rpb25zWydVbmtub3duJ11bJ1Vua25vd24nXVsnY3ljbGVzJ10gKz0gY3ljbGVzDQor DQorICAgICAgICAgICAgYWRkX2N5Y2xlc190b19mdW5jdGlvbi5wcmV2X2Z1bmNfbmFtZSA9IE5v bmUNCisgICAgICAgICAgICByZXR1cm4gTm9uZQ0KKw0KKyAgICAgICAgZm9yIGZ1bmNfa2V5LCBt b2R1bGUgaW4gZnVuY3Rpb25zX2FkZHJba2V5XS5pdGVyaXRlbXMoKToNCisgICAgICAgICAgICBm b3IgbW9kdWxlX2tleSwgbW9kdWxlX3ZhbHVlIGluIG1vZHVsZS5pdGVyaXRlbXMoKToNCisgICAg ICAgICAgICAgICAgaWYgKG1vZHVsZV92YWx1ZVsnc3RhcnQnXSA8PSBhZGRyKSBhbmQgKGFkZHIg PCBtb2R1bGVfdmFsdWVbJ2VuZCddKToNCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZV92YWx1 ZVsnY3ljbGVzJ10gKz0gY3ljbGVzDQorDQorICAgICAgICAgICAgICAgICAgICAjIEluIGNhc2Ug byA8VW5rbm93bj4gd2UgcHJlZmVyIHRvIGZhbGxiYWNrIG9uIHRoZSBkaXJlY3Qgc2VhcmNoDQor ICAgICAgICAgICAgICAgICAgICBhZGRfY3ljbGVzX3RvX2Z1bmN0aW9uLnByZXZfZnVuY19uYW1l ICAgPSBmdW5jX2tleQ0KKyAgICAgICAgICAgICAgICAgICAgYWRkX2N5Y2xlc190b19mdW5jdGlv bi5wcmV2X21vZHVsZV9uYW1lID0gbW9kdWxlX2tleQ0KKyAgICAgICAgICAgICAgICAgICAgYWRk X2N5Y2xlc190b19mdW5jdGlvbi5wcmV2X2VudHJ5ICAgICAgID0gbW9kdWxlX3ZhbHVlDQorICAg ICAgICAgICAgICAgICAgICByZXR1cm4gKGZ1bmNfa2V5LCBtb2R1bGVfa2V5KQ0KKw0KKyAgICBw cmludCAiV2FybmluZzogRnVuY3Rpb24gJXMgQCAweCV4IG5vdCBmb3VuZCIgJSAoZnVuY19uYW1l LCBhZGRyKQ0KKw0KKyAgICBhZGRfY3ljbGVzX3RvX2Z1bmN0aW9uLnByZXZfZnVuY19uYW1lID0g Tm9uZQ0KKyAgICByZXR1cm4gTm9uZQ0KKw0KKyMgU3RhdGljIHZhcmlhYmxlcyBmb3IgdGhlIHBy ZXZpb3VzIGZ1bmN0aW9uDQorYWRkX2N5Y2xlc190b19mdW5jdGlvbi5wcmV2X2Z1bmNfbmFtZSA9 IE5vbmUNCithZGRfY3ljbGVzX3RvX2Z1bmN0aW9uLnByZXZfZW50cnkgICAgID0gTm9uZQ0KKw0K K2RlZiB0cmFjZV9yZWFkKCk6DQorICAgIGdsb2JhbCB0cmFjZV9wcm9jZXNzDQorICAgIGxpbmUg PSB0cmFjZS5yZWFkbGluZSgpDQorICAgIHRyYWNlX3Byb2Nlc3MgKz0gbGVuKGxpbmUpDQorICAg IHJldHVybiBsaW5lDQorDQorIw0KKyMgUGFyc2UgYXJndW1lbnRzDQorIw0KK3RyYWNlX25hbWUg PSBOb25lDQorc3ltYm9sc19maWxlID0gTm9uZQ0KKw0KK29wdHMsYXJncyA9IGdldG9wdC5nZXRv cHQoc3lzLmFyZ3ZbMTpdLCAiaHQ6dnM6diIsIFsiaGVscCIsInRyYWNlPSIsInN5bWJvbHM9Il0p DQoraWYgKG9wdHMgaXMgTm9uZSkgb3IgKG5vdCBvcHRzKToNCisgICAgdXNhZ2UoKQ0KKyAgICBz eXMuZXhpdCgpDQorDQorZm9yIG8sYSBpbiBvcHRzOg0KKyAgICBpZiBvIGluICgiLWgiLCItLWhl bHAiKToNCisgICAgICAgIHVzYWdlKCkNCisgICAgICAgIHN5cy5leGl0KCkNCisgICAgZWxpZiBv IGluICgiLXQiLCItLXRyYWNlIik6DQorICAgICAgICB0cmFjZV9uYW1lID0gYQ0KKyAgICBlbGlm IG8gaW4gKCItcyIsIi0tc3ltYm9scyIpOg0KKyAgICAgICAgc3ltYm9sc19maWxlID0gYQ0KKyAg ICBlbHNlOg0KKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAiVW5oYW5kbGVkIG9wdGlvbiAoJXMpIiAl IG8NCisNCisjDQorIyBXZSB0cnkgZmlyc3QgdG8gc2VlIGlmIHdlIHJ1biB0aGUgc2NyaXB0IGZy b20gRFMtNQ0KKyMNCit0cnk6DQorICAgIGZyb20gYXJtX2RzLmRlYnVnZ2VyX3YxIGltcG9ydCBE ZWJ1Z2dlcg0KKyAgICBmcm9tIGFybV9kcy5kZWJ1Z2dlcl92MSBpbXBvcnQgRGVidWdFeGNlcHRp b24NCisNCisgICAgIyBEZWJ1Z2dlciBvYmplY3QgZm9yIGFjY2Vzc2luZyB0aGUgZGVidWdnZXIN CisgICAgZGVidWdnZXIgPSBEZWJ1Z2dlcigpDQorDQorICAgICMgSW5pdGlhbGlzYXRpb24gY29t bWFuZHMNCisgICAgZWMgPSBkZWJ1Z2dlci5nZXRFeGVjdXRpb25Db250ZXh0KDApDQorICAgIGVj LmdldEV4ZWN1dGlvblNlcnZpY2UoKS5zdG9wKCkNCisgICAgZWMuZ2V0RXhlY3V0aW9uU2Vydmlj ZSgpLndhaXRGb3JTdG9wKCkNCisgICAgIyBpbiBjYXNlIHRoZSBleGVjdXRpb24gY29udGV4dCBy ZWZlcmVuY2UgaXMgb3V0IG9mIGRhdGUNCisgICAgZWMgPSBkZWJ1Z2dlci5nZXRFeGVjdXRpb25D b250ZXh0KDApDQorDQorICAgICMNCisgICAgIyBHZXQgdGhlIG1vZHVsZSBuYW1lIGFuZCB0aGVp ciBtZW1vcnkgcmFuZ2UNCisgICAgIw0KKyAgICBpbmZvX2ZpbGUgPSBlYy5leGVjdXRlRFNDb21t YW5kKCJpbmZvIGZpbGUiKQ0KKyAgICBpbmZvX2ZpbGVfc3RyID0gU3RyaW5nSU8oaW5mb19maWxl KQ0KKw0KKyAgICBsaW5lID0gaW5mb19maWxlX3N0ci5yZWFkbGluZSgpLnN0cmlwKCdcbicpDQor ICAgIHdoaWxlIGxpbmUgIT0gJyc6DQorICAgICAgICBpZiAoIlN5bWJvbHMgZnJvbSIgaW4gbGlu ZSk6DQorICAgICAgICAgICAgIyBHZXQgdGhlIG1vZHVsZSBuYW1lIGZyb20gdGhlIGxpbmUgJ1N5 bWJvbHMgZnJvbSAiL2hvbWUvLi4uLiInDQorICAgICAgICAgICAgbW9kdWxlX25hbWUgPSBsaW5l LnNwbGl0KCJcIiIpWzFdLnNwbGl0KCIvIilbLTFdDQorICAgICAgICAgICAgbW9kdWxlc1ttb2R1 bGVfbmFtZV0gPSB7fQ0KKw0KKyAgICAgICAgICAgICMgTG9vayBmb3IgdGhlIHRleHQgc2VjdGlv bg0KKyAgICAgICAgICAgIGxpbmUgPSBpbmZvX2ZpbGVfc3RyLnJlYWRsaW5lKCkuc3RyaXAoJ1xu JykNCisgICAgICAgICAgICB3aGlsZSAobGluZSAhPSAnJykgYW5kICgiU3ltYm9scyBmcm9tIiBu b3QgaW4gbGluZSk6DQorICAgICAgICAgICAgICAgIGlmICgiRVJfUk8iIGluIGxpbmUpOg0KKyAg ICAgICAgICAgICAgICAgICAgbW9kdWxlc1ttb2R1bGVfbmFtZV1bJ3N0YXJ0J10gPSBnZXRfYWRk cmVzc19mcm9tX3N0cmluZyhsaW5lLnNwbGl0KClbMF0pDQorICAgICAgICAgICAgICAgICAgICBt b2R1bGVzW21vZHVsZV9uYW1lXVsnZW5kJ10gICA9IGdldF9hZGRyZXNzX2Zyb21fc3RyaW5nKGxp bmUuc3BsaXQoKVsyXSkNCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBpbmZvX2ZpbGVfc3Ry LnJlYWRsaW5lKCkuc3RyaXAoJ1xuJykNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAg ICAgICAgICAgICAgICBpZiAoIi50ZXh0IiBpbiBsaW5lKToNCisgICAgICAgICAgICAgICAgICAg IG1vZHVsZXNbbW9kdWxlX25hbWVdWydzdGFydCddID0gZ2V0X2FkZHJlc3NfZnJvbV9zdHJpbmco bGluZS5zcGxpdCgpWzBdKQ0KKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlc1ttb2R1bGVfbmFt ZV1bJ2VuZCddICAgPSBnZXRfYWRkcmVzc19mcm9tX3N0cmluZyhsaW5lLnNwbGl0KClbMl0pDQor ICAgICAgICAgICAgICAgICAgICBsaW5lID0gaW5mb19maWxlX3N0ci5yZWFkbGluZSgpLnN0cmlw KCdcbicpDQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgbGlu ZSA9IGluZm9fZmlsZV9zdHIucmVhZGxpbmUoKS5zdHJpcCgnXG4nKQ0KKyAgICAgICAgbGluZSA9 IGluZm9fZmlsZV9zdHIucmVhZGxpbmUoKS5zdHJpcCgnXG4nKQ0KKw0KKyAgICAjDQorICAgICMg R2V0IHRoZSBmdW5jdGlvbiBuYW1lIGFuZCB0aGVpciBtZW1vcnkgcmFuZ2UNCisgICAgIw0KKyAg ICBpbmZvX2Z1bmMgPSBlYy5leGVjdXRlRFNDb21tYW5kKCJpbmZvIGZ1bmMiKQ0KKyAgICBpbmZv X2Z1bmNfc3RyID0gU3RyaW5nSU8oaW5mb19mdW5jKQ0KKw0KKyAgICAjIFNraXAgdGhlIGZpcnN0 IGxpbmUgJ0xvdy1sZXZlbCBzeW1ib2xzIC4uLicNCisgICAgbGluZSA9IGluZm9fZnVuY19zdHIu cmVhZGxpbmUoKS5zdHJpcCgnXG4nKQ0KKyAgICBmdW5jX3ByZXYgPSBOb25lDQorICAgIHdoaWxl IGxpbmUgIT0gJyc6DQorICAgICAgICAjIFdlIGlnbm9yZSBhbGwgdGhlIGZ1bmN0aW9ucyBhZnRl ciAnRnVuY3Rpb25zIGluJw0KKyAgICAgICAgaWYgKCJGdW5jdGlvbnMgaW4gIiBpbiBsaW5lKToN CisgICAgICAgICAgICBsaW5lID0gaW5mb19mdW5jX3N0ci5yZWFkbGluZSgpLnN0cmlwKCdcbicp DQorICAgICAgICAgICAgd2hpbGUgbGluZSAhPSAnJzoNCisgICAgICAgICAgICAgICAgbGluZSA9 IGluZm9fZnVuY19zdHIucmVhZGxpbmUoKS5zdHJpcCgnXG4nKQ0KKyAgICAgICAgICAgIGxpbmUg PSBpbmZvX2Z1bmNfc3RyLnJlYWRsaW5lKCkuc3RyaXAoJ1xuJykNCisgICAgICAgICAgICBjb250 aW51ZQ0KKw0KKyAgICAgICAgaWYgKCJMb3ctbGV2ZWwgc3ltYm9scyIgaW4gbGluZSk6DQorICAg ICAgICAgICAgIyBXZSBuZWVkIHRvIGZpeHVwIHRoZSBsYXN0IGZ1bmN0aW9uIG9mIHRoZSBtb2R1 bGUNCisgICAgICAgICAgICBpZiBmdW5jX3ByZXYgaXMgbm90IE5vbmU6DQorICAgICAgICAgICAg ICAgIGZ1bmNfcHJldlsnZW5kJ10gPSBtb2R1bGVzW21vZHVsZV9uYW1lXVsnZW5kJ10NCisgICAg ICAgICAgICAgICAgZnVuY19wcmV2ID0gTm9uZQ0KKw0KKyAgICAgICAgICAgIGxpbmUgPSBpbmZv X2Z1bmNfc3RyLnJlYWRsaW5lKCkuc3RyaXAoJ1xuJykNCisgICAgICAgICAgICBjb250aW51ZQ0K Kw0KKyAgICAgICAgZnVuY19uYW1lID0gbGluZS5zcGxpdCgpWzFdDQorICAgICAgICBmdW5jX3N0 YXJ0ID0gZ2V0X2FkZHJlc3NfZnJvbV9zdHJpbmcobGluZS5zcGxpdCgpWzBdKQ0KKyAgICAgICAg bW9kdWxlX25hbWUgPSBnZXRfbW9kdWxlX2Zyb21fYWRkcihtb2R1bGVzLCBmdW5jX3N0YXJ0KQ0K Kw0KKyAgICAgICAgaWYgZnVuY19uYW1lIG5vdCBpbiBmdW5jdGlvbnMua2V5cygpOg0KKyAgICAg ICAgICAgIGZ1bmN0aW9uc1tmdW5jX25hbWVdID0ge30NCisgICAgICAgIGZ1bmN0aW9uc1tmdW5j X25hbWVdW21vZHVsZV9uYW1lXSA9IHt9DQorICAgICAgICBmdW5jdGlvbnNbZnVuY19uYW1lXVtt b2R1bGVfbmFtZV1bJ3N0YXJ0J10gPSBmdW5jX3N0YXJ0DQorICAgICAgICBmdW5jdGlvbnNbZnVu Y19uYW1lXVttb2R1bGVfbmFtZV1bJ2N5Y2xlcyddID0gMA0KKyAgICAgICAgZnVuY3Rpb25zW2Z1 bmNfbmFtZV1bbW9kdWxlX25hbWVdWydjb3VudCddID0gMA0KKw0KKyAgICAgICAgIyBTZXQgdGhl IGVuZCBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyBmdW5jdGlvbg0KKyAgICAgICAgaWYgZnVuY19w cmV2IGlzIG5vdCBOb25lOg0KKyAgICAgICAgICAgIGZ1bmNfcHJldlsnZW5kJ10gPSBmdW5jX3N0 YXJ0DQorICAgICAgICBmdW5jX3ByZXYgPSBmdW5jdGlvbnNbZnVuY19uYW1lXVttb2R1bGVfbmFt ZV0NCisNCisgICAgICAgIGxpbmUgPSBpbmZvX2Z1bmNfc3RyLnJlYWRsaW5lKCkuc3RyaXAoJ1xu JykNCisNCisgICAgIyBGaXh1cCB0aGUgbGFzdCBmdW5jdGlvbg0KKyAgICBmdW5jX3ByZXZbJ2Vu ZCddID0gbW9kdWxlc1ttb2R1bGVfbmFtZV1bJ2VuZCddDQorDQorICAgIGlmIHN5bWJvbHNfZmls ZSBpcyBub3QgTm9uZToNCisgICAgICAgIHBpY2tsZS5kdW1wKChtb2R1bGVzLCBmdW5jdGlvbnMp LCBvcGVuKHN5bWJvbHNfZmlsZSwgInciKSkNCitleGNlcHQ6DQorICAgIGlmIHN5bWJvbHNfZmls ZSBpcyBOb25lOg0KKyAgICAgICAgcHJpbnQgIkVycm9yOiBTeW1ib2xzIGZpbGUgaXMgcmVxdWly ZWQgd2hlbiBydW4gb3V0IG9mIEFSTSBEUy01Ig0KKyAgICAgICAgc3lzLmV4aXQoKQ0KKw0KKyAg ICAobW9kdWxlcywgZnVuY3Rpb25zKSA9IHBpY2tsZS5sb2FkKG9wZW4oc3ltYm9sc19maWxlLCAi ciIpKQ0KKw0KKyMNCisjIEJ1aWxkIG9wdGltaXplZCB0YWJsZSBmb3IgdGhlIDxVbmtub3duPiBm dW5jdGlvbnMNCisjDQorZnVuY3Rpb25zX2FkZHIgPSB7fQ0KK2ZvciBmdW5jX2tleSwgbW9kdWxl IGluIGZ1bmN0aW9ucy5pdGVyaXRlbXMoKToNCisgICAgZm9yIG1vZHVsZV9rZXksIG1vZHVsZV92 YWx1ZSBpbiBtb2R1bGUuaXRlcml0ZW1zKCk6DQorICAgICAgICBrZXkgPSBtb2R1bGVfdmFsdWVb J3N0YXJ0J10gJiB+MHgwRkZGDQorICAgICAgICBpZiBrZXkgbm90IGluIGZ1bmN0aW9uc19hZGRy LmtleXMoKToNCisgICAgICAgICAgICBmdW5jdGlvbnNfYWRkcltrZXldID0ge30NCisgICAgICAg IGlmIGZ1bmNfa2V5IG5vdCBpbiBmdW5jdGlvbnNfYWRkcltrZXldLmtleXMoKToNCisgICAgICAg ICAgICBmdW5jdGlvbnNfYWRkcltrZXldW2Z1bmNfa2V5XSA9IHt9DQorICAgICAgICBmdW5jdGlv bnNfYWRkcltrZXldW2Z1bmNfa2V5XVttb2R1bGVfa2V5XSA9IG1vZHVsZV92YWx1ZQ0KKw0KKyMN CisjIFByb2Nlc3MgdGhlIHRyYWNlIGZpbGUNCisjDQoraWYgdHJhY2VfbmFtZSBpcyBOb25lOg0K KyAgICBzeXMuZXhpdCgpDQorDQordHJhY2UgPSBvcGVuKHRyYWNlX25hbWUsICJyIikNCit0cmFj ZV9zaXplID0gb3MucGF0aC5nZXRzaXplKHRyYWNlX25hbWUpDQordHJhY2VfcHJvY2VzcyA9IDAN CisNCisjIEdldCB0aGUgY29sdW1uIG5hbWVzIGZyb20gdGhlIGZpcnN0IGxpbmUNCitjb2x1bW5z ID0gdHJhY2VfcmVhZCgpLnNwbGl0KCkNCitjb2x1bW5fYWRkciAgICAgPSBjb2x1bW5zLmluZGV4 KCdBZGRyZXNzJykNCitjb2x1bW5fY3ljbGVzICAgPSBjb2x1bW5zLmluZGV4KCdDeWNsZXMnKQ0K K2NvbHVtbl9mdW5jdGlvbiA9IGNvbHVtbnMuaW5kZXgoJ0Z1bmN0aW9uJykNCisNCitsaW5lID0g dHJhY2VfcmVhZCgpDQoraSA9IDANCitwcmV2X2NhbGxlZSA9IE5vbmUNCit3aGlsZSBsaW5lOg0K KyAgICB0cnk6DQorICAgICAgICBmdW5jX25hbWUgPSBsaW5lLnNwbGl0KCdcdCcpW2NvbHVtbl9m dW5jdGlvbl0uc3RyaXAoKQ0KKyAgICAgICAgYWRkcmVzcyAgID0gZ2V0X2FkZHJlc3NfZnJvbV9z dHJpbmcobGluZS5zcGxpdCgnXHQnKVtjb2x1bW5fYWRkcl0pDQorICAgICAgICBjeWNsZXMgICAg PSBpbnQobGluZS5zcGxpdCgnXHQnKVtjb2x1bW5fY3ljbGVzXSkNCisgICAgICAgIGNhbGxlZSA9 IGFkZF9jeWNsZXNfdG9fZnVuY3Rpb24oZnVuY3Rpb25zLCBmdW5jX25hbWUsIGFkZHJlc3MsIGN5 Y2xlcykNCisgICAgICAgIGlmIChwcmV2X2NhbGxlZSAhPSBOb25lKSBhbmQgKHByZXZfY2FsbGVl ICE9IGNhbGxlZSk6DQorICAgICAgICAgICAgZnVuY3Rpb25zW3ByZXZfY2FsbGVlWzBdXVtwcmV2 X2NhbGxlZVsxXV1bJ2NvdW50J10gKz0gMQ0KKyAgICAgICAgcHJldl9jYWxsZWUgPSBjYWxsZWUN CisgICAgZXhjZXB0IFZhbHVlRXJyb3I6DQorICAgICAgICBwYXNzDQorICAgIGxpbmUgPSB0cmFj ZV9yZWFkKCkNCisgICAgaWYgKChpICUgMTAwMDAwMCkgPT0gMCkgYW5kIChpICE9IDApOg0KKyAg ICAgICAgcGVyY2VudCA9ICh0cmFjZV9wcm9jZXNzICogMTAwLjAwKSAvIHRyYWNlX3NpemUNCisg ICAgICAgIHByaW50ICJQcm9jZXNzaW5nIGZpbGUgLi4uICglLjJmICUlKSIgJSAocGVyY2VudCkN CisgICAgaSA9IGkgKyAxDQorDQorIyBGaXh1cCB0aGUgbGFzdCBjYWxsZWUNCitmdW5jdGlvbnNb cHJldl9jYWxsZWVbMF1dW3ByZXZfY2FsbGVlWzFdXVsnY291bnQnXSArPSAxDQorDQorIw0KKyMg UHJvY2VzcyByZXN1bHRzDQorIw0KK2Z1bmN0aW9uc19jeWNsZXMgICAgID0ge30NCithbGxfZnVu Y3Rpb25zX2N5Y2xlcyA9IHt9DQordG90YWxfY3ljbGVzICAgICAgICAgPSAwDQorDQorZm9yIGZ1 bmNfa2V5LCBtb2R1bGUgaW4gZnVuY3Rpb25zLml0ZXJpdGVtcygpOg0KKyAgICBmb3IgbW9kdWxl X2tleSwgbW9kdWxlX3ZhbHVlIGluIG1vZHVsZS5pdGVyaXRlbXMoKToNCisgICAgICAgIGtleSA9 ICIlcy8lcyIgJSAobW9kdWxlX2tleSwgZnVuY19rZXkpDQorICAgICAgICBmdW5jdGlvbnNfY3lj bGVzW2tleV0gPSAobW9kdWxlX3ZhbHVlWydjeWNsZXMnXSwgbW9kdWxlX3ZhbHVlWydjb3VudCdd KQ0KKyAgICAgICAgdG90YWxfY3ljbGVzICs9IG1vZHVsZV92YWx1ZVsnY3ljbGVzJ10NCisNCisg ICAgICAgIGlmIGZ1bmNfa2V5IG5vdCBpbiBhbGxfZnVuY3Rpb25zX2N5Y2xlcy5rZXlzKCk6DQor ICAgICAgICAgICAgYWxsX2Z1bmN0aW9uc19jeWNsZXNbZnVuY19rZXldID0gKG1vZHVsZV92YWx1 ZVsnY3ljbGVzJ10sIG1vZHVsZV92YWx1ZVsnY291bnQnXSkNCisgICAgICAgIGVsc2U6DQorICAg ICAgICAgICAgYWxsX2Z1bmN0aW9uc19jeWNsZXNbZnVuY19rZXldID0gdHVwbGUobWFwKHN1bSwg emlwKGFsbF9mdW5jdGlvbnNfY3ljbGVzW2Z1bmNfa2V5XSwgKG1vZHVsZV92YWx1ZVsnY3ljbGVz J10sIG1vZHVsZV92YWx1ZVsnY291bnQnXSkpKSkNCisNCitzb3J0ZWRfZnVuY3Rpb25zX2N5Y2xl cyAgICAgPSBzb3J0ZWQoZnVuY3Rpb25zX2N5Y2xlcy5pdGVyaXRlbXMoKSwga2V5PW9wZXJhdG9y Lml0ZW1nZXR0ZXIoMSksIHJldmVyc2UgPSBUcnVlKQ0KK3NvcnRlZF9hbGxfZnVuY3Rpb25zX2N5 Y2xlcyA9IHNvcnRlZChhbGxfZnVuY3Rpb25zX2N5Y2xlcy5pdGVtcygpLCBrZXk9b3BlcmF0b3Iu aXRlbWdldHRlcigxKSwgcmV2ZXJzZSA9IFRydWUpDQorDQorcHJpbnQNCitwcmludCAiLS0tLSIN Citmb3IgKGtleSx2YWx1ZSkgaW4gc29ydGVkX2Z1bmN0aW9uc19jeWNsZXNbOjIwXToNCisgICAg aWYgdmFsdWVbMF0gIT0gMDoNCisgICAgICAgIHByaW50ICIlcyAoY3ljbGVzOiAlZCAtICVkJSUs IGNvdW50OiAlZCkiICUgKGtleSwgdmFsdWVbMF0sICh2YWx1ZVswXSAqIDEwMCkgLyB0b3RhbF9j eWNsZXMsIHZhbHVlWzFdKQ0KKyAgICBlbHNlOg0KKyAgICAgICAgYnJlYWs7DQorcHJpbnQgIi0t LS0iDQorZm9yIChrZXksdmFsdWUpIGluIHNvcnRlZF9hbGxfZnVuY3Rpb25zX2N5Y2xlc1s6MjBd Og0KKyAgICBpZiB2YWx1ZVswXSAhPSAwOg0KKyAgICAgICAgcHJpbnQgIiVzIChjeWNsZXM6ICVk IC0gJWQlJSwgY291bnQ6ICVkKSIgJSAoa2V5LCB2YWx1ZVswXSwgKHZhbHVlWzBdICogMTAwKSAv IHRvdGFsX2N5Y2xlcywgdmFsdWVbMV0pDQorICAgIGVsc2U6DQorICAgICAgICBicmVhazsNCi0t IAoyLjE5LjEuMy5nMzAyNDdhYTVkMjAxCgo=