Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f1FTF-0002Bt-GI for pgadmin-hackers@arkaria.postgresql.org; Wed, 28 Mar 2018 18:06:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f1FTD-00050R-Im for pgadmin-hackers@arkaria.postgresql.org; Wed, 28 Mar 2018 18:06:47 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f1FTD-00050H-7h for pgadmin-hackers@lists.postgresql.org; Wed, 28 Mar 2018 18:06:47 +0000 Received: from mail-it0-x230.google.com ([2607:f8b0:4001:c0b::230]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1f1FT2-0003Kb-G4 for pgadmin-hackers@postgresql.org; Wed, 28 Mar 2018 18:06:46 +0000 Received: by mail-it0-x230.google.com with SMTP id z7-v6so20317145iti.1 for ; Wed, 28 Mar 2018 11:06:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pivotal-io.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=2aq/61yxZOSebbHyU37F7cu5+7tg0996otUjdYmMmGo=; b=I+3EcNKUJv7Ep3br0Ha1xKxav2GPtlxNMGwB3pBC5LIkHAwwIZBZAcffOr7+kfn0Lc cFx40/q9cd1A8ljyStrUINmxzsG0dw2pS448K8JKQR3SoXsMX23tjvN/f5NFvyUgDbQ+ pWcUIf+LGEpN7SQBHNfWOqEXXFmUGSDCCmapwbzAR/MCT2WeJ2zOUPYV2KBGPjK1lVTJ QrKKGxYAoBHHUpMouOst1KEMf7VxxJxd5fI6W4CV5oXQG5QKcfMpcxWyknYqEnYfLDbt pQU/fvg4tsya/uHdkaxZFC/jGLwYbm/xvZRCbkP4RcZPFAyDgp+h/mxMEdh5Rccp8jd9 leTA== 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=2aq/61yxZOSebbHyU37F7cu5+7tg0996otUjdYmMmGo=; b=jdmeyRSpWaxYLa5dGWoKU7BxTeHfor9j3tXNbgp/bjKpa2Iwxvr0Dn4geA60MXdTio LN+hHeatRB3VyEjEjuqD9S4M5rytgxynA7gybzQQOgG9SzaT9b/Vh+0cc3VQHdsE5DaX IZrCqBnTUh2mUMDBv+IrTlS46GeiU2dzkRYkJHf7mg/fU92ykR81OT2ul8JLAQDS6OL4 wzLxSxqyZUBWCAz0qhR5nS1D/ruRAui9JE+fg79p9Znurryf3pyOBJcxcVYDBOwNXYvH 3FUTml8exAcKciUQJZXlPSg47lsA5bR46oOmA61wN1b7h+Yimzjs49KKkNrUEPkBpwEV Fk9w== X-Gm-Message-State: AElRT7EiQEfyCaBtQxoERCzVmrHWcXRJRAsUugyGH6x6/6PZDL2dt0g2 ujdXr9/5hDNi7PCCm+WXFxHdqDWOTT5IiACRX6RWjA== X-Google-Smtp-Source: AIpwx4/BIN+TRcOosRAcny1nQuvFmExj81KfsQ83Psf2p1IET4D2u7a8Em53PnDjvI1LUHVOAwVNpWw0b2NXXi61+zo= X-Received: by 2002:a24:c281:: with SMTP id i123-v6mr4454810itg.146.1522260393798; Wed, 28 Mar 2018 11:06:33 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Joao De Almeida Pereira Date: Wed, 28 Mar 2018 18:06:23 +0000 Message-ID: Subject: Re: Bug #3083 fix To: Akshay Joshi Cc: Neethu Mariya Joy , pgadmin-hackers Content-Type: multipart/mixed; boundary="00000000000007990b05687cdecd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --00000000000007990b05687cdecd Content-Type: multipart/alternative; boundary="00000000000007990705687cdecb" --00000000000007990705687cdecb Content-Type: text/plain; charset="UTF-8" Hey Akshay and Neethu We refactored the patch to add tests for the resize feature. We were able to write test cases for the drag event by using spies and setting the rect dimensions. In cases like this, we can just test some components in order to have enough confidence in the code. So we isolated the function that implements the behavior of this feature and tested that it was performing as expected. We ran the patch through the pipelines and all of the tests passed. Sincerely, Joao and Victoria On Wed, Mar 28, 2018 at 8:03 AM Akshay Joshi wrote: > Hi > > On Fri, Mar 2, 2018 at 3:40 AM, Joao De Almeida Pereira < > jdealmeidapereira@pivotal.io> wrote: > >> Hello Neethu, >> We passed the patch through our CI pipeline and all tests pass. >> The code looks good, but we are trying to decouple files as much as we >> can so that we do not end up with files with over 1000 lines, that are hard >> to read and to maintain. Also we are trying to create Unit Tests to have >> more coverage in our Javascript code. >> >> Can you split the new implementation code into it's own file and create >> some tests to ensure the behavior will not be broken in the future?iYou >> have some examples >> on: pgadmin/browser/server_groups/servers/databases/external_tables/* >> > > I have spilt the new implementation into different file. Its' been > hard to write jasmine/feature test case as it requires drag event and exact > co-ordinate to resize the slickgrid cell. > Attached is the modified patch. > > >> >> Thanks >> Joao >> >> On Thu, Mar 1, 2018 at 10:37 AM Neethu Mariya Joy < >> neethumariyajoy@gmail.com> wrote: >> >>> Hi, >>> I am Neethu Mariya Joy, an undergraduate pursuing BE in Computer Science >>> at BITS Pilani. >>> >>> I've attempted to fix https://redmine.postgresql.org/issues/3083. Since >>> the textarea resize feature is the default HTML feature, I have not changed >>> it. Instead, I've added draggable borders to the wrapper which expands the >>> textarea inside it. >>> >>> I'm attaching my patch as bug3083.diff below as per the contribution >>> guidelines. >>> >>> Hope this helps. Thank you for your consideration! >>> >>> Sincerely, >>> Neethu Mariya Joy >>> GitHub | Linkedin >>> >>> >>> >>> > > > -- > *Akshay Joshi* > > *Sr. Software Architect * > > > > *Phone: +91 20-3058-9517 <+91%2020%203058%209517>Mobile: +91 976-788-8246 > <+91%2097678%2088246>* > --00000000000007990705687cdecb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hey Akshay and Neethu

We refactored the= patch to add tests for the resize feature.=C2=A0 We were able to write tes= t cases for the drag event by using spies and setting the rect dimensions.= =C2=A0 In cases like this, we can just test some components in order to hav= e enough confidence in the code.=C2=A0 So we isolated the function that imp= lements the behavior of this feature and tested that it was performing as e= xpected.

We ran the patch through the pipelines an= d all of the tests passed.

Sincerely,
Joao and Victoria

On Wed, Mar 28, 2018 at 8:03 AM Akshay Joshi <akshay.joshi@enterprisedb.com> wrote= :
Hi

On Fri, Mar 2, 20= 18 at 3:40 AM, Joao De Almeida Pereira <jdealmeidapereira@pivot= al.io> wrote:
Hello Neethu,
We passed the patch through our CI pipeline and all t= ests pass.
The code looks good, but we are trying to decouple fil= es as much=C2=A0 as we can so that we do not end up with files with over 10= 00 lines, that are hard to read and to maintain. Also we are trying to crea= te Unit Tests to have more coverage in our Javascript code.

<= /div>
Can you split the new implementation code into it's own file = and create some tests to ensure the behavior will not be broken in the futu= re?iYou have some examples on:=C2=A0pgadmin/browser/server_groups/servers/d= atabases/external_tables/*

=C2=A0 =C2=A0 I have spilt the new implementation into different = file. Its' been hard to write jasmine/feature test case as it requires = drag event and exact co-ordinate to resize the slickgrid cell.
= =C2=A0 =C2=A0 Attached is the modified patch.=C2=A0=C2=A0
=
=C2=A0 =C2=A0=C2=A0

Thanks
Joao
=
On Thu, Mar 1, 2018 at 10:3= 7 AM Neethu Mariya Joy <neethumariyajoy@gmail.com> wrote:
Hi,
I am Neethu Mariya Joy, an un= dergraduate pursuing BE in Computer Science at BITS Pilani.

<= /div>
I've attempted to fix=C2=A0https://redmine.postgresql.org/issue= s/3083. Since the textarea=C2=A0resize feature is the default HTML feat= ure, I have not changed it. Instead, I've added draggable borders to th= e wrapper which expands the textarea inside it.

I'm attaching my patch as bug3083.diff below as per the contribution = guidelines.

Hope this helps. Thank you for your co= nsideration!

Sincerely,
Neethu Mariya Jo= y
GitHub=C2=A0|=C2=A0Linkedin





--
Akshay Joshi
Sr. Software Architect
=

<= div>Phone: +91 = 20-3058-9517
Mobile: +91 976-788-8246
=
--00000000000007990705687cdecb-- --00000000000007990b05687cdecd Content-Type: text/x-patch; charset="US-ASCII"; name="RM_3083_v3.patch" Content-Disposition: attachment; filename="RM_3083_v3.patch" Content-Transfer-Encoding: base64 Content-ID: <1626dc913dd10fc84da1> X-Attachment-Id: 1626dc913dd10fc84da1 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQvZWRpdG9ycy5qcyBi L3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQvZWRpdG9ycy5qcwppbmRleCA3NjUyYmYz Yi4uYTdkZjRiYWYgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQv ZWRpdG9ycy5qcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2xpY2tncmlkL2VkaXRvcnMu anMKQEAgLTMsOCArMyw5IEBACiAgKiBAbW9kdWxlIEVkaXRvcnMKICAqIEBuYW1lc3BhY2UgU2xp Y2sKICAqLworaW1wb3J0IHtyZXNpemVDb250ZW50T25EcmFnfSBmcm9tICdyZXNpemVfZWRpdG9y JzsKIAotKGZ1bmN0aW9uKCQpIHsKKyhmdW5jdGlvbiAoJCkgewogICAvLyByZWdpc3RlciBuYW1l c3BhY2UKICAgJC5leHRlbmQodHJ1ZSwgd2luZG93LCB7CiAgICAgJ1NsaWNrJzogewpAQCAtNTIs NiArNTMsNyBAQAogICAgIHZhbCA9ICQudHJpbSh2YWwpOwogICAgIHJldHVybiAhKHZhbCAhPSAn JyAmJiAodmFsLmNoYXJBdCgwKSAhPSAneycgfHwgdmFsLmNoYXJBdCh2YWwubGVuZ3RoIC0gMSkg IT0gJ30nKSk7CiAgIH0KKwogICAvKgogICAgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIFtk ZWZhdWx0XSBhbmQgW251bGxdIHZhbHVlcyBmb3IgY2VsbHMKICAgICogaWYgcm93IGlzIGNvcGll ZCwgb3RoZXJ3aXNlIHJldHVybnMgdGhlIGVkaXRvciB2YWx1ZS4KQEAgLTEyOSw3ICsxMzEsNyBA QAogICAgIHZhciBkZWZhdWx0VmFsdWU7CiAgICAgdmFyIHNjb3BlID0gdGhpczsKIAotICAgIHRo aXMuaW5pdCA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uICgpIHsKICAg ICAgIHZhciAkY29udGFpbmVyID0gJCgnYm9keScpOwogCiAgICAgICAkd3JhcHBlciA9IGdldFdy YXBwZXIoKS5hcHBlbmRUbygkY29udGFpbmVyKTsKQEAgLTE0MCwxMSArMTQyLDEyIEBACiAgICAg ICAkYnV0dG9ucy5maW5kKCdidXR0b246bGFzdCcpLm9uKCdjbGljaycsIHRoaXMuY2FuY2VsKTsK ICAgICAgICRpbnB1dC5iaW5kKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlEb3duKTsKIAorICAg ICAgcmVzaXplQ29udGVudE9uRHJhZygkd3JhcHBlciwgJGlucHV0KTsKICAgICAgIHNjb3BlLnBv c2l0aW9uKGFyZ3MucG9zaXRpb24pOwogICAgICAgJGlucHV0LmZvY3VzKCkuc2VsZWN0KCk7CiAg ICAgfTsKIAotICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uKGUpIHsKKyAgICB0aGlz LmhhbmRsZUtleURvd24gPSBmdW5jdGlvbiAoZSkgewogICAgICAgaWYgKGUud2hpY2ggPT0gJC51 aS5rZXlDb2RlLkVOVEVSICYmIGUuY3RybEtleSkgewogICAgICAgICBzY29wZS5zYXZlKCk7CiAg ICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0gJC51aS5rZXlDb2RlLkVTQ0FQRSkgewpAQCAtMTU5 LDQwICsxNjIsNDAgQEAKICAgICAgIH0KICAgICB9OwogCi0gICAgdGhpcy5zYXZlID0gZnVuY3Rp b24oKSB7CisgICAgdGhpcy5zYXZlID0gZnVuY3Rpb24gKCkgewogICAgICAgYXJncy5jb21taXRD aGFuZ2VzKCk7CiAgICAgfTsKIAotICAgIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24oKSB7CisgICAg dGhpcy5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAkaW5wdXQudmFsKGRlZmF1bHRWYWx1 ZSk7CiAgICAgICBhcmdzLmNhbmNlbENoYW5nZXMoKTsKICAgICB9OwogCi0gICAgdGhpcy5oaWRl ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5oaWRlID0gZnVuY3Rpb24gKCkgewogICAgICAgJHdy YXBwZXIuaGlkZSgpOwogICAgIH07CiAKLSAgICB0aGlzLnNob3cgPSBmdW5jdGlvbigpIHsKKyAg ICB0aGlzLnNob3cgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAkd3JhcHBlci5zaG93KCk7CiAgICAg fTsKIAotICAgIHRoaXMucG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgeworICAgIHRoaXMu cG9zaXRpb24gPSBmdW5jdGlvbiAocG9zaXRpb24pIHsKICAgICAgIGNhbGN1bGF0ZUVkaXRvclBv c2l0aW9uKHBvc2l0aW9uLCAkd3JhcHBlcik7CiAgICAgICAkd3JhcHBlcgogICAgICAgICAuY3Nz KCd0b3AnLCBwb3NpdGlvbi50b3ApCiAgICAgICAgIC5jc3MoJ2xlZnQnLCBwb3NpdGlvbi5sZWZ0 KTsKICAgICB9OwogCi0gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5k ZXN0cm95ID0gZnVuY3Rpb24gKCkgewogICAgICAgJHdyYXBwZXIucmVtb3ZlKCk7CiAgICAgfTsK IAotICAgIHRoaXMuZm9jdXMgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmZvY3VzID0gZnVuY3Rp b24gKCkgewogICAgICAgJGlucHV0LmZvY3VzKCk7CiAgICAgfTsKIAogICAgIC8vIFdoZW4gdGV4 dCBlZGl0b3Igb3BlbnMKLSAgICB0aGlzLmxvYWRWYWx1ZSA9IGZ1bmN0aW9uKGl0ZW0pIHsKKyAg ICB0aGlzLmxvYWRWYWx1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICBpZiAoCiAgICAgICAg IF8uaXNVbmRlZmluZWQoaXRlbVthcmdzLmNvbHVtbi5maWVsZF0pIHx8CiAgICAgICAgIF8uaXNO dWxsKGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdKQpAQCAtMjE4LDcgKzIyMSw3IEBACiAgICAgICB9 CiAgICAgfTsKIAotICAgIHRoaXMuc2VyaWFsaXplVmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICB0 aGlzLnNlcmlhbGl6ZVZhbHVlID0gZnVuY3Rpb24gKCkgewogCiAgICAgICB2YXIgdmFsdWUgPSAk aW5wdXQudmFsKCk7CiAgICAgICAvLyBJZiBlbXB0eSByZXR1cm4gbnVsbApAQCAtMjQxLDExICsy NDQsMTEgQEAKICAgICAgIH0KICAgICB9OwogCi0gICAgdGhpcy5hcHBseVZhbHVlID0gZnVuY3Rp b24oaXRlbSwgc3RhdGUpIHsKKyAgICB0aGlzLmFwcGx5VmFsdWUgPSBmdW5jdGlvbiAoaXRlbSwg c3RhdGUpIHsKICAgICAgIHNldFZhbHVlKGFyZ3MsIGl0ZW0sIHN0YXRlLCAndGV4dCcpOwogICAg IH07CiAKLSAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5p c1ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgIC8vIFVzZSBfLmlzTnVsbCh2YWx1 ZSkgZm9yIGNvbXBhcmlzb24gZm9yIG51bGwgaW5zdGVhZCBvZgogICAgICAgLy8gZGVmYXVsdFZh bHVlID09IG51bGwsIGJlY2F1c2UgaXQgcmV0dXJucyB0cnVlIGZvciB1bmRlZmluZWQgdmFsdWUu CiAgICAgICBpZiAoJGlucHV0LnZhbCgpID09ICcnICYmIF8uaXNVbmRlZmluZWQoZGVmYXVsdFZh bHVlKSkgewpAQCAtMjU2LDcgKzI1OSw3IEBACiAgICAgICB9CiAgICAgfTsKIAotICAgIHRoaXMu dmFsaWRhdGUgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnZhbGlkYXRlID0gZnVuY3Rpb24gKCkg ewogICAgICAgaWYgKGFyZ3MuY29sdW1uLnZhbGlkYXRvcikgewogICAgICAgICB2YXIgdmFsaWRh dGlvblJlc3VsdHMgPSBhcmdzLmNvbHVtbi52YWxpZGF0b3IoJGlucHV0LnZhbCgpKTsKICAgICAg ICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0cy52YWxpZCkgewpAQCAtMjg2LDcgKzI4OSw3IEBACiAg ICAgdmFyIGRlZmF1bHRWYWx1ZTsKICAgICB2YXIgc2NvcGUgPSB0aGlzOwogCi0gICAgdGhpcy5p bml0ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAg dmFyICRjb250YWluZXIgPSAkKCdib2R5Jyk7CiAKICAgICAgICR3cmFwcGVyID0gZ2V0V3JhcHBl cigpLmFwcGVuZFRvKCRjb250YWluZXIpOwpAQCAtMjk3LDExICszMDAsMTIgQEAKICAgICAgICRi dXR0b25zLmZpbmQoJ2J1dHRvbjpsYXN0Jykub24oJ2NsaWNrJywgdGhpcy5jYW5jZWwpOwogICAg ICAgJGlucHV0LmJpbmQoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleURvd24pOwogCisgICAgICBy ZXNpemVDb250ZW50T25EcmFnKCR3cmFwcGVyLCAkaW5wdXQpOwogICAgICAgc2NvcGUucG9zaXRp b24oYXJncy5wb3NpdGlvbik7CiAgICAgICAkaW5wdXQuZm9jdXMoKS5zZWxlY3QoKTsKICAgICB9 OwogCi0gICAgdGhpcy5oYW5kbGVLZXlEb3duID0gZnVuY3Rpb24oZSkgeworICAgIHRoaXMuaGFu ZGxlS2V5RG93biA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICBpZiAoZS53aGljaCA9PSAkLnVpLmtl eUNvZGUuRU5URVIgJiYgZS5jdHJsS2V5KSB7CiAgICAgICAgIHNjb3BlLnNhdmUoKTsKICAgICAg IH0gZWxzZSBpZiAoZS53aGljaCA9PSAkLnVpLmtleUNvZGUuRVNDQVBFKSB7CkBAIC0zMTYsNDUg KzMyMCw0NSBAQAogICAgICAgfQogICAgIH07CiAKLSAgICB0aGlzLnNhdmUgPSBmdW5jdGlvbigp IHsKKyAgICB0aGlzLnNhdmUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICBhcmdzLmNvbW1pdENoYW5n ZXMoKTsKICAgICB9OwogCi0gICAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz LmNhbmNlbCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICRpbnB1dC52YWwoZGVmYXVsdFZhbHVlKTsK ICAgICAgIGFyZ3MuY2FuY2VsQ2hhbmdlcygpOwogICAgIH07CiAKLSAgICB0aGlzLmhpZGUgPSBm dW5jdGlvbigpIHsKKyAgICB0aGlzLmhpZGUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAkd3JhcHBl ci5oaWRlKCk7CiAgICAgfTsKIAotICAgIHRoaXMuc2hvdyA9IGZ1bmN0aW9uKCkgeworICAgIHRo aXMuc2hvdyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICR3cmFwcGVyLnNob3coKTsKICAgICB9Owog Ci0gICAgdGhpcy5wb3NpdGlvbiA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CisgICAgdGhpcy5wb3Np dGlvbiA9IGZ1bmN0aW9uIChwb3NpdGlvbikgewogICAgICAgY2FsY3VsYXRlRWRpdG9yUG9zaXRp b24ocG9zaXRpb24sICR3cmFwcGVyKTsKICAgICAgICR3cmFwcGVyCiAgICAgICAgIC5jc3MoJ3Rv cCcsIHBvc2l0aW9uLnRvcCkKICAgICAgICAgLmNzcygnbGVmdCcsIHBvc2l0aW9uLmxlZnQpOwog ICAgIH07CiAKLSAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmRlc3Ry b3kgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAkd3JhcHBlci5yZW1vdmUoKTsKICAgICB9OwogCi0g ICAgdGhpcy5mb2N1cyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZm9jdXMgPSBmdW5jdGlvbiAo KSB7CiAgICAgICAkaW5wdXQuZm9jdXMoKTsKICAgICB9OwogCi0gICAgdGhpcy5sb2FkVmFsdWUg PSBmdW5jdGlvbihpdGVtKSB7CisgICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbiAoaXRlbSkg ewogICAgICAgdmFyIGRhdGEgPSBkZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLmZpZWxk XTsKICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAhQXJyYXku aXNBcnJheShkYXRhKSkgewogICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVs bCwgNCk7CiAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHsKICAgICAgICAg dmFyIHRlbXAgPSBbXTsKLSAgICAgICAgJC5lYWNoKGRhdGEsIGZ1bmN0aW9uKGksIHZhbCkgewor ICAgICAgICAkLmVhY2goZGF0YSwgZnVuY3Rpb24gKGksIHZhbCkgewogICAgICAgICAgIGlmICh0 eXBlb2YgdmFsID09PSAnb2JqZWN0JykgewogICAgICAgICAgICAgdGVtcC5wdXNoKEpTT04uc3Ry aW5naWZ5KHZhbCwgbnVsbCwgNCkpOwogICAgICAgICAgIH0gZWxzZSB7CkBAIC0zNjcsMTggKzM3 MSwxOCBAQAogICAgICAgJGlucHV0LnNlbGVjdCgpOwogICAgIH07CiAKLSAgICB0aGlzLnNlcmlh bGl6ZVZhbHVlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zZXJpYWxpemVWYWx1ZSA9IGZ1bmN0 aW9uICgpIHsKICAgICAgIGlmICgkaW5wdXQudmFsKCkgPT09ICcnKSB7CiAgICAgICAgIHJldHVy biBudWxsOwogICAgICAgfQogICAgICAgcmV0dXJuICRpbnB1dC52YWwoKTsKICAgICB9OwogCi0g ICAgdGhpcy5hcHBseVZhbHVlID0gZnVuY3Rpb24oaXRlbSwgc3RhdGUpIHsKKyAgICB0aGlzLmFw cGx5VmFsdWUgPSBmdW5jdGlvbiAoaXRlbSwgc3RhdGUpIHsKICAgICAgIHNldFZhbHVlKGFyZ3Ms IGl0ZW0sIHN0YXRlLCAndGV4dCcpOwogICAgIH07CiAKLSAgICB0aGlzLmlzVmFsdWVDaGFuZ2Vk ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsK ICAgICAgIGlmICgkaW5wdXQudmFsKCkgPT0gJycgJiYgXy5pc1VuZGVmaW5lZChkZWZhdWx0VmFs dWUpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0gZWxzZSB7CkBAIC0zODYsNyAr MzkwLDcgQEAKICAgICAgIH0KICAgICB9OwogCi0gICAgdGhpcy52YWxpZGF0ZSA9IGZ1bmN0aW9u KCkgeworICAgIHRoaXMudmFsaWRhdGUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICBpZiAoYXJncy5j b2x1bW4udmFsaWRhdG9yKSB7CiAgICAgICAgIHZhciB2YWxpZGF0aW9uUmVzdWx0cyA9IGFyZ3Mu Y29sdW1uLnZhbGlkYXRvcigkaW5wdXQudmFsKCkpOwogICAgICAgICBpZiAoIXZhbGlkYXRpb25S ZXN1bHRzLnZhbGlkKSB7CkBAIC00MDksNyArNDEzLDcgQEAKICAgICB2YXIgZGVmYXVsdFZhbHVl OwogICAgIHZhciBzY29wZSA9IHRoaXM7CiAKLSAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHsK KyAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICB2YXIgJGNvbnRhaW5lciA9ICQo J2JvZHknKTsKIAogICAgICAgJHdyYXBwZXIgPSBnZXRXcmFwcGVyKCkuYXBwZW5kVG8oJGNvbnRh aW5lcik7CkBAIC00MTksMTEgKzQyMywxMiBAQAogICAgICAgJGJ1dHRvbnMuZmluZCgnYnV0dG9u OmZpcnN0Jykub24oJ2NsaWNrJywgdGhpcy5jYW5jZWwpOwogICAgICAgJGlucHV0LmJpbmQoJ2tl eWRvd24nLCB0aGlzLmhhbmRsZUtleURvd24pOwogCisgICAgICByZXNpemVDb250ZW50T25EcmFn KCR3cmFwcGVyLCAkaW5wdXQpOwogICAgICAgc2NvcGUucG9zaXRpb24oYXJncy5wb3NpdGlvbik7 CiAgICAgICAkaW5wdXQuZm9jdXMoKS5zZWxlY3QoKTsKICAgICB9OwogCi0gICAgdGhpcy5oYW5k bGVLZXlEb3duID0gZnVuY3Rpb24oZSkgeworICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IGZ1bmN0 aW9uIChlKSB7CiAgICAgICBpZiAoZS53aGljaCA9PSAkLnVpLmtleUNvZGUuRU5URVIgJiYgZS5j dHJsS2V5KSB7CiAgICAgICAgIHNjb3BlLmNhbmNlbCgpOwogICAgICAgfSBlbHNlIGlmIChlLndo aWNoID09ICQudWkua2V5Q29kZS5FU0NBUEUpIHsKQEAgLTQ0MCw1MiArNDQ1LDUyIEBACiAgICAg ICB9CiAgICAgfTsKIAotICAgIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5j YW5jZWwgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAkaW5wdXQudmFsKGRlZmF1bHRWYWx1ZSk7CiAg ICAgICBhcmdzLmNhbmNlbENoYW5nZXMoKTsKICAgICB9OwogCi0gICAgdGhpcy5oaWRlID0gZnVu Y3Rpb24oKSB7CisgICAgdGhpcy5oaWRlID0gZnVuY3Rpb24gKCkgewogICAgICAgJHdyYXBwZXIu aGlkZSgpOwogICAgIH07CiAKLSAgICB0aGlzLnNob3cgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz LnNob3cgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAkd3JhcHBlci5zaG93KCk7CiAgICAgfTsKIAot ICAgIHRoaXMucG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgeworICAgIHRoaXMucG9zaXRp b24gPSBmdW5jdGlvbiAocG9zaXRpb24pIHsKICAgICAgIGNhbGN1bGF0ZUVkaXRvclBvc2l0aW9u KHBvc2l0aW9uLCAkd3JhcHBlcik7CiAgICAgICAkd3JhcHBlcgogICAgICAgICAuY3NzKCd0b3An LCBwb3NpdGlvbi50b3ApCiAgICAgICAgIC5jc3MoJ2xlZnQnLCBwb3NpdGlvbi5sZWZ0KTsKICAg ICB9OwogCi0gICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZXN0cm95 ID0gZnVuY3Rpb24gKCkgewogICAgICAgJHdyYXBwZXIucmVtb3ZlKCk7CiAgICAgfTsKIAotICAg IHRoaXMuZm9jdXMgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmZvY3VzID0gZnVuY3Rpb24gKCkg ewogICAgICAgJGlucHV0LmZvY3VzKCk7CiAgICAgfTsKIAotICAgIHRoaXMubG9hZFZhbHVlID0g ZnVuY3Rpb24oaXRlbSkgeworICAgIHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24gKGl0ZW0pIHsK ICAgICAgICRpbnB1dC52YWwoZGVmYXVsdFZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5maWVsZF0p OwogICAgICAgJGlucHV0LnNlbGVjdCgpOwogICAgIH07CiAKLSAgICB0aGlzLnNlcmlhbGl6ZVZh bHVlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zZXJpYWxpemVWYWx1ZSA9IGZ1bmN0aW9uICgp IHsKICAgICAgIHJldHVybiAkaW5wdXQudmFsKCk7CiAgICAgfTsKIAotICAgIHRoaXMuYXBwbHlW YWx1ZSA9IGZ1bmN0aW9uKGl0ZW0sIHN0YXRlKSB7CisgICAgdGhpcy5hcHBseVZhbHVlID0gZnVu Y3Rpb24gKGl0ZW0sIHN0YXRlKSB7CiAgICAgICBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSA9IHN0 YXRlOwogICAgIH07CiAKLSAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24oKSB7Cisg ICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgIHJldHVybiAoISgk aW5wdXQudmFsKCkgPT0gJycgJiYgZGVmYXVsdFZhbHVlID09IG51bGwpKSAmJiAoJGlucHV0LnZh bCgpICE9IGRlZmF1bHRWYWx1ZSk7CiAgICAgfTsKIAotICAgIHRoaXMudmFsaWRhdGUgPSBmdW5j dGlvbigpIHsKKyAgICB0aGlzLnZhbGlkYXRlID0gZnVuY3Rpb24gKCkgewogICAgICAgaWYgKGFy Z3MuY29sdW1uLnZhbGlkYXRvcikgewogICAgICAgICB2YXIgdmFsaWRhdGlvblJlc3VsdHMgPSBh cmdzLmNvbHVtbi52YWxpZGF0b3IoJGlucHV0LnZhbCgpKTsKICAgICAgICAgaWYgKCF2YWxpZGF0 aW9uUmVzdWx0cy52YWxpZCkgewpAQCAtNTA4LDcgKzUxMyw3IEBACiAgICAgdmFyIGRlZmF1bHRW YWx1ZTsKICAgICB2YXIgc2NvcGUgPSB0aGlzOwogCi0gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24o KSB7CisgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgdmFyICRjb250YWluZXIg PSAkKCdib2R5Jyk7CiAKICAgICAgICR3cmFwcGVyID0gZ2V0V3JhcHBlcigpLmFwcGVuZFRvKCRj b250YWluZXIpOwpAQCAtNTE4LDExICs1MjMsMTIgQEAKICAgICAgICRidXR0b25zLmZpbmQoJ2J1 dHRvbjpmaXJzdCcpLm9uKCdjbGljaycsIHRoaXMuY2FuY2VsKTsKICAgICAgICRpbnB1dC5iaW5k KCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlEb3duKTsKIAorICAgICAgcmVzaXplQ29udGVudE9u RHJhZygkd3JhcHBlciwgJGlucHV0KTsKICAgICAgIHNjb3BlLnBvc2l0aW9uKGFyZ3MucG9zaXRp b24pOwogICAgICAgJGlucHV0LmZvY3VzKCkuc2VsZWN0KCk7CiAgICAgfTsKIAotICAgIHRoaXMu aGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uKGUpIHsKKyAgICB0aGlzLmhhbmRsZUtleURvd24gPSBm dW5jdGlvbiAoZSkgewogICAgICAgaWYgKGUud2hpY2ggPT0gJC51aS5rZXlDb2RlLkVOVEVSICYm IGUuY3RybEtleSkgewogICAgICAgICBzY29wZS5jYW5jZWwoKTsKICAgICAgIH0gZWxzZSBpZiAo ZS53aGljaCA9PSAkLnVpLmtleUNvZGUuRVNDQVBFKSB7CkBAIC01MzksNDEgKzU0NSw0MSBAQAog ICAgICAgfQogICAgIH07CiAKLSAgICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uKCkgeworICAgIHRo aXMuY2FuY2VsID0gZnVuY3Rpb24gKCkgewogICAgICAgJGlucHV0LnZhbChkZWZhdWx0VmFsdWUp OwogICAgICAgYXJncy5jYW5jZWxDaGFuZ2VzKCk7CiAgICAgfTsKIAotICAgIHRoaXMuaGlkZSA9 IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaGlkZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICR3cmFw cGVyLmhpZGUoKTsKICAgICB9OwogCi0gICAgdGhpcy5zaG93ID0gZnVuY3Rpb24oKSB7CisgICAg dGhpcy5zaG93ID0gZnVuY3Rpb24gKCkgewogICAgICAgJHdyYXBwZXIuc2hvdygpOwogICAgIH07 CiAKLSAgICB0aGlzLnBvc2l0aW9uID0gZnVuY3Rpb24ocG9zaXRpb24pIHsKKyAgICB0aGlzLnBv c2l0aW9uID0gZnVuY3Rpb24gKHBvc2l0aW9uKSB7CiAgICAgICBjYWxjdWxhdGVFZGl0b3JQb3Np dGlvbihwb3NpdGlvbiwgJHdyYXBwZXIpOwogICAgICAgJHdyYXBwZXIKICAgICAgICAgLmNzcygn dG9wJywgcG9zaXRpb24udG9wKQogICAgICAgICAuY3NzKCdsZWZ0JywgcG9zaXRpb24ubGVmdCk7 CiAgICAgfTsKIAotICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZGVz dHJveSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICR3cmFwcGVyLnJlbW92ZSgpOwogICAgIH07CiAK LSAgICB0aGlzLmZvY3VzID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5mb2N1cyA9IGZ1bmN0aW9u ICgpIHsKICAgICAgICRpbnB1dC5mb2N1cygpOwogICAgIH07CiAKLSAgICB0aGlzLmxvYWRWYWx1 ZSA9IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICB0aGlzLmxvYWRWYWx1ZSA9IGZ1bmN0aW9uIChpdGVt KSB7CiAgICAgICB2YXIgZGF0YSA9IGRlZmF1bHRWYWx1ZSA9IGl0ZW1bYXJncy5jb2x1bW4uZmll bGRdOwogICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJh eShkYXRhKSkgewogICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgNCk7 CiAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHsKICAgICAgICAgdmFyIHRl bXAgPSBbXTsKLSAgICAgICAgJC5lYWNoKGRhdGEsIGZ1bmN0aW9uKGksIHZhbCkgeworICAgICAg ICAkLmVhY2goZGF0YSwgZnVuY3Rpb24gKGksIHZhbCkgewogICAgICAgICAgIGlmICh0eXBlb2Yg dmFsID09PSAnb2JqZWN0JykgewogICAgICAgICAgICAgdGVtcC5wdXNoKEpTT04uc3RyaW5naWZ5 KHZhbCwgbnVsbCwgNCkpOwogICAgICAgICAgIH0gZWxzZSB7CkBAIC01ODYsMTkgKzU5MiwxOSBA QAogICAgICAgJGlucHV0LnNlbGVjdCgpOwogICAgIH07CiAKLSAgICB0aGlzLnNlcmlhbGl6ZVZh bHVlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zZXJpYWxpemVWYWx1ZSA9IGZ1bmN0aW9uICgp IHsKICAgICAgIHJldHVybiAkaW5wdXQudmFsKCk7CiAgICAgfTsKIAotICAgIHRoaXMuYXBwbHlW YWx1ZSA9IGZ1bmN0aW9uKGl0ZW0sIHN0YXRlKSB7CisgICAgdGhpcy5hcHBseVZhbHVlID0gZnVu Y3Rpb24gKGl0ZW0sIHN0YXRlKSB7CiAgICAgICBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSA9IHN0 YXRlOwogICAgIH07CiAKLSAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24oKSB7Cisg ICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgIHJldHVybiAoISgk aW5wdXQudmFsKCkgPT0gJycgJiYgZGVmYXVsdFZhbHVlID09IG51bGwpKSAmJiAoJGlucHV0LnZh bCgpICE9IGRlZmF1bHRWYWx1ZSk7CiAgICAgfTsKIAotICAgIHRoaXMudmFsaWRhdGUgPSBmdW5j dGlvbigpIHsKKyAgICB0aGlzLnZhbGlkYXRlID0gZnVuY3Rpb24gKCkgewogICAgICAgaWYgKGFy Z3MuY29sdW1uLnZhbGlkYXRvcikgewogICAgICAgICB2YXIgdmFsaWRhdGlvblJlc3VsdHMgPSBh cmdzLmNvbHVtbi52YWxpZGF0b3IoJGlucHV0LnZhbCgpKTsKICAgICAgICAgaWYgKCF2YWxpZGF0 aW9uUmVzdWx0cy52YWxpZCkgewpAQCAtNjE5LDEwICs2MjUsMTAgQEAKICAgICB2YXIgJGlucHV0 OwogICAgIHZhciBkZWZhdWx0VmFsdWU7CiAKLSAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHsK KyAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAkaW5wdXQgPSAkKCc8SU5QVVQg dHlwZT10ZXh0IGNsYXNzPVwnZWRpdG9yLXRleHRcJyByZWFkb25seS8+JykKICAgICAgICAgLmFw cGVuZFRvKGFyZ3MuY29udGFpbmVyKQotICAgICAgICAuYmluZCgna2V5ZG93bi5uYXYnLCBmdW5j dGlvbihlKSB7CisgICAgICAgIC5iaW5kKCdrZXlkb3duLm5hdicsIGZ1bmN0aW9uIChlKSB7CiAg ICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gJC51aS5rZXlDb2RlLkxFRlQgfHwgZS5rZXlDb2Rl ID09PSAkLnVpLmtleUNvZGUuUklHSFQpIHsKICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVBy b3BhZ2F0aW9uKCk7CiAgICAgICAgICAgfQpAQCAtNjMxLDE5ICs2MzcsMTkgQEAKICAgICAgICAg LnNlbGVjdCgpOwogICAgIH07CiAKLSAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKKyAg ICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAkaW5wdXQucmVtb3ZlKCk7CiAg ICAgfTsKIAotICAgIHRoaXMuZm9jdXMgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmZvY3VzID0g ZnVuY3Rpb24gKCkgewogICAgICAgJGlucHV0LmZvY3VzKCk7CiAgICAgfTsKIAotICAgIHRoaXMu Z2V0VmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24gKCkg ewogICAgICAgcmV0dXJuICRpbnB1dC52YWwoKTsKICAgICB9OwogCi0gICAgdGhpcy5sb2FkVmFs dWUgPSBmdW5jdGlvbihpdGVtKSB7CisgICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbiAoaXRl bSkgewogICAgICAgdmFyIHZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5maWVsZF07CiAKICAgICAg IC8vIENoZWNrIGlmIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkCkBAIC02NTYsMTkgKzY2Miwx OSBAQAogICAgICAgJGlucHV0LnNlbGVjdCgpOwogICAgIH07CiAKLSAgICB0aGlzLnNlcmlhbGl6 ZVZhbHVlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zZXJpYWxpemVWYWx1ZSA9IGZ1bmN0aW9u ICgpIHsKICAgICAgIHJldHVybiAkaW5wdXQudmFsKCk7CiAgICAgfTsKIAotICAgIHRoaXMuYXBw bHlWYWx1ZSA9IGZ1bmN0aW9uKGl0ZW0sIHN0YXRlKSB7CisgICAgdGhpcy5hcHBseVZhbHVlID0g ZnVuY3Rpb24gKGl0ZW0sIHN0YXRlKSB7CiAgICAgICBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSA9 IHN0YXRlOwogICAgIH07CiAKLSAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24oKSB7 CisgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgIHJldHVybiAo ISgkaW5wdXQudmFsKCkgPT0gJycgJiYgZGVmYXVsdFZhbHVlID09IG51bGwpKSAmJiAoJGlucHV0 LnZhbCgpICE9IGRlZmF1bHRWYWx1ZSk7CiAgICAgfTsKIAotICAgIHRoaXMudmFsaWRhdGUgPSBm dW5jdGlvbigpIHsKKyAgICB0aGlzLnZhbGlkYXRlID0gZnVuY3Rpb24gKCkgewogICAgICAgaWYg KGFyZ3MuY29sdW1uLnZhbGlkYXRvcikgewogICAgICAgICB2YXIgdmFsaWRhdGlvblJlc3VsdHMg PSBhcmdzLmNvbHVtbi52YWxpZGF0b3IoJGlucHV0LnZhbCgpKTsKICAgICAgICAgaWYgKCF2YWxp ZGF0aW9uUmVzdWx0cy52YWxpZCkgewpAQCAtNjg5LDIxICs2OTUsMjEgQEAKICAgICB2YXIgJHNl bGVjdDsKICAgICB2YXIgZGVmYXVsdFZhbHVlOwogCi0gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24o KSB7CisgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgJHNlbGVjdCA9ICQoJzxJ TlBVVCB0eXBlPWNoZWNrYm94IHZhbHVlPVwndHJ1ZVwnIGNsYXNzPVwnZWRpdG9yLWNoZWNrYm94 XCcgaGlkZUZvY3VzIGRpc2FibGVkPicpOwogICAgICAgJHNlbGVjdC5hcHBlbmRUbyhhcmdzLmNv bnRhaW5lcik7CiAgICAgICAkc2VsZWN0LmZvY3VzKCk7CiAgICAgfTsKIAotICAgIHRoaXMuZGVz dHJveSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsKICAg ICAgICRzZWxlY3QucmVtb3ZlKCk7CiAgICAgfTsKIAotICAgIHRoaXMuZm9jdXMgPSBmdW5jdGlv bigpIHsKKyAgICB0aGlzLmZvY3VzID0gZnVuY3Rpb24gKCkgewogICAgICAgJHNlbGVjdC5mb2N1 cygpOwogICAgIH07CiAKLSAgICB0aGlzLmxvYWRWYWx1ZSA9IGZ1bmN0aW9uKGl0ZW0pIHsKKyAg ICB0aGlzLmxvYWRWYWx1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICBkZWZhdWx0VmFsdWUg PSBpdGVtW2FyZ3MuY29sdW1uLnBvc107CiAgICAgICBpZiAoXy5pc051bGwoZGVmYXVsdFZhbHVl KSB8fCBfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHsKICAgICAgICAgJHNlbGVjdC5wcm9w KCdpbmRldGVybWluYXRlJywgdHJ1ZSk7CkBAIC03MjAsMjUgKzcyNiwyNSBAQAogICAgICAgfQog ICAgIH07CiAKLSAgICB0aGlzLnNlcmlhbGl6ZVZhbHVlID0gZnVuY3Rpb24oKSB7CisgICAgdGhp cy5zZXJpYWxpemVWYWx1ZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgIGlmICgkc2VsZWN0LnByb3Ao J2luZGV0ZXJtaW5hdGUnKSkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgIH0KICAgICAg IHJldHVybiAkc2VsZWN0LnByb3AoJ2NoZWNrZWQnKTsKICAgICB9OwogCi0gICAgdGhpcy5hcHBs eVZhbHVlID0gZnVuY3Rpb24oaXRlbSwgc3RhdGUpIHsKKyAgICB0aGlzLmFwcGx5VmFsdWUgPSBm dW5jdGlvbiAoaXRlbSwgc3RhdGUpIHsKICAgICAgIGl0ZW1bYXJncy5jb2x1bW4ucG9zXSA9IHN0 YXRlOwogICAgIH07CiAKLSAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24oKSB7Cisg ICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgIC8vIHZhciBzZWxl Y3RfdmFsdWUgPSB0aGlzLnNlcmlhbGl6ZVZhbHVlKCk7CiAgICAgICB2YXIgc2VsZWN0X3ZhbHVl ID0gJHNlbGVjdC5kYXRhKCdjaGVja2VkJyk7CiAgICAgICByZXR1cm4gKCEoc2VsZWN0X3ZhbHVl ID09PSAyICYmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCB8fCBkZWZhdWx0VmFsdWUgPT0gdW5kZWZp bmVkKSkpICYmCiAgICAgICAgIChzZWxlY3RfdmFsdWUgIT09IGRlZmF1bHRWYWx1ZSk7CiAgICAg fTsKIAotICAgIHRoaXMudmFsaWRhdGUgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnZhbGlkYXRl ID0gZnVuY3Rpb24gKCkgewogICAgICAgcmV0dXJuIHsKICAgICAgICAgdmFsaWQ6IHRydWUsCiAg ICAgICAgIG1zZzogbnVsbCwKQEAgLTc1MiwxMCArNzU4LDEwIEBACiAgICAgdmFyICRpbnB1dDsK ICAgICB2YXIgZGVmYXVsdFZhbHVlOwogCi0gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24oKSB7Cisg ICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgJGlucHV0ID0gJCgnPElOUFVUIHR5 cGU9dGV4dCBjbGFzcz1cJ2VkaXRvci10ZXh0XCcgLz4nKTsKIAotICAgICAgJGlucHV0LmJpbmQo J2tleWRvd24ubmF2JywgZnVuY3Rpb24oZSkgeworICAgICAgJGlucHV0LmJpbmQoJ2tleWRvd24u bmF2JywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gJC51aS5rZXlD b2RlLkxFRlQgfHwgZS5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuUklHSFQpIHsKICAgICAgICAg ICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwogICAgICAgICB9CkBAIC03NjUsMTUgKzc3 MSwxNSBAQAogICAgICAgJGlucHV0LmZvY3VzKCkuc2VsZWN0KCk7CiAgICAgfTsKIAotICAgIHRo aXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uICgp IHsKICAgICAgICRpbnB1dC5yZW1vdmUoKTsKICAgICB9OwogCi0gICAgdGhpcy5mb2N1cyA9IGZ1 bmN0aW9uKCkgeworICAgIHRoaXMuZm9jdXMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAkaW5wdXQu Zm9jdXMoKTsKICAgICB9OwogCi0gICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbihpdGVtKSB7 CisgICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbiAoaXRlbSkgewogICAgICAgZGVmYXVsdFZh bHVlID0gaXRlbVthcmdzLmNvbHVtbi5maWVsZF07CiAKICAgICAgIGlmIChhcmdzLmNvbHVtbi5p c19hcnJheSAmJiAhXy5pc051bGwoZGVmYXVsdFZhbHVlKSAmJiAhXy5pc1VuZGVmaW5lZChkZWZh dWx0VmFsdWUpKSB7CkBAIC03ODYsNyArNzkyLDcgQEAKICAgICAgICRpbnB1dC5zZWxlY3QoKTsK ICAgICB9OwogCi0gICAgdGhpcy5zZXJpYWxpemVWYWx1ZSA9IGZ1bmN0aW9uKCkgeworICAgIHRo aXMuc2VyaWFsaXplVmFsdWUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICB2YXIgdmFsdWUgPSAkaW5w dXQudmFsKCk7CiAKICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHsKQEAgLTgxMywxMSArODE5LDEx IEBACiAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfTsKIAotICAgIHRoaXMuYXBwbHlWYWx1ZSA9 IGZ1bmN0aW9uKGl0ZW0sIHN0YXRlKSB7CisgICAgdGhpcy5hcHBseVZhbHVlID0gZnVuY3Rpb24g KGl0ZW0sIHN0YXRlKSB7CiAgICAgICBzZXRWYWx1ZShhcmdzLCBpdGVtLCBzdGF0ZSwgJ251bWJl cicpOwogICAgIH07CiAKLSAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkID0gZnVuY3Rpb24oKSB7Cisg ICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgIGlmICgkaW5wdXQu dmFsKCkgPT0gJycgJiYgXy5pc1VuZGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7CiAgICAgICAgIHJl dHVybiBmYWxzZTsKICAgICAgIH0gZWxzZSBpZiAoJGlucHV0LnZhbCgpID09ICcnICYmIGRlZmF1 bHRWYWx1ZSA9PSAnJykgewpAQCAtODI4LDcgKzgzNCw3IEBACiAgICAgICB9CiAgICAgfTsKIAot ICAgIHRoaXMudmFsaWRhdGUgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnZhbGlkYXRlID0gZnVu Y3Rpb24gKCkgewogICAgICAgdmFyIHZhbHVlID0gJGlucHV0LnZhbCgpOwogICAgICAgaWYgKCFh cmdzLmNvbHVtbi5pc19hcnJheSAmJiBpc05hTih2YWx1ZSkpIHsKICAgICAgICAgcmV0dXJuIHsK QEAgLTg4NSwxMyArODkxLDEzIEBACiAgICAgdmFyICRzZWxlY3QsIGVsOwogICAgIHZhciBkZWZh dWx0VmFsdWUsIHByZXZpb3VzU3RhdGU7CiAKLSAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHsK KyAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAkc2VsZWN0ID0gJCgnPGRpdiBj bGFzcz1cJ211bHRpLWNoZWNrYm94XCc+PHNwYW4gY2xhc3M9XCdjaGVja1wnIGhpZGVGb2N1cz48 L3NwYW4+PC9kaXY+Jyk7CiAgICAgICAkc2VsZWN0LmFwcGVuZFRvKGFyZ3MuY29udGFpbmVyKTsK ICAgICAgICRzZWxlY3QuZm9jdXMoKTsKIAogICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlz IHRha2VuIGZyb20gaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9pbmRldGVybWluYXRlLWNoZWNrYm94 ZXMvCi0gICAgICAkc2VsZWN0LmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAkc2Vs ZWN0LmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICBlbCA9ICQodGhpcyk7CiAg ICAgICAgIHZhciBzdGF0ZXMgPSBbJ3VuY2hlY2tlZCcsICdwYXJ0aWFsJywgJ2NoZWNrZWQnXTsK ICAgICAgICAgdmFyIGN1clN0YXRlID0gZWwuZmluZCgnLmNoZWNrJykuZGF0YSgnc3RhdGUnKTsK QEAgLTkwMywxNSArOTA5LDE1IEBACiAgICAgICB9KTsKICAgICB9OwogCi0gICAgdGhpcy5kZXN0 cm95ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24gKCkgewogICAg ICAgJHNlbGVjdC5yZW1vdmUoKTsKICAgICB9OwogCi0gICAgdGhpcy5mb2N1cyA9IGZ1bmN0aW9u KCkgeworICAgIHRoaXMuZm9jdXMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAkc2VsZWN0LmZvY3Vz KCk7CiAgICAgfTsKIAotICAgIHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24oaXRlbSkgeworICAg IHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgIGRlZmF1bHRWYWx1ZSA9 IGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdOwogICAgICAgcHJldmlvdXNTdGF0ZSA9IDE7CiAgICAg ICBpZiAoXy5pc051bGwoZGVmYXVsdFZhbHVlKSB8fCBfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1 ZSkpIHsKQEAgLTkyOCwyMyArOTM0LDIzIEBACiAgICAgICB9CiAgICAgfTsKIAotICAgIHRoaXMu c2VyaWFsaXplVmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnNlcmlhbGl6ZVZhbHVlID0g ZnVuY3Rpb24gKCkgewogICAgICAgaWYgKCRzZWxlY3QuZmluZCgnLmNoZWNrJykuZGF0YSgnc3Rh dGUnKSA9PSAxKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgfQogICAgICAgcmV0dXJu ICRzZWxlY3QuZmluZCgnLmNoZWNrJykuZGF0YSgnc3RhdGUnKSA9PSAyID8gdHJ1ZSA6IGZhbHNl OwogICAgIH07CiAKLSAgICB0aGlzLmFwcGx5VmFsdWUgPSBmdW5jdGlvbihpdGVtLCBzdGF0ZSkg eworICAgIHRoaXMuYXBwbHlWYWx1ZSA9IGZ1bmN0aW9uIChpdGVtLCBzdGF0ZSkgewogICAgICAg aXRlbVthcmdzLmNvbHVtbi5maWVsZF0gPSBzdGF0ZTsKICAgICB9OwogCi0gICAgdGhpcy5pc1Zh bHVlQ2hhbmdlZCA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5j dGlvbiAoKSB7CiAgICAgICB2YXIgY3VycmVudFN0YXRlID0gJHNlbGVjdC5maW5kKCcuY2hlY2sn KS5kYXRhKCdzdGF0ZScpOwogICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSAhPT0gcHJldmlvdXNT dGF0ZTsKICAgICB9OwogCi0gICAgdGhpcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKCkgeworICAgIHRo aXMudmFsaWRhdGUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICBpZiAoYXJncy5jb2x1bW4udmFsaWRh dG9yKSB7CiAgICAgICAgIHZhciB2YWxpZGF0aW9uUmVzdWx0cyA9IGFyZ3MuY29sdW1uLnZhbGlk YXRvcih0aGlzLnNlcmlhbGl6ZVZhbHVlKCkpOwogICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1 bHRzLnZhbGlkKSB7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2xpY2tncmlk L3Jlc2l6ZV9lZGl0b3IuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2xpY2tncmlkL3Jlc2l6 ZV9lZGl0b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjdlNzgxY2Rh Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NsaWNrZ3JpZC9yZXNp emVfZWRpdG9yLmpzCkBAIC0wLDAgKzEsNjMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQ b3N0Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBn QWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRl ciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworZXhwb3J0IGZ1bmN0aW9uIHJl c2l6ZUNvbnRlbnRPbkRyYWcoJHdyYXBwZXIsICRpbnB1dCkgeworICAvLyByaWdodCBib3JkZXIs IGJvdHRvbSBib3JkZXIgYW5kIHJpZ2h0IGJvdHRvbSBjb3JuZXIgb2YgdGhlIHdyYXBwZXIgYXJl IGRyYWdnYWJsZQorICAkd3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9ImRyYWctYm9yZGVyIiBk YXRhPSJyaWdodCI+PC9kaXY+XAorICAgIDxkaXYgY2xhc3M9ImRyYWctYm9yZGVyIiBkYXRhPSJi b3R0b20iPjwvZGl2PlwKKyAgICA8ZGl2IGNsYXNzPSJkcmFnLWJvcmRlciIgZGF0YT0iYm90aCI+ PC9kaXY+Jyk7CisKKyAgJHdyYXBwZXIuZmluZCgnLmRyYWctYm9yZGVyJykub24oJ2RyYWcnLCAo ZXZlbnQpID0+IHsKKyAgICBvbkRyYWdFdmVudChldmVudCwgJGlucHV0KTsKKyAgfSk7Cit9CisK K2Z1bmN0aW9uIGRyYWdFbmRlZChtb3VzZVgsIG1vdXNlWSkgeworICByZXR1cm4gbW91c2VYID09 PSAwICYmIG1vdXNlWSA9PT0gMDsKK30KKworZXhwb3J0IGZ1bmN0aW9uIG9uRHJhZ0V2ZW50KGV2 ZW50LCAkaW5wdXQpIHsKKyAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgY29uc3QgbW91c2VY ID0gZXZlbnQuY2xpZW50WDsKKyAgY29uc3QgbW91c2VZID0gZXZlbnQuY2xpZW50WTsKKworICBp ZiAoZHJhZ0VuZGVkKG1vdXNlWCwgbW91c2VZKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIC8v IGRlZmF1bHQgc3BhY2luZyBiZXR3ZWVuICRpbnB1dCBhbmQgY3Vyc29yCisgIGNvbnN0IHBhZGRp bmdCb3R0b20gPSAzMDsKKyAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gMTA7CisgIGNvbnN0IGRpciA9 IGV2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEnKTsKKworICAvLyBzaXplIG9mICRpbnB1 dCBpcyBjaGFuZ2VkIGFjY29yZGluZyB0byBjdXJzb3IgcG9zaXRpb24KKyAgc3dpdGNoIChkaXIp IHsKKyAgY2FzZSAncmlnaHQnOgorICAgIGNoYW5nZVdpZHRoKCRpbnB1dCwgbW91c2VYLCBwYWRk aW5nUmlnaHQpOworICAgIGJyZWFrOworICBjYXNlICdib3R0b20nOgorICAgIGNoYW5nZUhlaWdo dCgkaW5wdXQsIG1vdXNlWSwgcGFkZGluZ0JvdHRvbSk7CisgICAgYnJlYWs7CisgIGNhc2UgJ2Jv dGgnOgorICAgIGNoYW5nZUhlaWdodCgkaW5wdXQsIG1vdXNlWSwgcGFkZGluZ0JvdHRvbSk7Cisg ICAgY2hhbmdlV2lkdGgoJGlucHV0LCBtb3VzZVgsIHBhZGRpbmdSaWdodCk7CisgIH0KK30KKwor ZnVuY3Rpb24gY2hhbmdlV2lkdGgoJGlucHV0LCBtb3VzZVgsIHBhZGRpbmcpIHsKKyAgY29uc3Qg cmVjdCA9ICRpbnB1dFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgY29uc3QgbmV3V2lk dGggPSByZWN0LndpZHRoICsgbW91c2VYIC0gcmVjdC5yaWdodCAtIHBhZGRpbmc7CisgICRpbnB1 dC5jc3MoJ3dpZHRoJywgbmV3V2lkdGgudG9TdHJpbmcoKSArICdweCcpOworfQorCitmdW5jdGlv biBjaGFuZ2VIZWlnaHQoJGlucHV0LCBtb3VzZVksIHBhZGRpbmcpIHsKKyAgY29uc3QgcmVjdCA9 ICRpbnB1dFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgY29uc3QgbmV3SGVpZ2h0ID0g cmVjdC5oZWlnaHQgKyBtb3VzZVkgLSByZWN0LmJvdHRvbSAtIHBhZGRpbmc7CisgICRpbnB1dC5j c3MoJ2hlaWdodCcsIG5ld0hlaWdodC50b1N0cmluZygpICsgJ3B4Jyk7Cit9CmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2Nzcy9zcWxlZGl0b3IuY3NzIGIv d2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9jc3Mvc3FsZWRpdG9yLmNzcwppbmRl eCA0NjU4OGRjZS4uMDM0ZTQwNTAgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVk aXRvci9zdGF0aWMvY3NzL3NxbGVkaXRvci5jc3MKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvc3Fs ZWRpdG9yL3N0YXRpYy9jc3Mvc3FsZWRpdG9yLmNzcwpAQCAtNTA1LDYgKzUwNSwzOCBAQCBpbnB1 dC5lZGl0b3ItY2hlY2tib3g6Zm9jdXMgewogICAtbW96LWJvcmRlci1yYWRpdXM6MTBweDsKICAg Ym9yZGVyLXJhZGl1czoxMHB4OwogfQorCisuZHJhZy1ib3JkZXJ7CisgIGJhY2tncm91bmQ6IHRy YW5zcGFyZW50OworICBwb3NpdGlvbjogYWJzb2x1dGU7Cit9CisKKy5kcmFnLWJvcmRlcltkYXRh PXJpZ2h0XXsKKyAgY3Vyc29yOiBldy1yZXNpemU7CisgIHRvcDogMDsKKyAgcmlnaHQ6IC0xMHB4 OworICBib3R0b206IDA7CisgIHdpZHRoOiAyMHB4OworfQorCisuZHJhZy1ib3JkZXJbZGF0YT1i b3R0b21deworICBjdXJzb3I6IG5zLXJlc2l6ZTsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBs ZWZ0OiAwOworICByaWdodDogMDsKKyAgYm90dG9tOiAtMTBweDsKKyAgaGVpZ2h0OiAyMHB4Owor fQorCisuZHJhZy1ib3JkZXJbZGF0YT1ib3RoXXsKKyAgY3Vyc29yOiBtb3ZlOworICBwb3NpdGlv bjogYWJzb2x1dGU7CisgIGJvdHRvbTogLTEwcHg7CisgIHJpZ2h0OiAtMTBweDsKKyAgd2lkdGg6 IDIwcHg7CisgIGhlaWdodDogMjBweDsKK30KKwogLnBnX3RleHRhcmVhIHsKICAgYmFja3JvdW5k OiNmZmY7CiAgIHdpZHRoOjI1MHB4OwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNj cmlwdC9zZWxlY3Rpb24vcmVzaXplX2VkaXRvcl9zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2 YXNjcmlwdC9zZWxlY3Rpb24vcmVzaXplX2VkaXRvcl9zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwLi4zMDA4MGQ5NwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdy ZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0aW9uL3Jlc2l6ZV9lZGl0b3Jfc3BlYy5qcwpAQCAtMCww ICsxLDExMyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8v CisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBU ZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExp Y2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQge29uRHJhZ0V2ZW50fSBmcm9tICIuLi8uLi8uLi9w Z2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQvcmVzaXplX2VkaXRvciI7CisKK2NvbnN0IGNvbnRl eHQgPSBkZXNjcmliZTsKKworZGVzY3JpYmUoJ29uRHJhZ0V2ZW50JywgKCkgPT4geworICBjb250 ZXh0KCd3aGVuIHRoZSBkcmFnIGV2ZW50IGVuZHMnLCAoKSA9PiB7CisgICAgbGV0IGV2ZW50Owor ICAgIGxldCBpbnB1dDsKKyAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIGV2ZW50ID0ge2Ns aWVudFg6IDAsIGNsaWVudFk6IDB9OworICAgICAgZXZlbnQucHJldmVudERlZmF1bHQgPSBqYXNt aW5lLmNyZWF0ZVNweSgncHJldmVudERlZmF1bHQnKTsKKyAgICAgIGlucHV0ID0geworICAgICAg ICBjc3M6IGphc21pbmUuY3JlYXRlU3B5KCdjc3MnKSwKKyAgICAgIH07CisKKyAgICAgIG9uRHJh Z0V2ZW50KGV2ZW50LCBpbnB1dCk7CisgICAgfSk7CisKKyAgICBpdCgncHJldmVudHMgZGVmYXVs dCBhY3Rpb24gZnJvbSBiZWluZyB0cmlnZ2VyZWQgb24gZXZlbnQnLCAoKSA9PiB7CisgICAgICBl eHBlY3QoZXZlbnQucHJldmVudERlZmF1bHQpLnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICB9KTsK KworICAgIGl0KCdkb2VzIG5vdCBjaGFuZ2UgZGltZW5zaW9ucyBvZiBlbGVtZW50JywgKCkgPT4g eworICAgICAgZXhwZWN0KGlucHV0LmNzcykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICB9 KTsKKyAgfSk7CisKKyAgY29udGV4dCgnd2hlbiB0aGUgZHJhZyBldmVudCBpcyBpbiBwcm9ncmVz cycsICgpID0+IHsKKyAgICBsZXQgZXZlbnQ7CisgICAgbGV0IGlucHV0OworICAgIGJlZm9yZUVh Y2goKCkgPT4geworICAgICAgZXZlbnQgPSB7CisgICAgICAgIGNsaWVudFg6IDUwLAorICAgICAg ICBjbGllbnRZOiAxMDEsCisgICAgICAgIHRhcmdldDogamFzbWluZS5jcmVhdGVTcHlPYmooJ3Rh cmdldCcsIFsnZ2V0QXR0cmlidXRlJ10pLAorICAgICAgfTsKKyAgICAgIGV2ZW50LnByZXZlbnRE ZWZhdWx0ID0gamFzbWluZS5jcmVhdGVTcHkoJ3ByZXZlbnREZWZhdWx0Jyk7CisgICAgICBpbnB1 dCA9IFt7CisgICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdDogamFzbWluZS5jcmVhdGVTcHko J2dldEJvdW5kaW5nQ2xpZW50UmVjdCcpCisgICAgICB9XTsKKyAgICAgIGlucHV0LmNzcyA9IGph c21pbmUuY3JlYXRlU3B5KCdjc3MnKTsKKyAgICB9KTsKKworICAgIGNvbnRleHQoJ2RyYWcgdG8g dGhlIHJpZ2h0JywgKCkgPT4geworICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIGV2 ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUuYW5kLnJldHVyblZhbHVlKCdyaWdodCcpOworICAgICAg ICBpbnB1dFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QuYW5kLnJldHVyblZhbHVlKHsKKyAgICAg ICAgICB3aWR0aDogMTEsCisgICAgICAgICAgcmlnaHQ6IDksCisgICAgICAgIH0pOworICAgICAg ICBvbkRyYWdFdmVudChldmVudCwgaW5wdXQpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdwcmV2 ZW50cyBkZWZhdWx0IGFjdGlvbiBmcm9tIGJlaW5nIHRyaWdnZXJlZCBvbiBldmVudCcsICgpID0+ IHsKKyAgICAgICAgZXhwZWN0KGV2ZW50LnByZXZlbnREZWZhdWx0KS50b0hhdmVCZWVuQ2FsbGVk KCk7CisgICAgICB9KTsKKworICAgICAgaXQoJ2luY3JlYXNlcyB0aGUgd2lkdGggb2YgdGhlIGVs ZW1lbnQnLCAoKSA9PiB7CisgICAgICAgIGV4cGVjdChpbnB1dC5jc3MpLnRvSGF2ZUJlZW5DYWxs ZWRXaXRoKCd3aWR0aCcsICc0MnB4Jyk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGNvbnRl eHQoJ2RyYWcgdG8gdGhlIGJvdHRvbScsICgpID0+IHsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4g eworICAgICAgICBldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlLmFuZC5yZXR1cm5WYWx1ZSgnYm90 dG9tJyk7CisgICAgICAgIGlucHV0WzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdC5hbmQucmV0dXJu VmFsdWUoeworICAgICAgICAgIGhlaWdodDogMjAsCisgICAgICAgICAgYm90dG9tOiAzMCwKKyAg ICAgICAgfSk7CisgICAgICAgIG9uRHJhZ0V2ZW50KGV2ZW50LCBpbnB1dCk7CisgICAgICB9KTsK KworICAgICAgaXQoJ3ByZXZlbnRzIGRlZmF1bHQgYWN0aW9uIGZyb20gYmVpbmcgdHJpZ2dlcmVk IG9uIGV2ZW50JywgKCkgPT4geworICAgICAgICBleHBlY3QoZXZlbnQucHJldmVudERlZmF1bHQp LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnaW5jcmVhc2VzIHRo ZSBoZWlnaHQgb2YgdGhlIGVsZW1lbnQnLCAoKSA9PiB7CisgICAgICAgIGV4cGVjdChpbnB1dC5j c3MpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdoZWlnaHQnLCAnNjFweCcpOworICAgICAgfSk7Cisg ICAgfSk7CisKKyAgICBjb250ZXh0KCdkcmFnIHRvIHRoZSBib3R0b20gYW5kIHJpZ2h0IGF0IHRo ZSBzYW1lIHRpbWUnLCAoKSA9PiB7CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAg ZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZS5hbmQucmV0dXJuVmFsdWUoJ2JvdGgnKTsKKyAgICAg ICAgaW5wdXRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmFuZC5yZXR1cm5WYWx1ZSh7CisgICAg ICAgICAgd2lkdGg6IDEwLAorICAgICAgICAgIGhlaWdodDogMTksCisgICAgICAgICAgcmlnaHQ6 IDEwLAorICAgICAgICAgIGJvdHRvbTogMzAsCisgICAgICAgIH0pOworICAgICAgICBvbkRyYWdF dmVudChldmVudCwgaW5wdXQpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdwcmV2ZW50cyBkZWZh dWx0IGFjdGlvbiBmcm9tIGJlaW5nIHRyaWdnZXJlZCBvbiBldmVudCcsICgpID0+IHsKKyAgICAg ICAgZXhwZWN0KGV2ZW50LnByZXZlbnREZWZhdWx0KS50b0hhdmVCZWVuQ2FsbGVkKCk7CisgICAg ICB9KTsKKworICAgICAgaXQoJ2luY3JlYXNlcyB0aGUgaGVpZ2h0IG9mIHRoZSBlbGVtZW50Jywg KCkgPT4geworICAgICAgICBleHBlY3QoaW5wdXQuY3NzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgn d2lkdGgnLCAnNDBweCcpOworICAgICAgICBleHBlY3QoaW5wdXQuY3NzKS50b0hhdmVCZWVuQ2Fs bGVkV2l0aCgnaGVpZ2h0JywgJzYwcHgnKTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKK30p Owo= --00000000000007990b05687cdecd--