Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1luTz8-0004KD-Uj for pgadmin-hackers@arkaria.postgresql.org; Sat, 19 Jun 2021 05:57:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1luTz6-0003Qe-45 for pgadmin-hackers@arkaria.postgresql.org; Sat, 19 Jun 2021 05:57:36 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1luTz5-0003QW-JU for pgadmin-hackers@lists.postgresql.org; Sat, 19 Jun 2021 05:57:35 +0000 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1luTz2-0005Dz-9F for pgadmin-hackers@postgresql.org; Sat, 19 Jun 2021 05:57:33 +0000 Received: by mail-pg1-x52c.google.com with SMTP id e20so9664623pgg.0 for ; Fri, 18 Jun 2021 22:57:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=6w0E68qUArDApGxWnKK1oR8bpUt3JAUoQFO6DEjEtcg=; b=GDrE41DJZSXaIT/zB7UUNLPhTl0wOzhC9QJ9BuM50CkfyDOPq1Kyi3XlXR5gvHQXPA +EXy4RHeEWtLk0zUPR7v+HYZ1NGscNNcqoOuyjLCparv+1OkThN27RU3Frm3ZIbRAFLC fW38paRnLCmY2B1M/bh1WUmqi8jAynDApvEaheIC0UMN7XeyngSWc2pY6TsBxusTM5/C E90WEW98uQ1ToYuaO6H0GAGmBuI/Ncluj5Q54wzqgKsH3gylNNnSX2qmv36BPNEAAOYe t4qcROhxg95Oai9OFr8R78er3JEORLEPBhIH+1K1wC/55/Kn1U9mtCAiHn0EBAiVCsoF IG6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=6w0E68qUArDApGxWnKK1oR8bpUt3JAUoQFO6DEjEtcg=; b=OAyKdr95jvpSXuMhM49wXKX+hOjl1oB+z+k1oQkPE9mda5eDi5LBEOSU8v6P8HBJ/g 4s5rSk5UXrAtTFxwjW2cJnDYHiCBKjlf+cBLqktxF+yvUINAkBF13aYUkBhTWGQOsroA PW86r2pCReBY/HttAXkNCQ73DgEEN/il6zODhC7p46LdwXicsrUmYXdxGbwFSz/Kb0cx KJ7H6jTuJhJTud9E0S9war+1/MVHa60o+eqy2qWW4ZBXRP/vq0t9Oo4+F2rUEaWvsCL8 xnUgt45uJbj2b5GDguXCwR7DoINJZmB+r4fs2xOgtjgOuBYlRHnC9vvleyDskb8PLUBI htFg== X-Gm-Message-State: AOAM530vqgiIWq15qBA849hlQZQTqXZcrtEQtinrfOlxQicN4CdiPq2/ FlKcylLxNkCBYCmjalzeTG2NkuIImIkZDbj0Je9NP4I3ZYdUXqCN0qP4a+HNwI4gBH1qjD8hbm+ CeDGee6ggod5JKztfGUQjFCYTmh3mtEdifuTcylvogL3RhL1XINrRA0kUbuEI+PHgTbMYNCM2A7 Za3TXyD4l71gtwoV2rH+wlbN33RJUwwBG5VpesFz6zFRnMORNUuOMQmNmixA== X-Google-Smtp-Source: ABdhPJyh5M+HnC2B4GdWysDMRPHEtNn7PrVmDfYHSfBXTkgKQ4R4rvI0NOOctzZk9iIRbXo5jcuNs0Vw4gs39bv7Xdk= X-Received: by 2002:a63:1d09:: with SMTP id d9mr13541900pgd.302.1624082250787; Fri, 18 Jun 2021 22:57:30 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Ashesh Vashi Date: Sat, 19 Jun 2021 11:27:19 +0530 Message-ID: Subject: Re: Refactor: Registry Classes To: Akshay Joshi Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary="000000000000a51b3a05c5181df0" X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a51b3a05c5181df0 Content-Type: multipart/alternative; boundary="000000000000a51b3705c5181dee" --000000000000a51b3705c5181dee Content-Type: text/plain; charset="UTF-8" On Sat, Jun 19, 2021 at 1:39 AM Ashesh Vashi wrote: > Hi Akshay, > > We do have a couple of classes, which does automatic registration of the > base classes, > and which creates single-ton objects for these base classes, when needed. > > I would be working on a patch sooner, which will be using similar > functionality for loading > the multi-factor authentication. > > I realized - it will be a duplicate code at three places for the same > functionalities. > Hence - I worked on refactoring this registry class. > > Please find the patch for the same. > Found issues - some test files were using the old function 'Driver.load_drivers(...)'. They're fixed now. -- Thanks, Ashesh > > -- > > Thanks & Regards, > > Ashesh Vashi > EnterpriseDB INDIA: Enterprise PostgreSQL Company > > > > *http://www.linkedin.com/in/asheshvashi* > > --000000000000a51b3705c5181dee Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Sat, Jun 19, 2021 at 1:39 AM Ashesh Va= shi <ashesh.vashi@enter= prisedb.com> wrote:
Hi Akshay,

<= /div>
We do have a couple of classes, which does automatic registration= of the base classes,
and which creates single-ton objects for th= ese base classes, when needed.

I would be working = on a patch sooner, which will be using similar functionality for loading
the multi-factor authentication.

I realize= d - it will be a duplicate code at three places for the same functionalitie= s.
Hence - I worked on refactoring this registry class.

Please find the patch for the same.=C2=A0
Found issues - some test files were using the old function '= ;Driver.load_drivers(...)'.
They're fixed now.
=
-- Thanks, Ashesh

=
--

Thanks & Regards,

Ashesh Vashi
EnterpriseDB INDIA: Enterprise PostgreSQ= L Company


http://www.linkedin.com/in/asheshvashi

--000000000000a51b3705c5181dee-- --000000000000a51b3a05c5181df0 Content-Type: application/octet-stream; name="refactor_registry_class_v2.patch" Content-Disposition: attachment; filename="refactor_registry_class_v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kq3cm2q10 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2F1dGhlbnRpY2F0ZS9fX2luaXRfXy5weSBiL3dlYi9w Z2FkbWluL2F1dGhlbnRpY2F0ZS9fX2luaXRfXy5weQppbmRleCBkMzI4YjBkMjQuLjEwMWQ1NzY1 NiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYXV0aGVudGljYXRlL19faW5pdF9fLnB5CisrKyBi L3dlYi9wZ2FkbWluL2F1dGhlbnRpY2F0ZS9fX2luaXRfXy5weQpAQCAtMjIzLDcgKzIyMyw3IEBA IGRlZiBnZXRfYXV0aF9zb3VyY2VzKHR5cGUpOgogICAgIGlmIHR5cGUgaW4gYXV0aF9zb3VyY2Vz OgogICAgICAgICByZXR1cm4gYXV0aF9zb3VyY2VzW3R5cGVdCiAKLSAgICBhdXRoX3NvdXJjZSA9 IEF1dGhTb3VyY2VSZWdpc3RyeS5jcmVhdGUodHlwZSkKKyAgICBhdXRoX3NvdXJjZSA9IEF1dGhT b3VyY2VSZWdpc3RyeS5nZXQodHlwZSkKIAogICAgIGlmIGF1dGhfc291cmNlIGlzIG5vdCBOb25l OgogICAgICAgICBhdXRoX3NvdXJjZXNbdHlwZV0gPSBhdXRoX3NvdXJjZQpAQCAtMjM2LDcgKzIz Niw3IEBAIGRlZiBpbml0X2FwcChhcHApOgogICAgIGF1dGhfc291cmNlcyA9IGRpY3QoKQogCiAg ICAgc2V0YXR0cihhcHAsICdfcGdhZG1pbl9hdXRoX3NvdXJjZXMnLCBhdXRoX3NvdXJjZXMpCi0g ICAgQXV0aFNvdXJjZVJlZ2lzdHJ5LmxvYWRfYXV0aF9zb3VyY2VzKCkKKyAgICBBdXRoU291cmNl UmVnaXN0cnkubG9hZF9tb2R1bGVzKGFwcCkKIAogICAgIHJldHVybiBhdXRoX3NvdXJjZXMKIApk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYXV0aGVudGljYXRlL3JlZ2lzdHJ5LnB5IGIvd2ViL3Bn YWRtaW4vYXV0aGVudGljYXRlL3JlZ2lzdHJ5LnB5CmluZGV4IDdkNzk3ZTY1OC4uZmRmOWI0MDBl IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvcmVnaXN0cnkucHkKKysrIGIv d2ViL3BnYWRtaW4vYXV0aGVudGljYXRlL3JlZ2lzdHJ5LnB5CkBAIC0xMCw1NiArMTAsOSBAQAog IiIiRXh0ZXJuYWwgQXV0aGVudGljYXRpb24gUmVnaXN0cnkuIiIiCiAKIAotZnJvbSBmbGFza19i YWJlbGV4IGltcG9ydCBnZXR0ZXh0Ci1mcm9tIGFiYyBpbXBvcnQgQUJDTWV0YQorZnJvbSBwZ2Fk bWluLnV0aWxzLmR5bmFtaWNfcmVnaXN0cnkgaW1wb3J0IENyZWF0ZVJlZ2lzdHJ5TWV0YUNsYXNz CiAKIAotZGVmIF9kZWNvcmF0ZV9jbHNfbmFtZShtb2R1bGVfbmFtZSk6Ci0gICAgbGVuZ3RoID0g bGVuKF9fcGFja2FnZV9fKSArIDEKLQotICAgIGlmIGxlbihtb2R1bGVfbmFtZSkgPiBsZW5ndGgg YW5kIG1vZHVsZV9uYW1lLnN0YXJ0c3dpdGgoX19wYWNrYWdlX18pOgotICAgICAgICByZXR1cm4g bW9kdWxlX25hbWVbbGVuZ3RoOl0KLQotICAgIHJldHVybiBtb2R1bGVfbmFtZQotCi0KLWNsYXNz IEF1dGhTb3VyY2VSZWdpc3RyeShBQkNNZXRhKToKLSAgICByZWdpc3RyeSA9IE5vbmUKLSAgICBh dXRoX3NvdXJjZXMgPSBkaWN0KCkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBiYXNl cywgZCk6Ci0KLSAgICAgICAgIyBSZWdpc3RlciB0aGlzIHR5cGUgb2YgYXV0aF9zb3VyY2VzLCBi YXNlZCBvbiB0aGUgbW9kdWxlIG5hbWUKLSAgICAgICAgIyBBdm9pZCByZWdpc3RlcmluZyB0aGUg QmFzZUF1dGhlbnRpY2F0aW9uIGl0c2VsZgotCi0gICAgICAgIEF1dGhTb3VyY2VSZWdpc3RyeS5y ZWdpc3RyeVtfZGVjb3JhdGVfY2xzX25hbWUoZFsnX19tb2R1bGVfXyddKV0gPSBzZWxmCi0gICAg ICAgIEFCQ01ldGEuX19pbml0X18oc2VsZiwgbmFtZSwgYmFzZXMsIGQpCi0KLSAgICBAY2xhc3Nt ZXRob2QKLSAgICBkZWYgY3JlYXRlKGNscywgbmFtZSwgKiprd2FyZ3MpOgotCi0gICAgICAgIGlm IG5hbWUgaW4gQXV0aFNvdXJjZVJlZ2lzdHJ5LmF1dGhfc291cmNlczoKLSAgICAgICAgICAgIHJl dHVybiBBdXRoU291cmNlUmVnaXN0cnkuYXV0aF9zb3VyY2VzW25hbWVdCi0KLSAgICAgICAgaWYg bmFtZSBpbiBBdXRoU291cmNlUmVnaXN0cnkucmVnaXN0cnk6Ci0gICAgICAgICAgICBBdXRoU291 cmNlUmVnaXN0cnkuYXV0aF9zb3VyY2VzW25hbWVdID0gXAotICAgICAgICAgICAgICAgIChBdXRo U291cmNlUmVnaXN0cnkucmVnaXN0cnlbbmFtZV0pKCoqa3dhcmdzKQotICAgICAgICAgICAgcmV0 dXJuIEF1dGhTb3VyY2VSZWdpc3RyeS5hdXRoX3NvdXJjZXNbbmFtZV0KLQotICAgICAgICByYWlz ZSBOb3RJbXBsZW1lbnRlZEVycm9yKAotICAgICAgICAgICAgZ2V0dGV4dCgKLSAgICAgICAgICAg ICAgICAiQXV0aGVudGljYXRpb24gc291cmNlICd7MH0nIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRl ZC4iCi0gICAgICAgICAgICApLmZvcm1hdChuYW1lKQotICAgICAgICApCi0KLSAgICBAY2xhc3Nt ZXRob2QKLSAgICBkZWYgbG9hZF9hdXRoX3NvdXJjZXMoY2xzKToKLSAgICAgICAgIyBJbml0aWFs aXplIHRoZSByZWdpc3RyeSBvbmx5IGlmIGl0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQK LSAgICAgICAgaWYgQXV0aFNvdXJjZVJlZ2lzdHJ5LnJlZ2lzdHJ5IGlzIE5vbmU6Ci0gICAgICAg ICAgICBBdXRoU291cmNlUmVnaXN0cnkucmVnaXN0cnkgPSBkaWN0KCkKLQotICAgICAgICBmcm9t IGltcG9ydGxpYiBpbXBvcnQgaW1wb3J0X21vZHVsZQotICAgICAgICBmcm9tIHdlcmt6ZXVnLnV0 aWxzIGltcG9ydCBmaW5kX21vZHVsZXMKLQotICAgICAgICBmb3IgbW9kdWxlX25hbWUgaW4gZmlu ZF9tb2R1bGVzKF9fcGFja2FnZV9fLCBUcnVlKToKLSAgICAgICAgICAgIGltcG9ydF9tb2R1bGUo bW9kdWxlX25hbWUpCitBdXRoU291cmNlUmVnaXN0cnkgPSBDcmVhdGVSZWdpc3RyeU1ldGFDbGFz cygKKyAgICAnQXV0aFNvdXJjZVJlZ2lzdHJ5JywgX19wYWNrYWdlX18sIGRlY29yYXRlX2FzX21v ZHVsZT1UcnVlCispCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fa2V5 L3NxbC90ZXN0cy90ZXN0X2ZvcmVpZ25fa2V5X3Byb3BlcnRpZXMucHkgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVt cGxhdGVzL2ZvcmVpZ25fa2V5L3NxbC90ZXN0cy90ZXN0X2ZvcmVpZ25fa2V5X3Byb3BlcnRpZXMu cHkKaW5kZXggN2M5ZDhmNDIzLi40YTZjMjY2NGIgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1w bGF0ZXMvZm9yZWlnbl9rZXkvc3FsL3Rlc3RzL3Rlc3RfZm9yZWlnbl9rZXlfcHJvcGVydGllcy5w eQorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL2ZvcmVpZ25fa2V5L3NxbC90ZXN0cy90ZXN0X2Zv cmVpZ25fa2V5X3Byb3BlcnRpZXMucHkKQEAgLTE0LDcgKzE0LDcgQEAgZnJvbSByZWdyZXNzaW9u LnB5dGhvbl90ZXN0X3V0aWxzLnRlbXBsYXRlX2hlbHBlciBpbXBvcnQgZmlsZV9hc190ZW1wbGF0 ZQogZnJvbSBwZ2FkbWluLnV0aWxzLnJvdXRlIGltcG9ydCBCYXNlVGVzdEdlbmVyYXRvcgogZnJv bSByZWdyZXNzaW9uLnB5dGhvbl90ZXN0X3V0aWxzIGltcG9ydCB0ZXN0X3V0aWxzCiAKLURyaXZl clJlZ2lzdHJ5LmxvYWRfZHJpdmVycygpCitEcml2ZXJSZWdpc3RyeS5sb2FkX21vZHVsZXMoKQog CiAKIGNsYXNzIFRlc3RDb2x1bW5Gb3JlaWduS2V5R2V0Q29uc3RyYWludENvbHMoQmFzZVRlc3RH ZW5lcmF0b3IpOgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL19faW5pdF9f LnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL19faW5pdF9fLnB5CmluZGV4IDVjNmQ2OTQ1 YS4uZDc3NDhjODM5IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvX19pbml0 X18ucHkKKysrIGIvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL19faW5pdF9fLnB5CkBAIC0xMiwz MiArMTIsMTkgQEAgZnJvbSBmbGFzayBpbXBvcnQgY3VycmVudF9hcHAKIGZyb20gLnJlZ2lzdHJ5 IGltcG9ydCBEcml2ZXJSZWdpc3RyeQogCiAKLWRlZiBnZXRfZHJpdmVyKHR5cGUsIGFwcD1Ob25l KToKLSAgICBpZiBhcHAgaXMgbm90IE5vbmU6Ci0gICAgICAgIERyaXZlclJlZ2lzdHJ5LmxvYWRf ZHJpdmVycygpCi0KLSAgICBkcml2ZXJzID0gZ2V0YXR0cihhcHAgb3IgY3VycmVudF9hcHAsICdf cGdhZG1pbl9zZXJ2ZXJfZHJpdmVycycsIE5vbmUpCi0KLSAgICBpZiBkcml2ZXJzIGlzIE5vbmUg b3Igbm90IGlzaW5zdGFuY2UoZHJpdmVycywgZGljdCk6Ci0gICAgICAgIGRyaXZlcnMgPSBkaWN0 KCkKK2RlZiBnZXRfZHJpdmVyKF90eXBlLCBhcHA9Tm9uZSk6CiAKLSAgICBpZiB0eXBlIGluIGRy aXZlcnM6Ci0gICAgICAgIHJldHVybiBkcml2ZXJzW3R5cGVdCi0KLSAgICBkcml2ZXIgPSBEcml2 ZXJSZWdpc3RyeS5jcmVhdGUodHlwZSkKLQotICAgIGlmIGRyaXZlciBpcyBub3QgTm9uZToKLSAg ICAgICAgZHJpdmVyc1t0eXBlXSA9IGRyaXZlcgotICAgICAgICBzZXRhdHRyKGFwcCBvciBjdXJy ZW50X2FwcCwgJ19wZ2FkbWluX3NlcnZlcl9kcml2ZXJzJywgZHJpdmVycykKKyAgICBpZiBhcHAg aXMgbm90IE5vbmU6CisgICAgICAgIERyaXZlclJlZ2lzdHJ5LmxvYWRfbW9kdWxlcyhhcHApCiAK LSAgICByZXR1cm4gZHJpdmVyCisgICAgcmV0dXJuIERyaXZlclJlZ2lzdHJ5LmdldChfdHlwZSkK IAogCiBkZWYgaW5pdF9hcHAoYXBwKToKICAgICBkcml2ZXJzID0gZGljdCgpCiAKICAgICBzZXRh dHRyKGFwcCwgJ19wZ2FkbWluX3NlcnZlcl9kcml2ZXJzJywgZHJpdmVycykKLSAgICBEcml2ZXJS ZWdpc3RyeS5sb2FkX2RyaXZlcnMoKQorICAgIERyaXZlclJlZ2lzdHJ5LmxvYWRfbW9kdWxlcyhh cHApCiAKICAgICByZXR1cm4gZHJpdmVycwogCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi91dGls cy9kcml2ZXIvcmVnaXN0cnkucHkgYi93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvcmVnaXN0cnku cHkKaW5kZXggYWU1MzU0MjliLi5jODJiNjcwN2IgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3V0 aWxzL2RyaXZlci9yZWdpc3RyeS5weQorKysgYi93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvcmVn aXN0cnkucHkKQEAgLTEwLDc5ICsxMCw5IEBACiBmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YQogCiBm cm9tIGZsYXNrX2JhYmVsZXggaW1wb3J0IGdldHRleHQKK2Zyb20gcGdhZG1pbi51dGlscy5keW5h bWljX3JlZ2lzdHJ5ICBpbXBvcnQgQ3JlYXRlUmVnaXN0cnlNZXRhQ2xhc3MKIAogCi1kZWYgX2Rl Y29yYXRlX2Nsc19uYW1lKG1vZHVsZV9uYW1lKToKLSAgICBsZW5ndGggPSBsZW4oX19wYWNrYWdl X18pICsgMQotCi0gICAgaWYgbGVuKG1vZHVsZV9uYW1lKSA+IGxlbmd0aCBhbmQgbW9kdWxlX25h bWUuc3RhcnRzd2l0aChfX3BhY2thZ2VfXyk6Ci0gICAgICAgIHJldHVybiBtb2R1bGVfbmFtZVts ZW5ndGg6XQotCi0gICAgcmV0dXJuIG1vZHVsZV9uYW1lCi0KLQotY2xhc3MgRHJpdmVyUmVnaXN0 cnkoQUJDTWV0YSk6Ci0gICAgIiIiCi0gICAgY2xhc3MgRHJpdmVyUmVnaXN0cnkob2JqZWN0KQot ICAgICAgICBFdmVyeSBEcml2ZXIgd2lsbCBiZSByZWdpc3RlcmVkIGF1dG9tYXRpY2FsbHkgYnkg aXRzIG1vZHVsZSBuYW1lLgotCi0gICAgICAgIFRoaXMgdXNlcyBmYWN0b3J5IHBhdHRlcm4gdG8g Z2VucmVhdGUgZHJpdmVyIG9iamVjdCBiYXNlZCBvbiBpdHMgbmFtZQotICAgICAgICBhdXRvbWF0 aWNhbGx5LgotCi0gICAgQ2xhc3MtbGV2ZWwgTWV0aG9kczoKLSAgICAtLS0tLS0tLS0tLSAtLS0t LS0tCi0gICAgKiBfX2luaXRfXyguLi4pCi0gICAgICAtIEl0IHdpbGwgYmUgdXNlZCB0byByZWdp c3RlciB0eXBlIG9mIGRyaXZlcnMuIFlvdSBkb24ndCBuZWVkIHRvIGNhbGwKLSAgICAgICAgdGhp cyBmdW5jdGlvbiBleHBsaWNpdGx5LiBUaGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBleGVjdXRl ZCwgd2hlbmV2ZXIKLSAgICAgICAgd2UgY3JlYXRlIGNsYXNzIGFuZCBpbmhlcml0IGZyb20gQmFz ZURyaXZlciwgaXQgd2lsbCByZWdpc3RlciBpdCBhcwotICAgICAgICBhdmFpbGFibGUgZHJpdmVy IGluIERyaXZlclJlZ2lzdHJ5LiBCZWNhdXNlIC0gdGhlIF9fbWV0YWNsYXNzX18gZm9yCi0gICAg ICAgIEJhc2VEcml2ZXIgaXMgc2V0IGl0IHRvIERyaXZlclJlZ2lzdHJ5LCBhbmQgaXQgd2lsbCBj cmVhdGUgbmV3IGluc3RhbmNlCi0gICAgICAgIG9mIHRoaXMgRHJpdmVyUmVnaXN0cnkgcGVyIGNs YXNzLgotCi0gICAgKiBjcmVhdGUodHlwZSwgKmFyZ3MsICoqa3dhcmdzKQotICAgICAgLSBDcmVh dGUgdHlwZSBvZiBkcml2ZXIgb2JqZWN0IGZvciB0aGlzIHNlcnZlciwgZnJvbSB0aGUgYXZhaWxh YmxlCi0gICAgICAgIGRyaXZlciBsaXN0IChpZiBhdmFpbGFibGUsIG9yIHJhaXNlIGV4Y2VwdGlv bikuCi0KLSAgICAqIGxvYWRfZHJpdmVycygpOgotICAgICAgLSBVc2UgdGhpcyBmdW5jdGlvbiBm cm9tIGluaXRfYXBwKC4uLikgdG8gbG9hZCBhbGwgYXZhaWxhYmxlIGRyaXZlcnMgaW4KLSAgICAg ICAgdGhlIHJlZ2lzdHJ5LgotICAgICIiIgotICAgIHJlZ2lzdHJ5ID0gTm9uZQotICAgIGRyaXZl cnMgPSBkaWN0KCkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBiYXNlcywgZCk6Ci0K LSAgICAgICAgIyBSZWdpc3RlciB0aGlzIHR5cGUgb2YgZHJpdmVyLCBiYXNlZCBvbiB0aGUgbW9k dWxlIG5hbWUKLSAgICAgICAgIyBBdm9pZCByZWdpc3RlcmluZyB0aGUgQmFzZURyaXZlciBpdHNl bGYKLQotICAgICAgICBpZiBuYW1lICE9ICdCYXNlRHJpdmVyJzoKLSAgICAgICAgICAgIERyaXZl clJlZ2lzdHJ5LnJlZ2lzdHJ5W19kZWNvcmF0ZV9jbHNfbmFtZShkWydfX21vZHVsZV9fJ10pXSA9 IHNlbGYKLQotICAgICAgICBBQkNNZXRhLl9faW5pdF9fKHNlbGYsIG5hbWUsIGJhc2VzLCBkKQot Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGNyZWF0ZShjbHMsIG5hbWUsICoqa3dhcmdzKToK LQotICAgICAgICBpZiBuYW1lIGluIERyaXZlclJlZ2lzdHJ5LmRyaXZlcnM6Ci0gICAgICAgICAg ICByZXR1cm4gRHJpdmVyUmVnaXN0cnkuZHJpdmVyc1tuYW1lXQotCi0gICAgICAgIGlmIG5hbWUg aW4gRHJpdmVyUmVnaXN0cnkucmVnaXN0cnk6Ci0gICAgICAgICAgICBEcml2ZXJSZWdpc3RyeS5k cml2ZXJzW25hbWVdID0gXAotICAgICAgICAgICAgICAgIChEcml2ZXJSZWdpc3RyeS5yZWdpc3Ry eVtuYW1lXSkoKiprd2FyZ3MpCi0gICAgICAgICAgICByZXR1cm4gRHJpdmVyUmVnaXN0cnkuZHJp dmVyc1tuYW1lXQotCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCi0gICAgICAg ICAgICBnZXR0ZXh0KCJEcml2ZXIgJ3swfScgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkLiIpLmZv cm1hdChuYW1lKQotICAgICAgICApCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbG9hZF9k cml2ZXJzKGNscyk6Ci0gICAgICAgICMgSW5pdGlhbGl6ZSB0aGUgcmVnaXN0cnkgb25seSBpZiBp dCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkCi0gICAgICAgIGlmIERyaXZlclJlZ2lzdHJ5 LnJlZ2lzdHJ5IGlzIE5vbmU6Ci0gICAgICAgICAgICBEcml2ZXJSZWdpc3RyeS5yZWdpc3RyeSA9 IGRpY3QoKQotCi0gICAgICAgIGZyb20gaW1wb3J0bGliIGltcG9ydCBpbXBvcnRfbW9kdWxlCi0g ICAgICAgIGZyb20gd2Vya3pldWcudXRpbHMgaW1wb3J0IGZpbmRfbW9kdWxlcwotCi0gICAgICAg IGZvciBtb2R1bGVfbmFtZSBpbiBmaW5kX21vZHVsZXMoX19wYWNrYWdlX18sIFRydWUpOgotICAg ICAgICAgICAgaW1wb3J0X21vZHVsZShtb2R1bGVfbmFtZSkKK0RyaXZlclJlZ2lzdHJ5ID0gQ3Jl YXRlUmVnaXN0cnlNZXRhQ2xhc3MoCisgICAgJ0RyaXZlclJlZ2lzdHJ5JywgX19wYWNrYWdlX18s IGRlY29yYXRlX2FzX21vZHVsZT1UcnVlCispCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi91dGls cy9keW5hbWljX3JlZ2lzdHJ5L19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvZHluYW1p Y19yZWdpc3RyeS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAuLjliY2ExNDUxMAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3V0aWxzL2R5bmFt aWNfcmVnaXN0cnkvX19pbml0X18ucHkKQEAgLTAsMCArMSwxMDUgQEAKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChD KSAyMDEzIC0gMjAyMSwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3 YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKworIiIiVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcg ZHluYW1pYyByZWdpc3RyeSBtZXRhIGNsYXNzLiIiIgorCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0 YQorCisKKyMgQ29uc3RydWN0b3IKK2RlZiBfY29uc3RydWN0b3Ioc2VsZiwgbmFtZSwgYmFzZXMs IGt3YXJncyk6CisKKyAgICAjIFJlZ2lzdGVyIHRoaXMgdHlwZSBvZiBhdXRoX3NvdXJjZXMsIGJh c2VkIG9uIHRoZSBtb2R1bGUgbmFtZQorICAgICMgQXZvaWQgcmVnaXN0ZXJpbmcgdGhlIEJhc2VB dXRoZW50aWNhdGlvbiBpdHNlbGYKKyAgICBjbHMgPSBzZWxmLl9fY2xhc3NfXworICAgIGVudHJ5 ID0gc2VsZi5fZGVjb3JhdGVfY2xzX25hbWUobmFtZSwga3dhcmdzKQorCisgICAgaWYgY2xzLl9y ZWdpc3RyeSBpcyBOb25lOgorICAgICAgICBjbHMuX3JlZ2lzdHJ5ID0gZGljdCgpCisgICAgZWxz ZToKKyAgICAgICAgaWYgZW50cnkgaW4gY2xzLl9yZWdpc3RyeToKKyAgICAgICAgICAgIHJhaXNl IFJ1bnRpbWVFcnJvcigoCisgICAgICAgICAgICAgICAgJ3t9IGNsYXNzIGlzIGFscmVhZHkgYmVl biByZWdpc3RlcmVkIHdpdGgge30gJworICAgICAgICAgICAgICAgICcocGFja2FnZToge30pJwor ICAgICAgICAgICAgKS5mb3JtYXQoZW50cnksIGNscy5fbmFtZV8sIGNscy5fcGFja2FnZV8pKQor CisgICAgaWYgY2xzLl9pbml0aWFsaXplZCBpcyBUcnVlOgorICAgICAgICBjbHMuX3JlZ2lzdHJ5 W2VudHJ5XSA9IHNlbGYKKyAgICBjbHMuX2luaXRpYWxpemVkID0gVHJ1ZQorCisgICAgQUJDTWV0 YS5fX2luaXRfXyhzZWxmLCBuYW1lLCBiYXNlcywga3dhcmdzKQorCisKK0BjbGFzc21ldGhvZAor ZGVmIF9nZXQoY2xzLCBuYW1lLCAqKmt3YXJncyk6CisKKyAgICBpZiBuYW1lIGluIGNscy5fb2Jq ZWN0czoKKyAgICAgICAgcmV0dXJuIGNscy5fb2JqZWN0c1tuYW1lXQorCisgICAgaWYgY2xzLl9y ZWdpc3RyeSBpcyBub3QgTm9uZSBhbmQgbmFtZSBpbiBjbHMuX3JlZ2lzdHJ5OgorICAgICAgICBj bHMuX29iamVjdHNbbmFtZV0gPSAoY2xzLl9yZWdpc3RyeVtuYW1lXSkoKiprd2FyZ3MpCisKKyAg ICAgICAgcmV0dXJuIGNscy5fb2JqZWN0c1tuYW1lXQorCisgICAgcmFpc2UgTm90SW1wbGVtZW50 ZWRFcnJvcigKKyAgICAgICAgInt9ICd7fScgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkLiIuZm9y bWF0KGNscy5fX25hbWVfXywgbmFtZSkKKyAgICApCisKKworQGNsYXNzbWV0aG9kCitkZWYgX2xv YWRfbW9kdWxlcyhjbHMsIGFwcD1Ob25lKToKKyAgICAjIEluaXRpYWxpemUgdGhlIHJlZ2lzdHJ5 IG9ubHkgaWYgaXQgaGFzIG5vdCB5ZXQgYmVlbiBpbml0aWFsaXplZAorICAgIGlmIGNscy5fcmVn aXN0cnkgaXMgTm9uZToKKyAgICAgICAgY2xzLl9yZWdpc3RyeSA9IGRpY3QoKQorCisgICAgZnJv bSBpbXBvcnRsaWIgaW1wb3J0IGltcG9ydF9tb2R1bGUKKyAgICBmcm9tIHdlcmt6ZXVnLnV0aWxz IGltcG9ydCBmaW5kX21vZHVsZXMKKworICAgIGZvciBtb2R1bGVfbmFtZSBpbiBmaW5kX21vZHVs ZXMoY2xzLl9wYWNrYWdlXywgVHJ1ZSk6CisgICAgICAgIG1vZHVsZSA9IGltcG9ydF9tb2R1bGUo bW9kdWxlX25hbWUpCisKKyAgICAgICAgaWYgJ2luaXRfYXBwJyBpbiBtb2R1bGUuX19kaWN0X18u a2V5cygpOgorICAgICAgICAgICAgbW9kdWxlLl9fZGljdF9fWydpbml0X2FwcCddKGFwcCkKKwor CitkZWYgX2dldF9tb2R1bGVfbmFtZShzZWxmLCBuYW1lLCBrd2FyZ3MpOgorICAgIG1vZHVsZV9u YW1lID0ga3dhcmdzWydfX21vZHVsZV9fJ10KKyAgICBsZW5ndGggPSBsZW4oc2VsZi5fcGFja2Fn ZV8pICsgMQorCisgICAgaWYgbGVuKG1vZHVsZV9uYW1lKSA+IGxlbmd0aCBhbmQgbW9kdWxlX25h bWUuc3RhcnRzd2l0aChzZWxmLl9wYWNrYWdlXyk6CisgICAgICAgIHJldHVybiBtb2R1bGVfbmFt ZVtsZW5ndGg6XQorCisgICAgcmV0dXJuIG1vZHVsZV9uYW1lCisKK2RlZiBfZ2V0X2NsYXNzX25h bWUoc2VsZiwgbmFtZSwga3dhcmdzKToKKyAgICByZXR1cm4gbmFtZQorCisKK2RlZiBDcmVhdGVS ZWdpc3RyeU1ldGFDbGFzcyhuYW1lLCBwYWNrYWdlLCBkZWNvcmF0ZV9hc19tb2R1bGU9VHJ1ZSk6 CisKKyAgICBjbGFzc19wYXJhbXMgPSB7CisgICAgICAgICMgY29uc3RydWN0b3IKKyAgICAgICAg Il9faW5pdF9fIjogX2NvbnN0cnVjdG9yLAorCisgICAgICAgICMgQ2xhc3MgbWVtYmVycworICAg ICAgICAiX3JlZ2lzdHJ5IjogTm9uZSwKKyAgICAgICAgIl9vYmplY3RzIjogZGljdCgpLAorICAg ICAgICAiX3BhY2thZ2VfIjogcGFja2FnZSwKKworICAgICAgICAjIE1lbWJlciBmdW5jdGlvbnMK KyAgICAgICAgImdldCI6IF9nZXQsCisgICAgICAgICJsb2FkX21vZHVsZXMiOiBfbG9hZF9tb2R1 bGVzLAorICAgICAgICAnX25hbWVfJzogbmFtZSwKKyAgICAgICAgJ19kZWNvcmF0ZV9jbHNfbmFt ZSc6IF9nZXRfbW9kdWxlX25hbWUKKyAgICAgICAgaWYgZGVjb3JhdGVfYXNfbW9kdWxlIGlzIFRy dWUgZWxzZSBfZ2V0X2NsYXNzX25hbWUsCisgICAgICAgICdfaW5pdGlhbGl6ZWQnOiBGYWxzZSwK KyAgICB9CisKKyAgICAjIENyZWF0aW5nIGNsYXNzIGR5bmFtaWNhbGx5CisgICAgcmV0dXJuIHR5 cGUocGFja2FnZSArICIuIiArIG5hbWUsIChBQkNNZXRhLCApLCBjbGFzc19wYXJhbXMpCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi91dGlscy9keW5hbWljX3JlZ2lzdHJ5L3Rlc3RzL19faW5pdF9f LnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvZHluYW1pY19yZWdpc3RyeS90ZXN0cy9fX2luaXRfXy5w eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjg5MTkwYjMxNgotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3V0aWxzL2R5bmFtaWNfcmVnaXN0cnkvdGVzdHMvX19p bml0X18ucHkKQEAgLTAsMCArMSw4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQg LSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMjEsIFRoZSBw Z0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRl ciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHluYW1pY19yZWdpc3RyeS90ZXN0cy9yZWdpc3RyeS9fX2lu aXRfXy5weSBiL3dlYi9wZ2FkbWluL3V0aWxzL2R5bmFtaWNfcmVnaXN0cnkvdGVzdHMvcmVnaXN0 cnkvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5jNTc2 NTQxOGUKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi91dGlscy9keW5hbWljX3JlZ2lz dHJ5L3Rlc3RzL3JlZ2lzdHJ5L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTAxIEBACisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdo dCAoQykgMjAxMyAtIDIwMjEsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBz b2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworaW1wb3J0IHNpeAorZnJvbSBwZ2FkbWluLnV0aWxzLmR5bmFtaWNfcmVn aXN0cnkgaW1wb3J0IENyZWF0ZVJlZ2lzdHJ5TWV0YUNsYXNzCitmcm9tIC5yZWdpc3RyeSBpbXBv cnQgVGVzdE1vZHVsZVJlZ2lzdHJ5LCBUZXN0TmFtZWRSZWdpc3RyeSwgVGVzdE5hbWVCYXNlCitm cm9tIC50ZXN0MSBpbXBvcnQgVGVzdE1vZHVsZTEKKworCitkZWYgdGVzdF9sb2FkX21vZHVsZXNf YmFzZWRfcmVnaXN0cnkoKToKKyAgICBUZXN0TW9kdWxlUmVnaXN0cnkubG9hZF9tb2R1bGVzKCkK KworICAgIGlmIGxlbihUZXN0TW9kdWxlUmVnaXN0cnkuX3JlZ2lzdHJ5KSAhPSAyOgorICAgICAg ICByZXR1cm4gIkxlbmd0aCBvZiB0aGUgcmVnaXN0cnkgc2hvdWxkIGhhdmUgYmVlbiAyIgorCisg ICAgaWYgJ3Rlc3QxJyBub3QgaW4gVGVzdE1vZHVsZVJlZ2lzdHJ5Ll9yZWdpc3RyeToKKyAgICAg ICAgcmV0dXJuICIndGVzdDEnIGlzIG5vdCBmb3VuZCBpbiB0aGUgcmVnaXN0cnkiCisKKyAgICBp ZiAndGVzdDInIG5vdCBpbiBUZXN0TW9kdWxlUmVnaXN0cnkuX3JlZ2lzdHJ5OgorICAgICAgICBy ZXR1cm4gIid0ZXN0MicgaXMgbm90IGZvdW5kIGluIHRoZSByZWdpc3RyeSIKKworICAgIG9ial90 ZXN0MV8xID0gVGVzdE1vZHVsZVJlZ2lzdHJ5LmdldCgndGVzdDEnKQorICAgIG9ial90ZXN0MV8y ID0gVGVzdE1vZHVsZVJlZ2lzdHJ5LmdldCgndGVzdDEnKQorICAgIG9ial90ZXN0Ml8xID0gVGVz dE1vZHVsZVJlZ2lzdHJ5LmdldCgndGVzdDInKQorCisgICAgaWYgaWQob2JqX3Rlc3QxXzEpICE9 IGlkKG9ial90ZXN0MV8yKToKKyAgICAgICAgcmV0dXJuICJSZWdpc3RyeSBoYXMgY3JlYXRlZCB0 d28gc2VwYXJhdGUgaW5zdGFuY2VzIgorCisgICAgaWYgaXNpbnN0YW5jZShvYmpfdGVzdDFfMSwg VGVzdE1vZHVsZTEpIGlzIEZhbHNlOgorICAgICAgICByZXR1cm4gIlJlZ2lzdHJ5IGNyZWF0ZWQg d3Jvbmcgb2JqZWN0IgorCisgICAgaWYgaWQob2JqX3Rlc3QxXzEpID09IGlkKG9ial90ZXN0Ml8x KToKKyAgICAgICAgcmV0dXJuICJSZWdpc3RyeSBzaG91bGQgaGF2ZSBjcmVhdGVkIGEgc2VwYXJh dGUgaW5zdGFuY2VzIGZvciAiIFwKKyAgICAgICAgICAgICAgICAiZGlmZmVyZW50IGNsYXNzZXMi CisKKworZGVmIHRlc3RfbG9hZF9jbGFzc25hbWVfcmVnaXN0cnkoKToKKyAgICBUZXN0TmFtZWRS ZWdpc3RyeS5sb2FkX21vZHVsZXMoKQorCisgICAgaWYgJ0NsYXNzVGVzdE5hbWUxJyBub3QgaW4g VGVzdE5hbWVkUmVnaXN0cnkuX3JlZ2lzdHJ5OgorICAgICAgICByZXR1cm4gIidDbGFzc1Rlc3RO YW1lMScgaXMgbm90IGZvdW5kIGluIHRoZSByZWdpc3RyeSIKKworICAgIGlmICdDbGFzc1Rlc3RO YW1lMicgbm90IGluIFRlc3ROYW1lZFJlZ2lzdHJ5Ll9yZWdpc3RyeToKKyAgICAgICAgcmV0dXJu ICInQ2xhc3NUZXN0TmFtZTInIGlzIG5vdCBmb3VuZCBpbiB0aGUgcmVnaXN0cnkiCisKKyAgICBv YmpfdGVzdDFfMSA9IFRlc3ROYW1lZFJlZ2lzdHJ5LmdldCgnQ2xhc3NUZXN0TmFtZTEnKQorICAg IG9ial90ZXN0MV8yID0gVGVzdE5hbWVkUmVnaXN0cnkuZ2V0KCdDbGFzc1Rlc3ROYW1lMScpCisg ICAgb2JqX3Rlc3QyXzEgPSBUZXN0TmFtZWRSZWdpc3RyeS5nZXQoJ0NsYXNzVGVzdE5hbWUyJykK KworICAgIGlmIGlkKG9ial90ZXN0MV8xKSAhPSBpZChvYmpfdGVzdDFfMik6CisgICAgICAgIHJl dHVybiAiUmVnaXN0cnkgaGFzIGNyZWF0ZWQgdHdvIHNlcGFyYXRlIGluc3RhbmNlcyIKKworICAg IGlmIGlkKG9ial90ZXN0MV8xKSA9PSBpZChvYmpfdGVzdDJfMSk6CisgICAgICAgIHJldHVybiAi UmVnaXN0cnkgc2hvdWxkIGhhdmUgY3JlYXRlZCBhIHNlcGFyYXRlIGluc3RhbmNlcyBmb3IgZGlm ZmVyZW50IGNsYXNzZXMiCisKKyAgICB0cnk6CisgICAgICAgIGNsYXNzIENsYXNzVGVzdE5hbWUx KFRlc3ROYW1lQmFzZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuICJFeHBl Y3RlZCBhbiBydW50aW1lIGVycm9yIHdoZW4gdXNpbmcgdGhlIHNhbWUgY2xhc3NuYW1lIgorICAg IGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgIHBhc3MKKworCitkZWYgdGVzdF9lbXB0eV9y ZWdpc3RyeSgpOgorCisgICAgRW1wdHlNb2R1bGVSZWdpc3RyeSA9IENyZWF0ZVJlZ2lzdHJ5TWV0 YUNsYXNzKAorICAgICAgICAnRW1wdHlNb2R1bGVSZWdpc3RyeScsIF9fcGFja2FnZV9fLCBkZWNv cmF0ZV9hc19tb2R1bGU9VHJ1ZQorICAgICkKKworICAgIGlmIEVtcHR5TW9kdWxlUmVnaXN0cnku X3JlZ2lzdHJ5IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gIlJlZ2lzdHJ5IHdhcyBzdXBw b3NlZCB0byBiZSBOb25lIgorCisgICAgaWYgRW1wdHlNb2R1bGVSZWdpc3RyeS5faW5pdGlhbGl6 ZWQgaXMgbm90IEZhbHNlOgorICAgICAgICByZXR1cm4gIlJlZ2lzdHJ5IGluaXRpYWxpemVkIGZs YWcgc2hvdWxkIGJlIGZhbHNlIgorCisKK2RlZiB0ZXN0X2NyZWF0ZV9iYXNlX2NsYXNzKCk6CisK KyAgICBSZWdpc3RyeVdpdGhCYXNlQ2xhc3MgPSBDcmVhdGVSZWdpc3RyeU1ldGFDbGFzcygKKyAg ICAgICAgJ1JlZ2lzdHJ5V2l0aEJhc2VDbGFzcycsIF9fcGFja2FnZV9fLCBkZWNvcmF0ZV9hc19t b2R1bGU9RmFsc2UKKyAgICApCisKKyAgICBAc2l4LmFkZF9tZXRhY2xhc3MoUmVnaXN0cnlXaXRo QmFzZUNsYXNzKQorICAgIGNsYXNzIFRlc3RCYXNlKG9iamVjdCk6CisgICAgICAgIHBhc3MKKwor ICAgIGZhaWxlZCA9IEZhbHNlCisKKyAgICByZWdpc3RyeSA9IFJlZ2lzdHJ5V2l0aEJhc2VDbGFz cy5fcmVnaXN0cnkKKworICAgIGlmIHJlZ2lzdHJ5IGlzIE5vbmUgb3IgbGVuKHJlZ2lzdHJ5KSAh PSAwOgorICAgICAgICByZXR1cm4gIlJlZ2lzdHJ5IHdhcyBub3Qgc3VwcG9zZWQgdG8gYmUgTm9u ZSwgYW5kIGVtcHR5IgorCisgICAgaWYgUmVnaXN0cnlXaXRoQmFzZUNsYXNzLl9pbml0aWFsaXpl ZCBpcyBGYWxzZToKKyAgICAgICAgcmV0dXJuICJSZWdpc3RyeSBpbml0aWFsaXplZCBmbGFnIHNo b3VsZCBub3QgYmUgdHJ1ZSIKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3V0aWxzL2R5bmFtaWNf cmVnaXN0cnkvdGVzdHMvcmVnaXN0cnkvcmVnaXN0cnkucHkgYi93ZWIvcGdhZG1pbi91dGlscy9k eW5hbWljX3JlZ2lzdHJ5L3Rlc3RzL3JlZ2lzdHJ5L3JlZ2lzdHJ5LnB5Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uMmZiNTMwZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvd2Vi L3BnYWRtaW4vdXRpbHMvZHluYW1pY19yZWdpc3RyeS90ZXN0cy9yZWdpc3RyeS9yZWdpc3RyeS5w eQpAQCAtMCwwICsxLDM4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0 Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMjEsIFRoZSBwZ0FkbWlu IERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUg UG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaW1wb3J0IHNpeAorZnJv bSBwZ2FkbWluLnV0aWxzLmR5bmFtaWNfcmVnaXN0cnkgaW1wb3J0IENyZWF0ZVJlZ2lzdHJ5TWV0 YUNsYXNzCisKKworVGVzdE1vZHVsZVJlZ2lzdHJ5ID0gQ3JlYXRlUmVnaXN0cnlNZXRhQ2xhc3Mo CisgICAgJ1Rlc3RNb2R1bGVSZWdpc3RyeScsIF9fcGFja2FnZV9fLCBkZWNvcmF0ZV9hc19tb2R1 bGU9VHJ1ZQorKQorCisKK1Rlc3ROYW1lZFJlZ2lzdHJ5ID0gQ3JlYXRlUmVnaXN0cnlNZXRhQ2xh c3MoCisgICAgJ1Rlc3RSZWdpc3RyeScsIF9fcGFja2FnZV9fLCBkZWNvcmF0ZV9hc19tb2R1bGU9 RmFsc2UKKykKKworCitAc2l4LmFkZF9tZXRhY2xhc3MoVGVzdE1vZHVsZVJlZ2lzdHJ5KQorY2xh c3MgVGVzdE1vZHVsZUJhc2Uob2JqZWN0KToKKyAgICBwYXNzCisKKworQHNpeC5hZGRfbWV0YWNs YXNzKFRlc3ROYW1lZFJlZ2lzdHJ5KQorY2xhc3MgVGVzdE5hbWVCYXNlKG9iamVjdCk6CisgICAg cGFzcworCisKK2NsYXNzIENsYXNzVGVzdE5hbWUxKFRlc3ROYW1lQmFzZSk6CisgICAgcGFzcwor CisKK2NsYXNzIENsYXNzVGVzdE5hbWUyKFRlc3ROYW1lQmFzZSk6CisgICAgcGFzcwpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHluYW1pY19yZWdpc3RyeS90ZXN0cy9yZWdpc3RyeS90 ZXN0MS5weSBiL3dlYi9wZ2FkbWluL3V0aWxzL2R5bmFtaWNfcmVnaXN0cnkvdGVzdHMvcmVnaXN0 cnkvdGVzdDEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi42NTYzMThm ZGYKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi91dGlscy9keW5hbWljX3JlZ2lzdHJ5 L3Rlc3RzL3JlZ2lzdHJ5L3Rlc3QxLnB5CkBAIC0wLDAgKzEsMTQgQEAKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAy MDEzIC0gMjAyMSwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJl IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCitmcm9tIC5yZWdpc3RyeSBpbXBvcnQgVGVzdE1vZHVsZUJhc2UgIywgVGVzdE1vZHVs ZVJlZ2lzdHJ5CisKKworIyBUaGlzIGNsYXNzIHdpbGwgYmUgcmVnaXN0ZXJlZCB3aXRoIFRlc3RN b2R1bGVSZWdpc3RyeSAocmVnaXN0cnkpCitjbGFzcyBUZXN0TW9kdWxlMShUZXN0TW9kdWxlQmFz ZSk6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHluYW1pY19yZWdp c3RyeS90ZXN0cy9yZWdpc3RyeS90ZXN0Mi5weSBiL3dlYi9wZ2FkbWluL3V0aWxzL2R5bmFtaWNf cmVnaXN0cnkvdGVzdHMvcmVnaXN0cnkvdGVzdDIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwLi45NmM5YWU1MzgKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi91 dGlscy9keW5hbWljX3JlZ2lzdHJ5L3Rlc3RzL3JlZ2lzdHJ5L3Rlc3QyLnB5CkBAIC0wLDAgKzEs MTQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMK KyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMSwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQg VGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExp Y2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmcm9tIC5yZWdpc3RyeSBpbXBvcnQgVGVzdE1v ZHVsZUJhc2UgIywgVGVzdE1vZHVsZVJlZ2lzdHJ5CisKKworIyBUaGlzIGNsYXNzIHdpbGwgYmUg cmVnaXN0ZXJlZCB3aXRoIFRlc3RNb2R1bGVSZWdpc3RyeSAocmVnaXN0cnkpCitjbGFzcyBUZXN0 TW9kdWxlMihUZXN0TW9kdWxlQmFzZSk6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vdXRpbHMvZHluYW1pY19yZWdpc3RyeS90ZXN0cy90ZXN0X2R5bmFtaWNfcmVnaXN0cnkucHkg Yi93ZWIvcGdhZG1pbi91dGlscy9keW5hbWljX3JlZ2lzdHJ5L3Rlc3RzL3Rlc3RfZHluYW1pY19y ZWdpc3RyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjQ3MmFhMmU2 OQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3V0aWxzL2R5bmFtaWNfcmVnaXN0cnkv dGVzdHMvdGVzdF9keW5hbWljX3JlZ2lzdHJ5LnB5CkBAIC0wLDAgKzEsMzkgQEAKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0 IChDKSAyMDEzIC0gMjAyMSwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNv ZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCitmcm9tIHBnYWRtaW4udXRpbHMucm91dGUgaW1wb3J0IEJhc2VUZXN0R2Vu ZXJhdG9yCitmcm9tIC5yZWdpc3RyeSBpbXBvcnQgdGVzdF9sb2FkX21vZHVsZXNfYmFzZWRfcmVn aXN0cnksIHRlc3RfZW1wdHlfcmVnaXN0cnksIFwKKyAgICAgICAgdGVzdF9jcmVhdGVfYmFzZV9j bGFzcywgdGVzdF9sb2FkX2NsYXNzbmFtZV9yZWdpc3RyeQorCisKK2NsYXNzIFRlc3REeW5hbWlj UmVnaXN0cnkoQmFzZVRlc3RHZW5lcmF0b3IpOgorCisgICAgc2NlbmFyaW9zID0gWworICAgICAg ICAoCisgICAgICAgICAgICAiQ2hlY2sgZW1wdHkgcmVnaXN0cnkiLAorICAgICAgICAgICAgZGlj dCh0ZXN0PXRlc3RfZW1wdHlfcmVnaXN0cnkpLAorICAgICAgICApLAorICAgICAgICAoCisgICAg ICAgICAgICAnTG9hZCB0aGUgcmVnaXN0cnkgYmFzZWQgb24gdGhlIG1vZHVsZXMnLAorICAgICAg ICAgICAgZGljdCh0ZXN0PXRlc3RfbG9hZF9tb2R1bGVzX2Jhc2VkX3JlZ2lzdHJ5KSwKKyAgICAg ICAgKSwKKyAgICAgICAgKAorICAgICAgICAgICAgJ0xvYWQgdGhlIHJlZ2lzdHJ5IGJhc2VkIG9u IHRoZSBuYW1lIG9mIHRoZSBjbGFzc2VzJywKKyAgICAgICAgICAgIGRpY3QodGVzdD10ZXN0X2xv YWRfY2xhc3NuYW1lX3JlZ2lzdHJ5KSwKKyAgICAgICAgKSwKKyAgICAgICAgKAorICAgICAgICAg ICAgIldoZW4gY3JlYXRlZCBhIGJhc2UgY2xhc3MgcmVnaXN0cnkgaXMgaW5pdGlhbGl6ZWQiLAor ICAgICAgICAgICAgZGljdCh0ZXN0PXRlc3RfY3JlYXRlX2Jhc2VfY2xhc3MpLAorICAgICAgICAp LAorICAgIF0KKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICBlcnJvciA9IHNlbGYu dGVzdCgpCisKKyAgICAgICAgaWYgZXJyb3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxm LmZhaWwoZXJyb3IpCmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9weXRob25fdGVzdF91dGls cy9zcWxfdGVtcGxhdGVfdGVzdF9iYXNlLnB5IGIvd2ViL3JlZ3Jlc3Npb24vcHl0aG9uX3Rlc3Rf dXRpbHMvc3FsX3RlbXBsYXRlX3Rlc3RfYmFzZS5weQppbmRleCBlM2EzODE2NzUuLjJiOWZlNzZi MCAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vcHl0aG9uX3Rlc3RfdXRpbHMvc3FsX3RlbXBs YXRlX3Rlc3RfYmFzZS5weQorKysgYi93ZWIvcmVncmVzc2lvbi9weXRob25fdGVzdF91dGlscy9z cWxfdGVtcGxhdGVfdGVzdF9iYXNlLnB5CkBAIC0xNSw3ICsxNSw3IEBAIGZyb20gcGdhZG1pbi51 dGlscy5kcml2ZXIgaW1wb3J0IERyaXZlclJlZ2lzdHJ5CiBmcm9tIHBnYWRtaW4udXRpbHMudmVy c2lvbmVkX3RlbXBsYXRlX2xvYWRlciBcCiAgICAgaW1wb3J0IGdldF92ZXJzaW9uX21hcHBpbmdf ZGlyZWN0b3JpZXMKIAotRHJpdmVyUmVnaXN0cnkubG9hZF9kcml2ZXJzKCkKK0RyaXZlclJlZ2lz dHJ5LmxvYWRfbW9kdWxlcygpCiAKIAogY2xhc3MgU1FMVGVtcGxhdGVUZXN0QmFzZShCYXNlVGVz dEdlbmVyYXRvcik6Cg== --000000000000a51b3a05c5181df0--