<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>177031</bug_id>
          
          <creation_ts>2017-09-15 19:09:00 -0700</creation_ts>
          <short_desc>Figure out how WSL will support field overloads like float4.xz and friends</short_desc>
          <delta_ts>2018-10-13 16:37:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>176199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>dino</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>jonlee</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1349610</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-15 19:09:00 -0700</bug_when>
    <thetext>I think that we do need operator[] and operator[]=, unlike what I concluded in https://bugs.webkit.org/show_bug.cgi?id=176958#c2 and subsequently landed.

Otherwise, what does this return:

    ? operator&amp;.xz(thread float4^)

It cannot return float2, because it needs to return a pointer to a field. It cannot return float2^, because xz are not next to each other.

But it would work if we could instead override:

    float2 operator.xz(float4)
    void operator.xz=(float4, float2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349634</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-15 22:23:37 -0700</bug_when>
    <thetext>Here are some notes I took while pondering this.  I think I have an algorithm now.

--

array[index] += foo();

1. ptr = &amp;array[index];
2. load from ptr
3. foo()
4. store to ptr



native struct Foo;
native struct Bar;
native struct Baz;

Bar operator.bar(Foo);
Foo operator.bar=(Foo, Bar);

thread Baz^ operator&amp;.baz(thread Foo^);

Foo foo;

RMW(foo.bar, anonVar&lt;0&gt;, anonVar&lt;1&gt;, newValueExp(anonVar&lt;0&gt;), anonVar&lt;1&gt;)
=&gt; RMW(foo, anonVar&lt;2&gt;, anonVar&lt;3&gt;,
       (anonVar&lt;0&gt;, anonVar&lt;1&gt;,
        anonVar&lt;0&gt; = operator.bar(anonVar&lt;2&gt;),
        anonVar&lt;1&gt; = newValueExp(anonVar&lt;0&gt;),
        operator.bar=(anonVar&lt;2&gt;, anonVar&lt;1&gt;)),
       anonVar&lt;1&gt;)

RMW(foo.baz, anonVar&lt;0&gt;, anonVar&lt;1&gt;, newValueExp(anonVar&lt;0&gt;), anonVar&lt;1&gt;)
=&gt; (anonVar&lt;0&gt;, anonVar&lt;1&gt;, anonVar&lt;2&gt;,
    anonVar&lt;2&gt; = &amp;foo.baz,
    anonVar&lt;0&gt; = ^anonVar&lt;2&gt;,
    anonVar&lt;1&gt; = newValueExp(anonVar&lt;0&gt;),
    ^anonVar&lt;2&gt; = anonVar&lt;1&gt;)


native struct Thingy;

Thingy operator.thingy(Bar);
Bar operator.thingy=(Bar, Thingy);

RMW(foo.bar.thingy, anonVar&lt;0&gt;, anonVar&lt;1&gt;, newValueExp(anonVar&lt;0&gt;), anonVar&lt;1&gt;)
=&gt; RMW(foo.bar, anonVar&lt;2&gt;, anonVar&lt;3&gt;,
       (anonVar&lt;0&gt;, anonVar&lt;1&gt;,
        anonVar&lt;0&gt; = operator.thingy(anonVar&lt;2&gt;),
        anonVar&lt;1&gt; = newValueExp(anonVar&lt;0&gt;),
        operator.thingy=(anonVar&lt;2&gt;, anonVar&lt;1&gt;)),
       anonVar&lt;1&gt;)
=&gt; RMW(foo, anonVar&lt;4&gt;, anonVar&lt;5&gt;,
       (anonVar&lt;2&gt;, anonVar&lt;3&gt;,
        anonVar&lt;2&gt; = operator.bar(anonVar&lt;4&gt;),
        anonVar&lt;3&gt; = (anonVar&lt;0&gt;, anonVar&lt;1&gt;,
                     anonVar&lt;0&gt; = operator.thingy(anonVar&lt;2&gt;),
                     anonVar&lt;1&gt; = newValueExp(anonVar&lt;0&gt;),
                     operator.thingy=(anonVar&lt;2&gt;, anonVar&lt;1&gt;)),
        operator.bar=(anonVar&lt;4&gt;, anonVar&lt;3&gt;)),
       anonVar&lt;1&gt;)


foo.bar = thingy
=&gt; RMW(foo, anonVar&lt;0&gt;, anonVar&lt;1&gt;,
       (anonVar&lt;2&gt;,
        anonVar&lt;2&gt; = thingy,
        operator.bar=(anonVar&lt;0&gt;, anonVar&lt;2&gt;)),
       anonVar&lt;2&gt;)

foo.baz = thingy
=&gt; ^operator&amp;.baz(&amp;foo) = thingy


foo.bar
=&gt; operator.bar(foo)

foo.baz
=&gt; ^operator&amp;.bar(&amp;foo)

foo.bar.thingy
=&gt; operator.bar(foo).thingy
=&gt; operator.thingy(operator.bar(foo))

foo.baz.stuff
=&gt; ^operator&amp;.baz(&amp;foo)
=&gt; ^operator&amp;.stuff(operator&amp;.baz(&amp;foo))


load
assign
dereference
rmw


1. figure out what the load conversion would do
2. if it yields a Dereference, then use the pointer deconstruction
3. otherwise use the normal deconstruction

It&apos;s not clear if this deconstruction should happen in Checker or later.  Might be easier if it happens later. That would require factoring visitCallExpression out.  That shouldn&apos;t be hard.

First the checker would do its thing pretending that DotExpression and IndexExpression are just valid lvalues. Then a subsequent pass will convert those into calls or other things depending on context.

This would mean that the only places that have to know the &amp; and @ tricks that CallExpression currently does are the places that handle the load case. We&apos;ll need both IndexExpression and DotExpression to know how to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349673</commentid>
    <comment_count>2</comment_count>
      <attachid>321007</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-16 11:09:43 -0700</bug_when>
    <thetext>Created attachment 321007
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349682</commentid>
    <comment_count>3</comment_count>
      <attachid>321010</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-16 14:08:39 -0700</bug_when>
    <thetext>Created attachment 321010
most of it is written

This isn&apos;t done yet.  I still have to drag RMWExpression and IndexExpression through all of the visitors.

But, I think the hard parts are done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349695</commentid>
    <comment_count>4</comment_count>
      <attachid>321017</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-16 16:19:04 -0700</bug_when>
    <thetext>Created attachment 321017
starting to test it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349697</commentid>
    <comment_count>5</comment_count>
      <attachid>321018</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-16 18:06:00 -0700</bug_when>
    <thetext>Created attachment 321018
it passes so many tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349699</commentid>
    <comment_count>6</comment_count>
      <attachid>321019</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-16 18:18:15 -0700</bug_when>
    <thetext>Created attachment 321019
passes all of our current tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349708</commentid>
    <comment_count>7</comment_count>
      <attachid>321023</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-16 21:12:13 -0700</bug_when>
    <thetext>Created attachment 321023
it&apos;s passing significant tests

Passes all old tests plus some large new ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349712</commentid>
    <comment_count>8</comment_count>
      <attachid>321025</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-16 21:58:43 -0700</bug_when>
    <thetext>Created attachment 321025
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349778</commentid>
    <comment_count>9</comment_count>
      <attachid>321050</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-17 12:00:17 -0700</bug_when>
    <thetext>Created attachment 321050
added another substantial test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349785</commentid>
    <comment_count>10</comment_count>
      <attachid>321052</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-17 13:15:04 -0700</bug_when>
    <thetext>Created attachment 321052
more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349787</commentid>
    <comment_count>11</comment_count>
      <attachid>321053</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-17 14:02:17 -0700</bug_when>
    <thetext>Created attachment 321053
the patch

Even more crazy testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349801</commentid>
    <comment_count>12</comment_count>
      <attachid>321057</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-17 16:09:37 -0700</bug_when>
    <thetext>Created attachment 321057
wrote more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349803</commentid>
    <comment_count>13</comment_count>
      <attachid>321058</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-17 16:26:59 -0700</bug_when>
    <thetext>Created attachment 321058
more tests

One easy way to create new tests is to take an existing test and try to make its functions as generic as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349808</commentid>
    <comment_count>14</comment_count>
      <attachid>321059</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-17 17:46:48 -0700</bug_when>
    <thetext>Created attachment 321059
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349840</commentid>
    <comment_count>15</comment_count>
      <attachid>321076</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-17 22:11:35 -0700</bug_when>
    <thetext>Created attachment 321076
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349975</commentid>
    <comment_count>16</comment_count>
      <attachid>321106</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-18 10:35:50 -0700</bug_when>
    <thetext>Created attachment 321106
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350014</commentid>
    <comment_count>17</comment_count>
      <attachid>321106</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-18 11:32:25 -0700</bug_when>
    <thetext>Comment on attachment 321106
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=321106&amp;action=review

Lots of this is over my head for now, first look at WSL :)

r=me with that caveat.

&gt; Tools/WebGPUShadingLanguageRI/Checker.js:40
&gt;          }

Ah no semicolon!

&gt; Tools/WebGPUShadingLanguageRI/Checker.js:160
&gt; +            throw new WTypeError(node.origin.originString, &quot;LHS of read-modify-write is not an LValue: &quot; + node.lVale);

Typo &quot;node.lVale&quot;

&gt; Tools/WebGPUShadingLanguageRI/Checker.js:236
&gt; +            throw new Error(&quot;Cannot get typeForAnd&quot;);

Is there some context that can be thrown here? Looked like you have origin laying around that helps figure out where in the source this comes from?

&gt; Tools/WebGPUShadingLanguageRI/FindHighZombies.js:27
&gt; +function findHighZombies(program)

👍

&gt; Tools/WebGPUShadingLanguageRI/Parse.js:784
&gt; +            let token = consume(&quot;+&quot;, &quot;-&quot;, &quot;*&quot;, &quot;/&quot;, &quot;%&quot;, &quot;^&quot;, &quot;&amp;&quot;, &quot;|&quot;, &quot;&lt;&quot;, &quot;&gt;&quot;, &quot;&lt;=&quot;, &quot;&gt;=&quot;, &quot;==&quot;, &quot;++&quot;, &quot;--&quot;, &quot;&amp;&quot;, &quot;.&quot;, &quot;~&quot;, &quot;&lt;&lt;&quot;, &quot;&gt;&gt;&quot;, &quot;[&quot;);

Does order in &quot;consume&quot; matter here? Because you have &quot;&lt;&quot; before &quot;&lt;&lt;&quot;, would it consume &quot;&lt;&quot; first? I guess you already had &quot;-&quot; before &quot;--&quot; so no?

You also have &quot;&amp;&quot; twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350021</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-18 11:51:13 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #17)
&gt; Comment on attachment 321106 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=321106&amp;action=review
&gt; 
&gt; Lots of this is over my head for now, first look at WSL :)
&gt; 
&gt; r=me with that caveat.
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:40
&gt; &gt;          }
&gt; 
&gt; Ah no semicolon!
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:160
&gt; &gt; +            throw new WTypeError(node.origin.originString, &quot;LHS of read-modify-write is not an LValue: &quot; + node.lVale);
&gt; 
&gt; Typo &quot;node.lVale&quot;

fixed

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:236
&gt; &gt; +            throw new Error(&quot;Cannot get typeForAnd&quot;);
&gt; 
&gt; Is there some context that can be thrown here? Looked like you have origin
&gt; laying around that helps figure out where in the source this comes from?

We throw Error when it&apos;s an ICE, not an error to be reported to the user.  I put this in there as basically an assertion; I don&apos;t expect it to ever fire.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/FindHighZombies.js:27
&gt; &gt; +function findHighZombies(program)
&gt; 
&gt; 👍
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Parse.js:784
&gt; &gt; +            let token = consume(&quot;+&quot;, &quot;-&quot;, &quot;*&quot;, &quot;/&quot;, &quot;%&quot;, &quot;^&quot;, &quot;&amp;&quot;, &quot;|&quot;, &quot;&lt;&quot;, &quot;&gt;&quot;, &quot;&lt;=&quot;, &quot;&gt;=&quot;, &quot;==&quot;, &quot;++&quot;, &quot;--&quot;, &quot;&amp;&quot;, &quot;.&quot;, &quot;~&quot;, &quot;&lt;&lt;&quot;, &quot;&gt;&gt;&quot;, &quot;[&quot;);
&gt; 
&gt; Does order in &quot;consume&quot; matter here? Because you have &quot;&lt;&quot; before &quot;&lt;&lt;&quot;, would
&gt; it consume &quot;&lt;&quot; first? I guess you already had &quot;-&quot; before &quot;--&quot; so no?
&gt; 
&gt; You also have &quot;&amp;&quot; twice.

The order doesn&apos;t matter.  The lexer takes care of having the right regexp&apos;s to parse these.

I&apos;ll clean up this list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351382</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-21 14:14:56 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/222169/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353425</commentid>
    <comment_count>20</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:29:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693376&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468930</commentid>
    <comment_count>21</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 16:37:54 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/131</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321007</attachid>
            <date>2017-09-16 11:09:43 -0700</date>
            <delta_ts>2017-09-16 14:08:39 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>39844</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1Zh
cmlhYmxlLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0Fub255bW91c1ZhcmlhYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworbGV0IGFub255bW91c1ZhcmlhYmxlQ291bnQgPSAwOworCitjbGFzcyBBbm9ueW1vdXNWYXJp
YWJsZSBleHRlbmRzIFZhbHVlIHsKKyAgICAvLyBZb3UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSB2
YXJpYWJsZSdzIHZhbHVlIGJlZm9yZSB1c2UsIGJ1dCB0aGF0IGNvdWxkIGJlIHF1aXRlIGxhdGUu
CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCB0eXBlID0gbnVsbCkKKyAgICB7CisgICAgICAgIHN1
cGVyKCk7CisgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5pbmRl
eCA9IGFub255bW91c1ZhcmlhYmxlQ291bnQrKzsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsK
KyAgICB9CisgICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQor
ICAgIGdldCBuYW1lKCkgeyByZXR1cm4gImFub25WYXI8IiArIHRoaXMuaW5kZXggKyAiPiI7IH0K
KyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5uYW1lOwor
ICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZU
eXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5
UmVmVHlwZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQXJyYXlSZWZUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxNSBAQCBj
bGFzcyBBcnJheVJlZlR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlCiAgICAgCiAgICAgZ2V0IGlz
QXJyYXlSZWYoKSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2Fk
KG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICAg
IGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0
aGlzLmVsZW1lbnRUeXBlICsgIltdICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwkod29ya2luZyBj
b3B5KQpAQCAtNzMsNSArNzMsMTYgQEAgY2xhc3MgQXJyYXlUeXBlIGV4dGVuZHMgVHlwZSB7CiAg
ICAgICAgIAogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlv
bkNvbnRleHQsIG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CisKKyAgICBhcmd1bWVudEZvckFu
ZE92ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3
IE1ha2VBcnJheVJlZkV4cHJlc3Npb24ob3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5u
dW1FbGVtZW50cyA9IHRoaXMubnVtRWxlbWVudHM7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgQXJyYXlSZWZUeXBlKG9yaWdpbiwgInRocmVhZCIsIHRoaXMuZWxlbWVu
dFR5cGUpOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
QXNzaWdubWVudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Bc3NpZ25tZW50LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9Bc3NpZ25tZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTIg
QEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24g
ewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMpCisgICAgY29uc3RydWN0b3Iob3Jp
Z2luLCBsaHMsIHJocywgdHlwZSA9IG51bGwpCiAgICAgewogICAgICAgICBzdXBlcihvcmlnaW4p
OwogICAgICAgICB0aGlzLl9saHMgPSBsaHM7CiAgICAgICAgIHRoaXMuX3JocyA9IHJoczsKKyAg
ICAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGxocygpIHsgcmV0
dXJuIHRoaXMuX2xoczsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2Fs
bEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQ2FsbEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3
ICs0Miw3MCBAQCBjbGFzcyBDYWxsRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gCiAgICAg
Z2V0IGlzQ2FzdCgpIHsgcmV0dXJuIHRoaXMuX2lzQ2FzdDsgfQogICAgIGdldCByZXR1cm5UeXBl
KCkgeyByZXR1cm4gdGhpcy5fcmV0dXJuVHlwZTsgfQogICAgIAotICAgIHJlc29sdmUob3Zlcmxv
YWQpCisgICAgc3RhdGljIHJlc29sdmUob3JpZ2luLCBwb3NzaWJsZU92ZXJsb2FkcywgdHlwZVBh
cmFtZXRlcnNJblNjb3BlLCBuYW1lLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudExpc3QsIGFyZ3Vt
ZW50VHlwZXMsIHJldHVyblR5cGUpCisgICAgeworICAgICAgICBsZXQgY2FsbCA9IG5ldyBDYWxs
RXhwcmVzc2lvbihvcmlnaW4sIG5hbWUsIHR5cGVBcmd1ZW1udHMsIGFyZ3VtZW50TGlzdCk7Cisg
ICAgICAgIGNhbGwuYXJndW1lbnRUeXBlcyA9IGFyZ3VtZW50VHlwZXM7CisgICAgICAgIGlmIChy
ZXR1cm5UeXBlKQorICAgICAgICAgICAgY2FsbC5zZXRDYXN0RGF0YShyZXR1cm5UeXBlKTsKKyAg
ICAgICAgcmV0dXJuIHtjYWxsLCByZXN1bHRUeXBlOiBjYWxsLnJlc29sdmUocG9zc2libGVPdmVy
bG9hZHMsIHR5cGVQYXJhbWV0cmVyc0luU2NvcGUpfTsKKyAgICB9CisgICAgCisgICAgcmVzb2x2
ZShwb3NzaWJsZU92ZXJsb2FkcywgdHlwZVBhcmFtZXRlcnNJblNjb3BlKQorICAgIHsKKyAgICAg
ICAgbGV0IG92ZXJsb2FkID0gbnVsbDsKKyAgICAgICAgbGV0IGZhaWx1cmVzID0gW107CisgICAg
ICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIgb2YgdHlwZVBhcmFtZXRlcnNJblNjb3BlKSB7Cisg
ICAgICAgICAgICBpZiAoISh0eXBlUGFyYW1ldGVyIGluc3RhbmNlb2YgVHlwZVZhcmlhYmxlKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRl
ci5wcm90b2NvbCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxldCBz
aWduYXR1cmVzID0KKyAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnByb3Rv
Y29sRGVjbC5zaWduYXR1cmVzQnlOYW1lV2l0aFR5cGVWYXJpYWJsZSh0aGlzLm5hbWUsIHR5cGVQ
YXJhbWV0ZXIpOworICAgICAgICAgICAgaWYgKCFzaWduYXR1cmVzKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNp
Z25hdHVyZXMsIHRoaXMudHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgdGhpcy5yZXR1cm5U
eXBlKTsKKyAgICAgICAgICAgIGlmIChvdmVybG9hZC5mdW5jKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Cisg
ICAgICAgICAgICBvdmVybG9hZCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFvdmVy
bG9hZCkgeworICAgICAgICAgICAgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKAorICAg
ICAgICAgICAgICAgIHBvc3NpYmxlT3ZlcmxvYWRzLCB0aGlzLnR5cGVBcmd1bWVudHMsIGFyZ3Vt
ZW50VHlwZXMsIHRoaXMucmV0dXJuVHlwZSk7CisgICAgICAgICAgICBpZiAoIW92ZXJsb2FkLmZ1
bmMpIHsKKyAgICAgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVz
KTsKKyAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICJEaWQgbm90IGZpbmQgZnVuY3Rpb24g
Zm9yIGNhbGwgd2l0aCAiOworICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGVBcmd1bWVudHMu
bGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJ0eXBlIGFyZ3VtZW50cyA8
IiArIHRoaXMudHlwZUFyZ3VtZW50cyArICI+IGFuZCAiOworICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgKz0gImFyZ3VtZW50IHR5cGVzICgiICsgYXJndW1lbnRUeXBlcyArICIpIjsKKyAgICAgICAg
ICAgICAgICBpZiAodGhpcy5yZXR1cm5UeXBlKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdl
ICs9IiBhbmQgcmV0dXJuIHR5cGUgIiArIHRoaXMucmV0dXJuVHlwZTsKKyAgICAgICAgICAgICAg
ICBpZiAoZmFpbHVyZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIs
IGJ1dCBjb25zaWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKKyAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1lc3NhZ2Up
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
dHlwZUFyZ3VtZW50VHlwZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCB0eXBlQXJn
dW1lbnRUeXBlID0gdHlwZUFyZ3VtZW50VHlwZXNbaV07CisgICAgICAgICAgICBsZXQgdHlwZVBh
cmFtZXRlciA9IG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnNbaV07CisgICAgICAgICAgICBp
ZiAoISh0eXBlUGFyYW1ldGVyIGluc3RhbmNlb2YgQ29uc3RleHByVHlwZVBhcmFtZXRlcikpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIXR5cGVQYXJhbWV0ZXIu
dHlwZS5lcXVhbHNXaXRoQ29tbWl0KHR5cGVBcmd1bWVudFR5cGUpKQorICAgICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQXQgIiArIHRoaXMub3JpZ2luLm9yaWdpblN0cmluZyArICIgY29u
c3RleHByIHR5cGUgYXJndW1lbnQgYW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWw6IGFyZ3Vt
ZW50ID0gIiArIHR5cGVBcmd1bWVudFR5cGUgKyAiLCBwYXJhbWV0ZXIgPSAiICsgdHlwZVBhcmFt
ZXRlci50eXBlKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3Vt
ZW50VHlwZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBhcmd1bWVudFR5cGUgPSBh
cmd1bWVudFR5cGVzW2ldOworICAgICAgICAgICAgbGV0IHBhcmFtZXRlclR5cGUgPSBvdmVybG9h
ZC5mdW5jLnBhcmFtZXRlcnNbaV0udHlwZS5zdWJzdGl0dXRlVG9VbmlmaWNhdGlvbigKKyAgICAg
ICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJzLCBvdmVybG9hZC51bmlmaWNh
dGlvbkNvbnRleHQpOworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGFyZ3VtZW50VHlwZS5lcXVh
bHNXaXRoQ29tbWl0KHBhcmFtZXRlclR5cGUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdCAiICsgdGhpcy5vcmlnaW4ub3JpZ2lu
U3RyaW5nICsgIiBhcmd1bWVudCBhbmQgcGFyYW1ldGVyIHR5cGVzIG5vdCBlcXVhbCBhZnRlciB0
eXBlIGFyZ3VtZW50IHN1YnN0aXR1dGlvbjogYXJndW1lbnQgPSAiICsgYXJndW1lbnRUeXBlICsg
IiwgcGFyYW1ldGVyID0gIiArIHBhcmFtZXRlclR5cGUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLnJlc29sdmVUb092ZXJsb2FkKG92ZXJsb2FkKTsKKyAgICB9CisgICAgCisgICAg
cmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQpCiAgICAgewogICAgICAgICB0aGlzLmZ1bmMgPSBv
dmVybG9hZC5mdW5jOwogICAgICAgICB0aGlzLmFjdHVhbFR5cGVBcmd1bWVudHMgPSBvdmVybG9h
ZC50eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50IGluc3RhbmNl
b2YgVHlwZSA/IHR5cGVBcmd1bWVudC52aXNpdChuZXcgQXV0b1dyYXBwZXIoKSkgOiB0eXBlQXJn
dW1lbnQpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCShy
ZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2Vy
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgY2xhc3MgQ2hlY2tlciBleHRl
bmRzIFZpc2l0b3IgewogICAgIHsKICAgICAgICAgbGV0IGVsZW1lbnRUeXBlID0gbm9kZS5sVmFs
dWUudmlzaXQodGhpcykudW5pZnlOb2RlOwogICAgICAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFu
Y2VvZiBQdHJUeXBlKSB7Ci0gICAgICAgICAgICBub2RlLmJlY29tZUNvbnZlcnRQdHJUb0FycmF5
UmVmRXhwcmVzc2lvbigpOworICAgICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbnZlcnRQdHJU
b0FycmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgb3JpZ2luLmxWYWx1ZSkpOwogICAgICAg
ICAgICAgcmV0dXJuIG5ldyBBcnJheVJlZlR5cGUobm9kZS5vcmlnaW4sIGVsZW1lbnRUeXBlLmFk
ZHJlc3NTcGFjZSwgZWxlbWVudFR5cGUuZWxlbWVudFR5cGUpOwogICAgICAgICB9CiAgICAgICAg
IApAQCAtMTg5LDI3ICsxODksNzEgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3Igewog
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNob3VsZCBub3QgZXhpc3QgeWV0LiIpOwogICAgIH0K
ICAgICAKLSAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICBfZmluaXNoVmlzaXRpbmdQ
cm9wZXJ0eUFjY2Vzcyhub2RlLCBiYXNlVHlwZSwgZXh0cmFBcmdzLCBleHRyYUFyZ1R5cGVzKQog
ICAgIHsKLSAgICAgICAgbGV0IHN0cnVjdFR5cGUgPSBub2RlLnN0cnVjdC52aXNpdCh0aGlzKS51
bmlmeU5vZGU7Ci0gICAgICAgIAotICAgICAgICBub2RlLnN0cnVjdFR5cGUgPSBzdHJ1Y3RUeXBl
LnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKKyAgICAgICAgbm9kZS5iYXNlVHlwZSA9IGJhc2VU
eXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKICAgICAgICAgCi0gICAgICAgIGxldCB1bmRl
cmx5aW5nU3RydWN0ID0gc3RydWN0VHlwZTsKKyAgICAgICAgLy8gU3VjaCBhIHR5cGUgbXVzdCBl
eGlzdC4gVGhpcyBtYXkgdGhyb3cgaWYgaXQgZG9lc24ndC4KKyAgICAgICAgbGV0IHR5cGVGb3JB
bmQgPSBiYXNlVHlwZS5hcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChub2RlLm9yaWdpbik7CiAg
ICAgICAgIAotICAgICAgICBpZiAoc3RydWN0VHlwZSBpbnN0YW5jZW9mIFR5cGVSZWYpCi0gICAg
ICAgICAgICB1bmRlcmx5aW5nU3RydWN0ID0gdW5kZXJseWluZ1N0cnVjdC50eXBlOworICAgICAg
ICBsZXQgZXJyb3JGb3JHZXQ7CisgICAgICAgIGxldCBlcnJvckZvckFuZDsKKyAgICAgICAgCisg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVz
b2x2ZSgKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZUdldE92ZXJs
b2FkcywgdGhpcy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAg
ICAgICBub2RlLmdldEZ1bmNOYW1lLCBbXSwgW25vZGUuYmFzZV0uY29uY2F0KGV4dHJhQXJncyks
IFtiYXNlVHlwZV0uY29uY2F0KGV4dHJhQXJnVHlwZXMpLCBudWxsKTsKKyAgICAgICAgICAgIG5v
ZGUuY2FsbEZvckdldCA9IHJlc3VsdC5jYWxsOworICAgICAgICAgICAgbm9kZS5yZXN1bHRUeXBl
Rm9yR2V0ID0gcmVzdWx0LnJlc3VsdFR5cGU7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICB0
aHJvdyBlOworICAgICAgICAgICAgZXJyb3JGb3JHZXQgPSBlOworICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBpZiAoISh1bmRlcmx5aW5nU3RydWN0IGluc3RhbmNlb2YgU3RydWN0VHlwZSkp
Ci0gICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJp
bmcsICJPcGVyYW5kIHRvIGRvdCBleHByZXNzaW9uIGlzIG5vdCBhIHN0cnVjdCB0eXBlOiAiICsg
c3RydWN0VHlwZSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBsZXQgYmFzZUZvckFuZCA9
IGJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQobm9kZS5vcmlnaW4sIG5vZGUuYmFzZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBDYWxsRXhwcmVzc2lvbi5y
ZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLnBvc3NpYmxlQW5kT3Zl
cmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAg
ICAgICAgIG5vZGUuYW5kRnVuY05hbWUsIFtdLCBbYmFzZUZvckFuZF0uY29uY2F0KGV4dHJhQXJn
cyksIFt0eXBlRm9yQW5kXS5jb25jYXQoZXh0cmFBcmdUeXBlcyksCisgICAgICAgICAgICAgICAg
bnVsbCk7CisgICAgICAgICAgICBub2RlLmNhbGxGb3JBbmQgPSByZXN1bHQuY2FsbDsKKyAgICAg
ICAgICAgIG5vZGUucmVzdWx0VHlwZUZvckFuZCA9IHJlc3VsdC5yZXN1bHRUeXBlLnVuaWZ5Tm9k
ZS5yZXR1cm5UeXBlRnJvbUFuZE92ZXJsb2FkKG5vZGUub3JpZ2luKTsKKyAgICAgICAgfSBjYXRj
aCAoZSkgeworICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAg
ICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICBlcnJvckZvckFuZCA9IGU7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbm9kZS5yZXN1bHRUeXBlRm9yR2V0ICYmICFu
b2RlLnJlc3VsdFR5cGVGb3JBbmQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9y
KAorICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywKKyAgICAgICAgICAg
ICAgICAiQ2Fubm90IHJlc29sdmUgYWNjZXNzOyB0cmllZCBieS12YWx1ZTpcbiIgKworICAgICAg
ICAgICAgICAgIGVycm9yRm9yR2V0Lm1lc3NhZ2UgKyAiXG4iICsKKyAgICAgICAgICAgICAgICAi
YW5kIHRyaWVkIGJ5LXBvaW50ZXI6XG4iICsKKyAgICAgICAgICAgICAgICBlcnJvckZvckFuZC5t
ZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUucmVzdWx0VHlw
ZUZvckdldCAmJiBub2RlLnJlc3VsdFR5cGVGb3JBbmQKKyAgICAgICAgICAgICYmICFub2RlLnJl
c3VsdFR5cGVGb3JHZXQuZXF1YWxzKG5vZGUucmVzdWx0VHlwZUZvckFuZCkpCisgICAgICAgICAg
ICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJSZXN1bHQg
dHlwZSByZXNvbHZlZCBieS12YWx1ZSAoIiArIG5vZGUucmVzdWx0VHlwZUZvckdldCArICIpIGRv
ZXMgbm90IG1hdGNoIHJlc3VsdCB0eXBlIHJlc29sdmVkIGJ5LXBvaW50ZXIgKCIgKyBub2RlLnJl
c3VsdFR5cGVGb3JBbmQgKyAiKSIpOwogICAgICAgICAKLSAgICAgICAgaWYgKHN0cnVjdFR5cGUg
aW5zdGFuY2VvZiBUeXBlUmVmKSAKLSAgICAgICAgICAgIHVuZGVybHlpbmdTdHJ1Y3QgPSB1bmRl
cmx5aW5nU3RydWN0Lmluc3RhbnRpYXRlKHN0cnVjdFR5cGUudHlwZUFyZ3VtZW50cywgInNoYWxs
b3ciKTsKKyAgICAgICAgcmV0dXJuIG5vZGUucmVzdWx0VHlwZTsKKyAgICB9CisgICAgCisgICAg
dmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgc3RydWN0VHlwZSA9
IG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpLnVuaWZ5Tm9kZTsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2ZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3Mobm9kZSwgc3RydWN0VHlwZSwgW10sIFtdKTsK
KyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAg
ICAgIGxldCBhcnJheVR5cGUgPSBub2RlLmFycmF5LnZpc2l0KHRoaXMpLnVuaWZ5Tm9kZTsKKyAg
ICAgICAgbGV0IGluZGV4VHlwZSA9IG5vZGUuaW5kZXgudmlzaXQodGhpcyk7CiAgICAgICAgIAot
ICAgICAgICBsZXQgZmllbGQgPSB1bmRlcmx5aW5nU3RydWN0LmZpZWxkQnlOYW1lKG5vZGUuZmll
bGROYW1lKTsKLSAgICAgICAgaWYgKCFmaWVsZCkKLSAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkZpZWxkICIgKyBub2RlLmZpZWxkTmFt
ZSArICIgbm90IGZvdW5kIGluICIgKyBzdHJ1Y3RUeXBlKTsKLSAgICAgICAgcmV0dXJuIGZpZWxk
LnR5cGU7CisgICAgICAgIHJldHVybiB0aGlzLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNz
KG5vZGUsIGFycmF5VHlwZSwgW25vZGUuaW5kZXhdLCBbaW5kZXhUeXBlXSk7CiAgICAgfQogICAg
IAogICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQpAQCAtMzIyLDcgKzM2Niw3IEBAIGNsYXNz
IENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGV4cHJlc3Np
b24udmlzaXQodGhpcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotCisgICAgCiAg
ICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHR5cGVBcmd1
bWVudFR5cGVzID0gbm9kZS50eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJndW1lbnQgPT4gdHlwZUFy
Z3VtZW50LnZpc2l0KHRoaXMpKTsKQEAgLTMzMyw3NyArMzc3LDExIEBAIGNsYXNzIENoZWNrZXIg
ZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgIHJldHVybiBuZXdBcmd1bWVudC52aXNpdChu
ZXcgQXV0b1dyYXBwZXIoKSk7CiAgICAgICAgIH0pOwogICAgICAgICAKLSAgICAgICAgLy8gSGVy
ZSB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgb3BlcmF0b3ImW10gaXMgY2FsbGVk
IHdpdGggYSB0eXBlIHRoYXQgaXNuJ3Qgc3VmZmljaWVudGx5Ci0gICAgICAgIC8vIHJlZmVyZW5j
ZXkuCi0gICAgICAgIGlmIChub2RlLm5hbWUgPT0gIm9wZXJhdG9yJltdIikgewotICAgICAgICAg
ICAgbGV0IGFyZ1R5cGUgPSBhcmd1bWVudFR5cGVzWzBdLnVuaWZ5Tm9kZTsKLSAgICAgICAgICAg
IGlmIChhcmdUeXBlIGluc3RhbmNlb2YgUHRyVHlwZSkKLSAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJQb2ludGVyIHN1YnNjcmlw
dCBpcyBub3QgdmFsaWQiKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFyZ1R5cGUg
aW5zdGFuY2VvZiBBcnJheVR5cGUpIHsKLSAgICAgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlz
dFswXSA9IG5ldyBNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmFyZ3Vt
ZW50TGlzdFswXSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0ubnVtRWxl
bWVudHMgPSBhcmdUeXBlLm51bUVsZW1lbnRzOwotICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlw
ZXNbMF0gPSBuZXcgQXJyYXlSZWZUeXBlKG5vZGUub3JpZ2luLCAidGhyZWFkIiwgYXJnVHlwZS5l
bGVtZW50VHlwZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEoYXJnVHlwZSBpbnN0YW5jZW9m
IEFycmF5UmVmVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdFswXSA9
IG5ldyBNYWtlUHRyRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5hcmd1bWVudExpc3RbMF0p
OwotICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlwZXNbMF0gPSBuZXcgUHRyVHlwZShub2RlLm9y
aWdpbiwgInRocmVhZCIsIGFyZ3VtZW50VHlwZXNbMF0pOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAogICAgICAgICBub2RlLmFyZ3VtZW50VHlwZXMgPSBhcmd1bWVudFR5cGVz
OwogICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQogICAgICAgICAgICAgbm9kZS5yZXR1cm5U
eXBlLnZpc2l0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgbGV0IG92ZXJsb2FkID0gbnVsbDsK
LSAgICAgICAgbGV0IGZhaWx1cmVzID0gW107Ci0gICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0
ZXIgb2YgdGhpcy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycykgewotICAgICAgICAg
ICAgaWYgKCEodHlwZVBhcmFtZXRlciBpbnN0YW5jZW9mIFR5cGVWYXJpYWJsZSkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXR5cGVQYXJhbWV0ZXIucHJvdG9j
b2wpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBsZXQgc2lnbmF0dXJl
cyA9Ci0gICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5wcm90b2NvbC5wcm90b2NvbERlY2wu
c2lnbmF0dXJlc0J5TmFtZVdpdGhUeXBlVmFyaWFibGUobm9kZS5uYW1lLCB0eXBlUGFyYW1ldGVy
KTsKLSAgICAgICAgICAgIGlmICghc2lnbmF0dXJlcykKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIG92ZXJsb2FkID0gcmVzb2x2ZU92ZXJsb2FkSW1wbChzaWduYXR1cmVz
LCBub2RlLnR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIG5vZGUucmV0dXJuVHlwZSk7Ci0g
ICAgICAgICAgICBpZiAob3ZlcmxvYWQuZnVuYykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGZhaWx1cmVzLnB1c2goLi4ub3ZlcmxvYWQuZmFpbHVyZXMpOwotICAgICAgICAg
ICAgb3ZlcmxvYWQgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmICghb3ZlcmxvYWQpIHsK
LSAgICAgICAgICAgIG92ZXJsb2FkID0gcmVzb2x2ZU92ZXJsb2FkSW1wbCgKLSAgICAgICAgICAg
ICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzLCBub2RlLnR5cGVBcmd1bWVudHMsIGFyZ3VtZW50
VHlwZXMsIG5vZGUucmV0dXJuVHlwZSk7Ci0gICAgICAgICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMp
IHsKLSAgICAgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsK
LSAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICJEaWQgbm90IGZpbmQgZnVuY3Rpb24gZm9y
IGNhbGwgd2l0aCAiOwotICAgICAgICAgICAgICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMubGVu
Z3RoKQotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJ0eXBlIGFyZ3VtZW50cyA8IiAr
IG5vZGUudHlwZUFyZ3VtZW50cyArICI+IGFuZCAiOwotICAgICAgICAgICAgICAgIG1lc3NhZ2Ug
Kz0gImFyZ3VtZW50IHR5cGVzICgiICsgYXJndW1lbnRUeXBlcyArICIpIjsKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9
IiBhbmQgcmV0dXJuIHR5cGUgIiArIG5vZGUucmV0dXJuVHlwZTsKLSAgICAgICAgICAgICAgICBp
ZiAoZmFpbHVyZXMubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIsIGJ1
dCBjb25zaWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKLSAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1lc3NhZ2UpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlw
ZUFyZ3VtZW50VHlwZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGxldCB0eXBlQXJndW1l
bnRUeXBlID0gdHlwZUFyZ3VtZW50VHlwZXNbaV07Ci0gICAgICAgICAgICBsZXQgdHlwZVBhcmFt
ZXRlciA9IG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnNbaV07Ci0gICAgICAgICAgICBpZiAo
ISh0eXBlUGFyYW1ldGVyIGluc3RhbmNlb2YgQ29uc3RleHByVHlwZVBhcmFtZXRlcikpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXR5cGVQYXJhbWV0ZXIudHlw
ZS5lcXVhbHNXaXRoQ29tbWl0KHR5cGVBcmd1bWVudFR5cGUpKQotICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyArICIgY29uc3Rl
eHByIHR5cGUgYXJndW1lbnQgYW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWw6IGFyZ3VtZW50
ID0gIiArIHR5cGVBcmd1bWVudFR5cGUgKyAiLCBwYXJhbWV0ZXIgPSAiICsgdHlwZVBhcmFtZXRl
ci50eXBlKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50
VHlwZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGxldCBhcmd1bWVudFR5cGUgPSBhcmd1
bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0IHBhcmFtZXRlclR5cGUgPSBvdmVybG9hZC5m
dW5jLnBhcmFtZXRlcnNbaV0udHlwZS5zdWJzdGl0dXRlVG9VbmlmaWNhdGlvbigKLSAgICAgICAg
ICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlv
bkNvbnRleHQpOwotICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGFyZ3VtZW50VHlwZS5lcXVhbHNX
aXRoQ29tbWl0KHBhcmFtZXRlclR5cGUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdCAiICsgbm9kZS5vcmlnaW4ub3JpZ2luU3Ry
aW5nICsgIiBhcmd1bWVudCBhbmQgcGFyYW1ldGVyIHR5cGVzIG5vdCBlcXVhbCBhZnRlciB0eXBl
IGFyZ3VtZW50IHN1YnN0aXR1dGlvbjogYXJndW1lbnQgPSAiICsgYXJndW1lbnRUeXBlICsgIiwg
cGFyYW1ldGVyID0gIiArIHBhcmFtZXRlclR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBub2RlLnJlc29sdmUob3ZlcmxvYWQpOworCisgICAgICAgIHJldHVybiBub2RlLnJlc29sdmUo
bm9kZS5wb3NzaWJsZU92ZXJsb2FkcywgdGhpcy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFyYW1l
dGVycyk7CiAgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9E
b3RFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0RvdEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0RvdEV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcg
KzI0LDcgQEAKICAqLwogInVzZSBzdHJpY3QiOwogCi1jbGFzcyBEb3RFeHByZXNzaW9uIGV4dGVu
ZHMgRXhwcmVzc2lvbiB7CitjbGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgUHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uIHsKICAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIHN0cnVjdCwgZmllbGROYW1l
KQogICAgIHsKICAgICAgICAgc3VwZXIob3JpZ2luKTsKQEAgLTMyLDExICszMiwxNiBAQCBjbGFz
cyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgICAgICAgIHRoaXMuX2ZpZWxk
TmFtZSA9IGZpZWxkTmFtZTsKICAgICB9CiAgICAgCisgICAgZ2V0IGJhc2UoKSB7IHJldHVybiB0
aGlzLnN0cnVjdDsgfQogICAgIGdldCBzdHJ1Y3QoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3Q7IH0K
ICAgICBnZXQgZmllbGROYW1lKCkgeyByZXR1cm4gdGhpcy5fZmllbGROYW1lOyB9CiAgICAgZ2V0
IGlzTFZhbHVlKCkgeyByZXR1cm4gdGhpcy5zdHJ1Y3QuaXNMVmFsdWU7IH0KICAgICBnZXQgYWRk
cmVzc1NwYWNlKCkgeyByZXR1cm4gdGhpcy5zdHJ1Y3QuYWRkcmVzc1NwYWNlOyB9CiAgICAgCisg
ICAgZ2V0IGdldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFt
ZTsgfQorICAgIGdldCBhbmRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvciYuIiArIHRoaXMu
ZmllbGROYW1lOyB9CisgICAgZ2V0IHNldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIg
KyB0aGlzLmZpZWxkTmFtZSArICI9IjsgfQorICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiAiKCIgKyB0aGlzLnN0cnVjdCArICIuIiArIHRoaXMuZmllbGROYW1lICsg
IikiOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0luc3RhbnRpYXRv
ci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5z
dGFudGlhdG9yLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3
IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAgICAgICAgICAgICAgICAgICBsZXQgb3Zl
cmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHJlc3VsdC5wb3NzaWJsZU92ZXJsb2FkcywgcmVz
dWx0LnR5cGVBcmd1bWVudHMsIHJlc3VsdC5hcmd1bWVudFR5cGVzLCByZXN1bHQucmV0dXJuVHlw
ZUZvck92ZXJsb2FkUmVzb2x1dGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghb3Zlcmxv
YWQuZnVuYykKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQg
bm90IHJlc29sdmUgcHJvdG9jb2wgc2lnbmF0dXJlIGZ1bmN0aW9uIGNhbGwgZHVyaW5nIGluc3Rh
bnRpYXRpb246ICIgKyByZXN1bHQuZnVuYyArIChvdmVybG9hZC5mYWlsdXJlcy5sZW5ndGggPyAi
OyB0cmllZDpcbiIgKyBvdmVybG9hZC5mYWlsdXJlcy5qb2luKCJcbiIpIDogIiIpKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmUob3ZlcmxvYWQpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQucmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZGV4RXhwcmVzc2lvbi5q
cwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmRleEV4
cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBJ
bmRleEV4cHJlc3Npb24gZXh0ZW5kcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24geworICAgIGNv
bnN0cnVjdG9yKG9yaWdpbiwgYXJyYXksIGluZGV4KQorICAgIHsKKyAgICAgICAgc3VwZXIob3Jp
Z2luKTsKKyAgICAgICAgdGhpcy5fYXJyYXkgPSBhcnJheTsKKyAgICAgICAgdGhpcy5faW5kZXgg
PSBpbmRleDsKKyAgICB9CisgICAgCisgICAgZ2V0IGJhc2UoKSB7IHJldHVybiB0aGlzLmFycmF5
OyB9CisgICAgZ2V0IGFycmF5KCkgeyByZXR1cm4gdGhpcy5fYXJyYXk7IH0KKyAgICBnZXQgaW5k
ZXgoKSB7IHJldHVybiB0aGlzLl9pbmRleDsgfQorICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJu
IHRoaXMuYXJyYXkuaXNMVmFsdWU7IH0KKyAgICBnZXQgYWRkcmVzc1NwYWNlKCkgeyByZXR1cm4g
dGhpcy5hcnJheS5hZGRyZXNzU3BhY2U7IH0KKyAgICAKKyAgICBnZXQgZ2V0RnVuY05hbWUoKSB7
IHJldHVybiAib3BlcmF0b3JbXSI7IH0KKyAgICBnZXQgYW5kRnVuY05hbWUoKSB7IHJldHVybiAi
b3BlcmF0b3ImW10iOyB9CisgICAgZ2V0IHNldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9y
W109IjsgfQorCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICIoIiArIHRo
aXMuYXJyYXkgKyAiWyIgKyB0aGlzLmluZGV4ICsgIl0pIjsKKyAgICB9Cit9CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVzRm9yQ2FsbC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVzRm9yQ2FsbC5qcwko
cmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJU
eXBlc0ZvckNhbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgZnVuY3Rpb24g
aW5mZXJUeXBlc0ZvckNhbGwoZnVuYywgdHlwZUFyZwogICAgICAgICBpZiAoIWFyZ3VtZW50VHlw
ZXNbaV0pCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgYXJndW1lbnQgdHlwZSBh
dCBpID0gIiArIGkpOwogICAgICAgICBpZiAoIWFyZ3VtZW50VHlwZXNbaV0udW5pZnkodW5pZmlj
YXRpb25Db250ZXh0LCBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSkpCi0gICAgICAgICAgICByZXR1
cm4ge2ZhaWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJBcmd1bWVu
dCAjIiArIChpICsgMSkgKyAiICIgKyAoZnVuYy5wYXJhbWV0ZXJzW2ldLm5hbWUgPyAiZm9yIHBh
cmFtZXRlciAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLm5hbWUgOiAiIikgKyAiIGRvZXMgbm90IG1h
dGNoIChwYXNzZWQgIiArIGFyZ3VtZW50VHlwZXNbaV0gKyAiLCByZXF1aXJlICIgKyBmdW5jLnBh
cmFtZXRlcnNbaV0udHlwZSArICIpIil9OworICAgICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBu
ZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAoaSArIDEp
ICsgIiAiICsgKGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIgIiArIGZ1
bmMucGFyYW1ldGVyc1tpXS5uYW1lICsgIiAiIDogIiIpICsgImRvZXMgbm90IG1hdGNoIChwYXNz
ZWQgIiArIGFyZ3VtZW50VHlwZXNbaV0gKyAiLCByZXF1aXJlICIgKyBmdW5jLnBhcmFtZXRlcnNb
aV0udHlwZSArICIpIil9OwogICAgIH0KICAgICBpZiAocmV0dXJuVHlwZSAmJiAhcmV0dXJuVHlw
ZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIGZ1bmMucmV0dXJuVHlwZSkpCiAgICAgICAgIHJl
dHVybiB7ZmFpbHVyZTogbmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIlJldHVy
biB0eXBlICIgKyBmdW5jLnJldHVyblR5cGUgKyAiIGRvZXMgbm90IG1hdGNoICIgKyByZXR1cm5U
eXBlKX07CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29s
dmVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9OYW1lUmVzb2x2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw2ICsyNTgsMjggQEAgY2xh
c3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHN1cGVyLnZpc2l0UmV0
dXJuKG5vZGUpOwogICAgIH0KICAgICAKKyAgICBfaGFuZGxlUHJvcGVydHlBY2Nlc3Mobm9kZSkK
KyAgICB7CisgICAgICAgIG5vZGUucG9zc2libGVHZXRPdmVybG9hZHMgPSBub2RlLl9uYW1lQ29u
dGV4dC5nZXQoRnVuYywgbm9kZS5nZXRGdW5jTmFtZSk7CisgICAgICAgIG5vZGUucG9zc2libGVT
ZXRPdmVybG9hZHMgPSBub2RlLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgbm9kZS5zZXRGdW5jTmFt
ZSk7CisgICAgICAgIG5vZGUucG9zc2libGVBbmRPdmVybG9hZHMgPSBub2RlLl9uYW1lQ29udGV4
dC5nZXQoRnVuYywgbm9kZS5hbmRGdW5jTmFtZSk7CisKKyAgICAgICAgaWYgKCFub2RlLnBvc3Np
YmxlR2V0T3ZlcmxvYWRzICYmICFub2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzKQorICAgICAgICAg
ICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90
IGZpbmQgZWl0aGVyICIgKyBub2RlLmdldEZ1bmNOYW1lICsgIiBvciAiICsgbm9kZS5hbmRGdW5j
TmFtZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIHsK
KyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAgICAgIHN1cGVy
LnZpc2l0RG90RXhwcmVzc2lvbihub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4
cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNz
KG5vZGUpOworICAgICAgICBzdXBlci52aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKTsKKyAgICB9
CisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgdGhp
cy5fcmVzb2x2ZVR5cGVBcmd1bWVudHMobm9kZS50eXBlQXJndW1lbnRzKTsKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQCBjbGFzcyBOb2RlIHsKICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gdmlzaXRGdW5j
LmNhbGwodmlzaXRvciwgdGhpcyk7CiAgICAgICAgIGlmICgicmV0dXJuVmFsdWUiIGluIHZpc2l0
b3IpCiAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHZpc2l0b3IucmV0dXJuVmFsdWU7CisgICAg
ICAgIAogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogICAgIApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9w
ZXJ0eVJlc29sdmVyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL05vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
InVzZSBzdHJpY3QiOworCitjbGFzcyBOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyIGV4dGVuZHMg
UmV3cml0ZXIgeworICAgIF9yZXdyaXRlUHJvcGVydHlBY2Nlc3Mobm9kZSkKKyAgICB7CisgICAg
ICAgIC8vIEF0IHRoaXMgcG9pbnQsIG5vZGUuYmFzZS5pc0xWYWx1ZSB3aWxsIG9ubHkgcmV0dXJu
IHRydWUgaWYgaXQncyBwb3NzaWJsZSB0byBnZXQgYSBwb2ludGVyIHRvIGl0LAorICAgICAgICAv
LyBzaW5jZSB3ZSB3aWxsIG5vIGxvbmdlciBzZWUgYW55IERvdEV4cHJlc3Npb25zIG9yIEluZGV4
RXhwcmVzc2lvbnMuIEFsc28sIG5vZGUgaXMgYSBuZXdseSBjcmVhdGVkCisgICAgICAgIC8vIG5v
ZGUgYW5kIGV2ZXJ5dGhpbmcgYmVuZWF0aCBpdCBpcyBuZXdseSBjcmVhdGVkLCBzbyB3ZSBjYW4g
ZWRpdCBpdCBpbi1wbGFjZS4KKyAgICAgICAgCisgICAgICAgIGlmICgobm9kZS5iYXNlLmlzTFZh
bHVlIHx8IG5vZGUuYmFzZVR5cGUuaXNSZWYpICYmIG5vZGUuY2FsbEZvckFuZCkKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmNh
bGxGb3JBbmQpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUuY2FsbEZvckFuZCkgeworICAg
ICAgICAgICAgbGV0IGFub25WYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4s
IG5vZGUuYmFzZVR5cGUpOworICAgICAgICAgICAgbm9kZS5jYWxsRm9yQW5kLmFyZ3VtZW50TGlz
dFswXSA9IG5vZGUuYmFzZVR5cGUudW5pZnlOb2RlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQobm9k
ZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAoYW5vblZhcikpOworICAgICAgICAgICAgcmV0dXJu
IG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIFsKKyAgICAgICAgICAgICAgICBhbm9u
VmFyLAorICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBWYXJpYWJs
ZVJlZi53cmFwKGFub25WYXIpLCBub2RlLmJhc2UsIG5vZGUuYmFzZVR5cGUpLAorICAgICAgICAg
ICAgICAgIG5vZGUuY2FsbEZvckFuZAorICAgICAgICAgICAgXSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBub2RlLmNhbGxGb3JHZXQ7CisgICAgfQorICAgIAorICAgIHZp
c2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jld3Jp
dGVQcm9wZXJ0eUFjY2VzcyhzdXBlci52aXNpdERvdEV4cHJlc3Npb24obm9kZSkpOworICAgIH0K
KyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3Jld3JpdGVQcm9wZXJ0eUFjY2VzcyhzdXBlci52aXNpdEluZGV4RXhwcmVzc2lv
bihub2RlKSk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9QYXJzZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Q
YXJzZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUGFyc2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw5ICszMzcsOSBAQCBmdW5jdGlvbiBw
YXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgIH0pOwogICAgIH0KICAgICAK
LSAgICBmdW5jdGlvbiBlbWl0SW5jcmVtZW50KHRva2VuLCBwdHIsIGV4dHJhQXJnKQorICAgIGZ1
bmN0aW9uIGVtaXRJbmNyZW1lbnQodG9rZW4sIG9sZCwgZXh0cmFBcmcpCiAgICAgewotICAgICAg
ICBsZXQgYXJncyA9IFtuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJl
Zi53cmFwKHB0cikpXTsKKyAgICAgICAgbGV0IGFyZ3MgPSBbb2xkXTsKICAgICAgICAgaWYgKGV4
dHJhQXJnKQogICAgICAgICAgICAgYXJncy5wdXNoKGV4dHJhQXJnKTsKICAgICAgICAgCkBAIC0z
NTAsMjcgKzM1MCwxNSBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktp
CiAgICAgICAgIGlmIChuYW1lID09ICJvcGVyYXRvciIpCiAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkludmFsaWQgbmFtZTogIiArIG5hbWUpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJu
IG5ldyBBc3NpZ25tZW50KAotICAgICAgICAgICAgdG9rZW4sCi0gICAgICAgICAgICBuZXcgRGVy
ZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpLAotICAgICAg
ICAgICAgbmV3IENhbGxFeHByZXNzaW9uKHRva2VuLCBuYW1lLCBbXSwgYXJncykpOworICAgICAg
ICByZXR1cm4gbmV3IENhbGxFeHByZXNzaW9uKHRva2VuLCBuYW1lLCBbXSwgYXJncyk7CiAgICAg
fQogICAgIAogICAgIGZ1bmN0aW9uIGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KHRva2VuLCBs
ZWZ0KQogICAgIHsKLSAgICAgICAgbGV0IHB0ciA9IG5ldyBMZXRFeHByZXNzaW9uKHRva2VuKTsK
LSAgICAgICAgcHRyLmFyZ3VtZW50ID0gbmV3IE1ha2VQdHJFeHByZXNzaW9uKHRva2VuLCBsZWZ0
KTsKLSAgICAgICAgCi0gICAgICAgIGxldCBvbGRWYWx1ZSA9IG5ldyBMZXRFeHByZXNzaW9uKHRv
a2VuKTsKLSAgICAgICAgb2xkVmFsdWUuYXJndW1lbnQgPSBuZXcgRGVyZWZlcmVuY2VFeHByZXNz
aW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpOwotICAgICAgICAKLSAgICAgICAgcHRy
LmJvZHkgPSBvbGRWYWx1ZTsKLSAgICAgICAgCi0gICAgICAgIG9sZFZhbHVlLmJvZHkgPSBuZXcg
Q29tbWFFeHByZXNzaW9uKHRva2VuLCBbCi0gICAgICAgICAgICBlbWl0SW5jcmVtZW50KHRva2Vu
LCBwdHIpLAotICAgICAgICAgICAgVmFyaWFibGVSZWYud3JhcChvbGRWYWx1ZSkKLSAgICAgICAg
XSk7Ci0gICAgICAgIHJldHVybiBwdHI7CisgICAgICAgIGxldCByZWFkTW9kaWZ5V3JpdGUgPSBu
ZXcgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7CisgICAgICAgIHJlYWRN
b2RpZnlXcml0ZS5uZXdWYWx1ZUV4cCA9IGVtaXRJbmNyZW1lbnQodG9rZW4sIHJlYWRNb2RpZnlX
cml0ZS5vbGRWYWx1ZVJlZigpKTsKKyAgICAgICAgcmVhZE1vZGlmeVdyaXRlLnJlc3VsdEV4cCA9
IHJlYWRNb2RpZnlXcml0ZS5vbGRWYWx1ZVJlZigpOworICAgICAgICByZXR1cm4gcmVhZE1vZGlm
eVdyaXRlOwogICAgIH0KICAgICAKICAgICBmdW5jdGlvbiBwYXJzZVBvc3NpYmxlU3VmZml4KCkK
QEAgLTQwOSwxMyArMzk3LDEwIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3Jp
Z2luS2kKICAgICAKICAgICBmdW5jdGlvbiBmaW5pc2hQYXJzaW5nUHJlSW5jcmVtZW50KHRva2Vu
LCBsZWZ0LCBleHRyYUFyZykKICAgICB7Ci0gICAgICAgIGxldCBwdHIgPSBuZXcgTGV0RXhwcmVz
c2lvbih0b2tlbik7Ci0gICAgICAgIHB0ci5hcmd1bWVudCA9IG5ldyBNYWtlUHRyRXhwcmVzc2lv
bih0b2tlbiwgbGVmdCk7Ci0gICAgICAgIHB0ci5ib2R5ID0gbmV3IENvbW1hRXhwcmVzc2lvbih0
b2tlbiwgWwotICAgICAgICAgICAgZW1pdEluY3JlbWVudCh0b2tlbiwgcHRyLCBleHRyYUFyZyks
Ci0gICAgICAgICAgICBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJl
Zi53cmFwKHB0cikpCi0gICAgICAgIF0pOwotICAgICAgICByZXR1cm4gcHRyOworICAgICAgICBs
ZXQgcmVhZE1vZGlmeVdyaXRlID0gbmV3IFJlYWRNb2RpZnlXcml0ZSh0b2tlbiwgbGVmdCk7Cisg
ICAgICAgIHJlYWRNb2RpZnlXcml0ZS5uZXdWYWx1ZUV4cCA9IGVtaXRJbmNyZW1lbnQodG9rZW4s
IHJlYWRNb2RpZnlXcml0ZS5vbGRWYWx1ZVJlZigpLCBleHRyYUFyZyk7CisgICAgICAgIHJlYWRN
b2RpZnlXcml0ZS5yZXN1bHRFeHAgPSByZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVSZWYoKTsKKyAg
ICAgICAgcmV0dXJuIHJlYWRNb2RpZnlXcml0ZTsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24g
cGFyc2VQcmVJbmNyZW1lbnQoKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcwkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBQcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKKyAgICBnZXQgcmVzdWx0VHlw
ZSgpIHsgcmV0dXJuIHRoaXMucmVzdWx0VHlwZUZvckdldCA/IHRoaXMucmVzdWx0VHlwZUZvckdl
dCA6IHRoaXMucmVzdWx0VHlwZUZvckFuZDsgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDE5IEBAIGNsYXNzIFB0clR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlIHsKICAgICAgICAgcmV0
dXJuIHRoaXMuZWxlbWVudFR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5lbGVt
ZW50VHlwZSk7CiAgICAgfQogICAgIAorICAgIGFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQob3JpZ2lu
LCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmln
aW5TdHJpbmcsICJQb2ludGVyIHN1YnNjcmlwdCBpcyBub3QgdmFsaWQiKTsKKyAgICB9CisgICAg
YXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQob3JpZ2luLCB0eXBlKQorICAgIHsKKyAgICAgICAg
dGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIlBvaW50ZXIgc3Vic2Ny
aXB0IGlzIG5vdCB2YWxpZCIpOworICAgIH0KKyAgICByZXR1cm5UeXBlRnJvbUFuZE92ZXJsb2Fk
KG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlOworICAgIH0K
KwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBl
ICsgIl4gIiArIHRoaXMuYWRkcmVzc1NwYWNlOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzCShu
b25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitj
bGFzcyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uIGV4dGVuZHMgVmFsdWUgeworICAgIGNvbnN0
cnVjdG9yKG9yaWdpbiwgbFZhbHVlKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAg
dGhpcy5fb3JpZ2luID0gb3JpZ2luOworICAgICAgICB0aGlzLl9sVmFsdWUgPSBsVmFsdWU7Cisg
ICAgICAgIHRoaXMub2xkVmFsdWVWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUob3JpZ2luKTsK
KyAgICAgICAgdGhpcy5uZXdWYWx1ZVZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShvcmlnaW4p
OworICAgICAgICB0aGlzLnB0clZhciA9IG51bGw7CisgICAgICAgIHRoaXMucHJlcGFyZSA9IG51
bGw7CisgICAgICAgIHRoaXMubmV3VmFsdWVFeHAgPSBudWxsOworICAgICAgICB0aGlzLmZpbmlz
aCA9IG51bGw7CisgICAgICAgIHRoaXMucmVzdWx0RXhwID0gbnVsbDsKKyAgICB9CisgICAgCisg
ICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAgIGdldCBsVmFsdWUo
KSB7IHJldHVybiB0aGlzLl9sVmFsdWU7IH0KKyAgICAKKyAgICBvbGRWYWx1ZVJlZigpIHsgcmV0
dXJuIFZhcmlhYmxlUmVmLndyYXAodGhpcy5vbGRWYWx1ZVZhcik7IH0KKyAgICBuZXdWYWx1ZVJl
ZigpIHsgcmV0dXJuIFZhcmlhYmxlUmVmLndyYXAodGhpcy5uZXdWYWx1ZVZhcik7IH0KKyAgICAK
KyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIlJNVygiICsgdGhpcy5sVmFs
dWUgKyAiLCAiICsgdGhpcy5vbGRWYWx1ZVZhciArICIsICIgKyB0aGlzLm5ld1ZhbHVlVmFyICsg
IiwgIiArIHRoaXMubmV3VmFsdWVFeHAgKyAiLCAiICsgdGhpcy5yZXN1bHRFeHAgKyAiKSI7Cisg
ICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5q
cwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3
cml0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsMTAgQEAgY2xhc3MgUmV3cml0
ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgIHJlc3VsdC5zdHJ1Y3RUeXBlID0gbm9k
ZS5zdHJ1Y3RUeXBlID8gbm9kZS5zdHJ1Y3RUeXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKICAgICAg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXdyaXRlIGZpZWxkLCBzaW5jZSB0aGlzIGlzIGEgZGVl
cCByZWZlcmVuY2UgZ29pbmcgb3V0IG9mIHRoZSBmdW5jdGlvbi4KICAgICAgICAgLy8gQWxzbywg
dGhpcyBpcyBzZXQgdXAgZHVyaW5nIGlubGluaW5nLCBzbyB3ZSdyZSBhbHJlYWR5IGZ1bGx5IG1v
bm9tb3JwaGlzZWQuCisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBjb3B5
IHRoZSBjYWxsRm9yR2V0L2NhbGxGb3JBbmQsIGFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0
IHRoZSByZXN1bHQgaGFzCisgICAgICAgIC8vIGV4YWN0bHkgdGhlIHJpZ2h0IGFyZ3VtZW50TGlz
dC4gVGhpcyBtZWFucyByZWJ1aWxkaW5nIHRoZSBhcmd1bWVudEZvckFuZE92ZXJsb2FkIHRoaW5n
LgorICAgICAgICAKICAgICAgICAgcmVzdWx0LmZpZWxkID0gbm9kZS5maWVsZDsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TdHJ1Y3RUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1N0cnVjdFR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgY2xhc3MgU3RydWN0VHlwZSBleHRlbmRzIFR5cGUgewogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAKLSAgICBpbnN0YW50aWF0ZSh0eXBlQXJndW1lbnRzLCBtb2RlKQorICAg
IGluc3RhbnRpYXRlKHR5cGVBcmd1bWVudHMpCiAgICAgewogICAgICAgICBpZiAodHlwZUFyZ3Vt
ZW50cy5sZW5ndGggIT0gdGhpcy50eXBlUGFyYW1ldGVycy5sZW5ndGgpCiAgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiV3JvbmcgbnVtYmVyIG9m
IHR5cGUgYXJndW1lbnRzIHRvIGluc3RhbnRpYXRpb24iKTsKQEAgLTY2LDEyICs2NiwxMSBAQCBj
bGFzcyBTdHJ1Y3RUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsK
ICAgICAgICAgCiAgICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBuZXcgU3Vic3RpdHV0aW9uKHRo
aXMudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOwotICAgICAgICBsZXQgaW5zdGFudGlh
dGVJbW1lZGlhdGVzID0gbW9kZSA9PSAic2hhbGxvdyIgPyBudWxsIDogbmV3IEluc3RhbnRpYXRl
SW1tZWRpYXRlcygpOworICAgICAgICBsZXQgaW5zdGFudGlhdGVJbW1lZGlhdGVzID0gbmV3IElu
c3RhbnRpYXRlSW1tZWRpYXRlcygpOwogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFN0cnVjdFR5
cGUodGhpcy5vcmlnaW4sIHRoaXMubmFtZSwgW10pOwogICAgICAgICBmb3IgKGxldCBmaWVsZCBv
ZiB0aGlzLmZpZWxkcykgewogICAgICAgICAgICAgbGV0IG5ld0ZpZWxkID0gZmllbGQudmlzaXQo
c3Vic3RpdHV0aW9uKTsKLSAgICAgICAgICAgIGlmIChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpCi0g
ICAgICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC52aXNpdChpbnN0YW50aWF0ZUltbWVk
aWF0ZXMpOworICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC52aXNpdChpbnN0YW50aWF0
ZUltbWVkaWF0ZXMpOwogICAgICAgICAgICAgcmVzdWx0LmFkZChuZXdGaWVsZCk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1R5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVHlwZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQCBjbGFzcyBUeXBl
IGV4dGVuZHMgTm9kZSB7CiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBUeXBlOyB9CiAgICAgZ2V0
IGlzUHRyKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNBcnJheVJlZigpIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgZ2V0IGlzUmVmKCkgeyByZXR1cm4gdGhpcy5pc1B0ciB8fCB0aGlzLmlz
QXJyYXlSZWY7IH0KICAgICBnZXQgaXNOdW1iZXIoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGdl
dCBpc0ludCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzRmxvYXQoKSB7IHJldHVybiBm
YWxzZTsgfQpAQCAtNDEsNSArNDIsMTkgQEAgY2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewogICAg
IH0KICAgICAKICAgICBnZXQgaW5zdGFudGlhdGVkVHlwZSgpIHsgcmV0dXJuIHRoaXMudmlzaXQo
bmV3IEluc3RhbnRpYXRlSW1tZWRpYXRlcygpKTsgfQorICAgIAorICAgIC8vIEhhdmUgdG8gY2Fs
bCB0aGVzZSBvbiB0aGUgdW5pZnlOb2RlLgorICAgIGFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQob3Jp
Z2luLCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgTWFrZVB0ckV4cHJlc3Npb24o
b3JpZ2luLCB2YWx1ZSk7CisgICAgfQorICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9y
aWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUHRyVHlwZShvcmlnaW4sICJ0aHJlYWQi
LCB0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChvcmlnaW4pCisg
ICAgeworICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAi
QnktcG9pbnRlciBvdmVybG9hZCByZXR1cm5lZCBub24tcG9pbnRlciB0eXBlOiAiICsgdGhpcyk7
CisgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYWx1ZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYWx1ZS5qcwko
cmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUu
anMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDUgKzI4LDEyIEBAIGNsYXNzIFZhbHVlIGV4dGVuZHMg
Tm9kZSB7CiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBWYWx1ZTsgfQogICAgIGdldCBpc0NvbnN0
ZXhwcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICAKKyAgICBiZWNvbWUob3RoZXJWYWx1ZSkKKyAgICB7CisgICAgICAgIC8vIE5P
VEU6IE1ha2Ugc3VyZSB0aGF0IElkZW50aXR5RXhwcmVzc2lvbiBpbXBsZW1lbnRzIHVuaWZ5Tm9k
ZSBhbmQgYWxsIHRoYXQKKyAgICAgICAgdGhpcy5fX3Byb3RvX18gPSBJZGVudGl0eUV4cHJlc3Np
b24ucHJvdG90eXBlOworICAgICAgICB0aGlzLnRhcmdldCA9IG90aGVyVmFsdWU7CisgICAgfQog
fQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZVJlZi5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZVJlZi5q
cwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFy
aWFibGVSZWYuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSw5IEBAIGNsYXNzIFZhcmlh
YmxlUmVmIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgICAgCiAgICAgZ2V0IG5hbWUoKSB7IHJldHVy
biB0aGlzLl9uYW1lOyB9CiAgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdGhpcy52YXJp
YWJsZS5pc0NvbnN0ZXhwcjsgfQotICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlzLnZh
cmlhYmxlLnVuaWZ5Tm9kZTsgfQorICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlzLnZh
cmlhYmxlLnVuaWZ5Tm9kZTsgfSAvLyBUaGlzIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB0aGlzIGlz
IGEgY29uc3RleHByLgogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBn
ZXQgYWRkcmVzc1NwYWNlKCkgeyByZXR1cm4gInRocmVhZCI7IH0KLSAgICBnZXQgdW5pZnlOb2Rl
KCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZTsgfQogICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321010</attachid>
            <date>2017-09-16 14:08:39 -0700</date>
            <delta_ts>2017-09-16 16:19:04 -0700</delta_ts>
            <desc>most of it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>69649</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksNiBAQCBsb2FkKCJUeXBlLmpzIik7CiBsb2FkKCJSZWZlcmVuY2VUeXBlLmpz
Iik7CiBsb2FkKCJWYWx1ZS5qcyIpOwogbG9hZCgiRXhwcmVzc2lvbi5qcyIpOwotbG9hZCgiVmlz
aXRvckJhc2UuanMiKTsKIGxvYWQoIlJld3JpdGVyLmpzIik7CiBsb2FkKCJWaXNpdG9yLmpzIik7
CiBsb2FkKCJDcmVhdGVMaXRlcmFsLmpzIik7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwkobm9uZXhpc3RlbnQpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2xldCBhbm9ueW1vdXNWYXJpYWJsZUNvdW50
ID0gMDsKKworY2xhc3MgQW5vbnltb3VzVmFyaWFibGUgZXh0ZW5kcyBWYWx1ZSB7CisgICAgLy8g
WW91IGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUncyB2YWx1ZSBiZWZvcmUgdXNlLCBi
dXQgdGhhdCBjb3VsZCBiZSBxdWl0ZSBsYXRlLgorICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgdHlw
ZSA9IG51bGwpCisgICAgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9vcmlnaW4g
PSBvcmlnaW47CisgICAgICAgIHRoaXMuaW5kZXggPSBhbm9ueW1vdXNWYXJpYWJsZUNvdW50Kys7
CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgfQorICAgIAorICAgIGdldCBvcmlnaW4o
KSB7IHJldHVybiB0aGlzLl9vcmlnaW47IH0KKyAgICBnZXQgbmFtZSgpIHsgcmV0dXJuICJhbm9u
VmFyPCIgKyB0aGlzLmluZGV4ICsgIj4iOyB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMubmFtZTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsMTUgQEAgY2xhc3MgQXJyYXlSZWZUeXBlIGV4dGVuZHMgUmVm
ZXJlbmNlVHlwZQogICAgIAogICAgIGdldCBpc0FycmF5UmVmKCkgeyByZXR1cm4gdHJ1ZTsgfQog
CisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChv
cmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKICAgICB0b1N0cmlu
ZygpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZSArICJbXSAiICsgdGhp
cy5hZGRyZXNzU3BhY2U7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJh
eVR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJy
YXlUeXBlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9BcnJheVR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTczLDUgKzczLDE2IEBAIGNsYXNz
IEFycmF5VHlwZSBleHRlbmRzIFR5cGUgewogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRoaXMu
ZWxlbWVudFR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5lbGVtZW50VHlwZSk7
CiAgICAgfQorCisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAg
IHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG9yaWdp
biwgdmFsdWUpOworICAgICAgICByZXN1bHQubnVtRWxlbWVudHMgPSB0aGlzLm51bUVsZW1lbnRz
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRP
dmVybG9hZChvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEFycmF5UmVmVHlwZShv
cmlnaW4sICJ0aHJlYWQiLCB0aGlzLmVsZW1lbnRUeXBlKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVudC5qcwkocmV2aXNpb24gMjIy
MTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVudC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDEyIEBACiAidXNlIHN0cmljdCI7CiAKIGNsYXNzIEFz
c2lnbm1lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGxo
cywgcmhzKQorICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMsIHR5cGUgPSBudWxsKQog
ICAgIHsKICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fbGhzID0gbGhzOwog
ICAgICAgICB0aGlzLl9yaHMgPSByaHM7CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICAg
fQogICAgIAogICAgIGdldCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lv
bi5qcwkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNzAgQEAgY2xhc3MgQ2FsbEV4cHJlc3Np
b24gZXh0ZW5kcyBFeHByZXNzaW9uIAogICAgIGdldCBpc0Nhc3QoKSB7IHJldHVybiB0aGlzLl9p
c0Nhc3Q7IH0KICAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3JldHVyblR5cGU7
IH0KICAgICAKLSAgICByZXNvbHZlKG92ZXJsb2FkKQorICAgIHN0YXRpYyByZXNvbHZlKG9yaWdp
biwgcG9zc2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSwgbmFtZSwgdHlwZUFy
Z3VtZW50cywgYXJndW1lbnRMaXN0LCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQorICAgIHsK
KyAgICAgICAgbGV0IGNhbGwgPSBuZXcgQ2FsbEV4cHJlc3Npb24ob3JpZ2luLCBuYW1lLCB0eXBl
QXJndWVtbnRzLCBhcmd1bWVudExpc3QpOworICAgICAgICBjYWxsLmFyZ3VtZW50VHlwZXMgPSBh
cmd1bWVudFR5cGVzOworICAgICAgICBpZiAocmV0dXJuVHlwZSkKKyAgICAgICAgICAgIGNhbGwu
c2V0Q2FzdERhdGEocmV0dXJuVHlwZSk7CisgICAgICAgIHJldHVybiB7Y2FsbCwgcmVzdWx0VHlw
ZTogY2FsbC5yZXNvbHZlKHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1ldHJlcnNJblNjb3Bl
KX07CisgICAgfQorICAgIAorICAgIHJlc29sdmUocG9zc2libGVPdmVybG9hZHMsIHR5cGVQYXJh
bWV0ZXJzSW5TY29wZSkKKyAgICB7CisgICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7CisgICAg
ICAgIGxldCBmYWlsdXJlcyA9IFtdOworICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9m
IHR5cGVQYXJhbWV0ZXJzSW5TY29wZSkgeworICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRl
ciBpbnN0YW5jZW9mIFR5cGVWYXJpYWJsZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBpZiAoIXR5cGVQYXJhbWV0ZXIucHJvdG9jb2wpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBsZXQgc2lnbmF0dXJlcyA9CisgICAgICAgICAgICAgICAg
dHlwZVBhcmFtZXRlci5wcm90b2NvbC5wcm90b2NvbERlY2wuc2lnbmF0dXJlc0J5TmFtZVdpdGhU
eXBlVmFyaWFibGUodGhpcy5uYW1lLCB0eXBlUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGlmICgh
c2lnbmF0dXJlcykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG92ZXJs
b2FkID0gcmVzb2x2ZU92ZXJsb2FkSW1wbChzaWduYXR1cmVzLCB0aGlzLnR5cGVBcmd1bWVudHMs
IGFyZ3VtZW50VHlwZXMsIHRoaXMucmV0dXJuVHlwZSk7CisgICAgICAgICAgICBpZiAob3Zlcmxv
YWQuZnVuYykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZhaWx1cmVzLnB1
c2goLi4ub3ZlcmxvYWQuZmFpbHVyZXMpOworICAgICAgICAgICAgb3ZlcmxvYWQgPSBudWxsOwor
ICAgICAgICB9CisgICAgICAgIGlmICghb3ZlcmxvYWQpIHsKKyAgICAgICAgICAgIG92ZXJsb2Fk
ID0gcmVzb2x2ZU92ZXJsb2FkSW1wbCgKKyAgICAgICAgICAgICAgICBwb3NzaWJsZU92ZXJsb2Fk
cywgdGhpcy50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCB0aGlzLnJldHVyblR5cGUpOwor
ICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7CisgICAgICAgICAgICAgICAgZmFpbHVy
ZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7CisgICAgICAgICAgICAgICAgbGV0IG1lc3Nh
Z2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdpdGggIjsKKyAgICAgICAgICAg
ICAgICBpZiAodGhpcy50eXBlQXJndW1lbnRzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAg
bWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyB0aGlzLnR5cGVBcmd1bWVudHMgKyAiPiBh
bmQgIjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1bWVudCB0eXBlcyAoIiArIGFy
Z3VtZW50VHlwZXMgKyAiKSI7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMucmV0dXJuVHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5kIHJldHVybiB0eXBlICIgKyB0aGlz
LnJldHVyblR5cGU7CisgICAgICAgICAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lkZXJlZDpcbiIgKyBmYWlsdXJl
cy5qb2luKCJcbiIpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IodGhpcy5v
cmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudFR5cGVzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICBsZXQgdHlwZUFyZ3VtZW50VHlwZSA9IHR5cGVBcmd1bWVudFR5cGVz
W2ldOworICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBvdmVybG9hZC5mdW5jLnR5cGVQ
YXJhbWV0ZXJzW2ldOworICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRlciBpbnN0YW5jZW9m
IENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxzV2l0aENvbW1pdCh0eXBlQXJn
dW1lbnRUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0ICIgKyB0aGlz
Lm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBlIGFyZ3VtZW50IGFuZCBwYXJh
bWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0eXBlQXJndW1lbnRUeXBlICsg
IiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7CisgICAgICAgIH0KKyAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICBsZXQgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlc1tpXTsKKyAgICAgICAgICAg
IGxldCBwYXJhbWV0ZXJUeXBlID0gb3ZlcmxvYWQuZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUuc3Vi
c3RpdHV0ZVRvVW5pZmljYXRpb24oCisgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZnVuYy50eXBl
UGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250ZXh0KTsKKyAgICAgICAgICAgIGxl
dCByZXN1bHQgPSBhcmd1bWVudFR5cGUuZXF1YWxzV2l0aENvbW1pdChwYXJhbWV0ZXJUeXBlKTsK
KyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiQXQgIiArIHRoaXMub3JpZ2luLm9yaWdpblN0cmluZyArICIgYXJndW1lbnQgYW5kIHBhcmFt
ZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0ZXIgdHlwZSBhcmd1bWVudCBzdWJzdGl0dXRpb246IGFy
Z3VtZW50ID0gIiArIGFyZ3VtZW50VHlwZSArICIsIHBhcmFtZXRlciA9ICIgKyBwYXJhbWV0ZXJU
eXBlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVG9PdmVybG9hZChv
dmVybG9hZCk7CisgICAgfQorICAgIAorICAgIHJlc29sdmVUb092ZXJsb2FkKG92ZXJsb2FkKQog
ICAgIHsKICAgICAgICAgdGhpcy5mdW5jID0gb3ZlcmxvYWQuZnVuYzsKICAgICAgICAgdGhpcy5h
Y3R1YWxUeXBlQXJndW1lbnRzID0gb3ZlcmxvYWQudHlwZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3Vt
ZW50ID0+IHR5cGVBcmd1bWVudCBpbnN0YW5jZW9mIFR5cGUgPyB0eXBlQXJndW1lbnQudmlzaXQo
bmV3IEF1dG9XcmFwcGVyKCkpIDogdHlwZUFyZ3VtZW50KTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsMzAg
KzQzLDE0IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICB2aXNpdFByb3Rv
Y29sRGVjbChub2RlKQogICAgIHsKICAgICAgICAgZm9yIChsZXQgc2lnbmF0dXJlIG9mIG5vZGUu
c2lnbmF0dXJlcykgewotICAgICAgICAgICAgbGV0IHNldCA9IG5ldyBTZXQoKTsKLSAgICAgICAg
ICAgIGZ1bmN0aW9uIGNvbnNpZGVyKHRoaW5nKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmICh0aGluZy5pc1VuaWZpYWJsZSkKLSAgICAgICAgICAgICAgICAgICAgc2V0LmFkZCh0
aGluZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjbGFzcyBOb3RpY2VUeXBlVmFyaWFi
bGUgZXh0ZW5kcyBWaXNpdG9yIHsKLSAgICAgICAgICAgICAgICB2aXNpdFR5cGVSZWYobm9kZSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyKG5vZGUudHlw
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZpc2l0VmFyaWFibGVSZWYo
bm9kZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyKG5v
ZGUudmFyaWFibGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGxldCBub3RpY2VUeXBlVmFyaWFibGUgPSBuZXcgTm90aWNlVHlwZVZhcmlhYmxlKCk7Cisg
ICAgICAgICAgICBsZXQgdHlwZVZhcmlhYmxlVHJhY2tlciA9IG5ldyBUeXBlVmFyaWFibGVUcmFj
a2VyKCk7CiAgICAgICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXJUeXBlIG9mIHNpZ25hdHVyZS5w
YXJhbWV0ZXJUeXBlcykKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJUeXBlLnZpc2l0KG5vdGlj
ZVR5cGVWYXJpYWJsZSk7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyVHlwZS52aXNpdCh0eXBl
VmFyaWFibGVUcmFja2VyKTsKICAgICAgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIgb2Yg
c2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXQuaGFz
KHR5cGVQYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgIGlmICghdHlwZVZhcmlhYmxlVHJhY2tl
ci5zZXQuaGFzKHR5cGVQYXJhbWV0ZXIpKQogICAgICAgICAgICAgICAgICAgICB0aHJvdyBXVHlw
ZUVycm9yKHR5cGVQYXJhbWV0ZXIub3JpZ2luLm9yaWdpblN0cmluZywgIlR5cGUgcGFyYW1ldGVy
IHRvIHByb3RvY29sIHNpZ25hdHVyZSBub3QgaW5mZXJyYWJsZSBmcm9tIHZhbHVlIHBhcmFtZXRl
cnMiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghc2V0Lmhhcyhub2RlLnR5cGVW
YXJpYWJsZSkpCisgICAgICAgICAgICBpZiAoIXR5cGVWYXJpYWJsZVRyYWNrZXIuc2V0Lmhhcyhu
b2RlLnR5cGVWYXJpYWJsZSkpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Io
c2lnbmF0dXJlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJQcm90b2NvbCdzIHR5cGUgdmFyaWFibGUg
KCIgKyBub2RlLm5hbWUgKyAiKSBub3QgbWVudGlvbmVkIGluIHNpZ25hdHVyZTogIiArIHNpZ25h
dHVyZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDEsNiArMTI1LDI1IEBAIGNsYXNzIENoZWNr
ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgcmV0dXJuIGxoc1R5cGU7CiAgICAgfQogICAg
IAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAg
ICAgaWYgKCFub2RlLmxWYWx1ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkxIUyBvZiByZWFkLW1vZGlmeS13cml0
ZSBpcyBub3QgYW4gTFZhbHVlOiAiICsgbm9kZS5sVmFsZSk7CisgICAgICAgIGxldCBsaHNUeXBl
ID0gbm9kZS5sVmFsdWUudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUub2xkVmFsdWVWYXIudHlw
ZSA9IGxoc1R5cGU7CisgICAgICAgIG5vZGUubmV3VmFsdWVWYXIudHlwZSA9IGxoc1R5cGU7Cisg
ICAgICAgIG5vZGUub2xkVmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUubmV3VmFs
dWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUubmV3VmFsdWVFeHAudmlzaXQodGhpcyk7
CisgICAgICAgIHJldHVybiBub2RlLnJlc3VsdEV4cC52aXNpdCh0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFu
b2RlLnR5cGUpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFub255bW91cyB2YXJpYWJs
ZSBtdXN0IGtub3cgdHlwZSBiZWZvcmUgZmlyc3QgYXBwZWFyYW5jZSIpOworICAgIH0KKyAgICAK
ICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbGV0
IHR5cGUgPSBub2RlLnB0ci52aXNpdCh0aGlzKS51bmlmeU5vZGU7CkBAIC0xNjUsNyArMTY4LDcg
QEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHsKICAgICAgICAgbGV0IGVs
ZW1lbnRUeXBlID0gbm9kZS5sVmFsdWUudmlzaXQodGhpcykudW5pZnlOb2RlOwogICAgICAgICBp
ZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBQdHJUeXBlKSB7Ci0gICAgICAgICAgICBub2RlLmJl
Y29tZUNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbigpOworICAgICAgICAgICAgbm9kZS5i
ZWNvbWUobmV3IENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgb3Jp
Z2luLmxWYWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheVJlZlR5cGUobm9kZS5v
cmlnaW4sIGVsZW1lbnRUeXBlLmFkZHJlc3NTcGFjZSwgZWxlbWVudFR5cGUuZWxlbWVudFR5cGUp
OwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTg5LDI3ICsxOTIsODQgQEAgY2xhc3MgQ2hlY2tl
ciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNob3VsZCBub3Qg
ZXhpc3QgeWV0LiIpOwogICAgIH0KICAgICAKLSAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkK
KyAgICBfZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2Vzcyhub2RlLCBiYXNlVHlwZSwgZXh0cmFB
cmdzLCBleHRyYUFyZ1R5cGVzKQogICAgIHsKLSAgICAgICAgbGV0IHN0cnVjdFR5cGUgPSBub2Rl
LnN0cnVjdC52aXNpdCh0aGlzKS51bmlmeU5vZGU7Ci0gICAgICAgIAotICAgICAgICBub2RlLnN0
cnVjdFR5cGUgPSBzdHJ1Y3RUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKKyAgICAgICAg
bm9kZS5iYXNlVHlwZSA9IGJhc2VUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKICAgICAg
ICAgCi0gICAgICAgIGxldCB1bmRlcmx5aW5nU3RydWN0ID0gc3RydWN0VHlwZTsKKyAgICAgICAg
Ly8gU3VjaCBhIHR5cGUgbXVzdCBleGlzdC4gVGhpcyBtYXkgdGhyb3cgaWYgaXQgZG9lc24ndC4K
KyAgICAgICAgbGV0IHR5cGVGb3JBbmQgPSBiYXNlVHlwZS5hcmd1bWVudFR5cGVGb3JBbmRPdmVy
bG9hZChub2RlLm9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBpZiAoc3RydWN0VHlwZSBpbnN0
YW5jZW9mIFR5cGVSZWYpCi0gICAgICAgICAgICB1bmRlcmx5aW5nU3RydWN0ID0gdW5kZXJseWlu
Z1N0cnVjdC50eXBlOworICAgICAgICBsZXQgZXJyb3JGb3JHZXQ7CisgICAgICAgIGxldCBlcnJv
ckZvckFuZDsKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBsZXQgcmVzdWx0
ID0gQ2FsbEV4cHJlc3Npb24ucmVzb2x2ZSgKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwg
bm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkcywgdGhpcy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFy
YW1ldGVycywKKyAgICAgICAgICAgICAgICBub2RlLmdldEZ1bmNOYW1lLCBbXSwgW25vZGUuYmFz
ZSwgLi4uZXh0cmFBcmdzXSwgW2Jhc2VUeXBlLCAuLi5leHRyYUFyZ1R5cGVzXSwgbnVsbCk7Cisg
ICAgICAgICAgICBub2RlLmNhbGxGb3JHZXQgPSByZXN1bHQuY2FsbDsKKyAgICAgICAgICAgIG5v
ZGUucmVzdWx0VHlwZUZvckdldCA9IHJlc3VsdC5yZXN1bHRUeXBlOworICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgV1R5cGVFcnJvcikpCisgICAg
ICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIGVycm9yRm9yR2V0ID0gZTsKKyAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCEodW5kZXJseWluZ1N0cnVjdCBpbnN0YW5jZW9m
IFN0cnVjdFR5cGUpKQotICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiT3BlcmFuZCB0byBkb3QgZXhwcmVzc2lvbiBpcyBub3QgYSBzdHJ1
Y3QgdHlwZTogIiArIHN0cnVjdFR5cGUpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0
IGJhc2VGb3JBbmQgPSBiYXNlVHlwZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKG5vZGUub3JpZ2lu
LCBub2RlLmJhc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gQ2Fs
bEV4cHJlc3Npb24ucmVzb2x2ZSgKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5w
b3NzaWJsZUFuZE92ZXJsb2FkcywgdGhpcy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVy
cywKKyAgICAgICAgICAgICAgICBub2RlLmFuZEZ1bmNOYW1lLCBbXSwgW2Jhc2VGb3JBbmQsIC4u
LmV4dHJhQXJnc10sIFt0eXBlRm9yQW5kLCAuLi5leHRyYUFyZ1R5cGVzXSwKKyAgICAgICAgICAg
ICAgICBudWxsKTsKKyAgICAgICAgICAgIG5vZGUuY2FsbEZvckFuZCA9IHJlc3VsdC5jYWxsOwor
ICAgICAgICAgICAgbm9kZS5yZXN1bHRUeXBlRm9yQW5kID0gcmVzdWx0LnJlc3VsdFR5cGUudW5p
ZnlOb2RlLnJldHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQobm9kZS5vcmlnaW4pOworICAgICAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgV1R5cGVFcnJvcikp
CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIGVycm9yRm9yQW5kID0gZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFub2RlLnJlc3VsdFR5cGVGb3JHZXQg
JiYgIW5vZGUucmVzdWx0VHlwZUZvckFuZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBl
RXJyb3IoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLAorICAgICAg
ICAgICAgICAgICJDYW5ub3QgcmVzb2x2ZSBhY2Nlc3M7IHRyaWVkIGJ5LXZhbHVlOlxuIiArCisg
ICAgICAgICAgICAgICAgZXJyb3JGb3JHZXQubWVzc2FnZSArICJcbiIgKworICAgICAgICAgICAg
ICAgICJhbmQgdHJpZWQgYnktcG9pbnRlcjpcbiIgKworICAgICAgICAgICAgICAgIGVycm9yRm9y
QW5kLm1lc3NhZ2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS5yZXN1
bHRUeXBlRm9yR2V0ICYmIG5vZGUucmVzdWx0VHlwZUZvckFuZAorICAgICAgICAgICAgJiYgIW5v
ZGUucmVzdWx0VHlwZUZvckdldC5lcXVhbHMobm9kZS5yZXN1bHRUeXBlRm9yQW5kKSkKKyAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlJl
c3VsdCB0eXBlIHJlc29sdmVkIGJ5LXZhbHVlICgiICsgbm9kZS5yZXN1bHRUeXBlRm9yR2V0ICsg
IikgZG9lcyBub3QgbWF0Y2ggcmVzdWx0IHR5cGUgcmVzb2x2ZWQgYnktcG9pbnRlciAoIiArIG5v
ZGUucmVzdWx0VHlwZUZvckFuZCArICIpIik7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAg
ICAgICAgICAgbGV0IHJlc3VsdCA9IENhbGxFeHByZXNzaW9uLnJlc29sdmUoCisgICAgICAgICAg
ICAgICAgbm9kZS5vcmlnaW4sIG5vZGUucG9zc2libGVHZXRPdmVybG9hZHMsIHRoaXMuX2N1cnJl
bnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgbm9kZS5zZXRGdW5j
TmFtZSwgW10sIFtub2RlLmJhc2UsIC4uLmV4dHJhQXJncywgbnVsbF0sIFtiYXNlVHlwZSwgLi4u
ZXh0cmFBcmdUeXBlcywgbm9kZS5yZXN1bHRUeXBlXSwgbnVsbCk7CisgICAgICAgICAgICBub2Rl
LmNhbGxGb3JTZXQgPSByZXN1bHQuY2FsbDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnJlc3Vs
dFR5cGUuZXF1YWxzKGJhc2VUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVF
cnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJSZXN1bHQgdHlwZSBvZiBzZXR0ZXIgIiAr
IHJlc3VsdC5jYWxsLmZ1bmMgKyAiIGlzIG5vdCB0aGUgYmFzZSB0eXBlICIgKyBiYXNlVHlwZSk7
CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBX
VHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgbm9kZS5l
cnJvckZvclNldCA9IGU7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3RU
eXBlIGluc3RhbmNlb2YgVHlwZVJlZikgCi0gICAgICAgICAgICB1bmRlcmx5aW5nU3RydWN0ID0g
dW5kZXJseWluZ1N0cnVjdC5pbnN0YW50aWF0ZShzdHJ1Y3RUeXBlLnR5cGVBcmd1bWVudHMsICJz
aGFsbG93Iik7CisgICAgICAgIHJldHVybiBub2RlLnJlc3VsdFR5cGU7CisgICAgfQorICAgIAor
ICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHN0cnVjdFR5
cGUgPSBub2RlLnN0cnVjdC52aXNpdCh0aGlzKS51bmlmeU5vZGU7CisgICAgICAgIHJldHVybiB0
aGlzLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIHN0cnVjdFR5cGUsIFtdLCBb
XSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAgewor
ICAgICAgICBsZXQgYXJyYXlUeXBlID0gbm9kZS5hcnJheS52aXNpdCh0aGlzKS51bmlmeU5vZGU7
CisgICAgICAgIGxldCBpbmRleFR5cGUgPSBub2RlLmluZGV4LnZpc2l0KHRoaXMpOwogICAgICAg
ICAKLSAgICAgICAgbGV0IGZpZWxkID0gdW5kZXJseWluZ1N0cnVjdC5maWVsZEJ5TmFtZShub2Rl
LmZpZWxkTmFtZSk7Ci0gICAgICAgIGlmICghZmllbGQpCi0gICAgICAgICAgICB0aHJvdyBuZXcg
V1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJGaWVsZCAiICsgbm9kZS5maWVs
ZE5hbWUgKyAiIG5vdCBmb3VuZCBpbiAiICsgc3RydWN0VHlwZSk7Ci0gICAgICAgIHJldHVybiBm
aWVsZC50eXBlOworICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFj
Y2Vzcyhub2RlLCBhcnJheVR5cGUsIFtub2RlLmluZGV4XSwgW2luZGV4VHlwZV0pOwogICAgIH0K
ICAgICAKICAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkKQEAgLTMyMiw3ICszODIsNyBAQCBj
bGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICByZXN1bHQgPSBleHBy
ZXNzaW9uLnZpc2l0KHRoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLQorICAg
IAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCB0eXBl
QXJndW1lbnRUeXBlcyA9IG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3VtZW50ID0+IHR5
cGVBcmd1bWVudC52aXNpdCh0aGlzKSk7CkBAIC0zMzMsNzcgKzM5MywxMSBAQCBjbGFzcyBDaGVj
a2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICByZXR1cm4gbmV3QXJndW1lbnQudmlz
aXQobmV3IEF1dG9XcmFwcGVyKCkpOwogICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIC8v
IEhlcmUgd2UgbmVlZCB0byBoYW5kbGUgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yJltdIGlzIGNh
bGxlZCB3aXRoIGEgdHlwZSB0aGF0IGlzbid0IHN1ZmZpY2llbnRseQotICAgICAgICAvLyByZWZl
cmVuY2V5LgotICAgICAgICBpZiAobm9kZS5uYW1lID09ICJvcGVyYXRvciZbXSIpIHsKLSAgICAg
ICAgICAgIGxldCBhcmdUeXBlID0gYXJndW1lbnRUeXBlc1swXS51bmlmeU5vZGU7Ci0gICAgICAg
ICAgICBpZiAoYXJnVHlwZSBpbnN0YW5jZW9mIFB0clR5cGUpCi0gICAgICAgICAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJz
Y3JpcHQgaXMgbm90IHZhbGlkIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcmdU
eXBlIGluc3RhbmNlb2YgQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVu
dExpc3RbMF0gPSBuZXcgTWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5h
cmd1bWVudExpc3RbMF0pOwotICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdLm51
bUVsZW1lbnRzID0gYXJnVHlwZS5udW1FbGVtZW50czsKLSAgICAgICAgICAgICAgICBhcmd1bWVu
dFR5cGVzWzBdID0gbmV3IEFycmF5UmVmVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ1R5
cGUuZWxlbWVudFR5cGUpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghKGFyZ1R5cGUgaW5zdGFu
Y2VvZiBBcnJheVJlZlR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3Rb
MF0gPSBuZXcgTWFrZVB0ckV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0
WzBdKTsKLSAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IFB0clR5cGUobm9k
ZS5vcmlnaW4sICJ0aHJlYWQiLCBhcmd1bWVudFR5cGVzWzBdKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAKICAgICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRU
eXBlczsKICAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKICAgICAgICAgICAgIG5vZGUucmV0
dXJuVHlwZS52aXNpdCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGxldCBvdmVybG9hZCA9IG51
bGw7Ci0gICAgICAgIGxldCBmYWlsdXJlcyA9IFtdOwotICAgICAgICBmb3IgKGxldCB0eXBlUGFy
YW1ldGVyIG9mIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAg
ICAgICAgIGlmICghKHR5cGVQYXJhbWV0ZXIgaW5zdGFuY2VvZiBUeXBlVmFyaWFibGUpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnBy
b3RvY29sKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbGV0IHNpZ25h
dHVyZXMgPQotICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIucHJvdG9jb2wucHJvdG9jb2xE
ZWNsLnNpZ25hdHVyZXNCeU5hbWVXaXRoVHlwZVZhcmlhYmxlKG5vZGUubmFtZSwgdHlwZVBhcmFt
ZXRlcik7Ci0gICAgICAgICAgICBpZiAoIXNpZ25hdHVyZXMpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0
dXJlcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVyblR5cGUp
OwotICAgICAgICAgICAgaWYgKG92ZXJsb2FkLmZ1bmMpCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBmYWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKLSAgICAg
ICAgICAgIG92ZXJsb2FkID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW92ZXJsb2Fk
KSB7Ci0gICAgICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCi0gICAgICAg
ICAgICAgICAgbm9kZS5wb3NzaWJsZU92ZXJsb2Fkcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1
bWVudFR5cGVzLCBub2RlLnJldHVyblR5cGUpOwotICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5m
dW5jKSB7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJl
cyk7Ci0gICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9u
IGZvciBjYWxsIHdpdGggIjsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRz
Lmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMg
PCIgKyBub2RlLnR5cGVBcmd1bWVudHMgKyAiPiBhbmQgIjsKLSAgICAgICAgICAgICAgICBtZXNz
YWdlICs9ICJhcmd1bWVudCB0eXBlcyAoIiArIGFyZ3VtZW50VHlwZXMgKyAiKSI7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZSArPSIgYW5kIHJldHVybiB0eXBlICIgKyBub2RlLnJldHVyblR5cGU7Ci0gICAgICAgICAgICAg
ICAgaWYgKGZhaWx1cmVzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAi
LCBidXQgY29uc2lkZXJlZDpcbiIgKyBmYWlsdXJlcy5qb2luKCJcbiIpCi0gICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IHR5cGVBcmd1bWVudFR5cGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgdHlwZUFy
Z3VtZW50VHlwZSA9IHR5cGVBcmd1bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0IHR5cGVQ
YXJhbWV0ZXIgPSBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAg
aWYgKCEodHlwZVBhcmFtZXRlciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVy
LnR5cGUuZXF1YWxzV2l0aENvbW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKLSAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkF0ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNv
bnN0ZXhwciB0eXBlIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1
bWVudCA9ICIgKyB0eXBlQXJndW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJh
bWV0ZXIudHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1
bWVudFR5cGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnRUeXBlID0g
YXJndW1lbnRUeXBlc1tpXTsKLSAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gb3Zlcmxv
YWQuZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCi0gICAg
ICAgICAgICAgICAgb3ZlcmxvYWQuZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmlj
YXRpb25Db250ZXh0KTsKLSAgICAgICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVudFR5cGUuZXF1
YWxzV2l0aENvbW1pdChwYXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQot
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9yaWdp
blN0cmluZyArICIgYXJndW1lbnQgYW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0ZXIg
dHlwZSBhcmd1bWVudCBzdWJzdGl0dXRpb246IGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50VHlwZSAr
ICIsIHBhcmFtZXRlciA9ICIgKyBwYXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gbm9kZS5yZXNvbHZlKG92ZXJsb2FkKTsKKworICAgICAgICByZXR1cm4gbm9kZS5yZXNv
bHZlKG5vZGUucG9zc2libGVPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBh
cmFtZXRlcnMpOwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRG90RXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw3ICsyNCw3IEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotY2xhc3MgRG90RXhwcmVzc2lvbiBl
eHRlbmRzIEV4cHJlc3Npb24geworY2xhc3MgRG90RXhwcmVzc2lvbiBleHRlbmRzIFByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbiB7CiAgICAgY29uc3RydWN0b3Iob3JpZ2luLCBzdHJ1Y3QsIGZpZWxk
TmFtZSkKICAgICB7CiAgICAgICAgIHN1cGVyKG9yaWdpbik7CkBAIC0zMiwxMSArMzIsMTYgQEAg
Y2xhc3MgRG90RXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogICAgICAgICB0aGlzLl9m
aWVsZE5hbWUgPSBmaWVsZE5hbWU7CiAgICAgfQogICAgIAorICAgIGdldCBiYXNlKCkgeyByZXR1
cm4gdGhpcy5zdHJ1Y3Q7IH0KICAgICBnZXQgc3RydWN0KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0
OyB9CiAgICAgZ2V0IGZpZWxkTmFtZSgpIHsgcmV0dXJuIHRoaXMuX2ZpZWxkTmFtZTsgfQogICAg
IGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIHRoaXMuc3RydWN0LmlzTFZhbHVlOyB9CiAgICAgZ2V0
IGFkZHJlc3NTcGFjZSgpIHsgcmV0dXJuIHRoaXMuc3RydWN0LmFkZHJlc3NTcGFjZTsgfQogICAg
IAorICAgIGdldCBnZXRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvci4iICsgdGhpcy5maWVs
ZE5hbWU7IH0KKyAgICBnZXQgYW5kRnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0b3ImLiIgKyB0
aGlzLmZpZWxkTmFtZTsgfQorICAgIGdldCBzZXRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRv
ci4iICsgdGhpcy5maWVsZE5hbWUgKyAiPSI7IH0KKyAgICAKICAgICB0b1N0cmluZygpCiAgICAg
ewogICAgICAgICByZXR1cm4gIigiICsgdGhpcy5zdHJ1Y3QgKyAiLiIgKyB0aGlzLmZpZWxkTmFt
ZSArICIpIjsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3Iu
anMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2
YWx1YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTI1LDEyICsxMjUsNiBAQCBjbGFzcyBFdmFs
dWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgcmV0dXJuIG5vZGUuZVB0ci5ib3gobmV3
IEVBcnJheVJlZihub2RlLmxWYWx1ZS52aXNpdCh0aGlzKS5sb2FkVmFsdWUoKSwgMSkpOwogICAg
IH0KICAgICAKLSAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKLSAgICB7Ci0gICAgICAgIGxl
dCBzdHJ1Y3RQdHIgPSBub2RlLnN0cnVjdC52aXNpdCh0aGlzKTsKLSAgICAgICAgcmV0dXJuIHN0
cnVjdFB0ci5wbHVzKG5vZGUuZmllbGQub2Zmc2V0KTsKLSAgICB9Ci0gICAgCiAgICAgdmlzaXRD
b21tYUV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQ7CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJ
KHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJ
bnN0YW50aWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgY2xhc3MgRnVu
Y0luc3RhbnRpYXRvciB7CiAgICAgICAgICAgICAgICAgICAgIGxldCBvdmVybG9hZCA9IHJlc29s
dmVPdmVybG9hZEltcGwocmVzdWx0LnBvc3NpYmxlT3ZlcmxvYWRzLCByZXN1bHQudHlwZUFyZ3Vt
ZW50cywgcmVzdWx0LmFyZ3VtZW50VHlwZXMsIHJlc3VsdC5yZXR1cm5UeXBlRm9yT3ZlcmxvYWRS
ZXNvbHV0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKQogICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgcmVzb2x2ZSBw
cm90b2NvbCBzaWduYXR1cmUgZnVuY3Rpb24gY2FsbCBkdXJpbmcgaW5zdGFudGlhdGlvbjogIiAr
IHJlc3VsdC5mdW5jICsgKG92ZXJsb2FkLmZhaWx1cmVzLmxlbmd0aCA/ICI7IHRyaWVkOlxuIiAr
IG92ZXJsb2FkLmZhaWx1cmVzLmpvaW4oIlxuIikgOiAiIikpOwotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQucmVzb2x2ZShvdmVybG9hZCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5y
ZXNvbHZlVG9PdmVybG9hZChvdmVybG9hZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC04NCw3ICs4NCw3IEBA
IGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAgICAgICAKICAgICAgICAgbGV0IHN1YnN0aXR1
dGlvbiA9IG5ldyBJbnN0YW50aWF0aW9uU3Vic3RpdHV0aW9uKGZ1bmMudHlwZVBhcmFtZXRlcnMs
IHR5cGVBcmd1bWVudHMpOwogICAgICAgICAKLSAgICAgICAgY2xhc3MgSW5zdGFudGlhdGUgZXh0
ZW5kcyBWaXNpdG9yQmFzZSB7CisgICAgICAgIGNsYXNzIEluc3RhbnRpYXRlIHsKICAgICAgICAg
ICAgIHZpc2l0RnVuY0RlZihmdW5jKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBuZXcgRnVuY0RlZigKQEAgLTEwMSw3ICsxMDEsOCBAQCBjbGFzcyBGdW5jSW5zdGFudGlh
dG9yIHsKICAgICAgICAgICAgICAgICAgICAgZnVuYywKICAgICAgICAgICAgICAgICAgICAgZnVu
Yy5yZXR1cm5UeXBlLnZpc2l0KHN1YnN0aXR1dGlvbiksCiAgICAgICAgICAgICAgICAgICAgIGZ1
bmMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChzdWJzdGl0dXRp
b24pKSwKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5pc0Nhc3QpOworICAgICAgICAgICAgICAg
ICAgICBmdW5jLmlzQ2FzdCwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5pbnN0YW50aWF0ZUlt
cGxlbWVudGF0aW9uKHN1YnN0aXR1dGlvbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIGxldCByZXN1bHRpbmdGdW5jID0gZnVuYy52aXNpdChuZXcgSW5zdGFudGlhdGUoKSk7
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmRleEV4cHJlc3Npb24uanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNz
aW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lu
ZGV4RXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2Ns
YXNzIEluZGV4RXhwcmVzc2lvbiBleHRlbmRzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiB7Cisg
ICAgY29uc3RydWN0b3Iob3JpZ2luLCBhcnJheSwgaW5kZXgpCisgICAgeworICAgICAgICBzdXBl
cihvcmlnaW4pOworICAgICAgICB0aGlzLl9hcnJheSA9IGFycmF5OworICAgICAgICB0aGlzLl9p
bmRleCA9IGluZGV4OworICAgIH0KKyAgICAKKyAgICBnZXQgYmFzZSgpIHsgcmV0dXJuIHRoaXMu
YXJyYXk7IH0KKyAgICBnZXQgYXJyYXkoKSB7IHJldHVybiB0aGlzLl9hcnJheTsgfQorICAgIGdl
dCBpbmRleCgpIHsgcmV0dXJuIHRoaXMuX2luZGV4OyB9CisgICAgZ2V0IGlzTFZhbHVlKCkgeyBy
ZXR1cm4gdGhpcy5hcnJheS5pc0xWYWx1ZTsgfQorICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJl
dHVybiB0aGlzLmFycmF5LmFkZHJlc3NTcGFjZTsgfQorICAgIAorICAgIGdldCBnZXRGdW5jTmFt
ZSgpIHsgcmV0dXJuICJvcGVyYXRvcltdIjsgfQorICAgIGdldCBhbmRGdW5jTmFtZSgpIHsgcmV0
dXJuICJvcGVyYXRvciZbXSI7IH0KKyAgICBnZXQgc2V0RnVuY05hbWUoKSB7IHJldHVybiAib3Bl
cmF0b3JbXT0iOyB9CisKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIigi
ICsgdGhpcy5hcnJheSArICJbIiArIHRoaXMuaW5kZXggKyAiXSkiOworICAgIH0KK30KSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JDYWxs
LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9J
bmZlclR5cGVzRm9yQ2FsbC5qcwkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBmdW5j
dGlvbiBpbmZlclR5cGVzRm9yQ2FsbChmdW5jLCB0eXBlQXJnCiAgICAgICAgIGlmICghYXJndW1l
bnRUeXBlc1tpXSkKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhcmd1bWVudCB0
eXBlIGF0IGkgPSAiICsgaSk7CiAgICAgICAgIGlmICghYXJndW1lbnRUeXBlc1tpXS51bmlmeSh1
bmlmaWNhdGlvbkNvbnRleHQsIGZ1bmMucGFyYW1ldGVyc1tpXS50eXBlKSkKLSAgICAgICAgICAg
IHJldHVybiB7ZmFpbHVyZTogbmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIkFy
Z3VtZW50ICMiICsgKGkgKyAxKSArICIgIiArIChmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSA/ICJm
b3IgcGFyYW1ldGVyICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSA6ICIiKSArICIgZG9lcyBu
b3QgbWF0Y2ggKHBhc3NlZCAiICsgYXJndW1lbnRUeXBlc1tpXSArICIsIHJlcXVpcmUgIiArIGZ1
bmMucGFyYW1ldGVyc1tpXS50eXBlICsgIikiKX07CisgICAgICAgICAgICByZXR1cm4ge2ZhaWx1
cmU6IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJBcmd1bWVudCAjIiArIChp
ICsgMSkgKyAiICIgKyAoZnVuYy5wYXJhbWV0ZXJzW2ldLm5hbWUgPyAiZm9yIHBhcmFtZXRlciAi
ICsgZnVuYy5wYXJhbWV0ZXJzW2ldLm5hbWUgKyAiICIgOiAiIikgKyAiZG9lcyBub3QgbWF0Y2gg
KHBhc3NlZCAiICsgYXJndW1lbnRUeXBlc1tpXSArICIsIHJlcXVpcmUgIiArIGZ1bmMucGFyYW1l
dGVyc1tpXS50eXBlICsgIikiKX07CiAgICAgfQogICAgIGlmIChyZXR1cm5UeXBlICYmICFyZXR1
cm5UeXBlLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgZnVuYy5yZXR1cm5UeXBlKSkKICAgICAg
ICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAi
UmV0dXJuIHR5cGUgIiArIGZ1bmMucmV0dXJuVHlwZSArICIgZG9lcyBub3QgbWF0Y2ggIiArIHJl
dHVyblR5cGUpfTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5q
cwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5s
aW5lci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzIsMTUgKzMyLDYgQEAgY2xhc3MgSW5saW5lciBl
eHRlbmRzIFJld3JpdGVyIHsKICAgICAgICAgdGhpcy5fdmlzaXRpbmcgPSB2aXNpdGluZzsKICAg
ICB9CiAgICAgCi0gICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBs
ZXQgcmVzdWx0ID0gc3VwZXIudmlzaXREb3RFeHByZXNzaW9uKG5vZGUpOwotICAgICAgICByZXN1
bHQuZmllbGQgPSByZXN1bHQuc3RydWN0VHlwZS51bmlmeU5vZGUuZmllbGRCeU5hbWUocmVzdWx0
LmZpZWxkTmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQuZmllbGQub2Zmc2V0ID09IG51bGwpCi0g
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuLWxhaWQtb3V0IGZpZWxkOiAiICsgcmVzdWx0
LmZpZWxkICsgIiAoaW4gIiArIHJlc3VsdC5zdHJ1Y3RUeXBlICsgIikiKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQog
ICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9k
ZSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtlQXJyYXlSZWZFeHBy
ZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01h
a2VBcnJheVJlZkV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDExICszMyw2IEBAIGNsYXNzIE1ha2VBcnJheVJlZkV4cHJlc3Npb24gZXh0ZW5k
cyBFeHAKICAgICAKICAgICBnZXQgbFZhbHVlKCkgeyByZXR1cm4gdGhpcy5fbFZhbHVlOyB9CiAg
ICAgCi0gICAgYmVjb21lQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX19wcm90b19fID0gQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uLnBy
b3RvdHlwZTsKLSAgICB9Ci0gICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0
dXJuICJAIiArICh0aGlzLm51bUVsZW1lbnRzID8gIjw8IiArIHRoaXMubnVtRWxlbWVudHMgKyAi
Pj4iIDogIiIpICsgIigiICsgdGhpcy5sVmFsdWUgKyAiKSI7CkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTI1OCw2ICsyNTgsMjggQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlz
aXRvciB7CiAgICAgICAgIHN1cGVyLnZpc2l0UmV0dXJuKG5vZGUpOwogICAgIH0KICAgICAKKyAg
ICBfaGFuZGxlUHJvcGVydHlBY2Nlc3Mobm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUucG9zc2li
bGVHZXRPdmVybG9hZHMgPSBub2RlLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgbm9kZS5nZXRGdW5j
TmFtZSk7CisgICAgICAgIG5vZGUucG9zc2libGVTZXRPdmVybG9hZHMgPSBub2RlLl9uYW1lQ29u
dGV4dC5nZXQoRnVuYywgbm9kZS5zZXRGdW5jTmFtZSk7CisgICAgICAgIG5vZGUucG9zc2libGVB
bmRPdmVybG9hZHMgPSBub2RlLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgbm9kZS5hbmRGdW5jTmFt
ZSk7CisKKyAgICAgICAgaWYgKCFub2RlLnBvc3NpYmxlR2V0T3ZlcmxvYWRzICYmICFub2RlLnBv
c3NpYmxlQW5kT3ZlcmxvYWRzKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGZpbmQgZWl0aGVyICIgKyBub2RlLmdldEZ1
bmNOYW1lICsgIiBvciAiICsgbm9kZS5hbmRGdW5jTmFtZSk7CisgICAgfQorICAgIAorICAgIHZp
c2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVy
dHlBY2Nlc3Mobm9kZSk7CisgICAgICAgIHN1cGVyLnZpc2l0RG90RXhwcmVzc2lvbihub2RlKTsK
KyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAg
ICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzKG5vZGUpOworICAgICAgICBzdXBlci52aXNp
dEluZGV4RXhwcmVzc2lvbihub2RlKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVz
c2lvbihub2RlKQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzb2x2ZVR5cGVBcmd1bWVudHMobm9k
ZS50eXBlQXJndW1lbnRzKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05h
dGl2ZUZ1bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
TmF0aXZlRnVuYy5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQCBj
bGFzcyBOYXRpdmVGdW5jIGV4dGVuZHMgRnVuYyB7CiAgICAgewogICAgICAgICBzdXBlcihvcmln
aW4sIG5hbWUsIHJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzLCBpc0Nhc3Qp
OwogICAgICAgICB0aGlzLmlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgICAgICB0aGlzLmltcGxl
bWVudGF0aW9uID0gbnVsbDsKKyAgICAgICAgdGhpcy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9u
ID0gKHN1YnN0aXR1dGlvbikgPT4ge307CisgICAgICAgIHRoaXMudmlzaXRJbXBsZW1lbnRhdGlv
bkRhdGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiBudWxsOwogICAgIH0KICAg
ICAKICAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCShyZXZp
c2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5j
SW5zdGFuY2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNiBAQAogInVzZSBzdHJp
Y3QiOwogCiBjbGFzcyBOYXRpdmVGdW5jSW5zdGFuY2UgZXh0ZW5kcyBGdW5jIHsKLSAgICBjb25z
dHJ1Y3RvcihmdW5jLCByZXR1cm5UeXBlLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpCisgICAgY29uc3Ry
dWN0b3IoZnVuYywgcmV0dXJuVHlwZSwgcGFyYW1ldGVycywgaXNDYXN0LCBpbXBsZW1lbnRhdGlv
bkRhdGEpCiAgICAgewogICAgICAgICBzdXBlcihmdW5jLm9yaWdpbiwgZnVuYy5uYW1lLCByZXR1
cm5UeXBlLCBbXSwgcGFyYW1ldGVycywgaXNDYXN0KTsKICAgICAgICAgdGhpcy5fZnVuYyA9IGZ1
bmM7CisgICAgICAgIHRoaXMuX2ltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVudGF0aW9uRGF0
YTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGZ1bmMoKSB7IHJldHVybiB0aGlzLl9mdW5jOyB9CiAg
ICAgZ2V0IGlzTmF0aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGdldCBpbXBsZW1lbnRhdGlv
bkRhdGEoKSB7IHJldHVybiB0aGlzLl9pbXBsZW1lbnRhdGlvbkRhdGE7IH0KIAogICAgIHRvRGVj
bFN0cmluZygpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9k
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpz
CShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2Rl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIE5vZGUgewogICAgICAg
ICBsZXQgcmV0dXJuVmFsdWUgPSB2aXNpdEZ1bmMuY2FsbCh2aXNpdG9yLCB0aGlzKTsKICAgICAg
ICAgaWYgKCJyZXR1cm5WYWx1ZSIgaW4gdmlzaXRvcikKICAgICAgICAgICAgIHJldHVyblZhbHVl
ID0gdmlzaXRvci5yZXR1cm5WYWx1ZTsKKyAgICAgICAgCiAgICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKICAgICB9CiAgICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9O
b3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL05vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9ybWFsVXNlUHJvcGVydHlSZXNv
bHZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIE5vcm1h
bFVzZVByb3BlcnR5UmVzb2x2ZXIgZXh0ZW5kcyBSZXdyaXRlciB7CisgICAgdmlzaXREb3RFeHBy
ZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gc3VwZXIudmlzaXREb3RFeHByZXNz
aW9uKG5vZGUpLnJld3JpdGVBZnRlckNsb25pbmcoKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJ
bmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdXBlci52aXNpdElu
ZGV4RXhwcmVzc2lvbihub2RlKS5yZXdyaXRlckFmdGVyQ2xvbmluZygpOworICAgIH0KK30KKwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzcsOSArMzM3LDkgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBv
cmlnaW5LaQogICAgICAgICB9KTsKICAgICB9CiAgICAgCi0gICAgZnVuY3Rpb24gZW1pdEluY3Jl
bWVudCh0b2tlbiwgcHRyLCBleHRyYUFyZykKKyAgICBmdW5jdGlvbiBlbWl0SW5jcmVtZW50KHRv
a2VuLCBvbGQsIGV4dHJhQXJnKQogICAgIHsKLSAgICAgICAgbGV0IGFyZ3MgPSBbbmV3IERlcmVm
ZXJlbmNlRXhwcmVzc2lvbih0b2tlbiwgVmFyaWFibGVSZWYud3JhcChwdHIpKV07CisgICAgICAg
IGxldCBhcmdzID0gW29sZF07CiAgICAgICAgIGlmIChleHRyYUFyZykKICAgICAgICAgICAgIGFy
Z3MucHVzaChleHRyYUFyZyk7CiAgICAgICAgIApAQCAtMzUwLDI3ICszNTAsMTUgQEAgZnVuY3Rp
b24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAgICBpZiAobmFtZSA9PSAi
b3BlcmF0b3IiKQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG5hbWU6ICIg
KyBuYW1lKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBuZXcgQXNzaWdubWVudCgKLSAgICAg
ICAgICAgIHRva2VuLAotICAgICAgICAgICAgbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tl
biwgVmFyaWFibGVSZWYud3JhcChwdHIpKSwKLSAgICAgICAgICAgIG5ldyBDYWxsRXhwcmVzc2lv
bih0b2tlbiwgbmFtZSwgW10sIGFyZ3MpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsRXhwcmVz
c2lvbih0b2tlbiwgbmFtZSwgW10sIGFyZ3MpOwogICAgIH0KICAgICAKICAgICBmdW5jdGlvbiBm
aW5pc2hQYXJzaW5nUG9zdEluY3JlbWVudCh0b2tlbiwgbGVmdCkKICAgICB7Ci0gICAgICAgIGxl
dCBwdHIgPSBuZXcgTGV0RXhwcmVzc2lvbih0b2tlbik7Ci0gICAgICAgIHB0ci5hcmd1bWVudCA9
IG5ldyBNYWtlUHRyRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7Ci0gICAgICAgIAotICAgICAgICBs
ZXQgb2xkVmFsdWUgPSBuZXcgTGV0RXhwcmVzc2lvbih0b2tlbik7Ci0gICAgICAgIG9sZFZhbHVl
LmFyZ3VtZW50ID0gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tlbiwgVmFyaWFibGVSZWYu
d3JhcChwdHIpKTsKLSAgICAgICAgCi0gICAgICAgIHB0ci5ib2R5ID0gb2xkVmFsdWU7Ci0gICAg
ICAgIAotICAgICAgICBvbGRWYWx1ZS5ib2R5ID0gbmV3IENvbW1hRXhwcmVzc2lvbih0b2tlbiwg
WwotICAgICAgICAgICAgZW1pdEluY3JlbWVudCh0b2tlbiwgcHRyKSwKLSAgICAgICAgICAgIFZh
cmlhYmxlUmVmLndyYXAob2xkVmFsdWUpCi0gICAgICAgIF0pOwotICAgICAgICByZXR1cm4gcHRy
OworICAgICAgICBsZXQgcmVhZE1vZGlmeVdyaXRlID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24odG9rZW4sIGxlZnQpOworICAgICAgICByZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVFeHAg
PSBlbWl0SW5jcmVtZW50KHRva2VuLCByZWFkTW9kaWZ5V3JpdGUub2xkVmFsdWVSZWYoKSk7Cisg
ICAgICAgIHJlYWRNb2RpZnlXcml0ZS5yZXN1bHRFeHAgPSByZWFkTW9kaWZ5V3JpdGUub2xkVmFs
dWVSZWYoKTsKKyAgICAgICAgcmV0dXJuIHJlYWRNb2RpZnlXcml0ZTsKICAgICB9CiAgICAgCiAg
ICAgZnVuY3Rpb24gcGFyc2VQb3NzaWJsZVN1ZmZpeCgpCkBAIC00MDksMTMgKzM5NywxMCBAQCBm
dW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgCiAgICAgZnVuY3Rp
b24gZmluaXNoUGFyc2luZ1ByZUluY3JlbWVudCh0b2tlbiwgbGVmdCwgZXh0cmFBcmcpCiAgICAg
ewotICAgICAgICBsZXQgcHRyID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4pOwotICAgICAgICBw
dHIuYXJndW1lbnQgPSBuZXcgTWFrZVB0ckV4cHJlc3Npb24odG9rZW4sIGxlZnQpOwotICAgICAg
ICBwdHIuYm9keSA9IG5ldyBDb21tYUV4cHJlc3Npb24odG9rZW4sIFsKLSAgICAgICAgICAgIGVt
aXRJbmNyZW1lbnQodG9rZW4sIHB0ciwgZXh0cmFBcmcpLAotICAgICAgICAgICAgbmV3IERlcmVm
ZXJlbmNlRXhwcmVzc2lvbih0b2tlbiwgVmFyaWFibGVSZWYud3JhcChwdHIpKQotICAgICAgICBd
KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKKyAgICAgICAgbGV0IHJlYWRNb2RpZnlXcml0ZSA9IG5l
dyBSZWFkTW9kaWZ5V3JpdGUodG9rZW4sIGxlZnQpOworICAgICAgICByZWFkTW9kaWZ5V3JpdGUu
bmV3VmFsdWVFeHAgPSBlbWl0SW5jcmVtZW50KHRva2VuLCByZWFkTW9kaWZ5V3JpdGUub2xkVmFs
dWVSZWYoKSwgZXh0cmFBcmcpOworICAgICAgICByZWFkTW9kaWZ5V3JpdGUucmVzdWx0RXhwID0g
cmVhZE1vZGlmeVdyaXRlLm5ld1ZhbHVlUmVmKCk7CisgICAgICAgIHJldHVybiByZWFkTW9kaWZ5
V3JpdGU7CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIHBhcnNlUHJlSW5jcmVtZW50KCkKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkocmV2aXNpb24gMjIy
MTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsOSBAQCBmdW5jdGlvbiBwcmVwYXJlKG9yaWdpbiwgbGluZU51
bWJlck9mZnNlCiAgICAgcmVzb2x2ZU5hbWVzKHByb2dyYW0pOwogICAgIHJlc29sdmVUeXBlRGVm
cyhwcm9ncmFtKTsKICAgICBmbGF0dGVuUHJvdG9jb2xFeHRlbmRzKHByb2dyYW0pOworICAgIHN5
bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSk7CiAgICAgY2hlY2socHJvZ3JhbSk7Cisg
ICAgcmVzb2x2ZVByb3BlcnRpZXMocHJvZ3JhbSk7CiAgICAgY2hlY2tMaXRlcmFsVHlwZXMocHJv
Z3JhbSk7CiAgICAgY2hlY2tQcm9ncmFtV3JhcHBlZChwcm9ncmFtKTsKICAgICBjaGVja1JldHVy
bnMocHJvZ3JhbSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGdldCByZXN1bHRUeXBlKCkgeyBy
ZXR1cm4gdGhpcy5yZXN1bHRUeXBlRm9yR2V0ID8gdGhpcy5yZXN1bHRUeXBlRm9yR2V0IDogdGhp
cy5yZXN1bHRUeXBlRm9yQW5kOyB9CisgICAgCisgICAgcmV3cml0ZUFmdGVyQ2xvbmluZygpCisg
ICAgeworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBub2RlLmJhc2UuaXNMVmFsdWUgd2lsbCBv
bmx5IHJldHVybiB0cnVlIGlmIGl0J3MgcG9zc2libGUgdG8gZ2V0IGEgcG9pbnRlciB0byBpdCwK
KyAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCBubyBsb25nZXIgc2VlIGFueSBEb3RFeHByZXNzaW9u
cyBvciBJbmRleEV4cHJlc3Npb25zLiBBbHNvLCBub2RlIGlzIGEgbmV3bHkgY3JlYXRlZAorICAg
ICAgICAvLyBub2RlIGFuZCBldmVyeXRoaW5nIGJlbmVhdGggaXQgaXMgbmV3bHkgY3JlYXRlZCwg
c28gd2UgY2FuIGVkaXQgaXQgaW4tcGxhY2UuCisgICAgICAgIAorICAgICAgICBpZiAoKG5vZGUu
YmFzZS5pc0xWYWx1ZSB8fCBub2RlLmJhc2VUeXBlLmlzUmVmKSAmJiBub2RlLmNhbGxGb3JBbmQp
CisgICAgICAgICAgICByZXR1cm4gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlLm9yaWdp
biwgbm9kZS5jYWxsRm9yQW5kKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLmNhbGxGb3JH
ZXQpCisgICAgICAgICAgICByZXR1cm4gbm9kZS5jYWxsRm9yR2V0OworICAgICAgICAKKyAgICAg
ICAgbGV0IGFub25WYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUu
YmFzZVR5cGUpOworICAgICAgICBub2RlLmNhbGxGb3JBbmQuYXJndW1lbnRMaXN0WzBdID0gbm9k
ZS5iYXNlVHlwZS51bmlmeU5vZGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZChub2RlLm9yaWdpbiwg
VmFyaWFibGVSZWYud3JhcChhbm9uVmFyKSk7CisgICAgICAgIHJldHVybiBuZXcgQ29tbWFFeHBy
ZXNzaW9uKG5vZGUub3JpZ2luLCBbCisgICAgICAgICAgICBhbm9uVmFyLAorICAgICAgICAgICAg
bmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAoYW5vblZhciksIG5v
ZGUuYmFzZSwgbm9kZS5iYXNlVHlwZSksCisgICAgICAgICAgICBub2RlLmNhbGxGb3JBbmQKKyAg
ICAgICAgXSk7CisgICAgfQorICAgIAorICAgIHVwZGF0ZUNhbGxzQWZ0ZXJDaGFuZ2luZ0Jhc2Uo
KQorICAgIHsKKyAgICAgICAgdGhpcy5jYWxsRm9yR2V0WzBdID0gdGhpcy5iYXNlOworICAgICAg
ICB0aGlzLmNhbGxGb3JBbmRbMF0gPSB0aGlzLmJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3Zlcmxv
YWQodGhpcy5vcmlnaW4sIHRoaXMuYmFzZSk7CisgICAgICAgIHRoaXMuY2FsbEZvclNldFswXSA9
IHRoaXMuYmFzZTsKKyAgICB9CisgICAgCisgICAgZW1pdEdldChiYXNlKQorICAgIHsKKyAgICAg
ICAgbGV0IHJlc3VsdCA9IHRoaXMudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICByZXN1
bHQuYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC51cGRhdGVDYWxsc0FmdGVyQ2hhbmdpbmdC
YXNlKCk7CisgICAgICAgIHJldHVybiByZXN1bHQucmV3cml0ZUFmdGVyQ2xvbmluZygpOworICAg
IH0KKyAgICAKKyAgICBlbWl0U2V0KGJhc2UsIHZhbHVlKQorICAgIHsKKyAgICAgICAgbGV0IHJl
c3VsdCA9IHRoaXMudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICByZXN1bHQuYmFzZSA9
IGJhc2U7CisgICAgICAgIHJlc3VsdC51cGRhdGVDYWxsc0FmdGVyQ2hhbmdpbmdCYXNlKCk7Cisg
ICAgICAgIHJlc3VsdC5jYWxsRm9yU2V0WzJdID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1
bHQuY2FsbEZvclNldDsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Byb3BlcnR5UmVzb2x2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlSZXNvbHZlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eVJlc29sdmVyLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFByb3BlcnR5UmVzb2x2ZXIgZXh0ZW5k
cyBWaXNpdG9yIHsKKyAgICBfdmlzaXRQcm9wZXJ0eUFjY2Vzcyhub2RlKQorICAgIHsKKyAgICAg
ICAgbGV0IG5ld05vZGUgPSBub2RlLnZpc2l0KG5ldyBOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVy
KCkpOworICAgICAgICBuZXdOb2RlLnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLmJlY29tZShu
ZXdOb2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAg
eworICAgICAgICB0aGlzLl92aXNpdFByb3BlcnR5QWNjZXNzKG5vZGUpOworICAgIH0KKyAgICAK
KyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fdmlz
aXRQcm9wZXJ0eUFjY2Vzcyhub2RlKTsKKyAgICB9CisgICAgCisgICAgX2hhbmRsZVJlYWRNb2Rp
ZnlXcml0ZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHR5cGUgPSBub2RlLm9sZFZhbHVlVmFy
LnR5cGU7CisgICAgICAgIGxldCBzaW1wbGVMSFMgPSBub2RlLmxWYWx1ZS52aXNpdChuZXcgTm9y
bWFsVXNlUHJvcGVydHlSZXNvbHZlcigpKTsKKyAgICAgICAgaWYgKHNpbXBsZUxIUy5pc0xWYWx1
ZSkgeworICAgICAgICAgICAgbGV0IHB0clR5cGUgPSBuZXcgUHRyVHlwZShub2RlLm9yaWdpbiwg
dHlwZSk7CisgICAgICAgICAgICBsZXQgcHRyVmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG5v
ZGUub3JpZ2luLCBwdHJUeXBlKTsKKyAgICAgICAgICAgIG5vZGUuYmVjb21lKG5ldyBDb21tYUV4
cHJlc3Npb24obm9kZS5vcmlnaW4sIFsKKyAgICAgICAgICAgICAgICBub2RlLm9sZFZhbHVlVmFy
LCBub2RlLm5ld1ZhbHVlVmFyLCBwdHJWYXIsCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1l
bnQoCisgICAgICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHB0
clZhciksCisgICAgICAgICAgICAgICAgICAgIG5ldyBNYWtlUHRyRXhwcmVzc2lvbihub2RlLm9y
aWdpbiwgc2ltcGxlTEhTKSwgcHRyVHlwZSksCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1l
bnQoCisgICAgICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm9sZFZhbHVlUmVmKCks
CisgICAgICAgICAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZS5vcmln
aW4sIFZhcmlhYmxlUmVmLndyYXAocHRyVmFyKSksIHR5cGUpLAorICAgICAgICAgICAgICAgIG5l
dyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2RlLm5ld1ZhbHVlUmVmKCksIG5vZGUubmV3VmFs
dWVFeHAsIHR5cGUpLAorICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KAorICAgICAgICAg
ICAgICAgICAgICBub2RlLm9yaWdpbiwgbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlLm9y
aWdpbiwgVmFyaWFibGVSZWYud3JhcChwdHJWYXIpKSwKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS5uZXdWYWx1ZVJlZigpLCB0eXBlKSwKKyAgICAgICAgICAgICAgICBub2RlLnJlc3VsdEV4cAor
ICAgICAgICAgICAgXSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9k
ZS5vcmlnaW4sIG5vZGUubFZhbHVlLmJhc2UpOworICAgICAgICByZXN1bHQubmV3VmFsdWVFeHAg
PSBuZXcgQ29tbWFFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBbCisgICAgICAgICAgICBub2RlLm9s
ZFZhbHVlVmFyLCBub2RlLm5ld1ZhbHVlVmFyLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQo
bm9kZS5vcmlnaW4sIG5vZGUub2xkVmFsdWVSZWYoKSwgbm9kZS5sVmFsdWUuZW1pdEdldChyZXN1
bHQub2xkVmFsdWVSZWYoKSksIHR5cGUpLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9k
ZS5vcmlnaW4sIG5vZGUubmV3VmFsdWVSZWYoKSwgbm9kZS5uZXdWYWx1ZUV4cCwgdHlwZSksCisg
ICAgICAgICAgICBub2RlLmxWYWx1ZS5lbWl0U2V0KHJlc3VsdC5vbGRWYWx1ZVJlZigpLCBub2Rl
Lm5ld1ZhbHVlUmVmKCkpCisgICAgICAgIF0pOworICAgICAgICByZXN1bHQucmVzdWx0RXhwID0g
bm9kZS5uZXdWYWx1ZVJlZigpOworICAgICAgICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUo
cmVzdWx0KTsKKyAgICAgICAgbm9kZS5iZWNvbWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAg
dmlzaXRSZWFkTW9kaWZ5V3JpdGUobm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUubmV3VmFsdWVF
eHAudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUucmVzdWx0RXhwLnZpc2l0KHRoaXMpOworICAg
ICAgICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUobm9kZSk7CisgICAgfQorICAgIAorICAg
IHZpc2l0QXNzaWdubWVudChub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5yaHMudmlzaXQodGhp
cyk7CisgICAgICAgIAorICAgICAgICBsZXQgc2ltcGxlTEhTID0gbm9kZS5saHMudmlzaXQobmV3
IE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIoKSk7CisgICAgICAgIGlmIChzaW1wbGVMSFMuaXNM
VmFsdWUpIHsKKyAgICAgICAgICAgIG5vZGUubGhzID0gc2ltcGxlTEhTOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIShub2RlLmxocyBpbnN0
YW5jZW9mIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikpCisgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIlVuZXhwZWN0ZWQgbGhzIHR5cGU6ICIgKyBub2RlLmxocy5jb25zdHJ1Y3Rvci5uYW1l
KTsKKyAgICAgICAgCisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5saHMuYmFzZSk7CisgICAgICAgIGxldCByZXN1bHRW
YXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUudHlwZSk7CisgICAg
ICAgIHJlc3VsdC5uZXdWYWx1ZUV4cCA9IG5ldyBDb21tYUV4cHJlc3Npb24oWworICAgICAgICAg
ICAgcmVzdWx0VmFyLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIFZh
cmlhYmxlUmVmLndyYXAocmVzdWx0VmFyKSwgbm9kZS5yaHMsIG5vZGUudHlwZSksCisgICAgICAg
ICAgICBub2RlLmxocy5lbWl0U2V0KHJlc3VsdC5vbGRWYWx1ZVJlZigpLCBWYXJpYWJsZVJlZi53
cmFwKHJlc3VsdFZhcikpCisgICAgICAgIF0pOworICAgICAgICByZXN1bHQucmVzdWx0RXhwID0g
VmFyaWFibGVSZWYud3JhcChyZXN1bHRWYXIpOworICAgICAgICB0aGlzLl9oYW5kbGVSZWFkTW9k
aWZ5V3JpdGUocmVzdWx0KTsKKyAgICAgICAgbm9kZS5iZWNvbWUocmVzdWx0KTsKKyAgICB9Cisg
ICAgCisgICAgdmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgc3Vw
ZXIudmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgaWYgKCFub2RlLmxWYWx1
ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2lu
Lm9yaWdpblN0cmluZywgIk5vdCBhbiBsdmFsdWU6ICIgKyBub2RlLmxWYWx1ZSk7CisgICAgfQor
ICAgIAorICAgIHZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAg
ICAgc3VwZXIudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpOworICAgICAgICBpZiAo
IW5vZGUubFZhbHVlLmlzTFZhbHVlKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Io
bm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTm90IGFuIGx2YWx1ZTogIiArIG5vZGUubFZhbHVl
KTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5
cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlw
ZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHRyVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTkgQEAgY2xhc3MgUHRyVHlw
ZSBleHRlbmRzIFJlZmVyZW5jZVR5cGUgewogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlw
ZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CiAg
ICAgCisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIlBvaW50ZXIg
c3Vic2NyaXB0IGlzIG5vdCB2YWxpZCIpOworICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRP
dmVybG9hZChvcmlnaW4sIHR5cGUpCisgICAgeworICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJv
cihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMgbm90IHZhbGlkIik7
CisgICAgfQorICAgIHJldHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQob3JpZ2luKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGU7CisgICAgfQorCiAgICAgdG9TdHJpbmcoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUgKyAiXiAiICsgdGhpcy5hZGRy
ZXNzU3BhY2U7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW4s
IGxWYWx1ZSkKKyAgICB7CisgICAgICAgIHN1cGVyKG9yaWdpbik7CisgICAgICAgIHRoaXMuX2xW
YWx1ZSA9IGxWYWx1ZTsKKyAgICAgICAgdGhpcy5vbGRWYWx1ZVZhciA9IG5ldyBBbm9ueW1vdXNW
YXJpYWJsZShvcmlnaW4pOworICAgICAgICB0aGlzLm5ld1ZhbHVlVmFyID0gbmV3IEFub255bW91
c1ZhcmlhYmxlKG9yaWdpbik7CisgICAgICAgIHRoaXMubmV3VmFsdWVFeHAgPSBudWxsOworICAg
ICAgICB0aGlzLnJlc3VsdEV4cCA9IG51bGw7CisgICAgfQorICAgIAorICAgIGdldCBsVmFsdWUo
KSB7IHJldHVybiB0aGlzLl9sVmFsdWU7IH0KKyAgICAKKyAgICBvbGRWYWx1ZVJlZigpIHsgcmV0
dXJuIFZhcmlhYmxlUmVmLndyYXAodGhpcy5vbGRWYWx1ZVZhcik7IH0KKyAgICBuZXdWYWx1ZVJl
ZigpIHsgcmV0dXJuIFZhcmlhYmxlUmVmLndyYXAodGhpcy5uZXdWYWx1ZVZhcik7IH0KKyAgICAK
KyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIlJNVygiICsgdGhpcy5sVmFs
dWUgKyAiLCAiICsgdGhpcy5vbGRWYWx1ZVZhciArICIsICIgKyB0aGlzLm5ld1ZhbHVlVmFyICsg
IiwgIiArIHRoaXMubmV3VmFsdWVFeHAgKyAiLCAiICsgdGhpcy5yZXN1bHRFeHAgKyAiKSI7Cisg
ICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJv
cGVydGllcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9S
ZXNvbHZlUHJvcGVydGllcy5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNl
IHN0cmljdCI7CisKK2Z1bmN0aW9uIHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pCit7CisgICAg
cHJvZ3JhbS52aXNpdChuZXcgUHJvcGVydHlSZXNvbHZlcigpKTsKK30KSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTAgKzI3LDkgQEAKIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoYXZlIHNlbnNpYmxlIGJl
aGF2aW9yIHdoZW4gaXQgZW5jb3VudGVycyBkZWZpbml0aW9ucyB0aGF0IGl0IGNhbm5vdCBoYW5k
bGUuIFJpZ2h0CiAvLyBub3cgd2UgYXJlIGhhY2tpc2hseSBwcmV2ZW50aW5nIHRoaXMgYnkgd3Jh
cHBpbmcgdGhpbmdzIGluIFR5cGVSZWYuIFRoYXQncyBwcm9iYWJseSB3cm9uZy4KIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYyMDgKLWNsYXNzIFJld3JpdGVy
IGV4dGVuZHMgVmlzaXRvckJhc2UgeworY2xhc3MgUmV3cml0ZXIgewogICAgIGNvbnN0cnVjdG9y
KCkKICAgICB7Ci0gICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX21hcHBpbmcgPSBuZXcg
TWFwKCk7CiAgICAgfQogICAgIApAQCAtMTgwLDYgKzE3OSwxMCBAQCBjbGFzcyBSZXdyaXRlciBl
eHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgcmVzdWx0LnN0cnVjdFR5cGUgPSBub2RlLnN0
cnVjdFR5cGUgPyBub2RlLnN0cnVjdFR5cGUudmlzaXQodGhpcykgOiBudWxsOwogICAgICAgICAv
LyBXZSBkb24ndCB3YW50IHRvIHJld3JpdGUgZmllbGQsIHNpbmNlIHRoaXMgaXMgYSBkZWVwIHJl
ZmVyZW5jZSBnb2luZyBvdXQgb2YgdGhlIGZ1bmN0aW9uLgogICAgICAgICAvLyBBbHNvLCB0aGlz
IGlzIHNldCB1cCBkdXJpbmcgaW5saW5pbmcsIHNvIHdlJ3JlIGFscmVhZHkgZnVsbHkgbW9ub21v
cnBoaXNlZC4KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGNvcHkgdGhl
IGNhbGxGb3JHZXQvY2FsbEZvckFuZCwgYW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhl
IHJlc3VsdCBoYXMKKyAgICAgICAgLy8gZXhhY3RseSB0aGUgcmlnaHQgYXJndW1lbnRMaXN0LiBU
aGlzIG1lYW5zIHJlYnVpbGRpbmcgdGhlIGFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQgdGhpbmcuCisg
ICAgICAgIAogICAgICAgICByZXN1bHQuZmllbGQgPSBub2RlLmZpZWxkOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0
cnVjdFR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3RydWN0VHlwZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvU3RydWN0VHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBj
bGFzcyBTdHJ1Y3RUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIAotICAgIGluc3RhbnRpYXRlKHR5cGVBcmd1bWVudHMsIG1vZGUpCisgICAgaW5z
dGFudGlhdGUodHlwZUFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIGlmICh0eXBlQXJndW1lbnRz
Lmxlbmd0aCAhPSB0aGlzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkKICAgICAgICAgICAgIHRocm93
IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJXcm9uZyBudW1iZXIgb2YgdHlw
ZSBhcmd1bWVudHMgdG8gaW5zdGFudGlhdGlvbiIpOwpAQCAtNjYsMTIgKzY2LDExIEBAIGNsYXNz
IFN0cnVjdFR5cGUgZXh0ZW5kcyBUeXBlIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg
ICAgICAKICAgICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9IG5ldyBTdWJzdGl0dXRpb24odGhpcy50
eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7Ci0gICAgICAgIGxldCBpbnN0YW50aWF0ZUlt
bWVkaWF0ZXMgPSBtb2RlID09ICJzaGFsbG93IiA/IG51bGwgOiBuZXcgSW5zdGFudGlhdGVJbW1l
ZGlhdGVzKCk7CisgICAgICAgIGxldCBpbnN0YW50aWF0ZUltbWVkaWF0ZXMgPSBuZXcgSW5zdGFu
dGlhdGVJbW1lZGlhdGVzKCk7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3RydWN0VHlwZSh0
aGlzLm9yaWdpbiwgdGhpcy5uYW1lLCBbXSk7CiAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRo
aXMuZmllbGRzKSB7CiAgICAgICAgICAgICBsZXQgbmV3RmllbGQgPSBmaWVsZC52aXNpdChzdWJz
dGl0dXRpb24pOwotICAgICAgICAgICAgaWYgKGluc3RhbnRpYXRlSW1tZWRpYXRlcykKLSAgICAg
ICAgICAgICAgICBuZXdGaWVsZCA9IG5ld0ZpZWxkLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRl
cyk7CisgICAgICAgICAgICBuZXdGaWVsZCA9IG5ld0ZpZWxkLnZpc2l0KGluc3RhbnRpYXRlSW1t
ZWRpYXRlcyk7CiAgICAgICAgICAgICByZXN1bHQuYWRkKG5ld0ZpZWxkKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCShub25leGlz
dGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RB
Y2Nlc3NvcnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rp
b24gc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycyhwcm9ncmFtKQoreworICAgIGZvciAobGV0IHR5
cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoISh0eXBlIGluc3Rh
bmNlb2YgU3RydWN0VHlwZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAobGV0IGZpZWxkIG9mIHR5cGUuZmllbGRzKSB7CisgICAgICAgICAgICBmdW5jdGlv
biBjcmVhdGVUeXBlUGFyYW1ldGVycygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHR5cGUudHlwZVBhcmFtZXRlcnMubWFwKAorICAgICAgICAgICAgICAgICAgICB0eXBl
UGFyYW1ldGVyID0+IHR5cGVQYXJhbWV0ZXIudmlzaXQobmV3IFR5cGVQYXJhbWV0ZXJSZXdyaXRl
cigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9u
IGNyZWF0ZVR5cGVBcmd1bWVudHMoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0eXBlUGFyYW1ldGVycy5tYXAodHlwZVBhcmFtZXRlciA9PiB0eXBlUGFyYW1ldGVyLnZp
c2l0KG5ldyBBdXRvV3JhcHBlcigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIHNldHVwSW1wbGVtZW50YXRpb24obmF0aXZlRnVuYywgaW1wbGVt
ZW50YXRpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmF0aXZlRnVuYy5pbnN0
YW50aWF0ZUltcGxlbWVudGF0aW9uID0gc3Vic3RpdHV0aW9uID0+IHsKKyAgICAgICAgICAgICAg
ICAgICAgbGV0IG5ld1R5cGUgPSB0eXBlLnZpc2l0KHN1YnN0aXR1dGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7dHlwZTogbmV3VHlwZSwgZmllbGQ6IG5ld1R5cGUuZmllbGRCeU5h
bWUoZmllbGQubmFtZSl9OworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgbmF0
aXZlRnVuYy52aXNpdEltcGxlbWVudGF0aW9uRGF0YSA9IChpbXBsZW1lbnRhdGlvbkRhdGEsIHZp
c2l0b3IpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXRpbmcgdGhlIHR5cGUgZmly
c3QgZW5zdXJlcyB0aGF0IHRoZSBzdHJ1Y3QgbGF5b3V0IGJ1aWxkZXIgZmlndXJlcyBvdXQgdGhl
IGZpZWxkJ3MKKyAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0LgorICAgICAgICAgICAgICAg
ICAgICBpbXBsZW1lbnRhdGlvbkRhdGEudHlwZS52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLmZpZWxkLnZpc2l0KHZpc2l0b3IpOworICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgbmF0aXZlRnVuYy5pbXBsZW1lbnRhdGlvbiA9
IChhcmd1bWVudExpc3QsIG5vZGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5hdGl2
ZUZ1bmNJbnN0YW5jZSA9IG5vZGUubmF0aXZlRnVuY0luc3RhbmNlOworICAgICAgICAgICAgICAg
ICAgICBsZXQgaW1wbGVtZW50YXRpb25EYXRhID0gbmF0aXZlRnVuY0luc3RhbmNlLmltcGxlbWVu
dGF0aW9uRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uKAor
ICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRMaXN0LCBpbXBsZW1lbnRhdGlvbkRhdGEu
ZmllbGQub2Zmc2V0LCBpbXBsZW1lbnRhdGlvbkRhdGEudHlwZS5zaXplLCBpbXBsZW1lbnRhdGlv
bkRhdGEuZmllbGQudHlwZS5zaXplKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVGaWVsZFR5cGUoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC50eXBlLnZpc2l0KG5l
dyBTdWJzdGl0dXRpb24odHlwZS50eXBlUGFyYW1ldGVycywgdHlwZVBhcmFtZXRlcnMpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlw
ZVJlZigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVSZWYuaW5z
dGFudGlhdGUodHlwZSwgY3JlYXRlVHlwZUFyZ3VtZW50cygpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbGV0IGlzQ2FzdCA9IGZhbHNlOworICAgICAgICAgICAg
bGV0IHR5cGVQYXJhbWV0ZXJzOworICAgICAgICAgICAgbGV0IG5hdGl2ZUZ1bmM7CisKKyAgICAg
ICAgICAgIC8vIFRoZSBnZXR0ZXI6IG9wZXJhdG9yLmZpZWxkCisgICAgICAgICAgICB0eXBlUGFy
YW1ldGVycyA9IGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCk7CisgICAgICAgICAgICBuYXRpdmVGdW5j
ID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAgICAgICAgICAgICAgZmllbGQub3JpZ2luLCAib3BlcmF0
b3IuIiArIGZpZWxkLm5hbWUsIGNyZWF0ZUZpZWxkVHlwZSgpLCB0eXBlUGFyYW1ldGVycywgW2Ny
ZWF0ZVR5cGVSZWYoKV0sCisgICAgICAgICAgICAgICAgaXNDYXN0KTsKKyAgICAgICAgICAgIHNl
dHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0
U2l6ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBF
UHRyKG5ldyBFQnVmZmVyKGZpZWxkU2l6ZSksIDApOworICAgICAgICAgICAgICAgIHJlc3VsdC5j
b3B5RnJvbShiYXNlLnBsdXMob2Zmc2V0KSwgZmllbGRTaXplKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBwcm9ncmFtLmFkZChu
YXRpdmVGdW5jKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhlIHNldHRlcjogb3Bl
cmF0b3IuZmllbGQ9CisgICAgICAgICAgICB0eXBlUGFyYW1ldGVycyA9IGNyZWF0ZVR5cGVQYXJh
bWV0ZXJzKCk7CisgICAgICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAg
ICAgICAgICAgICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3IuIiArIGZpZWxkLm5hbWUgKyAiPSIs
IGNyZWF0ZVR5cGVSZWYoKSwgdHlwZVBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgW2NyZWF0
ZVR5cGVSZWYoKSwgY3JlYXRlRmllbGRUeXBlKCldLCBpc0Nhc3QpOworICAgICAgICAgICAgc2V0
dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlLCB2YWx1ZV0sIG9mZnNldCwg
c3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9
IG5ldyBFUHRyKG5ldyBFQnVmZmVyKHN0cnVjdFNpemUpLCAwKTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuY29weUZyb20oYmFzZSwgc3RydWN0U2l6ZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0
LnBsdXMob2Zmc2V0KS5jb3B5RnJvbSh2YWx1ZSwgZmllbGRTaXplKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBwcm9ncmFtLmFk
ZChuYXRpdmVGdW5jKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBv
cGVyYXRvciYuZmllbGQKKyAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzID0gY3JlYXRlVHlwZVBh
cmFtZXRlcnMoKTsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAg
ICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvciYuIiArIGZpZWxkLm5hbWUsIG5l
dyBQdHJUeXBlKGZpZWxkLm9yaWdpbiwgY3JlYXRlRmllbGRUeXBlKCkpLAorICAgICAgICAgICAg
ICAgIHR5cGVQYXJhbWV0ZXJzLCBbbmV3IFB0clR5cGUoZmllbGQub3JpZ2luLCBjcmVhdGVUeXBl
UmVmKCkpXSwgaXNDYXN0KTsKKyAgICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5h
dGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7Cisg
ICAgICAgICAgICAgICAgYmFzZSA9IGJhc2UubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAg
aWYgKCFiYXNlKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2Rl
Lm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEVQdHIuYm94KGJhc2UucGx1cyhvZmZzZXQpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CisgICAgICAgIH0KKyAgICB9Cit9
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCShyZXZpc2lvbiAy
MjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTYsNyArNiw2IEBACiA8c2NyaXB0IHNyYz0iUmVmZXJlbmNlVHlwZS5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmFsdWUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IkV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9IlZpc2l0b3JCYXNlLmpzIj48
L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXdyaXRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iVmlzaXRvci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ3JlYXRlTGl0ZXJhbC5qcyI+
PC9zY3JpcHQ+CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHJldmlz
aW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAgY2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewog
ICAgIGdldCBraW5kKCkgeyByZXR1cm4gVHlwZTsgfQogICAgIGdldCBpc1B0cigpIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgZ2V0IGlzQXJyYXlSZWYoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGdl
dCBpc1JlZigpIHsgcmV0dXJuIHRoaXMuaXNQdHIgfHwgdGhpcy5pc0FycmF5UmVmOyB9CiAgICAg
Z2V0IGlzTnVtYmVyKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNJbnQoKSB7IHJldHVy
biBmYWxzZTsgfQogICAgIGdldCBpc0Zsb2F0KCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTQxLDUg
KzQyLDE5IEBAIGNsYXNzIFR5cGUgZXh0ZW5kcyBOb2RlIHsKICAgICB9CiAgICAgCiAgICAgZ2V0
IGluc3RhbnRpYXRlZFR5cGUoKSB7IHJldHVybiB0aGlzLnZpc2l0KG5ldyBJbnN0YW50aWF0ZUlt
bWVkaWF0ZXMoKSk7IH0KKyAgICAKKyAgICAvLyBIYXZlIHRvIGNhbGwgdGhlc2Ugb24gdGhlIHVu
aWZ5Tm9kZS4KKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IE1ha2VQdHJFeHByZXNzaW9uKG9yaWdpbiwgdmFsdWUpOwor
ICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChvcmlnaW4pCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IFB0clR5cGUob3JpZ2luLCAidGhyZWFkIiwgdGhpcyk7CisgICAgfQor
ICAgIHJldHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQob3JpZ2luKQorICAgIHsKKyAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIkJ5LXBvaW50ZXIgb3Zlcmxv
YWQgcmV0dXJuZWQgbm9uLXBvaW50ZXIgdHlwZTogIiArIHRoaXMpOworICAgIH0KIH0KIApJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJhbWV0
ZXJSZXdyaXRlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UeXBlUGFyYW1ldGVyUmV3cml0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBz
dHJpY3QiOworCitjbGFzcyBUeXBlUGFyYW1ldGVyUmV3cml0ZXIgeworICAgIHZpc2l0Q29uc3Rl
eHByVHlwZVBhcmFtZXRlcihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDb25zdGV4
cHJUeXBlUGFyYW1ldGVyKG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUudHlwZSk7CisgICAg
fQorICAgIAorICAgIHZpc2l0VHlwZVZhcmlhYmxlKG5vZGUpCisgICAgeworICAgICAgICByZXR1
cm4gbmV3IFR5cGVWYXJpYWJsZShub2RlLm9yaWdpbiwgbm9kZS5uYW1lLCBub2RlLnByb3RvY29s
KTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVW
YXJpYWJsZVRyYWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVHlwZVZhcmlhYmxlVHJhY2tlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgVHlwZVZhcmlhYmxlVHJhY2tlciBleHRlbmRz
IFZpc2l0b3IgeworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3NldCA9
IG5ldyBTZXQoKTsKKyAgICB9CisgICAgCisgICAgZ2V0IHNldCgpIHsgcmV0dXJuIHRoaXMuX3Nl
dDsgfQorICAgIAorICAgIF9jb25zaWRlcih0aGluZykKKyAgICB7CisgICAgICAgIGlmICh0aGlu
Zy5pc1VuaWZpYWJsZSkKKyAgICAgICAgICAgIHRoaXMuX3NldC5hZGQodGhpbmcpOworICAgIH0K
KyAgICAKKyAgICB2aXNpdFR5cGVSZWYobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2NvbnNp
ZGVyKG5vZGUudHlwZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkK
KyAgICB7CisgICAgICAgIHRoaXMuX2NvbnNpZGVyKHRoaXMudmFyaWFibGUpOworICAgIH0KK30K
KwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUuanMJKHJldmlzaW9uIDIy
MjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhbHVlLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw1ICsyOCwxMiBAQCBjbGFzcyBWYWx1ZSBleHRlbmRzIE5vZGUgewogICAg
IGdldCBraW5kKCkgeyByZXR1cm4gVmFsdWU7IH0KICAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
CisgICAgYmVjb21lKG90aGVyVmFsdWUpCisgICAgeworICAgICAgICAvLyBOT1RFOiBNYWtlIHN1
cmUgdGhhdCBJZGVudGl0eUV4cHJlc3Npb24gaW1wbGVtZW50cyB1bmlmeU5vZGUgYW5kIGFsbCB0
aGF0CisgICAgICAgIHRoaXMuX19wcm90b19fID0gSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlw
ZTsKKyAgICAgICAgdGhpcy50YXJnZXQgPSBvdGhlclZhbHVlOworICAgIH0KIH0KIApJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanMJKHJldmlzaW9u
IDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsOSBAQCBjbGFzcyBWYXJpYWJsZVJlZiBleHRl
bmRzIEV4cHJlc3Npb24gewogICAgIAogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFt
ZTsgfQogICAgIGdldCBpc0NvbnN0ZXhwcigpIHsgcmV0dXJuIHRoaXMudmFyaWFibGUuaXNDb25z
dGV4cHI7IH0KLSAgICBnZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZS51bmlm
eU5vZGU7IH0KKyAgICBnZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZS51bmlm
eU5vZGU7IH0gLy8gVGhpcyBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gdGhpcyBpcyBhIGNvbnN0ZXhw
ci4KICAgICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgZ2V0IGFkZHJlc3NT
cGFjZSgpIHsgcmV0dXJuICJ0aHJlYWQiOyB9Ci0gICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJu
IHRoaXMudmFyaWFibGU7IH0KICAgICAKICAgICB0b1N0cmluZygpCiAgICAgewpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCShyZXZpc2lvbiAyMjIxMjMpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCwxMiArMjQsNyBAQAogICovCiAidXNlIHN0cmljdCI7CiAKLWNsYXNzIFZpc2l0b3Ig
ZXh0ZW5kcyBWaXNpdG9yQmFzZSB7Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAg
c3VwZXIoKTsKLSAgICB9Ci0gICAgCitjbGFzcyBWaXNpdG9yIHsKICAgICB2aXNpdFByb2dyYW0o
bm9kZSkKICAgICB7CiAgICAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBub2RlLnRvcExldmVs
U3RhdGVtZW50cykKQEAgLTcwLDYgKzY1LDcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0
b3JCYXNlIHsKICAgICB7CiAgICAgICAgIG5vZGUuZnVuYy52aXNpdCh0aGlzKTsKICAgICAgICAg
dGhpcy52aXNpdEZ1bmMobm9kZSk7CisgICAgICAgIG5vZGUuZnVuYy52aXNpdEltcGxlbWVudGF0
aW9uRGF0YShub2RlLmltcGxlbWVudGF0aW9uRGF0YSwgdGhpcyk7CiAgICAgfQogICAgIAogICAg
IHZpc2l0QmxvY2sobm9kZSkKQEAgLTMwMyw2ICsyOTksOCBAQCBjbGFzcyBWaXNpdG9yIGV4dGVu
ZHMgVmlzaXRvckJhc2UgewogICAgICAgICAgICAgZm9yIChsZXQgYXJndW1lbnQgb2YgYWN0dWFs
VHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAg
ICAgICAgfQorICAgICAgICBpZiAobm9kZS5uYXRpdmVGdW5jSW5zdGFuY2UpCisgICAgICAgICAg
ICBub2RlLm5hdGl2ZUZ1bmNJbnN0YW5jZS52aXNpdCh0aGlzKTsKICAgICAgICAgaWYgKG5vZGUu
cmV0dXJuVHlwZSkKICAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsKICAg
ICAgICAgaWYgKG5vZGUucmVzdWx0VHlwZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Zpc2l0b3JCYXNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yQmFzZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDMy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1
c2Ugc3RyaWN0IjsKLQotY2xhc3MgVmlzaXRvckJhc2UgewotICAgIGNvbnN0cnVjdG9yKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX21lbW9UYWJsZSA9IG5ldyBNYXAoKTsKLSAgICB9Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321017</attachid>
            <date>2017-09-16 16:19:04 -0700</date>
            <delta_ts>2017-09-16 18:06:00 -0700</delta_ts>
            <desc>starting to test it</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>85409</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjksMTMgKzI5LDE0IEBAIGxvYWQoIlR5cGUuanMiKTsKIGxvYWQoIlJlZmVyZW5jZVR5cGUu
anMiKTsKIGxvYWQoIlZhbHVlLmpzIik7CiBsb2FkKCJFeHByZXNzaW9uLmpzIik7Ci1sb2FkKCJW
aXNpdG9yQmFzZS5qcyIpOwogbG9hZCgiUmV3cml0ZXIuanMiKTsKIGxvYWQoIlZpc2l0b3IuanMi
KTsKIGxvYWQoIkNyZWF0ZUxpdGVyYWwuanMiKTsKIGxvYWQoIkNyZWF0ZUxpdGVyYWxUeXBlLmpz
Iik7Citsb2FkKCJQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMiKTsKIAogbG9hZCgiQWRkcmVz
c1NwYWNlLmpzIik7Citsb2FkKCJBbm9ueW1vdXNWYXJpYWJsZS5qcyIpOwogbG9hZCgiQXJyYXlS
ZWZUeXBlLmpzIik7CiBsb2FkKCJBcnJheVR5cGUuanMiKTsKIGxvYWQoIkFzc2lnbm1lbnQuanMi
KTsKQEAgLTc3LDYgKzc4LDcgQEAgbG9hZCgiRnVuY0luc3RhbnRpYXRvci5qcyIpOwogbG9hZCgi
RnVuY1BhcmFtZXRlci5qcyIpOwogbG9hZCgiRnVuY3Rpb25MaWtlQmxvY2suanMiKTsKIGxvYWQo
IklmU3RhdGVtZW50LmpzIik7Citsb2FkKCJJbmRleEV4cHJlc3Npb24uanMiKTsKIGxvYWQoIklu
ZmVyVHlwZXNGb3JDYWxsLmpzIik7CiBsb2FkKCJJbmxpbmUuanMiKTsKIGxvYWQoIklubGluZXIu
anMiKTsKQEAgLTg0LDcgKzg2LDYgQEAgbG9hZCgiSW5zdGFudGlhdGVJbW1lZGlhdGVzLmpzIik7
CiBsb2FkKCJJbnRMaXRlcmFsLmpzIik7CiBsb2FkKCJJbnRMaXRlcmFsVHlwZS5qcyIpOwogbG9h
ZCgiSW50cmluc2ljcy5qcyIpOwotbG9hZCgiTGV0RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiTGV4
ZXIuanMiKTsKIGxvYWQoIkxleGVyVG9rZW4uanMiKTsKIGxvYWQoIkxpdGVyYWxUeXBlQ2hlY2tl
ci5qcyIpOwpAQCAtOTgsMjAgKzk5LDI0IEBAIGxvYWQoIk5hdGl2ZUZ1bmMuanMiKTsKIGxvYWQo
Ik5hdGl2ZUZ1bmNJbnN0YW5jZS5qcyIpOwogbG9hZCgiTmF0aXZlVHlwZS5qcyIpOwogbG9hZCgi
TmF0aXZlVHlwZUluc3RhbmNlLmpzIik7Citsb2FkKCJOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVy
LmpzIik7CiBsb2FkKCJOdWxsTGl0ZXJhbC5qcyIpOwogbG9hZCgiTnVsbFR5cGUuanMiKTsKIGxv
YWQoIk92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiKTsKIGxvYWQoIlBhcnNlLmpzIik7CiBs
b2FkKCJQcmVwYXJlLmpzIik7CiBsb2FkKCJQcm9ncmFtLmpzIik7Citsb2FkKCJQcm9wZXJ0eVJl
c29sdmVyLmpzIik7CiBsb2FkKCJQcm90b2NvbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xEZWNsLmpz
Iik7CiBsb2FkKCJQcm90b2NvbEZ1bmNEZWNsLmpzIik7CiBsb2FkKCJQcm90b2NvbFJlZi5qcyIp
OwogbG9hZCgiUHRyVHlwZS5qcyIpOworbG9hZCgiUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5q
cyIpOwogbG9hZCgiUmVjdXJzaW9uQ2hlY2tlci5qcyIpOwogbG9hZCgiUmVzb2x2ZU5hbWVzLmpz
Iik7CiBsb2FkKCJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIik7Citsb2FkKCJSZXNvbHZlUHJvcGVy
dGllcy5qcyIpOwogbG9hZCgiUmVzb2x2ZVR5cGVEZWZzLmpzIik7CiBsb2FkKCJSZXR1cm4uanMi
KTsKIGxvYWQoIlJldHVybkNoZWNrZXIuanMiKTsKQEAgLTEyMSwxMSArMTI2LDE0IEBAIGxvYWQo
IlN0cnVjdExheW91dEJ1aWxkZXIuanMiKTsKIGxvYWQoIlN0cnVjdFR5cGUuanMiKTsKIGxvYWQo
IlN1YnN0aXR1dGlvbi5qcyIpOwogbG9hZCgiU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMiKTsKK2xv
YWQoIlN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMiKTsKIGxvYWQoIlR5cGVEZWYuanMiKTsK
IGxvYWQoIlR5cGVEZWZSZXNvbHZlci5qcyIpOwogbG9hZCgiVHlwZU9yVmFyaWFibGVSZWYuanMi
KTsKK2xvYWQoIlR5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcyIpOwogbG9hZCgiVHlwZVJlZi5qcyIp
OwogbG9hZCgiVHlwZVZhcmlhYmxlLmpzIik7Citsb2FkKCJUeXBlVmFyaWFibGVUcmFja2VyLmpz
Iik7CiBsb2FkKCJUeXBlZFZhbHVlLmpzIik7CiBsb2FkKCJVaW50TGl0ZXJhbC5qcyIpOwogbG9h
ZCgiVWludExpdGVyYWxUeXBlLmpzIik7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2xldCBhbm9ueW1vdXNWYXJpYWJsZUNvdW50ID0g
MDsKKworY2xhc3MgQW5vbnltb3VzVmFyaWFibGUgZXh0ZW5kcyBWYWx1ZSB7CisgICAgLy8gWW91
IGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUncyB2YWx1ZSBiZWZvcmUgdXNlLCBidXQg
dGhhdCBjb3VsZCBiZSBxdWl0ZSBsYXRlLgorICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgdHlwZSA9
IG51bGwpCisgICAgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9vcmlnaW4gPSBv
cmlnaW47CisgICAgICAgIHRoaXMuaW5kZXggPSBhbm9ueW1vdXNWYXJpYWJsZUNvdW50Kys7Cisg
ICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgfQorICAgIAorICAgIGdldCBvcmlnaW4oKSB7
IHJldHVybiB0aGlzLl9vcmlnaW47IH0KKyAgICBnZXQgbmFtZSgpIHsgcmV0dXJuICJhbm9uVmFy
PCIgKyB0aGlzLmluZGV4ICsgIj4iOyB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMubmFtZTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwkod29ya2luZyBj
b3B5KQpAQCAtNDAsNiArNDAsMTUgQEAgY2xhc3MgQXJyYXlSZWZUeXBlIGV4dGVuZHMgUmVmZXJl
bmNlVHlwZQogICAgIAogICAgIGdldCBpc0FycmF5UmVmKCkgeyByZXR1cm4gdHJ1ZTsgfQogCisg
ICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHZhbHVlOworICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChvcmln
aW4pCisgICAgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKICAgICB0b1N0cmluZygp
CiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZSArICJbXSAiICsgdGhpcy5h
ZGRyZXNzU3BhY2U7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5
cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlU
eXBlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9BcnJheVR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTczLDUgKzczLDE2IEBAIGNsYXNzIEFy
cmF5VHlwZSBleHRlbmRzIFR5cGUgewogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRoaXMuZWxl
bWVudFR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5lbGVtZW50VHlwZSk7CiAg
ICAgfQorCisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsK
KyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG9yaWdpbiwg
dmFsdWUpOworICAgICAgICByZXN1bHQubnVtRWxlbWVudHMgPSB0aGlzLm51bUVsZW1lbnRzOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRPdmVy
bG9hZChvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEFycmF5UmVmVHlwZShvcmln
aW4sICJ0aHJlYWQiLCB0aGlzLmVsZW1lbnRUeXBlKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVudC5qcwkocmV2aXNpb24gMjIyMTIz
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVudC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDEyIEBACiAidXNlIHN0cmljdCI7CiAKIGNsYXNzIEFzc2ln
bm1lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGxocywg
cmhzKQorICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMsIHR5cGUgPSBudWxsKQogICAg
IHsKICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fbGhzID0gbGhzOwogICAg
ICAgICB0aGlzLl9yaHMgPSByaHM7CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICAgfQog
ICAgIAogICAgIGdldCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAy
MjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5q
cwkod29ya2luZyBjb3B5KQpAQCAtNDIsMTUgKzQyLDc5IEBAIGNsYXNzIENhbGxFeHByZXNzaW9u
IGV4dGVuZHMgRXhwcmVzc2lvbiAKICAgICBnZXQgaXNDYXN0KCkgeyByZXR1cm4gdGhpcy5faXND
YXN0OyB9CiAgICAgZ2V0IHJldHVyblR5cGUoKSB7IHJldHVybiB0aGlzLl9yZXR1cm5UeXBlOyB9
CiAgICAgCi0gICAgcmVzb2x2ZShvdmVybG9hZCkKKyAgICBzdGF0aWMgcmVzb2x2ZShvcmlnaW4s
IHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1ldGVyc0luU2NvcGUsIG5hbWUsIHR5cGVBcmd1
bWVudHMsIGFyZ3VtZW50TGlzdCwgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSkKKyAgICB7Cisg
ICAgICAgIGxldCBjYWxsID0gbmV3IENhbGxFeHByZXNzaW9uKG9yaWdpbiwgbmFtZSwgdHlwZUFy
Z3VlbW50cywgYXJndW1lbnRMaXN0KTsKKyAgICAgICAgY2FsbC5hcmd1bWVudFR5cGVzID0gYXJn
dW1lbnRUeXBlczsKKyAgICAgICAgaWYgKHJldHVyblR5cGUpCisgICAgICAgICAgICBjYWxsLnNl
dENhc3REYXRhKHJldHVyblR5cGUpOworICAgICAgICByZXR1cm4ge2NhbGwsIHJlc3VsdFR5cGU6
IGNhbGwucmVzb2x2ZShwb3NzaWJsZU92ZXJsb2FkcywgdHlwZVBhcmFtZXRyZXJzSW5TY29wZSl9
OworICAgIH0KKyAgICAKKyAgICByZXNvbHZlKHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1l
dGVyc0luU2NvcGUpCisgICAgeworICAgICAgICBsZXQgb3ZlcmxvYWQgPSBudWxsOworICAgICAg
ICBsZXQgZmFpbHVyZXMgPSBbXTsKKyAgICAgICAgZm9yIChsZXQgdHlwZVBhcmFtZXRlciBvZiB0
eXBlUGFyYW1ldGVyc0luU2NvcGUpIHsKKyAgICAgICAgICAgIGlmICghKHR5cGVQYXJhbWV0ZXIg
aW5zdGFuY2VvZiBUeXBlVmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnByb3RvY29sKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgbGV0IHNpZ25hdHVyZXMgPQorICAgICAgICAgICAgICAgIHR5
cGVQYXJhbWV0ZXIucHJvdG9jb2wucHJvdG9jb2xEZWNsLnNpZ25hdHVyZXNCeU5hbWVXaXRoVHlw
ZVZhcmlhYmxlKHRoaXMubmFtZSwgdHlwZVBhcmFtZXRlcik7CisgICAgICAgICAgICBpZiAoIXNp
Z25hdHVyZXMpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBvdmVybG9h
ZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgdGhpcy50eXBlQXJndW1lbnRzLCBh
cmd1bWVudFR5cGVzLCB0aGlzLnJldHVyblR5cGUpOworICAgICAgICAgICAgaWYgKG92ZXJsb2Fk
LmZ1bmMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBmYWlsdXJlcy5wdXNo
KC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKKyAgICAgICAgICAgIG92ZXJsb2FkID0gbnVsbDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIW92ZXJsb2FkKSB7CisgICAgICAgICAgICBvdmVybG9hZCA9
IHJlc29sdmVPdmVybG9hZEltcGwoCisgICAgICAgICAgICAgICAgcG9zc2libGVPdmVybG9hZHMs
IHRoaXMudHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgdGhpcy5yZXR1cm5UeXBlKTsKKyAg
ICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykgeworICAgICAgICAgICAgICAgIGZhaWx1cmVz
LnB1c2goLi4ub3ZlcmxvYWQuZmFpbHVyZXMpOworICAgICAgICAgICAgICAgIGxldCBtZXNzYWdl
ID0gIkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCB3aXRoICI7CisgICAgICAgICAgICAg
ICAgaWYgKHRoaXMudHlwZUFyZ3VtZW50cy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2UgKz0gInR5cGUgYXJndW1lbnRzIDwiICsgdGhpcy50eXBlQXJndW1lbnRzICsgIj4gYW5k
ICI7CisgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiYXJndW1lbnQgdHlwZXMgKCIgKyBhcmd1
bWVudFR5cGVzICsgIikiOworICAgICAgICAgICAgICAgIGlmICh0aGlzLnJldHVyblR5cGUpCisg
ICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0iIGFuZCByZXR1cm4gdHlwZSAiICsgdGhpcy5y
ZXR1cm5UeXBlOworICAgICAgICAgICAgICAgIGlmIChmYWlsdXJlcy5sZW5ndGgpCisgICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIiwgYnV0IGNvbnNpZGVyZWQ6XG4iICsgZmFpbHVyZXMu
am9pbigiXG4iKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHRoaXMub3Jp
Z2luLm9yaWdpblN0cmluZywgbWVzc2FnZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRUeXBlcy5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGUgPSB0eXBlQXJndW1lbnRUeXBlc1tp
XTsKKyAgICAgICAgICAgIGxldCB0eXBlUGFyYW1ldGVyID0gb3ZlcmxvYWQuZnVuYy50eXBlUGFy
YW1ldGVyc1tpXTsKKyAgICAgICAgICAgIGlmICghKHR5cGVQYXJhbWV0ZXIgaW5zdGFuY2VvZiBD
b25zdGV4cHJUeXBlUGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGlmICghdHlwZVBhcmFtZXRlci50eXBlLmVxdWFsc1dpdGhDb21taXQodHlwZUFyZ3Vt
ZW50VHlwZSkpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdCAiICsgdGhpcy5v
cmlnaW4ub3JpZ2luU3RyaW5nICsgIiBjb25zdGV4cHIgdHlwZSBhcmd1bWVudCBhbmQgcGFyYW1l
dGVyIHR5cGVzIG5vdCBlcXVhbDogYXJndW1lbnQgPSAiICsgdHlwZUFyZ3VtZW50VHlwZSArICIs
IHBhcmFtZXRlciA9ICIgKyB0eXBlUGFyYW1ldGVyLnR5cGUpOworICAgICAgICB9CisgICAgICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRUeXBlcy5sZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgbGV0IGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZXNbaV07CisgICAgICAgICAgICBs
ZXQgcGFyYW1ldGVyVHlwZSA9IG92ZXJsb2FkLmZ1bmMucGFyYW1ldGVyc1tpXS50eXBlLnN1YnN0
aXR1dGVUb1VuaWZpY2F0aW9uKAorICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZ1bmMudHlwZVBh
cmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0aW9uQ29udGV4dCk7CisgICAgICAgICAgICBsZXQg
cmVzdWx0ID0gYXJndW1lbnRUeXBlLmVxdWFsc1dpdGhDb21taXQocGFyYW1ldGVyVHlwZSk7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGFyZ3VtZW50IGFuZCBwYXJhbWV0
ZXIgdHlwZXMgbm90IGVxdWFsIGFmdGVyIHR5cGUgYXJndW1lbnQgc3Vic3RpdHV0aW9uOiBhcmd1
bWVudCA9ICIgKyBhcmd1bWVudFR5cGUgKyAiLCBwYXJhbWV0ZXIgPSAiICsgcGFyYW1ldGVyVHlw
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVRvT3ZlcmxvYWQob3Zl
cmxvYWQpOworICAgIH0KKyAgICAKKyAgICByZXNvbHZlVG9PdmVybG9hZChvdmVybG9hZCkKICAg
ICB7CiAgICAgICAgIHRoaXMuZnVuYyA9IG92ZXJsb2FkLmZ1bmM7CiAgICAgICAgIHRoaXMuYWN0
dWFsVHlwZUFyZ3VtZW50cyA9IG92ZXJsb2FkLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVu
dCA9PiB0eXBlQXJndW1lbnQgaW5zdGFuY2VvZiBUeXBlID8gdHlwZUFyZ3VtZW50LnZpc2l0KG5l
dyBBdXRvV3JhcHBlcigpKSA6IHR5cGVBcmd1bWVudCk7CiAgICAgICAgIGxldCByZXN1bHQgPSBv
dmVybG9hZC5mdW5jLnJldHVyblR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCiAgICAgICAg
ICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlvbkNv
bnRleHQpOwotICAgICAgICB0aGlzLnJlc3VsdFR5cGUgPSByZXN1bHQudmlzaXQobmV3IEF1dG9X
cmFwcGVyKCkpOwogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiTnVsbCByZXR1cm4gdHlwZSIpOworICAgICAgICByZXN1bHQgPSByZXN1bHQudmlzaXQo
bmV3IEF1dG9XcmFwcGVyKCkpOworICAgICAgICB0aGlzLnJlc3VsdFR5cGUgPSByZXN1bHQ7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MywzMCAr
NDMsMTQgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHZpc2l0UHJvdG9j
b2xEZWNsKG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxldCBzaWduYXR1cmUgb2Ygbm9kZS5z
aWduYXR1cmVzKSB7Ci0gICAgICAgICAgICBsZXQgc2V0ID0gbmV3IFNldCgpOwotICAgICAgICAg
ICAgZnVuY3Rpb24gY29uc2lkZXIodGhpbmcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHRoaW5nLmlzVW5pZmlhYmxlKQotICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKHRo
aW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNsYXNzIE5vdGljZVR5cGVWYXJpYWJs
ZSBleHRlbmRzIFZpc2l0b3IgewotICAgICAgICAgICAgICAgIHZpc2l0VHlwZVJlZihub2RlKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc2lkZXIobm9kZS50eXBl
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmlzaXRWYXJpYWJsZVJlZihu
b2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc2lkZXIobm9k
ZS52YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbGV0IG5vdGljZVR5cGVWYXJpYWJsZSA9IG5ldyBOb3RpY2VUeXBlVmFyaWFibGUoKTsKKyAg
ICAgICAgICAgIGxldCB0eXBlVmFyaWFibGVUcmFja2VyID0gbmV3IFR5cGVWYXJpYWJsZVRyYWNr
ZXIoKTsKICAgICAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlclR5cGUgb2Ygc2lnbmF0dXJlLnBh
cmFtZXRlclR5cGVzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRlclR5cGUudmlzaXQobm90aWNl
VHlwZVZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJUeXBlLnZpc2l0KHR5cGVW
YXJpYWJsZVRyYWNrZXIpOwogICAgICAgICAgICAgZm9yIChsZXQgdHlwZVBhcmFtZXRlciBvZiBz
aWduYXR1cmUudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNldC5oYXMo
dHlwZVBhcmFtZXRlcikpCisgICAgICAgICAgICAgICAgaWYgKCF0eXBlVmFyaWFibGVUcmFja2Vy
LnNldC5oYXModHlwZVBhcmFtZXRlcikpCiAgICAgICAgICAgICAgICAgICAgIHRocm93IFdUeXBl
RXJyb3IodHlwZVBhcmFtZXRlci5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVHlwZSBwYXJhbWV0ZXIg
dG8gcHJvdG9jb2wgc2lnbmF0dXJlIG5vdCBpbmZlcnJhYmxlIGZyb20gdmFsdWUgcGFyYW1ldGVy
cyIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFzZXQuaGFzKG5vZGUudHlwZVZh
cmlhYmxlKSkKKyAgICAgICAgICAgIGlmICghdHlwZVZhcmlhYmxlVHJhY2tlci5zZXQuaGFzKG5v
ZGUudHlwZVZhcmlhYmxlKSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihz
aWduYXR1cmUub3JpZ2luLm9yaWdpblN0cmluZywgIlByb3RvY29sJ3MgdHlwZSB2YXJpYWJsZSAo
IiArIG5vZGUubmFtZSArICIpIG5vdCBtZW50aW9uZWQgaW4gc2lnbmF0dXJlOiAiICsgc2lnbmF0
dXJlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE0MSw2ICsxMjUsMjcgQEAgY2xhc3MgQ2hlY2tl
ciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICByZXR1cm4gbGhzVHlwZTsKICAgICB9CiAgICAg
CisgICAgdmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAg
ICBpZiAoIW5vZGUubFZhbHVlLmlzTFZhbHVlKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBl
RXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTEhTIG9mIHJlYWQtbW9kaWZ5LXdyaXRl
IGlzIG5vdCBhbiBMVmFsdWU6ICIgKyBub2RlLmxWYWxlKTsKKyAgICAgICAgbGV0IGxoc1R5cGUg
PSBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5vbGRWYWx1ZVZhci50eXBl
ID0gbGhzVHlwZTsKKyAgICAgICAgbm9kZS5uZXdWYWx1ZVZhci50eXBlID0gbGhzVHlwZTsKKyAg
ICAgICAgbm9kZS5vbGRWYWx1ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5uZXdWYWx1
ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAgbGV0IG5ld1ZhbHVlVHlwZSA9IG5vZGUubmV3VmFs
dWVFeHAudmlzaXQodGhpcyk7CisgICAgICAgIGlmICghbGhzVHlwZS5lcXVhbHNXaXRoQ29tbWl0
KG5ld1ZhbHVlVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gbmV3IFdUeXBlRXJyb3Iobm9kZS5v
cmlnaW4ub3JpZ2luU3RyaW5nLCAiVHlwZSBtaXNtYXRjaCBpbiByZWFkLW1vZGlmeS13cml0ZTog
IiArIGxoc1R5cGUgKyAiIHZlcnN1cyAiICsgbmV3VmFsdWVUeXBlKTsKKyAgICAgICAgcmV0dXJu
IG5vZGUucmVzdWx0RXhwLnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEFub255
bW91c1ZhcmlhYmxlKG5vZGUpCisgICAgeworICAgICAgICBpZiAoIW5vZGUudHlwZSkKKyAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQW5vbnltb3VzIHZhcmlhYmxlIG11c3Qga25vdyB0eXBl
IGJlZm9yZSBmaXJzdCBhcHBlYXJhbmNlIik7CisgICAgfQorICAgIAogICAgIHZpc2l0RGVyZWZl
cmVuY2VFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgdHlwZSA9IG5vZGUucHRy
LnZpc2l0KHRoaXMpLnVuaWZ5Tm9kZTsKQEAgLTE2NSw3ICsxNzAsNyBAQCBjbGFzcyBDaGVja2Vy
IGV4dGVuZHMgVmlzaXRvciB7CiAgICAgewogICAgICAgICBsZXQgZWxlbWVudFR5cGUgPSBub2Rl
LmxWYWx1ZS52aXNpdCh0aGlzKS51bmlmeU5vZGU7CiAgICAgICAgIGlmIChlbGVtZW50VHlwZSBp
bnN0YW5jZW9mIFB0clR5cGUpIHsKLSAgICAgICAgICAgIG5vZGUuYmVjb21lQ29udmVydFB0clRv
QXJyYXlSZWZFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBub2RlLmJlY29tZShuZXcgQ29udmVy
dFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBvcmlnaW4ubFZhbHVlKSk7CiAg
ICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5UmVmVHlwZShub2RlLm9yaWdpbiwgZWxlbWVudFR5
cGUuYWRkcmVzc1NwYWNlLCBlbGVtZW50VHlwZS5lbGVtZW50VHlwZSk7CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC0xODksMzUgKzE5NCw4NCBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRv
ciB7CiAgICAgICAgIHRocm93IG5ldyBFcnJvcigiU2hvdWxkIG5vdCBleGlzdCB5ZXQuIik7CiAg
ICAgfQogICAgIAotICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIF9maW5pc2hWaXNp
dGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIGJhc2VUeXBlLCBleHRyYUFyZ3MsIGV4dHJhQXJnVHlw
ZXMpCiAgICAgewotICAgICAgICBsZXQgc3RydWN0VHlwZSA9IG5vZGUuc3RydWN0LnZpc2l0KHRo
aXMpLnVuaWZ5Tm9kZTsKLSAgICAgICAgCi0gICAgICAgIG5vZGUuc3RydWN0VHlwZSA9IHN0cnVj
dFR5cGUudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOworICAgICAgICBub2RlLmJhc2VUeXBlID0g
YmFzZVR5cGUudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOwogICAgICAgICAKLSAgICAgICAgbGV0
IHVuZGVybHlpbmdTdHJ1Y3QgPSBzdHJ1Y3RUeXBlOworICAgICAgICAvLyBTdWNoIGEgdHlwZSBt
dXN0IGV4aXN0LiBUaGlzIG1heSB0aHJvdyBpZiBpdCBkb2Vzbid0LgorICAgICAgICBsZXQgdHlw
ZUZvckFuZCA9IGJhc2VUeXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG5vZGUub3JpZ2lu
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikK
LSAgICAgICAgICAgIHVuZGVybHlpbmdTdHJ1Y3QgPSB1bmRlcmx5aW5nU3RydWN0LnR5cGU7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoISh1bmRlcmx5aW5nU3RydWN0IGluc3RhbmNlb2YgU3RydWN0
VHlwZSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJPcGVyYW5kIHRvIGRvdCBleHByZXNzaW9uIGlzIG5vdCBhIHN0cnVjdCB0eXBl
OiAiICsgc3RydWN0VHlwZSk7CisgICAgICAgIGxldCBlcnJvckZvckdldDsKKyAgICAgICAgbGV0
IGVycm9yRm9yQW5kOworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCBy
ZXN1bHQgPSBDYWxsRXhwcmVzc2lvbi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUub3Jp
Z2luLCBub2RlLnBvc3NpYmxlR2V0T3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5
cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgIG5vZGUuZ2V0RnVuY05hbWUsIFtdLCBbbm9k
ZS5iYXNlLCAuLi5leHRyYUFyZ3NdLCBbYmFzZVR5cGUsIC4uLmV4dHJhQXJnVHlwZXNdLCBudWxs
KTsKKyAgICAgICAgICAgIG5vZGUuY2FsbEZvckdldCA9IHJlc3VsdC5jYWxsOworICAgICAgICAg
ICAgbm9kZS5yZXN1bHRUeXBlRm9yR2V0ID0gcmVzdWx0LnJlc3VsdFR5cGU7CisgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKSkK
KyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgZXJyb3JGb3JHZXQgPSBlOwor
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoc3RydWN0VHlwZSBpbnN0YW5jZW9mIFR5
cGVSZWYpIAotICAgICAgICAgICAgdW5kZXJseWluZ1N0cnVjdCA9IHVuZGVybHlpbmdTdHJ1Y3Qu
aW5zdGFudGlhdGUoc3RydWN0VHlwZS50eXBlQXJndW1lbnRzLCAic2hhbGxvdyIpOworICAgICAg
ICB0cnkgeworICAgICAgICAgICAgbGV0IGJhc2VGb3JBbmQgPSBiYXNlVHlwZS5hcmd1bWVudEZv
ckFuZE92ZXJsb2FkKG5vZGUub3JpZ2luLCBub2RlLmJhc2UpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVzb2x2ZSgKKyAgICAgICAgICAg
ICAgICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZUFuZE92ZXJsb2FkcywgdGhpcy5fY3VycmVu
dFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICBub2RlLmFuZEZ1bmNO
YW1lLCBbXSwgW2Jhc2VGb3JBbmQsIC4uLmV4dHJhQXJnc10sIFt0eXBlRm9yQW5kLCAuLi5leHRy
YUFyZ1R5cGVzXSwKKyAgICAgICAgICAgICAgICBudWxsKTsKKyAgICAgICAgICAgIG5vZGUuY2Fs
bEZvckFuZCA9IHJlc3VsdC5jYWxsOworICAgICAgICAgICAgbm9kZS5yZXN1bHRUeXBlRm9yQW5k
ID0gcmVzdWx0LnJlc3VsdFR5cGUudW5pZnlOb2RlLnJldHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQo
bm9kZS5vcmlnaW4pOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoIShl
IGluc3RhbmNlb2YgV1R5cGVFcnJvcikpCisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAg
ICAgICAgIGVycm9yRm9yQW5kID0gZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KCFub2RlLnJlc3VsdFR5cGVGb3JHZXQgJiYgIW5vZGUucmVzdWx0VHlwZUZvckFuZCkgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgbm9kZS5vcmln
aW4ub3JpZ2luU3RyaW5nLAorICAgICAgICAgICAgICAgICJDYW5ub3QgcmVzb2x2ZSBhY2Nlc3M7
IHRyaWVkIGJ5LXZhbHVlOlxuIiArCisgICAgICAgICAgICAgICAgZXJyb3JGb3JHZXQubWVzc2Fn
ZSArICJcbiIgKworICAgICAgICAgICAgICAgICJhbmQgdHJpZWQgYnktcG9pbnRlcjpcbiIgKwor
ICAgICAgICAgICAgICAgIGVycm9yRm9yQW5kLm1lc3NhZ2UpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAobm9kZS5yZXN1bHRUeXBlRm9yR2V0ICYmIG5vZGUucmVzdWx0VHlwZUZv
ckFuZAorICAgICAgICAgICAgJiYgIW5vZGUucmVzdWx0VHlwZUZvckdldC5lcXVhbHMobm9kZS5y
ZXN1bHRUeXBlRm9yQW5kKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUu
b3JpZ2luLm9yaWdpblN0cmluZywgIlJlc3VsdCB0eXBlIHJlc29sdmVkIGJ5LXZhbHVlICgiICsg
bm9kZS5yZXN1bHRUeXBlRm9yR2V0ICsgIikgZG9lcyBub3QgbWF0Y2ggcmVzdWx0IHR5cGUgcmVz
b2x2ZWQgYnktcG9pbnRlciAoIiArIG5vZGUucmVzdWx0VHlwZUZvckFuZCArICIpIik7CisgICAg
ICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IENhbGxFeHByZXNz
aW9uLnJlc29sdmUoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUucG9zc2libGVH
ZXRPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsCisgICAg
ICAgICAgICAgICAgbm9kZS5zZXRGdW5jTmFtZSwgW10sIFtub2RlLmJhc2UsIC4uLmV4dHJhQXJn
cywgbnVsbF0sIFtiYXNlVHlwZSwgLi4uZXh0cmFBcmdUeXBlcywgbm9kZS5yZXN1bHRUeXBlXSwg
bnVsbCk7CisgICAgICAgICAgICBub2RlLmNhbGxGb3JTZXQgPSByZXN1bHQuY2FsbDsKKyAgICAg
ICAgICAgIGlmICghcmVzdWx0LnJlc3VsdFR5cGUuZXF1YWxzKGJhc2VUeXBlKSkKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJS
ZXN1bHQgdHlwZSBvZiBzZXR0ZXIgIiArIHJlc3VsdC5jYWxsLmZ1bmMgKyAiIGlzIG5vdCB0aGUg
YmFzZSB0eXBlICIgKyBiYXNlVHlwZSk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgIGlmICghKGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICB0aHJv
dyBlOworICAgICAgICAgICAgbm9kZS5lcnJvckZvclNldCA9IGU7CisgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGxldCBmaWVsZCA9IHVuZGVybHlpbmdTdHJ1Y3QuZmllbGRCeU5hbWUobm9k
ZS5maWVsZE5hbWUpOwotICAgICAgICBpZiAoIWZpZWxkKQotICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRmllbGQgIiArIG5vZGUuZmll
bGROYW1lICsgIiBub3QgZm91bmQgaW4gIiArIHN0cnVjdFR5cGUpOwotICAgICAgICByZXR1cm4g
ZmllbGQudHlwZTsKKyAgICAgICAgcmV0dXJuIG5vZGUucmVzdWx0VHlwZTsKICAgICB9CiAgICAg
Ci0gICAgdmlzaXRMZXRFeHByZXNzaW9uKG5vZGUpCisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5v
ZGUpCiAgICAgewotICAgICAgICBub2RlLnR5cGUgPSBub2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMp
OwotICAgICAgICBpZiAoIW5vZGUudHlwZSkKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
RGlkIG5vdCBnZXQgdHlwZSBmb3Igbm9kZTogIiArIG5vZGUuYXJndW1lbnQpOwotICAgICAgICBy
ZXR1cm4gbm9kZS5ib2R5LnZpc2l0KHRoaXMpOworICAgICAgICBsZXQgc3RydWN0VHlwZSA9IG5v
ZGUuc3RydWN0LnZpc2l0KHRoaXMpLnVuaWZ5Tm9kZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Zp
bmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3Mobm9kZSwgc3RydWN0VHlwZSwgW10sIFtdKTsKKyAg
ICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAg
IGxldCBhcnJheVR5cGUgPSBub2RlLmFycmF5LnZpc2l0KHRoaXMpLnVuaWZ5Tm9kZTsKKyAgICAg
ICAgbGV0IGluZGV4VHlwZSA9IG5vZGUuaW5kZXgudmlzaXQodGhpcyk7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gdGhpcy5fZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2Vzcyhub2RlLCBhcnJh
eVR5cGUsIFtub2RlLmluZGV4XSwgW2luZGV4VHlwZV0pOwogICAgIH0KICAgICAKICAgICB2aXNp
dFZhcmlhYmxlUmVmKG5vZGUpCkBAIC0zMjIsNyArMzc2LDcgQEAgY2xhc3MgQ2hlY2tlciBleHRl
bmRzIFZpc2l0b3IgewogICAgICAgICAgICAgcmVzdWx0ID0gZXhwcmVzc2lvbi52aXNpdCh0aGlz
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAgICAKICAgICB2aXNpdENhbGxF
eHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgdHlwZUFyZ3VtZW50VHlwZXMgPSBu
b2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQudmlzaXQo
dGhpcykpOwpAQCAtMzMzLDc3ICszODcsMTEgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0
b3IgewogICAgICAgICAgICAgcmV0dXJuIG5ld0FyZ3VtZW50LnZpc2l0KG5ldyBBdXRvV3JhcHBl
cigpKTsKICAgICAgICAgfSk7CiAgICAgICAgIAotICAgICAgICAvLyBIZXJlIHdlIG5lZWQgdG8g
aGFuZGxlIHRoZSBjYXNlcyB3aGVyZSBvcGVyYXRvciZbXSBpcyBjYWxsZWQgd2l0aCBhIHR5cGUg
dGhhdCBpc24ndCBzdWZmaWNpZW50bHkKLSAgICAgICAgLy8gcmVmZXJlbmNleS4KLSAgICAgICAg
aWYgKG5vZGUubmFtZSA9PSAib3BlcmF0b3ImW10iKSB7Ci0gICAgICAgICAgICBsZXQgYXJnVHlw
ZSA9IGFyZ3VtZW50VHlwZXNbMF0udW5pZnlOb2RlOwotICAgICAgICAgICAgaWYgKGFyZ1R5cGUg
aW5zdGFuY2VvZiBQdHJUeXBlKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9y
KG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlBvaW50ZXIgc3Vic2NyaXB0IGlzIG5vdCB2YWxp
ZCIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYXJnVHlwZSBpbnN0YW5jZW9mIEFy
cmF5VHlwZSkgewotICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdID0gbmV3IE1h
a2VBcnJheVJlZkV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0WzBdKTsK
LSAgICAgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdFswXS5udW1FbGVtZW50cyA9IGFyZ1R5
cGUubnVtRWxlbWVudHM7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlc1swXSA9IG5ldyBB
cnJheVJlZlR5cGUobm9kZS5vcmlnaW4sICJ0aHJlYWQiLCBhcmdUeXBlLmVsZW1lbnRUeXBlKTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoIShhcmdUeXBlIGluc3RhbmNlb2YgQXJyYXlSZWZUeXBl
KSkgewotICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdID0gbmV3IE1ha2VQdHJF
eHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmFyZ3VtZW50TGlzdFswXSk7Ci0gICAgICAgICAg
ICAgICAgYXJndW1lbnRUeXBlc1swXSA9IG5ldyBQdHJUeXBlKG5vZGUub3JpZ2luLCAidGhyZWFk
IiwgYXJndW1lbnRUeXBlc1swXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
CiAgICAgICAgIG5vZGUuYXJndW1lbnRUeXBlcyA9IGFyZ3VtZW50VHlwZXM7CiAgICAgICAgIGlm
IChub2RlLnJldHVyblR5cGUpCiAgICAgICAgICAgICBub2RlLnJldHVyblR5cGUudmlzaXQodGhp
cyk7Ci0gICAgICAgIAotICAgICAgICBsZXQgb3ZlcmxvYWQgPSBudWxsOwotICAgICAgICBsZXQg
ZmFpbHVyZXMgPSBbXTsKLSAgICAgICAgZm9yIChsZXQgdHlwZVBhcmFtZXRlciBvZiB0aGlzLl9j
dXJyZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICBpZiAoISh0eXBl
UGFyYW1ldGVyIGluc3RhbmNlb2YgVHlwZVZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5wcm90b2NvbCkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGxldCBzaWduYXR1cmVzID0KLSAgICAgICAg
ICAgICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnByb3RvY29sRGVjbC5zaWduYXR1cmVzQnlO
YW1lV2l0aFR5cGVWYXJpYWJsZShub2RlLm5hbWUsIHR5cGVQYXJhbWV0ZXIpOwotICAgICAgICAg
ICAgaWYgKCFzaWduYXR1cmVzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMsIG5vZGUudHlwZUFy
Z3VtZW50cywgYXJndW1lbnRUeXBlcywgbm9kZS5yZXR1cm5UeXBlKTsKLSAgICAgICAgICAgIGlm
IChvdmVybG9hZC5mdW5jKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZmFp
bHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Ci0gICAgICAgICAgICBvdmVybG9hZCA9
IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFvdmVybG9hZCkgewotICAgICAgICAgICAg
b3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKAotICAgICAgICAgICAgICAgIG5vZGUucG9z
c2libGVPdmVybG9hZHMsIG5vZGUudHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgbm9kZS5y
ZXR1cm5UeXBlKTsKLSAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykgewotICAgICAgICAg
ICAgICAgIGZhaWx1cmVzLnB1c2goLi4ub3ZlcmxvYWQuZmFpbHVyZXMpOwotICAgICAgICAgICAg
ICAgIGxldCBtZXNzYWdlID0gIkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCB3aXRoICI7
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpCi0gICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgKz0gInR5cGUgYXJndW1lbnRzIDwiICsgbm9kZS50eXBlQXJn
dW1lbnRzICsgIj4gYW5kICI7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiYXJndW1lbnQg
dHlwZXMgKCIgKyBhcmd1bWVudFR5cGVzICsgIikiOwotICAgICAgICAgICAgICAgIGlmIChub2Rl
LnJldHVyblR5cGUpCi0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0iIGFuZCByZXR1cm4g
dHlwZSAiICsgbm9kZS5yZXR1cm5UeXBlOwotICAgICAgICAgICAgICAgIGlmIChmYWlsdXJlcy5s
ZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIiwgYnV0IGNvbnNpZGVyZWQ6
XG4iICsgZmFpbHVyZXMuam9pbigiXG4iKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgbWVzc2FnZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRUeXBl
cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGUgPSB0eXBl
QXJndW1lbnRUeXBlc1tpXTsKLSAgICAgICAgICAgIGxldCB0eXBlUGFyYW1ldGVyID0gb3Zlcmxv
YWQuZnVuYy50eXBlUGFyYW1ldGVyc1tpXTsKLSAgICAgICAgICAgIGlmICghKHR5cGVQYXJhbWV0
ZXIgaW5zdGFuY2VvZiBDb25zdGV4cHJUeXBlUGFyYW1ldGVyKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci50eXBlLmVxdWFsc1dpdGhD
b21taXQodHlwZUFyZ3VtZW50VHlwZSkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJBdCAiICsgbm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIiBjb25zdGV4cHIgdHlwZSBhcmd1
bWVudCBhbmQgcGFyYW1ldGVyIHR5cGVzIG5vdCBlcXVhbDogYXJndW1lbnQgPSAiICsgdHlwZUFy
Z3VtZW50VHlwZSArICIsIHBhcmFtZXRlciA9ICIgKyB0eXBlUGFyYW1ldGVyLnR5cGUpOwotICAg
ICAgICB9Ci0gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRUeXBlcy5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgbGV0IGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZXNbaV07
Ci0gICAgICAgICAgICBsZXQgcGFyYW1ldGVyVHlwZSA9IG92ZXJsb2FkLmZ1bmMucGFyYW1ldGVy
c1tpXS50eXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAotICAgICAgICAgICAgICAgIG92ZXJs
b2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0aW9uQ29udGV4dCk7Ci0g
ICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRUeXBlLmVxdWFsc1dpdGhDb21taXQocGFy
YW1ldGVyVHlwZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIkF0ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGFyZ3Vt
ZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsIGFmdGVyIHR5cGUgYXJndW1lbnQgc3Vi
c3RpdHV0aW9uOiBhcmd1bWVudCA9ICIgKyBhcmd1bWVudFR5cGUgKyAiLCBwYXJhbWV0ZXIgPSAi
ICsgcGFyYW1ldGVyVHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5vZGUucmVzb2x2
ZShvdmVybG9hZCk7CisKKyAgICAgICAgcmV0dXJuIG5vZGUucmVzb2x2ZShub2RlLnBvc3NpYmxl
T3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0ZXJzKTsKICAgICB9
CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RvdEV4cHJlc3Npb24u
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVz
c2lvbi5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRG90RXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICov
CiAidXNlIHN0cmljdCI7CiAKLWNsYXNzIERvdEV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9u
IHsKK2NsYXNzIERvdEV4cHJlc3Npb24gZXh0ZW5kcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24g
ewogICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgc3RydWN0LCBmaWVsZE5hbWUpCiAgICAgewogICAg
ICAgICBzdXBlcihvcmlnaW4pOwpAQCAtMzIsMTEgKzMyLDE2IEBAIGNsYXNzIERvdEV4cHJlc3Np
b24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAgICAgICAgdGhpcy5fZmllbGROYW1lID0gZmllbGRO
YW1lOwogICAgIH0KICAgICAKKyAgICBnZXQgYmFzZSgpIHsgcmV0dXJuIHRoaXMuc3RydWN0OyB9
CiAgICAgZ2V0IHN0cnVjdCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdDsgfQogICAgIGdldCBmaWVs
ZE5hbWUoKSB7IHJldHVybiB0aGlzLl9maWVsZE5hbWU7IH0KICAgICBnZXQgaXNMVmFsdWUoKSB7
IHJldHVybiB0aGlzLnN0cnVjdC5pc0xWYWx1ZTsgfQogICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7
IHJldHVybiB0aGlzLnN0cnVjdC5hZGRyZXNzU3BhY2U7IH0KICAgICAKKyAgICBnZXQgZ2V0RnVu
Y05hbWUoKSB7IHJldHVybiAib3BlcmF0b3IuIiArIHRoaXMuZmllbGROYW1lOyB9CisgICAgZ2V0
IGFuZEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yJi4iICsgdGhpcy5maWVsZE5hbWU7IH0K
KyAgICBnZXQgc2V0RnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0b3IuIiArIHRoaXMuZmllbGRO
YW1lICsgIj0iOyB9CisgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJu
ICIoIiArIHRoaXMuc3RydWN0ICsgIi4iICsgdGhpcy5maWVsZE5hbWUgKyAiKSI7CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwkocmV2
aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlckJ1
aWxkZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMSArMTA0LDkgQEAgY2xhc3MgRUJ1ZmZl
ckJ1aWxkZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgc3VwZXIudmlzaXRMb2dpY2FsTm90
KG5vZGUpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkKKyAgICB2
aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewogICAgICAgICB0aGlzLl9jcmVhdGVF
UHRyRm9yTm9kZShub2RlKTsKLSAgICAgICAgbm9kZS5hcmd1bWVudC52aXNpdCh0aGlzKTsKLSAg
ICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdE1ha2VB
cnJheVJlZkV4cHJlc3Npb24obm9kZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0V2YWx1YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9FdmFsdWF0b3IuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTI1LDEyICsxMjUs
NiBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgcmV0dXJuIG5v
ZGUuZVB0ci5ib3gobmV3IEVBcnJheVJlZihub2RlLmxWYWx1ZS52aXNpdCh0aGlzKS5sb2FkVmFs
dWUoKSwgMSkpOwogICAgIH0KICAgICAKLSAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKLSAg
ICB7Ci0gICAgICAgIGxldCBzdHJ1Y3RQdHIgPSBub2RlLnN0cnVjdC52aXNpdCh0aGlzKTsKLSAg
ICAgICAgcmV0dXJuIHN0cnVjdFB0ci5wbHVzKG5vZGUuZmllbGQub2Zmc2V0KTsKLSAgICB9Ci0g
ICAgCiAgICAgdmlzaXRDb21tYUV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCBy
ZXN1bHQ7CkBAIC0yMzEsMTAgKzIyNSw5IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0
b3IgewogICAgICAgICB0aHJvdyBDb250aW51ZUV4Y2VwdGlvbjsKICAgICB9CiAgICAgCi0gICAg
dmlzaXRMZXRFeHByZXNzaW9uKG5vZGUpCisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShub2Rl
KQogICAgIHsKLSAgICAgICAgbm9kZS5lUHRyLmNvcHlGcm9tKG5vZGUuYXJndW1lbnQudmlzaXQo
dGhpcyksIG5vZGUudHlwZS5zaXplKTsKLSAgICAgICAgcmV0dXJuIG5vZGUuYm9keS52aXNpdCh0
aGlzKTsKKyAgICAgICAgbm9kZS50eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVlKG5vZGUuZVB0ci5i
dWZmZXIsIG5vZGUuZVB0ci5vZmZzZXQpOwogICAgIH0KICAgICAKICAgICB2aXNpdENhbGxFeHBy
ZXNzaW9uKG5vZGUpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNz
aW9uRmluZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0V4cHJlc3Npb25GaW5kZXIuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDYgKzU2LDExIEBAIGNsYXNzIEV4cHJlc3Npb25GaW5kZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAg
ICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CiAgICAgfQogICAgIAorICAgIHZpc2l0UmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2so
bm9kZSk7CisgICAgfQorICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7
CiAgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvRnVuY0luc3RhbnRpYXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCShyZXZpc2lvbiAyMjIxMjMp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3Igewog
ICAgICAgICAgICAgICAgICAgICBsZXQgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHJl
c3VsdC5wb3NzaWJsZU92ZXJsb2FkcywgcmVzdWx0LnR5cGVBcmd1bWVudHMsIHJlc3VsdC5hcmd1
bWVudFR5cGVzLCByZXN1bHQucmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbik7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykKICAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHJlc29sdmUgcHJvdG9jb2wgc2lnbmF0dXJl
IGZ1bmN0aW9uIGNhbGwgZHVyaW5nIGluc3RhbnRpYXRpb246ICIgKyByZXN1bHQuZnVuYyArIChv
dmVybG9hZC5mYWlsdXJlcy5sZW5ndGggPyAiOyB0cmllZDpcbiIgKyBvdmVybG9hZC5mYWlsdXJl
cy5qb2luKCJcbiIpIDogIiIpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmUo
b3ZlcmxvYWQpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzb2x2ZVRvT3ZlcmxvYWQo
b3ZlcmxvYWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODQsNyArODQsNyBAQCBjbGFzcyBGdW5jSW5zdGFu
dGlhdG9yIHsKICAgICAgICAgCiAgICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBuZXcgSW5zdGFu
dGlhdGlvblN1YnN0aXR1dGlvbihmdW5jLnR5cGVQYXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKTsK
ICAgICAgICAgCi0gICAgICAgIGNsYXNzIEluc3RhbnRpYXRlIGV4dGVuZHMgVmlzaXRvckJhc2Ug
eworICAgICAgICBjbGFzcyBJbnN0YW50aWF0ZSB7CiAgICAgICAgICAgICB2aXNpdEZ1bmNEZWYo
ZnVuYykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZ1bmNEZWYo
CkBAIC0xMDEsNyArMTAxLDggQEAgY2xhc3MgRnVuY0luc3RhbnRpYXRvciB7CiAgICAgICAgICAg
ICAgICAgICAgIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgIGZ1bmMucmV0dXJuVHlwZS52aXNp
dChzdWJzdGl0dXRpb24pLAogICAgICAgICAgICAgICAgICAgICBmdW5jLnBhcmFtZXRlcnMubWFw
KHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQoc3Vic3RpdHV0aW9uKSksCi0gICAgICAgICAg
ICAgICAgICAgIGZ1bmMuaXNDYXN0KTsKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5pc0Nhc3Qs
CisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW5zdGFudGlhdGVJbXBsZW1lbnRhdGlvbihzdWJz
dGl0dXRpb24pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBsZXQgcmVzdWx0
aW5nRnVuYyA9IGZ1bmMudmlzaXQobmV3IEluc3RhbnRpYXRlKCkpOwpJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZGV4RXhwcmVzc2lvbi5qcwkobm9uZXhpc3Rl
bnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmRleEV4cHJlc3Npb24uanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBJbmRleEV4cHJlc3Np
b24gZXh0ZW5kcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9y
aWdpbiwgYXJyYXksIGluZGV4KQorICAgIHsKKyAgICAgICAgc3VwZXIob3JpZ2luKTsKKyAgICAg
ICAgdGhpcy5fYXJyYXkgPSBhcnJheTsKKyAgICAgICAgdGhpcy5faW5kZXggPSBpbmRleDsKKyAg
ICB9CisgICAgCisgICAgZ2V0IGJhc2UoKSB7IHJldHVybiB0aGlzLmFycmF5OyB9CisgICAgZ2V0
IGFycmF5KCkgeyByZXR1cm4gdGhpcy5fYXJyYXk7IH0KKyAgICBnZXQgaW5kZXgoKSB7IHJldHVy
biB0aGlzLl9pbmRleDsgfQorICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIHRoaXMuYXJyYXku
aXNMVmFsdWU7IH0KKyAgICBnZXQgYWRkcmVzc1NwYWNlKCkgeyByZXR1cm4gdGhpcy5hcnJheS5h
ZGRyZXNzU3BhY2U7IH0KKyAgICAKKyAgICBnZXQgZ2V0RnVuY05hbWUoKSB7IHJldHVybiAib3Bl
cmF0b3JbXSI7IH0KKyAgICBnZXQgYW5kRnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0b3ImW10i
OyB9CisgICAgZ2V0IHNldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yW109IjsgfQorCisg
ICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICIoIiArIHRoaXMuYXJyYXkgKyAi
WyIgKyB0aGlzLmluZGV4ICsgIl0pIjsKKyAgICB9Cit9CkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVzRm9yQ2FsbC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVzRm9yQ2FsbC5qcwkocmV2aXNpb24gMjIy
MTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwu
anMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgZnVuY3Rpb24gaW5mZXJUeXBlc0Zv
ckNhbGwoZnVuYywgdHlwZUFyZwogICAgICAgICBpZiAoIWFyZ3VtZW50VHlwZXNbaV0pCiAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgYXJndW1lbnQgdHlwZSBhdCBpID0gIiArIGkp
OwogICAgICAgICBpZiAoIWFyZ3VtZW50VHlwZXNbaV0udW5pZnkodW5pZmljYXRpb25Db250ZXh0
LCBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSkpCi0gICAgICAgICAgICByZXR1cm4ge2ZhaWx1cmU6
IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJBcmd1bWVudCAjIiArIChpICsg
MSkgKyAiICIgKyAoZnVuYy5wYXJhbWV0ZXJzW2ldLm5hbWUgPyAiZm9yIHBhcmFtZXRlciAiICsg
ZnVuYy5wYXJhbWV0ZXJzW2ldLm5hbWUgOiAiIikgKyAiIGRvZXMgbm90IG1hdGNoIChwYXNzZWQg
IiArIGFyZ3VtZW50VHlwZXNbaV0gKyAiLCByZXF1aXJlICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0u
dHlwZSArICIpIil9OworICAgICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3ZlcmxvYWRS
ZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAoaSArIDEpICsgIiAiICsgKGZ1
bmMucGFyYW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIgIiArIGZ1bmMucGFyYW1ldGVy
c1tpXS5uYW1lICsgIiAiIDogIiIpICsgImRvZXMgbm90IG1hdGNoIChwYXNzZWQgIiArIGFyZ3Vt
ZW50VHlwZXNbaV0gKyAiLCByZXF1aXJlICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSArICIp
Iil9OwogICAgIH0KICAgICBpZiAocmV0dXJuVHlwZSAmJiAhcmV0dXJuVHlwZS51bmlmeSh1bmlm
aWNhdGlvbkNvbnRleHQsIGZ1bmMucmV0dXJuVHlwZSkpCiAgICAgICAgIHJldHVybiB7ZmFpbHVy
ZTogbmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIlJldHVybiB0eXBlICIgKyBm
dW5jLnJldHVyblR5cGUgKyAiIGRvZXMgbm90IG1hdGNoICIgKyByZXR1cm5UeXBlKX07CkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmVyLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDE1ICszMiw2IEBAIGNsYXNzIElubGluZXIgZXh0ZW5kcyBSZXdyaXRlciB7
CiAgICAgICAgIHRoaXMuX3Zpc2l0aW5nID0gdmlzaXRpbmc7CiAgICAgfQogICAgIAotICAgIHZp
c2l0RG90RXhwcmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVy
LnZpc2l0RG90RXhwcmVzc2lvbihub2RlKTsKLSAgICAgICAgcmVzdWx0LmZpZWxkID0gcmVzdWx0
LnN0cnVjdFR5cGUudW5pZnlOb2RlLmZpZWxkQnlOYW1lKHJlc3VsdC5maWVsZE5hbWUpOwotICAg
ICAgICBpZiAocmVzdWx0LmZpZWxkLm9mZnNldCA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJVbi1sYWlkLW91dCBmaWVsZDogIiArIHJlc3VsdC5maWVsZCArICIgKGluICIg
KyByZXN1bHQuc3RydWN0VHlwZSArICIpIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxl
dCByZXN1bHQgPSBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOwpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtlQXJyYXlSZWZFeHByZXNz
aW9uLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9NYWtlQXJyYXlSZWZFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMs
NiBAQCBjbGFzcyBNYWtlQXJyYXlSZWZFeHByZXNzaW9uIGV4dGVuZHMgRXhwCiAgICAgCiAgICAg
Z2V0IGxWYWx1ZSgpIHsgcmV0dXJuIHRoaXMuX2xWYWx1ZTsgfQogICAgIAotICAgIGJlY29tZUNv
bnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbigpCi0gICAgewotICAgICAgICB0aGlzLl9fcHJv
dG9fXyA9IENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbi5wcm90b3R5cGU7Ci0gICAgfQot
ICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiAiQCIgKyAodGhpcy5u
dW1FbGVtZW50cyA/ICI8PCIgKyB0aGlzLm51bUVsZW1lbnRzICsgIj4+IiA6ICIiKSArICIoIiAr
IHRoaXMubFZhbHVlICsgIikiOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
TmFtZVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL05hbWVSZXNvbHZlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNiAr
MjU4LDI4IEBAIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBz
dXBlci52aXNpdFJldHVybihub2RlKTsKICAgICB9CiAgICAgCisgICAgX2hhbmRsZVByb3BlcnR5
QWNjZXNzKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnBvc3NpYmxlR2V0T3ZlcmxvYWRzID0g
bm9kZS5fbmFtZUNvbnRleHQuZ2V0KEZ1bmMsIG5vZGUuZ2V0RnVuY05hbWUpOworICAgICAgICBu
b2RlLnBvc3NpYmxlU2V0T3ZlcmxvYWRzID0gbm9kZS5fbmFtZUNvbnRleHQuZ2V0KEZ1bmMsIG5v
ZGUuc2V0RnVuY05hbWUpOworICAgICAgICBub2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzID0gbm9k
ZS5fbmFtZUNvbnRleHQuZ2V0KEZ1bmMsIG5vZGUuYW5kRnVuY05hbWUpOworCisgICAgICAgIGlm
ICghbm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkcyAmJiAhbm9kZS5wb3NzaWJsZUFuZE92ZXJsb2Fk
cykKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0
cmluZywgIkNhbm5vdCBmaW5kIGVpdGhlciAiICsgbm9kZS5nZXRGdW5jTmFtZSArICIgb3IgIiAr
IG5vZGUuYW5kRnVuY05hbWUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdERvdEV4cHJlc3Npb24o
bm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzKG5vZGUpOwor
ICAgICAgICBzdXBlci52aXNpdERvdEV4cHJlc3Npb24obm9kZSk7CisgICAgfQorICAgIAorICAg
IHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9oYW5kbGVQ
cm9wZXJ0eUFjY2Vzcyhub2RlKTsKKyAgICAgICAgc3VwZXIudmlzaXRJbmRleEV4cHJlc3Npb24o
bm9kZSk7CisgICAgfQorICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7
CiAgICAgICAgIHRoaXMuX3Jlc29sdmVUeXBlQXJndW1lbnRzKG5vZGUudHlwZUFyZ3VtZW50cyk7
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMuanMJKHJl
dmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1
bmMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAgY2xhc3MgTmF0aXZlRnVuYyBl
eHRlbmRzIEZ1bmMgewogICAgIHsKICAgICAgICAgc3VwZXIob3JpZ2luLCBuYW1lLCByZXR1cm5U
eXBlLCB0eXBlUGFyYW1ldGVycywgcGFyYW1ldGVycywgaXNDYXN0KTsKICAgICAgICAgdGhpcy5p
c1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbiA9IG51bGw7
CisgICAgICAgIHRoaXMuaW5zdGFudGlhdGVJbXBsZW1lbnRhdGlvbiA9IChzdWJzdGl0dXRpb24p
ID0+IHt9OworICAgICAgICB0aGlzLnZpc2l0SW1wbGVtZW50YXRpb25EYXRhID0gKGltcGxlbWVu
dGF0aW9uRGF0YSwgdmlzaXRvcikgPT4gbnVsbDsKICAgICB9CiAgICAgCiAgICAgZ2V0IGlzTmF0
aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmNJbnN0YW5jZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSwxNCArMjUsMTYgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgTmF0
aXZlRnVuY0luc3RhbmNlIGV4dGVuZHMgRnVuYyB7Ci0gICAgY29uc3RydWN0b3IoZnVuYywgcmV0
dXJuVHlwZSwgcGFyYW1ldGVycywgaXNDYXN0KQorICAgIGNvbnN0cnVjdG9yKGZ1bmMsIHJldHVy
blR5cGUsIHBhcmFtZXRlcnMsIGlzQ2FzdCwgaW1wbGVtZW50YXRpb25EYXRhKQogICAgIHsKICAg
ICAgICAgc3VwZXIoZnVuYy5vcmlnaW4sIGZ1bmMubmFtZSwgcmV0dXJuVHlwZSwgW10sIHBhcmFt
ZXRlcnMsIGlzQ2FzdCk7CiAgICAgICAgIHRoaXMuX2Z1bmMgPSBmdW5jOworICAgICAgICB0aGlz
Ll9pbXBsZW1lbnRhdGlvbkRhdGEgPSBpbXBsZW1lbnRhdGlvbkRhdGE7CiAgICAgfQogICAgIAog
ICAgIGdldCBmdW5jKCkgeyByZXR1cm4gdGhpcy5fZnVuYzsgfQogICAgIGdldCBpc05hdGl2ZSgp
IHsgcmV0dXJuIHRydWU7IH0KKyAgICBnZXQgaW1wbGVtZW50YXRpb25EYXRhKCkgeyByZXR1cm4g
dGhpcy5faW1wbGVtZW50YXRpb25EYXRhOyB9CiAKICAgICB0b0RlY2xTdHJpbmcoKQogICAgIHsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkocmV2aXNpb24gMjIyMTIz
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMzMsOSArMzMsMTcgQEAgY2xhc3MgTm9kZSB7CiAgICAgICAgIGxldCByZXR1cm5WYWx1
ZSA9IHZpc2l0RnVuYy5jYWxsKHZpc2l0b3IsIHRoaXMpOwogICAgICAgICBpZiAoInJldHVyblZh
bHVlIiBpbiB2aXNpdG9yKQogICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB2aXNpdG9yLnJldHVy
blZhbHVlOworICAgICAgICAKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KICAg
ICAKKyAgICBzdGF0aWMgdmlzaXQobm9kZSwgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlmIChu
b2RlIGluc3RhbmNlb2YgTm9kZSkKKyAgICAgICAgICAgIHJldHVybiBub2RlLnZpc2l0KHZpc2l0
b3IpOworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisgICAgCiAgICAgdW5pZnkodW5pZmlj
YXRpb25Db250ZXh0LCBvdGhlcikKICAgICB7CiAgICAgICAgIGlmICghb3RoZXIpCkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vcm1hbFVzZVBy
b3BlcnR5UmVzb2x2ZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisidXNlIHN0cmljdCI7CisKK2NsYXNzIE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIgZXh0ZW5k
cyBSZXdyaXRlciB7CisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAg
ICByZXR1cm4gc3VwZXIudmlzaXREb3RFeHByZXNzaW9uKG5vZGUpLnJld3JpdGVBZnRlckNsb25p
bmcoKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBzdXBlci52aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKS5yZXdyaXRl
ckFmdGVyQ2xvbmluZygpOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUGFyc2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUGFyc2UuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1BhcnNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsOSArMzM3LDkgQEAgZnVu
Y3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAgICB9KTsKICAgICB9
CiAgICAgCi0gICAgZnVuY3Rpb24gZW1pdEluY3JlbWVudCh0b2tlbiwgcHRyLCBleHRyYUFyZykK
KyAgICBmdW5jdGlvbiBlbWl0SW5jcmVtZW50KHRva2VuLCBvbGQsIGV4dHJhQXJnKQogICAgIHsK
LSAgICAgICAgbGV0IGFyZ3MgPSBbbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tlbiwgVmFy
aWFibGVSZWYud3JhcChwdHIpKV07CisgICAgICAgIGxldCBhcmdzID0gW29sZF07CiAgICAgICAg
IGlmIChleHRyYUFyZykKICAgICAgICAgICAgIGFyZ3MucHVzaChleHRyYUFyZyk7CiAgICAgICAg
IApAQCAtMzUwLDI3ICszNTAsMTUgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBv
cmlnaW5LaQogICAgICAgICBpZiAobmFtZSA9PSAib3BlcmF0b3IiKQogICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJJbnZhbGlkIG5hbWU6ICIgKyBuYW1lKTsKICAgICAgICAgCi0gICAgICAg
IHJldHVybiBuZXcgQXNzaWdubWVudCgKLSAgICAgICAgICAgIHRva2VuLAotICAgICAgICAgICAg
bmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tlbiwgVmFyaWFibGVSZWYud3JhcChwdHIpKSwK
LSAgICAgICAgICAgIG5ldyBDYWxsRXhwcmVzc2lvbih0b2tlbiwgbmFtZSwgW10sIGFyZ3MpKTsK
KyAgICAgICAgcmV0dXJuIG5ldyBDYWxsRXhwcmVzc2lvbih0b2tlbiwgbmFtZSwgW10sIGFyZ3Mp
OwogICAgIH0KICAgICAKICAgICBmdW5jdGlvbiBmaW5pc2hQYXJzaW5nUG9zdEluY3JlbWVudCh0
b2tlbiwgbGVmdCkKICAgICB7Ci0gICAgICAgIGxldCBwdHIgPSBuZXcgTGV0RXhwcmVzc2lvbih0
b2tlbik7Ci0gICAgICAgIHB0ci5hcmd1bWVudCA9IG5ldyBNYWtlUHRyRXhwcmVzc2lvbih0b2tl
biwgbGVmdCk7Ci0gICAgICAgIAotICAgICAgICBsZXQgb2xkVmFsdWUgPSBuZXcgTGV0RXhwcmVz
c2lvbih0b2tlbik7Ci0gICAgICAgIG9sZFZhbHVlLmFyZ3VtZW50ID0gbmV3IERlcmVmZXJlbmNl
RXhwcmVzc2lvbih0b2tlbiwgVmFyaWFibGVSZWYud3JhcChwdHIpKTsKLSAgICAgICAgCi0gICAg
ICAgIHB0ci5ib2R5ID0gb2xkVmFsdWU7Ci0gICAgICAgIAotICAgICAgICBvbGRWYWx1ZS5ib2R5
ID0gbmV3IENvbW1hRXhwcmVzc2lvbih0b2tlbiwgWwotICAgICAgICAgICAgZW1pdEluY3JlbWVu
dCh0b2tlbiwgcHRyKSwKLSAgICAgICAgICAgIFZhcmlhYmxlUmVmLndyYXAob2xkVmFsdWUpCi0g
ICAgICAgIF0pOwotICAgICAgICByZXR1cm4gcHRyOworICAgICAgICBsZXQgcmVhZE1vZGlmeVdy
aXRlID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24odG9rZW4sIGxlZnQpOworICAgICAg
ICByZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVFeHAgPSBlbWl0SW5jcmVtZW50KHRva2VuLCByZWFk
TW9kaWZ5V3JpdGUub2xkVmFsdWVSZWYoKSk7CisgICAgICAgIHJlYWRNb2RpZnlXcml0ZS5yZXN1
bHRFeHAgPSByZWFkTW9kaWZ5V3JpdGUub2xkVmFsdWVSZWYoKTsKKyAgICAgICAgcmV0dXJuIHJl
YWRNb2RpZnlXcml0ZTsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24gcGFyc2VQb3NzaWJsZVN1
ZmZpeCgpCkBAIC00MDksMTMgKzM5NywxMCBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmln
aW4sIG9yaWdpbktpCiAgICAgCiAgICAgZnVuY3Rpb24gZmluaXNoUGFyc2luZ1ByZUluY3JlbWVu
dCh0b2tlbiwgbGVmdCwgZXh0cmFBcmcpCiAgICAgewotICAgICAgICBsZXQgcHRyID0gbmV3IExl
dEV4cHJlc3Npb24odG9rZW4pOwotICAgICAgICBwdHIuYXJndW1lbnQgPSBuZXcgTWFrZVB0ckV4
cHJlc3Npb24odG9rZW4sIGxlZnQpOwotICAgICAgICBwdHIuYm9keSA9IG5ldyBDb21tYUV4cHJl
c3Npb24odG9rZW4sIFsKLSAgICAgICAgICAgIGVtaXRJbmNyZW1lbnQodG9rZW4sIHB0ciwgZXh0
cmFBcmcpLAotICAgICAgICAgICAgbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tlbiwgVmFy
aWFibGVSZWYud3JhcChwdHIpKQotICAgICAgICBdKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICAgICAgbGV0IHJlYWRNb2RpZnlXcml0ZSA9IG5ldyBSZWFkTW9kaWZ5V3JpdGUodG9rZW4sIGxl
ZnQpOworICAgICAgICByZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVFeHAgPSBlbWl0SW5jcmVtZW50
KHRva2VuLCByZWFkTW9kaWZ5V3JpdGUub2xkVmFsdWVSZWYoKSwgZXh0cmFBcmcpOworICAgICAg
ICByZWFkTW9kaWZ5V3JpdGUucmVzdWx0RXhwID0gcmVhZE1vZGlmeVdyaXRlLm5ld1ZhbHVlUmVm
KCk7CisgICAgICAgIHJldHVybiByZWFkTW9kaWZ5V3JpdGU7CiAgICAgfQogICAgIAogICAgIGZ1
bmN0aW9uIHBhcnNlUHJlSW5jcmVtZW50KCkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1ByZXBhcmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUHJlcGFyZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOSBAQCBm
dW5jdGlvbiBwcmVwYXJlKG9yaWdpbiwgbGluZU51bWJlck9mZnNlCiAgICAgcmVzb2x2ZU5hbWVz
KHByb2dyYW0pOwogICAgIHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKTsKICAgICBmbGF0dGVuUHJv
dG9jb2xFeHRlbmRzKHByb2dyYW0pOworICAgIHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJv
Z3JhbSk7CiAgICAgY2hlY2socHJvZ3JhbSk7CisgICAgcmVzb2x2ZVByb3BlcnRpZXMocHJvZ3Jh
bSk7CiAgICAgY2hlY2tMaXRlcmFsVHlwZXMocHJvZ3JhbSk7CiAgICAgY2hlY2tQcm9ncmFtV3Jh
cHBlZChwcm9ncmFtKTsKICAgICBjaGVja1JldHVybnMocHJvZ3JhbSk7CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0
cmljdCI7CisKK2NsYXNzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Np
b24geworICAgIGdldCByZXN1bHRUeXBlKCkgeyByZXR1cm4gdGhpcy5yZXN1bHRUeXBlRm9yR2V0
ID8gdGhpcy5yZXN1bHRUeXBlRm9yR2V0IDogdGhpcy5yZXN1bHRUeXBlRm9yQW5kOyB9CisgICAg
CisgICAgcmV3cml0ZUFmdGVyQ2xvbmluZygpCisgICAgeworICAgICAgICAvLyBBdCB0aGlzIHBv
aW50LCBub2RlLmJhc2UuaXNMVmFsdWUgd2lsbCBvbmx5IHJldHVybiB0cnVlIGlmIGl0J3MgcG9z
c2libGUgdG8gZ2V0IGEgcG9pbnRlciB0byBpdCwKKyAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCBu
byBsb25nZXIgc2VlIGFueSBEb3RFeHByZXNzaW9ucyBvciBJbmRleEV4cHJlc3Npb25zLiBBbHNv
LCBub2RlIGlzIGEgbmV3bHkgY3JlYXRlZAorICAgICAgICAvLyBub2RlIGFuZCBldmVyeXRoaW5n
IGJlbmVhdGggaXQgaXMgbmV3bHkgY3JlYXRlZCwgc28gd2UgY2FuIGVkaXQgaXQgaW4tcGxhY2Uu
CisgICAgICAgIAorICAgICAgICBpZiAoKG5vZGUuYmFzZS5pc0xWYWx1ZSB8fCBub2RlLmJhc2VU
eXBlLmlzUmVmKSAmJiBub2RlLmNhbGxGb3JBbmQpCisgICAgICAgICAgICByZXR1cm4gbmV3IERl
cmVmZXJlbmNlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5jYWxsRm9yQW5kKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChub2RlLmNhbGxGb3JHZXQpCisgICAgICAgICAgICByZXR1cm4gbm9k
ZS5jYWxsRm9yR2V0OworICAgICAgICAKKyAgICAgICAgaWYgKCFub2RlLmNhbGxGb3JBbmQpCisg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIjog
UHJvcGVydHkgYWNjZXNzIHdpdGhvdXQgZ2V0dGVyIGFuZCBhbmRlcjogIiArIG5vZGUpOworICAg
ICAgICAKKyAgICAgICAgbGV0IGFub25WYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5v
cmlnaW4sIG5vZGUuYmFzZVR5cGUpOworICAgICAgICBub2RlLmNhbGxGb3JBbmQuYXJndW1lbnRM
aXN0WzBdID0gbm9kZS5iYXNlVHlwZS51bmlmeU5vZGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZChu
b2RlLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChhbm9uVmFyKSk7CisgICAgICAgIHJldHVybiBu
ZXcgQ29tbWFFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBbCisgICAgICAgICAgICBhbm9uVmFyLAor
ICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAo
YW5vblZhciksIG5vZGUuYmFzZSwgbm9kZS5iYXNlVHlwZSksCisgICAgICAgICAgICBub2RlLmNh
bGxGb3JBbmQKKyAgICAgICAgXSk7CisgICAgfQorICAgIAorICAgIHVwZGF0ZUNhbGxzQWZ0ZXJD
aGFuZ2luZ0Jhc2UoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuY2FsbEZvckdldCkKKyAgICAg
ICAgICAgIHRoaXMuY2FsbEZvckdldFswXSA9IHRoaXMuYmFzZTsKKyAgICAgICAgaWYgKHRoaXMu
Y2FsbEZvckFuZCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvckFuZFswXSA9IHRoaXMuYmFzZVR5
cGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZCh0aGlzLm9yaWdpbiwgdGhpcy5iYXNlKTsKKyAgICAg
ICAgaWYgKHRoaXMuY2FsbEZvclNldCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvclNldFswXSA9
IHRoaXMuYmFzZTsKKyAgICB9CisgICAgCisgICAgZW1pdEdldChiYXNlKQorICAgIHsKKyAgICAg
ICAgbGV0IHJlc3VsdCA9IHRoaXMudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICByZXN1
bHQuYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC51cGRhdGVDYWxsc0FmdGVyQ2hhbmdpbmdC
YXNlKCk7CisgICAgICAgIHJldHVybiByZXN1bHQucmV3cml0ZUFmdGVyQ2xvbmluZygpOworICAg
IH0KKyAgICAKKyAgICBlbWl0U2V0KGJhc2UsIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFy
ZXN1bHQuY2FsbEZvclNldCkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUu
b3JpZ2luLm9yaWdpblN0cmluZywgIkNhbm5vdCBlbWl0IHNldCBiZWNhdXNlOiAiICsgdGhpcy5l
cnJvckZvclNldC5tZXNzYWdlKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMudmlzaXQobmV3
IFJld3JpdGVyKCkpOworICAgICAgICByZXN1bHQuYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3Vs
dC51cGRhdGVDYWxsc0FmdGVyQ2hhbmdpbmdCYXNlKCk7CisgICAgICAgIHJlc3VsdC5jYWxsRm9y
U2V0WzJdID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQuY2FsbEZvclNldDsKKyAgICB9
Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5UmVzb2x2
ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVy
dHlSZXNvbHZlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Qcm9wZXJ0eVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmlj
dCI7CisKK2NsYXNzIFByb3BlcnR5UmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBfdmlz
aXRQcm9wZXJ0eUFjY2Vzcyhub2RlKQorICAgIHsKKyAgICAgICAgbGV0IG5ld05vZGUgPSBub2Rl
LnZpc2l0KG5ldyBOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyKCkpOworICAgICAgICBuZXdOb2Rl
LnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLmJlY29tZShuZXdOb2RlKTsKKyAgICB9CisgICAg
CisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl92aXNp
dFByb3BlcnR5QWNjZXNzKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fdmlzaXRQcm9wZXJ0eUFjY2Vzcyhub2Rl
KTsKKyAgICB9CisgICAgCisgICAgX2hhbmRsZVJlYWRNb2RpZnlXcml0ZShub2RlKQorICAgIHsK
KyAgICAgICAgbGV0IHR5cGUgPSBub2RlLm9sZFZhbHVlVmFyLnR5cGU7CisgICAgICAgIGxldCBz
aW1wbGVMSFMgPSBub2RlLmxWYWx1ZS52aXNpdChuZXcgTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZl
cigpKTsKKyAgICAgICAgaWYgKHNpbXBsZUxIUy5pc0xWYWx1ZSkgeworICAgICAgICAgICAgbGV0
IHB0clR5cGUgPSBuZXcgUHRyVHlwZShub2RlLm9yaWdpbiwgdHlwZSk7CisgICAgICAgICAgICBs
ZXQgcHRyVmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG5vZGUub3JpZ2luLCBwdHJUeXBlKTsK
KyAgICAgICAgICAgIG5vZGUuYmVjb21lKG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmlnaW4s
IFsKKyAgICAgICAgICAgICAgICBub2RlLm9sZFZhbHVlVmFyLCBub2RlLm5ld1ZhbHVlVmFyLCBw
dHJWYXIsCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQoCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHB0clZhciksCisgICAgICAgICAgICAg
ICAgICAgIG5ldyBNYWtlUHRyRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgc2ltcGxlTEhTKSwgcHRy
VHlwZSksCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQoCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUub3JpZ2luLCBub2RlLm9sZFZhbHVlUmVmKCksCisgICAgICAgICAgICAgICAgICAg
IG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAo
cHRyVmFyKSksIHR5cGUpLAorICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3Jp
Z2luLCBub2RlLm5ld1ZhbHVlUmVmKCksIG5vZGUubmV3VmFsdWVFeHAsIHR5cGUpLAorICAgICAg
ICAgICAgICAgIG5ldyBBc3NpZ25tZW50KAorICAgICAgICAgICAgICAgICAgICBub2RlLm9yaWdp
biwgbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgVmFyaWFibGVSZWYud3Jh
cChwdHJWYXIpKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5uZXdWYWx1ZVJlZigpLCB0eXBl
KSwKKyAgICAgICAgICAgICAgICBub2RlLnJlc3VsdEV4cAorICAgICAgICAgICAgXSkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsZXQgcmVzdWx0
ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubFZhbHVl
LmJhc2UpOworICAgICAgICByZXN1bHQubmV3VmFsdWVFeHAgPSBuZXcgQ29tbWFFeHByZXNzaW9u
KG5vZGUub3JpZ2luLCBbCisgICAgICAgICAgICBub2RlLm9sZFZhbHVlVmFyLCBub2RlLm5ld1Zh
bHVlVmFyLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIG5vZGUub2xk
VmFsdWVSZWYoKSwgbm9kZS5sVmFsdWUuZW1pdEdldChyZXN1bHQub2xkVmFsdWVSZWYoKSksIHR5
cGUpLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIG5vZGUubmV3VmFs
dWVSZWYoKSwgbm9kZS5uZXdWYWx1ZUV4cCwgdHlwZSksCisgICAgICAgICAgICBub2RlLmxWYWx1
ZS5lbWl0U2V0KHJlc3VsdC5vbGRWYWx1ZVJlZigpLCBub2RlLm5ld1ZhbHVlUmVmKCkpCisgICAg
ICAgIF0pOworICAgICAgICByZXN1bHQucmVzdWx0RXhwID0gbm9kZS5uZXdWYWx1ZVJlZigpOwor
ICAgICAgICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUocmVzdWx0KTsKKyAgICAgICAgbm9k
ZS5iZWNvbWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdmlzaXRSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLm5ld1ZhbHVlRXhwLnZpc2l0KHRo
aXMpOworICAgICAgICBub2RlLnJlc3VsdEV4cC52aXNpdCh0aGlzKTsKKyAgICAgICAgdGhpcy5f
aGFuZGxlUmVhZE1vZGlmeVdyaXRlKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEFzc2ln
bm1lbnQobm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUucmhzLnZpc2l0KHRoaXMpOworICAgICAg
ICAKKyAgICAgICAgbGV0IHNpbXBsZUxIUyA9IG5vZGUubGhzLnZpc2l0KG5ldyBOb3JtYWxVc2VQ
cm9wZXJ0eVJlc29sdmVyKCkpOworICAgICAgICBpZiAoc2ltcGxlTEhTLmlzTFZhbHVlKSB7Cisg
ICAgICAgICAgICBub2RlLmxocyA9IHNpbXBsZUxIUzsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCEobm9kZS5saHMgaW5zdGFuY2VvZiBQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24pKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4
cGVjdGVkIGxocyB0eXBlOiAiICsgbm9kZS5saHMuY29uc3RydWN0b3IubmFtZSk7CisgICAgICAg
IAorICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9k
ZS5vcmlnaW4sIG5vZGUubGhzLmJhc2UpOworICAgICAgICBsZXQgcmVzdWx0VmFyID0gbmV3IEFu
b255bW91c1ZhcmlhYmxlKG5vZGUub3JpZ2luLCBub2RlLnR5cGUpOworICAgICAgICByZXN1bHQu
bmV3VmFsdWVFeHAgPSBuZXcgQ29tbWFFeHByZXNzaW9uKFsKKyAgICAgICAgICAgIHJlc3VsdFZh
ciwKKyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53
cmFwKHJlc3VsdFZhciksIG5vZGUucmhzLCBub2RlLnR5cGUpLAorICAgICAgICAgICAgbm9kZS5s
aHMuZW1pdFNldChyZXN1bHQub2xkVmFsdWVSZWYoKSwgVmFyaWFibGVSZWYud3JhcChyZXN1bHRW
YXIpKQorICAgICAgICBdKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdEV4cCA9IFZhcmlhYmxlUmVm
LndyYXAocmVzdWx0VmFyKTsKKyAgICAgICAgdGhpcy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKHJl
c3VsdCk7CisgICAgICAgIG5vZGUuYmVjb21lKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZp
c2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0TWFr
ZVB0ckV4cHJlc3Npb24obm9kZSk7CisgICAgICAgIGlmICghbm9kZS5sVmFsdWUuaXNMVmFsdWUp
CisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJp
bmcsICJOb3QgYW4gbHZhbHVlOiAiICsgbm9kZS5sVmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2
aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZp
c2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgaWYgKCFub2RlLmxWYWx1
ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2lu
Lm9yaWdpblN0cmluZywgIk5vdCBhbiBsdmFsdWU6ICIgKyBub2RlLmxWYWx1ZSk7CisgICAgfQor
fQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHJldmlz
aW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDE5IEBAIGNsYXNzIFB0clR5cGUgZXh0ZW5kcyBS
ZWZlcmVuY2VUeXBlIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUudW5pZnkodW5p
ZmljYXRpb25Db250ZXh0LCBvdGhlci5lbGVtZW50VHlwZSk7CiAgICAgfQogICAgIAorICAgIGFy
Z3VtZW50Rm9yQW5kT3ZlcmxvYWQob3JpZ2luLCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRocm93
IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJQb2ludGVyIHN1YnNjcmlwdCBp
cyBub3QgdmFsaWQiKTsKKyAgICB9CisgICAgYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQob3Jp
Z2luLCB0eXBlKQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9y
aWdpblN0cmluZywgIlBvaW50ZXIgc3Vic2NyaXB0IGlzIG5vdCB2YWxpZCIpOworICAgIH0KKyAg
ICByZXR1cm5UeXBlRnJvbUFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLmVsZW1lbnRUeXBlOworICAgIH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlICsgIl4gIiArIHRoaXMuYWRkcmVzc1NwYWNlOwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
IGV4dGVuZHMgRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBsVmFsdWUpCisg
ICAgeworICAgICAgICBzdXBlcihvcmlnaW4pOworICAgICAgICB0aGlzLl9sVmFsdWUgPSBsVmFs
dWU7CisgICAgICAgIHRoaXMub2xkVmFsdWVWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUob3Jp
Z2luKTsKKyAgICAgICAgdGhpcy5uZXdWYWx1ZVZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShv
cmlnaW4pOworICAgICAgICB0aGlzLm5ld1ZhbHVlRXhwID0gbnVsbDsKKyAgICAgICAgdGhpcy5y
ZXN1bHRFeHAgPSBudWxsOworICAgIH0KKyAgICAKKyAgICBnZXQgbFZhbHVlKCkgeyByZXR1cm4g
dGhpcy5fbFZhbHVlOyB9CisgICAgCisgICAgb2xkVmFsdWVSZWYoKSB7IHJldHVybiBWYXJpYWJs
ZVJlZi53cmFwKHRoaXMub2xkVmFsdWVWYXIpOyB9CisgICAgbmV3VmFsdWVSZWYoKSB7IHJldHVy
biBWYXJpYWJsZVJlZi53cmFwKHRoaXMubmV3VmFsdWVWYXIpOyB9CisgICAgCisgICAgdG9TdHJp
bmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJSTVcoIiArIHRoaXMubFZhbHVlICsgIiwgIiAr
IHRoaXMub2xkVmFsdWVWYXIgKyAiLCAiICsgdGhpcy5uZXdWYWx1ZVZhciArICIsICIgKyB0aGlz
Lm5ld1ZhbHVlRXhwICsgIiwgIiArIHRoaXMucmVzdWx0RXhwICsgIikiOworICAgIH0KK30KKwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVByb3BlcnRpZXMuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVByb3Bl
cnRpZXMuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmVzb2x2ZVByb3BlcnRpZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOwor
CisvLyBUaGlzIHR1cm5zIERvdEV4cHJlc3Npb24gYW5kIEluZGV4RXhwcmVzc2lvbiBpbnRvIGNh
bGxzIHRvIGdldHRlcnMgKG9wZXJhdG9yLmZpZWxkIGFuZCBvcGVyYXRvcltdKSwKKy8vIHNldHRl
cnMgKG9wZXJhdG9yLmZpZWxkPSBhbmQgb3BlcmF0b3JbXT0pLCBhbmQgYW5kZXJzIChvcGVyYXRv
ciYuZmllbGQgYW5kIG9wZXJhdG9yJltdKS4gVGhpcyBpbnZvbHZlcworLy8gdHJhbnNmb3JtaW5n
IGFzc2lnbm1lbnRzIGFuZCBSTVcncyB0byBkbyBsdmFsdWUgZW11bGF0aW9uLgorZnVuY3Rpb24g
cmVzb2x2ZVByb3BlcnRpZXMocHJvZ3JhbSkKK3sKKyAgICBwcm9ncmFtLnZpc2l0KG5ldyBQcm9w
ZXJ0eVJlc29sdmVyKCkpOworfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmV3cml0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmV3cml0ZXIuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Jld3JpdGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsOSBAQAogLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGhhdmUgc2Vuc2libGUgYmVoYXZpb3Igd2hlbiBpdCBlbmNvdW50
ZXJzIGRlZmluaXRpb25zIHRoYXQgaXQgY2Fubm90IGhhbmRsZS4gUmlnaHQKIC8vIG5vdyB3ZSBh
cmUgaGFja2lzaGx5IHByZXZlbnRpbmcgdGhpcyBieSB3cmFwcGluZyB0aGluZ3MgaW4gVHlwZVJl
Zi4gVGhhdCdzIHByb2JhYmx5IHdyb25nLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NjIwOAotY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7
CitjbGFzcyBSZXdyaXRlciB7CiAgICAgY29uc3RydWN0b3IoKQogICAgIHsKLSAgICAgICAgc3Vw
ZXIoKTsKICAgICAgICAgdGhpcy5fbWFwcGluZyA9IG5ldyBNYXAoKTsKICAgICB9CiAgICAgCkBA
IC05OSw3ICs5OCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAg
ICAgICBsZXQgcmVzdWx0ID0gbmV3IFZhcmlhYmxlRGVjbCgKICAgICAgICAgICAgIG5vZGUub3Jp
Z2luLCBub2RlLm5hbWUsCiAgICAgICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyksCi0gICAg
ICAgICAgICBub2RlLmluaXRpYWxpemVyID8gbm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKSA6
IG51bGwpOworICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRpYWxpemVyLCB0aGlzKSk7
CiAgICAgICAgIHRoaXMuX21hcE5vZGUobm9kZSwgcmVzdWx0KTsKICAgICAgICAgcmVzdWx0LmVQ
dHIgPSBub2RlLmVQdHI7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzEsNyArMTMwLDcg
QEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXRUeXBlUmVm
KG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFR5cGVSZWYobm9kZS5vcmln
aW4sIG5vZGUubmFtZSwgbm9kZS50eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJndW1lbnQgPT4gdHlw
ZUFyZ3VtZW50LnZpc2l0KHRoaXMpKSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBl
ID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBO
b2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogICAgIApAQCAtMTYzLDI0ICsxNjIsNTMgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNp
dG9yQmFzZSB7CiAgICAgdmlzaXRBc3NpZ25tZW50KG5vZGUpCiAgICAgewogICAgICAgICBsZXQg
cmVzdWx0ID0gbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIG5vZGUubGhzLnZpc2l0KHRoaXMp
LCBub2RlLnJocy52aXNpdCh0aGlzKSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBl
ID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBO
b2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsK
KyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUu
b3JpZ2luLCBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKSk7CisgICAgICAgIHJlc3VsdC5vbGRWYWx1
ZVZhciA9IG5vZGUub2xkVmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5uZXdW
YWx1ZVZhciA9IG5vZGUubmV3VmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5u
ZXdWYWx1ZUV4cCA9IG5vZGUubmV3VmFsdWVFeHAudmlzaXQodGhpcyk7CisgICAgICAgIHJlc3Vs
dC5yZXN1bHRFeHAgPSBub2RlLnJlc3VsdEV4cC52aXNpdCh0aGlzKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9k
ZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9u
KG5vZGUub3JpZ2luLCBub2RlLnB0ci52aXNpdCh0aGlzKSk7Ci0gICAgICAgIHJlc3VsdC50eXBl
ID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVz
dWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogICAgIAorICAgIF9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24o
cmVzdWx0LCBub2RlKQorICAgIHsKKyAgICAgICAgcmVzdWx0LnBvc3NpYmxlR2V0T3ZlcmxvYWRz
ID0gbm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkczsKKyAgICAgICAgcmVzdWx0LnBvc3NpYmxlU2V0
T3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkczsKKyAgICAgICAgcmVzdWx0LnBv
c3NpYmxlQW5kT3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZUFuZE92ZXJsb2FkczsKKyAgICAgICAg
cmVzdWx0LmJhc2VUeXBlID0gTm9kZS52aXNpdChub2RlLmJhc2VUeXBlLCB0aGlzKTsKKyAgICAg
ICAgcmVzdWx0LmNhbGxGb3JHZXQgPSBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvckdldCwgdGhpcyk7
CisgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlRm9yR2V0ID0gTm9kZS52aXNpdChub2RlLnJlc3Vs
dFR5cGVGb3JHZXQsIHRoaXMpOworICAgICAgICByZXN1bHQuY2FsbEZvckFuZCA9IE5vZGUudmlz
aXQobm9kZS5jYWxsRm9yQW5kLCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGVGb3JB
bmQgPSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckFuZCwgdGhpcyk7CisgICAgICAgIHJl
c3VsdC5jYWxsRm9yU2V0ID0gTm9kZS52aXNpdChub2RlLmNhbGxGb3JTZXQsIHRoaXMpOworICAg
ICAgICByZXN1bHQuZXJyb3JGb3JTZXQgPSBub2RlLmVycm9yRm9yU2V0OworICAgICAgICByZXN1
bHQudXBkYXRlQ2FsbHNBZnRlckNoYW5naW5nQmFzZSgpOworICAgIH0KKyAgICAKICAgICB2aXNp
dERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRG90
RXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyksIG5vZGUuZmll
bGROYW1lKTsKLSAgICAgICAgcmVzdWx0LnN0cnVjdFR5cGUgPSBub2RlLnN0cnVjdFR5cGUgPyBu
b2RlLnN0cnVjdFR5cGUudmlzaXQodGhpcykgOiBudWxsOwotICAgICAgICAvLyBXZSBkb24ndCB3
YW50IHRvIHJld3JpdGUgZmllbGQsIHNpbmNlIHRoaXMgaXMgYSBkZWVwIHJlZmVyZW5jZSBnb2lu
ZyBvdXQgb2YgdGhlIGZ1bmN0aW9uLgotICAgICAgICAvLyBBbHNvLCB0aGlzIGlzIHNldCB1cCBk
dXJpbmcgaW5saW5pbmcsIHNvIHdlJ3JlIGFscmVhZHkgZnVsbHkgbW9ub21vcnBoaXNlZC4KLSAg
ICAgICAgcmVzdWx0LmZpZWxkID0gbm9kZS5maWVsZDsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKHJlc3VsdCwgbm9kZSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAgewor
ICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEluZGV4RXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9k
ZS5hcnJheS52aXNpdCh0aGlzKSwgbm9kZS5pbmRleC52aXNpdCh0aGlzKSk7CisgICAgICAgIHRo
aXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQubm9kZSk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMjE2LDcgKzI0NCw3IEBAIGNsYXNzIFJl
d3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0UmV0dXJuKG5vZGUp
CiAgICAgewotICAgICAgICByZXR1cm4gbmV3IFJldHVybihub2RlLm9yaWdpbiwgbm9kZS52YWx1
ZSA/IG5vZGUudmFsdWUudmlzaXQodGhpcykgOiBudWxsKTsKKyAgICAgICAgcmV0dXJuIG5ldyBS
ZXR1cm4obm9kZS5vcmlnaW4sIE5vZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcykpOwogICAgIH0K
ICAgICAKICAgICB2aXNpdENvbnRpbnVlKG5vZGUpCkBAIC0yNDAsNyArMjY4LDcgQEAgY2xhc3Mg
UmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5
cGUobm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgbm9kZS5jb25zdHJ1Y3Rv
cihub2RlLm9yaWdpbiwgbm9kZS52YWx1ZSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50
eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUg
PSBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgICAgIHJlc3VsdC5wcmVmZXJyZWRU
eXBlID0gbm9kZS5wcmVmZXJyZWRUeXBlLnZpc2l0KHRoaXMpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KQEAgLTI2MSw3ICsyODksNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZp
c2l0b3JCYXNlIHsKICAgICB2aXNpdE51bGxUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBsZXQg
cmVzdWx0ID0gbmV3IE51bGxUeXBlKG5vZGUub3JpZ2luKTsKLSAgICAgICAgcmVzdWx0LnR5cGUg
PSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1
bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKQEAgLTI4MCw3ICszMDgsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRz
IFZpc2l0b3JCYXNlIHsKICAgICAgICAgcmVzdWx0LnBvc3NpYmxlT3ZlcmxvYWRzID0gbm9kZS5w
b3NzaWJsZU92ZXJsb2FkczsKICAgICAgICAgaWYgKG5vZGUuaXNDYXN0KQogICAgICAgICAgICAg
cmVzdWx0LnNldENhc3REYXRhKG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKSk7Ci0gICAgICAg
IHJlc3VsdC5yZXN1bHRUeXBlID0gbm9kZS5yZXN1bHRUeXBlID8gbm9kZS5yZXN1bHRUeXBlLnZp
c2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBOb2RlLnZpc2l0
KG5vZGUucmVzdWx0VHlwZSwgdGhpcyk7CiAgICAgICAgIHJlc3VsdC5yZXN1bHRFUHRyID0gbm9k
ZS5yZXN1bHRFUHRyOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI5OCw3ICsz
MjYsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB7CiAgICAg
ICAgIGxldCByZXN1bHQgPSBuZXcgRnVuY3Rpb25MaWtlQmxvY2soCiAgICAgICAgICAgICBub2Rl
Lm9yaWdpbiwKLSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZSA/IG5vZGUucmV0dXJuVHlwZS52
aXNpdCh0aGlzKSA6IG51bGwsCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmV0dXJuVHlw
ZSwgdGhpcyksCiAgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdC5tYXAoYXJndW1lbnQgPT4g
YXJndW1lbnQudmlzaXQodGhpcykpLAogICAgICAgICAgICAgbm9kZS5wYXJhbWV0ZXJzLm1hcChw
YXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMpKSwKICAgICAgICAgICAgIG5vZGUuYm9k
eS52aXNpdCh0aGlzKSk7CkBAIC0zMTUsNyArMzQzLDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5k
cyBWaXNpdG9yQmFzZSB7CiAKICAgICB2aXNpdElmU3RhdGVtZW50KG5vZGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gbmV3IElmU3RhdGVtZW50KG5vZGUub3JpZ2luLCBub2RlLmNvbmRpdGlvbmFs
LnZpc2l0KHRoaXMpLCBub2RlLmJvZHkudmlzaXQodGhpcyksIG5vZGUuZWxzZUJvZHkgPyBub2Rl
LmVsc2VCb2R5LnZpc2l0KHRoaXMpIDogdW5kZWZpbmVkKTsKKyAgICAgICAgcmV0dXJuIG5ldyBJ
ZlN0YXRlbWVudChub2RlLm9yaWdpbiwgbm9kZS5jb25kaXRpb25hbC52aXNpdCh0aGlzKSwgbm9k
ZS5ib2R5LnZpc2l0KHRoaXMpLCBOb2RlLnZpc2l0KG5vZGUuZWxzZUJvZHksIHRoaXMpKTsKICAg
ICB9CiAKICAgICB2aXNpdFdoaWxlTG9vcChub2RlKQpAQCAtMzMxLDIwICszNTksMTYgQEAgY2xh
c3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXRGb3JMb29wKG5vZGUp
CiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEZvckxvb3Aobm9kZS5vcmlnaW4sCi0gICAgICAg
ICAgICBub2RlLmluaXRpYWxpemF0aW9uID8gbm9kZS5pbml0aWFsaXphdGlvbi52aXNpdCh0aGlz
KSA6IHVuZGVmaW5lZCwKLSAgICAgICAgICAgIG5vZGUuY29uZGl0aW9uID8gbm9kZS5jb25kaXRp
b24udmlzaXQodGhpcykgOiB1bmRlZmluZWQsCi0gICAgICAgICAgICBub2RlLmluY3JlbWVudCA/
IG5vZGUuaW5jcmVtZW50LnZpc2l0KHRoaXMpIDogdW5kZWZpbmVkLAorICAgICAgICAgICAgTm9k
ZS52aXNpdChub2RlLmluaXRpYWxpemF0aW9uLCB0aGlzKSwKKyAgICAgICAgICAgIE5vZGUudmlz
aXQobm9kZS5jb25kaXRpb24sIHRoaXMpLAorICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLmlu
Y3JlbWVudCwgdGhpcyksCiAgICAgICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcykpOwogICAg
IH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkKKyAgICB2aXNpdEFub255bW91
c1ZhcmlhYmxlKG5vZGUpCiAgICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IExldEV4cHJl
c3Npb24obm9kZS5vcmlnaW4pOwotICAgICAgICByZXN1bHQuaW5kZXggPSBub2RlLmluZGV4Owot
ICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6
IG51bGw7Ci0gICAgICAgIHJlc3VsdC5hcmd1bWVudCA9IG5vZGUuYXJndW1lbnQudmlzaXQodGhp
cyk7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmln
aW4sIG5vZGUudHlwZSk7CiAgICAgICAgIHRoaXMuX21hcE5vZGUobm9kZSwgcmVzdWx0KTsKLSAg
ICAgICAgcmVzdWx0LmJvZHkgPSBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgICAgIHJlc3Vs
dC5lUHRyID0gbm9kZS5lUHRyOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBjbGFzcyBTdHJ1Y3RUeXBlIGV4dGVuZHMg
VHlwZSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIGluc3RhbnRp
YXRlKHR5cGVBcmd1bWVudHMsIG1vZGUpCisgICAgaW5zdGFudGlhdGUodHlwZUFyZ3VtZW50cykK
ICAgICB7CiAgICAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSB0aGlzLnR5cGVQYXJh
bWV0ZXJzLmxlbmd0aCkKICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5v
cmlnaW5TdHJpbmcsICJXcm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgdG8gaW5zdGFudGlh
dGlvbiIpOwpAQCAtNjYsMTIgKzY2LDExIEBAIGNsYXNzIFN0cnVjdFR5cGUgZXh0ZW5kcyBUeXBl
IHsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAKICAgICAgICAgbGV0IHN1YnN0
aXR1dGlvbiA9IG5ldyBTdWJzdGl0dXRpb24odGhpcy50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3Vt
ZW50cyk7Ci0gICAgICAgIGxldCBpbnN0YW50aWF0ZUltbWVkaWF0ZXMgPSBtb2RlID09ICJzaGFs
bG93IiA/IG51bGwgOiBuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCk7CisgICAgICAgIGxldCBp
bnN0YW50aWF0ZUltbWVkaWF0ZXMgPSBuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCk7CiAgICAg
ICAgIGxldCByZXN1bHQgPSBuZXcgU3RydWN0VHlwZSh0aGlzLm9yaWdpbiwgdGhpcy5uYW1lLCBb
XSk7CiAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7CiAgICAgICAgICAg
ICBsZXQgbmV3RmllbGQgPSBmaWVsZC52aXNpdChzdWJzdGl0dXRpb24pOwotICAgICAgICAgICAg
aWYgKGluc3RhbnRpYXRlSW1tZWRpYXRlcykKLSAgICAgICAgICAgICAgICBuZXdGaWVsZCA9IG5l
d0ZpZWxkLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyk7CisgICAgICAgICAgICBuZXdGaWVs
ZCA9IG5ld0ZpZWxkLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyk7CiAgICAgICAgICAgICBy
ZXN1bHQuYWRkKG5ld0ZpZWxkKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vz
c29ycy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50
aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gc3ludGhlc2l6ZVN0cnVjdEFjY2Vz
c29ycyhwcm9ncmFtKQoreworICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1
ZXMoKSkgeworICAgICAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHR5
cGUuZmllbGRzKSB7CisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBlUGFyYW1ldGVycygp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUudHlwZVBhcmFtZXRl
cnMubWFwKAorICAgICAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyID0+IHR5cGVQYXJhbWV0
ZXIudmlzaXQobmV3IFR5cGVQYXJhbWV0ZXJSZXdyaXRlcigpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVR5cGVBcmd1bWVudHMoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0eXBlUGFyYW1ldGVycy5tYXAo
dHlwZVBhcmFtZXRlciA9PiB0eXBlUGFyYW1ldGVyLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVw
SW1wbGVtZW50YXRpb24obmF0aXZlRnVuYywgaW1wbGVtZW50YXRpb24pCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbmF0aXZlRnVuYy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uID0g
c3Vic3RpdHV0aW9uID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1R5cGUgPSB0eXBl
LnZpc2l0KHN1YnN0aXR1dGlvbik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7dHlwZTog
bmV3VHlwZSwgZmllbGQ6IG5ld1R5cGUuZmllbGRCeU5hbWUoZmllbGQubmFtZSl9OworICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgbmF0aXZlRnVuYy52aXNpdEltcGxlbWVudGF0
aW9uRGF0YSA9IChpbXBsZW1lbnRhdGlvbkRhdGEsIHZpc2l0b3IpID0+IHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVmlzaXRpbmcgdGhlIHR5cGUgZmlyc3QgZW5zdXJlcyB0aGF0IHRoZSBzdHJ1
Y3QgbGF5b3V0IGJ1aWxkZXIgZmlndXJlcyBvdXQgdGhlIGZpZWxkJ3MKKyAgICAgICAgICAgICAg
ICAgICAgLy8gb2Zmc2V0LgorICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEu
dHlwZS52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25E
YXRhLmZpZWxkLnZpc2l0KHZpc2l0b3IpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgbmF0aXZlRnVuYy5pbXBsZW1lbnRhdGlvbiA9IChhcmd1bWVudExpc3QsIG5vZGUpID0+
IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5hdGl2ZUZ1bmNJbnN0YW5jZSA9IG5vZGUubmF0
aXZlRnVuY0luc3RhbmNlOworICAgICAgICAgICAgICAgICAgICBsZXQgaW1wbGVtZW50YXRpb25E
YXRhID0gbmF0aXZlRnVuY0luc3RhbmNlLmltcGxlbWVudGF0aW9uRGF0YTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAg
YXJndW1lbnRMaXN0LCBpbXBsZW1lbnRhdGlvbkRhdGEuZmllbGQub2Zmc2V0LCBpbXBsZW1lbnRh
dGlvbkRhdGEudHlwZS5zaXplLCBpbXBsZW1lbnRhdGlvbkRhdGEuZmllbGQudHlwZS5zaXplKTsK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBmdW5jdGlvbiBjcmVhdGVGaWVsZFR5cGUoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmaWVsZC50eXBlLnZpc2l0KG5ldyBTdWJzdGl0dXRpb24odHlwZS50eXBl
UGFyYW1ldGVycywgdHlwZVBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlwZVJlZigpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVSZWYuaW5zdGFudGlhdGUodHlwZSwgY3JlYXRlVHlw
ZUFyZ3VtZW50cygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bGV0IGlzQ2FzdCA9IGZhbHNlOworICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXJzOworICAg
ICAgICAgICAgbGV0IG5hdGl2ZUZ1bmM7CisKKyAgICAgICAgICAgIC8vIFRoZSBnZXR0ZXI6IG9w
ZXJhdG9yLmZpZWxkCisgICAgICAgICAgICB0eXBlUGFyYW1ldGVycyA9IGNyZWF0ZVR5cGVQYXJh
bWV0ZXJzKCk7CisgICAgICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAg
ICAgICAgICAgICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3IuIiArIGZpZWxkLm5hbWUsIGNyZWF0
ZUZpZWxkVHlwZSgpLCB0eXBlUGFyYW1ldGVycywgW2NyZWF0ZVR5cGVSZWYoKV0sCisgICAgICAg
ICAgICAgICAgaXNDYXN0KTsKKyAgICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5h
dGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7Cisg
ICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBFQnVmZmVyKGZpZWxkU2l6
ZSksIDApOworICAgICAgICAgICAgICAgIHJlc3VsdC5jb3B5RnJvbShiYXNlLnBsdXMob2Zmc2V0
KSwgZmllbGRTaXplKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gVGhlIHNldHRlcjogb3BlcmF0b3IuZmllbGQ9CisgICAgICAgICAg
ICB0eXBlUGFyYW1ldGVycyA9IGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCk7CisgICAgICAgICAgICBu
YXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAgICAgICAgICAgICAgZmllbGQub3JpZ2lu
LCAib3BlcmF0b3IuIiArIGZpZWxkLm5hbWUgKyAiPSIsIGNyZWF0ZVR5cGVSZWYoKSwgdHlwZVBh
cmFtZXRlcnMsCisgICAgICAgICAgICAgICAgW2NyZWF0ZVR5cGVSZWYoKSwgY3JlYXRlRmllbGRU
eXBlKCldLCBpc0Nhc3QpOworICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0
aXZlRnVuYywgKFtiYXNlLCB2YWx1ZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9
PiB7CisgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBFQnVmZmVyKHN0
cnVjdFNpemUpLCAwKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuY29weUZyb20oYmFzZSwgc3Ry
dWN0U2l6ZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LnBsdXMob2Zmc2V0KS5jb3B5RnJvbSh2
YWx1ZSwgZmllbGRTaXplKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQKKyAgICAgICAg
ICAgIHR5cGVQYXJhbWV0ZXJzID0gY3JlYXRlVHlwZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAg
IG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgICAgICBmaWVsZC5vcmln
aW4sICJvcGVyYXRvciYuIiArIGZpZWxkLm5hbWUsIG5ldyBQdHJUeXBlKGZpZWxkLm9yaWdpbiwg
Y3JlYXRlRmllbGRUeXBlKCkpLAorICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzLCBbbmV3
IFB0clR5cGUoZmllbGQub3JpZ2luLCBjcmVhdGVUeXBlUmVmKCkpXSwgaXNDYXN0KTsKKyAgICAg
ICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNl
dCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICAgICAgYmFzZSA9IGJh
c2UubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFiYXNlKQorICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJO
dWxsIGRlcmVmZXJlbmNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVQdHIuYm94KGJhc2Uu
cGx1cyhvZmZzZXQpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcHJvZ3JhbS5hZGQo
bmF0aXZlRnVuYyk7CisgICAgICAgIH0KKyAgICB9Cit9CkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5odG1sCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw2IEBA
CiA8c2NyaXB0IHNyYz0iUmVmZXJlbmNlVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
VmFsdWUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkV4cHJlc3Npb24uanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9IlZpc2l0b3JCYXNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJS
ZXdyaXRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmlzaXRvci5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iQ3JlYXRlTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAgY2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewogICAgIGdldCBraW5kKCkgeyByZXR1cm4g
VHlwZTsgfQogICAgIGdldCBpc1B0cigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzQXJy
YXlSZWYoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGdldCBpc1JlZigpIHsgcmV0dXJuIHRoaXMu
aXNQdHIgfHwgdGhpcy5pc0FycmF5UmVmOyB9CiAgICAgZ2V0IGlzTnVtYmVyKCkgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICBnZXQgaXNJbnQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGdldCBpc0Zs
b2F0KCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTQxLDUgKzQyLDE5IEBAIGNsYXNzIFR5cGUgZXh0
ZW5kcyBOb2RlIHsKICAgICB9CiAgICAgCiAgICAgZ2V0IGluc3RhbnRpYXRlZFR5cGUoKSB7IHJl
dHVybiB0aGlzLnZpc2l0KG5ldyBJbnN0YW50aWF0ZUltbWVkaWF0ZXMoKSk7IH0KKyAgICAKKyAg
ICAvLyBIYXZlIHRvIGNhbGwgdGhlc2Ugb24gdGhlIHVuaWZ5Tm9kZS4KKyAgICBhcmd1bWVudEZv
ckFuZE92ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IE1h
a2VQdHJFeHByZXNzaW9uKG9yaWdpbiwgdmFsdWUpOworICAgIH0KKyAgICBhcmd1bWVudFR5cGVG
b3JBbmRPdmVybG9hZChvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFB0clR5cGUo
b3JpZ2luLCAidGhyZWFkIiwgdGhpcyk7CisgICAgfQorICAgIHJldHVyblR5cGVGcm9tQW5kT3Zl
cmxvYWQob3JpZ2luKQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2lu
Lm9yaWdpblN0cmluZywgIkJ5LXBvaW50ZXIgb3ZlcmxvYWQgcmV0dXJuZWQgbm9uLXBvaW50ZXIg
dHlwZTogIiArIHRoaXMpOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcwkobm9uZXhpc3Rl
bnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUGFyYW1ldGVyUmV3cml0
ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBUeXBlUGFy
YW1ldGVyUmV3cml0ZXIgeworICAgIHZpc2l0Q29uc3RleHByVHlwZVBhcmFtZXRlcihub2RlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDb25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUub3Jp
Z2luLCBub2RlLm5hbWUsIG5vZGUudHlwZS52aXNpdChuZXcgUmV3cml0ZXIoKSkpOworICAgIH0K
KyAgICAKKyAgICB2aXNpdFR5cGVWYXJpYWJsZShub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBUeXBlVmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUubmFtZSwgbm9kZS5wcm90b2NvbCk7
CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFy
aWFibGVUcmFja2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1R5cGVWYXJpYWJsZVRyYWNrZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlVHJhY2tlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFR5cGVWYXJpYWJsZVRyYWNrZXIgZXh0ZW5kcyBW
aXNpdG9yIHsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICB0aGlzLl9zZXQgPSBu
ZXcgU2V0KCk7CisgICAgfQorICAgIAorICAgIGdldCBzZXQoKSB7IHJldHVybiB0aGlzLl9zZXQ7
IH0KKyAgICAKKyAgICBfY29uc2lkZXIodGhpbmcpCisgICAgeworICAgICAgICBpZiAodGhpbmcu
aXNVbmlmaWFibGUpCisgICAgICAgICAgICB0aGlzLl9zZXQuYWRkKHRoaW5nKTsKKyAgICB9Cisg
ICAgCisgICAgdmlzaXRUeXBlUmVmKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9jb25zaWRl
cihub2RlLnR5cGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFZhcmlhYmxlUmVmKG5vZGUpCisg
ICAgeworICAgICAgICB0aGlzLl9jb25zaWRlcih0aGlzLnZhcmlhYmxlKTsKKyAgICB9Cit9CisK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhbHVlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhbHVlLmpzCShyZXZpc2lvbiAyMjIx
MjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYWx1ZS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjgsNSArMjgsMTIgQEAgY2xhc3MgVmFsdWUgZXh0ZW5kcyBOb2RlIHsKICAgICBn
ZXQga2luZCgpIHsgcmV0dXJuIFZhbHVlOyB9CiAgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1
cm4gZmFsc2U7IH0KICAgICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIAor
ICAgIGJlY29tZShvdGhlclZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gTk9URTogTWFrZSBzdXJl
IHRoYXQgSWRlbnRpdHlFeHByZXNzaW9uIGltcGxlbWVudHMgdW5pZnlOb2RlIGFuZCBhbGwgdGhh
dAorICAgICAgICB0aGlzLl9fcHJvdG9fXyA9IElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5cGU7
CisgICAgICAgIHRoaXMudGFyZ2V0ID0gb3RoZXJWYWx1ZTsKKyAgICB9CiB9CiAKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCShyZXZpc2lvbiAy
MjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZVJlZi5qcwko
d29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDkgQEAgY2xhc3MgVmFyaWFibGVSZWYgZXh0ZW5k
cyBFeHByZXNzaW9uIHsKICAgICAKICAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7
IH0KICAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxlLmlzQ29uc3Rl
eHByOyB9Ci0gICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFyaWFibGUudW5pZnlO
b2RlOyB9CisgICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFyaWFibGUudW5pZnlO
b2RlOyB9IC8vIFRoaXMgb25seSBtYWtlcyBzZW5zZSB3aGVuIHRoaXMgaXMgYSBjb25zdGV4cHIu
CiAgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGdldCBhZGRyZXNzU3Bh
Y2UoKSB7IHJldHVybiAidGhyZWFkIjsgfQotICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0
aGlzLnZhcmlhYmxlOyB9CiAgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjQsMTIgKzI0LDcgQEAKICAqLwogInVzZSBzdHJpY3QiOwogCi1jbGFzcyBWaXNpdG9yIGV4
dGVuZHMgVmlzaXRvckJhc2UgewotICAgIGNvbnN0cnVjdG9yKCkKLSAgICB7Ci0gICAgICAgIHN1
cGVyKCk7Ci0gICAgfQotICAgIAorY2xhc3MgVmlzaXRvciB7CiAgICAgdmlzaXRQcm9ncmFtKG5v
ZGUpCiAgICAgewogICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2Ygbm9kZS50b3BMZXZlbFN0
YXRlbWVudHMpCkBAIC03MCw2ICs2NSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9y
QmFzZSB7CiAgICAgewogICAgICAgICBub2RlLmZ1bmMudmlzaXQodGhpcyk7CiAgICAgICAgIHRo
aXMudmlzaXRGdW5jKG5vZGUpOworICAgICAgICBub2RlLmZ1bmMudmlzaXRJbXBsZW1lbnRhdGlv
bkRhdGEobm9kZS5pbXBsZW1lbnRhdGlvbkRhdGEsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2
aXNpdEJsb2NrKG5vZGUpCkBAIC0xMDAsOCArOTYsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMg
VmlzaXRvckJhc2UgewogICAgIHsKICAgICAgICAgZm9yIChsZXQgdHlwZUFyZ3VtZW50IG9mIG5v
ZGUudHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgIHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKTsK
LSAgICAgICAgaWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlz
KTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgIH0KICAgICAKICAg
ICB2aXNpdE5hdGl2ZVR5cGUobm9kZSkKQEAgLTEzNCw4ICsxMjksNyBAQCBjbGFzcyBWaXNpdG9y
IGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0VHlwZVZhcmlhYmxlKG5vZGUp
CiAgICAgewotICAgICAgICBpZiAobm9kZS5wcm90b2NvbCkKLSAgICAgICAgICAgIG5vZGUucHJv
dG9jb2wudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5wcm90b2NvbCwgdGhp
cyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0Q29uc3RleHByVHlwZVBhcmFtZXRlcihub2RlKQpA
QCAtMTc3LDggKzE3MSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAg
ICAgdmlzaXRWYXJpYWJsZURlY2wobm9kZSkKICAgICB7CiAgICAgICAgIG5vZGUudHlwZS52aXNp
dCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIpCi0gICAgICAgICAgICBub2Rl
LmluaXRpYWxpemVyLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5pdGlh
bGl6ZXIsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdEFzc2lnbm1lbnQobm9kZSkKQEAg
LTE4NywxNiArMTgwLDQxIEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAg
ICAgICAgIG5vZGUucmhzLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKKyAgICB2aXNpdFJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUubFZhbHVlLnZp
c2l0KHRoaXMpOworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAg
ICBub2RlLm5ld1ZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLm5ld1ZhbHVlRXhw
LnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLnJlc3VsdEV4cC52aXNpdCh0aGlzKTsKKyAgICB9
CisgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAg
ICAgIG5vZGUucHRyLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKKyAgICBfaGFuZGxlUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBOb2RlLnZpc2l0KG5vZGUu
YmFzZVR5cGUsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvckdldCwgdGhp
cyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlRm9yR2V0LCB0aGlzKTsKKyAg
ICAgICAgTm9kZS52aXNpdChub2RlLmNhbGxGb3JBbmQsIHRoaXMpOworICAgICAgICBOb2RlLnZp
c2l0KG5vZGUucmVzdWx0VHlwZUZvckFuZCwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9k
ZS5jYWxsRm9yU2V0LCB0aGlzKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXREb3RFeHByZXNzaW9u
KG5vZGUpCiAgICAgewogICAgICAgICBub2RlLnN0cnVjdC52aXNpdCh0aGlzKTsKLSAgICAgICAg
aWYgKG5vZGUuc3RydWN0VHlwZSkKLSAgICAgICAgICAgIG5vZGUuc3RydWN0VHlwZS52aXNpdCh0
aGlzKTsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUp
OworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAg
ICAgICAgbm9kZS5hcnJheS52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5pbmRleC52aXNpdCh0
aGlzKTsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUp
OwogICAgIH0KICAgICAKICAgICB2aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5vZGUpCkBAIC0yMDcs
OCArMjI1LDcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNp
dE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIG5vZGUubFZhbHVl
LnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5udW1FbGVtZW50cykKLSAgICAgICAgICAg
IG5vZGUubnVtRWxlbWVudHMudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5u
dW1FbGVtZW50cywgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0Q29udmVydFB0clRvQXJy
YXlSZWZFeHByZXNzaW9uKG5vZGUpCkBAIC0yMjQsOCArMjQxLDcgQEAgY2xhc3MgVmlzaXRvciBl
eHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB7CiAgICAgICAgIG5vZGUuY29uZGl0aW9uYWwudmlz
aXQodGhpcyk7CiAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5v
ZGUuZWxzZUJvZHkpCi0gICAgICAgICAgICBub2RlLmVsc2VCb2R5LnZpc2l0KHRoaXMpOworICAg
ICAgICBOb2RlLnZpc2l0KG5vZGUuZWxzZUJvZHksIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2
aXNpdFdoaWxlTG9vcChub2RlKQpAQCAtMjQyLDE5ICsyNTgsMTUgQEAgY2xhc3MgVmlzaXRvciBl
eHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2aXNpdEZvckxvb3Aobm9kZSkKICAgICB7
Ci0gICAgICAgIGlmIChub2RlLmluaXRpYWxpemF0aW9uKQotICAgICAgICAgICAgbm9kZS5pbml0
aWFsaXphdGlvbi52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUuY29uZGl0aW9uKQotICAg
ICAgICAgICAgbm9kZS5jb25kaXRpb24udmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLmlu
Y3JlbWVudCkKLSAgICAgICAgICAgIG5vZGUuaW5jcmVtZW50LnZpc2l0KHRoaXMpOworICAgICAg
ICBOb2RlLnZpc2l0KG5vZGUuaW5pdGlhbGl6YXRpb24sIHRoaXMpOworICAgICAgICBOb2RlLnZp
c2l0KG5vZGUuY29uZGl0aW9uLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmluY3Jl
bWVudCwgdGhpcyk7CiAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKTsKICAgICB9CiAKICAg
ICB2aXNpdFJldHVybihub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUudmFsdWUpCi0gICAg
ICAgICAgICBub2RlLnZhbHVlLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUu
dmFsdWUsIHRoaXMpOwogICAgIH0KIAogICAgIHZpc2l0Q29udGludWUobm9kZSkKQEAgLTI3Miw4
ICsyODQsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAg
IHZpc2l0R2VuZXJpY0xpdGVyYWxUeXBlKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS50
eXBlKQotICAgICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZp
c2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgICAgIG5vZGUucHJlZmVycmVkVHlwZS52aXNpdCh0
aGlzKTsKICAgICB9CiAgICAgCkBAIC0yODgsOCArMjk5LDcgQEAgY2xhc3MgVmlzaXRvciBleHRl
bmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2aXNpdE51bGxUeXBlKG5vZGUpCiAgICAgewot
ICAgICAgICBpZiAobm9kZS50eXBlKQotICAgICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMp
OworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgfQogICAgIAogICAg
IHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKQEAgLTMwMywxMCArMzEzLDkgQEAgY2xhc3MgVmlz
aXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgICAgIGZvciAobGV0IGFyZ3VtZW50
IG9mIGFjdHVhbFR5cGVBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgYXJndW1lbnQudmlzaXQo
dGhpcyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKLSAgICAgICAg
ICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUucmVzdWx0
VHlwZSkKLSAgICAgICAgICAgIG5vZGUucmVzdWx0VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAg
Tm9kZS52aXNpdChub2RlLm5hdGl2ZUZ1bmNJbnN0YW5jZSwgdGhpcyk7CisgICAgICAgIE5vZGUu
dmlzaXQobm9kZS5yZXR1cm5UeXBlLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJl
c3VsdFR5cGUsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdExvZ2ljYWxOb3Qobm9kZSkK
QEAgLTMxNiwyMSArMzI1LDE4IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7
CiAgICAgCiAgICAgdmlzaXRGdW5jdGlvbkxpa2VCbG9jayhub2RlKQogICAgIHsKLSAgICAgICAg
aWYgKG5vZGUucmV0dXJuVHlwZSkKLSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0
aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJldHVyblR5cGUsIHRoaXMpOwogICAgICAg
ICBmb3IgKGxldCBhcmd1bWVudCBvZiBub2RlLmFyZ3VtZW50TGlzdCkKICAgICAgICAgICAgIGFy
Z3VtZW50LnZpc2l0KHRoaXMpOwogICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2Ygbm9kZS5w
YXJhbWV0ZXJzKQogICAgICAgICAgICAgcGFyYW1ldGVyLnZpc2l0KHRoaXMpOwogICAgICAgICBu
b2RlLmJvZHkudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLnJlc3VsdFR5cGUpCi0gICAg
ICAgICAgICBub2RlLnJlc3VsdFR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQo
bm9kZS5yZXN1bHRUeXBlLCB0aGlzKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXRMZXRFeHByZXNz
aW9uKG5vZGUpCisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShub2RlKQogICAgIHsKLSAgICAg
ICAgbm9kZS5hcmd1bWVudC52aXNpdCh0aGlzKTsKLSAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRo
aXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgfQogfQogCklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yQmFzZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yQmFzZS5qcwkocmV2
aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvckJh
c2UuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIFZpc2l0b3JC
YXNlIHsKLSAgICBjb25zdHJ1Y3RvcigpCi0gICAgewotICAgICAgICB0aGlzLl9tZW1vVGFibGUg
PSBuZXcgTWFwKCk7Ci0gICAgfQotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321018</attachid>
            <date>2017-09-16 18:06:00 -0700</date>
            <delta_ts>2017-09-16 18:18:15 -0700</delta_ts>
            <desc>it passes so many tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>109539</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjksMTMgKzI5LDE0IEBAIGxvYWQoIlR5cGUuanMiKTsKIGxvYWQoIlJlZmVyZW5jZVR5cGUu
anMiKTsKIGxvYWQoIlZhbHVlLmpzIik7CiBsb2FkKCJFeHByZXNzaW9uLmpzIik7Ci1sb2FkKCJW
aXNpdG9yQmFzZS5qcyIpOwogbG9hZCgiUmV3cml0ZXIuanMiKTsKIGxvYWQoIlZpc2l0b3IuanMi
KTsKIGxvYWQoIkNyZWF0ZUxpdGVyYWwuanMiKTsKIGxvYWQoIkNyZWF0ZUxpdGVyYWxUeXBlLmpz
Iik7Citsb2FkKCJQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMiKTsKIAogbG9hZCgiQWRkcmVz
c1NwYWNlLmpzIik7Citsb2FkKCJBbm9ueW1vdXNWYXJpYWJsZS5qcyIpOwogbG9hZCgiQXJyYXlS
ZWZUeXBlLmpzIik7CiBsb2FkKCJBcnJheVR5cGUuanMiKTsKIGxvYWQoIkFzc2lnbm1lbnQuanMi
KTsKQEAgLTQzLDcgKzQ0LDYgQEAgbG9hZCgiQXV0b1dyYXBwZXIuanMiKTsKIGxvYWQoIkJsb2Nr
LmpzIik7CiBsb2FkKCJCb29sTGl0ZXJhbC5qcyIpOwogbG9hZCgiQnJlYWsuanMiKTsKLWxvYWQo
IkNhbGxBc3NpZ25tZW50LmpzIik7CiBsb2FkKCJDYWxsRXhwcmVzc2lvbi5qcyIpOwogbG9hZCgi
Q2FsbEZ1bmN0aW9uLmpzIik7CiBsb2FkKCJDaGVjay5qcyIpOwpAQCAtNzYsNyArNzYsOSBAQCBs
b2FkKCJGdW5jRGVmLmpzIik7CiBsb2FkKCJGdW5jSW5zdGFudGlhdG9yLmpzIik7CiBsb2FkKCJG
dW5jUGFyYW1ldGVyLmpzIik7CiBsb2FkKCJGdW5jdGlvbkxpa2VCbG9jay5qcyIpOworbG9hZCgi
SWRlbnRpdHlFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJJZlN0YXRlbWVudC5qcyIpOworbG9hZCgi
SW5kZXhFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJJbmZlclR5cGVzRm9yQ2FsbC5qcyIpOwogbG9h
ZCgiSW5saW5lLmpzIik7CiBsb2FkKCJJbmxpbmVyLmpzIik7CkBAIC04NCw3ICs4Niw2IEBAIGxv
YWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbC5qcyIpOwog
bG9hZCgiSW50TGl0ZXJhbFR5cGUuanMiKTsKIGxvYWQoIkludHJpbnNpY3MuanMiKTsKLWxvYWQo
IkxldEV4cHJlc3Npb24uanMiKTsKIGxvYWQoIkxleGVyLmpzIik7CiBsb2FkKCJMZXhlclRva2Vu
LmpzIik7CiBsb2FkKCJMaXRlcmFsVHlwZUNoZWNrZXIuanMiKTsKQEAgLTk4LDIwICs5OSwyNCBA
QCBsb2FkKCJOYXRpdmVGdW5jLmpzIik7CiBsb2FkKCJOYXRpdmVGdW5jSW5zdGFuY2UuanMiKTsK
IGxvYWQoIk5hdGl2ZVR5cGUuanMiKTsKIGxvYWQoIk5hdGl2ZVR5cGVJbnN0YW5jZS5qcyIpOwor
bG9hZCgiTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcyIpOwogbG9hZCgiTnVsbExpdGVyYWwu
anMiKTsKIGxvYWQoIk51bGxUeXBlLmpzIik7CiBsb2FkKCJPdmVybG9hZFJlc29sdXRpb25GYWls
dXJlLmpzIik7CiBsb2FkKCJQYXJzZS5qcyIpOwogbG9hZCgiUHJlcGFyZS5qcyIpOwogbG9hZCgi
UHJvZ3JhbS5qcyIpOworbG9hZCgiUHJvcGVydHlSZXNvbHZlci5qcyIpOwogbG9hZCgiUHJvdG9j
b2wuanMiKTsKIGxvYWQoIlByb3RvY29sRGVjbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xGdW5jRGVj
bC5qcyIpOwogbG9hZCgiUHJvdG9jb2xSZWYuanMiKTsKIGxvYWQoIlB0clR5cGUuanMiKTsKK2xv
YWQoIlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMiKTsKIGxvYWQoIlJlY3Vyc2lvbkNoZWNr
ZXIuanMiKTsKIGxvYWQoIlJlc29sdmVOYW1lcy5qcyIpOwogbG9hZCgiUmVzb2x2ZU92ZXJsb2Fk
SW1wbC5qcyIpOworbG9hZCgiUmVzb2x2ZVByb3BlcnRpZXMuanMiKTsKIGxvYWQoIlJlc29sdmVU
eXBlRGVmcy5qcyIpOwogbG9hZCgiUmV0dXJuLmpzIik7CiBsb2FkKCJSZXR1cm5DaGVja2VyLmpz
Iik7CkBAIC0xMjAsMTIgKzEyNSwxNCBAQCBsb2FkKCJTdGFuZGFyZExpYnJhcnkuanMiKTsKIGxv
YWQoIlN0cnVjdExheW91dEJ1aWxkZXIuanMiKTsKIGxvYWQoIlN0cnVjdFR5cGUuanMiKTsKIGxv
YWQoIlN1YnN0aXR1dGlvbi5qcyIpOwotbG9hZCgiU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMiKTsK
K2xvYWQoIlN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMiKTsKIGxvYWQoIlR5cGVEZWYuanMi
KTsKIGxvYWQoIlR5cGVEZWZSZXNvbHZlci5qcyIpOwogbG9hZCgiVHlwZU9yVmFyaWFibGVSZWYu
anMiKTsKK2xvYWQoIlR5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcyIpOwogbG9hZCgiVHlwZVJlZi5q
cyIpOwogbG9hZCgiVHlwZVZhcmlhYmxlLmpzIik7Citsb2FkKCJUeXBlVmFyaWFibGVUcmFja2Vy
LmpzIik7CiBsb2FkKCJUeXBlZFZhbHVlLmpzIik7CiBsb2FkKCJVaW50TGl0ZXJhbC5qcyIpOwog
bG9hZCgiVWludExpdGVyYWxUeXBlLmpzIik7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwkobm9uZXhpc3RlbnQpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2xldCBhbm9ueW1vdXNWYXJpYWJsZUNvdW50
ID0gMDsKKworY2xhc3MgQW5vbnltb3VzVmFyaWFibGUgZXh0ZW5kcyBWYWx1ZSB7CisgICAgLy8g
WW91IGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUncyB2YWx1ZSBiZWZvcmUgdXNlLCBi
dXQgdGhhdCBjb3VsZCBiZSBxdWl0ZSBsYXRlLgorICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgdHlw
ZSA9IG51bGwpCisgICAgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9vcmlnaW4g
PSBvcmlnaW47CisgICAgICAgIHRoaXMuaW5kZXggPSBhbm9ueW1vdXNWYXJpYWJsZUNvdW50Kys7
CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgfQorICAgIAorICAgIGdldCBvcmlnaW4o
KSB7IHJldHVybiB0aGlzLl9vcmlnaW47IH0KKyAgICBnZXQgbmFtZSgpIHsgcmV0dXJuICJhbm9u
VmFyPCIgKyB0aGlzLmluZGV4ICsgIj4iOyB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMubmFtZTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsMTUgQEAgY2xhc3MgQXJyYXlSZWZUeXBlIGV4dGVuZHMgUmVm
ZXJlbmNlVHlwZQogICAgIAogICAgIGdldCBpc0FycmF5UmVmKCkgeyByZXR1cm4gdHJ1ZTsgfQog
CisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChv
cmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKICAgICB0b1N0cmlu
ZygpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZSArICJbXSAiICsgdGhp
cy5hZGRyZXNzU3BhY2U7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJh
eVR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJy
YXlUeXBlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9BcnJheVR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTczLDUgKzczLDE2IEBAIGNsYXNz
IEFycmF5VHlwZSBleHRlbmRzIFR5cGUgewogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRoaXMu
ZWxlbWVudFR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5lbGVtZW50VHlwZSk7
CiAgICAgfQorCisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAg
IHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG9yaWdp
biwgdmFsdWUpOworICAgICAgICByZXN1bHQubnVtRWxlbWVudHMgPSB0aGlzLm51bUVsZW1lbnRz
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRP
dmVybG9hZChvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEFycmF5UmVmVHlwZShv
cmlnaW4sICJ0aHJlYWQiLCB0aGlzLmVsZW1lbnRUeXBlKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVudC5qcwkocmV2aXNpb24gMjIy
MTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVudC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDEyIEBACiAidXNlIHN0cmljdCI7CiAKIGNsYXNzIEFz
c2lnbm1lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGxo
cywgcmhzKQorICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMsIHR5cGUgPSBudWxsKQog
ICAgIHsKICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fbGhzID0gbGhzOwog
ICAgICAgICB0aGlzLl9yaHMgPSByaHM7CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICAg
fQogICAgIAogICAgIGdldCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsQXNzaWdubWVu
dC5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgQ2FsbEFzc2ln
bm1lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUs
IGxocywgcmhzKQotICAgIHsKLSAgICAgICAgc3VwZXIob3JpZ2luKTsKLSAgICAgICAgdGhpcy5f
bmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMuX2xocyA9IGxoczsKLSAgICAgICAgdGhpcy5fcmhz
ID0gcmhzOwotICAgICAgICB0aGlzLmZ1bmMgPSBudWxsOwotICAgIH0KLSAgICAKLSAgICBnZXQg
bmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KLSAgICBnZXQgbGhzKCkgeyByZXR1cm4gdGhp
cy5fbGhzOyB9Ci0gICAgZ2V0IHJocygpIHsgcmV0dXJuIHRoaXMuX3JoczsgfSAvLyBUaGlzIGNh
biBiZSBudWxsLgotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLmxocyArICIgIiArIHRoaXMubmFtZSArICh0aGlzLnJocyA/ICI9ICIgKyB0aGlzLnJocyA6
ICIiKTsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Nh
bGxFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0NhbGxFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTUgKzQyLDgyIEBAIGNsYXNzIENhbGxFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiAKICAg
ICBnZXQgaXNDYXN0KCkgeyByZXR1cm4gdGhpcy5faXNDYXN0OyB9CiAgICAgZ2V0IHJldHVyblR5
cGUoKSB7IHJldHVybiB0aGlzLl9yZXR1cm5UeXBlOyB9CiAgICAgCi0gICAgcmVzb2x2ZShvdmVy
bG9hZCkKKyAgICBzdGF0aWMgcmVzb2x2ZShvcmlnaW4sIHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBl
UGFyYW1ldGVyc0luU2NvcGUsIG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50TGlzdCwgYXJn
dW1lbnRUeXBlcywgcmV0dXJuVHlwZSkKKyAgICB7CisgICAgICAgIGxldCBjYWxsID0gbmV3IENh
bGxFeHByZXNzaW9uKG9yaWdpbiwgbmFtZSwgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRMaXN0KTsK
KyAgICAgICAgY2FsbC5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlczsKKyAgICAgICAgaWYg
KHJldHVyblR5cGUpCisgICAgICAgICAgICBjYWxsLnNldENhc3REYXRhKHJldHVyblR5cGUpOwor
ICAgICAgICByZXR1cm4ge2NhbGwsIHJlc3VsdFR5cGU6IGNhbGwucmVzb2x2ZShwb3NzaWJsZU92
ZXJsb2FkcywgdHlwZVBhcmFtZXRlcnNJblNjb3BlLCB0eXBlQXJndW1lbnRzKX07CisgICAgfQor
ICAgIAorICAgIHJlc29sdmUocG9zc2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29w
ZSwgdHlwZUFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGlmICghcG9zc2libGVPdmVybG9hZHMp
CisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJp
bmcsICJEaWQgbm90IGZpbmQgYW55IGZ1bmN0aW9ucyBuYW1lZCAiICsgdGhpcy5uYW1lKTsKKyAg
ICAgICAgCisgICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7CisgICAgICAgIGxldCBmYWlsdXJl
cyA9IFtdOworICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHR5cGVQYXJhbWV0ZXJz
SW5TY29wZSkgeworICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRlciBpbnN0YW5jZW9mIFR5
cGVWYXJpYWJsZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAo
IXR5cGVQYXJhbWV0ZXIucHJvdG9jb2wpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBsZXQgc2lnbmF0dXJlcyA9CisgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5w
cm90b2NvbC5wcm90b2NvbERlY2wuc2lnbmF0dXJlc0J5TmFtZVdpdGhUeXBlVmFyaWFibGUodGhp
cy5uYW1lLCB0eXBlUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGlmICghc2lnbmF0dXJlcykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG92ZXJsb2FkID0gcmVzb2x2ZU92
ZXJsb2FkSW1wbChzaWduYXR1cmVzLCB0aGlzLnR5cGVBcmd1bWVudHMsIHRoaXMuYXJndW1lbnRU
eXBlcywgdGhpcy5yZXR1cm5UeXBlKTsKKyAgICAgICAgICAgIGlmIChvdmVybG9hZC5mdW5jKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVy
bG9hZC5mYWlsdXJlcyk7CisgICAgICAgICAgICBvdmVybG9hZCA9IG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFvdmVybG9hZCkgeworICAgICAgICAgICAgb3ZlcmxvYWQgPSByZXNvbHZl
T3ZlcmxvYWRJbXBsKAorICAgICAgICAgICAgICAgIHBvc3NpYmxlT3ZlcmxvYWRzLCB0aGlzLnR5
cGVBcmd1bWVudHMsIHRoaXMuYXJndW1lbnRUeXBlcywgdGhpcy5yZXR1cm5UeXBlKTsKKyAgICAg
ICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykgeworICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1
c2goLi4ub3ZlcmxvYWQuZmFpbHVyZXMpOworICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0g
IkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCB3aXRoICI7CisgICAgICAgICAgICAgICAg
aWYgKHRoaXMudHlwZUFyZ3VtZW50cy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgKz0gInR5cGUgYXJndW1lbnRzIDwiICsgdGhpcy50eXBlQXJndW1lbnRzICsgIj4gYW5kICI7
CisgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiYXJndW1lbnQgdHlwZXMgKCIgKyB0aGlzLmFy
Z3VtZW50VHlwZXMgKyAiKSI7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMucmV0dXJuVHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5kIHJldHVybiB0eXBlICIgKyB0aGlz
LnJldHVyblR5cGU7CisgICAgICAgICAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lkZXJlZDpcbiIgKyBmYWlsdXJl
cy5qb2luKCJcbiIpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IodGhpcy5v
cmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgIGxldCB0eXBlQXJndW1lbnRUeXBlID0gdHlwZUFyZ3VtZW50c1tpXTsKKyAg
ICAgICAgICAgIGxldCB0eXBlUGFyYW1ldGVyID0gb3ZlcmxvYWQuZnVuYy50eXBlUGFyYW1ldGVy
c1tpXTsKKyAgICAgICAgICAgIGlmICghKHR5cGVQYXJhbWV0ZXIgaW5zdGFuY2VvZiBDb25zdGV4
cHJUeXBlUGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmICghdHlwZVBhcmFtZXRlci50eXBlLmVxdWFsc1dpdGhDb21taXQodHlwZUFyZ3VtZW50VHlw
ZSkpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdCAiICsgdGhpcy5vcmlnaW4u
b3JpZ2luU3RyaW5nICsgIiBjb25zdGV4cHIgdHlwZSBhcmd1bWVudCBhbmQgcGFyYW1ldGVyIHR5
cGVzIG5vdCBlcXVhbDogYXJndW1lbnQgPSAiICsgdHlwZUFyZ3VtZW50VHlwZSArICIsIHBhcmFt
ZXRlciA9ICIgKyB0eXBlUGFyYW1ldGVyLnR5cGUpOworICAgICAgICB9CisgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgdGhpcy5hcmd1bWVudFR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBsZXQgYXJndW1lbnRUeXBlID0gdGhpcy5hcmd1bWVudFR5cGVzW2ldOworICAgICAgICAg
ICAgbGV0IHBhcmFtZXRlclR5cGUgPSBvdmVybG9hZC5mdW5jLnBhcmFtZXRlcnNbaV0udHlwZS5z
dWJzdGl0dXRlVG9VbmlmaWNhdGlvbigKKyAgICAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5
cGVQYXJhbWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOworICAgICAgICAgICAg
bGV0IHJlc3VsdCA9IGFyZ3VtZW50VHlwZS5lcXVhbHNXaXRoQ29tbWl0KHBhcmFtZXRlclR5cGUp
OworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJBdCAiICsgdGhpcy5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIiBhcmd1bWVudCBhbmQgcGFy
YW1ldGVyIHR5cGVzIG5vdCBlcXVhbCBhZnRlciB0eXBlIGFyZ3VtZW50IHN1YnN0aXR1dGlvbjog
YXJndW1lbnQgPSAiICsgYXJndW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHBhcmFtZXRl
clR5cGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUb092ZXJsb2Fk
KG92ZXJsb2FkKTsKKyAgICB9CisgICAgCisgICAgcmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQp
CiAgICAgewogICAgICAgICB0aGlzLmZ1bmMgPSBvdmVybG9hZC5mdW5jOwogICAgICAgICB0aGlz
LmFjdHVhbFR5cGVBcmd1bWVudHMgPSBvdmVybG9hZC50eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJn
dW1lbnQgPT4gdHlwZUFyZ3VtZW50IGluc3RhbmNlb2YgVHlwZSA/IHR5cGVBcmd1bWVudC52aXNp
dChuZXcgQXV0b1dyYXBwZXIoKSkgOiB0eXBlQXJndW1lbnQpOwogICAgICAgICBsZXQgcmVzdWx0
ID0gb3ZlcmxvYWQuZnVuYy5yZXR1cm5UeXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAogICAg
ICAgICAgICAgb3ZlcmxvYWQuZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRp
b25Db250ZXh0KTsKLSAgICAgICAgdGhpcy5yZXN1bHRUeXBlID0gcmVzdWx0LnZpc2l0KG5ldyBB
dXRvV3JhcHBlcigpKTsKICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIk51bGwgcmV0dXJuIHR5cGUiKTsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnZp
c2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKKyAgICAgICAgdGhpcy5yZXN1bHRUeXBlID0gcmVzdWx0
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMs
MzAgKzQzLDE0IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICB2aXNpdFBy
b3RvY29sRGVjbChub2RlKQogICAgIHsKICAgICAgICAgZm9yIChsZXQgc2lnbmF0dXJlIG9mIG5v
ZGUuc2lnbmF0dXJlcykgewotICAgICAgICAgICAgbGV0IHNldCA9IG5ldyBTZXQoKTsKLSAgICAg
ICAgICAgIGZ1bmN0aW9uIGNvbnNpZGVyKHRoaW5nKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmICh0aGluZy5pc1VuaWZpYWJsZSkKLSAgICAgICAgICAgICAgICAgICAgc2V0LmFk
ZCh0aGluZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjbGFzcyBOb3RpY2VUeXBlVmFy
aWFibGUgZXh0ZW5kcyBWaXNpdG9yIHsKLSAgICAgICAgICAgICAgICB2aXNpdFR5cGVSZWYobm9k
ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyKG5vZGUu
dHlwZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZpc2l0VmFyaWFibGVS
ZWYobm9kZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVy
KG5vZGUudmFyaWFibGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGxldCBub3RpY2VUeXBlVmFyaWFibGUgPSBuZXcgTm90aWNlVHlwZVZhcmlhYmxlKCk7
CisgICAgICAgICAgICBsZXQgdHlwZVZhcmlhYmxlVHJhY2tlciA9IG5ldyBUeXBlVmFyaWFibGVU
cmFja2VyKCk7CiAgICAgICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXJUeXBlIG9mIHNpZ25hdHVy
ZS5wYXJhbWV0ZXJUeXBlcykKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJUeXBlLnZpc2l0KG5v
dGljZVR5cGVWYXJpYWJsZSk7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyVHlwZS52aXNpdCh0
eXBlVmFyaWFibGVUcmFja2VyKTsKICAgICAgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIg
b2Ygc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXQu
aGFzKHR5cGVQYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgIGlmICghdHlwZVZhcmlhYmxlVHJh
Y2tlci5zZXQuaGFzKHR5cGVQYXJhbWV0ZXIpKQogICAgICAgICAgICAgICAgICAgICB0aHJvdyBX
VHlwZUVycm9yKHR5cGVQYXJhbWV0ZXIub3JpZ2luLm9yaWdpblN0cmluZywgIlR5cGUgcGFyYW1l
dGVyIHRvIHByb3RvY29sIHNpZ25hdHVyZSBub3QgaW5mZXJyYWJsZSBmcm9tIHZhbHVlIHBhcmFt
ZXRlcnMiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghc2V0Lmhhcyhub2RlLnR5
cGVWYXJpYWJsZSkpCisgICAgICAgICAgICBpZiAoIXR5cGVWYXJpYWJsZVRyYWNrZXIuc2V0Lmhh
cyhub2RlLnR5cGVWYXJpYWJsZSkpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Ioc2lnbmF0dXJlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJQcm90b2NvbCdzIHR5cGUgdmFyaWFi
bGUgKCIgKyBub2RlLm5hbWUgKyAiKSBub3QgbWVudGlvbmVkIGluIHNpZ25hdHVyZTogIiArIHNp
Z25hdHVyZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDEsNiArMTI1LDMyIEBAIGNsYXNzIENo
ZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgcmV0dXJuIGxoc1R5cGU7CiAgICAgfQog
ICAgIAorICAgIHZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gbm9kZS50YXJnZXQudmlzaXQodGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0UmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLmxW
YWx1ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZywgIkxIUyBvZiByZWFkLW1vZGlmeS13cml0ZSBpcyBub3QgYW4gTFZh
bHVlOiAiICsgbm9kZS5sVmFsZSk7CisgICAgICAgIGxldCBsaHNUeXBlID0gbm9kZS5sVmFsdWUu
dmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUub2xkVmFsdWVWYXIudHlwZSA9IGxoc1R5cGU7Cisg
ICAgICAgIG5vZGUubmV3VmFsdWVWYXIudHlwZSA9IGxoc1R5cGU7CisgICAgICAgIG5vZGUub2xk
VmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUubmV3VmFsdWVWYXIudmlzaXQodGhp
cyk7CisgICAgICAgIGxldCBuZXdWYWx1ZVR5cGUgPSBub2RlLm5ld1ZhbHVlRXhwLnZpc2l0KHRo
aXMpOworICAgICAgICBpZiAoIWxoc1R5cGUuZXF1YWxzV2l0aENvbW1pdChuZXdWYWx1ZVR5cGUp
KQorICAgICAgICAgICAgcmV0dXJuIG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0
cmluZywgIlR5cGUgbWlzbWF0Y2ggaW4gcmVhZC1tb2RpZnktd3JpdGU6ICIgKyBsaHNUeXBlICsg
IiB2ZXJzdXMgIiArIG5ld1ZhbHVlVHlwZSk7CisgICAgICAgIHJldHVybiBub2RlLnJlc3VsdEV4
cC52aXNpdCh0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShu
b2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLnR5cGUpCisgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkFub255bW91cyB2YXJpYWJsZSBtdXN0IGtub3cgdHlwZSBiZWZvcmUgZmlyc3Qg
YXBwZWFyYW5jZSIpOworICAgIH0KKyAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lv
bihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHR5cGUgPSBub2RlLnB0ci52aXNpdCh0aGlzKS51
bmlmeU5vZGU7CkBAIC0xNjUsNyArMTc1LDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0
b3IgewogICAgIHsKICAgICAgICAgbGV0IGVsZW1lbnRUeXBlID0gbm9kZS5sVmFsdWUudmlzaXQo
dGhpcykudW5pZnlOb2RlOwogICAgICAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBQdHJU
eXBlKSB7Ci0gICAgICAgICAgICBub2RlLmJlY29tZUNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVz
c2lvbigpOworICAgICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbnZlcnRQdHJUb0FycmF5UmVm
RXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUpKTsKICAgICAgICAgICAgIHJldHVy
biBuZXcgQXJyYXlSZWZUeXBlKG5vZGUub3JpZ2luLCBlbGVtZW50VHlwZS5hZGRyZXNzU3BhY2Us
IGVsZW1lbnRUeXBlLmVsZW1lbnRUeXBlKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4OSwz
NSArMTk5LDg3IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJTaG91bGQgbm90IGV4aXN0IHlldC4iKTsKICAgICB9CiAgICAgCi0gICAg
dmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgX2ZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nl
c3Mobm9kZSwgYmFzZVR5cGUsIGV4dHJhQXJncywgZXh0cmFBcmdUeXBlcykKICAgICB7Ci0gICAg
ICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcykudW5pZnlOb2RlOwot
ICAgICAgICAKLSAgICAgICAgbm9kZS5zdHJ1Y3RUeXBlID0gc3RydWN0VHlwZS52aXNpdChuZXcg
QXV0b1dyYXBwZXIoKSk7CisgICAgICAgIGJhc2VUeXBlID0gYmFzZVR5cGUudmlzaXQobmV3IEF1
dG9XcmFwcGVyKCkpCisgICAgICAgIG5vZGUuYmFzZVR5cGUgPSBiYXNlVHlwZTsKICAgICAgICAg
Ci0gICAgICAgIGxldCB1bmRlcmx5aW5nU3RydWN0ID0gc3RydWN0VHlwZTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikKLSAgICAgICAgICAgIHVu
ZGVybHlpbmdTdHJ1Y3QgPSB1bmRlcmx5aW5nU3RydWN0LnR5cGU7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoISh1bmRlcmx5aW5nU3RydWN0IGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAg
ICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJPcGVy
YW5kIHRvIGRvdCBleHByZXNzaW9uIGlzIG5vdCBhIHN0cnVjdCB0eXBlOiAiICsgc3RydWN0VHlw
ZSk7CisgICAgICAgIC8vIFN1Y2ggYSB0eXBlIG11c3QgZXhpc3QuIFRoaXMgbWF5IHRocm93IGlm
IGl0IGRvZXNuJ3QuCisgICAgICAgIGxldCB0eXBlRm9yQW5kID0gYmFzZVR5cGUuYXJndW1lbnRU
eXBlRm9yQW5kT3ZlcmxvYWQobm9kZS5vcmlnaW4pOworICAgICAgICBpZiAoIXR5cGVGb3JBbmQp
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlwZUZvckFuZCIpOwor
ICAgICAgICAKKyAgICAgICAgbGV0IGVycm9yRm9yR2V0OworICAgICAgICBsZXQgZXJyb3JGb3JB
bmQ7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IENh
bGxFeHByZXNzaW9uLnJlc29sdmUoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUu
cG9zc2libGVHZXRPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRl
cnMsCisgICAgICAgICAgICAgICAgbm9kZS5nZXRGdW5jTmFtZSwgW10sIFtub2RlLmJhc2UsIC4u
LmV4dHJhQXJnc10sIFtiYXNlVHlwZSwgLi4uZXh0cmFBcmdUeXBlc10sIG51bGwpOworICAgICAg
ICAgICAgbm9kZS5jYWxsRm9yR2V0ID0gcmVzdWx0LmNhbGw7CisgICAgICAgICAgICBub2RlLnJl
c3VsdFR5cGVGb3JHZXQgPSByZXN1bHQucmVzdWx0VHlwZTsKKyAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAg
ICAgICAgIHRocm93IGU7CisgICAgICAgICAgICBlcnJvckZvckdldCA9IGU7CisgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikgCi0g
ICAgICAgICAgICB1bmRlcmx5aW5nU3RydWN0ID0gdW5kZXJseWluZ1N0cnVjdC5pbnN0YW50aWF0
ZShzdHJ1Y3RUeXBlLnR5cGVBcmd1bWVudHMsICJzaGFsbG93Iik7CisgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICBsZXQgYmFzZUZvckFuZCA9IGJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3Zlcmxv
YWQobm9kZS5vcmlnaW4sIG5vZGUuYmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxl
dCByZXN1bHQgPSBDYWxsRXhwcmVzc2lvbi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUu
b3JpZ2luLCBub2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50
LnR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgIG5vZGUuYW5kRnVuY05hbWUsIFtdLCBb
YmFzZUZvckFuZCwgLi4uZXh0cmFBcmdzXSwgW3R5cGVGb3JBbmQsIC4uLmV4dHJhQXJnVHlwZXNd
LAorICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAgICAgbm9kZS5jYWxsRm9yQW5kID0g
cmVzdWx0LmNhbGw7CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JBbmQgPSByZXN1bHQu
cmVzdWx0VHlwZS51bmlmeU5vZGUucmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChub2RlLm9yaWdp
bik7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2Vv
ZiBXVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgZXJy
b3JGb3JBbmQgPSBlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGUucmVz
dWx0VHlwZUZvckdldCAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yQW5kKSB7CisgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcigKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsCisgICAgICAgICAgICAgICAgIkNhbm5vdCByZXNvbHZlIGFjY2VzczsgdHJpZWQgYnkt
dmFsdWU6XG4iICsKKyAgICAgICAgICAgICAgICBlcnJvckZvckdldC5tZXNzYWdlICsgIlxuIiAr
CisgICAgICAgICAgICAgICAgImFuZCB0cmllZCBieS1wb2ludGVyOlxuIiArCisgICAgICAgICAg
ICAgICAgZXJyb3JGb3JBbmQubWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChub2RlLnJlc3VsdFR5cGVGb3JHZXQgJiYgbm9kZS5yZXN1bHRUeXBlRm9yQW5kCisgICAg
ICAgICAgICAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yR2V0LmVxdWFscyhub2RlLnJlc3VsdFR5cGVG
b3JBbmQpKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3Jp
Z2luU3RyaW5nLCAiUmVzdWx0IHR5cGUgcmVzb2x2ZWQgYnktdmFsdWUgKCIgKyBub2RlLnJlc3Vs
dFR5cGVGb3JHZXQgKyAiKSBkb2VzIG5vdCBtYXRjaCByZXN1bHQgdHlwZSByZXNvbHZlZCBieS1w
b2ludGVyICgiICsgbm9kZS5yZXN1bHRUeXBlRm9yQW5kICsgIikiKTsKKyAgICAgICAgCisgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVzb2x2
ZSgKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZUdldE92ZXJsb2Fk
cywgdGhpcy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAg
ICBub2RlLnNldEZ1bmNOYW1lLCBbXSwgW25vZGUuYmFzZSwgLi4uZXh0cmFBcmdzLCBudWxsXSwg
W2Jhc2VUeXBlLCAuLi5leHRyYUFyZ1R5cGVzLCBub2RlLnJlc3VsdFR5cGVdLCBudWxsKTsKKyAg
ICAgICAgICAgIG5vZGUuY2FsbEZvclNldCA9IHJlc3VsdC5jYWxsOworICAgICAgICAgICAgaWYg
KCFyZXN1bHQucmVzdWx0VHlwZS5lcXVhbHMoYmFzZVR5cGUpKQorICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlJlc3VsdCB0eXBl
IG9mIHNldHRlciAiICsgcmVzdWx0LmNhbGwuZnVuYyArICIgaXMgbm90IHRoZSBiYXNlIHR5cGUg
IiArIGJhc2VUeXBlKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKCEo
ZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAg
ICAgICAgICBub2RlLmVycm9yRm9yU2V0ID0gZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgbGV0IGZpZWxkID0gdW5kZXJseWluZ1N0cnVjdC5maWVsZEJ5TmFtZShub2RlLmZpZWxkTmFt
ZSk7Ci0gICAgICAgIGlmICghZmllbGQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJv
cihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJGaWVsZCAiICsgbm9kZS5maWVsZE5hbWUgKyAi
IG5vdCBmb3VuZCBpbiAiICsgc3RydWN0VHlwZSk7Ci0gICAgICAgIHJldHVybiBmaWVsZC50eXBl
OworICAgICAgICByZXR1cm4gbm9kZS5yZXN1bHRUeXBlOwogICAgIH0KICAgICAKLSAgICB2aXNp
dExldEV4cHJlc3Npb24obm9kZSkKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7
Ci0gICAgICAgIG5vZGUudHlwZSA9IG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAg
IGlmICghbm9kZS50eXBlKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEaWQgbm90IGdl
dCB0eXBlIGZvciBub2RlOiAiICsgbm9kZS5hcmd1bWVudCk7Ci0gICAgICAgIHJldHVybiBub2Rl
LmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3Qu
dmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoVmlzaXRp
bmdQcm9wZXJ0eUFjY2Vzcyhub2RlLCBzdHJ1Y3RUeXBlLCBbXSwgW10pOworICAgIH0KKyAgICAK
KyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGFycmF5
VHlwZSA9IG5vZGUuYXJyYXkudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBsZXQgaW5k
ZXhUeXBlID0gbm9kZS5pbmRleC52aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0aGlzLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIGFycmF5VHlwZSwgW25v
ZGUuaW5kZXhdLCBbaW5kZXhUeXBlXSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0VmFyaWFibGVS
ZWYobm9kZSkKQEAgLTMyMiwxMCArMzg0LDEwIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNp
dG9yIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGV4cHJlc3Npb24udmlzaXQodGhpcyk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lv
bihub2RlKQogICAgIHsKLSAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGVzID0gbm9kZS50eXBl
QXJndW1lbnRzLm1hcCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKTsK
KyAgICAgICAgbGV0IHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVB
cmd1bWVudCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhpcykpOwogICAgICAgICBsZXQgYXJndW1l
bnRUeXBlcyA9IG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiB7CiAgICAgICAgICAg
ICBsZXQgbmV3QXJndW1lbnQgPSBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgICAgIGlm
ICghbmV3QXJndW1lbnQpCkBAIC0zMzMsNzcgKzM5NSwxMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVu
ZHMgVmlzaXRvciB7CiAgICAgICAgICAgICByZXR1cm4gbmV3QXJndW1lbnQudmlzaXQobmV3IEF1
dG9XcmFwcGVyKCkpOwogICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIC8vIEhlcmUgd2Ug
bmVlZCB0byBoYW5kbGUgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yJltdIGlzIGNhbGxlZCB3aXRo
IGEgdHlwZSB0aGF0IGlzbid0IHN1ZmZpY2llbnRseQotICAgICAgICAvLyByZWZlcmVuY2V5Lgot
ICAgICAgICBpZiAobm9kZS5uYW1lID09ICJvcGVyYXRvciZbXSIpIHsKLSAgICAgICAgICAgIGxl
dCBhcmdUeXBlID0gYXJndW1lbnRUeXBlc1swXS51bmlmeU5vZGU7Ci0gICAgICAgICAgICBpZiAo
YXJnVHlwZSBpbnN0YW5jZW9mIFB0clR5cGUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdU
eXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMg
bm90IHZhbGlkIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcmdUeXBlIGluc3Rh
bmNlb2YgQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0g
PSBuZXcgTWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5hcmd1bWVudExp
c3RbMF0pOwotICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdLm51bUVsZW1lbnRz
ID0gYXJnVHlwZS5udW1FbGVtZW50czsKLSAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBd
ID0gbmV3IEFycmF5UmVmVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ1R5cGUuZWxlbWVu
dFR5cGUpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghKGFyZ1R5cGUgaW5zdGFuY2VvZiBBcnJh
eVJlZlR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcg
TWFrZVB0ckV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0WzBdKTsKLSAg
ICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IFB0clR5cGUobm9kZS5vcmlnaW4s
ICJ0aHJlYWQiLCBhcmd1bWVudFR5cGVzWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKICAgICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlczsKICAg
ICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKICAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52
aXNpdCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7Ci0gICAg
ICAgIGxldCBmYWlsdXJlcyA9IFtdOwotICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9m
IHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGlm
ICghKHR5cGVQYXJhbWV0ZXIgaW5zdGFuY2VvZiBUeXBlVmFyaWFibGUpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnByb3RvY29sKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbGV0IHNpZ25hdHVyZXMgPQot
ICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIucHJvdG9jb2wucHJvdG9jb2xEZWNsLnNpZ25h
dHVyZXNCeU5hbWVXaXRoVHlwZVZhcmlhYmxlKG5vZGUubmFtZSwgdHlwZVBhcmFtZXRlcik7Ci0g
ICAgICAgICAgICBpZiAoIXNpZ25hdHVyZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgbm9k
ZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVyblR5cGUpOwotICAgICAg
ICAgICAgaWYgKG92ZXJsb2FkLmZ1bmMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBmYWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKLSAgICAgICAgICAgIG92
ZXJsb2FkID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW92ZXJsb2FkKSB7Ci0gICAg
ICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCi0gICAgICAgICAgICAgICAg
bm9kZS5wb3NzaWJsZU92ZXJsb2Fkcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVz
LCBub2RlLnJldHVyblR5cGUpOwotICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7Ci0g
ICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Ci0gICAg
ICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxs
IHdpdGggIjsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCkK
LSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyBub2Rl
LnR5cGVBcmd1bWVudHMgKyAiPiBhbmQgIjsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJh
cmd1bWVudCB0eXBlcyAoIiArIGFyZ3VtZW50VHlwZXMgKyAiKSI7Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUucmV0dXJuVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5k
IHJldHVybiB0eXBlICIgKyBub2RlLnJldHVyblR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKGZh
aWx1cmVzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29u
c2lkZXJlZDpcbiIgKyBmYWlsdXJlcy5qb2luKCJcbiIpCi0gICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1
bWVudFR5cGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgdHlwZUFyZ3VtZW50VHlw
ZSA9IHR5cGVBcmd1bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIg
PSBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKCEodHlw
ZVBhcmFtZXRlciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1
YWxzV2l0aENvbW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkF0ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0
eXBlIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIg
KyB0eXBlQXJndW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlw
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnRUeXBlID0gYXJndW1lbnRU
eXBlc1tpXTsKLSAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gb3ZlcmxvYWQuZnVuYy5w
YXJhbWV0ZXJzW2ldLnR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCi0gICAgICAgICAgICAg
ICAgb3ZlcmxvYWQuZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250
ZXh0KTsKLSAgICAgICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVudFR5cGUuZXF1YWxzV2l0aENv
bW1pdChwYXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyAr
ICIgYXJndW1lbnQgYW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0ZXIgdHlwZSBhcmd1
bWVudCBzdWJzdGl0dXRpb246IGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50VHlwZSArICIsIHBhcmFt
ZXRlciA9ICIgKyBwYXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm9k
ZS5yZXNvbHZlKG92ZXJsb2FkKTsKKworICAgICAgICBsZXQgcmVzdWx0ID0gbm9kZS5yZXNvbHZl
KG5vZGUucG9zc2libGVPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFt
ZXRlcnMsIHR5cGVBcmd1bWVudHMpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIH0K
IApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9u
LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9E
b3RFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KICJ1
c2Ugc3RyaWN0IjsKIAotY2xhc3MgRG90RXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewor
Y2xhc3MgRG90RXhwcmVzc2lvbiBleHRlbmRzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiB7CiAg
ICAgY29uc3RydWN0b3Iob3JpZ2luLCBzdHJ1Y3QsIGZpZWxkTmFtZSkKICAgICB7CiAgICAgICAg
IHN1cGVyKG9yaWdpbik7CkBAIC0zMiwxMSArMzIsMTYgQEAgY2xhc3MgRG90RXhwcmVzc2lvbiBl
eHRlbmRzIEV4cHJlc3Npb24gewogICAgICAgICB0aGlzLl9maWVsZE5hbWUgPSBmaWVsZE5hbWU7
CiAgICAgfQogICAgIAorICAgIGdldCBiYXNlKCkgeyByZXR1cm4gdGhpcy5zdHJ1Y3Q7IH0KICAg
ICBnZXQgc3RydWN0KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0OyB9CiAgICAgZ2V0IGZpZWxkTmFt
ZSgpIHsgcmV0dXJuIHRoaXMuX2ZpZWxkTmFtZTsgfQogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0
dXJuIHRoaXMuc3RydWN0LmlzTFZhbHVlOyB9CiAgICAgZ2V0IGFkZHJlc3NTcGFjZSgpIHsgcmV0
dXJuIHRoaXMuc3RydWN0LmFkZHJlc3NTcGFjZTsgfQogICAgIAorICAgIGdldCBnZXRGdW5jTmFt
ZSgpIHsgcmV0dXJuICJvcGVyYXRvci4iICsgdGhpcy5maWVsZE5hbWU7IH0KKyAgICBnZXQgYW5k
RnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0b3ImLiIgKyB0aGlzLmZpZWxkTmFtZTsgfQorICAg
IGdldCBzZXRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvci4iICsgdGhpcy5maWVsZE5hbWUg
KyAiPSI7IH0KKyAgICAKICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gIigi
ICsgdGhpcy5zdHJ1Y3QgKyAiLiIgKyB0aGlzLmZpZWxkTmFtZSArICIpIjsKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtNjAsMTIgKzYwLDE0IEBAIGNsYXNzIEVCdWZmZXIgewogICAgIGdldChpbmRleCkKICAgICB7
CiAgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5fYXJyYXkubGVuZ3RoKQot
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJvdXQgb2YgYm91bmRzIGJ1ZmZlciBhY2Nlc3Mi
KTsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiT3V0IG9mIGJvdW5kcyBidWZmZXIgYWNj
ZXNzIChidWZmZXIgPSAiICsgdGhpcyArICIsIGluZGV4ID0gIiArIGluZGV4ICsgIikiKTsKICAg
ICAgICAgcmV0dXJuIHRoaXMuX2FycmF5W2luZGV4XTsKICAgICB9CiAgICAgCiAgICAgc2V0KGlu
ZGV4LCB2YWx1ZSkKICAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhp
cy5fYXJyYXkubGVuZ3RoKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJvdXQgb2YgYm91
bmRzIGJ1ZmZlciBhY2Nlc3MgKGJ1ZmZlciA9ICIgKyB0aGlzICsgIiwgaW5kZXggPSAiICsgaW5k
ZXggKyAiKSIpOwogICAgICAgICB0aGlzLl9hcnJheVtpbmRleF0gPSB2YWx1ZTsKICAgICB9CiAg
ICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVp
bGRlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRUJ1ZmZlckJ1aWxkZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMSArMTA0LDkgQEAg
Y2xhc3MgRUJ1ZmZlckJ1aWxkZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgc3VwZXIudmlz
aXRMb2dpY2FsTm90KG5vZGUpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24o
bm9kZSkKKyAgICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewogICAgICAgICB0
aGlzLl9jcmVhdGVFUHRyRm9yTm9kZShub2RlKTsKLSAgICAgICAgbm9kZS5hcmd1bWVudC52aXNp
dCh0aGlzKTsKLSAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKICAg
ICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAt
MTAyLDYgKzEwMiwxMSBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgcmV0dXJuIHRhcmdldDsKICAgICB9CiAgICAgCisgICAgdmlzaXRJZGVudGl0eUV4cHJlc3Np
b24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlLnRhcmdldC52aXNpdCh0aGlzKTsK
KyAgICB9CisgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKICAgICB7
CiAgICAgICAgIGxldCBwdHIgPSBub2RlLnB0ci52aXNpdCh0aGlzKS5sb2FkVmFsdWUoKTsKQEAg
LTEyNSwxMiArMTMwLDYgQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7CiAgICAg
ICAgIHJldHVybiBub2RlLmVQdHIuYm94KG5ldyBFQXJyYXlSZWYobm9kZS5sVmFsdWUudmlzaXQo
dGhpcykubG9hZFZhbHVlKCksIDEpKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RFeHByZXNz
aW9uKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgc3RydWN0UHRyID0gbm9kZS5zdHJ1Y3Qudmlz
aXQodGhpcyk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3RQdHIucGx1cyhub2RlLmZpZWxkLm9mZnNl
dCk7Ci0gICAgfQotICAgIAogICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCiAgICAgewog
ICAgICAgICBsZXQgcmVzdWx0OwpAQCAtMjMxLDEwICsyMzAsOSBAQCBjbGFzcyBFdmFsdWF0b3Ig
ZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgQ29udGludWVFeGNlcHRpb247CiAgICAg
fQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0QW5vbnltb3Vz
VmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAgICAgIG5vZGUuZVB0ci5jb3B5RnJvbShub2RlLmFy
Z3VtZW50LnZpc2l0KHRoaXMpLCBub2RlLnR5cGUuc2l6ZSk7Ci0gICAgICAgIHJldHVybiBub2Rl
LmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUudHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1
ZShub2RlLmVQdHIuYnVmZmVyLCBub2RlLmVQdHIub2Zmc2V0KTsKICAgICB9CiAgICAgCiAgICAg
dmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRXhwcmVzc2lvbkZpbmRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw2ICs1NiwxNiBAQCBjbGFzcyBFeHByZXNzaW9uRmluZGVyIGV4dGVuZHMg
VmlzaXRvciB7CiAgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUpOwogICAgIH0KICAgICAKKyAg
ICB2aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRo
aXMuX2NhbGxiYWNrKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdElkZW50aXR5RXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CisgICAgfQor
ICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIHRoaXMu
X2NhbGxiYWNrKG5vZGUpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVu
Yy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpz
CShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5j
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMiBAQCBjbGFzcyBGdW5jIGV4dGVuZHMg
Tm9kZSB7CiAgICAgewogICAgICAgICBpZiAoIShvcmlnaW4gaW5zdGFuY2VvZiBMZXhlclRva2Vu
KSkKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIG9yaWdpbjogIiArIG9yaWdpbik7
CisgICAgICAgIGZvciAobGV0IHBhcmFtZXRlciBvZiBwYXJhbWV0ZXJzKSB7CisgICAgICAgICAg
ICBpZiAoIXBhcmFtZXRlcikKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwg
cGFyYW1ldGVyIik7CisgICAgICAgICAgICBpZiAoIXBhcmFtZXRlci50eXBlKQorICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBwYXJhbWV0ZXIgdHlwZSIpOworICAgICAgICB9
CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKICAgICAg
ICAgdGhpcy5fbmFtZSA9IG5hbWU7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9GdW5jSW5zdGFudGlhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDE2ICs3NSwxOSBAQCBjbGFzcyBGdW5jSW5zdGFudGlhdG9yIHsKICAgICAgICAg
ICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gcmVzb2x2ZU92ZXJsb2FkSW1wbChyZXN1bHQucG9z
c2libGVPdmVybG9hZHMsIHJlc3VsdC50eXBlQXJndW1lbnRzLCByZXN1bHQuYXJndW1lbnRUeXBl
cywgcmVzdWx0LnJldHVyblR5cGVGb3JPdmVybG9hZFJlc29sdXRpb24pOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMpCiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkNvdWxkIG5vdCByZXNvbHZlIHByb3RvY29sIHNpZ25hdHVyZSBmdW5jdGlv
biBjYWxsIGR1cmluZyBpbnN0YW50aWF0aW9uOiAiICsgcmVzdWx0LmZ1bmMgKyAob3ZlcmxvYWQu
ZmFpbHVyZXMubGVuZ3RoID8gIjsgdHJpZWQ6XG4iICsgb3ZlcmxvYWQuZmFpbHVyZXMuam9pbigi
XG4iKSA6ICIiKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKG92ZXJsb2Fk
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmVUb092ZXJsb2FkKG92ZXJsb2Fk
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdC5mdW5jLmlzTmF0aXZlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQubmF0
aXZlRnVuY0luc3RhbmNlID0gdGhpc0luc3RhbnRpYXRvci5nZXRVbmlxdWUocmVzdWx0LmZ1bmMs
IHJlc3VsdC5hY3R1YWxUeXBlQXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBsZXQgc3Vic3RpdHV0aW9uID0gbmV3IEluc3RhbnRpYXRpb25TdWJzdGl0dXRp
b24oZnVuYy50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7CiAgICAgICAgIAotICAgICAg
ICBjbGFzcyBJbnN0YW50aWF0ZSBleHRlbmRzIFZpc2l0b3JCYXNlIHsKKyAgICAgICAgY2xhc3Mg
SW5zdGFudGlhdGUgewogICAgICAgICAgICAgdmlzaXRGdW5jRGVmKGZ1bmMpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdW5jRGVmKApAQCAtMTAxLDcgKzEwNCw4
IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAgICAgICAgICAgICAgICAgICBmdW5jLAog
ICAgICAgICAgICAgICAgICAgICBmdW5jLnJldHVyblR5cGUudmlzaXQoc3Vic3RpdHV0aW9uKSwK
ICAgICAgICAgICAgICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFy
YW1ldGVyLnZpc2l0KHN1YnN0aXR1dGlvbikpLAotICAgICAgICAgICAgICAgICAgICBmdW5jLmlz
Q2FzdCk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaXNDYXN0LAorICAgICAgICAgICAgICAg
ICAgICBmdW5jLmluc3RhbnRpYXRlSW1wbGVtZW50YXRpb24oc3Vic3RpdHV0aW9uKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbGV0IHJlc3VsdGluZ0Z1bmMgPSBmdW5jLnZp
c2l0KG5ldyBJbnN0YW50aWF0ZSgpKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9JZGVudGl0eUV4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSWRlbnRpdHlFeHByZXNzaW9uLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgSWRlbnRpdHlFeHByZXNzaW9uIGV4
dGVuZHMgRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3IodGFyZ2V0KQorICAgIHsKKyAgICAg
ICAgc3VwZXIodGFyZ2V0Lm9yaWdpbik7CisgICAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldDsK
KyAgICB9CisgICAgCisgICAgZ2V0IHRhcmdldCgpIHsgcmV0dXJuIHRoaXMuX3RhcmdldDsgfQor
ICAgIAorICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlzLnRhcmdldC51bmlmeU5vZGU7
IH0KKyAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJldHVybiB0aGlzLnRhcmdldC5pc0NvbnN0ZXhw
cjsgfQorICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIHRoaXMudGFyZ2V0LmlzTFZhbHVlOyB9
CisgICAgZ2V0IGFkZHJlc3NTcGFjZSgpIHsgcmV0dXJuIHRoaXMudGFyZ2V0LmFkZHJlc3NTcGFj
ZTsgfQorICAgIAorICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiKCIgKyB0
aGlzLnRhcmdldCArICIpIjsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0luZGV4RXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9JbmRleEV4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgSW5kZXhFeHByZXNzaW9uIGV4dGVuZHMg
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIHsKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGFycmF5
LCBpbmRleCkKKyAgICB7CisgICAgICAgIHN1cGVyKG9yaWdpbik7CisgICAgICAgIHRoaXMuX2Fy
cmF5ID0gYXJyYXk7CisgICAgICAgIHRoaXMuX2luZGV4ID0gaW5kZXg7CisgICAgfQorICAgIAor
ICAgIGdldCBiYXNlKCkgeyByZXR1cm4gdGhpcy5hcnJheTsgfQorICAgIGdldCBhcnJheSgpIHsg
cmV0dXJuIHRoaXMuX2FycmF5OyB9CisgICAgZ2V0IGluZGV4KCkgeyByZXR1cm4gdGhpcy5faW5k
ZXg7IH0KKyAgICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0aGlzLmFycmF5LmlzTFZhbHVlOyB9
CisgICAgZ2V0IGFkZHJlc3NTcGFjZSgpIHsgcmV0dXJuIHRoaXMuYXJyYXkuYWRkcmVzc1NwYWNl
OyB9CisgICAgCisgICAgZ2V0IGdldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yW10iOyB9
CisgICAgZ2V0IGFuZEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yJltdIjsgfQorICAgIGdl
dCBzZXRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvcltdPSI7IH0KKworICAgIHRvU3RyaW5n
KCkKKyAgICB7CisgICAgICAgIHJldHVybiAiKCIgKyB0aGlzLmFycmF5ICsgIlsiICsgdGhpcy5p
bmRleCArICJdKSI7CisgICAgfQorfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvSW5mZXJUeXBlc0ZvckNhbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGZ1bmN0aW9uIGluZmVyVHlwZXNGb3JDYWxsKGZ1bmMs
IHR5cGVBcmcKICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldKQogICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJOdWxsIGFyZ3VtZW50IHR5cGUgYXQgaSA9ICIgKyBpKTsKICAgICAgICAg
aWYgKCFhcmd1bWVudFR5cGVzW2ldLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgZnVuYy5wYXJh
bWV0ZXJzW2ldLnR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3Zlcmxv
YWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAoaSArIDEpICsgIiAiICsg
KGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIgIiArIGZ1bmMucGFyYW1l
dGVyc1tpXS5uYW1lIDogIiIpICsgIiBkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVu
dFR5cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUgKyAiKSIp
fTsKKyAgICAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZh
aWx1cmUoZnVuYywgIkFyZ3VtZW50ICMiICsgKGkgKyAxKSArICIgIiArIChmdW5jLnBhcmFtZXRl
cnNbaV0ubmFtZSA/ICJmb3IgcGFyYW1ldGVyICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSAr
ICIgIiA6ICIiKSArICJkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVudFR5cGVzW2ld
ICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUgKyAiKSIpfTsKICAgICB9
CiAgICAgaWYgKHJldHVyblR5cGUgJiYgIXJldHVyblR5cGUudW5pZnkodW5pZmljYXRpb25Db250
ZXh0LCBmdW5jLnJldHVyblR5cGUpKQogICAgICAgICByZXR1cm4ge2ZhaWx1cmU6IG5ldyBPdmVy
bG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJSZXR1cm4gdHlwZSAiICsgZnVuYy5yZXR1cm5U
eXBlICsgIiBkb2VzIG5vdCBtYXRjaCAiICsgcmV0dXJuVHlwZSl9OwpJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0z
MiwyNCArMzIsMTUgQEAgY2xhc3MgSW5saW5lciBleHRlbmRzIFJld3JpdGVyIHsKICAgICAgICAg
dGhpcy5fdmlzaXRpbmcgPSB2aXNpdGluZzsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RFeHBy
ZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlzaXREb3RF
eHByZXNzaW9uKG5vZGUpOwotICAgICAgICByZXN1bHQuZmllbGQgPSByZXN1bHQuc3RydWN0VHlw
ZS51bmlmeU5vZGUuZmllbGRCeU5hbWUocmVzdWx0LmZpZWxkTmFtZSk7Ci0gICAgICAgIGlmIChy
ZXN1bHQuZmllbGQub2Zmc2V0ID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IlVuLWxhaWQtb3V0IGZpZWxkOiAiICsgcmVzdWx0LmZpZWxkICsgIiAoaW4gIiArIHJlc3VsdC5z
dHJ1Y3RUeXBlICsgIikiKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCiAg
ICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9
IHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7CisgICAgICAgIGlmIChyZXN1bHQubmF0
aXZlRnVuY0luc3RhbmNlKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgcmV0
dXJuIHRoaXMuX3Zpc2l0aW5nLmRvVmlzaXQobm9kZS5mdW5jLCAoKSA9PiB7CiAgICAgICAgICAg
ICBsZXQgZnVuYyA9IHRoaXMuX3Byb2dyYW0uZnVuY0luc3RhbnRpYXRvci5nZXRVbmlxdWUocmVz
dWx0LmZ1bmMsIHJlc3VsdC5hY3R1YWxUeXBlQXJndW1lbnRzKTsKLSAgICAgICAgICAgIGlmIChm
dW5jLmlzTmF0aXZlKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lm5hdGl2ZUZ1bmNJbnN0YW5j
ZSA9IGZ1bmM7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChmdW5jLmlzTmF0aXZlKQorICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiVW5leHBlY3RlZCBuYXRpdmUgZnVuYzogIiArIGZ1bmMpOwogICAgICAgICAgICAg
X2lubGluZUZ1bmN0aW9uKHRoaXMuX3Byb2dyYW0sIGZ1bmMsIHRoaXMuX3Zpc2l0aW5nKTsKICAg
ICAgICAgICAgIGxldCByZXN1bHRpbmdCbG9jayA9IG5ldyBGdW5jdGlvbkxpa2VCbG9jaygKICAg
ICAgICAgICAgICAgICByZXN1bHQub3JpZ2luLCBmdW5jLnJldHVyblR5cGUsIHJlc3VsdC5hcmd1
bWVudExpc3QsIGZ1bmMucGFyYW1ldGVycywgZnVuYy5ib2R5KTsKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5q
cwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFr
ZUFycmF5UmVmRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDYgQEAg
Y2xhc3MgTWFrZUFycmF5UmVmRXhwcmVzc2lvbiBleHRlbmRzIEV4cAogICAgIAogICAgIGdldCBs
VmFsdWUoKSB7IHJldHVybiB0aGlzLl9sVmFsdWU7IH0KICAgICAKLSAgICBiZWNvbWVDb252ZXJ0
UHRyVG9BcnJheVJlZkV4cHJlc3Npb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fX3Byb3RvX18g
PSBDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24ucHJvdG90eXBlOwotICAgIH0KLSAgICAK
ICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gIkAiICsgKHRoaXMubnVtRWxl
bWVudHMgPyAiPDwiICsgdGhpcy5udW1FbGVtZW50cyArICI+PiIgOiAiIikgKyAiKCIgKyB0aGlz
LmxWYWx1ZSArICIpIjsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVD
b250ZXh0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05h
bWVDb250ZXh0LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9OYW1lQ29udGV4dC5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQCBj
bGFzcyBOYW1lQ29udGV4dCB7CiAgICAgewogICAgICAgICB0aGlzLl9tYXAgPSBuZXcgTWFwKCk7
CiAgICAgICAgIHRoaXMuX3NldCA9IG5ldyBTZXQoKTsKLSAgICAgICAgdGhpcy5fZGVmaW5lZCA9
IG51bGw7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICB0
aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwogICAgICAgICB0aGlzLl9pbnRyaW5zaWNzID0gbnVs
bDsKQEAgLTYyLDcgKzYxLDcgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogICAgICAgICBpZiAoIXRo
aW5nLm5hbWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBpZiAodGhp
bmcuaXNOYXRpdmUpIHsKKyAgICAgICAgaWYgKHRoaW5nLmlzTmF0aXZlICYmICF0aGluZy5pbXBs
ZW1lbnRhdGlvbikgewogICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnRyaW5zaWNzKQogICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTmF0aXZlIGZ1bmN0aW9uIGluIGEgc2NvcGUgdGhh
dCBkb2VzIG5vdCByZWNvZ25pemUgaW50cmluc2ljcyIpOwogICAgICAgICAgICAgdGhpcy5faW50
cmluc2ljcy5hZGQodGhpbmcpOwpAQCAtMTE1LDM2ICsxMTQsMTEgQEAgY2xhc3MgTmFtZUNvbnRl
eHQgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAgICAgCi0gICAgaGFuZGxlRGVmaW5p
bmcoKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVmaW5lZCA9IG5ldyBTZXQoKTsKLSAgICB9Ci0g
ICAgCi0gICAgaXNEZWZpbmVkKHRoaW5nKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3NldC5o
YXModGhpbmcpKSB7Ci0gICAgICAgICAgICByZXR1cm4gIXRoaXMuX2RlZmluZWQKLSAgICAgICAg
ICAgICAgICB8fCB0aGlzLl9kZWZpbmVkLmhhcyh0aGluZyk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHRoaXMuX2RlbGVnYXRlICYmIHRoaXMuX2RlbGVnYXRlLmlzRGVmaW5lZCh0aGluZyk7
Ci0gICAgfQotICAgIAotICAgIGRlZmluZSh0aGluZykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Rl
ZmluZWQuYWRkKHRoaW5nKTsKLSAgICB9Ci0gICAgCi0gICAgZGVmaW5lQWxsKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2RlZmluZWQgPSBudWxsOwotICAgIH0KLSAgICAKICAgICBkb1N0YXRlbWVu
dChzdGF0ZW1lbnQsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRl
bWVudCA9IHN0YXRlbWVudDsKICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgdGhpcy5fY3Vy
cmVudFN0YXRlbWVudCA9IG51bGw7Ci0gICAgICAgIHRoaXMuZGVmaW5lKHN0YXRlbWVudCk7CiAg
ICAgfQogICAgIAogICAgIHJlY29nbml6ZUludHJpbnNpY3MoKQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwkocmV2aXNpb24gMjIyMTIzKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwyNyArMzAsMTUgQEAKIC8vIG1vcmUgY29udmVuaWVudCB0byBjaGVjayBo
ZXJlIHRoYW4gaW4gdGhlIENoZWNrZXIuIFRoaXMgdXN1YWxseSBpbnZvbHZlcyB0aGluZ3MgdGhh
dCBuZWVkIHRvIGJlCiAvLyBjaGVja2VkIGJlZm9yZSBUeXBlUmVmVG9UeXBlRGVmU2tpcHBlci4K
IGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewotICAgIC8vIEl0J3MgdG90YWxs
eSBPSyB0byBpbnN0YW50aWF0ZSB0aGlzIHdpdGggemVybyBhcmd1bWVudHMgKGkuZS4gcGFzc2lu
ZyB1bmRlZmluZWQgZm9yIGJvdGggb2YKLSAgICAvLyB0aGVtKSBpZiB5b3UncmUgY3JlYXRpbmcg
YSBOYW1lUmVzb2x2ZXIgdG8gdmlzaXQgYSBQcm9ncmFtLgogICAgIGNvbnN0cnVjdG9yKG5hbWVD
b250ZXh0KQogICAgIHsKICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5fbmFtZUNvbnRl
eHQgPSBuYW1lQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgdmlzaXRQcm9ncmFtKG5vZGUpCisK
KyAgICBkb1N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgewotICAgICAgICBsZXQgbmFtZUNvbnRl
eHQgPSBuZXcgTmFtZUNvbnRleHQodGhpcy5fbmFtZUNvbnRleHQpOwotICAgICAgICBuYW1lQ29u
dGV4dC5wcm9ncmFtID0gbm9kZTsKLSAgICAgICAgbmFtZUNvbnRleHQucmVjb2duaXplSW50cmlu
c2ljcygpOwotICAgICAgICBuYW1lQ29udGV4dC5oYW5kbGVEZWZpbmluZygpOwotICAgICAgICBu
b2RlLmludHJpbnNpY3MgPSBuYW1lQ29udGV4dC5pbnRyaW5zaWNzOwotICAgICAgICBmb3IgKGxl
dCBzdGF0ZW1lbnQgb2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCi0gICAgICAgICAgICBuYW1l
Q29udGV4dC5hZGQoc3RhdGVtZW50KTsKLSAgICAgICAgbGV0IGNoZWNrZXIgPSBuZXcgTmFtZVJl
c29sdmVyKG5hbWVDb250ZXh0KTsKLSAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUu
dG9wTGV2ZWxTdGF0ZW1lbnRzKQotICAgICAgICAgICAgbmFtZUNvbnRleHQuZG9TdGF0ZW1lbnQo
c3RhdGVtZW50LCAoKSA9PiBzdGF0ZW1lbnQudmlzaXQoY2hlY2tlcikpOwotICAgICAgICBub2Rl
Lmdsb2JhbE5hbWVDb250ZXh0ID0gbmFtZUNvbnRleHQ7CisgICAgICAgIHRoaXMuX25hbWVDb250
ZXh0LmRvU3RhdGVtZW50KHN0YXRlbWVudCwgKCkgPT4gc3RhdGVtZW50LnZpc2l0KHRoaXMpKTsK
ICAgICB9CiAgICAgCiAgICAgX3Zpc2l0VHlwZVBhcmFtZXRlcnNBbmRCdWlsZE5hbWVDb250ZXh0
KG5vZGUpCkBAIC0yMDcsOCArMTk1LDYgQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlz
aXRvciB7CiAgICAgICAgICAgICB0eXBlID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KFR5cGUsIG5v
ZGUubmFtZSk7CiAgICAgICAgICAgICBpZiAoIXR5cGUpCiAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ291bGQgbm90IGZpbmQg
dHlwZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKLSAgICAgICAgICAgIGlmICghdGhpcy5fbmFtZUNv
bnRleHQuaXNEZWZpbmVkKHR5cGUpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVy
cm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIklsbGVnYWwgZm9yd2FyZCB1c2Ugb2YgdHlw
ZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKICAgICAgICAgICAgIG5vZGUudHlwZSA9IHR5cGU7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC0yMzAsNyArMjE2LDYgQEAgY2xhc3MgTmFtZVJlc29sdmVy
IGV4dGVuZHMgVmlzaXRvciB7CiAgICAgdmlzaXRSZWZlcmVuY2VUeXBlKG5vZGUpCiAgICAgewog
ICAgICAgICBsZXQgbmFtZUNvbnRleHQgPSBuZXcgTmFtZUNvbnRleHQodGhpcy5fbmFtZUNvbnRl
eHQpOwotICAgICAgICBuYW1lQ29udGV4dC5kZWZpbmVBbGwoKTsKICAgICAgICAgbm9kZS5lbGVt
ZW50VHlwZS52aXNpdChuZXcgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KSk7CiAgICAgfQogICAg
IApAQCAtMjU4LDYgKzI0MywyOCBAQCBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9y
IHsKICAgICAgICAgc3VwZXIudmlzaXRSZXR1cm4obm9kZSk7CiAgICAgfQogICAgIAorICAgIF9o
YW5kbGVQcm9wZXJ0eUFjY2Vzcyhub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5wb3NzaWJsZUdl
dE92ZXJsb2FkcyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLmdldEZ1bmNOYW1l
KTsKKyAgICAgICAgbm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkcyA9IHRoaXMuX25hbWVDb250ZXh0
LmdldChGdW5jLCBub2RlLnNldEZ1bmNOYW1lKTsKKyAgICAgICAgbm9kZS5wb3NzaWJsZUFuZE92
ZXJsb2FkcyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLmFuZEZ1bmNOYW1lKTsK
KworICAgICAgICBpZiAoIW5vZGUucG9zc2libGVHZXRPdmVybG9hZHMgJiYgIW5vZGUucG9zc2li
bGVBbmRPdmVybG9hZHMpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9y
aWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmluZCBlaXRoZXIgIiArIG5vZGUuZ2V0RnVuY05h
bWUgKyAiIG9yICIgKyBub2RlLmFuZEZ1bmNOYW1lKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRE
b3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFj
Y2Vzcyhub2RlKTsKKyAgICAgICAgc3VwZXIudmlzaXREb3RFeHByZXNzaW9uKG5vZGUpOworICAg
IH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAg
dGhpcy5faGFuZGxlUHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAgICAgIHN1cGVyLnZpc2l0SW5k
ZXhFeHByZXNzaW9uKG5vZGUpOworICAgIH0KKyAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9u
KG5vZGUpCiAgICAgewogICAgICAgICB0aGlzLl9yZXNvbHZlVHlwZUFyZ3VtZW50cyhub2RlLnR5
cGVBcmd1bWVudHMpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZl
RnVuYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRp
dmVGdW5jLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9OYXRpdmVGdW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMCBAQCBjbGFz
cyBOYXRpdmVGdW5jIGV4dGVuZHMgRnVuYyB7CiAgICAgewogICAgICAgICBzdXBlcihvcmlnaW4s
IG5hbWUsIHJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpOwog
ICAgICAgICB0aGlzLmlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgICAgICB0aGlzLmltcGxlbWVu
dGF0aW9uID0gbnVsbDsKKyAgICAgICAgdGhpcy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uID0g
KHN1YnN0aXR1dGlvbikgPT4ge307CisgICAgICAgIHRoaXMudmlzaXRJbXBsZW1lbnRhdGlvbkRh
dGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiBudWxsOworICAgICAgICB0aGlz
LmRpZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVudGF0aW9uRGF0
YSA9PiBudWxsOwogICAgIH0KICAgICAKICAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiB0cnVl
OyB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFu
Y2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZl
RnVuY0luc3RhbmNlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0
ICsyNSwxNiBAQAogInVzZSBzdHJpY3QiOwogCiBjbGFzcyBOYXRpdmVGdW5jSW5zdGFuY2UgZXh0
ZW5kcyBGdW5jIHsKLSAgICBjb25zdHJ1Y3RvcihmdW5jLCByZXR1cm5UeXBlLCBwYXJhbWV0ZXJz
LCBpc0Nhc3QpCisgICAgY29uc3RydWN0b3IoZnVuYywgcmV0dXJuVHlwZSwgcGFyYW1ldGVycywg
aXNDYXN0LCBpbXBsZW1lbnRhdGlvbkRhdGEpCiAgICAgewogICAgICAgICBzdXBlcihmdW5jLm9y
aWdpbiwgZnVuYy5uYW1lLCByZXR1cm5UeXBlLCBbXSwgcGFyYW1ldGVycywgaXNDYXN0KTsKICAg
ICAgICAgdGhpcy5fZnVuYyA9IGZ1bmM7CisgICAgICAgIHRoaXMuX2ltcGxlbWVudGF0aW9uRGF0
YSA9IGltcGxlbWVudGF0aW9uRGF0YTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGZ1bmMoKSB7IHJl
dHVybiB0aGlzLl9mdW5jOyB9CiAgICAgZ2V0IGlzTmF0aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIGdldCBpbXBsZW1lbnRhdGlvbkRhdGEoKSB7IHJldHVybiB0aGlzLl9pbXBsZW1lbnRhdGlv
bkRhdGE7IH0KIAogICAgIHRvRGVjbFN0cmluZygpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMywxNyBA
QCBjbGFzcyBOb2RlIHsKICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gdmlzaXRGdW5jLmNhbGwo
dmlzaXRvciwgdGhpcyk7CiAgICAgICAgIGlmICgicmV0dXJuVmFsdWUiIGluIHZpc2l0b3IpCiAg
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHZpc2l0b3IucmV0dXJuVmFsdWU7CisgICAgICAgIAog
ICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyB2aXNp
dChub2RlLCB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBOb2Rl
KQorICAgICAgICAgICAgcmV0dXJuIG5vZGUudmlzaXQodmlzaXRvcik7CisgICAgICAgIHJldHVy
biBub2RlOworICAgIH0KKyAgICAKICAgICB1bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVy
KQogICAgIHsKICAgICAgICAgaWYgKCFvdGhlcikKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL05vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcwko
bm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQ
cm9wZXJ0eVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Y2xhc3MgTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlciBleHRlbmRzIFJld3JpdGVyIHsKKyAgICB2
aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdXBlci52aXNp
dERvdEV4cHJlc3Npb24obm9kZSkucmV3cml0ZUFmdGVyQ2xvbmluZygpOworICAgIH0KKyAgICAK
KyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1
cGVyLnZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpLnJld3JpdGVBZnRlckNsb25pbmcoKTsKKyAg
ICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCShyZXZp
c2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMzM3LDkgKzMzNyw5IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0s
IG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgfSk7CiAgICAgfQogICAgIAotICAgIGZ1bmN0aW9u
IGVtaXRJbmNyZW1lbnQodG9rZW4sIHB0ciwgZXh0cmFBcmcpCisgICAgZnVuY3Rpb24gZW1pdElu
Y3JlbWVudCh0b2tlbiwgb2xkLCBleHRyYUFyZykKICAgICB7Ci0gICAgICAgIGxldCBhcmdzID0g
W25ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAocHRyKSld
OworICAgICAgICBsZXQgYXJncyA9IFtvbGRdOwogICAgICAgICBpZiAoZXh0cmFBcmcpCiAgICAg
ICAgICAgICBhcmdzLnB1c2goZXh0cmFBcmcpOwogICAgICAgICAKQEAgLTM1MCwyNyArMzUwLDE1
IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgaWYg
KG5hbWUgPT0gIm9wZXJhdG9yIikKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxp
ZCBuYW1lOiAiICsgbmFtZSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1l
bnQoCi0gICAgICAgICAgICB0b2tlbiwKLSAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5jZUV4cHJl
c3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAocHRyKSksCi0gICAgICAgICAgICBuZXcgQ2Fs
bEV4cHJlc3Npb24odG9rZW4sIG5hbWUsIFtdLCBhcmdzKSk7CisgICAgICAgIHJldHVybiBuZXcg
Q2FsbEV4cHJlc3Npb24odG9rZW4sIG5hbWUsIFtdLCBhcmdzKTsKICAgICB9CiAgICAgCiAgICAg
ZnVuY3Rpb24gZmluaXNoUGFyc2luZ1Bvc3RJbmNyZW1lbnQodG9rZW4sIGxlZnQpCiAgICAgewot
ICAgICAgICBsZXQgcHRyID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4pOwotICAgICAgICBwdHIu
YXJndW1lbnQgPSBuZXcgTWFrZVB0ckV4cHJlc3Npb24odG9rZW4sIGxlZnQpOwotICAgICAgICAK
LSAgICAgICAgbGV0IG9sZFZhbHVlID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4pOwotICAgICAg
ICBvbGRWYWx1ZS5hcmd1bWVudCA9IG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odG9rZW4sIFZh
cmlhYmxlUmVmLndyYXAocHRyKSk7Ci0gICAgICAgIAotICAgICAgICBwdHIuYm9keSA9IG9sZFZh
bHVlOwotICAgICAgICAKLSAgICAgICAgb2xkVmFsdWUuYm9keSA9IG5ldyBDb21tYUV4cHJlc3Np
b24odG9rZW4sIFsKLSAgICAgICAgICAgIGVtaXRJbmNyZW1lbnQodG9rZW4sIHB0ciksCi0gICAg
ICAgICAgICBWYXJpYWJsZVJlZi53cmFwKG9sZFZhbHVlKQotICAgICAgICBdKTsKLSAgICAgICAg
cmV0dXJuIHB0cjsKKyAgICAgICAgbGV0IHJlYWRNb2RpZnlXcml0ZSA9IG5ldyBSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uKHRva2VuLCBsZWZ0KTsKKyAgICAgICAgcmVhZE1vZGlmeVdyaXRlLm5l
d1ZhbHVlRXhwID0gZW1pdEluY3JlbWVudCh0b2tlbiwgcmVhZE1vZGlmeVdyaXRlLm9sZFZhbHVl
UmVmKCkpOworICAgICAgICByZWFkTW9kaWZ5V3JpdGUucmVzdWx0RXhwID0gcmVhZE1vZGlmeVdy
aXRlLm9sZFZhbHVlUmVmKCk7CisgICAgICAgIHJldHVybiByZWFkTW9kaWZ5V3JpdGU7CiAgICAg
fQogICAgIAogICAgIGZ1bmN0aW9uIHBhcnNlUG9zc2libGVTdWZmaXgoKQpAQCAtMzk1LDkgKzM4
Myw3IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAg
ICAgIGNhc2UgIlsiOiB7CiAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gcGFyc2VFeHByZXNz
aW9uKCk7CiAgICAgICAgICAgICAgICAgY29uc3VtZSgiXSIpOwotICAgICAgICAgICAgICAgIGxl
ZnQgPSBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKAotICAgICAgICAgICAgICAgICAgICB0b2tl
biwKLSAgICAgICAgICAgICAgICAgICAgbmV3IENhbGxFeHByZXNzaW9uKHRva2VuLCAib3BlcmF0
b3ImW10iLCBbXSwgW2xlZnQsIGluZGV4XSkpOworICAgICAgICAgICAgICAgIGxlZnQgPSBuZXcg
SW5kZXhFeHByZXNzaW9uKHRva2VuLCBsZWZ0LCBpbmRleCk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNDA5LDEzICszOTUs
MTAgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgIAogICAg
IGZ1bmN0aW9uIGZpbmlzaFBhcnNpbmdQcmVJbmNyZW1lbnQodG9rZW4sIGxlZnQsIGV4dHJhQXJn
KQogICAgIHsKLSAgICAgICAgbGV0IHB0ciA9IG5ldyBMZXRFeHByZXNzaW9uKHRva2VuKTsKLSAg
ICAgICAgcHRyLmFyZ3VtZW50ID0gbmV3IE1ha2VQdHJFeHByZXNzaW9uKHRva2VuLCBsZWZ0KTsK
LSAgICAgICAgcHRyLmJvZHkgPSBuZXcgQ29tbWFFeHByZXNzaW9uKHRva2VuLCBbCi0gICAgICAg
ICAgICBlbWl0SW5jcmVtZW50KHRva2VuLCBwdHIsIGV4dHJhQXJnKSwKLSAgICAgICAgICAgIG5l
dyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAocHRyKSkKLSAg
ICAgICAgXSk7Ci0gICAgICAgIHJldHVybiBwdHI7CisgICAgICAgIGxldCByZWFkTW9kaWZ5V3Jp
dGUgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7CisgICAgICAg
IHJlYWRNb2RpZnlXcml0ZS5uZXdWYWx1ZUV4cCA9IGVtaXRJbmNyZW1lbnQodG9rZW4sIHJlYWRN
b2RpZnlXcml0ZS5vbGRWYWx1ZVJlZigpLCBleHRyYUFyZyk7CisgICAgICAgIHJlYWRNb2RpZnlX
cml0ZS5yZXN1bHRFeHAgPSByZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVSZWYoKTsKKyAgICAgICAg
cmV0dXJuIHJlYWRNb2RpZnlXcml0ZTsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24gcGFyc2VQ
cmVJbmNyZW1lbnQoKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFy
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJl
LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Q
cmVwYXJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMjIgQEAKIGZ1bmN0aW9uIHBy
ZXBhcmUob3JpZ2luLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KQogewogICAgIGxldCBwcm9ncmFt
ID0gbmV3IFByb2dyYW0oKTsKKyAgICAKICAgICBwYXJzZShwcm9ncmFtLCAiL2ludGVybmFsL3N0
ZGxpYiIsICJuYXRpdmUiLCAyNywgc3RhbmRhcmRMaWJyYXJ5KTsKICAgICBwYXJzZShwcm9ncmFt
LCBvcmlnaW4sICJ1c2VyIiwgbGluZU51bWJlck9mZnNldCwgdGV4dCk7Ci0gICAgcmVzb2x2ZU5h
bWVzKHByb2dyYW0pOwotICAgIHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKTsKKyAgICAKKyAgICBs
ZXQgbmFtZVJlc29sdmVyID0gY3JlYXRlTmFtZVJlc29sdmVyKHByb2dyYW0pOworICAgIHJlc29s
dmVOYW1lc0luVHlwZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNvbHZlTmFtZXNJ
blByb3RvY29scyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIHJlc29sdmVUeXBlRGVmc0lu
VHlwZXMocHJvZ3JhbSk7CisgICAgcmVzb2x2ZVR5cGVEZWZzSW5Qcm90b2NvbHMocHJvZ3JhbSk7
CisgICAgc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycyhwcm9ncmFtKTsKKyAgICByZXNvbHZlTmFt
ZXNJbkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIHJlc29sdmVUeXBlRGVm
c0luRnVuY3Rpb25zKHByb2dyYW0pOworICAgIAogICAgIGZsYXR0ZW5Qcm90b2NvbEV4dGVuZHMo
cHJvZ3JhbSk7CiAgICAgY2hlY2socHJvZ3JhbSk7CisgICAgcmVzb2x2ZVByb3BlcnRpZXMocHJv
Z3JhbSk7CiAgICAgY2hlY2tMaXRlcmFsVHlwZXMocHJvZ3JhbSk7CiAgICAgY2hlY2tQcm9ncmFt
V3JhcHBlZChwcm9ncmFtKTsKICAgICBjaGVja1JldHVybnMocHJvZ3JhbSk7CkBAIC00MSw2ICs1
MSw3IEBAIGZ1bmN0aW9uIHByZXBhcmUob3JpZ2luLCBsaW5lTnVtYmVyT2Zmc2UKICAgICBjaGVj
a1JlY3Vyc2lvbihwcm9ncmFtKTsKICAgICBjaGVja1Byb2dyYW1XcmFwcGVkKHByb2dyYW0pOwog
ICAgIGlubGluZShwcm9ncmFtKTsKKyAgICAKICAgICByZXR1cm4gcHJvZ3JhbTsKIH0KIApJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9ncmFtLmpzCShyZXZpc2lvbiAyMjIx
MjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9ncmFtLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMywxMCBAQCBjbGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAg
ICAgICAgIHRoaXMuX3R5cGVzID0gbmV3IE1hcCgpOwogICAgICAgICB0aGlzLl9wcm90b2NvbHMg
PSBuZXcgTWFwKCk7CiAgICAgICAgIHRoaXMuX2Z1bmNJbnN0YW50aWF0b3IgPSBuZXcgRnVuY0lu
c3RhbnRpYXRvcih0aGlzKTsKKyAgICAgICAgdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQgPSBuZXcg
TmFtZUNvbnRleHQoKTsKKyAgICAgICAgdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQucHJvZ3JhbSA9
IHRoaXM7CisgICAgICAgIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0LnJlY29nbml6ZUludHJpbnNp
Y3MoKTsKKyAgICAgICAgdGhpcy5pbnRyaW5zaWNzID0gdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQu
aW50cmluc2ljczsKICAgICB9CiAgICAgCiAgICAgZ2V0IHRvcExldmVsU3RhdGVtZW50cygpIHsg
cmV0dXJuIHRoaXMuX3RvcExldmVsU3RhdGVtZW50czsgfQpAQCAtNDAsNiArNDQsNyBAQCBjbGFz
cyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAgICAgZ2V0IHR5cGVzKCkgeyByZXR1cm4gdGhpcy5f
dHlwZXM7IH0KICAgICBnZXQgcHJvdG9jb2xzKCkgeyByZXR1cm4gdGhpcy5fcHJvdG9jb2xzOyB9
CiAgICAgZ2V0IGZ1bmNJbnN0YW50aWF0b3IoKSB7IHJldHVybiB0aGlzLl9mdW5jSW5zdGFudGlh
dG9yOyB9CisgICAgZ2V0IGdsb2JhbE5hbWVDb250ZXh0KCkgeyByZXR1cm4gdGhpcy5fZ2xvYmFs
TmFtZUNvbnRleHQ7IH0KICAgICAKICAgICBhZGQoc3RhdGVtZW50KQogICAgIHsKQEAgLTUyLDEw
ICs1NywxMSBAQCBjbGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAgICAgICAgIH0gZWxzZSBp
ZiAoc3RhdGVtZW50IGluc3RhbmNlb2YgVHlwZSkKICAgICAgICAgICAgIHRoaXMuX3R5cGVzLnNl
dChzdGF0ZW1lbnQubmFtZSwgc3RhdGVtZW50KTsKICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50
IGluc3RhbmNlb2YgUHJvdG9jb2wpCi0gICAgICAgICAgICB0aGlzLl9wcm90b2NvbHMuc2V0KHN0
YXRlbWVudC5hZGQsIHN0YXRlbWVudCk7CisgICAgICAgICAgICB0aGlzLl9wcm90b2NvbHMuc2V0
KHN0YXRlbWVudC5uYW1lLCBzdGF0ZW1lbnQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIlN0YXRlbWVudCBpcyBub3QgYSBmdW5jdGlvbiBvciB0eXBlOiAiICsg
c3RhdGVtZW50KTsKICAgICAgICAgdGhpcy5fdG9wTGV2ZWxTdGF0ZW1lbnRzLnB1c2goc3RhdGVt
ZW50KTsKKyAgICAgICAgdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQuYWRkKHN0YXRlbWVudCk7CiAg
ICAgfQogICAgIAogICAgIHRvU3RyaW5nKCkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3Mg
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CisgICAgZ2V0IHJl
c3VsdFR5cGUoKSB7IHJldHVybiB0aGlzLnJlc3VsdFR5cGVGb3JHZXQgPyB0aGlzLnJlc3VsdFR5
cGVGb3JHZXQgOiB0aGlzLnJlc3VsdFR5cGVGb3JBbmQ7IH0KKyAgICAKKyAgICByZXdyaXRlQWZ0
ZXJDbG9uaW5nKCkKKyAgICB7CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIG5vZGUuYmFzZS5p
c0xWYWx1ZSB3aWxsIG9ubHkgcmV0dXJuIHRydWUgaWYgaXQncyBwb3NzaWJsZSB0byBnZXQgYSBw
b2ludGVyIHRvIGl0LAorICAgICAgICAvLyBzaW5jZSB3ZSB3aWxsIG5vIGxvbmdlciBzZWUgYW55
IERvdEV4cHJlc3Npb25zIG9yIEluZGV4RXhwcmVzc2lvbnMuIEFsc28sIG5vZGUgaXMgYSBuZXds
eSBjcmVhdGVkCisgICAgICAgIC8vIG5vZGUgYW5kIGV2ZXJ5dGhpbmcgYmVuZWF0aCBpdCBpcyBu
ZXdseSBjcmVhdGVkLCBzbyB3ZSBjYW4gZWRpdCBpdCBpbi1wbGFjZS4KKyAgICAgICAgCisgICAg
ICAgIGlmICgodGhpcy5iYXNlLmlzTFZhbHVlIHx8IHRoaXMuYmFzZVR5cGUuaXNSZWYpICYmIHRo
aXMuY2FsbEZvckFuZCkKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGVyZWZlcmVuY2VFeHByZXNz
aW9uKHRoaXMub3JpZ2luLCB0aGlzLmNhbGxGb3JBbmQpOworICAgICAgICAKKyAgICAgICAgaWYg
KHRoaXMuY2FsbEZvckdldCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGxGb3JHZXQ7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIXRoaXMuY2FsbEZvckFuZCkKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiOiBQcm9wZXJ0eSBhY2Nlc3Mg
d2l0aG91dCBnZXR0ZXIgYW5kIGFuZGVyOiAiICsgdGhpcyk7CisgICAgICAgIAorICAgICAgICBs
ZXQgYW5vblZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZSh0aGlzLm9yaWdpbiwgdGhpcy5iYXNl
VHlwZSk7CisgICAgICAgIHRoaXMuY2FsbEZvckFuZC5hcmd1bWVudExpc3RbMF0gPSB0aGlzLmJh
c2VUeXBlLnVuaWZ5Tm9kZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKHRoaXMub3JpZ2luLCBWYXJp
YWJsZVJlZi53cmFwKGFub25WYXIpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Np
b24odGhpcy5vcmlnaW4sIFsKKyAgICAgICAgICAgIGFub25WYXIsCisgICAgICAgICAgICBuZXcg
QXNzaWdubWVudCh0aGlzLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChhbm9uVmFyKSwgdGhpcy5i
YXNlLCB0aGlzLmJhc2VUeXBlKSwKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvckFuZAorICAgICAg
ICBdKTsKKyAgICB9CisgICAgCisgICAgdXBkYXRlQ2FsbHNBZnRlckNoYW5naW5nQmFzZSgpCisg
ICAgeworICAgICAgICBpZiAodGhpcy5jYWxsRm9yR2V0KQorICAgICAgICAgICAgdGhpcy5jYWxs
Rm9yR2V0WzBdID0gdGhpcy5iYXNlOworICAgICAgICBpZiAodGhpcy5jYWxsRm9yQW5kKQorICAg
ICAgICAgICAgdGhpcy5jYWxsRm9yQW5kWzBdID0gdGhpcy5iYXNlVHlwZS5hcmd1bWVudEZvckFu
ZE92ZXJsb2FkKHRoaXMub3JpZ2luLCB0aGlzLmJhc2UpOworICAgICAgICBpZiAodGhpcy5jYWxs
Rm9yU2V0KQorICAgICAgICAgICAgdGhpcy5jYWxsRm9yU2V0WzBdID0gdGhpcy5iYXNlOworICAg
IH0KKyAgICAKKyAgICBlbWl0R2V0KGJhc2UpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0g
dGhpcy52aXNpdChuZXcgUmV3cml0ZXIoKSk7CisgICAgICAgIHJlc3VsdC5iYXNlID0gYmFzZTsK
KyAgICAgICAgcmVzdWx0LnVwZGF0ZUNhbGxzQWZ0ZXJDaGFuZ2luZ0Jhc2UoKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZXdyaXRlQWZ0ZXJDbG9uaW5nKCk7CisgICAgfQorICAgIAorICAgIGVt
aXRTZXQoYmFzZSwgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXJlc3VsdC5jYWxsRm9yU2V0
KQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3Ry
aW5nLCAiQ2Fubm90IGVtaXQgc2V0IGJlY2F1c2U6ICIgKyB0aGlzLmVycm9yRm9yU2V0Lm1lc3Nh
Z2UpOworICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy52aXNpdChuZXcgUmV3cml0ZXIoKSk7Cisg
ICAgICAgIHJlc3VsdC5iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0LnVwZGF0ZUNhbGxzQWZ0
ZXJDaGFuZ2luZ0Jhc2UoKTsKKyAgICAgICAgcmVzdWx0LmNhbGxGb3JTZXRbMl0gPSB2YWx1ZTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5jYWxsRm9yU2V0OworICAgIH0KK30KKwpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlSZXNvbHZlci5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eVJlc29sdmVyLmpzCShu
b25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5UmVz
b2x2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgUHJv
cGVydHlSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgeworICAgIF92aXNpdFByb3BlcnR5QWNjZXNz
KG5vZGUpCisgICAgeworICAgICAgICBsZXQgbmV3Tm9kZSA9IG5vZGUudmlzaXQobmV3IE5vcm1h
bFVzZVByb3BlcnR5UmVzb2x2ZXIoKSk7CisgICAgICAgIG5ld05vZGUudmlzaXQodGhpcyk7Cisg
ICAgICAgIG5vZGUuYmVjb21lKG5ld05vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdERvdEV4
cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Zpc2l0UHJvcGVydHlBY2Nlc3Mo
bm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAg
eworICAgICAgICB0aGlzLl92aXNpdFByb3BlcnR5QWNjZXNzKG5vZGUpOworICAgIH0KKyAgICAK
KyAgICBfaGFuZGxlUmVhZE1vZGlmeVdyaXRlKG5vZGUpCisgICAgeworICAgICAgICBsZXQgdHlw
ZSA9IG5vZGUub2xkVmFsdWVWYXIudHlwZTsKKyAgICAgICAgbGV0IHNpbXBsZUxIUyA9IG5vZGUu
bFZhbHVlLnZpc2l0KG5ldyBOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyKCkpOworICAgICAgICBp
ZiAoc2ltcGxlTEhTLmlzTFZhbHVlKSB7CisgICAgICAgICAgICBsZXQgcHRyVHlwZSA9IG5ldyBQ
dHJUeXBlKG5vZGUub3JpZ2luLCBzaW1wbGVMSFMuYWRkcmVzc1NwYWNlLCB0eXBlKTsKKyAgICAg
ICAgICAgIGxldCBwdHJWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIHB0
clR5cGUpOworICAgICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbW1hRXhwcmVzc2lvbihub2Rl
Lm9yaWdpbiwgWworICAgICAgICAgICAgICAgIG5vZGUub2xkVmFsdWVWYXIsIG5vZGUubmV3VmFs
dWVWYXIsIHB0clZhciwKKyAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVudCgKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAocHRyVmFyKSwKKyAgICAg
ICAgICAgICAgICAgICAgbmV3IE1ha2VQdHJFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBzaW1wbGVM
SFMpLCBwdHJUeXBlKSwKKyAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVudCgKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUub2xkVmFsdWVSZWYoKSwKKyAgICAgICAgICAg
ICAgICAgICAgbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgVmFyaWFibGVS
ZWYud3JhcChwdHJWYXIpKSwgdHlwZSksCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQo
bm9kZS5vcmlnaW4sIG5vZGUubmV3VmFsdWVSZWYoKSwgbm9kZS5uZXdWYWx1ZUV4cCwgdHlwZSks
CisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQoCisgICAgICAgICAgICAgICAgICAgIG5v
ZGUub3JpZ2luLCBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBWYXJpYWJs
ZVJlZi53cmFwKHB0clZhcikpLAorICAgICAgICAgICAgICAgICAgICBub2RlLm5ld1ZhbHVlUmVm
KCksIHR5cGUpLAorICAgICAgICAgICAgICAgIG5vZGUucmVzdWx0RXhwCisgICAgICAgICAgICBd
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxl
dCByZXN1bHQgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9k
ZS5sVmFsdWUuYmFzZSk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1ZUV4cCA9IG5ldyBDb21tYUV4
cHJlc3Npb24obm9kZS5vcmlnaW4sIFsKKyAgICAgICAgICAgIG5vZGUub2xkVmFsdWVWYXIsIG5v
ZGUubmV3VmFsdWVWYXIsCisgICAgICAgICAgICBuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwg
bm9kZS5vbGRWYWx1ZVJlZigpLCBub2RlLmxWYWx1ZS5lbWl0R2V0KHJlc3VsdC5vbGRWYWx1ZVJl
ZigpKSwgdHlwZSksCisgICAgICAgICAgICBuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwgbm9k
ZS5uZXdWYWx1ZVJlZigpLCBub2RlLm5ld1ZhbHVlRXhwLCB0eXBlKSwKKyAgICAgICAgICAgIG5v
ZGUubFZhbHVlLmVtaXRTZXQocmVzdWx0Lm9sZFZhbHVlUmVmKCksIG5vZGUubmV3VmFsdWVSZWYo
KSkKKyAgICAgICAgXSk7CisgICAgICAgIHJlc3VsdC5yZXN1bHRFeHAgPSBub2RlLm5ld1ZhbHVl
UmVmKCk7CisgICAgICAgIHRoaXMuX2hhbmRsZVJlYWRNb2RpZnlXcml0ZShyZXN1bHQpOworICAg
ICAgICBub2RlLmJlY29tZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUubmV3VmFsdWVFeHAu
dmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUucmVzdWx0RXhwLnZpc2l0KHRoaXMpOworICAgICAg
ICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUobm9kZSk7CisgICAgfQorICAgIAorICAgIHZp
c2l0QXNzaWdubWVudChub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5yaHMudmlzaXQodGhpcyk7
CisgICAgICAgIAorICAgICAgICBsZXQgc2ltcGxlTEhTID0gbm9kZS5saHMudmlzaXQobmV3IE5v
cm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIoKSk7CisgICAgICAgIGlmIChzaW1wbGVMSFMuaXNMVmFs
dWUpIHsKKyAgICAgICAgICAgIG5vZGUubGhzLmJlY29tZShzaW1wbGVMSFMpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIShub2RlLmxocyBp
bnN0YW5jZW9mIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikpCisgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbGhzIHR5cGU6ICIgKyBub2RlLmxocy5jb25zdHJ1Y3Rvci5u
YW1lKTsKKyAgICAgICAgCisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5saHMuYmFzZSk7CisgICAgICAgIGxldCByZXN1
bHRWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUudHlwZSk7Cisg
ICAgICAgIHJlc3VsdC5uZXdWYWx1ZUV4cCA9IG5ldyBDb21tYUV4cHJlc3Npb24oWworICAgICAg
ICAgICAgcmVzdWx0VmFyLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4s
IFZhcmlhYmxlUmVmLndyYXAocmVzdWx0VmFyKSwgbm9kZS5yaHMsIG5vZGUudHlwZSksCisgICAg
ICAgICAgICBub2RlLmxocy5lbWl0U2V0KHJlc3VsdC5vbGRWYWx1ZVJlZigpLCBWYXJpYWJsZVJl
Zi53cmFwKHJlc3VsdFZhcikpCisgICAgICAgIF0pOworICAgICAgICByZXN1bHQucmVzdWx0RXhw
ID0gVmFyaWFibGVSZWYud3JhcChyZXN1bHRWYXIpOworICAgICAgICB0aGlzLl9oYW5kbGVSZWFk
TW9kaWZ5V3JpdGUocmVzdWx0KTsKKyAgICAgICAgbm9kZS5iZWNvbWUocmVzdWx0KTsKKyAgICB9
CisgICAgCisgICAgdmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAg
c3VwZXIudmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgaWYgKCFub2RlLmxW
YWx1ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZywgIk5vdCBhbiBsdmFsdWU6ICIgKyBub2RlLmxWYWx1ZSk7CisgICAg
fQorICAgIAorICAgIHZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAg
ICAgICAgc3VwZXIudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpOworICAgICAgICBp
ZiAoIW5vZGUubFZhbHVlLmlzTFZhbHVlKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTm90IGFuIGx2YWx1ZTogIiArIG5vZGUubFZh
bHVlKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0
clR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRy
VHlwZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUHRyVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTkgQEAgY2xhc3MgUHRy
VHlwZSBleHRlbmRzIFJlZmVyZW5jZVR5cGUgewogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50
VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9
CiAgICAgCisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsK
KyAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIlBvaW50
ZXIgc3Vic2NyaXB0IGlzIG5vdCB2YWxpZCIpOworICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JB
bmRPdmVybG9hZChvcmlnaW4sIHR5cGUpCisgICAgeworICAgICAgICB0aHJvdyBuZXcgV1R5cGVF
cnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMgbm90IHZhbGlk
Iik7CisgICAgfQorICAgIHJldHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQob3JpZ2luKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGU7CisgICAgfQorCiAgICAgdG9TdHJpbmco
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUgKyAiXiAiICsgdGhpcy5h
ZGRyZXNzU3BhY2U7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKKyAgICBjb25zdHJ1Y3Rvcihvcmln
aW4sIGxWYWx1ZSkKKyAgICB7CisgICAgICAgIHN1cGVyKG9yaWdpbik7CisgICAgICAgIHRoaXMu
X2xWYWx1ZSA9IGxWYWx1ZTsKKyAgICAgICAgdGhpcy5vbGRWYWx1ZVZhciA9IG5ldyBBbm9ueW1v
dXNWYXJpYWJsZShvcmlnaW4pOworICAgICAgICB0aGlzLm5ld1ZhbHVlVmFyID0gbmV3IEFub255
bW91c1ZhcmlhYmxlKG9yaWdpbik7CisgICAgICAgIHRoaXMubmV3VmFsdWVFeHAgPSBudWxsOwor
ICAgICAgICB0aGlzLnJlc3VsdEV4cCA9IG51bGw7CisgICAgfQorICAgIAorICAgIGdldCBsVmFs
dWUoKSB7IHJldHVybiB0aGlzLl9sVmFsdWU7IH0KKyAgICAKKyAgICBvbGRWYWx1ZVJlZigpIHsg
cmV0dXJuIFZhcmlhYmxlUmVmLndyYXAodGhpcy5vbGRWYWx1ZVZhcik7IH0KKyAgICBuZXdWYWx1
ZVJlZigpIHsgcmV0dXJuIFZhcmlhYmxlUmVmLndyYXAodGhpcy5uZXdWYWx1ZVZhcik7IH0KKyAg
ICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIlJNVygiICsgdGhpcy5s
VmFsdWUgKyAiLCAiICsgdGhpcy5vbGRWYWx1ZVZhciArICIsICIgKyB0aGlzLm5ld1ZhbHVlVmFy
ICsgIiwgIiArIHRoaXMubmV3VmFsdWVFeHAgKyAiLCAiICsgdGhpcy5yZXN1bHRFeHAgKyAiKSI7
CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZl
TmFtZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVz
b2x2ZU5hbWVzLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9SZXNvbHZlTmFtZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDI4IEBA
CiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotZnVuY3Rpb24gcmVzb2x2ZU5hbWVzKHByb2dyYW0pCitm
dW5jdGlvbiBjcmVhdGVOYW1lUmVzb2x2ZXIocHJvZ3JhbSkKIHsKLSAgICBwcm9ncmFtLnZpc2l0
KG5ldyBOYW1lUmVzb2x2ZXIoKSk7CisgICAgcmV0dXJuIG5ldyBOYW1lUmVzb2x2ZXIocHJvZ3Jh
bS5nbG9iYWxOYW1lQ29udGV4dCk7CiB9CisKK2Z1bmN0aW9uIHJlc29sdmVOYW1lc0luVHlwZXMo
cHJvZ3JhbSwgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50
eXBlcy52YWx1ZXMoKSkKKyAgICAgICAgbmFtZVJlc29sdmVyLmRvU3RhdGVtZW50KHR5cGUpOwor
fQorCitmdW5jdGlvbiByZXNvbHZlTmFtZXNJblByb3RvY29scyhwcm9ncmFtLCBuYW1lUmVzb2x2
ZXIpCit7CisgICAgZm9yIChsZXQgcHJvdG9jb2wgb2YgcHJvZ3JhbS5wcm90b2NvbHMudmFsdWVz
KCkpCisgICAgICAgIG5hbWVSZXNvbHZlci5kb1N0YXRlbWVudChwcm90b2NvbCk7Cit9CisKK2Z1
bmN0aW9uIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKHByb2dyYW0sIG5hbWVSZXNvbHZlcikKK3sK
KyAgICBmb3IgKGxldCBmdW5jcyBvZiBwcm9ncmFtLmZ1bmN0aW9ucy52YWx1ZXMoKSkgeworICAg
ICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmNzKQorICAgICAgICAgICAgbmFtZVJlc29sdmVyLmRv
U3RhdGVtZW50KGZ1bmMpOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlT3ZlcmxvYWRJbXBsLmpzCShyZXZpc2lvbiAyMjIx
MjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlT3ZlcmxvYWRJbXBs
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAKIGZ1bmN0aW9uIHJlc29sdmVP
dmVybG9hZEltcGwoZnVuY3Rpb25zLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCByZXR1
cm5UeXBlKQogeworICAgIGlmICghZnVuY3Rpb25zKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
Ik51bGwgZnVuY3Rpb25zOyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IHRoZSBjYWxs
ZXIuIik7CisgICAgCiAgICAgbGV0IGZhaWx1cmVzID0gW107CiAgICAgbGV0IHN1Y2Nlc3NlcyA9
IFtdOwogICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3Rpb25zKSB7CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qcwkobm9uZXhp
c3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGll
cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKKy8vIFRoaXMgdHVybnMg
RG90RXhwcmVzc2lvbiBhbmQgSW5kZXhFeHByZXNzaW9uIGludG8gY2FsbHMgdG8gZ2V0dGVycyAo
b3BlcmF0b3IuZmllbGQgYW5kIG9wZXJhdG9yW10pLAorLy8gc2V0dGVycyAob3BlcmF0b3IuZmll
bGQ9IGFuZCBvcGVyYXRvcltdPSksIGFuZCBhbmRlcnMgKG9wZXJhdG9yJi5maWVsZCBhbmQgb3Bl
cmF0b3ImW10pLiBUaGlzIGludm9sdmVzCisvLyB0cmFuc2Zvcm1pbmcgYXNzaWdubWVudHMgYW5k
IFJNVydzIHRvIGRvIGx2YWx1ZSBlbXVsYXRpb24uCitmdW5jdGlvbiByZXNvbHZlUHJvcGVydGll
cyhwcm9ncmFtKQoreworICAgIHByb2dyYW0udmlzaXQobmV3IFByb3BlcnR5UmVzb2x2ZXIoKSk7
Cit9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlVHlwZURlZnMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVR5
cGVEZWZzLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9SZXNvbHZlVHlwZURlZnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDI2IEBA
CiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotZnVuY3Rpb24gcmVzb2x2ZVR5cGVEZWZzKHByb2dyYW0p
CitmdW5jdGlvbiByZXNvbHZlVHlwZURlZnNJblR5cGVzKHByb2dyYW0pCiB7Ci0gICAgcHJvZ3Jh
bS52aXNpdChuZXcgVHlwZURlZlJlc29sdmVyKCkpOworICAgIGxldCByZXNvbHZlciA9IG5ldyBU
eXBlRGVmUmVzb2x2ZXIoKTsKKyAgICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0udHlwZXMudmFs
dWVzKCkpCisgICAgICAgIHR5cGUudmlzaXQocmVzb2x2ZXIpOworfQorCitmdW5jdGlvbiByZXNv
bHZlVHlwZURlZnNJblByb3RvY29scyhwcm9ncmFtKQoreworICAgIGxldCByZXNvbHZlciA9IG5l
dyBUeXBlRGVmUmVzb2x2ZXIoKTsKKyAgICBmb3IgKGxldCBwcm90b2NvbCBvZiBwcm9ncmFtLnBy
b3RvY29scy52YWx1ZXMoKSkKKyAgICAgICAgcHJvdG9jb2wudmlzaXQocmVzb2x2ZXIpOworfQor
CitmdW5jdGlvbiByZXNvbHZlVHlwZURlZnNJbkZ1bmN0aW9ucyhwcm9ncmFtKQoreworICAgIGxl
dCByZXNvbHZlciA9IG5ldyBUeXBlRGVmUmVzb2x2ZXIoKTsKKyAgICBmb3IgKGxldCBmdW5jcyBv
ZiBwcm9ncmFtLmZ1bmN0aW9ucy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGxldCBmdW5jIG9m
IGZ1bmNzKQorICAgICAgICAgICAgZnVuYy52aXNpdChyZXNvbHZlcik7CisgICAgfQogfQogCklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDEwICsyNyw5IEBACiAvLyBGSVhNRTogVGhpcyBzaG91bGQgaGF2
ZSBzZW5zaWJsZSBiZWhhdmlvciB3aGVuIGl0IGVuY291bnRlcnMgZGVmaW5pdGlvbnMgdGhhdCBp
dCBjYW5ub3QgaGFuZGxlLiBSaWdodAogLy8gbm93IHdlIGFyZSBoYWNraXNobHkgcHJldmVudGlu
ZyB0aGlzIGJ5IHdyYXBwaW5nIHRoaW5ncyBpbiBUeXBlUmVmLiBUaGF0J3MgcHJvYmFibHkgd3Jv
bmcuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjA4Ci1j
bGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKK2NsYXNzIFJld3JpdGVyIHsKICAg
ICBjb25zdHJ1Y3RvcigpCiAgICAgewotICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlzLl9t
YXBwaW5nID0gbmV3IE1hcCgpOwogICAgIH0KICAgICAKQEAgLTk5LDcgKzk4LDcgQEAgY2xhc3Mg
UmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcg
VmFyaWFibGVEZWNsKAogICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUubmFtZSwKICAgICAg
ICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKSwKLSAgICAgICAgICAgIG5vZGUuaW5pdGlhbGl6
ZXIgPyBub2RlLmluaXRpYWxpemVyLnZpc2l0KHRoaXMpIDogbnVsbCk7CisgICAgICAgICAgICBO
b2RlLnZpc2l0KG5vZGUuaW5pdGlhbGl6ZXIsIHRoaXMpKTsKICAgICAgICAgdGhpcy5fbWFwTm9k
ZShub2RlLCByZXN1bHQpOwogICAgICAgICByZXN1bHQuZVB0ciA9IG5vZGUuZVB0cjsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEzMSw3ICsxMzAsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRl
bmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdFR5cGVSZWYobm9kZSkKICAgICB7CiAgICAgICAg
IGxldCByZXN1bHQgPSBuZXcgVHlwZVJlZihub2RlLm9yaWdpbiwgbm9kZS5uYW1lLCBub2RlLnR5
cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhpcykp
KTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQodGhp
cykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBlLCB0
aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0xNjMsMjQgKzE2
Miw1MyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdEFz
c2lnbm1lbnQobm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXNzaWdubWVu
dChub2RlLm9yaWdpbiwgbm9kZS5saHMudmlzaXQodGhpcyksIG5vZGUucmhzLnZpc2l0KHRoaXMp
KTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQodGhp
cykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBlLCB0
aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdmlzaXRSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0g
bmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubFZhbHVlLnZp
c2l0KHRoaXMpKTsKKyAgICAgICAgcmVzdWx0Lm9sZFZhbHVlVmFyID0gbm9kZS5vbGRWYWx1ZVZh
ci52aXNpdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlVmFyID0gbm9kZS5uZXdWYWx1
ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlRXhwID0gbm9kZS5uZXdW
YWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdEV4cCA9IG5vZGUucmVz
dWx0RXhwLnZpc2l0KHRoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAK
ICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbGV0
IHJlc3VsdCA9IG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUucHRy
LnZpc2l0KHRoaXMpKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5
cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlzaXQo
bm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisg
ICAgX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQsIG5vZGUpCisgICAgewor
ICAgICAgICByZXN1bHQucG9zc2libGVHZXRPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlR2V0T3Zl
cmxvYWRzOworICAgICAgICByZXN1bHQucG9zc2libGVTZXRPdmVybG9hZHMgPSBub2RlLnBvc3Np
YmxlU2V0T3ZlcmxvYWRzOworICAgICAgICByZXN1bHQucG9zc2libGVBbmRPdmVybG9hZHMgPSBu
b2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzOworICAgICAgICByZXN1bHQuYmFzZVR5cGUgPSBOb2Rl
LnZpc2l0KG5vZGUuYmFzZVR5cGUsIHRoaXMpOworICAgICAgICByZXN1bHQuY2FsbEZvckdldCA9
IE5vZGUudmlzaXQobm9kZS5jYWxsRm9yR2V0LCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LnJlc3Vs
dFR5cGVGb3JHZXQgPSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckdldCwgdGhpcyk7Cisg
ICAgICAgIHJlc3VsdC5jYWxsRm9yQW5kID0gTm9kZS52aXNpdChub2RlLmNhbGxGb3JBbmQsIHRo
aXMpOworICAgICAgICByZXN1bHQucmVzdWx0VHlwZUZvckFuZCA9IE5vZGUudmlzaXQobm9kZS5y
ZXN1bHRUeXBlRm9yQW5kLCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LmNhbGxGb3JTZXQgPSBOb2Rl
LnZpc2l0KG5vZGUuY2FsbEZvclNldCwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5lcnJvckZvclNl
dCA9IG5vZGUuZXJyb3JGb3JTZXQ7CisgICAgICAgIHJlc3VsdC51cGRhdGVDYWxsc0FmdGVyQ2hh
bmdpbmdCYXNlKCk7CisgICAgfQorICAgIAogICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQog
ICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBEb3RFeHByZXNzaW9uKG5vZGUub3JpZ2lu
LCBub2RlLnN0cnVjdC52aXNpdCh0aGlzKSwgbm9kZS5maWVsZE5hbWUpOwotICAgICAgICByZXN1
bHQuc3RydWN0VHlwZSA9IG5vZGUuc3RydWN0VHlwZSA/IG5vZGUuc3RydWN0VHlwZS52aXNpdCh0
aGlzKSA6IG51bGw7Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmV3cml0ZSBmaWVsZCwg
c2luY2UgdGhpcyBpcyBhIGRlZXAgcmVmZXJlbmNlIGdvaW5nIG91dCBvZiB0aGUgZnVuY3Rpb24u
Ci0gICAgICAgIC8vIEFsc28sIHRoaXMgaXMgc2V0IHVwIGR1cmluZyBpbmxpbmluZywgc28gd2Un
cmUgYWxyZWFkeSBmdWxseSBtb25vbW9ycGhpc2VkLgotICAgICAgICByZXN1bHQuZmllbGQgPSBu
b2RlLmZpZWxkOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24o
cmVzdWx0LCBub2RlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
dmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBu
ZXcgSW5kZXhFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmFycmF5LnZpc2l0KHRoaXMpLCBu
b2RlLmluZGV4LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uKHJlc3VsdCwgbm9kZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogICAgIApAQCAtMjE2LDcgKzI0NCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRv
ckJhc2UgewogICAgIAogICAgIHZpc2l0UmV0dXJuKG5vZGUpCiAgICAgewotICAgICAgICByZXR1
cm4gbmV3IFJldHVybihub2RlLm9yaWdpbiwgbm9kZS52YWx1ZSA/IG5vZGUudmFsdWUudmlzaXQo
dGhpcykgOiBudWxsKTsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm4obm9kZS5vcmlnaW4sIE5v
ZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcykpOwogICAgIH0KICAgICAKICAgICB2aXNpdENvbnRp
bnVlKG5vZGUpCkBAIC0yNDAsNyArMjY4LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNp
dG9yQmFzZSB7CiAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9kZSkKICAgICB7CiAgICAg
ICAgIGxldCByZXN1bHQgPSBuZXcgbm9kZS5jb25zdHJ1Y3Rvcihub2RlLm9yaWdpbiwgbm9kZS52
YWx1ZSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0
KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlw
ZSwgdGhpcyk7CiAgICAgICAgIHJlc3VsdC5wcmVmZXJyZWRUeXBlID0gbm9kZS5wcmVmZXJyZWRU
eXBlLnZpc2l0KHRoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI2MSw3
ICsyODksNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNp
dE51bGxUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE51bGxUeXBl
KG5vZGUub3JpZ2luKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5
cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlzaXQo
bm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTI4
MCw3ICszMDgsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAg
ICAgcmVzdWx0LnBvc3NpYmxlT3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZU92ZXJsb2FkczsKICAg
ICAgICAgaWYgKG5vZGUuaXNDYXN0KQogICAgICAgICAgICAgcmVzdWx0LnNldENhc3REYXRhKG5v
ZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKSk7Ci0gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0g
bm9kZS5yZXN1bHRUeXBlID8gbm9kZS5yZXN1bHRUeXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKKyAg
ICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZSwgdGhp
cyk7CiAgICAgICAgIHJlc3VsdC5yZXN1bHRFUHRyID0gbm9kZS5yZXN1bHRFUHRyOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI5OCw3ICszMjYsNyBAQCBjbGFzcyBSZXdyaXRl
ciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcg
RnVuY3Rpb25MaWtlQmxvY2soCiAgICAgICAgICAgICBub2RlLm9yaWdpbiwKLSAgICAgICAgICAg
IG5vZGUucmV0dXJuVHlwZSA/IG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKSA6IG51bGwsCisg
ICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmV0dXJuVHlwZSwgdGhpcyksCiAgICAgICAgICAg
ICBub2RlLmFyZ3VtZW50TGlzdC5tYXAoYXJndW1lbnQgPT4gYXJndW1lbnQudmlzaXQodGhpcykp
LAogICAgICAgICAgICAgbm9kZS5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVy
LnZpc2l0KHRoaXMpKSwKICAgICAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKSk7CkBAIC0z
MTUsNyArMzQzLDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAKICAg
ICB2aXNpdElmU3RhdGVtZW50KG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IElmU3Rh
dGVtZW50KG5vZGUub3JpZ2luLCBub2RlLmNvbmRpdGlvbmFsLnZpc2l0KHRoaXMpLCBub2RlLmJv
ZHkudmlzaXQodGhpcyksIG5vZGUuZWxzZUJvZHkgPyBub2RlLmVsc2VCb2R5LnZpc2l0KHRoaXMp
IDogdW5kZWZpbmVkKTsKKyAgICAgICAgcmV0dXJuIG5ldyBJZlN0YXRlbWVudChub2RlLm9yaWdp
biwgbm9kZS5jb25kaXRpb25hbC52aXNpdCh0aGlzKSwgbm9kZS5ib2R5LnZpc2l0KHRoaXMpLCBO
b2RlLnZpc2l0KG5vZGUuZWxzZUJvZHksIHRoaXMpKTsKICAgICB9CiAKICAgICB2aXNpdFdoaWxl
TG9vcChub2RlKQpAQCAtMzMxLDIyICszNTksMjMgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBW
aXNpdG9yQmFzZSB7CiAgICAgdmlzaXRGb3JMb29wKG5vZGUpCiAgICAgewogICAgICAgICByZXR1
cm4gbmV3IEZvckxvb3Aobm9kZS5vcmlnaW4sCi0gICAgICAgICAgICBub2RlLmluaXRpYWxpemF0
aW9uID8gbm9kZS5pbml0aWFsaXphdGlvbi52aXNpdCh0aGlzKSA6IHVuZGVmaW5lZCwKLSAgICAg
ICAgICAgIG5vZGUuY29uZGl0aW9uID8gbm9kZS5jb25kaXRpb24udmlzaXQodGhpcykgOiB1bmRl
ZmluZWQsCi0gICAgICAgICAgICBub2RlLmluY3JlbWVudCA/IG5vZGUuaW5jcmVtZW50LnZpc2l0
KHRoaXMpIDogdW5kZWZpbmVkLAorICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRpYWxp
emF0aW9uLCB0aGlzKSwKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5jb25kaXRpb24sIHRo
aXMpLAorICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLmluY3JlbWVudCwgdGhpcyksCiAgICAg
ICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcykpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExl
dEV4cHJlc3Npb24obm9kZSkKKyAgICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAg
ewotICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IExldEV4cHJlc3Npb24obm9kZS5vcmlnaW4pOwot
ICAgICAgICByZXN1bHQuaW5kZXggPSBub2RlLmluZGV4OwotICAgICAgICByZXN1bHQudHlwZSA9
IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7Ci0gICAgICAgIHJlc3Vs
dC5hcmd1bWVudCA9IG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7CisgICAgICAgIGxldCByZXN1
bHQgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUudHlwZSk7CiAgICAg
ICAgIHRoaXMuX21hcE5vZGUobm9kZSwgcmVzdWx0KTsKLSAgICAgICAgcmVzdWx0LmJvZHkgPSBu
b2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgICAgIHJlc3VsdC5lUHRyID0gbm9kZS5lUHRyOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyAgICAKKyAgICB2aXNpdElkZW50aXR5RXhw
cmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBJZGVudGl0eUV4cHJlc3Np
b24obm9kZS50YXJnZXQudmlzaXQodGhpcykpOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0TGF5b3V0QnVpbGRlci5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzCShy
ZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RM
YXlvdXRCdWlsZGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01OSw1ICs1OSwxMSBAQCBjbGFzcyBT
dHJ1Y3RMYXlvdXRCdWlsZGVyIGV4dGVuZHMgVmlzaXRvCiAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIlR5cGUgZG9lcyBub3QgaGF2ZSBzaXplOiAiICsgbm9kZS50eXBlKTsKICAgICAgICAg
dGhpcy5fb2Zmc2V0ICs9IHNpemU7CiAgICAgfQorICAgIAorICAgIHZpc2l0TmF0aXZlRnVuY0lu
c3RhbmNlKG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNpdE5hdGl2ZUZ1bmNJbnN0YW5j
ZShub2RlKTsKKyAgICAgICAgbm9kZS5mdW5jLmRpZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0
aW9uRGF0YShub2RlLmltcGxlbWVudGF0aW9uRGF0YSk7CisgICAgfQogfQogCkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDIxICs1NywyOSBAQCBjbGFzcyBTdHJ1Y3RUeXBlIGV4dGVuZHMgVHlw
ZSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIGluc3RhbnRpYXRl
KHR5cGVBcmd1bWVudHMsIG1vZGUpCisgICAgaW5zdGFudGlhdGUodHlwZUFyZ3VtZW50cyA9IG51
bGwpCiAgICAgewotICAgICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gdGhpcy50eXBl
UGFyYW1ldGVycy5sZW5ndGgpCi0gICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmln
aW4ub3JpZ2luU3RyaW5nLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIHRvIGluc3Rh
bnRpYXRpb24iKTsKKyAgICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9IG51bGw7CisgICAgICAgIGxl
dCB0eXBlUGFyYW1ldGVycyA9IHRoaXMudHlwZVBhcmFtZXRlcnM7CiAgICAgICAgIAotICAgICAg
ICBpZiAoIXR5cGVBcmd1bWVudHMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIGlmICh0eXBlQXJndW1lbnRzKSB7CisgICAgICAgICAgICBpZiAodHlwZUFyZ3VtZW50
cy5sZW5ndGggIT0gdGhpcy50eXBlUGFyYW1ldGVycy5sZW5ndGgpCisgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIldyb25nIG51bWJlciBv
ZiB0eXBlIGFyZ3VtZW50cyB0byBpbnN0YW50aWF0aW9uIik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmICghdHlwZUFyZ3VtZW50cy5sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IG5ldyBTdWJz
dGl0dXRpb24odGhpcy50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7CisgICAgICAgICAg
ICB0eXBlUGFyYW1ldGVycyA9IFtdOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBsZXQg
c3Vic3RpdHV0aW9uID0gbmV3IFN1YnN0aXR1dGlvbih0aGlzLnR5cGVQYXJhbWV0ZXJzLCB0eXBl
QXJndW1lbnRzKTsKLSAgICAgICAgbGV0IGluc3RhbnRpYXRlSW1tZWRpYXRlcyA9IG1vZGUgPT0g
InNoYWxsb3ciID8gbnVsbCA6IG5ldyBJbnN0YW50aWF0ZUltbWVkaWF0ZXMoKTsKLSAgICAgICAg
bGV0IHJlc3VsdCA9IG5ldyBTdHJ1Y3RUeXBlKHRoaXMub3JpZ2luLCB0aGlzLm5hbWUsIFtdKTsK
KyAgICAgICAgbGV0IGluc3RhbnRpYXRlSW1tZWRpYXRlcyA9IG5ldyBJbnN0YW50aWF0ZUltbWVk
aWF0ZXMoKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTdHJ1Y3RUeXBlKHRoaXMub3JpZ2lu
LCB0aGlzLm5hbWUsIHR5cGVQYXJhbWV0ZXJzKTsKICAgICAgICAgZm9yIChsZXQgZmllbGQgb2Yg
dGhpcy5maWVsZHMpIHsKLSAgICAgICAgICAgIGxldCBuZXdGaWVsZCA9IGZpZWxkLnZpc2l0KHN1
YnN0aXR1dGlvbik7Ci0gICAgICAgICAgICBpZiAoaW5zdGFudGlhdGVJbW1lZGlhdGVzKQotICAg
ICAgICAgICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlh
dGVzKTsKKyAgICAgICAgICAgIGxldCBuZXdGaWVsZCA9IGZpZWxkOworICAgICAgICAgICAgaWYg
KHN1YnN0aXR1dGlvbikKKyAgICAgICAgICAgICAgICBuZXdGaWVsZCA9IG5ld0ZpZWxkLnZpc2l0
KHN1YnN0aXR1dGlvbik7CisgICAgICAgICAgICBuZXdGaWVsZCA9IG5ld0ZpZWxkLnZpc2l0KGlu
c3RhbnRpYXRlSW1tZWRpYXRlcyk7CiAgICAgICAgICAgICByZXN1bHQuYWRkKG5ld0ZpZWxkKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvU3Vic3RpdHV0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qcwkocmV2aXNpb24gMjIyMTIzKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Vic3RpdHV0aW9uLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw4IEBAIGNsYXNzIFN1YnN0aXR1dGlvbiBleHRlbmRzIFJld3JpdGVy
IHsKICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQocGFyYW1ldGVyc1tpXSwgYXJndW1lbnRMaXN0
W2ldKTsKICAgICB9CiAgICAgCisgICAgZ2V0IG1hcCgpIHsgcmV0dXJuIHRoaXMuX21hcDsgfQor
ICAgIAogICAgIHZpc2l0VHlwZVJlZihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlcGxhY2Vt
ZW50ID0gdGhpcy5fbWFwLmdldChub2RlLnR5cGUpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMJKHJldmlzaW9u
IDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1ZmZpeENhbGxBc3Np
Z25tZW50LmpzCShub25leGlzdGVudCkKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBTdWZm
aXhDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNvbnN0cnVjdG9yKG9y
aWdpbiwgbmFtZSwgbGhzKQotICAgIHsKLSAgICAgICAgc3VwZXIob3JpZ2luKTsKLSAgICAgICAg
dGhpcy5fbmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMuX2xocyA9IGxoczsKLSAgICAgICAgdGhp
cy5mdW5jID0gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlz
Ll9uYW1lOyB9Ci0gICAgZ2V0IGxocygpIHsgcmV0dXJuIHRoaXMuX2xoczsgfQotICAgIAotICAg
IHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmxocyArICIgc3VmZml4ICIg
KyB0aGlzLm5hbWU7Ci0gICAgfQotfQotCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVj
dEFjY2Vzc29ycy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitmdW5j
dGlvbiBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pCit7CisgICAgZm9yIChsZXQg
dHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygpKSB7CisgICAgICAgIGlmICghKHR5cGUgaW5z
dGFuY2VvZiBTdHJ1Y3RUeXBlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAg
ICAgICAgZm9yIChsZXQgZmllbGQgb2YgdHlwZS5maWVsZHMpIHsKKyAgICAgICAgICAgIGZ1bmN0
aW9uIGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHlwZS50eXBlUGFyYW1ldGVycy5tYXAoCisgICAgICAgICAgICAgICAgICAgIHR5
cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFtZXRlci52aXNpdChuZXcgVHlwZVBhcmFtZXRlclJld3Jp
dGVyKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rp
b24gY3JlYXRlVHlwZUFyZ3VtZW50cygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHR5cGVQYXJhbWV0ZXJzLm1hcCh0eXBlUGFyYW1ldGVyID0+IHR5cGVQYXJhbWV0ZXIu
dmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZnVuY3Rpb24gc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywg
aW1wbGVtZW50YXRpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmF0aXZlRnVu
Yy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uID0gc3Vic3RpdHV0aW9uID0+IHsKKyAgICAgICAg
ICAgICAgICAgICAgbGV0IG5ld1R5cGUgPSB0eXBlLmluc3RhbnRpYXRlKHR5cGVQYXJhbWV0ZXJz
Lm1hcCh0eXBlUGFyYW1ldGVyID0+IHN1YnN0aXR1dGlvbi5tYXAuZ2V0KHR5cGVQYXJhbWV0ZXIp
KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7dHlwZTogbmV3VHlwZSwgZmllbGROYW1l
OiBmaWVsZC5uYW1lfTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIG5hdGl2
ZUZ1bmMudmlzaXRJbXBsZW1lbnRhdGlvbkRhdGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNp
dG9yKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0aW5nIHRoZSB0eXBlIGZpcnN0
IGVuc3VyZXMgdGhhdCB0aGUgc3RydWN0IGxheW91dCBidWlsZGVyIGZpZ3VyZXMgb3V0IHRoZSBm
aWVsZCdzCisgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgICAgICAgICAg
ICAgaW1wbGVtZW50YXRpb25EYXRhLnR5cGUudmlzaXQodmlzaXRvcik7CisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLmRpZExheW91dFN0cnVjdHNJbkltcGxl
bWVudGF0aW9uRGF0YSA9IGltcGxlbWVudGF0aW9uRGF0YSA9PiB7CisgICAgICAgICAgICAgICAg
ICAgIGxldCBzdHJ1Y3RTaXplID0gaW1wbGVtZW50YXRpb25EYXRhLnR5cGUuc2l6ZTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0cnVjdFNpemUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gc3RydWN0IHNpemUgZm9yICIgKyBuYXRpdmVGdW5j
KTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gaW1wbGVtZW50YXRpb25EYXRhLnR5
cGUuZmllbGRCeU5hbWUoaW1wbGVtZW50YXRpb25EYXRhLmZpZWxkTmFtZSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghZmllbGQpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpZWxkIik7CisgICAgICAgICAgICAgICAgICAgIGxldCBv
ZmZzZXQgPSBmaWVsZC5vZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZFNpemUg
PSBmaWVsZC50eXBlLnNpemU7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZFNpemUgPT0g
bnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gZmllbGQg
c2l6ZSBmb3IgIiArIG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0
ID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIG9m
ZnNldCBmb3IgIiArIG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAg
ICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLnN0cnVjdFNpemUgPSBzdHJ1Y3RTaXplOwor
ICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEuZmllbGRTaXplID0gZmllbGRT
aXplOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgbmF0aXZlRnVuYy5pbXBs
ZW1lbnRhdGlvbiA9IChhcmd1bWVudExpc3QsIG5vZGUpID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgbGV0IG5hdGl2ZUZ1bmNJbnN0YW5jZSA9IG5vZGUubmF0aXZlRnVuY0luc3RhbmNlOworICAg
ICAgICAgICAgICAgICAgICBsZXQgaW1wbGVtZW50YXRpb25EYXRhID0gbmF0aXZlRnVuY0luc3Rh
bmNlLmltcGxlbWVudGF0aW9uRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltcGxl
bWVudGF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRMaXN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLm9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5zdHJ1Y3RTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLmZpZWxkU2l6ZSk7CisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24g
Y3JlYXRlRmllbGRUeXBlKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmllbGQudHlwZS52aXNpdChuZXcgU3Vic3RpdHV0aW9uKHR5cGUudHlwZVBhcmFtZXRlcnMsIHR5
cGVQYXJhbWV0ZXJzKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZ1bmN0aW9uIGNyZWF0ZVR5cGVSZWYoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBUeXBlUmVmLmluc3RhbnRpYXRlKHR5cGUsIGNyZWF0ZVR5cGVBcmd1bWVudHMoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCBpc0Nhc3QgPSBm
YWxzZTsKKyAgICAgICAgICAgIGxldCB0eXBlUGFyYW1ldGVyczsKKyAgICAgICAgICAgIGxldCBu
YXRpdmVGdW5jOworCisgICAgICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAor
ICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOworICAg
ICAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgICAgIGZp
ZWxkLm9yaWdpbiwgIm9wZXJhdG9yLiIgKyBmaWVsZC5uYW1lLCBjcmVhdGVGaWVsZFR5cGUoKSwg
dHlwZVBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgW25ldyBGdW5jUGFyYW1ldGVyKGZpZWxk
Lm9yaWdpbiwgbnVsbCwgY3JlYXRlVHlwZVJlZigpKV0sIGlzQ2FzdCk7CisgICAgICAgICAgICBz
ZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQsIHN0cnVj
dFNpemUsIGZpZWxkU2l6ZSkgPT4geworICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcg
RVB0cihuZXcgRUJ1ZmZlcihmaWVsZFNpemUpLCAwKTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
Y29weUZyb20oYmFzZS5wbHVzKG9mZnNldCksIGZpZWxkU2l6ZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcHJvZ3JhbS5hZGQo
bmF0aXZlRnVuYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9w
ZXJhdG9yLmZpZWxkPQorICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBjcmVhdGVUeXBlUGFy
YW1ldGVycygpOworICAgICAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAg
ICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9yLiIgKyBmaWVsZC5uYW1lICsgIj0i
LCBjcmVhdGVUeXBlUmVmKCksIHR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgIFsKKyAg
ICAgICAgICAgICAgICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBj
cmVhdGVUeXBlUmVmKCkpLAorICAgICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihm
aWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0ZUZpZWxkVHlwZSgpKQorICAgICAgICAgICAgICAgIF0s
CisgICAgICAgICAgICAgICAgaXNDYXN0KTsKKyAgICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRp
b25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZSwgdmFsdWVdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZp
ZWxkU2l6ZSkgPT4geworICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcg
RUJ1ZmZlcihzdHJ1Y3RTaXplKSwgMCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9t
KGJhc2UsIHN0cnVjdFNpemUpOworICAgICAgICAgICAgICAgIHJlc3VsdC5wbHVzKG9mZnNldCku
Y29weUZyb20odmFsdWUsIGZpZWxkU2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxk
CisgICAgICAgICAgICBmdW5jdGlvbiBzZXR1cEFuZGVyKGFkZHJlc3NTcGFjZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVycyA9IGNyZWF0ZVR5cGVQYXJhbWV0
ZXJzKCk7CisgICAgICAgICAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAg
ICAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvciYuIiArIGZpZWxkLm5hbWUs
IG5ldyBQdHJUeXBlKGZpZWxkLm9yaWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVGaWVsZFR5cGUo
KSksCisgICAgICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAg
ICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sIG51bGwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3IFB0clR5cGUoZmllbGQub3JpZ2luLCBhZGRyZXNzU3BhY2UsIGNy
ZWF0ZVR5cGVSZWYoKSkpCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAg
ICAgIGlzQ2FzdCk7CisgICAgICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0
aXZlRnVuYywgKFtiYXNlXSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgYmFzZSA9IGJhc2UubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghYmFzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJh
cEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk51bGwgZGVyZWZlcmVuY2UiKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEVQdHIuYm94KGJhc2UucGx1cyhvZmZzZXQpKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5j
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0dXBBbmRlcigi
dGhyZWFkIik7CisgICAgICAgICAgICBpZiAodHlwZS5pbnN0YW50aWF0ZSgpLmlzUHJpbWl0aXZl
KSB7CisgICAgICAgICAgICAgICAgc2V0dXBBbmRlcigidGhyZWFkZ3JvdXAiKTsKKyAgICAgICAg
ICAgICAgICBzZXR1cEFuZGVyKCJkZXZpY2UiKTsKKyAgICAgICAgICAgICAgICBzZXR1cEFuZGVy
KCJjb25zdGFudCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkocmV2aXNpb24gMjIyMTIzKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC02LDcgKzYsNiBAQAogPHNjcmlwdCBzcmM9IlJlZmVyZW5jZVR5cGUuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IlZhbHVlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJFeHByZXNz
aW9uLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJWaXNpdG9yQmFzZS5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iUmV3cml0ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlZpc2l0
b3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWwuanMiPjwvc2NyaXB0
PgpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCShyZXZpc2lvbiAyMjIx
MjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIGZ1bmN0aW9uIGNoZWNrTnVtYmVyKHByb2dyYW0sIHJlc3Vs
dCwgZXgKICAgICBpZiAoIXJlc3VsdC50eXBlLmlzTnVtYmVyKQogICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIldyb25nIHJlc3VsdCB0eXBlOyByZXN1bHQ6ICIgKyByZXN1bHQpOwogICAgIGlmIChy
ZXN1bHQudmFsdWUgIT0gZXhwZWN0ZWQpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcigiV3Jvbmcg
cmVzdWx0OiAiICsgcmVzdWx0ICsgIiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIikiKTsKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQ6ICIgKyByZXN1bHQudmFsdWUgKyAi
IChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiKSIpOwogfQogCiBmdW5jdGlvbiBtYWtlVWludChw
cm9ncmFtLCB2YWx1ZSkKQEAgLTc0Myw3ICs3NDMsNyBAQCBmdW5jdGlvbiBURVNUX3N0b3JlTnVs
bEFycmF5UmVmKCkKICAgICAgICAgKCkgPT4gZG9QcmVwKGAKICAgICAgICAgICAgIHZvaWQgZm9v
KCkgeyBudWxsWzB1XSA9IDQyOyB9CiAgICAgICAgIGApLAotICAgICAgICAoZSkgPT4gZSBpbnN0
YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoIkRpZCBub3QgZmluZCBmdW5j
dGlvbiBmb3IgY2FsbCIpICE9IC0xKTsKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlw
ZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJMSFMgb2YgYXNzaWdubWVudCBpcyBub3QgYW4g
TFZhbHVlIikgIT0gLTEpOwogfQogCiBmdW5jdGlvbiBURVNUX3JldHVybk51bGxBcnJheVJlZigp
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAgY2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewogICAgIGdldCBr
aW5kKCkgeyByZXR1cm4gVHlwZTsgfQogICAgIGdldCBpc1B0cigpIHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgZ2V0IGlzQXJyYXlSZWYoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGdldCBpc1JlZigp
IHsgcmV0dXJuIHRoaXMuaXNQdHIgfHwgdGhpcy5pc0FycmF5UmVmOyB9CiAgICAgZ2V0IGlzTnVt
YmVyKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNJbnQoKSB7IHJldHVybiBmYWxzZTsg
fQogICAgIGdldCBpc0Zsb2F0KCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTQxLDUgKzQyLDE5IEBA
IGNsYXNzIFR5cGUgZXh0ZW5kcyBOb2RlIHsKICAgICB9CiAgICAgCiAgICAgZ2V0IGluc3RhbnRp
YXRlZFR5cGUoKSB7IHJldHVybiB0aGlzLnZpc2l0KG5ldyBJbnN0YW50aWF0ZUltbWVkaWF0ZXMo
KSk7IH0KKyAgICAKKyAgICAvLyBIYXZlIHRvIGNhbGwgdGhlc2Ugb24gdGhlIHVuaWZ5Tm9kZS4K
KyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gbmV3IE1ha2VQdHJFeHByZXNzaW9uKG9yaWdpbiwgdmFsdWUpOworICAgIH0KKyAg
ICBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChvcmlnaW4pCisgICAgeworICAgICAgICByZXR1
cm4gbmV3IFB0clR5cGUob3JpZ2luLCAidGhyZWFkIiwgdGhpcyk7CisgICAgfQorICAgIHJldHVy
blR5cGVGcm9tQW5kT3ZlcmxvYWQob3JpZ2luKQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IFdU
eXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIkJ5LXBvaW50ZXIgb3ZlcmxvYWQgcmV0dXJu
ZWQgbm9uLXBvaW50ZXIgdHlwZTogIiArIHRoaXMpOworICAgIH0KIH0KIApJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJhbWV0ZXJSZXdyaXRl
ci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBl
UGFyYW1ldGVyUmV3cml0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOwor
CitjbGFzcyBUeXBlUGFyYW1ldGVyUmV3cml0ZXIgeworICAgIHZpc2l0Q29uc3RleHByVHlwZVBh
cmFtZXRlcihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDb25zdGV4cHJUeXBlUGFy
YW1ldGVyKG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUudHlwZS52aXNpdChuZXcgUmV3cml0
ZXIoKSkpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFR5cGVWYXJpYWJsZShub2RlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBUeXBlVmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUubmFtZSwg
bm9kZS5wcm90b2NvbCk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVWYXJpYWJsZVRyYWNrZXIuanMJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlVHJhY2tlci5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFR5cGVWYXJpYWJsZVRy
YWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAg
ICBzdXBlcigpOworICAgICAgICB0aGlzLl9zZXQgPSBuZXcgU2V0KCk7CisgICAgfQorICAgIAor
ICAgIGdldCBzZXQoKSB7IHJldHVybiB0aGlzLl9zZXQ7IH0KKyAgICAKKyAgICBfY29uc2lkZXIo
dGhpbmcpCisgICAgeworICAgICAgICBpZiAodGhpbmcuaXNVbmlmaWFibGUpCisgICAgICAgICAg
ICB0aGlzLl9zZXQuYWRkKHRoaW5nKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRUeXBlUmVmKG5v
ZGUpCisgICAgeworICAgICAgICB0aGlzLl9jb25zaWRlcihub2RlLnR5cGUpOworICAgIH0KKyAg
ICAKKyAgICB2aXNpdFZhcmlhYmxlUmVmKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9jb25z
aWRlcih0aGlzLnZhcmlhYmxlKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1ZhbHVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1ZhbHVlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9WYWx1ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjgsNSArMjgsMTQgQEAg
Y2xhc3MgVmFsdWUgZXh0ZW5kcyBOb2RlIHsKICAgICBnZXQga2luZCgpIHsgcmV0dXJuIFZhbHVl
OyB9CiAgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNM
VmFsdWUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIGJlY29tZShvdGhlclZhbHVlKQor
ICAgIHsKKyAgICAgICAgLy8gTk9URTogTWFrZSBzdXJlIHRoYXQgSWRlbnRpdHlFeHByZXNzaW9u
IGltcGxlbWVudHMgdW5pZnlOb2RlIGFuZCBhbGwgdGhhdAorICAgICAgICBsZXQgb3JpZ2luID0g
dGhpcy5vcmlnaW47CisgICAgICAgIHRoaXMuX19wcm90b19fID0gSWRlbnRpdHlFeHByZXNzaW9u
LnByb3RvdHlwZTsKKyAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOworICAgICAgICB0aGlz
Ll90YXJnZXQgPSBvdGhlclZhbHVlOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC00MSwxMCArNDEsOSBAQCBjbGFzcyBWYXJpYWJsZVJlZiBleHRlbmRzIEV4cHJlc3Npb24g
ewogICAgIAogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQogICAgIGdldCBp
c0NvbnN0ZXhwcigpIHsgcmV0dXJuIHRoaXMudmFyaWFibGUuaXNDb25zdGV4cHI7IH0KLSAgICBn
ZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZS51bmlmeU5vZGU7IH0KKyAgICBn
ZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZS51bmlmeU5vZGU7IH0gLy8gVGhp
cyBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gdGhpcyBpcyBhIGNvbnN0ZXhwci4KICAgICBnZXQgaXNM
VmFsdWUoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgZ2V0IGFkZHJlc3NTcGFjZSgpIHsgcmV0dXJu
ICJ0aHJlYWQiOyB9Ci0gICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFyaWFibGU7
IH0KICAgICAKICAgICB0b1N0cmluZygpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVmlzaXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMiArMjQs
NyBAQAogICovCiAidXNlIHN0cmljdCI7CiAKLWNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9y
QmFzZSB7Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICB9
Ci0gICAgCitjbGFzcyBWaXNpdG9yIHsKICAgICB2aXNpdFByb2dyYW0obm9kZSkKICAgICB7CiAg
ICAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBub2RlLnRvcExldmVsU3RhdGVtZW50cykKQEAg
LTcwLDYgKzY1LDcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB7
CiAgICAgICAgIG5vZGUuZnVuYy52aXNpdCh0aGlzKTsKICAgICAgICAgdGhpcy52aXNpdEZ1bmMo
bm9kZSk7CisgICAgICAgIG5vZGUuZnVuYy52aXNpdEltcGxlbWVudGF0aW9uRGF0YShub2RlLmlt
cGxlbWVudGF0aW9uRGF0YSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0QmxvY2sobm9k
ZSkKQEAgLTEwMCw4ICs5Niw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7
CiAgICAgewogICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBlQXJndW1l
bnRzKQogICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAo
bm9kZS50eXBlKQotICAgICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOworICAgICAgICBO
b2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0TmF0aXZl
VHlwZShub2RlKQpAQCAtMTM0LDggKzEyOSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNp
dG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRUeXBlVmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAg
ICAgIGlmIChub2RlLnByb3RvY29sKQotICAgICAgICAgICAgbm9kZS5wcm90b2NvbC52aXNpdCh0
aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnByb3RvY29sLCB0aGlzKTsKICAgICB9CiAg
ICAgCiAgICAgdmlzaXRDb25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUpCkBAIC0xNzcsOCArMTcx
LDcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdFZhcmlh
YmxlRGVjbChub2RlKQogICAgIHsKICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOwotICAg
ICAgICBpZiAobm9kZS5pbml0aWFsaXplcikKLSAgICAgICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIu
dmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbml0aWFsaXplciwgdGhpcyk7
CiAgICAgfQogICAgIAogICAgIHZpc2l0QXNzaWdubWVudChub2RlKQpAQCAtMTg3LDE2ICsxODAs
NDEgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgbm9kZS5y
aHMudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5sVmFsdWUudmlzaXQodGhpcyk7Cisg
ICAgICAgIG5vZGUub2xkVmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUubmV3VmFs
dWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUubmV3VmFsdWVFeHAudmlzaXQodGhpcyk7
CisgICAgICAgIG5vZGUucmVzdWx0RXhwLnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKICAgICB2
aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbm9kZS5wdHIu
dmlzaXQodGhpcyk7CiAgICAgfQogICAgIAorICAgIF9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5iYXNlVHlwZSwgdGhp
cyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5jYWxsRm9yR2V0LCB0aGlzKTsKKyAgICAgICAg
Tm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JHZXQsIHRoaXMpOworICAgICAgICBOb2RlLnZp
c2l0KG5vZGUuY2FsbEZvckFuZCwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXN1
bHRUeXBlRm9yQW5kLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmNhbGxGb3JTZXQs
IHRoaXMpOworICAgIH0KKyAgICAKICAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7
CiAgICAgICAgIG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5zdHJ1
Y3RUeXBlKQotICAgICAgICAgICAgbm9kZS5zdHJ1Y3RUeXBlLnZpc2l0KHRoaXMpOworICAgICAg
ICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSk7CisgICAgfQorICAg
IAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLmFy
cmF5LnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLmluZGV4LnZpc2l0KHRoaXMpOworICAgICAg
ICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSk7CiAgICAgfQogICAg
IAogICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKQEAgLTIwNyw4ICsyMjUsNyBAQCBj
bGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0TWFrZUFycmF5UmVm
RXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbm9kZS5sVmFsdWUudmlzaXQodGhpcyk7
Ci0gICAgICAgIGlmIChub2RlLm51bUVsZW1lbnRzKQotICAgICAgICAgICAgbm9kZS5udW1FbGVt
ZW50cy52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLm51bUVsZW1lbnRzLCB0
aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Np
b24obm9kZSkKQEAgLTIyNCw4ICsyNDEsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRv
ckJhc2UgewogICAgIHsKICAgICAgICAgbm9kZS5jb25kaXRpb25hbC52aXNpdCh0aGlzKTsKICAg
ICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5lbHNlQm9keSkK
LSAgICAgICAgICAgIG5vZGUuZWxzZUJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlz
aXQobm9kZS5lbHNlQm9keSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0V2hpbGVMb29w
KG5vZGUpCkBAIC0yNDIsMTkgKzI1OCwxNSBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRv
ckJhc2UgewogICAgIAogICAgIHZpc2l0Rm9yTG9vcChub2RlKQogICAgIHsKLSAgICAgICAgaWYg
KG5vZGUuaW5pdGlhbGl6YXRpb24pCi0gICAgICAgICAgICBub2RlLmluaXRpYWxpemF0aW9uLnZp
c2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5jb25kaXRpb24pCi0gICAgICAgICAgICBub2Rl
LmNvbmRpdGlvbi52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUuaW5jcmVtZW50KQotICAg
ICAgICAgICAgbm9kZS5pbmNyZW1lbnQudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQo
bm9kZS5pbml0aWFsaXphdGlvbiwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5jb25k
aXRpb24sIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5jcmVtZW50LCB0aGlzKTsK
ICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgIH0KIAogICAgIHZpc2l0UmV0dXJu
KG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS52YWx1ZSkKLSAgICAgICAgICAgIG5vZGUu
dmFsdWUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcyk7
CiAgICAgfQogCiAgICAgdmlzaXRDb250aW51ZShub2RlKQpAQCAtMjcyLDggKzI4NCw3IEBAIGNs
YXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRHZW5lcmlj
TGl0ZXJhbFR5cGUobm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLnR5cGUpCi0gICAgICAg
ICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBl
LCB0aGlzKTsKICAgICAgICAgbm9kZS5wcmVmZXJyZWRUeXBlLnZpc2l0KHRoaXMpOwogICAgIH0K
ICAgICAKQEAgLTI4OCw4ICsyOTksNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJh
c2UgewogICAgIAogICAgIHZpc2l0TnVsbFR5cGUobm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChu
b2RlLnR5cGUpCi0gICAgICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRDYWxsRXhw
cmVzc2lvbihub2RlKQpAQCAtMzAzLDEwICszMTMsOSBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMg
VmlzaXRvckJhc2UgewogICAgICAgICAgICAgZm9yIChsZXQgYXJndW1lbnQgb2YgYWN0dWFsVHlw
ZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAg
ICAgfQotICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQotICAgICAgICAgICAgbm9kZS5yZXR1
cm5UeXBlLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5yZXN1bHRUeXBlKQotICAgICAg
ICAgICAgbm9kZS5yZXN1bHRUeXBlLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5v
ZGUubmF0aXZlRnVuY0luc3RhbmNlLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJl
dHVyblR5cGUsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZSwgdGhp
cyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0TG9naWNhbE5vdChub2RlKQpAQCAtMzE2LDIxICsz
MjUsMjMgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2
aXNpdEZ1bmN0aW9uTGlrZUJsb2NrKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5yZXR1
cm5UeXBlKQotICAgICAgICAgICAgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpOworICAgICAg
ICBOb2RlLnZpc2l0KG5vZGUucmV0dXJuVHlwZSwgdGhpcyk7CiAgICAgICAgIGZvciAobGV0IGFy
Z3VtZW50IG9mIG5vZGUuYXJndW1lbnRMaXN0KQogICAgICAgICAgICAgYXJndW1lbnQudmlzaXQo
dGhpcyk7CiAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlciBvZiBub2RlLnBhcmFtZXRlcnMpCiAg
ICAgICAgICAgICBwYXJhbWV0ZXIudmlzaXQodGhpcyk7CiAgICAgICAgIG5vZGUuYm9keS52aXNp
dCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUucmVzdWx0VHlwZSkKLSAgICAgICAgICAgIG5vZGUu
cmVzdWx0VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5
cGUsIHRoaXMpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkKKyAg
ICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewotICAgICAgICBub2RlLmFyZ3Vt
ZW50LnZpc2l0KHRoaXMpOwotICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgICAg
IE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJZGVu
dGl0eUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUudGFyZ2V0LnZpc2l0KHRo
aXMpOwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlz
aXRvckJhc2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VmlzaXRvckJhc2UuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzCShub25leGlzdGVudCkKQEAgLTEsMzIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3Qi
OwotCi1jbGFzcyBWaXNpdG9yQmFzZSB7Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAgICAg
ICAgdGhpcy5fbWVtb1RhYmxlID0gbmV3IE1hcCgpOwotICAgIH0KLX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321019</attachid>
            <date>2017-09-16 18:18:15 -0700</date>
            <delta_ts>2017-09-16 21:12:13 -0700</delta_ts>
            <desc>passes all of our current tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>109906</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjksMTMgKzI5LDE0IEBAIGxvYWQoIlR5cGUuanMiKTsKIGxvYWQoIlJlZmVyZW5jZVR5cGUu
anMiKTsKIGxvYWQoIlZhbHVlLmpzIik7CiBsb2FkKCJFeHByZXNzaW9uLmpzIik7Ci1sb2FkKCJW
aXNpdG9yQmFzZS5qcyIpOwogbG9hZCgiUmV3cml0ZXIuanMiKTsKIGxvYWQoIlZpc2l0b3IuanMi
KTsKIGxvYWQoIkNyZWF0ZUxpdGVyYWwuanMiKTsKIGxvYWQoIkNyZWF0ZUxpdGVyYWxUeXBlLmpz
Iik7Citsb2FkKCJQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMiKTsKIAogbG9hZCgiQWRkcmVz
c1NwYWNlLmpzIik7Citsb2FkKCJBbm9ueW1vdXNWYXJpYWJsZS5qcyIpOwogbG9hZCgiQXJyYXlS
ZWZUeXBlLmpzIik7CiBsb2FkKCJBcnJheVR5cGUuanMiKTsKIGxvYWQoIkFzc2lnbm1lbnQuanMi
KTsKQEAgLTQzLDcgKzQ0LDYgQEAgbG9hZCgiQXV0b1dyYXBwZXIuanMiKTsKIGxvYWQoIkJsb2Nr
LmpzIik7CiBsb2FkKCJCb29sTGl0ZXJhbC5qcyIpOwogbG9hZCgiQnJlYWsuanMiKTsKLWxvYWQo
IkNhbGxBc3NpZ25tZW50LmpzIik7CiBsb2FkKCJDYWxsRXhwcmVzc2lvbi5qcyIpOwogbG9hZCgi
Q2FsbEZ1bmN0aW9uLmpzIik7CiBsb2FkKCJDaGVjay5qcyIpOwpAQCAtNzYsNyArNzYsOSBAQCBs
b2FkKCJGdW5jRGVmLmpzIik7CiBsb2FkKCJGdW5jSW5zdGFudGlhdG9yLmpzIik7CiBsb2FkKCJG
dW5jUGFyYW1ldGVyLmpzIik7CiBsb2FkKCJGdW5jdGlvbkxpa2VCbG9jay5qcyIpOworbG9hZCgi
SWRlbnRpdHlFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJJZlN0YXRlbWVudC5qcyIpOworbG9hZCgi
SW5kZXhFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJJbmZlclR5cGVzRm9yQ2FsbC5qcyIpOwogbG9h
ZCgiSW5saW5lLmpzIik7CiBsb2FkKCJJbmxpbmVyLmpzIik7CkBAIC04NCw3ICs4Niw2IEBAIGxv
YWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbC5qcyIpOwog
bG9hZCgiSW50TGl0ZXJhbFR5cGUuanMiKTsKIGxvYWQoIkludHJpbnNpY3MuanMiKTsKLWxvYWQo
IkxldEV4cHJlc3Npb24uanMiKTsKIGxvYWQoIkxleGVyLmpzIik7CiBsb2FkKCJMZXhlclRva2Vu
LmpzIik7CiBsb2FkKCJMaXRlcmFsVHlwZUNoZWNrZXIuanMiKTsKQEAgLTk4LDIwICs5OSwyNCBA
QCBsb2FkKCJOYXRpdmVGdW5jLmpzIik7CiBsb2FkKCJOYXRpdmVGdW5jSW5zdGFuY2UuanMiKTsK
IGxvYWQoIk5hdGl2ZVR5cGUuanMiKTsKIGxvYWQoIk5hdGl2ZVR5cGVJbnN0YW5jZS5qcyIpOwor
bG9hZCgiTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcyIpOwogbG9hZCgiTnVsbExpdGVyYWwu
anMiKTsKIGxvYWQoIk51bGxUeXBlLmpzIik7CiBsb2FkKCJPdmVybG9hZFJlc29sdXRpb25GYWls
dXJlLmpzIik7CiBsb2FkKCJQYXJzZS5qcyIpOwogbG9hZCgiUHJlcGFyZS5qcyIpOwogbG9hZCgi
UHJvZ3JhbS5qcyIpOworbG9hZCgiUHJvcGVydHlSZXNvbHZlci5qcyIpOwogbG9hZCgiUHJvdG9j
b2wuanMiKTsKIGxvYWQoIlByb3RvY29sRGVjbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xGdW5jRGVj
bC5qcyIpOwogbG9hZCgiUHJvdG9jb2xSZWYuanMiKTsKIGxvYWQoIlB0clR5cGUuanMiKTsKK2xv
YWQoIlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMiKTsKIGxvYWQoIlJlY3Vyc2lvbkNoZWNr
ZXIuanMiKTsKIGxvYWQoIlJlc29sdmVOYW1lcy5qcyIpOwogbG9hZCgiUmVzb2x2ZU92ZXJsb2Fk
SW1wbC5qcyIpOworbG9hZCgiUmVzb2x2ZVByb3BlcnRpZXMuanMiKTsKIGxvYWQoIlJlc29sdmVU
eXBlRGVmcy5qcyIpOwogbG9hZCgiUmV0dXJuLmpzIik7CiBsb2FkKCJSZXR1cm5DaGVja2VyLmpz
Iik7CkBAIC0xMjAsMTIgKzEyNSwxNCBAQCBsb2FkKCJTdGFuZGFyZExpYnJhcnkuanMiKTsKIGxv
YWQoIlN0cnVjdExheW91dEJ1aWxkZXIuanMiKTsKIGxvYWQoIlN0cnVjdFR5cGUuanMiKTsKIGxv
YWQoIlN1YnN0aXR1dGlvbi5qcyIpOwotbG9hZCgiU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMiKTsK
K2xvYWQoIlN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMiKTsKIGxvYWQoIlR5cGVEZWYuanMi
KTsKIGxvYWQoIlR5cGVEZWZSZXNvbHZlci5qcyIpOwogbG9hZCgiVHlwZU9yVmFyaWFibGVSZWYu
anMiKTsKK2xvYWQoIlR5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcyIpOwogbG9hZCgiVHlwZVJlZi5q
cyIpOwogbG9hZCgiVHlwZVZhcmlhYmxlLmpzIik7Citsb2FkKCJUeXBlVmFyaWFibGVUcmFja2Vy
LmpzIik7CiBsb2FkKCJUeXBlZFZhbHVlLmpzIik7CiBsb2FkKCJVaW50TGl0ZXJhbC5qcyIpOwog
bG9hZCgiVWludExpdGVyYWxUeXBlLmpzIik7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwkobm9uZXhpc3RlbnQpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2xldCBhbm9ueW1vdXNWYXJpYWJsZUNvdW50
ID0gMDsKKworY2xhc3MgQW5vbnltb3VzVmFyaWFibGUgZXh0ZW5kcyBWYWx1ZSB7CisgICAgLy8g
WW91IGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUncyB2YWx1ZSBiZWZvcmUgdXNlLCBi
dXQgdGhhdCBjb3VsZCBiZSBxdWl0ZSBsYXRlLgorICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgdHlw
ZSA9IG51bGwpCisgICAgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9vcmlnaW4g
PSBvcmlnaW47CisgICAgICAgIHRoaXMuaW5kZXggPSBhbm9ueW1vdXNWYXJpYWJsZUNvdW50Kys7
CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgfQorICAgIAorICAgIGdldCBvcmlnaW4o
KSB7IHJldHVybiB0aGlzLl9vcmlnaW47IH0KKyAgICBnZXQgbmFtZSgpIHsgcmV0dXJuICJhbm9u
VmFyPCIgKyB0aGlzLmluZGV4ICsgIj4iOyB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMubmFtZTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsMTUgQEAgY2xhc3MgQXJyYXlSZWZUeXBlIGV4dGVuZHMgUmVm
ZXJlbmNlVHlwZQogICAgIAogICAgIGdldCBpc0FycmF5UmVmKCkgeyByZXR1cm4gdHJ1ZTsgfQog
CisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChv
cmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKICAgICB0b1N0cmlu
ZygpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZSArICJbXSAiICsgdGhp
cy5hZGRyZXNzU3BhY2U7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJh
eVR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJy
YXlUeXBlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9BcnJheVR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTczLDUgKzczLDE2IEBAIGNsYXNz
IEFycmF5VHlwZSBleHRlbmRzIFR5cGUgewogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRoaXMu
ZWxlbWVudFR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5lbGVtZW50VHlwZSk7
CiAgICAgfQorCisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAg
IHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG9yaWdp
biwgdmFsdWUpOworICAgICAgICByZXN1bHQubnVtRWxlbWVudHMgPSB0aGlzLm51bUVsZW1lbnRz
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRP
dmVybG9hZChvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEFycmF5UmVmVHlwZShv
cmlnaW4sICJ0aHJlYWQiLCB0aGlzLmVsZW1lbnRUeXBlKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVudC5qcwkocmV2aXNpb24gMjIy
MTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVudC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDEyIEBACiAidXNlIHN0cmljdCI7CiAKIGNsYXNzIEFz
c2lnbm1lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGxo
cywgcmhzKQorICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMsIHR5cGUgPSBudWxsKQog
ICAgIHsKICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fbGhzID0gbGhzOwog
ICAgICAgICB0aGlzLl9yaHMgPSByaHM7CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICAg
fQogICAgIAogICAgIGdldCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsQXNzaWdubWVu
dC5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgQ2FsbEFzc2ln
bm1lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUs
IGxocywgcmhzKQotICAgIHsKLSAgICAgICAgc3VwZXIob3JpZ2luKTsKLSAgICAgICAgdGhpcy5f
bmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMuX2xocyA9IGxoczsKLSAgICAgICAgdGhpcy5fcmhz
ID0gcmhzOwotICAgICAgICB0aGlzLmZ1bmMgPSBudWxsOwotICAgIH0KLSAgICAKLSAgICBnZXQg
bmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KLSAgICBnZXQgbGhzKCkgeyByZXR1cm4gdGhp
cy5fbGhzOyB9Ci0gICAgZ2V0IHJocygpIHsgcmV0dXJuIHRoaXMuX3JoczsgfSAvLyBUaGlzIGNh
biBiZSBudWxsLgotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLmxocyArICIgIiArIHRoaXMubmFtZSArICh0aGlzLnJocyA/ICI9ICIgKyB0aGlzLnJocyA6
ICIiKTsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Nh
bGxFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0NhbGxFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTUgKzQyLDgyIEBAIGNsYXNzIENhbGxFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiAKICAg
ICBnZXQgaXNDYXN0KCkgeyByZXR1cm4gdGhpcy5faXNDYXN0OyB9CiAgICAgZ2V0IHJldHVyblR5
cGUoKSB7IHJldHVybiB0aGlzLl9yZXR1cm5UeXBlOyB9CiAgICAgCi0gICAgcmVzb2x2ZShvdmVy
bG9hZCkKKyAgICBzdGF0aWMgcmVzb2x2ZShvcmlnaW4sIHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBl
UGFyYW1ldGVyc0luU2NvcGUsIG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50TGlzdCwgYXJn
dW1lbnRUeXBlcywgcmV0dXJuVHlwZSkKKyAgICB7CisgICAgICAgIGxldCBjYWxsID0gbmV3IENh
bGxFeHByZXNzaW9uKG9yaWdpbiwgbmFtZSwgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRMaXN0KTsK
KyAgICAgICAgY2FsbC5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlczsKKyAgICAgICAgaWYg
KHJldHVyblR5cGUpCisgICAgICAgICAgICBjYWxsLnNldENhc3REYXRhKHJldHVyblR5cGUpOwor
ICAgICAgICByZXR1cm4ge2NhbGwsIHJlc3VsdFR5cGU6IGNhbGwucmVzb2x2ZShwb3NzaWJsZU92
ZXJsb2FkcywgdHlwZVBhcmFtZXRlcnNJblNjb3BlLCB0eXBlQXJndW1lbnRzKX07CisgICAgfQor
ICAgIAorICAgIHJlc29sdmUocG9zc2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29w
ZSwgdHlwZUFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGlmICghcG9zc2libGVPdmVybG9hZHMp
CisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJp
bmcsICJEaWQgbm90IGZpbmQgYW55IGZ1bmN0aW9ucyBuYW1lZCAiICsgdGhpcy5uYW1lKTsKKyAg
ICAgICAgCisgICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7CisgICAgICAgIGxldCBmYWlsdXJl
cyA9IFtdOworICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHR5cGVQYXJhbWV0ZXJz
SW5TY29wZSkgeworICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRlciBpbnN0YW5jZW9mIFR5
cGVWYXJpYWJsZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAo
IXR5cGVQYXJhbWV0ZXIucHJvdG9jb2wpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBsZXQgc2lnbmF0dXJlcyA9CisgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5w
cm90b2NvbC5wcm90b2NvbERlY2wuc2lnbmF0dXJlc0J5TmFtZVdpdGhUeXBlVmFyaWFibGUodGhp
cy5uYW1lLCB0eXBlUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGlmICghc2lnbmF0dXJlcykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG92ZXJsb2FkID0gcmVzb2x2ZU92
ZXJsb2FkSW1wbChzaWduYXR1cmVzLCB0aGlzLnR5cGVBcmd1bWVudHMsIHRoaXMuYXJndW1lbnRU
eXBlcywgdGhpcy5yZXR1cm5UeXBlKTsKKyAgICAgICAgICAgIGlmIChvdmVybG9hZC5mdW5jKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVy
bG9hZC5mYWlsdXJlcyk7CisgICAgICAgICAgICBvdmVybG9hZCA9IG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFvdmVybG9hZCkgeworICAgICAgICAgICAgb3ZlcmxvYWQgPSByZXNvbHZl
T3ZlcmxvYWRJbXBsKAorICAgICAgICAgICAgICAgIHBvc3NpYmxlT3ZlcmxvYWRzLCB0aGlzLnR5
cGVBcmd1bWVudHMsIHRoaXMuYXJndW1lbnRUeXBlcywgdGhpcy5yZXR1cm5UeXBlKTsKKyAgICAg
ICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykgeworICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1
c2goLi4ub3ZlcmxvYWQuZmFpbHVyZXMpOworICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0g
IkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCB3aXRoICI7CisgICAgICAgICAgICAgICAg
aWYgKHRoaXMudHlwZUFyZ3VtZW50cy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgKz0gInR5cGUgYXJndW1lbnRzIDwiICsgdGhpcy50eXBlQXJndW1lbnRzICsgIj4gYW5kICI7
CisgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiYXJndW1lbnQgdHlwZXMgKCIgKyB0aGlzLmFy
Z3VtZW50VHlwZXMgKyAiKSI7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMucmV0dXJuVHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5kIHJldHVybiB0eXBlICIgKyB0aGlz
LnJldHVyblR5cGU7CisgICAgICAgICAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lkZXJlZDpcbiIgKyBmYWlsdXJl
cy5qb2luKCJcbiIpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IodGhpcy5v
cmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgIGxldCB0eXBlQXJndW1lbnRUeXBlID0gdHlwZUFyZ3VtZW50c1tpXTsKKyAg
ICAgICAgICAgIGxldCB0eXBlUGFyYW1ldGVyID0gb3ZlcmxvYWQuZnVuYy50eXBlUGFyYW1ldGVy
c1tpXTsKKyAgICAgICAgICAgIGlmICghKHR5cGVQYXJhbWV0ZXIgaW5zdGFuY2VvZiBDb25zdGV4
cHJUeXBlUGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmICghdHlwZVBhcmFtZXRlci50eXBlLmVxdWFsc1dpdGhDb21taXQodHlwZUFyZ3VtZW50VHlw
ZSkpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdCAiICsgdGhpcy5vcmlnaW4u
b3JpZ2luU3RyaW5nICsgIiBjb25zdGV4cHIgdHlwZSBhcmd1bWVudCBhbmQgcGFyYW1ldGVyIHR5
cGVzIG5vdCBlcXVhbDogYXJndW1lbnQgPSAiICsgdHlwZUFyZ3VtZW50VHlwZSArICIsIHBhcmFt
ZXRlciA9ICIgKyB0eXBlUGFyYW1ldGVyLnR5cGUpOworICAgICAgICB9CisgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgdGhpcy5hcmd1bWVudFR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBsZXQgYXJndW1lbnRUeXBlID0gdGhpcy5hcmd1bWVudFR5cGVzW2ldOworICAgICAgICAg
ICAgbGV0IHBhcmFtZXRlclR5cGUgPSBvdmVybG9hZC5mdW5jLnBhcmFtZXRlcnNbaV0udHlwZS5z
dWJzdGl0dXRlVG9VbmlmaWNhdGlvbigKKyAgICAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5
cGVQYXJhbWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOworICAgICAgICAgICAg
bGV0IHJlc3VsdCA9IGFyZ3VtZW50VHlwZS5lcXVhbHNXaXRoQ29tbWl0KHBhcmFtZXRlclR5cGUp
OworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJBdCAiICsgdGhpcy5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIiBhcmd1bWVudCBhbmQgcGFy
YW1ldGVyIHR5cGVzIG5vdCBlcXVhbCBhZnRlciB0eXBlIGFyZ3VtZW50IHN1YnN0aXR1dGlvbjog
YXJndW1lbnQgPSAiICsgYXJndW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHBhcmFtZXRl
clR5cGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUb092ZXJsb2Fk
KG92ZXJsb2FkKTsKKyAgICB9CisgICAgCisgICAgcmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQp
CiAgICAgewogICAgICAgICB0aGlzLmZ1bmMgPSBvdmVybG9hZC5mdW5jOwogICAgICAgICB0aGlz
LmFjdHVhbFR5cGVBcmd1bWVudHMgPSBvdmVybG9hZC50eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJn
dW1lbnQgPT4gdHlwZUFyZ3VtZW50IGluc3RhbmNlb2YgVHlwZSA/IHR5cGVBcmd1bWVudC52aXNp
dChuZXcgQXV0b1dyYXBwZXIoKSkgOiB0eXBlQXJndW1lbnQpOwogICAgICAgICBsZXQgcmVzdWx0
ID0gb3ZlcmxvYWQuZnVuYy5yZXR1cm5UeXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAogICAg
ICAgICAgICAgb3ZlcmxvYWQuZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRp
b25Db250ZXh0KTsKLSAgICAgICAgdGhpcy5yZXN1bHRUeXBlID0gcmVzdWx0LnZpc2l0KG5ldyBB
dXRvV3JhcHBlcigpKTsKICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIk51bGwgcmV0dXJuIHR5cGUiKTsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnZp
c2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKKyAgICAgICAgdGhpcy5yZXN1bHRUeXBlID0gcmVzdWx0
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMs
MzAgKzQzLDE0IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICB2aXNpdFBy
b3RvY29sRGVjbChub2RlKQogICAgIHsKICAgICAgICAgZm9yIChsZXQgc2lnbmF0dXJlIG9mIG5v
ZGUuc2lnbmF0dXJlcykgewotICAgICAgICAgICAgbGV0IHNldCA9IG5ldyBTZXQoKTsKLSAgICAg
ICAgICAgIGZ1bmN0aW9uIGNvbnNpZGVyKHRoaW5nKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmICh0aGluZy5pc1VuaWZpYWJsZSkKLSAgICAgICAgICAgICAgICAgICAgc2V0LmFk
ZCh0aGluZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjbGFzcyBOb3RpY2VUeXBlVmFy
aWFibGUgZXh0ZW5kcyBWaXNpdG9yIHsKLSAgICAgICAgICAgICAgICB2aXNpdFR5cGVSZWYobm9k
ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyKG5vZGUu
dHlwZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZpc2l0VmFyaWFibGVS
ZWYobm9kZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVy
KG5vZGUudmFyaWFibGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGxldCBub3RpY2VUeXBlVmFyaWFibGUgPSBuZXcgTm90aWNlVHlwZVZhcmlhYmxlKCk7
CisgICAgICAgICAgICBsZXQgdHlwZVZhcmlhYmxlVHJhY2tlciA9IG5ldyBUeXBlVmFyaWFibGVU
cmFja2VyKCk7CiAgICAgICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXJUeXBlIG9mIHNpZ25hdHVy
ZS5wYXJhbWV0ZXJUeXBlcykKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJUeXBlLnZpc2l0KG5v
dGljZVR5cGVWYXJpYWJsZSk7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyVHlwZS52aXNpdCh0
eXBlVmFyaWFibGVUcmFja2VyKTsKICAgICAgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIg
b2Ygc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXQu
aGFzKHR5cGVQYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgIGlmICghdHlwZVZhcmlhYmxlVHJh
Y2tlci5zZXQuaGFzKHR5cGVQYXJhbWV0ZXIpKQogICAgICAgICAgICAgICAgICAgICB0aHJvdyBX
VHlwZUVycm9yKHR5cGVQYXJhbWV0ZXIub3JpZ2luLm9yaWdpblN0cmluZywgIlR5cGUgcGFyYW1l
dGVyIHRvIHByb3RvY29sIHNpZ25hdHVyZSBub3QgaW5mZXJyYWJsZSBmcm9tIHZhbHVlIHBhcmFt
ZXRlcnMiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghc2V0Lmhhcyhub2RlLnR5
cGVWYXJpYWJsZSkpCisgICAgICAgICAgICBpZiAoIXR5cGVWYXJpYWJsZVRyYWNrZXIuc2V0Lmhh
cyhub2RlLnR5cGVWYXJpYWJsZSkpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Ioc2lnbmF0dXJlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJQcm90b2NvbCdzIHR5cGUgdmFyaWFi
bGUgKCIgKyBub2RlLm5hbWUgKyAiKSBub3QgbWVudGlvbmVkIGluIHNpZ25hdHVyZTogIiArIHNp
Z25hdHVyZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDEsNiArMTI1LDMyIEBAIGNsYXNzIENo
ZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgcmV0dXJuIGxoc1R5cGU7CiAgICAgfQog
ICAgIAorICAgIHZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gbm9kZS50YXJnZXQudmlzaXQodGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0UmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLmxW
YWx1ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZywgIkxIUyBvZiByZWFkLW1vZGlmeS13cml0ZSBpcyBub3QgYW4gTFZh
bHVlOiAiICsgbm9kZS5sVmFsZSk7CisgICAgICAgIGxldCBsaHNUeXBlID0gbm9kZS5sVmFsdWUu
dmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUub2xkVmFsdWVWYXIudHlwZSA9IGxoc1R5cGU7Cisg
ICAgICAgIG5vZGUubmV3VmFsdWVWYXIudHlwZSA9IGxoc1R5cGU7CisgICAgICAgIG5vZGUub2xk
VmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUubmV3VmFsdWVWYXIudmlzaXQodGhp
cyk7CisgICAgICAgIGxldCBuZXdWYWx1ZVR5cGUgPSBub2RlLm5ld1ZhbHVlRXhwLnZpc2l0KHRo
aXMpOworICAgICAgICBpZiAoIWxoc1R5cGUuZXF1YWxzV2l0aENvbW1pdChuZXdWYWx1ZVR5cGUp
KQorICAgICAgICAgICAgcmV0dXJuIG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0
cmluZywgIlR5cGUgbWlzbWF0Y2ggaW4gcmVhZC1tb2RpZnktd3JpdGU6ICIgKyBsaHNUeXBlICsg
IiB2ZXJzdXMgIiArIG5ld1ZhbHVlVHlwZSk7CisgICAgICAgIHJldHVybiBub2RlLnJlc3VsdEV4
cC52aXNpdCh0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShu
b2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLnR5cGUpCisgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkFub255bW91cyB2YXJpYWJsZSBtdXN0IGtub3cgdHlwZSBiZWZvcmUgZmlyc3Qg
YXBwZWFyYW5jZSIpOworICAgIH0KKyAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lv
bihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHR5cGUgPSBub2RlLnB0ci52aXNpdCh0aGlzKS51
bmlmeU5vZGU7CkBAIC0xNjUsNyArMTc1LDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0
b3IgewogICAgIHsKICAgICAgICAgbGV0IGVsZW1lbnRUeXBlID0gbm9kZS5sVmFsdWUudmlzaXQo
dGhpcykudW5pZnlOb2RlOwogICAgICAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBQdHJU
eXBlKSB7Ci0gICAgICAgICAgICBub2RlLmJlY29tZUNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVz
c2lvbigpOworICAgICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbnZlcnRQdHJUb0FycmF5UmVm
RXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUpKTsKICAgICAgICAgICAgIHJldHVy
biBuZXcgQXJyYXlSZWZUeXBlKG5vZGUub3JpZ2luLCBlbGVtZW50VHlwZS5hZGRyZXNzU3BhY2Us
IGVsZW1lbnRUeXBlLmVsZW1lbnRUeXBlKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4OSwz
NSArMTk5LDg3IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJTaG91bGQgbm90IGV4aXN0IHlldC4iKTsKICAgICB9CiAgICAgCi0gICAg
dmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgX2ZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nl
c3Mobm9kZSwgYmFzZVR5cGUsIGV4dHJhQXJncywgZXh0cmFBcmdUeXBlcykKICAgICB7Ci0gICAg
ICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcykudW5pZnlOb2RlOwot
ICAgICAgICAKLSAgICAgICAgbm9kZS5zdHJ1Y3RUeXBlID0gc3RydWN0VHlwZS52aXNpdChuZXcg
QXV0b1dyYXBwZXIoKSk7CisgICAgICAgIGJhc2VUeXBlID0gYmFzZVR5cGUudmlzaXQobmV3IEF1
dG9XcmFwcGVyKCkpCisgICAgICAgIG5vZGUuYmFzZVR5cGUgPSBiYXNlVHlwZTsKICAgICAgICAg
Ci0gICAgICAgIGxldCB1bmRlcmx5aW5nU3RydWN0ID0gc3RydWN0VHlwZTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikKLSAgICAgICAgICAgIHVu
ZGVybHlpbmdTdHJ1Y3QgPSB1bmRlcmx5aW5nU3RydWN0LnR5cGU7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoISh1bmRlcmx5aW5nU3RydWN0IGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAg
ICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJPcGVy
YW5kIHRvIGRvdCBleHByZXNzaW9uIGlzIG5vdCBhIHN0cnVjdCB0eXBlOiAiICsgc3RydWN0VHlw
ZSk7CisgICAgICAgIC8vIFN1Y2ggYSB0eXBlIG11c3QgZXhpc3QuIFRoaXMgbWF5IHRocm93IGlm
IGl0IGRvZXNuJ3QuCisgICAgICAgIGxldCB0eXBlRm9yQW5kID0gYmFzZVR5cGUuYXJndW1lbnRU
eXBlRm9yQW5kT3ZlcmxvYWQobm9kZS5vcmlnaW4pOworICAgICAgICBpZiAoIXR5cGVGb3JBbmQp
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlwZUZvckFuZCIpOwor
ICAgICAgICAKKyAgICAgICAgbGV0IGVycm9yRm9yR2V0OworICAgICAgICBsZXQgZXJyb3JGb3JB
bmQ7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IENh
bGxFeHByZXNzaW9uLnJlc29sdmUoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUu
cG9zc2libGVHZXRPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRl
cnMsCisgICAgICAgICAgICAgICAgbm9kZS5nZXRGdW5jTmFtZSwgW10sIFtub2RlLmJhc2UsIC4u
LmV4dHJhQXJnc10sIFtiYXNlVHlwZSwgLi4uZXh0cmFBcmdUeXBlc10sIG51bGwpOworICAgICAg
ICAgICAgbm9kZS5jYWxsRm9yR2V0ID0gcmVzdWx0LmNhbGw7CisgICAgICAgICAgICBub2RlLnJl
c3VsdFR5cGVGb3JHZXQgPSByZXN1bHQucmVzdWx0VHlwZTsKKyAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAg
ICAgICAgIHRocm93IGU7CisgICAgICAgICAgICBlcnJvckZvckdldCA9IGU7CisgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikgCi0g
ICAgICAgICAgICB1bmRlcmx5aW5nU3RydWN0ID0gdW5kZXJseWluZ1N0cnVjdC5pbnN0YW50aWF0
ZShzdHJ1Y3RUeXBlLnR5cGVBcmd1bWVudHMsICJzaGFsbG93Iik7CisgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICBsZXQgYmFzZUZvckFuZCA9IGJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3Zlcmxv
YWQobm9kZS5vcmlnaW4sIG5vZGUuYmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxl
dCByZXN1bHQgPSBDYWxsRXhwcmVzc2lvbi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUu
b3JpZ2luLCBub2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50
LnR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgIG5vZGUuYW5kRnVuY05hbWUsIFtdLCBb
YmFzZUZvckFuZCwgLi4uZXh0cmFBcmdzXSwgW3R5cGVGb3JBbmQsIC4uLmV4dHJhQXJnVHlwZXNd
LAorICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAgICAgbm9kZS5jYWxsRm9yQW5kID0g
cmVzdWx0LmNhbGw7CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JBbmQgPSByZXN1bHQu
cmVzdWx0VHlwZS51bmlmeU5vZGUucmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChub2RlLm9yaWdp
bik7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2Vv
ZiBXVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgZXJy
b3JGb3JBbmQgPSBlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGUucmVz
dWx0VHlwZUZvckdldCAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yQW5kKSB7CisgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcigKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsCisgICAgICAgICAgICAgICAgIkNhbm5vdCByZXNvbHZlIGFjY2VzczsgdHJpZWQgYnkt
dmFsdWU6XG4iICsKKyAgICAgICAgICAgICAgICBlcnJvckZvckdldC5tZXNzYWdlICsgIlxuIiAr
CisgICAgICAgICAgICAgICAgImFuZCB0cmllZCBieS1wb2ludGVyOlxuIiArCisgICAgICAgICAg
ICAgICAgZXJyb3JGb3JBbmQubWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChub2RlLnJlc3VsdFR5cGVGb3JHZXQgJiYgbm9kZS5yZXN1bHRUeXBlRm9yQW5kCisgICAg
ICAgICAgICAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yR2V0LmVxdWFscyhub2RlLnJlc3VsdFR5cGVG
b3JBbmQpKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3Jp
Z2luU3RyaW5nLCAiUmVzdWx0IHR5cGUgcmVzb2x2ZWQgYnktdmFsdWUgKCIgKyBub2RlLnJlc3Vs
dFR5cGVGb3JHZXQgKyAiKSBkb2VzIG5vdCBtYXRjaCByZXN1bHQgdHlwZSByZXNvbHZlZCBieS1w
b2ludGVyICgiICsgbm9kZS5yZXN1bHRUeXBlRm9yQW5kICsgIikiKTsKKyAgICAgICAgCisgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVzb2x2
ZSgKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZUdldE92ZXJsb2Fk
cywgdGhpcy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAg
ICBub2RlLnNldEZ1bmNOYW1lLCBbXSwgW25vZGUuYmFzZSwgLi4uZXh0cmFBcmdzLCBudWxsXSwg
W2Jhc2VUeXBlLCAuLi5leHRyYUFyZ1R5cGVzLCBub2RlLnJlc3VsdFR5cGVdLCBudWxsKTsKKyAg
ICAgICAgICAgIG5vZGUuY2FsbEZvclNldCA9IHJlc3VsdC5jYWxsOworICAgICAgICAgICAgaWYg
KCFyZXN1bHQucmVzdWx0VHlwZS5lcXVhbHMoYmFzZVR5cGUpKQorICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlJlc3VsdCB0eXBl
IG9mIHNldHRlciAiICsgcmVzdWx0LmNhbGwuZnVuYyArICIgaXMgbm90IHRoZSBiYXNlIHR5cGUg
IiArIGJhc2VUeXBlKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKCEo
ZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAg
ICAgICAgICBub2RlLmVycm9yRm9yU2V0ID0gZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgbGV0IGZpZWxkID0gdW5kZXJseWluZ1N0cnVjdC5maWVsZEJ5TmFtZShub2RlLmZpZWxkTmFt
ZSk7Ci0gICAgICAgIGlmICghZmllbGQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJv
cihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJGaWVsZCAiICsgbm9kZS5maWVsZE5hbWUgKyAi
IG5vdCBmb3VuZCBpbiAiICsgc3RydWN0VHlwZSk7Ci0gICAgICAgIHJldHVybiBmaWVsZC50eXBl
OworICAgICAgICByZXR1cm4gbm9kZS5yZXN1bHRUeXBlOwogICAgIH0KICAgICAKLSAgICB2aXNp
dExldEV4cHJlc3Npb24obm9kZSkKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7
Ci0gICAgICAgIG5vZGUudHlwZSA9IG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAg
IGlmICghbm9kZS50eXBlKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEaWQgbm90IGdl
dCB0eXBlIGZvciBub2RlOiAiICsgbm9kZS5hcmd1bWVudCk7Ci0gICAgICAgIHJldHVybiBub2Rl
LmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3Qu
dmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoVmlzaXRp
bmdQcm9wZXJ0eUFjY2Vzcyhub2RlLCBzdHJ1Y3RUeXBlLCBbXSwgW10pOworICAgIH0KKyAgICAK
KyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGFycmF5
VHlwZSA9IG5vZGUuYXJyYXkudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBsZXQgaW5k
ZXhUeXBlID0gbm9kZS5pbmRleC52aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0aGlzLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIGFycmF5VHlwZSwgW25v
ZGUuaW5kZXhdLCBbaW5kZXhUeXBlXSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0VmFyaWFibGVS
ZWYobm9kZSkKQEAgLTMyMiwxMCArMzg0LDEwIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNp
dG9yIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGV4cHJlc3Npb24udmlzaXQodGhpcyk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lv
bihub2RlKQogICAgIHsKLSAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGVzID0gbm9kZS50eXBl
QXJndW1lbnRzLm1hcCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKTsK
KyAgICAgICAgbGV0IHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVB
cmd1bWVudCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhpcykpOwogICAgICAgICBsZXQgYXJndW1l
bnRUeXBlcyA9IG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiB7CiAgICAgICAgICAg
ICBsZXQgbmV3QXJndW1lbnQgPSBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgICAgIGlm
ICghbmV3QXJndW1lbnQpCkBAIC0zMzMsNzcgKzM5NSwxMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVu
ZHMgVmlzaXRvciB7CiAgICAgICAgICAgICByZXR1cm4gbmV3QXJndW1lbnQudmlzaXQobmV3IEF1
dG9XcmFwcGVyKCkpOwogICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIC8vIEhlcmUgd2Ug
bmVlZCB0byBoYW5kbGUgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yJltdIGlzIGNhbGxlZCB3aXRo
IGEgdHlwZSB0aGF0IGlzbid0IHN1ZmZpY2llbnRseQotICAgICAgICAvLyByZWZlcmVuY2V5Lgot
ICAgICAgICBpZiAobm9kZS5uYW1lID09ICJvcGVyYXRvciZbXSIpIHsKLSAgICAgICAgICAgIGxl
dCBhcmdUeXBlID0gYXJndW1lbnRUeXBlc1swXS51bmlmeU5vZGU7Ci0gICAgICAgICAgICBpZiAo
YXJnVHlwZSBpbnN0YW5jZW9mIFB0clR5cGUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdU
eXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMg
bm90IHZhbGlkIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcmdUeXBlIGluc3Rh
bmNlb2YgQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0g
PSBuZXcgTWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5hcmd1bWVudExp
c3RbMF0pOwotICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdLm51bUVsZW1lbnRz
ID0gYXJnVHlwZS5udW1FbGVtZW50czsKLSAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBd
ID0gbmV3IEFycmF5UmVmVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ1R5cGUuZWxlbWVu
dFR5cGUpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghKGFyZ1R5cGUgaW5zdGFuY2VvZiBBcnJh
eVJlZlR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcg
TWFrZVB0ckV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0WzBdKTsKLSAg
ICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IFB0clR5cGUobm9kZS5vcmlnaW4s
ICJ0aHJlYWQiLCBhcmd1bWVudFR5cGVzWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKICAgICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlczsKICAg
ICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKICAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52
aXNpdCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7Ci0gICAg
ICAgIGxldCBmYWlsdXJlcyA9IFtdOwotICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9m
IHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGlm
ICghKHR5cGVQYXJhbWV0ZXIgaW5zdGFuY2VvZiBUeXBlVmFyaWFibGUpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnByb3RvY29sKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbGV0IHNpZ25hdHVyZXMgPQot
ICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIucHJvdG9jb2wucHJvdG9jb2xEZWNsLnNpZ25h
dHVyZXNCeU5hbWVXaXRoVHlwZVZhcmlhYmxlKG5vZGUubmFtZSwgdHlwZVBhcmFtZXRlcik7Ci0g
ICAgICAgICAgICBpZiAoIXNpZ25hdHVyZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgbm9k
ZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVyblR5cGUpOwotICAgICAg
ICAgICAgaWYgKG92ZXJsb2FkLmZ1bmMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBmYWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKLSAgICAgICAgICAgIG92
ZXJsb2FkID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW92ZXJsb2FkKSB7Ci0gICAg
ICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCi0gICAgICAgICAgICAgICAg
bm9kZS5wb3NzaWJsZU92ZXJsb2Fkcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVz
LCBub2RlLnJldHVyblR5cGUpOwotICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7Ci0g
ICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Ci0gICAg
ICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxs
IHdpdGggIjsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCkK
LSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyBub2Rl
LnR5cGVBcmd1bWVudHMgKyAiPiBhbmQgIjsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJh
cmd1bWVudCB0eXBlcyAoIiArIGFyZ3VtZW50VHlwZXMgKyAiKSI7Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUucmV0dXJuVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5k
IHJldHVybiB0eXBlICIgKyBub2RlLnJldHVyblR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKGZh
aWx1cmVzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29u
c2lkZXJlZDpcbiIgKyBmYWlsdXJlcy5qb2luKCJcbiIpCi0gICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1
bWVudFR5cGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgdHlwZUFyZ3VtZW50VHlw
ZSA9IHR5cGVBcmd1bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIg
PSBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKCEodHlw
ZVBhcmFtZXRlciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1
YWxzV2l0aENvbW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkF0ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0
eXBlIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIg
KyB0eXBlQXJndW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlw
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnRUeXBlID0gYXJndW1lbnRU
eXBlc1tpXTsKLSAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gb3ZlcmxvYWQuZnVuYy5w
YXJhbWV0ZXJzW2ldLnR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCi0gICAgICAgICAgICAg
ICAgb3ZlcmxvYWQuZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250
ZXh0KTsKLSAgICAgICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVudFR5cGUuZXF1YWxzV2l0aENv
bW1pdChwYXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyAr
ICIgYXJndW1lbnQgYW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0ZXIgdHlwZSBhcmd1
bWVudCBzdWJzdGl0dXRpb246IGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50VHlwZSArICIsIHBhcmFt
ZXRlciA9ICIgKyBwYXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm9k
ZS5yZXNvbHZlKG92ZXJsb2FkKTsKKworICAgICAgICBsZXQgcmVzdWx0ID0gbm9kZS5yZXNvbHZl
KG5vZGUucG9zc2libGVPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFt
ZXRlcnMsIHR5cGVBcmd1bWVudHMpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIH0K
IApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9u
LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9E
b3RFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KICJ1
c2Ugc3RyaWN0IjsKIAotY2xhc3MgRG90RXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewor
Y2xhc3MgRG90RXhwcmVzc2lvbiBleHRlbmRzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiB7CiAg
ICAgY29uc3RydWN0b3Iob3JpZ2luLCBzdHJ1Y3QsIGZpZWxkTmFtZSkKICAgICB7CiAgICAgICAg
IHN1cGVyKG9yaWdpbik7CkBAIC0zMiwxMSArMzIsMTYgQEAgY2xhc3MgRG90RXhwcmVzc2lvbiBl
eHRlbmRzIEV4cHJlc3Npb24gewogICAgICAgICB0aGlzLl9maWVsZE5hbWUgPSBmaWVsZE5hbWU7
CiAgICAgfQogICAgIAorICAgIGdldCBiYXNlKCkgeyByZXR1cm4gdGhpcy5zdHJ1Y3Q7IH0KICAg
ICBnZXQgc3RydWN0KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0OyB9CiAgICAgZ2V0IGZpZWxkTmFt
ZSgpIHsgcmV0dXJuIHRoaXMuX2ZpZWxkTmFtZTsgfQogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0
dXJuIHRoaXMuc3RydWN0LmlzTFZhbHVlOyB9CiAgICAgZ2V0IGFkZHJlc3NTcGFjZSgpIHsgcmV0
dXJuIHRoaXMuc3RydWN0LmFkZHJlc3NTcGFjZTsgfQogICAgIAorICAgIGdldCBnZXRGdW5jTmFt
ZSgpIHsgcmV0dXJuICJvcGVyYXRvci4iICsgdGhpcy5maWVsZE5hbWU7IH0KKyAgICBnZXQgYW5k
RnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0b3ImLiIgKyB0aGlzLmZpZWxkTmFtZTsgfQorICAg
IGdldCBzZXRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvci4iICsgdGhpcy5maWVsZE5hbWUg
KyAiPSI7IH0KKyAgICAKICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gIigi
ICsgdGhpcy5zdHJ1Y3QgKyAiLiIgKyB0aGlzLmZpZWxkTmFtZSArICIpIjsKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtNjAsMTIgKzYwLDE0IEBAIGNsYXNzIEVCdWZmZXIgewogICAgIGdldChpbmRleCkKICAgICB7
CiAgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5fYXJyYXkubGVuZ3RoKQot
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJvdXQgb2YgYm91bmRzIGJ1ZmZlciBhY2Nlc3Mi
KTsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiT3V0IG9mIGJvdW5kcyBidWZmZXIgYWNj
ZXNzIChidWZmZXIgPSAiICsgdGhpcyArICIsIGluZGV4ID0gIiArIGluZGV4ICsgIikiKTsKICAg
ICAgICAgcmV0dXJuIHRoaXMuX2FycmF5W2luZGV4XTsKICAgICB9CiAgICAgCiAgICAgc2V0KGlu
ZGV4LCB2YWx1ZSkKICAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhp
cy5fYXJyYXkubGVuZ3RoKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJvdXQgb2YgYm91
bmRzIGJ1ZmZlciBhY2Nlc3MgKGJ1ZmZlciA9ICIgKyB0aGlzICsgIiwgaW5kZXggPSAiICsgaW5k
ZXggKyAiKSIpOwogICAgICAgICB0aGlzLl9hcnJheVtpbmRleF0gPSB2YWx1ZTsKICAgICB9CiAg
ICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVp
bGRlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRUJ1ZmZlckJ1aWxkZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMSArMTA0LDkgQEAg
Y2xhc3MgRUJ1ZmZlckJ1aWxkZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgc3VwZXIudmlz
aXRMb2dpY2FsTm90KG5vZGUpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24o
bm9kZSkKKyAgICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewogICAgICAgICB0
aGlzLl9jcmVhdGVFUHRyRm9yTm9kZShub2RlKTsKLSAgICAgICAgbm9kZS5hcmd1bWVudC52aXNp
dCh0aGlzKTsKLSAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKICAg
ICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAt
MTAyLDYgKzEwMiwxMSBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgcmV0dXJuIHRhcmdldDsKICAgICB9CiAgICAgCisgICAgdmlzaXRJZGVudGl0eUV4cHJlc3Np
b24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlLnRhcmdldC52aXNpdCh0aGlzKTsK
KyAgICB9CisgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKICAgICB7
CiAgICAgICAgIGxldCBwdHIgPSBub2RlLnB0ci52aXNpdCh0aGlzKS5sb2FkVmFsdWUoKTsKQEAg
LTExMiw3ICsxMTcsOCBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAK
ICAgICB2aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4g
bm9kZS5lUHRyLmJveChub2RlLmxWYWx1ZS52aXNpdCh0aGlzKSk7CisgICAgICAgIGxldCBwdHIg
PSBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZVB0ci5ib3go
cHRyKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUp
CkBAIC0xMjUsMTIgKzEzMSw2IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3Igewog
ICAgICAgICByZXR1cm4gbm9kZS5lUHRyLmJveChuZXcgRUFycmF5UmVmKG5vZGUubFZhbHVlLnZp
c2l0KHRoaXMpLmxvYWRWYWx1ZSgpLCAxKSk7CiAgICAgfQogICAgIAotICAgIHZpc2l0RG90RXhw
cmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgbGV0IHN0cnVjdFB0ciA9IG5vZGUuc3RydWN0
LnZpc2l0KHRoaXMpOwotICAgICAgICByZXR1cm4gc3RydWN0UHRyLnBsdXMobm9kZS5maWVsZC5v
ZmZzZXQpOwotICAgIH0KLSAgICAKICAgICB2aXNpdENvbW1hRXhwcmVzc2lvbihub2RlKQogICAg
IHsKICAgICAgICAgbGV0IHJlc3VsdDsKQEAgLTIzMSwxMCArMjMxLDkgQEAgY2xhc3MgRXZhbHVh
dG9yIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHRocm93IENvbnRpbnVlRXhjZXB0aW9uOwog
ICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkKKyAgICB2aXNpdEFub255
bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewotICAgICAgICBub2RlLmVQdHIuY29weUZyb20obm9k
ZS5hcmd1bWVudC52aXNpdCh0aGlzKSwgbm9kZS50eXBlLnNpemUpOwotICAgICAgICByZXR1cm4g
bm9kZS5ib2R5LnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLnR5cGUucG9wdWxhdGVEZWZhdWx0
VmFsdWUobm9kZS5lUHRyLmJ1ZmZlciwgbm9kZS5lUHRyLm9mZnNldCk7CiAgICAgfQogICAgIAog
ICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRXhwcmVzc2lvbkZpbmRlci5qcwkocmV2aXNpb24gMjIyMTIzKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXhwcmVzc2lvbkZpbmRlci5qcwkod29y
a2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTYgQEAgY2xhc3MgRXhwcmVzc2lvbkZpbmRlciBleHRl
bmRzIFZpc2l0b3IgewogICAgICAgICB0aGlzLl9jYWxsYmFjayhub2RlKTsKICAgICB9CiAgICAg
CisgICAgdmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAg
ICB0aGlzLl9jYWxsYmFjayhub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJZGVudGl0eUV4
cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUpOworICAg
IH0KKyAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICB0
aGlzLl9jYWxsYmFjayhub2RlKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0Z1bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVu
Yy5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTIgQEAgY2xhc3MgRnVuYyBleHRl
bmRzIE5vZGUgewogICAgIHsKICAgICAgICAgaWYgKCEob3JpZ2luIGluc3RhbmNlb2YgTGV4ZXJU
b2tlbikpCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBvcmlnaW46ICIgKyBvcmln
aW4pOworICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykgeworICAgICAg
ICAgICAgaWYgKCFwYXJhbWV0ZXIpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJO
dWxsIHBhcmFtZXRlciIpOworICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXIudHlwZSkKKyAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcGFyYW1ldGVyIHR5cGUiKTsKKyAgICAg
ICAgfQogICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CiAg
ICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRnVuY0luc3RhbnRpYXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC03NSwxNiArNzUsMTkgQEAgY2xhc3MgRnVuY0luc3RhbnRpYXRvciB7CiAgICAg
ICAgICAgICAgICAgICAgIGxldCBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwocmVzdWx0
LnBvc3NpYmxlT3ZlcmxvYWRzLCByZXN1bHQudHlwZUFyZ3VtZW50cywgcmVzdWx0LmFyZ3VtZW50
VHlwZXMsIHJlc3VsdC5yZXR1cm5UeXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKQogICAgICAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgcmVzb2x2ZSBwcm90b2NvbCBzaWduYXR1cmUgZnVu
Y3Rpb24gY2FsbCBkdXJpbmcgaW5zdGFudGlhdGlvbjogIiArIHJlc3VsdC5mdW5jICsgKG92ZXJs
b2FkLmZhaWx1cmVzLmxlbmd0aCA/ICI7IHRyaWVkOlxuIiArIG92ZXJsb2FkLmZhaWx1cmVzLmpv
aW4oIlxuIikgOiAiIikpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzb2x2ZShvdmVy
bG9hZCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvbHZlVG9PdmVybG9hZChvdmVy
bG9hZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQuZnVuYy5pc05hdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm5hdGl2ZUZ1bmNJbnN0YW5jZSA9IHRoaXNJbnN0YW50aWF0b3IuZ2V0VW5pcXVlKHJlc3VsdC5m
dW5jLCByZXN1bHQuYWN0dWFsVHlwZUFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9IG5ldyBJbnN0YW50aWF0aW9uU3Vic3Rp
dHV0aW9uKGZ1bmMudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOwogICAgICAgICAKLSAg
ICAgICAgY2xhc3MgSW5zdGFudGlhdGUgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CisgICAgICAgIGNs
YXNzIEluc3RhbnRpYXRlIHsKICAgICAgICAgICAgIHZpc2l0RnVuY0RlZihmdW5jKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY0RlZigKQEAgLTEwMSw3ICsx
MDQsOCBAQCBjbGFzcyBGdW5jSW5zdGFudGlhdG9yIHsKICAgICAgICAgICAgICAgICAgICAgZnVu
YywKICAgICAgICAgICAgICAgICAgICAgZnVuYy5yZXR1cm5UeXBlLnZpc2l0KHN1YnN0aXR1dGlv
biksCiAgICAgICAgICAgICAgICAgICAgIGZ1bmMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+
IHBhcmFtZXRlci52aXNpdChzdWJzdGl0dXRpb24pKSwKLSAgICAgICAgICAgICAgICAgICAgZnVu
Yy5pc0Nhc3QpOworICAgICAgICAgICAgICAgICAgICBmdW5jLmlzQ2FzdCwKKyAgICAgICAgICAg
ICAgICAgICAgZnVuYy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uKHN1YnN0aXR1dGlvbikpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGxldCByZXN1bHRpbmdGdW5jID0gZnVu
Yy52aXNpdChuZXcgSW5zdGFudGlhdGUoKSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JZGVudGl0eUV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSWRlbnRpdHlFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIElkZW50aXR5RXhwcmVzc2lv
biBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKHRhcmdldCkKKyAgICB7Cisg
ICAgICAgIHN1cGVyKHRhcmdldC5vcmlnaW4pOworICAgICAgICB0aGlzLl90YXJnZXQgPSB0YXJn
ZXQ7CisgICAgfQorICAgIAorICAgIGdldCB0YXJnZXQoKSB7IHJldHVybiB0aGlzLl90YXJnZXQ7
IH0KKyAgICAKKyAgICBnZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy50YXJnZXQudW5pZnlO
b2RlOyB9CisgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdGhpcy50YXJnZXQuaXNDb25z
dGV4cHI7IH0KKyAgICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0aGlzLnRhcmdldC5pc0xWYWx1
ZTsgfQorICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiB0aGlzLnRhcmdldC5hZGRyZXNz
U3BhY2U7IH0KKyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIigi
ICsgdGhpcy50YXJnZXQgKyAiKSI7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9JbmRleEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZGV4RXhwcmVzc2lvbi5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIEluZGV4RXhwcmVzc2lvbiBleHRl
bmRzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBh
cnJheSwgaW5kZXgpCisgICAgeworICAgICAgICBzdXBlcihvcmlnaW4pOworICAgICAgICB0aGlz
Ll9hcnJheSA9IGFycmF5OworICAgICAgICB0aGlzLl9pbmRleCA9IGluZGV4OworICAgIH0KKyAg
ICAKKyAgICBnZXQgYmFzZSgpIHsgcmV0dXJuIHRoaXMuYXJyYXk7IH0KKyAgICBnZXQgYXJyYXko
KSB7IHJldHVybiB0aGlzLl9hcnJheTsgfQorICAgIGdldCBpbmRleCgpIHsgcmV0dXJuIHRoaXMu
X2luZGV4OyB9CisgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gdGhpcy5hcnJheS5pc0xWYWx1
ZTsgfQorICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiB0aGlzLmFycmF5LmFkZHJlc3NT
cGFjZTsgfQorICAgIAorICAgIGdldCBnZXRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvcltd
IjsgfQorICAgIGdldCBhbmRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvciZbXSI7IH0KKyAg
ICBnZXQgc2V0RnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0b3JbXT0iOyB9CisKKyAgICB0b1N0
cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIigiICsgdGhpcy5hcnJheSArICJbIiArIHRo
aXMuaW5kZXggKyAiXSkiOworICAgIH0KK30KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzCShyZXZpc2lvbiAyMjIxMjMpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVzRm9yQ2FsbC5qcwkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBmdW5jdGlvbiBpbmZlclR5cGVzRm9yQ2FsbChm
dW5jLCB0eXBlQXJnCiAgICAgICAgIGlmICghYXJndW1lbnRUeXBlc1tpXSkKICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiTnVsbCBhcmd1bWVudCB0eXBlIGF0IGkgPSAiICsgaSk7CiAgICAg
ICAgIGlmICghYXJndW1lbnRUeXBlc1tpXS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIGZ1bmMu
cGFyYW1ldGVyc1tpXS50eXBlKSkKLSAgICAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92
ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIkFyZ3VtZW50ICMiICsgKGkgKyAxKSArICIg
IiArIChmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSA/ICJmb3IgcGFyYW1ldGVyICIgKyBmdW5jLnBh
cmFtZXRlcnNbaV0ubmFtZSA6ICIiKSArICIgZG9lcyBub3QgbWF0Y2ggKHBhc3NlZCAiICsgYXJn
dW1lbnRUeXBlc1tpXSArICIsIHJlcXVpcmUgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS50eXBlICsg
IikiKX07CisgICAgICAgICAgICByZXR1cm4ge2ZhaWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRp
b25GYWlsdXJlKGZ1bmMsICJBcmd1bWVudCAjIiArIChpICsgMSkgKyAiICIgKyAoZnVuYy5wYXJh
bWV0ZXJzW2ldLm5hbWUgPyAiZm9yIHBhcmFtZXRlciAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLm5h
bWUgKyAiICIgOiAiIikgKyAiZG9lcyBub3QgbWF0Y2ggKHBhc3NlZCAiICsgYXJndW1lbnRUeXBl
c1tpXSArICIsIHJlcXVpcmUgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS50eXBlICsgIikiKX07CiAg
ICAgfQogICAgIGlmIChyZXR1cm5UeXBlICYmICFyZXR1cm5UeXBlLnVuaWZ5KHVuaWZpY2F0aW9u
Q29udGV4dCwgZnVuYy5yZXR1cm5UeXBlKSkKICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcg
T3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiUmV0dXJuIHR5cGUgIiArIGZ1bmMucmV0
dXJuVHlwZSArICIgZG9lcyBub3QgbWF0Y2ggIiArIHJldHVyblR5cGUpfTsKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMzIsMjQgKzMyLDE1IEBAIGNsYXNzIElubGluZXIgZXh0ZW5kcyBSZXdyaXRlciB7CiAgICAg
ICAgIHRoaXMuX3Zpc2l0aW5nID0gdmlzaXRpbmc7CiAgICAgfQogICAgIAotICAgIHZpc2l0RG90
RXhwcmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0
RG90RXhwcmVzc2lvbihub2RlKTsKLSAgICAgICAgcmVzdWx0LmZpZWxkID0gcmVzdWx0LnN0cnVj
dFR5cGUudW5pZnlOb2RlLmZpZWxkQnlOYW1lKHJlc3VsdC5maWVsZE5hbWUpOwotICAgICAgICBp
ZiAocmVzdWx0LmZpZWxkLm9mZnNldCA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJVbi1sYWlkLW91dCBmaWVsZDogIiArIHJlc3VsdC5maWVsZCArICIgKGluICIgKyByZXN1
bHQuc3RydWN0VHlwZSArICIpIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1
bHQgPSBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOworICAgICAgICBpZiAocmVzdWx0
Lm5hdGl2ZUZ1bmNJbnN0YW5jZSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
IHJldHVybiB0aGlzLl92aXNpdGluZy5kb1Zpc2l0KG5vZGUuZnVuYywgKCkgPT4gewogICAgICAg
ICAgICAgbGV0IGZ1bmMgPSB0aGlzLl9wcm9ncmFtLmZ1bmNJbnN0YW50aWF0b3IuZ2V0VW5pcXVl
KHJlc3VsdC5mdW5jLCByZXN1bHQuYWN0dWFsVHlwZUFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBp
ZiAoZnVuYy5pc05hdGl2ZSkgewotICAgICAgICAgICAgICAgIHJlc3VsdC5uYXRpdmVGdW5jSW5z
dGFuY2UgPSBmdW5jOwotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoZnVuYy5pc05hdGl2ZSkKKyAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbmF0aXZlIGZ1bmM6ICIgKyBmdW5jKTsKICAgICAgICAg
ICAgIF9pbmxpbmVGdW5jdGlvbih0aGlzLl9wcm9ncmFtLCBmdW5jLCB0aGlzLl92aXNpdGluZyk7
CiAgICAgICAgICAgICBsZXQgcmVzdWx0aW5nQmxvY2sgPSBuZXcgRnVuY3Rpb25MaWtlQmxvY2so
CiAgICAgICAgICAgICAgICAgcmVzdWx0Lm9yaWdpbiwgZnVuYy5yZXR1cm5UeXBlLCByZXN1bHQu
YXJndW1lbnRMaXN0LCBmdW5jLnBhcmFtZXRlcnMsIGZ1bmMuYm9keSk7CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtlQXJyYXlSZWZFeHByZXNzaW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Np
b24uanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L01ha2VBcnJheVJlZkV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMyw2
IEBAIGNsYXNzIE1ha2VBcnJheVJlZkV4cHJlc3Npb24gZXh0ZW5kcyBFeHAKICAgICAKICAgICBn
ZXQgbFZhbHVlKCkgeyByZXR1cm4gdGhpcy5fbFZhbHVlOyB9CiAgICAgCi0gICAgYmVjb21lQ29u
dmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX19wcm90
b19fID0gQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uLnByb3RvdHlwZTsKLSAgICB9Ci0g
ICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuICJAIiArICh0aGlzLm51
bUVsZW1lbnRzID8gIjw8IiArIHRoaXMubnVtRWxlbWVudHMgKyAiPj4iIDogIiIpICsgIigiICsg
dGhpcy5sVmFsdWUgKyAiKSI7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9O
YW1lQ29udGV4dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9OYW1lQ29udGV4dC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYg
QEAgY2xhc3MgTmFtZUNvbnRleHQgewogICAgIHsKICAgICAgICAgdGhpcy5fbWFwID0gbmV3IE1h
cCgpOwogICAgICAgICB0aGlzLl9zZXQgPSBuZXcgU2V0KCk7Ci0gICAgICAgIHRoaXMuX2RlZmlu
ZWQgPSBudWxsOwogICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGVtZW50ID0gbnVsbDsKICAgICAg
ICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKICAgICAgICAgdGhpcy5faW50cmluc2ljcyA9
IG51bGw7CkBAIC02Miw3ICs2MSw3IEBAIGNsYXNzIE5hbWVDb250ZXh0IHsKICAgICAgICAgaWYg
KCF0aGluZy5uYW1lKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgaWYg
KHRoaW5nLmlzTmF0aXZlKSB7CisgICAgICAgIGlmICh0aGluZy5pc05hdGl2ZSAmJiAhdGhpbmcu
aW1wbGVtZW50YXRpb24pIHsKICAgICAgICAgICAgIGlmICghdGhpcy5faW50cmluc2ljcykKICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBmdW5jdGlvbiBpbiBhIHNjb3Bl
IHRoYXQgZG9lcyBub3QgcmVjb2duaXplIGludHJpbnNpY3MiKTsKICAgICAgICAgICAgIHRoaXMu
X2ludHJpbnNpY3MuYWRkKHRoaW5nKTsKQEAgLTExNSwzNiArMTE0LDExIEBAIGNsYXNzIE5hbWVD
b250ZXh0IHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogICAgIAotICAgIGhhbmRsZURl
ZmluaW5nKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RlZmluZWQgPSBuZXcgU2V0KCk7Ci0gICAg
fQotICAgIAotICAgIGlzRGVmaW5lZCh0aGluZykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9z
ZXQuaGFzKHRoaW5nKSkgewotICAgICAgICAgICAgcmV0dXJuICF0aGlzLl9kZWZpbmVkCi0gICAg
ICAgICAgICAgICAgfHwgdGhpcy5fZGVmaW5lZC5oYXModGhpbmcpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZSAmJiB0aGlzLl9kZWxlZ2F0ZS5pc0RlZmluZWQodGhp
bmcpOwotICAgIH0KLSAgICAKLSAgICBkZWZpbmUodGhpbmcpCi0gICAgewotICAgICAgICB0aGlz
Ll9kZWZpbmVkLmFkZCh0aGluZyk7Ci0gICAgfQotICAgIAotICAgIGRlZmluZUFsbCgpCi0gICAg
ewotICAgICAgICB0aGlzLl9kZWZpbmVkID0gbnVsbDsKLSAgICB9Ci0gICAgCiAgICAgZG9TdGF0
ZW1lbnQoc3RhdGVtZW50LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRT
dGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7CiAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgIHRoaXMu
X2N1cnJlbnRTdGF0ZW1lbnQgPSBudWxsOwotICAgICAgICB0aGlzLmRlZmluZShzdGF0ZW1lbnQp
OwogICAgIH0KICAgICAKICAgICByZWNvZ25pemVJbnRyaW5zaWNzKCkKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwkod29y
a2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDE1IEBACiAvLyBtb3JlIGNvbnZlbmllbnQgdG8gY2hl
Y2sgaGVyZSB0aGFuIGluIHRoZSBDaGVja2VyLiBUaGlzIHVzdWFsbHkgaW52b2x2ZXMgdGhpbmdz
IHRoYXQgbmVlZCB0byBiZQogLy8gY2hlY2tlZCBiZWZvcmUgVHlwZVJlZlRvVHlwZURlZlNraXBw
ZXIuCiBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKLSAgICAvLyBJdCdzIHRv
dGFsbHkgT0sgdG8gaW5zdGFudGlhdGUgdGhpcyB3aXRoIHplcm8gYXJndW1lbnRzIChpLmUuIHBh
c3NpbmcgdW5kZWZpbmVkIGZvciBib3RoIG9mCi0gICAgLy8gdGhlbSkgaWYgeW91J3JlIGNyZWF0
aW5nIGEgTmFtZVJlc29sdmVyIHRvIHZpc2l0IGEgUHJvZ3JhbS4KICAgICBjb25zdHJ1Y3Rvcihu
YW1lQ29udGV4dCkKICAgICB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX25hbWVD
b250ZXh0ID0gbmFtZUNvbnRleHQ7CiAgICAgfQotICAgIAotICAgIHZpc2l0UHJvZ3JhbShub2Rl
KQorCisgICAgZG9TdGF0ZW1lbnQoc3RhdGVtZW50KQogICAgIHsKLSAgICAgICAgbGV0IG5hbWVD
b250ZXh0ID0gbmV3IE5hbWVDb250ZXh0KHRoaXMuX25hbWVDb250ZXh0KTsKLSAgICAgICAgbmFt
ZUNvbnRleHQucHJvZ3JhbSA9IG5vZGU7Ci0gICAgICAgIG5hbWVDb250ZXh0LnJlY29nbml6ZUlu
dHJpbnNpY3MoKTsKLSAgICAgICAgbmFtZUNvbnRleHQuaGFuZGxlRGVmaW5pbmcoKTsKLSAgICAg
ICAgbm9kZS5pbnRyaW5zaWNzID0gbmFtZUNvbnRleHQuaW50cmluc2ljczsKLSAgICAgICAgZm9y
IChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKQotICAgICAgICAgICAg
bmFtZUNvbnRleHQuYWRkKHN0YXRlbWVudCk7Ci0gICAgICAgIGxldCBjaGVja2VyID0gbmV3IE5h
bWVSZXNvbHZlcihuYW1lQ29udGV4dCk7Ci0gICAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBu
b2RlLnRvcExldmVsU3RhdGVtZW50cykKLSAgICAgICAgICAgIG5hbWVDb250ZXh0LmRvU3RhdGVt
ZW50KHN0YXRlbWVudCwgKCkgPT4gc3RhdGVtZW50LnZpc2l0KGNoZWNrZXIpKTsKLSAgICAgICAg
bm9kZS5nbG9iYWxOYW1lQ29udGV4dCA9IG5hbWVDb250ZXh0OworICAgICAgICB0aGlzLl9uYW1l
Q29udGV4dC5kb1N0YXRlbWVudChzdGF0ZW1lbnQsICgpID0+IHN0YXRlbWVudC52aXNpdCh0aGlz
KSk7CiAgICAgfQogICAgIAogICAgIF92aXNpdFR5cGVQYXJhbWV0ZXJzQW5kQnVpbGROYW1lQ29u
dGV4dChub2RlKQpAQCAtMjA3LDggKzE5NSw2IEBAIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRz
IFZpc2l0b3IgewogICAgICAgICAgICAgdHlwZSA9IHRoaXMuX25hbWVDb250ZXh0LmdldChUeXBl
LCBub2RlLm5hbWUpOwogICAgICAgICAgICAgaWYgKCF0eXBlKQogICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkNvdWxkIG5vdCBm
aW5kIHR5cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX25h
bWVDb250ZXh0LmlzRGVmaW5lZCh0eXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJJbGxlZ2FsIGZvcndhcmQgdXNlIG9m
IHR5cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7CiAgICAgICAgICAgICBub2RlLnR5cGUgPSB0eXBl
OwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjMwLDcgKzIxNiw2IEBAIGNsYXNzIE5hbWVSZXNv
bHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHZpc2l0UmVmZXJlbmNlVHlwZShub2RlKQogICAg
IHsKICAgICAgICAgbGV0IG5hbWVDb250ZXh0ID0gbmV3IE5hbWVDb250ZXh0KHRoaXMuX25hbWVD
b250ZXh0KTsKLSAgICAgICAgbmFtZUNvbnRleHQuZGVmaW5lQWxsKCk7CiAgICAgICAgIG5vZGUu
ZWxlbWVudFR5cGUudmlzaXQobmV3IE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkpOwogICAgIH0K
ICAgICAKQEAgLTI1OCw2ICsyNDMsMjggQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlz
aXRvciB7CiAgICAgICAgIHN1cGVyLnZpc2l0UmV0dXJuKG5vZGUpOwogICAgIH0KICAgICAKKyAg
ICBfaGFuZGxlUHJvcGVydHlBY2Nlc3Mobm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUucG9zc2li
bGVHZXRPdmVybG9hZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgbm9kZS5nZXRGdW5j
TmFtZSk7CisgICAgICAgIG5vZGUucG9zc2libGVTZXRPdmVybG9hZHMgPSB0aGlzLl9uYW1lQ29u
dGV4dC5nZXQoRnVuYywgbm9kZS5zZXRGdW5jTmFtZSk7CisgICAgICAgIG5vZGUucG9zc2libGVB
bmRPdmVybG9hZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgbm9kZS5hbmRGdW5jTmFt
ZSk7CisKKyAgICAgICAgaWYgKCFub2RlLnBvc3NpYmxlR2V0T3ZlcmxvYWRzICYmICFub2RlLnBv
c3NpYmxlQW5kT3ZlcmxvYWRzKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGZpbmQgZWl0aGVyICIgKyBub2RlLmdldEZ1
bmNOYW1lICsgIiBvciAiICsgbm9kZS5hbmRGdW5jTmFtZSk7CisgICAgfQorICAgIAorICAgIHZp
c2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVy
dHlBY2Nlc3Mobm9kZSk7CisgICAgICAgIHN1cGVyLnZpc2l0RG90RXhwcmVzc2lvbihub2RlKTsK
KyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAg
ICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzKG5vZGUpOworICAgICAgICBzdXBlci52aXNp
dEluZGV4RXhwcmVzc2lvbihub2RlKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVz
c2lvbihub2RlKQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzb2x2ZVR5cGVBcmd1bWVudHMobm9k
ZS50eXBlQXJndW1lbnRzKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05h
dGl2ZUZ1bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
TmF0aXZlRnVuYy5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTAgQEAg
Y2xhc3MgTmF0aXZlRnVuYyBleHRlbmRzIEZ1bmMgewogICAgIHsKICAgICAgICAgc3VwZXIob3Jp
Z2luLCBuYW1lLCByZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycywgcGFyYW1ldGVycywgaXNDYXN0
KTsKICAgICAgICAgdGhpcy5pc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5pbXBs
ZW1lbnRhdGlvbiA9IG51bGw7CisgICAgICAgIHRoaXMuaW5zdGFudGlhdGVJbXBsZW1lbnRhdGlv
biA9IChzdWJzdGl0dXRpb24pID0+IHt9OworICAgICAgICB0aGlzLnZpc2l0SW1wbGVtZW50YXRp
b25EYXRhID0gKGltcGxlbWVudGF0aW9uRGF0YSwgdmlzaXRvcikgPT4gbnVsbDsKKyAgICAgICAg
dGhpcy5kaWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEgPSBpbXBsZW1lbnRhdGlv
bkRhdGEgPT4gbnVsbDsKICAgICB9CiAgICAgCiAgICAgZ2V0IGlzTmF0aXZlKCkgeyByZXR1cm4g
dHJ1ZTsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0lu
c3RhbmNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05h
dGl2ZUZ1bmNJbnN0YW5jZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSwxNCArMjUsMTYgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgTmF0aXZlRnVuY0luc3RhbmNl
IGV4dGVuZHMgRnVuYyB7Ci0gICAgY29uc3RydWN0b3IoZnVuYywgcmV0dXJuVHlwZSwgcGFyYW1l
dGVycywgaXNDYXN0KQorICAgIGNvbnN0cnVjdG9yKGZ1bmMsIHJldHVyblR5cGUsIHBhcmFtZXRl
cnMsIGlzQ2FzdCwgaW1wbGVtZW50YXRpb25EYXRhKQogICAgIHsKICAgICAgICAgc3VwZXIoZnVu
Yy5vcmlnaW4sIGZ1bmMubmFtZSwgcmV0dXJuVHlwZSwgW10sIHBhcmFtZXRlcnMsIGlzQ2FzdCk7
CiAgICAgICAgIHRoaXMuX2Z1bmMgPSBmdW5jOworICAgICAgICB0aGlzLl9pbXBsZW1lbnRhdGlv
bkRhdGEgPSBpbXBsZW1lbnRhdGlvbkRhdGE7CiAgICAgfQogICAgIAogICAgIGdldCBmdW5jKCkg
eyByZXR1cm4gdGhpcy5fZnVuYzsgfQogICAgIGdldCBpc05hdGl2ZSgpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICBnZXQgaW1wbGVtZW50YXRpb25EYXRhKCkgeyByZXR1cm4gdGhpcy5faW1wbGVtZW50
YXRpb25EYXRhOyB9CiAKICAgICB0b0RlY2xTdHJpbmcoKQogICAgIHsKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMs
MTcgQEAgY2xhc3MgTm9kZSB7CiAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IHZpc2l0RnVuYy5j
YWxsKHZpc2l0b3IsIHRoaXMpOwogICAgICAgICBpZiAoInJldHVyblZhbHVlIiBpbiB2aXNpdG9y
KQogICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB2aXNpdG9yLnJldHVyblZhbHVlOworICAgICAg
ICAKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KICAgICAKKyAgICBzdGF0aWMg
dmlzaXQobm9kZSwgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2Yg
Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiBub2RlLnZpc2l0KHZpc2l0b3IpOworICAgICAgICBy
ZXR1cm4gbm9kZTsKKyAgICB9CisgICAgCiAgICAgdW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBv
dGhlcikKICAgICB7CiAgICAgICAgIGlmICghb3RoZXIpCkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIu
anMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9ybWFs
VXNlUHJvcGVydHlSZXNvbHZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7
CisKK2NsYXNzIE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIgZXh0ZW5kcyBSZXdyaXRlciB7Cisg
ICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gc3VwZXIu
dmlzaXREb3RFeHByZXNzaW9uKG5vZGUpLnJld3JpdGVBZnRlckNsb25pbmcoKTsKKyAgICB9Cisg
ICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdXBlci52aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKS5yZXdyaXRlQWZ0ZXJDbG9uaW5nKCk7
CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwko
cmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2Uu
anMJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw5ICszMzcsOSBAQCBmdW5jdGlvbiBwYXJzZShwcm9n
cmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgIH0pOwogICAgIH0KICAgICAKLSAgICBmdW5j
dGlvbiBlbWl0SW5jcmVtZW50KHRva2VuLCBwdHIsIGV4dHJhQXJnKQorICAgIGZ1bmN0aW9uIGVt
aXRJbmNyZW1lbnQodG9rZW4sIG9sZCwgZXh0cmFBcmcpCiAgICAgewotICAgICAgICBsZXQgYXJn
cyA9IFtuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0
cikpXTsKKyAgICAgICAgbGV0IGFyZ3MgPSBbb2xkXTsKICAgICAgICAgaWYgKGV4dHJhQXJnKQog
ICAgICAgICAgICAgYXJncy5wdXNoKGV4dHJhQXJnKTsKICAgICAgICAgCkBAIC0zNTAsMjcgKzM1
MCwxNSBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAg
IGlmIChuYW1lID09ICJvcGVyYXRvciIpCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIklu
dmFsaWQgbmFtZTogIiArIG5hbWUpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5ldyBBc3Np
Z25tZW50KAotICAgICAgICAgICAgdG9rZW4sCi0gICAgICAgICAgICBuZXcgRGVyZWZlcmVuY2VF
eHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpLAotICAgICAgICAgICAgbmV3
IENhbGxFeHByZXNzaW9uKHRva2VuLCBuYW1lLCBbXSwgYXJncykpOworICAgICAgICByZXR1cm4g
bmV3IENhbGxFeHByZXNzaW9uKHRva2VuLCBuYW1lLCBbXSwgYXJncyk7CiAgICAgfQogICAgIAog
ICAgIGZ1bmN0aW9uIGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KHRva2VuLCBsZWZ0KQogICAg
IHsKLSAgICAgICAgbGV0IHB0ciA9IG5ldyBMZXRFeHByZXNzaW9uKHRva2VuKTsKLSAgICAgICAg
cHRyLmFyZ3VtZW50ID0gbmV3IE1ha2VQdHJFeHByZXNzaW9uKHRva2VuLCBsZWZ0KTsKLSAgICAg
ICAgCi0gICAgICAgIGxldCBvbGRWYWx1ZSA9IG5ldyBMZXRFeHByZXNzaW9uKHRva2VuKTsKLSAg
ICAgICAgb2xkVmFsdWUuYXJndW1lbnQgPSBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2Vu
LCBWYXJpYWJsZVJlZi53cmFwKHB0cikpOwotICAgICAgICAKLSAgICAgICAgcHRyLmJvZHkgPSBv
bGRWYWx1ZTsKLSAgICAgICAgCi0gICAgICAgIG9sZFZhbHVlLmJvZHkgPSBuZXcgQ29tbWFFeHBy
ZXNzaW9uKHRva2VuLCBbCi0gICAgICAgICAgICBlbWl0SW5jcmVtZW50KHRva2VuLCBwdHIpLAot
ICAgICAgICAgICAgVmFyaWFibGVSZWYud3JhcChvbGRWYWx1ZSkKLSAgICAgICAgXSk7Ci0gICAg
ICAgIHJldHVybiBwdHI7CisgICAgICAgIGxldCByZWFkTW9kaWZ5V3JpdGUgPSBuZXcgUmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7CisgICAgICAgIHJlYWRNb2RpZnlXcml0
ZS5uZXdWYWx1ZUV4cCA9IGVtaXRJbmNyZW1lbnQodG9rZW4sIHJlYWRNb2RpZnlXcml0ZS5vbGRW
YWx1ZVJlZigpKTsKKyAgICAgICAgcmVhZE1vZGlmeVdyaXRlLnJlc3VsdEV4cCA9IHJlYWRNb2Rp
ZnlXcml0ZS5vbGRWYWx1ZVJlZigpOworICAgICAgICByZXR1cm4gcmVhZE1vZGlmeVdyaXRlOwog
ICAgIH0KICAgICAKICAgICBmdW5jdGlvbiBwYXJzZVBvc3NpYmxlU3VmZml4KCkKQEAgLTM5NSw5
ICszODMsNyBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAg
ICAgICAgICBjYXNlICJbIjogewogICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHBhcnNlRXhw
cmVzc2lvbigpOwogICAgICAgICAgICAgICAgIGNvbnN1bWUoIl0iKTsKLSAgICAgICAgICAgICAg
ICBsZWZ0ID0gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbigKLSAgICAgICAgICAgICAgICAgICAg
dG9rZW4sCi0gICAgICAgICAgICAgICAgICAgIG5ldyBDYWxsRXhwcmVzc2lvbih0b2tlbiwgIm9w
ZXJhdG9yJltdIiwgW10sIFtsZWZ0LCBpbmRleF0pKTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0g
bmV3IEluZGV4RXhwcmVzc2lvbih0b2tlbiwgbGVmdCwgaW5kZXgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTQwOSwxMyAr
Mzk1LDEwIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAK
ICAgICBmdW5jdGlvbiBmaW5pc2hQYXJzaW5nUHJlSW5jcmVtZW50KHRva2VuLCBsZWZ0LCBleHRy
YUFyZykKICAgICB7Ci0gICAgICAgIGxldCBwdHIgPSBuZXcgTGV0RXhwcmVzc2lvbih0b2tlbik7
Ci0gICAgICAgIHB0ci5hcmd1bWVudCA9IG5ldyBNYWtlUHRyRXhwcmVzc2lvbih0b2tlbiwgbGVm
dCk7Ci0gICAgICAgIHB0ci5ib2R5ID0gbmV3IENvbW1hRXhwcmVzc2lvbih0b2tlbiwgWwotICAg
ICAgICAgICAgZW1pdEluY3JlbWVudCh0b2tlbiwgcHRyLCBleHRyYUFyZyksCi0gICAgICAgICAg
ICBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikp
Ci0gICAgICAgIF0pOwotICAgICAgICByZXR1cm4gcHRyOworICAgICAgICBsZXQgcmVhZE1vZGlm
eVdyaXRlID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24odG9rZW4sIGxlZnQpOworICAg
ICAgICByZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVFeHAgPSBlbWl0SW5jcmVtZW50KHRva2VuLCBy
ZWFkTW9kaWZ5V3JpdGUub2xkVmFsdWVSZWYoKSwgZXh0cmFBcmcpOworICAgICAgICByZWFkTW9k
aWZ5V3JpdGUucmVzdWx0RXhwID0gcmVhZE1vZGlmeVdyaXRlLm5ld1ZhbHVlUmVmKCk7CisgICAg
ICAgIHJldHVybiByZWFkTW9kaWZ5V3JpdGU7CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIHBh
cnNlUHJlSW5jcmVtZW50KCkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1By
ZXBhcmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJl
cGFyZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUHJlcGFyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDIyIEBACiBmdW5jdGlv
biBwcmVwYXJlKG9yaWdpbiwgbGluZU51bWJlck9mZnNldCwgdGV4dCkKIHsKICAgICBsZXQgcHJv
Z3JhbSA9IG5ldyBQcm9ncmFtKCk7CisgICAgCiAgICAgcGFyc2UocHJvZ3JhbSwgIi9pbnRlcm5h
bC9zdGRsaWIiLCAibmF0aXZlIiwgMjcsIHN0YW5kYXJkTGlicmFyeSk7CiAgICAgcGFyc2UocHJv
Z3JhbSwgb3JpZ2luLCAidXNlciIsIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpOwotICAgIHJlc29s
dmVOYW1lcyhwcm9ncmFtKTsKLSAgICByZXNvbHZlVHlwZURlZnMocHJvZ3JhbSk7CisgICAgCisg
ICAgbGV0IG5hbWVSZXNvbHZlciA9IGNyZWF0ZU5hbWVSZXNvbHZlcihwcm9ncmFtKTsKKyAgICBy
ZXNvbHZlTmFtZXNJblR5cGVzKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CisgICAgcmVzb2x2ZU5h
bWVzSW5Qcm90b2NvbHMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNvbHZlVHlwZURl
ZnNJblR5cGVzKHByb2dyYW0pOworICAgIHJlc29sdmVUeXBlRGVmc0luUHJvdG9jb2xzKHByb2dy
YW0pOworICAgIHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSk7CisgICAgcmVzb2x2
ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNvbHZlVHlw
ZURlZnNJbkZ1bmN0aW9ucyhwcm9ncmFtKTsKKyAgICAKICAgICBmbGF0dGVuUHJvdG9jb2xFeHRl
bmRzKHByb2dyYW0pOwogICAgIGNoZWNrKHByb2dyYW0pOworICAgIHJlc29sdmVQcm9wZXJ0aWVz
KHByb2dyYW0pOwogICAgIGNoZWNrTGl0ZXJhbFR5cGVzKHByb2dyYW0pOwogICAgIGNoZWNrUHJv
Z3JhbVdyYXBwZWQocHJvZ3JhbSk7CiAgICAgY2hlY2tSZXR1cm5zKHByb2dyYW0pOwpAQCAtNDEs
NiArNTEsNyBAQCBmdW5jdGlvbiBwcmVwYXJlKG9yaWdpbiwgbGluZU51bWJlck9mZnNlCiAgICAg
Y2hlY2tSZWN1cnNpb24ocHJvZ3JhbSk7CiAgICAgY2hlY2tQcm9ncmFtV3JhcHBlZChwcm9ncmFt
KTsKICAgICBpbmxpbmUocHJvZ3JhbSk7CisgICAgCiAgICAgcmV0dXJuIHByb2dyYW07CiB9CiAK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTAgQEAgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIE5vZGUg
ewogICAgICAgICB0aGlzLl90eXBlcyA9IG5ldyBNYXAoKTsKICAgICAgICAgdGhpcy5fcHJvdG9j
b2xzID0gbmV3IE1hcCgpOwogICAgICAgICB0aGlzLl9mdW5jSW5zdGFudGlhdG9yID0gbmV3IEZ1
bmNJbnN0YW50aWF0b3IodGhpcyk7CisgICAgICAgIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0ID0g
bmV3IE5hbWVDb250ZXh0KCk7CisgICAgICAgIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0LnByb2dy
YW0gPSB0aGlzOworICAgICAgICB0aGlzLl9nbG9iYWxOYW1lQ29udGV4dC5yZWNvZ25pemVJbnRy
aW5zaWNzKCk7CisgICAgICAgIHRoaXMuaW50cmluc2ljcyA9IHRoaXMuX2dsb2JhbE5hbWVDb250
ZXh0LmludHJpbnNpY3M7CiAgICAgfQogICAgIAogICAgIGdldCB0b3BMZXZlbFN0YXRlbWVudHMo
KSB7IHJldHVybiB0aGlzLl90b3BMZXZlbFN0YXRlbWVudHM7IH0KQEAgLTQwLDYgKzQ0LDcgQEAg
Y2xhc3MgUHJvZ3JhbSBleHRlbmRzIE5vZGUgewogICAgIGdldCB0eXBlcygpIHsgcmV0dXJuIHRo
aXMuX3R5cGVzOyB9CiAgICAgZ2V0IHByb3RvY29scygpIHsgcmV0dXJuIHRoaXMuX3Byb3RvY29s
czsgfQogICAgIGdldCBmdW5jSW5zdGFudGlhdG9yKCkgeyByZXR1cm4gdGhpcy5fZnVuY0luc3Rh
bnRpYXRvcjsgfQorICAgIGdldCBnbG9iYWxOYW1lQ29udGV4dCgpIHsgcmV0dXJuIHRoaXMuX2ds
b2JhbE5hbWVDb250ZXh0OyB9CiAgICAgCiAgICAgYWRkKHN0YXRlbWVudCkKICAgICB7CkBAIC01
MiwxMCArNTcsMTEgQEAgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIE5vZGUgewogICAgICAgICB9IGVs
c2UgaWYgKHN0YXRlbWVudCBpbnN0YW5jZW9mIFR5cGUpCiAgICAgICAgICAgICB0aGlzLl90eXBl
cy5zZXQoc3RhdGVtZW50Lm5hbWUsIHN0YXRlbWVudCk7CiAgICAgICAgIGVsc2UgaWYgKHN0YXRl
bWVudCBpbnN0YW5jZW9mIFByb3RvY29sKQotICAgICAgICAgICAgdGhpcy5fcHJvdG9jb2xzLnNl
dChzdGF0ZW1lbnQuYWRkLCBzdGF0ZW1lbnQpOworICAgICAgICAgICAgdGhpcy5fcHJvdG9jb2xz
LnNldChzdGF0ZW1lbnQubmFtZSwgc3RhdGVtZW50KTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJTdGF0ZW1lbnQgaXMgbm90IGEgZnVuY3Rpb24gb3IgdHlwZTog
IiArIHN0YXRlbWVudCk7CiAgICAgICAgIHRoaXMuX3RvcExldmVsU3RhdGVtZW50cy5wdXNoKHN0
YXRlbWVudCk7CisgICAgICAgIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0LmFkZChzdGF0ZW1lbnQp
OwogICAgIH0KICAgICAKICAgICB0b1N0cmluZygpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzCShu
b25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2Ns
YXNzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGdl
dCByZXN1bHRUeXBlKCkgeyByZXR1cm4gdGhpcy5yZXN1bHRUeXBlRm9yR2V0ID8gdGhpcy5yZXN1
bHRUeXBlRm9yR2V0IDogdGhpcy5yZXN1bHRUeXBlRm9yQW5kOyB9CisgICAgCisgICAgcmV3cml0
ZUFmdGVyQ2xvbmluZygpCisgICAgeworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBub2RlLmJh
c2UuaXNMVmFsdWUgd2lsbCBvbmx5IHJldHVybiB0cnVlIGlmIGl0J3MgcG9zc2libGUgdG8gZ2V0
IGEgcG9pbnRlciB0byBpdCwKKyAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCBubyBsb25nZXIgc2Vl
IGFueSBEb3RFeHByZXNzaW9ucyBvciBJbmRleEV4cHJlc3Npb25zLiBBbHNvLCBub2RlIGlzIGEg
bmV3bHkgY3JlYXRlZAorICAgICAgICAvLyBub2RlIGFuZCBldmVyeXRoaW5nIGJlbmVhdGggaXQg
aXMgbmV3bHkgY3JlYXRlZCwgc28gd2UgY2FuIGVkaXQgaXQgaW4tcGxhY2UuCisgICAgICAgIAor
ICAgICAgICBpZiAoKHRoaXMuYmFzZS5pc0xWYWx1ZSB8fCB0aGlzLmJhc2VUeXBlLmlzUmVmKSAm
JiB0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICByZXR1cm4gbmV3IERlcmVmZXJlbmNlRXhw
cmVzc2lvbih0aGlzLm9yaWdpbiwgdGhpcy5jYWxsRm9yQW5kKTsKKyAgICAgICAgCisgICAgICAg
IGlmICh0aGlzLmNhbGxGb3JHZXQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsRm9yR2V0
OworICAgICAgICAKKyAgICAgICAgaWYgKCF0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IodGhpcy5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIjogUHJvcGVydHkgYWNj
ZXNzIHdpdGhvdXQgZ2V0dGVyIGFuZCBhbmRlcjogIiArIHRoaXMpOworICAgICAgICAKKyAgICAg
ICAgbGV0IGFub25WYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUodGhpcy5vcmlnaW4sIHRoaXMu
YmFzZVR5cGUpOworICAgICAgICB0aGlzLmNhbGxGb3JBbmQuYXJndW1lbnRMaXN0WzBdID0gdGhp
cy5iYXNlVHlwZS51bmlmeU5vZGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZCh0aGlzLm9yaWdpbiwg
VmFyaWFibGVSZWYud3JhcChhbm9uVmFyKSk7CisgICAgICAgIHJldHVybiBuZXcgQ29tbWFFeHBy
ZXNzaW9uKHRoaXMub3JpZ2luLCBbCisgICAgICAgICAgICBhbm9uVmFyLAorICAgICAgICAgICAg
bmV3IEFzc2lnbm1lbnQodGhpcy5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAoYW5vblZhciksIHRo
aXMuYmFzZSwgdGhpcy5iYXNlVHlwZSksCisgICAgICAgICAgICBuZXcgRGVyZWZlcmVuY2VFeHBy
ZXNzaW9uKHRoaXMub3JpZ2luLCB0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgIF0pOworICAgIH0K
KyAgICAKKyAgICB1cGRhdGVDYWxsc0FmdGVyQ2hhbmdpbmdCYXNlKCkKKyAgICB7CisgICAgICAg
IGlmICh0aGlzLmNhbGxGb3JHZXQpCisgICAgICAgICAgICB0aGlzLmNhbGxGb3JHZXRbMF0gPSB0
aGlzLmJhc2U7CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICB0aGlz
LmNhbGxGb3JBbmRbMF0gPSB0aGlzLmJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQodGhp
cy5vcmlnaW4sIHRoaXMuYmFzZSk7CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JTZXQpCisgICAg
ICAgICAgICB0aGlzLmNhbGxGb3JTZXRbMF0gPSB0aGlzLmJhc2U7CisgICAgfQorICAgIAorICAg
IGVtaXRHZXQoYmFzZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnZpc2l0KG5l
dyBSZXdyaXRlcigpKTsKKyAgICAgICAgcmVzdWx0LmJhc2UgPSBiYXNlOworICAgICAgICByZXN1
bHQudXBkYXRlQ2FsbHNBZnRlckNoYW5naW5nQmFzZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0
LnJld3JpdGVBZnRlckNsb25pbmcoKTsKKyAgICB9CisgICAgCisgICAgZW1pdFNldChiYXNlLCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghcmVzdWx0LmNhbGxGb3JTZXQpCisgICAgICAgICAg
ICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3Qg
ZW1pdCBzZXQgYmVjYXVzZTogIiArIHRoaXMuZXJyb3JGb3JTZXQubWVzc2FnZSk7CisgICAgICAg
IGxldCByZXN1bHQgPSB0aGlzLnZpc2l0KG5ldyBSZXdyaXRlcigpKTsKKyAgICAgICAgcmVzdWx0
LmJhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQudXBkYXRlQ2FsbHNBZnRlckNoYW5naW5nQmFz
ZSgpOworICAgICAgICByZXN1bHQuY2FsbEZvclNldFsyXSA9IHZhbHVlOworICAgICAgICByZXR1
cm4gcmVzdWx0LmNhbGxGb3JTZXQ7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5UmVzb2x2ZXIuanMJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlSZXNvbHZlci5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBQcm9wZXJ0eVJlc29sdmVy
IGV4dGVuZHMgVmlzaXRvciB7CisgICAgX3Zpc2l0UHJvcGVydHlBY2Nlc3Mobm9kZSkKKyAgICB7
CisgICAgICAgIGxldCBuZXdOb2RlID0gbm9kZS52aXNpdChuZXcgTm9ybWFsVXNlUHJvcGVydHlS
ZXNvbHZlcigpKTsKKyAgICAgICAgbmV3Tm9kZS52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5i
ZWNvbWUobmV3Tm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2Rl
KQorICAgIHsKKyAgICAgICAgdGhpcy5fdmlzaXRQcm9wZXJ0eUFjY2Vzcyhub2RlKTsKKyAgICB9
CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRo
aXMuX3Zpc2l0UHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAgfQorICAgIAorICAgIF9oYW5kbGVS
ZWFkTW9kaWZ5V3JpdGUobm9kZSkKKyAgICB7CisgICAgICAgIGxldCB0eXBlID0gbm9kZS5vbGRW
YWx1ZVZhci50eXBlOworICAgICAgICBsZXQgc2ltcGxlTEhTID0gbm9kZS5sVmFsdWUudmlzaXQo
bmV3IE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIoKSk7CisgICAgICAgIGlmIChzaW1wbGVMSFMu
aXNMVmFsdWUpIHsKKyAgICAgICAgICAgIGxldCBwdHJUeXBlID0gbmV3IFB0clR5cGUobm9kZS5v
cmlnaW4sIHNpbXBsZUxIUy5hZGRyZXNzU3BhY2UsIHR5cGUpOworICAgICAgICAgICAgbGV0IHB0
clZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwgcHRyVHlwZSk7CisgICAg
ICAgICAgICBub2RlLmJlY29tZShuZXcgQ29tbWFFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBbCisg
ICAgICAgICAgICAgICAgbm9kZS5vbGRWYWx1ZVZhciwgbm9kZS5uZXdWYWx1ZVZhciwgcHRyVmFy
LAorICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KAorICAgICAgICAgICAgICAgICAgICBu
b2RlLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChwdHJWYXIpLAorICAgICAgICAgICAgICAgICAg
ICBuZXcgTWFrZVB0ckV4cHJlc3Npb24obm9kZS5vcmlnaW4sIHNpbXBsZUxIUyksIHB0clR5cGUp
LAorICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KAorICAgICAgICAgICAgICAgICAgICBu
b2RlLm9yaWdpbiwgbm9kZS5vbGRWYWx1ZVJlZigpLAorICAgICAgICAgICAgICAgICAgICBuZXcg
RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHB0clZh
cikpLCB0eXBlKSwKKyAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwg
bm9kZS5uZXdWYWx1ZVJlZigpLCBub2RlLm5ld1ZhbHVlRXhwLCB0eXBlKSwKKyAgICAgICAgICAg
ICAgICBuZXcgQXNzaWdubWVudCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5l
dyBEZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAocHRy
VmFyKSksCisgICAgICAgICAgICAgICAgICAgIG5vZGUubmV3VmFsdWVSZWYoKSwgdHlwZSksCisg
ICAgICAgICAgICAgICAgbm9kZS5yZXN1bHRFeHAKKyAgICAgICAgICAgIF0pKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5l
dyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmxWYWx1ZS5iYXNl
KTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlRXhwID0gbmV3IENvbW1hRXhwcmVzc2lvbihub2Rl
Lm9yaWdpbiwgWworICAgICAgICAgICAgbm9kZS5vbGRWYWx1ZVZhciwgbm9kZS5uZXdWYWx1ZVZh
ciwKKyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2RlLm9sZFZhbHVl
UmVmKCksIG5vZGUubFZhbHVlLmVtaXRHZXQocmVzdWx0Lm9sZFZhbHVlUmVmKCkpLCB0eXBlKSwK
KyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2RlLm5ld1ZhbHVlUmVm
KCksIG5vZGUubmV3VmFsdWVFeHAsIHR5cGUpLAorICAgICAgICAgICAgbm9kZS5sVmFsdWUuZW1p
dFNldChyZXN1bHQub2xkVmFsdWVSZWYoKSwgbm9kZS5uZXdWYWx1ZVJlZigpKQorICAgICAgICBd
KTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdEV4cCA9IG5vZGUubmV3VmFsdWVSZWYoKTsKKyAgICAg
ICAgdGhpcy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKHJlc3VsdCk7CisgICAgICAgIG5vZGUuYmVj
b21lKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsK
KyAgICAgICAgbm9kZS5yZXN1bHRFeHAudmlzaXQodGhpcyk7CisgICAgICAgIHRoaXMuX2hhbmRs
ZVJlYWRNb2RpZnlXcml0ZShub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRBc3NpZ25tZW50
KG5vZGUpCisgICAgeworICAgICAgICBub2RlLnJocy52aXNpdCh0aGlzKTsKKyAgICAgICAgCisg
ICAgICAgIGxldCBzaW1wbGVMSFMgPSBub2RlLmxocy52aXNpdChuZXcgTm9ybWFsVXNlUHJvcGVy
dHlSZXNvbHZlcigpKTsKKyAgICAgICAgaWYgKHNpbXBsZUxIUy5pc0xWYWx1ZSkgeworICAgICAg
ICAgICAgbm9kZS5saHMuYmVjb21lKHNpbXBsZUxIUyk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghKG5vZGUubGhzIGluc3RhbmNlb2YgUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5l
eHBlY3RlZCBsaHMgdHlwZTogIiArIG5vZGUubGhzLmNvbnN0cnVjdG9yLm5hbWUpOworICAgICAg
ICAKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5v
ZGUub3JpZ2luLCBub2RlLmxocy5iYXNlKTsKKyAgICAgICAgbGV0IHJlc3VsdFZhciA9IG5ldyBB
bm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwgbm9kZS50eXBlKTsKKyAgICAgICAgcmVzdWx0
Lm5ld1ZhbHVlRXhwID0gbmV3IENvbW1hRXhwcmVzc2lvbihbCisgICAgICAgICAgICByZXN1bHRW
YXIsCisgICAgICAgICAgICBuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwgVmFyaWFibGVSZWYu
d3JhcChyZXN1bHRWYXIpLCBub2RlLnJocywgbm9kZS50eXBlKSwKKyAgICAgICAgICAgIG5vZGUu
bGhzLmVtaXRTZXQocmVzdWx0Lm9sZFZhbHVlUmVmKCksIFZhcmlhYmxlUmVmLndyYXAocmVzdWx0
VmFyKSkKKyAgICAgICAgXSk7CisgICAgICAgIHJlc3VsdC5yZXN1bHRFeHAgPSBWYXJpYWJsZVJl
Zi53cmFwKHJlc3VsdFZhcik7CisgICAgICAgIHRoaXMuX2hhbmRsZVJlYWRNb2RpZnlXcml0ZShy
ZXN1bHQpOworICAgICAgICBub2RlLmJlY29tZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2
aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNpdE1h
a2VQdHJFeHByZXNzaW9uKG5vZGUpOworICAgICAgICBpZiAoIW5vZGUubFZhbHVlLmlzTFZhbHVl
KQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3Ry
aW5nLCAiTm90IGFuIGx2YWx1ZTogIiArIG5vZGUubFZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
dmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52
aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSk7CisgICAgICAgIGlmICghbm9kZS5sVmFs
dWUuaXNMVmFsdWUpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJOb3QgYW4gbHZhbHVlOiAiICsgbm9kZS5sVmFsdWUpOworICAgIH0K
K30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCShyZXZp
c2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxOSBAQCBjbGFzcyBQdHJUeXBlIGV4dGVuZHMg
UmVmZXJlbmNlVHlwZSB7CiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnVuaWZ5KHVu
aWZpY2F0aW9uQ29udGV4dCwgb3RoZXIuZWxlbWVudFR5cGUpOwogICAgIH0KICAgICAKKyAgICBh
cmd1bWVudEZvckFuZE92ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICB0aHJv
dyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQg
aXMgbm90IHZhbGlkIik7CisgICAgfQorICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9y
aWdpbiwgdHlwZSkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5v
cmlnaW5TdHJpbmcsICJQb2ludGVyIHN1YnNjcmlwdCBpcyBub3QgdmFsaWQiKTsKKyAgICB9Cisg
ICAgcmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChvcmlnaW4pCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5lbGVtZW50VHlwZTsKKyAgICB9CisKICAgICB0b1N0cmluZygpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZSArICJeICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
biBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbFZhbHVlKQor
ICAgIHsKKyAgICAgICAgc3VwZXIob3JpZ2luKTsKKyAgICAgICAgdGhpcy5fbFZhbHVlID0gbFZh
bHVlOworICAgICAgICB0aGlzLm9sZFZhbHVlVmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG9y
aWdpbik7CisgICAgICAgIHRoaXMubmV3VmFsdWVWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUo
b3JpZ2luKTsKKyAgICAgICAgdGhpcy5uZXdWYWx1ZUV4cCA9IG51bGw7CisgICAgICAgIHRoaXMu
cmVzdWx0RXhwID0gbnVsbDsKKyAgICB9CisgICAgCisgICAgZ2V0IGxWYWx1ZSgpIHsgcmV0dXJu
IHRoaXMuX2xWYWx1ZTsgfQorICAgIAorICAgIG9sZFZhbHVlUmVmKCkgeyByZXR1cm4gVmFyaWFi
bGVSZWYud3JhcCh0aGlzLm9sZFZhbHVlVmFyKTsgfQorICAgIG5ld1ZhbHVlUmVmKCkgeyByZXR1
cm4gVmFyaWFibGVSZWYud3JhcCh0aGlzLm5ld1ZhbHVlVmFyKTsgfQorICAgIAorICAgIHRvU3Ry
aW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiUk1XKCIgKyB0aGlzLmxWYWx1ZSArICIsICIg
KyB0aGlzLm9sZFZhbHVlVmFyICsgIiwgIiArIHRoaXMubmV3VmFsdWVWYXIgKyAiLCAiICsgdGhp
cy5uZXdWYWx1ZUV4cCArICIsICIgKyB0aGlzLnJlc3VsdEV4cCArICIpIjsKKyAgICB9Cit9CisK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVOYW1lcy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMuanMJ
KHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29s
dmVOYW1lcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsMjggQEAKICAqLwogInVzZSBz
dHJpY3QiOwogCi1mdW5jdGlvbiByZXNvbHZlTmFtZXMocHJvZ3JhbSkKK2Z1bmN0aW9uIGNyZWF0
ZU5hbWVSZXNvbHZlcihwcm9ncmFtKQogewotICAgIHByb2dyYW0udmlzaXQobmV3IE5hbWVSZXNv
bHZlcigpKTsKKyAgICByZXR1cm4gbmV3IE5hbWVSZXNvbHZlcihwcm9ncmFtLmdsb2JhbE5hbWVD
b250ZXh0KTsKIH0KKworZnVuY3Rpb24gcmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1l
UmVzb2x2ZXIpCit7CisgICAgZm9yIChsZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygp
KQorICAgICAgICBuYW1lUmVzb2x2ZXIuZG9TdGF0ZW1lbnQodHlwZSk7Cit9CisKK2Z1bmN0aW9u
IHJlc29sdmVOYW1lc0luUHJvdG9jb2xzKHByb2dyYW0sIG5hbWVSZXNvbHZlcikKK3sKKyAgICBm
b3IgKGxldCBwcm90b2NvbCBvZiBwcm9ncmFtLnByb3RvY29scy52YWx1ZXMoKSkKKyAgICAgICAg
bmFtZVJlc29sdmVyLmRvU3RhdGVtZW50KHByb3RvY29sKTsKK30KKworZnVuY3Rpb24gcmVzb2x2
ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAobGV0
IGZ1bmNzIG9mIHByb2dyYW0uZnVuY3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAobGV0
IGZ1bmMgb2YgZnVuY3MpCisgICAgICAgICAgICBuYW1lUmVzb2x2ZXIuZG9TdGF0ZW1lbnQoZnVu
Yyk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNv
bHZlT3ZlcmxvYWRJbXBsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDkgQEAKIAogZnVuY3Rpb24gcmVzb2x2ZU92ZXJsb2FkSW1wbChm
dW5jdGlvbnMsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpCiB7Cisg
ICAgaWYgKCFmdW5jdGlvbnMpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBmdW5jdGlv
bnM7IHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYnkgdGhlIGNhbGxlci4iKTsKKyAgICAK
ICAgICBsZXQgZmFpbHVyZXMgPSBbXTsKICAgICBsZXQgc3VjY2Vzc2VzID0gW107CiAgICAgZm9y
IChsZXQgZnVuYyBvZiBmdW5jdGlvbnMpIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Jlc29sdmVQcm9wZXJ0aWVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVQcm9wZXJ0aWVzLmpzCShub25leGlzdGVudCkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVQcm9wZXJ0aWVzLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8gVGhpcyB0dXJucyBEb3RFeHByZXNzaW9u
IGFuZCBJbmRleEV4cHJlc3Npb24gaW50byBjYWxscyB0byBnZXR0ZXJzIChvcGVyYXRvci5maWVs
ZCBhbmQgb3BlcmF0b3JbXSksCisvLyBzZXR0ZXJzIChvcGVyYXRvci5maWVsZD0gYW5kIG9wZXJh
dG9yW109KSwgYW5kIGFuZGVycyAob3BlcmF0b3ImLmZpZWxkIGFuZCBvcGVyYXRvciZbXSkuIFRo
aXMgaW52b2x2ZXMKKy8vIHRyYW5zZm9ybWluZyBhc3NpZ25tZW50cyBhbmQgUk1XJ3MgdG8gZG8g
bHZhbHVlIGVtdWxhdGlvbi4KK2Z1bmN0aW9uIHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pCit7
CisgICAgcHJvZ3JhbS52aXNpdChuZXcgUHJvcGVydHlSZXNvbHZlcigpKTsKK30KSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVUeXBlRGVmcy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlVHlwZURlZnMuanMJKHJl
dmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVU
eXBlRGVmcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsMjYgQEAKICAqLwogInVzZSBz
dHJpY3QiOwogCi1mdW5jdGlvbiByZXNvbHZlVHlwZURlZnMocHJvZ3JhbSkKK2Z1bmN0aW9uIHJl
c29sdmVUeXBlRGVmc0luVHlwZXMocHJvZ3JhbSkKIHsKLSAgICBwcm9ncmFtLnZpc2l0KG5ldyBU
eXBlRGVmUmVzb2x2ZXIoKSk7CisgICAgbGV0IHJlc29sdmVyID0gbmV3IFR5cGVEZWZSZXNvbHZl
cigpOworICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkKKyAgICAg
ICAgdHlwZS52aXNpdChyZXNvbHZlcik7Cit9CisKK2Z1bmN0aW9uIHJlc29sdmVUeXBlRGVmc0lu
UHJvdG9jb2xzKHByb2dyYW0pCit7CisgICAgbGV0IHJlc29sdmVyID0gbmV3IFR5cGVEZWZSZXNv
bHZlcigpOworICAgIGZvciAobGV0IHByb3RvY29sIG9mIHByb2dyYW0ucHJvdG9jb2xzLnZhbHVl
cygpKQorICAgICAgICBwcm90b2NvbC52aXNpdChyZXNvbHZlcik7Cit9CisKK2Z1bmN0aW9uIHJl
c29sdmVUeXBlRGVmc0luRnVuY3Rpb25zKHByb2dyYW0pCit7CisgICAgbGV0IHJlc29sdmVyID0g
bmV3IFR5cGVEZWZSZXNvbHZlcigpOworICAgIGZvciAobGV0IGZ1bmNzIG9mIHByb2dyYW0uZnVu
Y3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAg
ICAgICAgICBmdW5jLnZpc2l0KHJlc29sdmVyKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTAgKzI3LDkgQEAKIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoYXZlIHNlbnNpYmxlIGJl
aGF2aW9yIHdoZW4gaXQgZW5jb3VudGVycyBkZWZpbml0aW9ucyB0aGF0IGl0IGNhbm5vdCBoYW5k
bGUuIFJpZ2h0CiAvLyBub3cgd2UgYXJlIGhhY2tpc2hseSBwcmV2ZW50aW5nIHRoaXMgYnkgd3Jh
cHBpbmcgdGhpbmdzIGluIFR5cGVSZWYuIFRoYXQncyBwcm9iYWJseSB3cm9uZy4KIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYyMDgKLWNsYXNzIFJld3JpdGVy
IGV4dGVuZHMgVmlzaXRvckJhc2UgeworY2xhc3MgUmV3cml0ZXIgewogICAgIGNvbnN0cnVjdG9y
KCkKICAgICB7Ci0gICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX21hcHBpbmcgPSBuZXcg
TWFwKCk7CiAgICAgfQogICAgIApAQCAtOTksNyArOTgsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRl
bmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYXJpYWJsZURlY2wo
CiAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5uYW1lLAogICAgICAgICAgICAgbm9kZS50
eXBlLnZpc2l0KHRoaXMpLAotICAgICAgICAgICAgbm9kZS5pbml0aWFsaXplciA/IG5vZGUuaW5p
dGlhbGl6ZXIudmlzaXQodGhpcykgOiBudWxsKTsKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9k
ZS5pbml0aWFsaXplciwgdGhpcykpOwogICAgICAgICB0aGlzLl9tYXBOb2RlKG5vZGUsIHJlc3Vs
dCk7CiAgICAgICAgIHJlc3VsdC5lUHRyID0gbm9kZS5lUHRyOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtMTMxLDcgKzEzMCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJh
c2UgewogICAgIHZpc2l0VHlwZVJlZihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9
IG5ldyBUeXBlUmVmKG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUudHlwZUFyZ3VtZW50cy5t
YXAodHlwZUFyZ3VtZW50ID0+IHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKSkpOwotICAgICAgICBy
ZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7Cisg
ICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTE2MywyNCArMTYyLDUzIEBAIGNsYXNz
IFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0QXNzaWdubWVudChub2Rl
KQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2lu
LCBub2RlLmxocy52aXNpdCh0aGlzKSwgbm9kZS5yaHMudmlzaXQodGhpcykpOwotICAgICAgICBy
ZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7Cisg
ICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUudmlzaXQodGhpcykpOwor
ICAgICAgICByZXN1bHQub2xkVmFsdWVWYXIgPSBub2RlLm9sZFZhbHVlVmFyLnZpc2l0KHRoaXMp
OworICAgICAgICByZXN1bHQubmV3VmFsdWVWYXIgPSBub2RlLm5ld1ZhbHVlVmFyLnZpc2l0KHRo
aXMpOworICAgICAgICByZXN1bHQubmV3VmFsdWVFeHAgPSBub2RlLm5ld1ZhbHVlRXhwLnZpc2l0
KHRoaXMpOworICAgICAgICByZXN1bHQucmVzdWx0RXhwID0gbm9kZS5yZXN1bHRFeHAudmlzaXQo
dGhpcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIHZpc2l0RGVy
ZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3
IERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5wdHIudmlzaXQodGhpcykp
OwotICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlz
KSA6IG51bGw7CisgICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRo
aXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAgICBfaGFuZGxlUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKHJlc3VsdCwgbm9kZSkKKyAgICB7CisgICAgICAgIHJlc3Vs
dC5wb3NzaWJsZUdldE92ZXJsb2FkcyA9IG5vZGUucG9zc2libGVHZXRPdmVybG9hZHM7CisgICAg
ICAgIHJlc3VsdC5wb3NzaWJsZVNldE92ZXJsb2FkcyA9IG5vZGUucG9zc2libGVTZXRPdmVybG9h
ZHM7CisgICAgICAgIHJlc3VsdC5wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IG5vZGUucG9zc2libGVB
bmRPdmVybG9hZHM7CisgICAgICAgIHJlc3VsdC5iYXNlVHlwZSA9IE5vZGUudmlzaXQobm9kZS5i
YXNlVHlwZSwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5jYWxsRm9yR2V0ID0gTm9kZS52aXNpdChu
b2RlLmNhbGxGb3JHZXQsIHRoaXMpOworICAgICAgICByZXN1bHQucmVzdWx0VHlwZUZvckdldCA9
IE5vZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlRm9yR2V0LCB0aGlzKTsKKyAgICAgICAgcmVzdWx0
LmNhbGxGb3JBbmQgPSBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvckFuZCwgdGhpcyk7CisgICAgICAg
IHJlc3VsdC5yZXN1bHRUeXBlRm9yQW5kID0gTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JB
bmQsIHRoaXMpOworICAgICAgICByZXN1bHQuY2FsbEZvclNldCA9IE5vZGUudmlzaXQobm9kZS5j
YWxsRm9yU2V0LCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LmVycm9yRm9yU2V0ID0gbm9kZS5lcnJv
ckZvclNldDsKKyAgICAgICAgcmVzdWx0LnVwZGF0ZUNhbGxzQWZ0ZXJDaGFuZ2luZ0Jhc2UoKTsK
KyAgICB9CisgICAgCiAgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAg
ICBsZXQgcmVzdWx0ID0gbmV3IERvdEV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuc3RydWN0
LnZpc2l0KHRoaXMpLCBub2RlLmZpZWxkTmFtZSk7Ci0gICAgICAgIHJlc3VsdC5zdHJ1Y3RUeXBl
ID0gbm9kZS5zdHJ1Y3RUeXBlID8gbm9kZS5zdHJ1Y3RUeXBlLnZpc2l0KHRoaXMpIDogbnVsbDsK
LSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXdyaXRlIGZpZWxkLCBzaW5jZSB0aGlzIGlz
IGEgZGVlcCByZWZlcmVuY2UgZ29pbmcgb3V0IG9mIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgLy8g
QWxzbywgdGhpcyBpcyBzZXQgdXAgZHVyaW5nIGlubGluaW5nLCBzbyB3ZSdyZSBhbHJlYWR5IGZ1
bGx5IG1vbm9tb3JwaGlzZWQuCi0gICAgICAgIHJlc3VsdC5maWVsZCA9IG5vZGUuZmllbGQ7Cisg
ICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQsIG5vZGUp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhw
cmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBJbmRleEV4cHJl
c3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJyYXkudmlzaXQodGhpcyksIG5vZGUuaW5kZXgudmlz
aXQodGhpcykpOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24o
cmVzdWx0LCBub2RlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0y
MTYsNyArMjQ0LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAg
CiAgICAgdmlzaXRSZXR1cm4obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgUmV0dXJu
KG5vZGUub3JpZ2luLCBub2RlLnZhbHVlID8gbm9kZS52YWx1ZS52aXNpdCh0aGlzKSA6IG51bGwp
OworICAgICAgICByZXR1cm4gbmV3IFJldHVybihub2RlLm9yaWdpbiwgTm9kZS52aXNpdChub2Rl
LnZhbHVlLCB0aGlzKSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0Q29udGludWUobm9kZSkKQEAg
LTI0MCw3ICsyNjgsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAg
ICB2aXNpdEdlbmVyaWNMaXRlcmFsVHlwZShub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3Vs
dCA9IG5ldyBub2RlLmNvbnN0cnVjdG9yKG5vZGUub3JpZ2luLCBub2RlLnZhbHVlKTsKLSAgICAg
ICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQodGhpcykgOiBudWxs
OworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAg
ICAgICAgcmVzdWx0LnByZWZlcnJlZFR5cGUgPSBub2RlLnByZWZlcnJlZFR5cGUudmlzaXQodGhp
cyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjYxLDcgKzI4OSw3IEBAIGNs
YXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0TnVsbFR5cGUobm9k
ZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgTnVsbFR5cGUobm9kZS5vcmlnaW4p
OwotICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlz
KSA6IG51bGw7CisgICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRo
aXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjgwLDcgKzMwOCw3IEBA
IGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICByZXN1bHQucG9z
c2libGVPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzOwogICAgICAgICBpZiAobm9k
ZS5pc0Nhc3QpCiAgICAgICAgICAgICByZXN1bHQuc2V0Q2FzdERhdGEobm9kZS5yZXR1cm5UeXBl
LnZpc2l0KHRoaXMpKTsKLSAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBub2RlLnJlc3VsdFR5
cGUgPyBub2RlLnJlc3VsdFR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQu
cmVzdWx0VHlwZSA9IE5vZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlLCB0aGlzKTsKICAgICAgICAg
cmVzdWx0LnJlc3VsdEVQdHIgPSBub2RlLnJlc3VsdEVQdHI7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQpAQCAtMjk4LDcgKzMyNiw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlz
aXRvckJhc2UgewogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBGdW5jdGlvbkxpa2VC
bG9jaygKICAgICAgICAgICAgIG5vZGUub3JpZ2luLAotICAgICAgICAgICAgbm9kZS5yZXR1cm5U
eXBlID8gbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpIDogbnVsbCwKKyAgICAgICAgICAgIE5v
ZGUudmlzaXQobm9kZS5yZXR1cm5UeXBlLCB0aGlzKSwKICAgICAgICAgICAgIG5vZGUuYXJndW1l
bnRMaXN0Lm1hcChhcmd1bWVudCA9PiBhcmd1bWVudC52aXNpdCh0aGlzKSksCiAgICAgICAgICAg
ICBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQodGhpcykp
LAogICAgICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsKQEAgLTMxNSw3ICszNDMsNyBA
QCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKIAogICAgIHZpc2l0SWZTdGF0
ZW1lbnQobm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgSWZTdGF0ZW1lbnQobm9kZS5v
cmlnaW4sIG5vZGUuY29uZGl0aW9uYWwudmlzaXQodGhpcyksIG5vZGUuYm9keS52aXNpdCh0aGlz
KSwgbm9kZS5lbHNlQm9keSA/IG5vZGUuZWxzZUJvZHkudmlzaXQodGhpcykgOiB1bmRlZmluZWQp
OworICAgICAgICByZXR1cm4gbmV3IElmU3RhdGVtZW50KG5vZGUub3JpZ2luLCBub2RlLmNvbmRp
dGlvbmFsLnZpc2l0KHRoaXMpLCBub2RlLmJvZHkudmlzaXQodGhpcyksIE5vZGUudmlzaXQobm9k
ZS5lbHNlQm9keSwgdGhpcykpOwogICAgIH0KIAogICAgIHZpc2l0V2hpbGVMb29wKG5vZGUpCkBA
IC0zMzEsMjIgKzM1OSwyNCBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
ICAgICB2aXNpdEZvckxvb3Aobm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgRm9yTG9v
cChub2RlLm9yaWdpbiwKLSAgICAgICAgICAgIG5vZGUuaW5pdGlhbGl6YXRpb24gPyBub2RlLmlu
aXRpYWxpemF0aW9uLnZpc2l0KHRoaXMpIDogdW5kZWZpbmVkLAotICAgICAgICAgICAgbm9kZS5j
b25kaXRpb24gPyBub2RlLmNvbmRpdGlvbi52aXNpdCh0aGlzKSA6IHVuZGVmaW5lZCwKLSAgICAg
ICAgICAgIG5vZGUuaW5jcmVtZW50ID8gbm9kZS5pbmNyZW1lbnQudmlzaXQodGhpcykgOiB1bmRl
ZmluZWQsCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5pdGlhbGl6YXRpb24sIHRoaXMp
LAorICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLmNvbmRpdGlvbiwgdGhpcyksCisgICAgICAg
ICAgICBOb2RlLnZpc2l0KG5vZGUuaW5jcmVtZW50LCB0aGlzKSwKICAgICAgICAgICAgIG5vZGUu
Ym9keS52aXNpdCh0aGlzKSk7CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihu
b2RlKQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAgICAgIGxl
dCByZXN1bHQgPSBuZXcgTGV0RXhwcmVzc2lvbihub2RlLm9yaWdpbik7Ci0gICAgICAgIHJlc3Vs
dC5pbmRleCA9IG5vZGUuaW5kZXg7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8g
bm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKLSAgICAgICAgcmVzdWx0LmFyZ3VtZW50ID0g
bm9kZS5hcmd1bWVudC52aXNpdCh0aGlzKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBbm9u
eW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwgbm9kZS50eXBlKTsKKyAgICAgICAgcmVzdWx0Ll9p
bmRleCA9IG5vZGUuX2luZGV4OwogICAgICAgICB0aGlzLl9tYXBOb2RlKG5vZGUsIHJlc3VsdCk7
Ci0gICAgICAgIHJlc3VsdC5ib2R5ID0gbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgICAgICBy
ZXN1bHQuZVB0ciA9IG5vZGUuZVB0cjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Cisg
ICAgCisgICAgdmlzaXRJZGVudGl0eUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgSWRlbnRpdHlFeHByZXNzaW9uKG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpKTsKKyAg
ICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdExheW91
dEJ1aWxkZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3RydWN0TGF5b3V0QnVpbGRlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0TGF5b3V0QnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtNTksNSArNTksMTEgQEAgY2xhc3MgU3RydWN0TGF5b3V0QnVpbGRlciBleHRlbmRzIFZpc2l0
bwogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUeXBlIGRvZXMgbm90IGhhdmUgc2l6ZTog
IiArIG5vZGUudHlwZSk7CiAgICAgICAgIHRoaXMuX29mZnNldCArPSBzaXplOwogICAgIH0KKyAg
ICAKKyAgICB2aXNpdE5hdGl2ZUZ1bmNJbnN0YW5jZShub2RlKQorICAgIHsKKyAgICAgICAgc3Vw
ZXIudmlzaXROYXRpdmVGdW5jSW5zdGFuY2Uobm9kZSk7CisgICAgICAgIG5vZGUuZnVuYy5kaWRM
YXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEobm9kZS5pbXBsZW1lbnRhdGlvbkRhdGEp
OworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0
VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1
Y3RUeXBlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9TdHJ1Y3RUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01NywyMSArNTcsMjkgQEAgY2xh
c3MgU3RydWN0VHlwZSBleHRlbmRzIFR5cGUgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKLSAgICBpbnN0YW50aWF0ZSh0eXBlQXJndW1lbnRzLCBtb2RlKQorICAgIGluc3Rh
bnRpYXRlKHR5cGVBcmd1bWVudHMgPSBudWxsKQogICAgIHsKLSAgICAgICAgaWYgKHR5cGVBcmd1
bWVudHMubGVuZ3RoICE9IHRoaXMudHlwZVBhcmFtZXRlcnMubGVuZ3RoKQotICAgICAgICAgICAg
dGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIldyb25nIG51bWJlciBv
ZiB0eXBlIGFyZ3VtZW50cyB0byBpbnN0YW50aWF0aW9uIik7CisgICAgICAgIGxldCBzdWJzdGl0
dXRpb24gPSBudWxsOworICAgICAgICBsZXQgdHlwZVBhcmFtZXRlcnMgPSB0aGlzLnR5cGVQYXJh
bWV0ZXJzOwogICAgICAgICAKLSAgICAgICAgaWYgKCF0eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICBpZiAodHlwZUFyZ3VtZW50cykgeworICAg
ICAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoICE9IHRoaXMudHlwZVBhcmFtZXRlcnMu
bGVuZ3RoKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmln
aW5TdHJpbmcsICJXcm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgdG8gaW5zdGFudGlhdGlv
biIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXR5cGVBcmd1bWVudHMubGVuZ3Ro
KQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBzdWJzdGl0dXRpb24gPSBuZXcgU3Vic3RpdHV0aW9uKHRoaXMudHlwZVBhcmFtZXRlcnMsIHR5
cGVBcmd1bWVudHMpOworICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBbXTsKKyAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9IG5ldyBTdWJzdGl0dXRpb24o
dGhpcy50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7Ci0gICAgICAgIGxldCBpbnN0YW50
aWF0ZUltbWVkaWF0ZXMgPSBtb2RlID09ICJzaGFsbG93IiA/IG51bGwgOiBuZXcgSW5zdGFudGlh
dGVJbW1lZGlhdGVzKCk7Ci0gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3RydWN0VHlwZSh0aGlz
Lm9yaWdpbiwgdGhpcy5uYW1lLCBbXSk7CisgICAgICAgIGxldCBpbnN0YW50aWF0ZUltbWVkaWF0
ZXMgPSBuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCk7CisgICAgICAgIGxldCByZXN1bHQgPSBu
ZXcgU3RydWN0VHlwZSh0aGlzLm9yaWdpbiwgdGhpcy5uYW1lLCB0eXBlUGFyYW1ldGVycyk7CiAg
ICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7Ci0gICAgICAgICAgICBsZXQg
bmV3RmllbGQgPSBmaWVsZC52aXNpdChzdWJzdGl0dXRpb24pOwotICAgICAgICAgICAgaWYgKGlu
c3RhbnRpYXRlSW1tZWRpYXRlcykKLSAgICAgICAgICAgICAgICBuZXdGaWVsZCA9IG5ld0ZpZWxk
LnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyk7CisgICAgICAgICAgICBsZXQgbmV3RmllbGQg
PSBmaWVsZDsKKyAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb24pCisgICAgICAgICAgICAgICAg
bmV3RmllbGQgPSBuZXdGaWVsZC52aXNpdChzdWJzdGl0dXRpb24pOworICAgICAgICAgICAgbmV3
RmllbGQgPSBuZXdGaWVsZC52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpOwogICAgICAgICAg
ICAgcmVzdWx0LmFkZChuZXdGaWVsZCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWJzdGl0dXRpb24u
anMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1
YnN0aXR1dGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBjbGFzcyBTdWJz
dGl0dXRpb24gZXh0ZW5kcyBSZXdyaXRlciB7CiAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KHBh
cmFtZXRlcnNbaV0sIGFyZ3VtZW50TGlzdFtpXSk7CiAgICAgfQogICAgIAorICAgIGdldCBtYXAo
KSB7IHJldHVybiB0aGlzLl9tYXA7IH0KKyAgICAKICAgICB2aXNpdFR5cGVSZWYobm9kZSkKICAg
ICB7CiAgICAgICAgIGxldCByZXBsYWNlbWVudCA9IHRoaXMuX21hcC5nZXQobm9kZS50eXBlKTsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1ZmZpeENhbGxBc3NpZ25tZW50
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1ZmZpeENh
bGxBc3NpZ25tZW50LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TdWZmaXhDYWxsQXNzaWdubWVudC5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDQ0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1
c2Ugc3RyaWN0IjsKLQotY2xhc3MgU3VmZml4Q2FsbEFzc2lnbm1lbnQgZXh0ZW5kcyBFeHByZXNz
aW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIGxocykKLSAgICB7Ci0gICAgICAg
IHN1cGVyKG9yaWdpbik7Ci0gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgICAgICB0aGlz
Ll9saHMgPSBsaHM7Ci0gICAgICAgIHRoaXMuZnVuYyA9IG51bGw7Ci0gICAgfQotICAgIAotICAg
IGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAgIGdldCBsaHMoKSB7IHJldHVy
biB0aGlzLl9saHM7IH0KLSAgICAKLSAgICB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5saHMgKyAiIHN1ZmZpeCAiICsgdGhpcy5uYW1lOwotICAgIH0KLX0KLQpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXpl
U3RydWN0QWNjZXNzb3JzLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycyhw
cm9ncmFtKQoreworICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkg
eworICAgICAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHR5cGUuZmll
bGRzKSB7CisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBlUGFyYW1ldGVycygpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUudHlwZVBhcmFtZXRlcnMubWFw
KAorICAgICAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyID0+IHR5cGVQYXJhbWV0ZXIudmlz
aXQobmV3IFR5cGVQYXJhbWV0ZXJSZXdyaXRlcigpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVR5cGVBcmd1bWVudHMoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0eXBlUGFyYW1ldGVycy5tYXAodHlwZVBh
cmFtZXRlciA9PiB0eXBlUGFyYW1ldGVyLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVwSW1wbGVt
ZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIGltcGxlbWVudGF0aW9uKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMuaW5zdGFudGlhdGVJbXBsZW1lbnRhdGlvbiA9IHN1
YnN0aXR1dGlvbiA9PiB7CisgICAgICAgICAgICAgICAgICAgIGxldCBuZXdUeXBlID0gdHlwZS5p
bnN0YW50aWF0ZSh0eXBlUGFyYW1ldGVycy5tYXAodHlwZVBhcmFtZXRlciA9PiBzdWJzdGl0dXRp
b24ubWFwLmdldCh0eXBlUGFyYW1ldGVyKSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
e3R5cGU6IG5ld1R5cGUsIGZpZWxkTmFtZTogZmllbGQubmFtZX07CisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLnZpc2l0SW1wbGVtZW50YXRpb25EYXRhID0g
KGltcGxlbWVudGF0aW9uRGF0YSwgdmlzaXRvcikgPT4geworICAgICAgICAgICAgICAgICAgICAv
LyBWaXNpdGluZyB0aGUgdHlwZSBmaXJzdCBlbnN1cmVzIHRoYXQgdGhlIHN0cnVjdCBsYXlvdXQg
YnVpbGRlciBmaWd1cmVzIG91dCB0aGUgZmllbGQncworICAgICAgICAgICAgICAgICAgICAvLyBv
ZmZzZXQuCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS50eXBlLnZpc2l0
KHZpc2l0b3IpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgbmF0aXZlRnVu
Yy5kaWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEgPSBpbXBsZW1lbnRhdGlvbkRh
dGEgPT4geworICAgICAgICAgICAgICAgICAgICBsZXQgc3RydWN0U2l6ZSA9IGltcGxlbWVudGF0
aW9uRGF0YS50eXBlLnNpemU7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3RTaXplID09
IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIHN0cnVj
dCBzaXplIGZvciAiICsgbmF0aXZlRnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGxldCBmaWVs
ZCA9IGltcGxlbWVudGF0aW9uRGF0YS50eXBlLmZpZWxkQnlOYW1lKGltcGxlbWVudGF0aW9uRGF0
YS5maWVsZE5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkKQorICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBmaWVsZCIpOwor
ICAgICAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gZmllbGQub2Zmc2V0OworICAgICAgICAg
ICAgICAgICAgICBsZXQgZmllbGRTaXplID0gZmllbGQudHlwZS5zaXplOworICAgICAgICAgICAg
ICAgICAgICBpZiAoZmllbGRTaXplID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIk5vIGZpZWxkIHNpemUgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJObyBvZmZzZXQgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5z
dHJ1Y3RTaXplID0gc3RydWN0U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRp
b25EYXRhLmZpZWxkU2l6ZSA9IGZpZWxkU2l6ZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIG5hdGl2ZUZ1bmMuaW1wbGVtZW50YXRpb24gPSAoYXJndW1lbnRMaXN0LCBub2Rl
KSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jSW5zdGFuY2UgPSBub2Rl
Lm5hdGl2ZUZ1bmNJbnN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGltcGxlbWVudGF0
aW9uRGF0YSA9IG5hdGl2ZUZ1bmNJbnN0YW5jZS5pbXBsZW1lbnRhdGlvbkRhdGE7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbigKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3VtZW50TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9u
RGF0YS5vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEu
c3RydWN0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5m
aWVsZFNpemUpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUZpZWxkVHlwZSgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGUudmlzaXQobmV3IFN1YnN0aXR1dGlv
bih0eXBlLnR5cGVQYXJhbWV0ZXJzLCB0eXBlUGFyYW1ldGVycykpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBlUmVmKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVHlwZVJlZi5pbnN0YW50aWF0ZSh0eXBl
LCBjcmVhdGVUeXBlQXJndW1lbnRzKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBsZXQgaXNDYXN0ID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgdHlwZVBhcmFt
ZXRlcnM7CisgICAgICAgICAgICBsZXQgbmF0aXZlRnVuYzsKKworICAgICAgICAgICAgLy8gVGhl
IGdldHRlcjogb3BlcmF0b3IuZmllbGQKKyAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzID0gY3Jl
YXRlVHlwZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZl
RnVuYygKKyAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQu
bmFtZSwgY3JlYXRlRmllbGRUeXBlKCksIHR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAg
IFtuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0ZVR5cGVSZWYoKSld
LCBpc0Nhc3QpOworICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVu
YywgKFtiYXNlXSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAg
ICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoZmllbGRTaXplKSwgMCk7
CisgICAgICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UucGx1cyhvZmZzZXQpLCBmaWVs
ZFNpemUpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBUaGUgc2V0dGVyOiBvcGVyYXRvci5maWVsZD0KKyAgICAgICAgICAgIHR5cGVQ
YXJhbWV0ZXJzID0gY3JlYXRlVHlwZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIG5hdGl2ZUZ1
bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVy
YXRvci4iICsgZmllbGQubmFtZSArICI9IiwgY3JlYXRlVHlwZVJlZigpLCB0eXBlUGFyYW1ldGVy
cywKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1l
dGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgY3JlYXRlVHlwZVJlZigpKSwKKyAgICAgICAgICAgICAg
ICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVGaWVsZFR5
cGUoKSkKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGlzQ2FzdCk7CisgICAg
ICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2UsIHZhbHVl
XSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAgICAgICBs
ZXQgcmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoc3RydWN0U2l6ZSksIDApOworICAgICAg
ICAgICAgICAgIHJlc3VsdC5jb3B5RnJvbShiYXNlLCBzdHJ1Y3RTaXplKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQucGx1cyhvZmZzZXQpLmNvcHlGcm9tKHZhbHVlLCBmaWVsZFNpemUpOworICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBU
aGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAorICAgICAgICAgICAgZnVuY3Rpb24gc2V0dXBBbmRl
cihhZGRyZXNzU3BhY2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHlwZVBhcmFt
ZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOworICAgICAgICAgICAgICAgIG5hdGl2ZUZ1
bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgICAgICAgICAgZmllbGQub3JpZ2luLCAi
b3BlcmF0b3ImLiIgKyBmaWVsZC5uYW1lLCBuZXcgUHRyVHlwZShmaWVsZC5vcmlnaW4sIGFkZHJl
c3NTcGFjZSwgY3JlYXRlRmllbGRUeXBlKCkpLAorICAgICAgICAgICAgICAgICAgICB0eXBlUGFy
YW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAg
bmV3IEZ1bmNQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQub3Jp
Z2luLCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQdHJUeXBlKGZpZWxk
Lm9yaWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVUeXBlUmVmKCkpKQorICAgICAgICAgICAgICAg
ICAgICBdLAorICAgICAgICAgICAgICAgICAgICBpc0Nhc3QpOworICAgICAgICAgICAgICAgIHNl
dHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0
U2l6ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlLmxv
YWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2UpCisgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcs
ICJOdWxsIGRlcmVmZXJlbmNlIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJv
eChiYXNlLnBsdXMob2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHNldHVwQW5kZXIoInRocmVhZCIpOworICAgICAgICAgICAgaWYgKHR5cGUu
aW5zdGFudGlhdGUoKS5pc1ByaW1pdGl2ZSkgeworICAgICAgICAgICAgICAgIHNldHVwQW5kZXIo
InRocmVhZGdyb3VwIik7CisgICAgICAgICAgICAgICAgc2V0dXBBbmRlcigiZGV2aWNlIik7Cisg
ICAgICAgICAgICAgICAgc2V0dXBBbmRlcigiY29uc3RhbnQiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rl
c3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0
Lmh0bWwJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Rlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDYgQEAKIDxzY3JpcHQgc3JjPSJS
ZWZlcmVuY2VUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJWYWx1ZS5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
VmlzaXRvckJhc2UuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJld3JpdGVyLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJWaXNpdG9yLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJD
cmVhdGVMaXRlcmFsLmpzIj48L3NjcmlwdD4KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Rlc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVGVzdC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBmdW5jdGlvbiBj
aGVja051bWJlcihwcm9ncmFtLCByZXN1bHQsIGV4CiAgICAgaWYgKCFyZXN1bHQudHlwZS5pc051
bWJlcikKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQgdHlwZTsgcmVzdWx0
OiAiICsgcmVzdWx0KTsKICAgICBpZiAocmVzdWx0LnZhbHVlICE9IGV4cGVjdGVkKQotICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdDogIiArIHJlc3VsdCArICIgKGV4cGVjdGVk
ICIgKyBleHBlY3RlZCArICIpIik7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVz
dWx0OiAiICsgcmVzdWx0LnZhbHVlICsgIiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIikiKTsK
IH0KIAogZnVuY3Rpb24gbWFrZVVpbnQocHJvZ3JhbSwgdmFsdWUpCkBAIC03NDMsNyArNzQzLDcg
QEAgZnVuY3Rpb24gVEVTVF9zdG9yZU51bGxBcnJheVJlZigpCiAgICAgICAgICgpID0+IGRvUHJl
cChgCiAgICAgICAgICAgICB2b2lkIGZvbygpIHsgbnVsbFswdV0gPSA0MjsgfQogICAgICAgICBg
KSwKLSAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5p
bmRleE9mKCJEaWQgbm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwiKSAhPSAtMSk7CisgICAgICAg
IChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiTEhT
IG9mIGFzc2lnbm1lbnQgaXMgbm90IGFuIExWYWx1ZSIpICE9IC0xKTsKIH0KIAogZnVuY3Rpb24g
VEVTVF9yZXR1cm5OdWxsQXJyYXlSZWYoKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9UeXBlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBAIGNsYXNzIFR5cGUg
ZXh0ZW5kcyBOb2RlIHsKICAgICBnZXQga2luZCgpIHsgcmV0dXJuIFR5cGU7IH0KICAgICBnZXQg
aXNQdHIoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGdldCBpc0FycmF5UmVmKCkgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBnZXQgaXNSZWYoKSB7IHJldHVybiB0aGlzLmlzUHRyIHx8IHRoaXMuaXNB
cnJheVJlZjsgfQogICAgIGdldCBpc051bWJlcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0
IGlzSW50KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNGbG9hdCgpIHsgcmV0dXJuIGZh
bHNlOyB9CkBAIC00MSw1ICs0MiwxOSBAQCBjbGFzcyBUeXBlIGV4dGVuZHMgTm9kZSB7CiAgICAg
fQogICAgIAogICAgIGdldCBpbnN0YW50aWF0ZWRUeXBlKCkgeyByZXR1cm4gdGhpcy52aXNpdChu
ZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCkpOyB9CisgICAgCisgICAgLy8gSGF2ZSB0byBjYWxs
IHRoZXNlIG9uIHRoZSB1bmlmeU5vZGUuCisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmln
aW4sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBNYWtlUHRyRXhwcmVzc2lvbihv
cmlnaW4sIHZhbHVlKTsKKyAgICB9CisgICAgYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQob3Jp
Z2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQdHJUeXBlKG9yaWdpbiwgInRocmVhZCIs
IHRoaXMpOworICAgIH0KKyAgICByZXR1cm5UeXBlRnJvbUFuZE92ZXJsb2FkKG9yaWdpbikKKyAg
ICB7CisgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJC
eS1wb2ludGVyIG92ZXJsb2FkIHJldHVybmVkIG5vbi1wb2ludGVyIHR5cGU6ICIgKyB0aGlzKTsK
KyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJh
bWV0ZXJSZXdyaXRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UeXBlUGFyYW1ldGVyUmV3cml0ZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgVHlwZVBhcmFtZXRlclJld3JpdGVyIHsK
KyAgICB2aXNpdENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIobm9kZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgQ29uc3RleHByVHlwZVBhcmFtZXRlcihub2RlLm9yaWdpbiwgbm9kZS5uYW1lLCBu
b2RlLnR5cGUudmlzaXQobmV3IFJld3JpdGVyKCkpKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRU
eXBlVmFyaWFibGUobm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVHlwZVZhcmlhYmxl
KG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUucHJvdG9jb2wpOworICAgIH0KK30KKwpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlVHJhY2tlci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVU
cmFja2VyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1R5cGVWYXJpYWJsZVRyYWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3Qi
OworCitjbGFzcyBUeXBlVmFyaWFibGVUcmFja2VyIGV4dGVuZHMgVmlzaXRvciB7CisgICAgY29u
c3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgdGhpcy5fc2V0ID0g
bmV3IFNldCgpOworICAgIH0KKyAgICAKKyAgICBnZXQgc2V0KCkgeyByZXR1cm4gdGhpcy5fc2V0
OyB9CisgICAgCisgICAgX2NvbnNpZGVyKHRoaW5nKQorICAgIHsKKyAgICAgICAgaWYgKHRoaW5n
LmlzVW5pZmlhYmxlKQorICAgICAgICAgICAgdGhpcy5fc2V0LmFkZCh0aGluZyk7CisgICAgfQor
ICAgIAorICAgIHZpc2l0VHlwZVJlZihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29uc2lk
ZXIobm9kZS50eXBlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fY29uc2lkZXIodGhpcy52YXJpYWJsZSk7CisgICAgfQorfQor
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYWx1ZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYWx1ZS5qcwkocmV2aXNpb24gMjIy
MTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDUgKzI4LDE0IEBAIGNsYXNzIFZhbHVlIGV4dGVuZHMgTm9kZSB7CiAgICAg
Z2V0IGtpbmQoKSB7IHJldHVybiBWYWx1ZTsgfQogICAgIGdldCBpc0NvbnN0ZXhwcigpIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAK
KyAgICBiZWNvbWUob3RoZXJWYWx1ZSkKKyAgICB7CisgICAgICAgIC8vIE5PVEU6IE1ha2Ugc3Vy
ZSB0aGF0IElkZW50aXR5RXhwcmVzc2lvbiBpbXBsZW1lbnRzIHVuaWZ5Tm9kZSBhbmQgYWxsIHRo
YXQKKyAgICAgICAgbGV0IG9yaWdpbiA9IHRoaXMub3JpZ2luOworICAgICAgICB0aGlzLl9fcHJv
dG9fXyA9IElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5cGU7CisgICAgICAgIHRoaXMuX29yaWdp
biA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5fdGFyZ2V0ID0gb3RoZXJWYWx1ZTsKKyAgICB9CiB9
CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpz
CShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJp
YWJsZVJlZi5qcwkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDkgQEAgY2xhc3MgVmFyaWFi
bGVSZWYgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAgICAKICAgICBnZXQgbmFtZSgpIHsgcmV0dXJu
IHRoaXMuX25hbWU7IH0KICAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJldHVybiB0aGlzLnZhcmlh
YmxlLmlzQ29uc3RleHByOyB9Ci0gICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFy
aWFibGUudW5pZnlOb2RlOyB9CisgICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFy
aWFibGUudW5pZnlOb2RlOyB9IC8vIFRoaXMgb25seSBtYWtlcyBzZW5zZSB3aGVuIHRoaXMgaXMg
YSBjb25zdGV4cHIuCiAgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGdl
dCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiAidGhyZWFkIjsgfQotICAgIGdldCB1bmlmeU5vZGUo
KSB7IHJldHVybiB0aGlzLnZhcmlhYmxlOyB9CiAgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkod29y
a2luZyBjb3B5KQpAQCAtMjQsMTIgKzI0LDcgQEAKICAqLwogInVzZSBzdHJpY3QiOwogCi1jbGFz
cyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewotICAgIGNvbnN0cnVjdG9yKCkKLSAgICB7
Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgfQotICAgIAorY2xhc3MgVmlzaXRvciB7CiAgICAgdmlz
aXRQcm9ncmFtKG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2Ygbm9k
ZS50b3BMZXZlbFN0YXRlbWVudHMpCkBAIC03MCw2ICs2NSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0
ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgewogICAgICAgICBub2RlLmZ1bmMudmlzaXQodGhpcyk7
CiAgICAgICAgIHRoaXMudmlzaXRGdW5jKG5vZGUpOworICAgICAgICBub2RlLmZ1bmMudmlzaXRJ
bXBsZW1lbnRhdGlvbkRhdGEobm9kZS5pbXBsZW1lbnRhdGlvbkRhdGEsIHRoaXMpOwogICAgIH0K
ICAgICAKICAgICB2aXNpdEJsb2NrKG5vZGUpCkBAIC0xMDAsOCArOTYsNyBAQCBjbGFzcyBWaXNp
dG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHsKICAgICAgICAgZm9yIChsZXQgdHlwZUFy
Z3VtZW50IG9mIG5vZGUudHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgIHR5cGVBcmd1bWVudC52
aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUudHlw
ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAg
IH0KICAgICAKICAgICB2aXNpdE5hdGl2ZVR5cGUobm9kZSkKQEAgLTEzNCw4ICsxMjksNyBAQCBj
bGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0VHlwZVZh
cmlhYmxlKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5wcm90b2NvbCkKLSAgICAgICAg
ICAgIG5vZGUucHJvdG9jb2wudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5w
cm90b2NvbCwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0Q29uc3RleHByVHlwZVBhcmFt
ZXRlcihub2RlKQpAQCAtMTc3LDggKzE3MSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNp
dG9yQmFzZSB7CiAgICAgdmlzaXRWYXJpYWJsZURlY2wobm9kZSkKICAgICB7CiAgICAgICAgIG5v
ZGUudHlwZS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIpCi0gICAg
ICAgICAgICBub2RlLmluaXRpYWxpemVyLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0
KG5vZGUuaW5pdGlhbGl6ZXIsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdEFzc2lnbm1l
bnQobm9kZSkKQEAgLTE4NywxNiArMTgwLDQxIEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNp
dG9yQmFzZSB7CiAgICAgICAgIG5vZGUucmhzLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKKyAg
ICB2aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5v
ZGUubFZhbHVlLnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnZpc2l0KHRo
aXMpOworICAgICAgICBub2RlLm5ld1ZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAgICBub2Rl
Lm5ld1ZhbHVlRXhwLnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLnJlc3VsdEV4cC52aXNpdCh0
aGlzKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkK
ICAgICB7CiAgICAgICAgIG5vZGUucHRyLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKKyAgICBf
aGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBOb2Rl
LnZpc2l0KG5vZGUuYmFzZVR5cGUsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuY2Fs
bEZvckdldCwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlRm9yR2V0
LCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmNhbGxGb3JBbmQsIHRoaXMpOworICAg
ICAgICBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckFuZCwgdGhpcyk7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS5jYWxsRm9yU2V0LCB0aGlzKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXRE
b3RFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBub2RlLnN0cnVjdC52aXNpdCh0aGlz
KTsKLSAgICAgICAgaWYgKG5vZGUuc3RydWN0VHlwZSkKLSAgICAgICAgICAgIG5vZGUuc3RydWN0
VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2Rl
KQorICAgIHsKKyAgICAgICAgbm9kZS5hcnJheS52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5p
bmRleC52aXNpdCh0aGlzKTsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uKG5vZGUpOwogICAgIH0KICAgICAKICAgICB2aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5v
ZGUpCkBAIC0yMDcsOCArMjI1LDcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNl
IHsKICAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAg
IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5udW1FbGVtZW50cykK
LSAgICAgICAgICAgIG5vZGUubnVtRWxlbWVudHMudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUu
dmlzaXQobm9kZS5udW1FbGVtZW50cywgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0Q29u
dmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpCkBAIC0yMjQsOCArMjQxLDcgQEAgY2xh
c3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB7CiAgICAgICAgIG5vZGUuY29u
ZGl0aW9uYWwudmlzaXQodGhpcyk7CiAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKTsKLSAg
ICAgICAgaWYgKG5vZGUuZWxzZUJvZHkpCi0gICAgICAgICAgICBub2RlLmVsc2VCb2R5LnZpc2l0
KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuZWxzZUJvZHksIHRoaXMpOwogICAgIH0K
ICAgICAKICAgICB2aXNpdFdoaWxlTG9vcChub2RlKQpAQCAtMjQyLDE5ICsyNTgsMTUgQEAgY2xh
c3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2aXNpdEZvckxvb3Ao
bm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmluaXRpYWxpemF0aW9uKQotICAgICAgICAg
ICAgbm9kZS5pbml0aWFsaXphdGlvbi52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUuY29u
ZGl0aW9uKQotICAgICAgICAgICAgbm9kZS5jb25kaXRpb24udmlzaXQodGhpcyk7Ci0gICAgICAg
IGlmIChub2RlLmluY3JlbWVudCkKLSAgICAgICAgICAgIG5vZGUuaW5jcmVtZW50LnZpc2l0KHRo
aXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5pdGlhbGl6YXRpb24sIHRoaXMpOworICAg
ICAgICBOb2RlLnZpc2l0KG5vZGUuY29uZGl0aW9uLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNp
dChub2RlLmluY3JlbWVudCwgdGhpcyk7CiAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKTsK
ICAgICB9CiAKICAgICB2aXNpdFJldHVybihub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUu
dmFsdWUpCi0gICAgICAgICAgICBub2RlLnZhbHVlLnZpc2l0KHRoaXMpOworICAgICAgICBOb2Rl
LnZpc2l0KG5vZGUudmFsdWUsIHRoaXMpOwogICAgIH0KIAogICAgIHZpc2l0Q29udGludWUobm9k
ZSkKQEAgLTI3Miw4ICsyODQsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2Ug
ewogICAgIAogICAgIHZpc2l0R2VuZXJpY0xpdGVyYWxUeXBlKG5vZGUpCiAgICAgewotICAgICAg
ICBpZiAobm9kZS50eXBlKQotICAgICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOworICAg
ICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgICAgIG5vZGUucHJlZmVycmVk
VHlwZS52aXNpdCh0aGlzKTsKICAgICB9CiAgICAgCkBAIC0yODgsOCArMjk5LDcgQEAgY2xhc3Mg
VmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2aXNpdE51bGxUeXBlKG5v
ZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS50eXBlKQotICAgICAgICAgICAgbm9kZS50eXBl
LnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAg
fQogICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKQEAgLTMwMywxMCArMzEzLDkg
QEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgICAgIGZvciAo
bGV0IGFyZ3VtZW50IG9mIGFjdHVhbFR5cGVBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgYXJn
dW1lbnQudmlzaXQodGhpcyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlw
ZSkKLSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYg
KG5vZGUucmVzdWx0VHlwZSkKLSAgICAgICAgICAgIG5vZGUucmVzdWx0VHlwZS52aXNpdCh0aGlz
KTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLm5hdGl2ZUZ1bmNJbnN0YW5jZSwgdGhpcyk7Cisg
ICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXR1cm5UeXBlLCB0aGlzKTsKKyAgICAgICAgTm9kZS52
aXNpdChub2RlLnJlc3VsdFR5cGUsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdExvZ2lj
YWxOb3Qobm9kZSkKQEAgLTMxNiwyMSArMzI1LDIzIEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBW
aXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRGdW5jdGlvbkxpa2VCbG9jayhub2RlKQogICAg
IHsKLSAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKLSAgICAgICAgICAgIG5vZGUucmV0dXJu
VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJldHVyblR5cGUsIHRo
aXMpOwogICAgICAgICBmb3IgKGxldCBhcmd1bWVudCBvZiBub2RlLmFyZ3VtZW50TGlzdCkKICAg
ICAgICAgICAgIGFyZ3VtZW50LnZpc2l0KHRoaXMpOwogICAgICAgICBmb3IgKGxldCBwYXJhbWV0
ZXIgb2Ygbm9kZS5wYXJhbWV0ZXJzKQogICAgICAgICAgICAgcGFyYW1ldGVyLnZpc2l0KHRoaXMp
OwogICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLnJlc3Vs
dFR5cGUpCi0gICAgICAgICAgICBub2RlLnJlc3VsdFR5cGUudmlzaXQodGhpcyk7CisgICAgICAg
IE5vZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlLCB0aGlzKTsKICAgICB9CiAgICAgCi0gICAgdmlz
aXRMZXRFeHByZXNzaW9uKG5vZGUpCisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShub2RlKQog
ICAgIHsKLSAgICAgICAgbm9kZS5hcmd1bWVudC52aXNpdCh0aGlzKTsKLSAgICAgICAgbm9kZS5i
b2R5LnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7Cisg
ICAgfQorICAgIAorICAgIHZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAg
ICAgICBub2RlLnRhcmdldC52aXNpdCh0aGlzKTsKICAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzCShyZXZpc2lvbiAyMjIxMjMp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yQmFzZS5qcwkobm9uZXhp
c3RlbnQpCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgVmlzaXRvckJhc2UgewotICAgIGNv
bnN0cnVjdG9yKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21lbW9UYWJsZSA9IG5ldyBNYXAoKTsK
LSAgICB9Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321023</attachid>
            <date>2017-09-16 21:12:13 -0700</date>
            <delta_ts>2017-09-16 21:58:43 -0700</delta_ts>
            <desc>it&apos;s passing significant tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>129429</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BZGRyZXNzU3BhY2UuanMJ
KHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FkZHJl
c3NTcGFjZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksMTYgQEAgZnVuY3Rpb24gaXNB
ZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQogICAgIH0KIH0KIAorZnVuY3Rpb24gbmVlZHNQcmlt
aXRpdmVQcm90b2NvbChhZGRyZXNzU3BhY2UpCit7CisgICAgcmV0dXJuIGFkZHJlc3NTcGFjZSAh
PSAidGhyZWFkIjsKK30KKworZnVuY3Rpb24gcHJvdG9jb2xTdWZmaXgoYWRkcmVzc1NwYWNlKQor
eworICAgIHJldHVybiBuZWVkc1ByaW1pdGl2ZVByb3RvY29sKGFkZHJlc3NTcGFjZSkgPyAiOnBy
aW1pdGl2ZSIgOiAiIjsKK30KKwogZnVuY3Rpb24gdmFsaWRhdGVBZGRyZXNzU3BhY2UoYWRkcmVz
c1NwYWNlKQogewogICAgIGlmICghaXNBZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKSkKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMjks
MTMgKzI5LDE0IEBAIGxvYWQoIlR5cGUuanMiKTsKIGxvYWQoIlJlZmVyZW5jZVR5cGUuanMiKTsK
IGxvYWQoIlZhbHVlLmpzIik7CiBsb2FkKCJFeHByZXNzaW9uLmpzIik7Ci1sb2FkKCJWaXNpdG9y
QmFzZS5qcyIpOwogbG9hZCgiUmV3cml0ZXIuanMiKTsKIGxvYWQoIlZpc2l0b3IuanMiKTsKIGxv
YWQoIkNyZWF0ZUxpdGVyYWwuanMiKTsKIGxvYWQoIkNyZWF0ZUxpdGVyYWxUeXBlLmpzIik7Cits
b2FkKCJQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMiKTsKIAogbG9hZCgiQWRkcmVzc1NwYWNl
LmpzIik7Citsb2FkKCJBbm9ueW1vdXNWYXJpYWJsZS5qcyIpOwogbG9hZCgiQXJyYXlSZWZUeXBl
LmpzIik7CiBsb2FkKCJBcnJheVR5cGUuanMiKTsKIGxvYWQoIkFzc2lnbm1lbnQuanMiKTsKQEAg
LTQzLDcgKzQ0LDYgQEAgbG9hZCgiQXV0b1dyYXBwZXIuanMiKTsKIGxvYWQoIkJsb2NrLmpzIik7
CiBsb2FkKCJCb29sTGl0ZXJhbC5qcyIpOwogbG9hZCgiQnJlYWsuanMiKTsKLWxvYWQoIkNhbGxB
c3NpZ25tZW50LmpzIik7CiBsb2FkKCJDYWxsRXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiQ2FsbEZ1
bmN0aW9uLmpzIik7CiBsb2FkKCJDaGVjay5qcyIpOwpAQCAtNzYsNyArNzYsOSBAQCBsb2FkKCJG
dW5jRGVmLmpzIik7CiBsb2FkKCJGdW5jSW5zdGFudGlhdG9yLmpzIik7CiBsb2FkKCJGdW5jUGFy
YW1ldGVyLmpzIik7CiBsb2FkKCJGdW5jdGlvbkxpa2VCbG9jay5qcyIpOworbG9hZCgiSWRlbnRp
dHlFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJJZlN0YXRlbWVudC5qcyIpOworbG9hZCgiSW5kZXhF
eHByZXNzaW9uLmpzIik7CiBsb2FkKCJJbmZlclR5cGVzRm9yQ2FsbC5qcyIpOwogbG9hZCgiSW5s
aW5lLmpzIik7CiBsb2FkKCJJbmxpbmVyLmpzIik7CkBAIC04NCw3ICs4Niw2IEBAIGxvYWQoIklu
c3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbC5qcyIpOwogbG9hZCgi
SW50TGl0ZXJhbFR5cGUuanMiKTsKIGxvYWQoIkludHJpbnNpY3MuanMiKTsKLWxvYWQoIkxldEV4
cHJlc3Npb24uanMiKTsKIGxvYWQoIkxleGVyLmpzIik7CiBsb2FkKCJMZXhlclRva2VuLmpzIik7
CiBsb2FkKCJMaXRlcmFsVHlwZUNoZWNrZXIuanMiKTsKQEAgLTk4LDIwICs5OSwyNCBAQCBsb2Fk
KCJOYXRpdmVGdW5jLmpzIik7CiBsb2FkKCJOYXRpdmVGdW5jSW5zdGFuY2UuanMiKTsKIGxvYWQo
Ik5hdGl2ZVR5cGUuanMiKTsKIGxvYWQoIk5hdGl2ZVR5cGVJbnN0YW5jZS5qcyIpOworbG9hZCgi
Tm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcyIpOwogbG9hZCgiTnVsbExpdGVyYWwuanMiKTsK
IGxvYWQoIk51bGxUeXBlLmpzIik7CiBsb2FkKCJPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlLmpz
Iik7CiBsb2FkKCJQYXJzZS5qcyIpOwogbG9hZCgiUHJlcGFyZS5qcyIpOwogbG9hZCgiUHJvZ3Jh
bS5qcyIpOworbG9hZCgiUHJvcGVydHlSZXNvbHZlci5qcyIpOwogbG9hZCgiUHJvdG9jb2wuanMi
KTsKIGxvYWQoIlByb3RvY29sRGVjbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xGdW5jRGVjbC5qcyIp
OwogbG9hZCgiUHJvdG9jb2xSZWYuanMiKTsKIGxvYWQoIlB0clR5cGUuanMiKTsKK2xvYWQoIlJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMiKTsKIGxvYWQoIlJlY3Vyc2lvbkNoZWNrZXIuanMi
KTsKIGxvYWQoIlJlc29sdmVOYW1lcy5qcyIpOwogbG9hZCgiUmVzb2x2ZU92ZXJsb2FkSW1wbC5q
cyIpOworbG9hZCgiUmVzb2x2ZVByb3BlcnRpZXMuanMiKTsKIGxvYWQoIlJlc29sdmVUeXBlRGVm
cy5qcyIpOwogbG9hZCgiUmV0dXJuLmpzIik7CiBsb2FkKCJSZXR1cm5DaGVja2VyLmpzIik7CkBA
IC0xMjAsMTIgKzEyNSwxNCBAQCBsb2FkKCJTdGFuZGFyZExpYnJhcnkuanMiKTsKIGxvYWQoIlN0
cnVjdExheW91dEJ1aWxkZXIuanMiKTsKIGxvYWQoIlN0cnVjdFR5cGUuanMiKTsKIGxvYWQoIlN1
YnN0aXR1dGlvbi5qcyIpOwotbG9hZCgiU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMiKTsKK2xvYWQo
IlN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMiKTsKIGxvYWQoIlR5cGVEZWYuanMiKTsKIGxv
YWQoIlR5cGVEZWZSZXNvbHZlci5qcyIpOwogbG9hZCgiVHlwZU9yVmFyaWFibGVSZWYuanMiKTsK
K2xvYWQoIlR5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcyIpOwogbG9hZCgiVHlwZVJlZi5qcyIpOwog
bG9hZCgiVHlwZVZhcmlhYmxlLmpzIik7Citsb2FkKCJUeXBlVmFyaWFibGVUcmFja2VyLmpzIik7
CiBsb2FkKCJUeXBlZFZhbHVlLmpzIik7CiBsb2FkKCJVaW50TGl0ZXJhbC5qcyIpOwogbG9hZCgi
VWludExpdGVyYWxUeXBlLmpzIik7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bbm9ueW1vdXNWYXJpYWJsZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisidXNlIHN0cmljdCI7CisKK2xldCBhbm9ueW1vdXNWYXJpYWJsZUNvdW50ID0gMDsK
KworY2xhc3MgQW5vbnltb3VzVmFyaWFibGUgZXh0ZW5kcyBWYWx1ZSB7CisgICAgLy8gWW91IGhh
dmUgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUncyB2YWx1ZSBiZWZvcmUgdXNlLCBidXQgdGhh
dCBjb3VsZCBiZSBxdWl0ZSBsYXRlLgorICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgdHlwZSA9IG51
bGwpCisgICAgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmln
aW47CisgICAgICAgIHRoaXMuaW5kZXggPSBhbm9ueW1vdXNWYXJpYWJsZUNvdW50Kys7CisgICAg
ICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgfQorICAgIAorICAgIGdldCBvcmlnaW4oKSB7IHJl
dHVybiB0aGlzLl9vcmlnaW47IH0KKyAgICBnZXQgbmFtZSgpIHsgcmV0dXJuICJhbm9uVmFyPCIg
KyB0aGlzLmluZGV4ICsgIj4iOyB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMubmFtZTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsMTUgQEAgY2xhc3MgQXJyYXlSZWZUeXBlIGV4dGVuZHMgUmVmZXJlbmNl
VHlwZQogICAgIAogICAgIGdldCBpc0FycmF5UmVmKCkgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAg
YXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlOworICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChvcmlnaW4p
CisgICAgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKICAgICB0b1N0cmluZygpCiAg
ICAgewogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZSArICJbXSAiICsgdGhpcy5hZGRy
ZXNzU3BhY2U7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlUeXBl
LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9B
cnJheVR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTczLDUgKzczLDE2IEBAIGNsYXNzIEFycmF5
VHlwZSBleHRlbmRzIFR5cGUgewogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVu
dFR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5lbGVtZW50VHlwZSk7CiAgICAg
fQorCisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbGV0IHJlc3VsdCA9IG5ldyBNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG9yaWdpbiwgdmFs
dWUpOworICAgICAgICByZXN1bHQubnVtRWxlbWVudHMgPSB0aGlzLm51bUVsZW1lbnRzOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9h
ZChvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEFycmF5UmVmVHlwZShvcmlnaW4s
ICJ0aHJlYWQiLCB0aGlzLmVsZW1lbnRUeXBlKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVudC5qcwkocmV2aXNpb24gMjIyMTIzKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVudC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjUsMTEgKzI1LDEyIEBACiAidXNlIHN0cmljdCI7CiAKIGNsYXNzIEFzc2lnbm1l
bnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGxocywgcmhz
KQorICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMsIHR5cGUgPSBudWxsKQogICAgIHsK
ICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fbGhzID0gbGhzOwogICAgICAg
ICB0aGlzLl9yaHMgPSByaHM7CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICAgfQogICAg
IAogICAgIGdldCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCShyZXZpc2lvbiAyMjIx
MjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsQXNzaWdubWVudC5qcwko
bm9uZXhpc3RlbnQpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgQ2FsbEFzc2lnbm1lbnQg
ZXh0ZW5kcyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIGxocywg
cmhzKQotICAgIHsKLSAgICAgICAgc3VwZXIob3JpZ2luKTsKLSAgICAgICAgdGhpcy5fbmFtZSA9
IG5hbWU7Ci0gICAgICAgIHRoaXMuX2xocyA9IGxoczsKLSAgICAgICAgdGhpcy5fcmhzID0gcmhz
OwotICAgICAgICB0aGlzLmZ1bmMgPSBudWxsOwotICAgIH0KLSAgICAKLSAgICBnZXQgbmFtZSgp
IHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KLSAgICBnZXQgbGhzKCkgeyByZXR1cm4gdGhpcy5fbGhz
OyB9Ci0gICAgZ2V0IHJocygpIHsgcmV0dXJuIHRoaXMuX3JoczsgfSAvLyBUaGlzIGNhbiBiZSBu
dWxsLgotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmxo
cyArICIgIiArIHRoaXMubmFtZSArICh0aGlzLnJocyA/ICI9ICIgKyB0aGlzLnJocyA6ICIiKTsK
LSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHBy
ZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Nh
bGxFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtNDIsMTUgKzQy
LDgyIEBAIGNsYXNzIENhbGxFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiAKICAgICBnZXQg
aXNDYXN0KCkgeyByZXR1cm4gdGhpcy5faXNDYXN0OyB9CiAgICAgZ2V0IHJldHVyblR5cGUoKSB7
IHJldHVybiB0aGlzLl9yZXR1cm5UeXBlOyB9CiAgICAgCi0gICAgcmVzb2x2ZShvdmVybG9hZCkK
KyAgICBzdGF0aWMgcmVzb2x2ZShvcmlnaW4sIHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1l
dGVyc0luU2NvcGUsIG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50TGlzdCwgYXJndW1lbnRU
eXBlcywgcmV0dXJuVHlwZSkKKyAgICB7CisgICAgICAgIGxldCBjYWxsID0gbmV3IENhbGxFeHBy
ZXNzaW9uKG9yaWdpbiwgbmFtZSwgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRMaXN0KTsKKyAgICAg
ICAgY2FsbC5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlczsKKyAgICAgICAgaWYgKHJldHVy
blR5cGUpCisgICAgICAgICAgICBjYWxsLnNldENhc3REYXRhKHJldHVyblR5cGUpOworICAgICAg
ICByZXR1cm4ge2NhbGwsIHJlc3VsdFR5cGU6IGNhbGwucmVzb2x2ZShwb3NzaWJsZU92ZXJsb2Fk
cywgdHlwZVBhcmFtZXRlcnNJblNjb3BlLCB0eXBlQXJndW1lbnRzKX07CisgICAgfQorICAgIAor
ICAgIHJlc29sdmUocG9zc2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSwgdHlw
ZUFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGlmICghcG9zc2libGVPdmVybG9hZHMpCisgICAg
ICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJE
aWQgbm90IGZpbmQgYW55IGZ1bmN0aW9ucyBuYW1lZCAiICsgdGhpcy5uYW1lKTsKKyAgICAgICAg
CisgICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7CisgICAgICAgIGxldCBmYWlsdXJlcyA9IFtd
OworICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHR5cGVQYXJhbWV0ZXJzSW5TY29w
ZSkgeworICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRlciBpbnN0YW5jZW9mIFR5cGVWYXJp
YWJsZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIXR5cGVQ
YXJhbWV0ZXIucHJvdG9jb2wpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBsZXQgc2lnbmF0dXJlcyA9CisgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5wcm90b2Nv
bC5wcm90b2NvbERlY2wuc2lnbmF0dXJlc0J5TmFtZVdpdGhUeXBlVmFyaWFibGUodGhpcy5uYW1l
LCB0eXBlUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGlmICghc2lnbmF0dXJlcykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG92ZXJsb2FkID0gcmVzb2x2ZU92ZXJsb2Fk
SW1wbChzaWduYXR1cmVzLCB0aGlzLnR5cGVBcmd1bWVudHMsIHRoaXMuYXJndW1lbnRUeXBlcywg
dGhpcy5yZXR1cm5UeXBlKTsKKyAgICAgICAgICAgIGlmIChvdmVybG9hZC5mdW5jKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5m
YWlsdXJlcyk7CisgICAgICAgICAgICBvdmVybG9hZCA9IG51bGw7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFvdmVybG9hZCkgeworICAgICAgICAgICAgb3ZlcmxvYWQgPSByZXNvbHZlT3Zlcmxv
YWRJbXBsKAorICAgICAgICAgICAgICAgIHBvc3NpYmxlT3ZlcmxvYWRzLCB0aGlzLnR5cGVBcmd1
bWVudHMsIHRoaXMuYXJndW1lbnRUeXBlcywgdGhpcy5yZXR1cm5UeXBlKTsKKyAgICAgICAgICAg
IGlmICghb3ZlcmxvYWQuZnVuYykgeworICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1c2goLi4u
b3ZlcmxvYWQuZmFpbHVyZXMpOworICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0gIkRpZCBu
b3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCB3aXRoICI7CisgICAgICAgICAgICAgICAgaWYgKHRo
aXMudHlwZUFyZ3VtZW50cy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0g
InR5cGUgYXJndW1lbnRzIDwiICsgdGhpcy50eXBlQXJndW1lbnRzICsgIj4gYW5kICI7CisgICAg
ICAgICAgICAgICAgbWVzc2FnZSArPSAiYXJndW1lbnQgdHlwZXMgKCIgKyB0aGlzLmFyZ3VtZW50
VHlwZXMgKyAiKSI7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMucmV0dXJuVHlwZSkKKyAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5kIHJldHVybiB0eXBlICIgKyB0aGlzLnJldHVy
blR5cGU7CisgICAgICAgICAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0aCkKKyAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lkZXJlZDpcbiIgKyBmYWlsdXJlcy5qb2lu
KCJcbiIpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IodGhpcy5vcmlnaW4u
b3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgIGxldCB0eXBlQXJndW1lbnRUeXBlID0gdHlwZUFyZ3VtZW50c1tpXTsKKyAgICAgICAg
ICAgIGxldCB0eXBlUGFyYW1ldGVyID0gb3ZlcmxvYWQuZnVuYy50eXBlUGFyYW1ldGVyc1tpXTsK
KyAgICAgICAgICAgIGlmICghKHR5cGVQYXJhbWV0ZXIgaW5zdGFuY2VvZiBDb25zdGV4cHJUeXBl
UGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICgh
dHlwZVBhcmFtZXRlci50eXBlLmVxdWFsc1dpdGhDb21taXQodHlwZUFyZ3VtZW50VHlwZSkpCisg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdCAiICsgdGhpcy5vcmlnaW4ub3JpZ2lu
U3RyaW5nICsgIiBjb25zdGV4cHIgdHlwZSBhcmd1bWVudCBhbmQgcGFyYW1ldGVyIHR5cGVzIG5v
dCBlcXVhbDogYXJndW1lbnQgPSAiICsgdHlwZUFyZ3VtZW50VHlwZSArICIsIHBhcmFtZXRlciA9
ICIgKyB0eXBlUGFyYW1ldGVyLnR5cGUpOworICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgdGhpcy5hcmd1bWVudFR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBs
ZXQgYXJndW1lbnRUeXBlID0gdGhpcy5hcmd1bWVudFR5cGVzW2ldOworICAgICAgICAgICAgbGV0
IHBhcmFtZXRlclR5cGUgPSBvdmVybG9hZC5mdW5jLnBhcmFtZXRlcnNbaV0udHlwZS5zdWJzdGl0
dXRlVG9VbmlmaWNhdGlvbigKKyAgICAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJh
bWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOworICAgICAgICAgICAgbGV0IHJl
c3VsdCA9IGFyZ3VtZW50VHlwZS5lcXVhbHNXaXRoQ29tbWl0KHBhcmFtZXRlclR5cGUpOworICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJB
dCAiICsgdGhpcy5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIiBhcmd1bWVudCBhbmQgcGFyYW1ldGVy
IHR5cGVzIG5vdCBlcXVhbCBhZnRlciB0eXBlIGFyZ3VtZW50IHN1YnN0aXR1dGlvbjogYXJndW1l
bnQgPSAiICsgYXJndW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHBhcmFtZXRlclR5cGUp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUb092ZXJsb2FkKG92ZXJs
b2FkKTsKKyAgICB9CisgICAgCisgICAgcmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQpCiAgICAg
ewogICAgICAgICB0aGlzLmZ1bmMgPSBvdmVybG9hZC5mdW5jOwogICAgICAgICB0aGlzLmFjdHVh
bFR5cGVBcmd1bWVudHMgPSBvdmVybG9hZC50eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJndW1lbnQg
PT4gdHlwZUFyZ3VtZW50IGluc3RhbmNlb2YgVHlwZSA/IHR5cGVBcmd1bWVudC52aXNpdChuZXcg
QXV0b1dyYXBwZXIoKSkgOiB0eXBlQXJndW1lbnQpOwogICAgICAgICBsZXQgcmVzdWx0ID0gb3Zl
cmxvYWQuZnVuYy5yZXR1cm5UeXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAogICAgICAgICAg
ICAgb3ZlcmxvYWQuZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250
ZXh0KTsKLSAgICAgICAgdGhpcy5yZXN1bHRUeXBlID0gcmVzdWx0LnZpc2l0KG5ldyBBdXRvV3Jh
cHBlcigpKTsKICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIk51bGwgcmV0dXJuIHR5cGUiKTsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnZpc2l0KG5l
dyBBdXRvV3JhcHBlcigpKTsKKyAgICAgICAgdGhpcy5yZXN1bHRUeXBlID0gcmVzdWx0OwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzQsMzkgKzM0
LDQ2IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAKICAgICB2aXNpdFBy
b2dyYW0obm9kZSkKICAgICB7Ci0gICAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBub2RlLnRv
cExldmVsU3RhdGVtZW50cykgeworICAgICAgICBsZXQgZG9TdGF0ZW1lbnQgPSBzdGF0ZW1lbnQg
PT4gewogICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlbWVudCA9IHN0YXRlbWVudDsKICAg
ICAgICAgICAgIHN0YXRlbWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgZm9yIChsZXQgdHlwZSBvZiBub2RlLnR5cGVzLnZhbHVlcygpKQorICAgICAgICAgICAg
ZG9TdGF0ZW1lbnQodHlwZSk7CisgICAgICAgIGZvciAobGV0IHByb3RvY29sIG9mIG5vZGUucHJv
dG9jb2xzLnZhbHVlcygpKQorICAgICAgICAgICAgZG9TdGF0ZW1lbnQocHJvdG9jb2wpOworICAg
ICAgICBmb3IgKGxldCBmdW5jcyBvZiBub2RlLmZ1bmN0aW9ucy52YWx1ZXMoKSkgeworICAgICAg
ICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jcykgeworICAgICAgICAgICAgICAgIHRoaXMudmlz
aXRGdW5jKGZ1bmMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobGV0
IGZ1bmNzIG9mIG5vZGUuZnVuY3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGxl
dCBmdW5jIG9mIGZ1bmNzKQorICAgICAgICAgICAgICAgIGRvU3RhdGVtZW50KGZ1bmMpOworICAg
ICAgICB9CisgICAgfQorICAgICAgICAKKyAgICB2aXNpdEZ1bmNEZWYobm9kZSkKKyAgICB7Cisg
ICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXROYXRp
dmVGdW5jKG5vZGUpCisgICAgewogICAgIH0KICAgICAKICAgICB2aXNpdFByb3RvY29sRGVjbChu
b2RlKQogICAgIHsKICAgICAgICAgZm9yIChsZXQgc2lnbmF0dXJlIG9mIG5vZGUuc2lnbmF0dXJl
cykgewotICAgICAgICAgICAgbGV0IHNldCA9IG5ldyBTZXQoKTsKLSAgICAgICAgICAgIGZ1bmN0
aW9uIGNvbnNpZGVyKHRoaW5nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh0
aGluZy5pc1VuaWZpYWJsZSkKLSAgICAgICAgICAgICAgICAgICAgc2V0LmFkZCh0aGluZyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjbGFzcyBOb3RpY2VUeXBlVmFyaWFibGUgZXh0ZW5k
cyBWaXNpdG9yIHsKLSAgICAgICAgICAgICAgICB2aXNpdFR5cGVSZWYobm9kZSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyKG5vZGUudHlwZSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyKG5vZGUudmFyaWFi
bGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxldCBu
b3RpY2VUeXBlVmFyaWFibGUgPSBuZXcgTm90aWNlVHlwZVZhcmlhYmxlKCk7CisgICAgICAgICAg
ICBsZXQgdHlwZVZhcmlhYmxlVHJhY2tlciA9IG5ldyBUeXBlVmFyaWFibGVUcmFja2VyKCk7CiAg
ICAgICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXJUeXBlIG9mIHNpZ25hdHVyZS5wYXJhbWV0ZXJU
eXBlcykKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJUeXBlLnZpc2l0KG5vdGljZVR5cGVWYXJp
YWJsZSk7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyVHlwZS52aXNpdCh0eXBlVmFyaWFibGVU
cmFja2VyKTsKICAgICAgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIgb2Ygc2lnbmF0dXJl
LnR5cGVQYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXQuaGFzKHR5cGVQYXJh
bWV0ZXIpKQorICAgICAgICAgICAgICAgIGlmICghdHlwZVZhcmlhYmxlVHJhY2tlci5zZXQuaGFz
KHR5cGVQYXJhbWV0ZXIpKQogICAgICAgICAgICAgICAgICAgICB0aHJvdyBXVHlwZUVycm9yKHR5
cGVQYXJhbWV0ZXIub3JpZ2luLm9yaWdpblN0cmluZywgIlR5cGUgcGFyYW1ldGVyIHRvIHByb3Rv
Y29sIHNpZ25hdHVyZSBub3QgaW5mZXJyYWJsZSBmcm9tIHZhbHVlIHBhcmFtZXRlcnMiKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghc2V0Lmhhcyhub2RlLnR5cGVWYXJpYWJsZSkp
CisgICAgICAgICAgICBpZiAoIXR5cGVWYXJpYWJsZVRyYWNrZXIuc2V0Lmhhcyhub2RlLnR5cGVW
YXJpYWJsZSkpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Ioc2lnbmF0dXJl
Lm9yaWdpbi5vcmlnaW5TdHJpbmcsICJQcm90b2NvbCdzIHR5cGUgdmFyaWFibGUgKCIgKyBub2Rl
Lm5hbWUgKyAiKSBub3QgbWVudGlvbmVkIGluIHNpZ25hdHVyZTogIiArIHNpZ25hdHVyZSk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xNDEsNiArMTQ4LDMyIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5k
cyBWaXNpdG9yIHsKICAgICAgICAgcmV0dXJuIGxoc1R5cGU7CiAgICAgfQogICAgIAorICAgIHZp
c2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZS50
YXJnZXQudmlzaXQodGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLmxWYWx1ZS5pc0xWYWx1
ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0
cmluZywgIkxIUyBvZiByZWFkLW1vZGlmeS13cml0ZSBpcyBub3QgYW4gTFZhbHVlOiAiICsgbm9k
ZS5sVmFsZSk7CisgICAgICAgIGxldCBsaHNUeXBlID0gbm9kZS5sVmFsdWUudmlzaXQodGhpcyk7
CisgICAgICAgIG5vZGUub2xkVmFsdWVWYXIudHlwZSA9IGxoc1R5cGU7CisgICAgICAgIG5vZGUu
bmV3VmFsdWVWYXIudHlwZSA9IGxoc1R5cGU7CisgICAgICAgIG5vZGUub2xkVmFsdWVWYXIudmlz
aXQodGhpcyk7CisgICAgICAgIG5vZGUubmV3VmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAg
IGxldCBuZXdWYWx1ZVR5cGUgPSBub2RlLm5ld1ZhbHVlRXhwLnZpc2l0KHRoaXMpOworICAgICAg
ICBpZiAoIWxoc1R5cGUuZXF1YWxzV2l0aENvbW1pdChuZXdWYWx1ZVR5cGUpKQorICAgICAgICAg
ICAgcmV0dXJuIG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlR5cGUg
bWlzbWF0Y2ggaW4gcmVhZC1tb2RpZnktd3JpdGU6ICIgKyBsaHNUeXBlICsgIiB2ZXJzdXMgIiAr
IG5ld1ZhbHVlVHlwZSk7CisgICAgICAgIHJldHVybiBub2RlLnJlc3VsdEV4cC52aXNpdCh0aGlz
KTsKKyAgICB9CisgICAgCisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShub2RlKQorICAgIHsK
KyAgICAgICAgaWYgKCFub2RlLnR5cGUpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFu
b255bW91cyB2YXJpYWJsZSBtdXN0IGtub3cgdHlwZSBiZWZvcmUgZmlyc3QgYXBwZWFyYW5jZSIp
OworICAgIH0KKyAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAg
IHsKICAgICAgICAgbGV0IHR5cGUgPSBub2RlLnB0ci52aXNpdCh0aGlzKS51bmlmeU5vZGU7CkBA
IC0xNjUsNyArMTk4LDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHsK
ICAgICAgICAgbGV0IGVsZW1lbnRUeXBlID0gbm9kZS5sVmFsdWUudmlzaXQodGhpcykudW5pZnlO
b2RlOwogICAgICAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBQdHJUeXBlKSB7Ci0gICAg
ICAgICAgICBub2RlLmJlY29tZUNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihu
b2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlS
ZWZUeXBlKG5vZGUub3JpZ2luLCBlbGVtZW50VHlwZS5hZGRyZXNzU3BhY2UsIGVsZW1lbnRUeXBl
LmVsZW1lbnRUeXBlKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4OSwzNSArMjIyLDg3IEBA
IGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJTaG91bGQgbm90IGV4aXN0IHlldC4iKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RFeHBy
ZXNzaW9uKG5vZGUpCisgICAgX2ZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3Mobm9kZSwgYmFz
ZVR5cGUsIGV4dHJhQXJncywgZXh0cmFBcmdUeXBlcykKICAgICB7Ci0gICAgICAgIGxldCBzdHJ1
Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBiYXNl
VHlwZSA9IGJhc2VUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKQorICAgICAgICBub2RlLmJh
c2VUeXBlID0gYmFzZVR5cGU7CiAgICAgICAgIAotICAgICAgICBub2RlLnN0cnVjdFR5cGUgPSBz
dHJ1Y3RUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKLSAgICAgICAgCi0gICAgICAgIGxl
dCB1bmRlcmx5aW5nU3RydWN0ID0gc3RydWN0VHlwZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChz
dHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikKLSAgICAgICAgICAgIHVuZGVybHlpbmdTdHJ1
Y3QgPSB1bmRlcmx5aW5nU3RydWN0LnR5cGU7Ci0gICAgICAgIAotICAgICAgICBpZiAoISh1bmRl
cmx5aW5nU3RydWN0IGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJPcGVyYW5kIHRvIGRvdCBl
eHByZXNzaW9uIGlzIG5vdCBhIHN0cnVjdCB0eXBlOiAiICsgc3RydWN0VHlwZSk7CisgICAgICAg
IC8vIFN1Y2ggYSB0eXBlIG11c3QgZXhpc3QuIFRoaXMgbWF5IHRocm93IGlmIGl0IGRvZXNuJ3Qu
CisgICAgICAgIGxldCB0eXBlRm9yQW5kID0gYmFzZVR5cGUuYXJndW1lbnRUeXBlRm9yQW5kT3Zl
cmxvYWQobm9kZS5vcmlnaW4pOworICAgICAgICBpZiAoIXR5cGVGb3JBbmQpCisgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlwZUZvckFuZCIpOworICAgICAgICAKKyAg
ICAgICAgbGV0IGVycm9yRm9yR2V0OworICAgICAgICBsZXQgZXJyb3JGb3JBbmQ7CisgICAgICAg
IAorICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IENhbGxFeHByZXNzaW9u
LnJlc29sdmUoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUucG9zc2libGVHZXRP
dmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsCisgICAgICAg
ICAgICAgICAgbm9kZS5nZXRGdW5jTmFtZSwgW10sIFtub2RlLmJhc2UsIC4uLmV4dHJhQXJnc10s
IFtiYXNlVHlwZSwgLi4uZXh0cmFBcmdUeXBlc10sIG51bGwpOworICAgICAgICAgICAgbm9kZS5j
YWxsRm9yR2V0ID0gcmVzdWx0LmNhbGw7CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JH
ZXQgPSByZXN1bHQucmVzdWx0VHlwZTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgaWYgKCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93
IGU7CisgICAgICAgICAgICBlcnJvckZvckdldCA9IGU7CisgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikgCi0gICAgICAgICAgICB1
bmRlcmx5aW5nU3RydWN0ID0gdW5kZXJseWluZ1N0cnVjdC5pbnN0YW50aWF0ZShzdHJ1Y3RUeXBl
LnR5cGVBcmd1bWVudHMsICJzaGFsbG93Iik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBs
ZXQgYmFzZUZvckFuZCA9IGJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQobm9kZS5vcmln
aW4sIG5vZGUuYmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBD
YWxsRXhwcmVzc2lvbi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2Rl
LnBvc3NpYmxlQW5kT3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0
ZXJzLAorICAgICAgICAgICAgICAgIG5vZGUuYW5kRnVuY05hbWUsIFtdLCBbYmFzZUZvckFuZCwg
Li4uZXh0cmFBcmdzXSwgW3R5cGVGb3JBbmQsIC4uLmV4dHJhQXJnVHlwZXNdLAorICAgICAgICAg
ICAgICAgIG51bGwpOworICAgICAgICAgICAgbm9kZS5jYWxsRm9yQW5kID0gcmVzdWx0LmNhbGw7
CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JBbmQgPSByZXN1bHQucmVzdWx0VHlwZS51
bmlmeU5vZGUucmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChub2RlLm9yaWdpbik7CisgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBXVHlwZUVycm9y
KSkKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgZXJyb3JGb3JBbmQgPSBl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGUucmVzdWx0VHlwZUZvckdl
dCAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yQW5kKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcigKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsCisgICAg
ICAgICAgICAgICAgIkNhbm5vdCByZXNvbHZlIGFjY2VzczsgdHJpZWQgYnktdmFsdWU6XG4iICsK
KyAgICAgICAgICAgICAgICBlcnJvckZvckdldC5tZXNzYWdlICsgIlxuIiArCisgICAgICAgICAg
ICAgICAgImFuZCB0cmllZCBieS1wb2ludGVyOlxuIiArCisgICAgICAgICAgICAgICAgZXJyb3JG
b3JBbmQubWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLnJl
c3VsdFR5cGVGb3JHZXQgJiYgbm9kZS5yZXN1bHRUeXBlRm9yQW5kCisgICAgICAgICAgICAmJiAh
bm9kZS5yZXN1bHRUeXBlRm9yR2V0LmVxdWFscyhub2RlLnJlc3VsdFR5cGVGb3JBbmQpKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
UmVzdWx0IHR5cGUgcmVzb2x2ZWQgYnktdmFsdWUgKCIgKyBub2RlLnJlc3VsdFR5cGVGb3JHZXQg
KyAiKSBkb2VzIG5vdCBtYXRjaCByZXN1bHQgdHlwZSByZXNvbHZlZCBieS1wb2ludGVyICgiICsg
bm9kZS5yZXN1bHRUeXBlRm9yQW5kICsgIikiKTsKKyAgICAgICAgCisgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVzb2x2ZSgKKyAgICAgICAg
ICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkcywgdGhpcy5fY3Vy
cmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICBub2RlLnNldEZ1
bmNOYW1lLCBbXSwgW25vZGUuYmFzZSwgLi4uZXh0cmFBcmdzLCBudWxsXSwgW2Jhc2VUeXBlLCAu
Li5leHRyYUFyZ1R5cGVzLCBub2RlLnJlc3VsdFR5cGVdLCBudWxsKTsKKyAgICAgICAgICAgIG5v
ZGUuY2FsbEZvclNldCA9IHJlc3VsdC5jYWxsOworICAgICAgICAgICAgaWYgKCFyZXN1bHQucmVz
dWx0VHlwZS5lcXVhbHMoYmFzZVR5cGUpKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlJlc3VsdCB0eXBlIG9mIHNldHRlciAi
ICsgcmVzdWx0LmNhbGwuZnVuYyArICIgaXMgbm90IHRoZSBiYXNlIHR5cGUgIiArIGJhc2VUeXBl
KTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9m
IFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICBub2Rl
LmVycm9yRm9yU2V0ID0gZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbGV0IGZpZWxk
ID0gdW5kZXJseWluZ1N0cnVjdC5maWVsZEJ5TmFtZShub2RlLmZpZWxkTmFtZSk7Ci0gICAgICAg
IGlmICghZmllbGQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJGaWVsZCAiICsgbm9kZS5maWVsZE5hbWUgKyAiIG5vdCBmb3VuZCBp
biAiICsgc3RydWN0VHlwZSk7Ci0gICAgICAgIHJldHVybiBmaWVsZC50eXBlOworICAgICAgICBy
ZXR1cm4gbm9kZS5yZXN1bHRUeXBlOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Np
b24obm9kZSkKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIG5v
ZGUudHlwZSA9IG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmICghbm9kZS50
eXBlKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEaWQgbm90IGdldCB0eXBlIGZvciBu
b2RlOiAiICsgbm9kZS5hcmd1bWVudCk7Ci0gICAgICAgIHJldHVybiBub2RlLmJvZHkudmlzaXQo
dGhpcyk7CisgICAgICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyku
dW5pZnlOb2RlOworICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFj
Y2Vzcyhub2RlLCBzdHJ1Y3RUeXBlLCBbXSwgW10pOworICAgIH0KKyAgICAKKyAgICB2aXNpdElu
ZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGFycmF5VHlwZSA9IG5vZGUu
YXJyYXkudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBsZXQgaW5kZXhUeXBlID0gbm9k
ZS5pbmRleC52aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0aGlzLl9maW5p
c2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIGFycmF5VHlwZSwgW25vZGUuaW5kZXhdLCBb
aW5kZXhUeXBlXSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKQEAg
LTMyMiwxMCArNDA3LDEwIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgICAgIHJlc3VsdCA9IGV4cHJlc3Npb24udmlzaXQodGhpcyk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAg
IHsKLSAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGVzID0gbm9kZS50eXBlQXJndW1lbnRzLm1h
cCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgbGV0
IHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0
eXBlQXJndW1lbnQudmlzaXQodGhpcykpOwogICAgICAgICBsZXQgYXJndW1lbnRUeXBlcyA9IG5v
ZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiB7CiAgICAgICAgICAgICBsZXQgbmV3QXJn
dW1lbnQgPSBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgICAgIGlmICghbmV3QXJndW1l
bnQpCkBAIC0zMzMsNzcgKzQxOCwxMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7
CiAgICAgICAgICAgICByZXR1cm4gbmV3QXJndW1lbnQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkp
OwogICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBoYW5k
bGUgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yJltdIGlzIGNhbGxlZCB3aXRoIGEgdHlwZSB0aGF0
IGlzbid0IHN1ZmZpY2llbnRseQotICAgICAgICAvLyByZWZlcmVuY2V5LgotICAgICAgICBpZiAo
bm9kZS5uYW1lID09ICJvcGVyYXRvciZbXSIpIHsKLSAgICAgICAgICAgIGxldCBhcmdUeXBlID0g
YXJndW1lbnRUeXBlc1swXS51bmlmeU5vZGU7Ci0gICAgICAgICAgICBpZiAoYXJnVHlwZSBpbnN0
YW5jZW9mIFB0clR5cGUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMgbm90IHZhbGlkIik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcmdUeXBlIGluc3RhbmNlb2YgQXJyYXlU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcgTWFrZUFy
cmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5hcmd1bWVudExpc3RbMF0pOwotICAg
ICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdLm51bUVsZW1lbnRzID0gYXJnVHlwZS5u
dW1FbGVtZW50czsKLSAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IEFycmF5
UmVmVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ1R5cGUuZWxlbWVudFR5cGUpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmICghKGFyZ1R5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKSB7
Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcgTWFrZVB0ckV4cHJl
c3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0WzBdKTsKLSAgICAgICAgICAgICAg
ICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IFB0clR5cGUobm9kZS5vcmlnaW4sICJ0aHJlYWQiLCBh
cmd1bWVudFR5cGVzWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKICAg
ICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlczsKICAgICAgICAgaWYgKG5v
ZGUucmV0dXJuVHlwZSkKICAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsK
LSAgICAgICAgCi0gICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7Ci0gICAgICAgIGxldCBmYWls
dXJlcyA9IFtdOwotICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHRoaXMuX2N1cnJl
bnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGlmICghKHR5cGVQYXJh
bWV0ZXIgaW5zdGFuY2VvZiBUeXBlVmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnByb3RvY29sKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbGV0IHNpZ25hdHVyZXMgPQotICAgICAgICAgICAg
ICAgIHR5cGVQYXJhbWV0ZXIucHJvdG9jb2wucHJvdG9jb2xEZWNsLnNpZ25hdHVyZXNCeU5hbWVX
aXRoVHlwZVZhcmlhYmxlKG5vZGUubmFtZSwgdHlwZVBhcmFtZXRlcik7Ci0gICAgICAgICAgICBp
ZiAoIXNpZ25hdHVyZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBv
dmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgbm9kZS50eXBlQXJndW1l
bnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVyblR5cGUpOwotICAgICAgICAgICAgaWYgKG92
ZXJsb2FkLmZ1bmMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmYWlsdXJl
cy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKLSAgICAgICAgICAgIG92ZXJsb2FkID0gbnVs
bDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW92ZXJsb2FkKSB7Ci0gICAgICAgICAgICBvdmVy
bG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCi0gICAgICAgICAgICAgICAgbm9kZS5wb3NzaWJs
ZU92ZXJsb2Fkcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVy
blR5cGUpOwotICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7Ci0gICAgICAgICAgICAg
ICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Ci0gICAgICAgICAgICAgICAg
bGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdpdGggIjsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyBub2RlLnR5cGVBcmd1bWVu
dHMgKyAiPiBhbmQgIjsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1bWVudCB0eXBl
cyAoIiArIGFyZ3VtZW50VHlwZXMgKyAiKSI7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmV0
dXJuVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5kIHJldHVybiB0eXBl
ICIgKyBub2RlLnJldHVyblR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lkZXJlZDpcbiIg
KyBmYWlsdXJlcy5qb2luKCJcbiIpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudFR5cGVzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgdHlwZUFyZ3VtZW50VHlwZSA9IHR5cGVBcmd1
bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBvdmVybG9hZC5m
dW5jLnR5cGVQYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRlciBp
bnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxzV2l0aENvbW1p
dCh0eXBlQXJndW1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0
ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBlIGFyZ3VtZW50
IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0eXBlQXJndW1l
bnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlc1tpXTsKLSAg
ICAgICAgICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gb3ZlcmxvYWQuZnVuYy5wYXJhbWV0ZXJzW2ld
LnR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCi0gICAgICAgICAgICAgICAgb3ZlcmxvYWQu
ZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250ZXh0KTsKLSAgICAg
ICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVudFR5cGUuZXF1YWxzV2l0aENvbW1pdChwYXJhbWV0
ZXJUeXBlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyArICIgYXJndW1lbnQg
YW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0ZXIgdHlwZSBhcmd1bWVudCBzdWJzdGl0
dXRpb246IGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50VHlwZSArICIsIHBhcmFtZXRlciA9ICIgKyBw
YXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm9kZS5yZXNvbHZlKG92
ZXJsb2FkKTsKKworICAgICAgICBsZXQgcmVzdWx0ID0gbm9kZS5yZXNvbHZlKG5vZGUucG9zc2li
bGVPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsIHR5cGVB
cmd1bWVudHMpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIH0KIApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHByZXNzaW9uLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qcwkocmV2
aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHBy
ZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBAIGNsYXNzIENvbW1hRXhw
cmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24KICAgICAKICAgICBnZXQgbGlzdCgpIHsgcmV0dXJu
IHRoaXMuX2xpc3Q7IH0KICAgICAKKyAgICAvLyBOT1RFOiBJdCdzIHN1cGVyIHRlbXB0aW5nIHRv
IHNheSB0aGF0IENvbW1hRXhwcmVzc2lvbiBpcyBhbiBsVmFsdWUgaWYgaXRzIGxhc3QgZW50cnkg
aXMgYW4gbFZhbHVlLiBCdXQsCisgICAgLy8gUHJvcGVydHlSZXNvbHZlciByZWxpZXMgb24gdGhp
cyBub3QgYmVpbmcgdGhlIGNhc2UuCisgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuICIoIiArIHRoaXMubGlzdC50b1N0cmluZygpICsgIikiOwpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAy
MjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxOSArMjQsMjIgQEAKICAqLwogInVzZSBzdHJpY3QiOwog
Ci1jbGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CitjbGFzcyBEb3RFeHBy
ZXNzaW9uIGV4dGVuZHMgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIHsKICAgICBjb25zdHJ1Y3Rv
cihvcmlnaW4sIHN0cnVjdCwgZmllbGROYW1lKQogICAgIHsKLSAgICAgICAgc3VwZXIob3JpZ2lu
KTsKLSAgICAgICAgdGhpcy5fc3RydWN0ID0gc3RydWN0OworICAgICAgICBzdXBlcihvcmlnaW4s
IHN0cnVjdCk7CiAgICAgICAgIHRoaXMuX2ZpZWxkTmFtZSA9IGZpZWxkTmFtZTsKICAgICB9CiAg
ICAgCi0gICAgZ2V0IHN0cnVjdCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdDsgfQorICAgIGdldCBz
dHJ1Y3QoKSB7IHJldHVybiB0aGlzLmJhc2U7IH0KICAgICBnZXQgZmllbGROYW1lKCkgeyByZXR1
cm4gdGhpcy5fZmllbGROYW1lOyB9CiAgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gdGhpcy5z
dHJ1Y3QuaXNMVmFsdWU7IH0KICAgICBnZXQgYWRkcmVzc1NwYWNlKCkgeyByZXR1cm4gdGhpcy5z
dHJ1Y3QuYWRkcmVzc1NwYWNlOyB9CiAgICAgCisgICAgZ2V0IGdldEZ1bmNOYW1lKCkgeyByZXR1
cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFtZTsgfQorICAgIGdldCBhbmRGdW5jTmFtZSgp
IHsgcmV0dXJuICJvcGVyYXRvciYuIiArIHRoaXMuZmllbGROYW1lOyB9CisgICAgZ2V0IHNldEZ1
bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFtZSArICI9IjsgfQor
ICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiAiKCIgKyB0aGlzLnN0
cnVjdCArICIuIiArIHRoaXMuZmllbGROYW1lICsgIikiOwpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMiAr
NjAsMTQgQEAgY2xhc3MgRUJ1ZmZlciB7CiAgICAgZ2V0KGluZGV4KQogICAgIHsKICAgICAgICAg
aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl9hcnJheS5sZW5ndGgpCi0gICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIm91dCBvZiBib3VuZHMgYnVmZmVyIGFjY2VzcyIpOworICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJPdXQgb2YgYm91bmRzIGJ1ZmZlciBhY2Nlc3MgKGJ1ZmZl
ciA9ICIgKyB0aGlzICsgIiwgaW5kZXggPSAiICsgaW5kZXggKyAiKSIpOwogICAgICAgICByZXR1
cm4gdGhpcy5fYXJyYXlbaW5kZXhdOwogICAgIH0KICAgICAKICAgICBzZXQoaW5kZXgsIHZhbHVl
KQogICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl9hcnJheS5s
ZW5ndGgpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm91dCBvZiBib3VuZHMgYnVmZmVy
IGFjY2VzcyAoYnVmZmVyID0gIiArIHRoaXMgKyAiLCBpbmRleCA9ICIgKyBpbmRleCArICIpIik7
CiAgICAgICAgIHRoaXMuX2FycmF5W2luZGV4XSA9IHZhbHVlOwogICAgIH0KICAgICAKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCShy
ZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVy
QnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTA0LDExICsxMDQsOSBAQCBjbGFzcyBFQnVm
ZmVyQnVpbGRlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBzdXBlci52aXNpdExvZ2ljYWxO
b3Qobm9kZSk7CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAg
IHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7CiAgICAgICAgIHRoaXMuX2NyZWF0
ZUVQdHJGb3JOb2RlKG5vZGUpOwotICAgICAgICBub2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMpOwot
ICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0TWFr
ZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAy
LDExIEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICByZXR1cm4g
dGFyZ2V0OwogICAgIH0KICAgICAKKyAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpOworICAgIH0KKyAg
ICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAg
bGV0IHB0ciA9IG5vZGUucHRyLnZpc2l0KHRoaXMpLmxvYWRWYWx1ZSgpOwpAQCAtMTEyLDcgKzEx
Nyw4IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgIAogICAgIHZpc2l0
TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLmVQdHIu
Ym94KG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpKTsKKyAgICAgICAgbGV0IHB0ciA9IG5vZGUubFZh
bHVlLnZpc2l0KHRoaXMpOworICAgICAgICByZXR1cm4gbm9kZS5lUHRyLmJveChwdHIpOwogICAg
IH0KICAgICAKICAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKQEAgLTEyNSwx
MiArMTMxLDYgQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHJl
dHVybiBub2RlLmVQdHIuYm94KG5ldyBFQXJyYXlSZWYobm9kZS5sVmFsdWUudmlzaXQodGhpcyku
bG9hZFZhbHVlKCksIDEpKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RFeHByZXNzaW9uKG5v
ZGUpCi0gICAgewotICAgICAgICBsZXQgc3RydWN0UHRyID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhp
cyk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3RQdHIucGx1cyhub2RlLmZpZWxkLm9mZnNldCk7Ci0g
ICAgfQotICAgIAogICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAg
ICBsZXQgcmVzdWx0OwpAQCAtMjMxLDEwICsyMzEsOSBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5k
cyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgQ29udGludWVFeGNlcHRpb247CiAgICAgfQogICAg
IAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFi
bGUobm9kZSkKICAgICB7Ci0gICAgICAgIG5vZGUuZVB0ci5jb3B5RnJvbShub2RlLmFyZ3VtZW50
LnZpc2l0KHRoaXMpLCBub2RlLnR5cGUuc2l6ZSk7Ci0gICAgICAgIHJldHVybiBub2RlLmJvZHku
dmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUudHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZShub2Rl
LmVQdHIuYnVmZmVyLCBub2RlLmVQdHIub2Zmc2V0KTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRD
YWxsRXhwcmVzc2lvbihub2RlKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RXhwcmVzc2lvbkZpbmRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw2ICs1NiwxNiBAQCBjbGFzcyBFeHByZXNzaW9uRmluZGVyIGV4dGVuZHMgVmlzaXRv
ciB7CiAgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUpOwogICAgIH0KICAgICAKKyAgICB2aXNp
dFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2Nh
bGxiYWNrKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihu
b2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CisgICAgfQorICAgIAog
ICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIHRoaXMuX2NhbGxi
YWNrKG5vZGUpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRm9yTG9vcC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpz
CShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JM
b29wLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIEZvckxvb3AgZXh0
ZW5kcyBOb2RlIHsKIAogICAgIHRvU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAiZm9y
ICgiICsgKHRoaXMuaW5pdGlhbGl6YXRpb24gPyB0aGlzLmluaXRpYWxpemF0aW9uIDogIiAiKSAr
ICI7ICIgKyAodGhpcy5jb25kaXRpb24gPyB0aGlzLmNvbmRpdGlvbiA6ICIiKSArICI7ICIgKyAo
dGhpcy5pbmNyZW1lbnQgPyB0aGlzLmluY3JlbWVudCA6ICIiKSArICIpICIgKyBib2R5OworICAg
ICAgICByZXR1cm4gImZvciAoIiArICh0aGlzLmluaXRpYWxpemF0aW9uID8gdGhpcy5pbml0aWFs
aXphdGlvbiA6ICIgIikgKyAiOyAiICsgKHRoaXMuY29uZGl0aW9uID8gdGhpcy5jb25kaXRpb24g
OiAiIikgKyAiOyAiICsgKHRoaXMuaW5jcmVtZW50ID8gdGhpcy5pbmNyZW1lbnQgOiAiIikgKyAi
KSAiICsgdGhpcy5ib2R5OwogICAgIH0KIH07CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0Z1bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRnVuYy5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTIgQEAgY2xhc3Mg
RnVuYyBleHRlbmRzIE5vZGUgewogICAgIHsKICAgICAgICAgaWYgKCEob3JpZ2luIGluc3RhbmNl
b2YgTGV4ZXJUb2tlbikpCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBvcmlnaW46
ICIgKyBvcmlnaW4pOworICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykg
eworICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXIpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJOdWxsIHBhcmFtZXRlciIpOworICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXIudHlw
ZSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcGFyYW1ldGVyIHR5cGUi
KTsKKyAgICAgICAgfQogICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlzLl9vcmlnaW4gPSBv
cmlnaW47CiAgICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRnVuY0luc3RhbnRpYXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCShyZXZpc2lvbiAyMjIx
MjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC03NSwxNiArNzUsMTkgQEAgY2xhc3MgRnVuY0luc3RhbnRpYXRv
ciB7CiAgICAgICAgICAgICAgICAgICAgIGxldCBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZElt
cGwocmVzdWx0LnBvc3NpYmxlT3ZlcmxvYWRzLCByZXN1bHQudHlwZUFyZ3VtZW50cywgcmVzdWx0
LmFyZ3VtZW50VHlwZXMsIHJlc3VsdC5yZXR1cm5UeXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKQogICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgcmVzb2x2ZSBwcm90b2NvbCBzaWdu
YXR1cmUgZnVuY3Rpb24gY2FsbCBkdXJpbmcgaW5zdGFudGlhdGlvbjogIiArIHJlc3VsdC5mdW5j
ICsgKG92ZXJsb2FkLmZhaWx1cmVzLmxlbmd0aCA/ICI7IHRyaWVkOlxuIiArIG92ZXJsb2FkLmZh
aWx1cmVzLmpvaW4oIlxuIikgOiAiIikpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVz
b2x2ZShvdmVybG9hZCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvbHZlVG9PdmVy
bG9hZChvdmVybG9hZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQuZnVuYy5pc05hdGl2ZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0Lm5hdGl2ZUZ1bmNJbnN0YW5jZSA9IHRoaXNJbnN0YW50aWF0b3IuZ2V0VW5pcXVl
KHJlc3VsdC5mdW5jLCByZXN1bHQuYWN0dWFsVHlwZUFyZ3VtZW50cyk7CisgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9IG5ldyBJbnN0YW50aWF0
aW9uU3Vic3RpdHV0aW9uKGZ1bmMudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOwogICAg
ICAgICAKLSAgICAgICAgY2xhc3MgSW5zdGFudGlhdGUgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7Cisg
ICAgICAgIGNsYXNzIEluc3RhbnRpYXRlIHsKICAgICAgICAgICAgIHZpc2l0RnVuY0RlZihmdW5j
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY0RlZigKQEAg
LTEwMSw3ICsxMDQsOCBAQCBjbGFzcyBGdW5jSW5zdGFudGlhdG9yIHsKICAgICAgICAgICAgICAg
ICAgICAgZnVuYywKICAgICAgICAgICAgICAgICAgICAgZnVuYy5yZXR1cm5UeXBlLnZpc2l0KHN1
YnN0aXR1dGlvbiksCiAgICAgICAgICAgICAgICAgICAgIGZ1bmMucGFyYW1ldGVycy5tYXAocGFy
YW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChzdWJzdGl0dXRpb24pKSwKLSAgICAgICAgICAgICAg
ICAgICAgZnVuYy5pc0Nhc3QpOworICAgICAgICAgICAgICAgICAgICBmdW5jLmlzQ2FzdCwKKyAg
ICAgICAgICAgICAgICAgICAgZnVuYy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uKHN1YnN0aXR1
dGlvbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGxldCByZXN1bHRpbmdG
dW5jID0gZnVuYy52aXNpdChuZXcgSW5zdGFudGlhdGUoKSk7CkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9JZGVudGl0eUV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSWRlbnRpdHlFeHByZXNzaW9uLmpzCShub25leGlz
dGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lkZW50aXR5RXhwcmVzc2lv
bi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIElkZW50aXR5
RXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKHRhcmdldCkK
KyAgICB7CisgICAgICAgIHN1cGVyKHRhcmdldC5vcmlnaW4pOworICAgICAgICB0aGlzLl90YXJn
ZXQgPSB0YXJnZXQ7CisgICAgfQorICAgIAorICAgIGdldCB0YXJnZXQoKSB7IHJldHVybiB0aGlz
Ll90YXJnZXQ7IH0KKyAgICAKKyAgICBnZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy50YXJn
ZXQudW5pZnlOb2RlOyB9CisgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdGhpcy50YXJn
ZXQuaXNDb25zdGV4cHI7IH0KKyAgICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0aGlzLnRhcmdl
dC5pc0xWYWx1ZTsgfQorICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiB0aGlzLnRhcmdl
dC5hZGRyZXNzU3BhY2U7IH0KKyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICBy
ZXR1cm4gIigiICsgdGhpcy50YXJnZXQgKyAiKSI7CisgICAgfQorfQorCkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmRleEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzCShub25leGlz
dGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZGV4RXhwcmVzc2lvbi5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIEluZGV4RXhwcmVz
c2lvbiBleHRlbmRzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Io
b3JpZ2luLCBhcnJheSwgaW5kZXgpCisgICAgeworICAgICAgICBzdXBlcihvcmlnaW4sIGFycmF5
KTsKKyAgICAgICAgdGhpcy5faW5kZXggPSBpbmRleDsKKyAgICB9CisgICAgCisgICAgZ2V0IGFy
cmF5KCkgeyByZXR1cm4gdGhpcy5iYXNlOyB9CisgICAgZ2V0IGluZGV4KCkgeyByZXR1cm4gdGhp
cy5faW5kZXg7IH0KKyAgICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0aGlzLmFycmF5LmlzTFZh
bHVlOyB9CisgICAgZ2V0IGFkZHJlc3NTcGFjZSgpIHsgcmV0dXJuIHRoaXMuYXJyYXkuYWRkcmVz
c1NwYWNlOyB9CisgICAgCisgICAgZ2V0IGdldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9y
W10iOyB9CisgICAgZ2V0IGFuZEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yJltdIjsgfQor
ICAgIGdldCBzZXRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvcltdPSI7IH0KKworICAgIHRv
U3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiKCIgKyB0aGlzLmFycmF5ICsgIlsiICsg
dGhpcy5pbmRleCArICJdKSI7CisgICAgfQorfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGZ1bmN0aW9uIGluZmVyVHlwZXNGb3JDYWxs
KGZ1bmMsIHR5cGVBcmcKICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldKQogICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIGFyZ3VtZW50IHR5cGUgYXQgaSA9ICIgKyBpKTsKICAg
ICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgZnVu
Yy5wYXJhbWV0ZXJzW2ldLnR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcg
T3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAoaSArIDEpICsg
IiAiICsgKGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIgIiArIGZ1bmMu
cGFyYW1ldGVyc1tpXS5uYW1lIDogIiIpICsgIiBkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBh
cmd1bWVudFR5cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUg
KyAiKSIpfTsKKyAgICAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92ZXJsb2FkUmVzb2x1
dGlvbkZhaWx1cmUoZnVuYywgIkFyZ3VtZW50ICMiICsgKGkgKyAxKSArICIgIiArIChmdW5jLnBh
cmFtZXRlcnNbaV0ubmFtZSA/ICJmb3IgcGFyYW1ldGVyICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0u
bmFtZSArICIgIiA6ICIiKSArICJkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVudFR5
cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUgKyAiKSIpfTsK
ICAgICB9CiAgICAgaWYgKHJldHVyblR5cGUgJiYgIXJldHVyblR5cGUudW5pZnkodW5pZmljYXRp
b25Db250ZXh0LCBmdW5jLnJldHVyblR5cGUpKQogICAgICAgICByZXR1cm4ge2ZhaWx1cmU6IG5l
dyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJSZXR1cm4gdHlwZSAiICsgZnVuYy5y
ZXR1cm5UeXBlICsgIiBkb2VzIG5vdCBtYXRjaCAiICsgcmV0dXJuVHlwZSl9OwpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmVyLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwyNCArMzIsMTUgQEAgY2xhc3MgSW5saW5lciBleHRlbmRzIFJld3JpdGVyIHsKICAg
ICAgICAgdGhpcy5fdmlzaXRpbmcgPSB2aXNpdGluZzsKICAgICB9CiAgICAgCi0gICAgdmlzaXRE
b3RFeHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlz
aXREb3RFeHByZXNzaW9uKG5vZGUpOwotICAgICAgICByZXN1bHQuZmllbGQgPSByZXN1bHQuc3Ry
dWN0VHlwZS51bmlmeU5vZGUuZmllbGRCeU5hbWUocmVzdWx0LmZpZWxkTmFtZSk7Ci0gICAgICAg
IGlmIChyZXN1bHQuZmllbGQub2Zmc2V0ID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIlVuLWxhaWQtb3V0IGZpZWxkOiAiICsgcmVzdWx0LmZpZWxkICsgIiAoaW4gIiArIHJl
c3VsdC5zdHJ1Y3RUeXBlICsgIikiKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJl
c3VsdCA9IHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7CisgICAgICAgIGlmIChyZXN1
bHQubmF0aXZlRnVuY0luc3RhbmNlKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgcmV0dXJuIHRoaXMuX3Zpc2l0aW5nLmRvVmlzaXQobm9kZS5mdW5jLCAoKSA9PiB7CiAgICAg
ICAgICAgICBsZXQgZnVuYyA9IHRoaXMuX3Byb2dyYW0uZnVuY0luc3RhbnRpYXRvci5nZXRVbmlx
dWUocmVzdWx0LmZ1bmMsIHJlc3VsdC5hY3R1YWxUeXBlQXJndW1lbnRzKTsKLSAgICAgICAgICAg
IGlmIChmdW5jLmlzTmF0aXZlKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lm5hdGl2ZUZ1bmNJ
bnN0YW5jZSA9IGZ1bmM7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChmdW5jLmlzTmF0aXZlKQorICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBuYXRpdmUgZnVuYzogIiArIGZ1bmMpOwogICAgICAg
ICAgICAgX2lubGluZUZ1bmN0aW9uKHRoaXMuX3Byb2dyYW0sIGZ1bmMsIHRoaXMuX3Zpc2l0aW5n
KTsKICAgICAgICAgICAgIGxldCByZXN1bHRpbmdCbG9jayA9IG5ldyBGdW5jdGlvbkxpa2VCbG9j
aygKICAgICAgICAgICAgICAgICByZXN1bHQub3JpZ2luLCBmdW5jLnJldHVyblR5cGUsIHJlc3Vs
dC5hcmd1bWVudExpc3QsIGZ1bmMucGFyYW1ldGVycywgZnVuYy5ib2R5KTsKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwkocmV2aXNpb24gMjIyMTIz
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ4LDMwICsyNDgsMzIgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAg
ICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkgPj0gcmlnaHQubG9hZFZhbHVl
KCkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIAotICAgICAgICBsZXQgYXJyYXlFbGVtZW50
UHRyID0gZnVuYyA9PiB7Ci0gICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtyZWYs
IGluZGV4XSwgbm9kZSkgPT4gewotICAgICAgICAgICAgICAgIHJlZiA9IHJlZi5sb2FkVmFsdWUo
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlZikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBkZXJlZmVyZW5j
ZSIpOwotICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXgubG9hZFZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGluZGV4ID4gcmVmLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQXJyYXkgaW5kZXgg
IiArIGluZGV4ICsgIiBpcyBvdXQgb2YgYm91bmRzIG9mICIgKyByZWYpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBFUHRyLmJveChyZWYucHRyLnBsdXMoaW5kZXggKiBub2RlLmFjdHVhbFR5cGVB
cmd1bWVudHNbMF0uc2l6ZSkpOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAg
Ci0gICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZlIFReIHRocmVhZCBv
cGVyYXRvciZbXTxUPihUW10gdGhyZWFkLHVpbnQpIiwKLSAgICAgICAgICAgIGFycmF5RWxlbWVu
dFB0cik7Ci0gICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZlIFReIHRo
cmVhZGdyb3VwIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihUW10gdGhyZWFkZ3JvdXAsdWludCki
LAotICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsKLSAgICAgICAgdGhpcy5fbWFwLnNldCgK
LSAgICAgICAgICAgICJuYXRpdmUgVF4gZGV2aWNlIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihU
W10gZGV2aWNlLHVpbnQpIiwKLSAgICAgICAgICAgIGFycmF5RWxlbWVudFB0cik7Ci0gICAgICAg
IHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZlIFReIGNvbnN0YW50IG9wZXJhdG9y
JltdPFQ6cHJpbWl0aXZlPihUW10gY29uc3RhbnQsdWludCkiLAotICAgICAgICAgICAgYXJyYXlF
bGVtZW50UHRyKTsKKyAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlIG9mIGFkZHJlc3NTcGFj
ZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAgICAgYG5hdGl2
ZSBUXiAke2FkZHJlc3NTcGFjZX0gb3BlcmF0b3ImW108VCR7cHJvdG9jb2xTdWZmaXgoYWRkcmVz
c1NwYWNlKX0+KFRbXSAke2FkZHJlc3NTcGFjZX0sdWludClgLAorICAgICAgICAgICAgICAgIGZ1
bmMgPT4geworICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtyZWYs
IGluZGV4XSwgbm9kZSkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgcmVmID0gcmVmLmxv
YWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWYpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2lu
U3RyaW5nLCAiTnVsbCBkZXJlZmVyZW5jZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXggPSBpbmRleC5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRl
eCA+IHJlZi5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdU
cmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQXJyYXkgaW5kZXggIiArIGluZGV4
ICsgIiBpcyBvdXQgb2YgYm91bmRzIG9mICIgKyByZWYpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEVQdHIuYm94KHJlZi5wdHIucGx1cyhpbmRleCAqIG5vZGUuYWN0dWFsVHlwZUFy
Z3VtZW50c1swXS5zaXplKSk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAgICAgYG5h
dGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUJHtwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2Up
fT4oVFtdICR7YWRkcmVzc1NwYWNlfSlgLAorICAgICAgICAgICAgICAgIGZ1bmMgPT4geworICAg
ICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtyZWZdLCBub2RlKSA9PiB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZWYgPSByZWYubG9hZFZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXJlZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gRVB0ci5ib3goMCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVB0ci5i
b3gocmVmLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgYWRkKHRoaW5nKQpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV0RXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAy
MjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpz
CShub25leGlzdGVudCkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1sZXQgbGV0RXhwcmVzc2lvbkNv
dW50ID0gMDsKLQotY2xhc3MgTGV0RXhwcmVzc2lvbiBleHRlbmRzIFZhbHVlIHsKLSAgICBjb25z
dHJ1Y3RvcihvcmlnaW4pCi0gICAgewotICAgICAgICBzdXBlcigpOwotICAgICAgICB0aGlzLl9v
cmlnaW4gPSBvcmlnaW47Ci0gICAgICAgIHRoaXMuaW5kZXggPSBsZXRFeHByZXNzaW9uQ291bnQr
KzsKLSAgICAgICAgdGhpcy5hcmd1bWVudCA9IG51bGw7Ci0gICAgICAgIHRoaXMuYm9keSA9IG51
bGw7Ci0gICAgfQotICAgIAotICAgIGdldCBvcmlnaW4oKSB7IHJldHVybiB0aGlzLl9vcmlnaW47
IH0KLSAgICBnZXQgbmFtZSgpIHsgcmV0dXJuICJsZXQ8IiArIHRoaXMuaW5kZXggKyAiPiI7IH0K
LSAgICAKLSAgICB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsg
IigiICsgdGhpcy5hcmd1bWVudCArICIsICIgKyB0aGlzLmJvZHkgKyAiKSI7Ci0gICAgfQotfQot
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtlQXJyYXlSZWZFeHByZXNz
aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VB
cnJheVJlZkV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDExICszMyw2IEBAIGNsYXNzIE1ha2VBcnJheVJlZkV4cHJlc3Npb24gZXh0ZW5kcyBF
eHAKICAgICAKICAgICBnZXQgbFZhbHVlKCkgeyByZXR1cm4gdGhpcy5fbFZhbHVlOyB9CiAgICAg
Ci0gICAgYmVjb21lQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX19wcm90b19fID0gQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uLnByb3Rv
dHlwZTsKLSAgICB9Ci0gICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJu
ICJAIiArICh0aGlzLm51bUVsZW1lbnRzID8gIjw8IiArIHRoaXMubnVtRWxlbWVudHMgKyAiPj4i
IDogIiIpICsgIigiICsgdGhpcy5sVmFsdWUgKyAiKSI7CkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9OYW1lQ29udGV4dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9OYW1lQ29udGV4dC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanMJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDYgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogICAgIHsKICAgICAgICAgdGhp
cy5fbWFwID0gbmV3IE1hcCgpOwogICAgICAgICB0aGlzLl9zZXQgPSBuZXcgU2V0KCk7Ci0gICAg
ICAgIHRoaXMuX2RlZmluZWQgPSBudWxsOwogICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGVtZW50
ID0gbnVsbDsKICAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKICAgICAgICAgdGhp
cy5faW50cmluc2ljcyA9IG51bGw7CkBAIC02Miw3ICs2MSw3IEBAIGNsYXNzIE5hbWVDb250ZXh0
IHsKICAgICAgICAgaWYgKCF0aGluZy5uYW1lKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKLSAgICAgICAgaWYgKHRoaW5nLmlzTmF0aXZlKSB7CisgICAgICAgIGlmICh0aGluZy5pc05h
dGl2ZSAmJiAhdGhpbmcuaW1wbGVtZW50YXRpb24pIHsKICAgICAgICAgICAgIGlmICghdGhpcy5f
aW50cmluc2ljcykKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBmdW5j
dGlvbiBpbiBhIHNjb3BlIHRoYXQgZG9lcyBub3QgcmVjb2duaXplIGludHJpbnNpY3MiKTsKICAg
ICAgICAgICAgIHRoaXMuX2ludHJpbnNpY3MuYWRkKHRoaW5nKTsKQEAgLTExNSwzNiArMTE0LDEx
IEBAIGNsYXNzIE5hbWVDb250ZXh0IHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogICAg
IAotICAgIGhhbmRsZURlZmluaW5nKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RlZmluZWQgPSBu
ZXcgU2V0KCk7Ci0gICAgfQotICAgIAotICAgIGlzRGVmaW5lZCh0aGluZykKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9zZXQuaGFzKHRoaW5nKSkgewotICAgICAgICAgICAgcmV0dXJuICF0aGlz
Ll9kZWZpbmVkCi0gICAgICAgICAgICAgICAgfHwgdGhpcy5fZGVmaW5lZC5oYXModGhpbmcpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZSAmJiB0aGlzLl9kZWxlZ2F0
ZS5pc0RlZmluZWQodGhpbmcpOwotICAgIH0KLSAgICAKLSAgICBkZWZpbmUodGhpbmcpCi0gICAg
ewotICAgICAgICB0aGlzLl9kZWZpbmVkLmFkZCh0aGluZyk7Ci0gICAgfQotICAgIAotICAgIGRl
ZmluZUFsbCgpCi0gICAgewotICAgICAgICB0aGlzLl9kZWZpbmVkID0gbnVsbDsKLSAgICB9Ci0g
ICAgCiAgICAgZG9TdGF0ZW1lbnQoc3RhdGVtZW50LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAg
IHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7CiAgICAgICAgIGNhbGxiYWNrKCk7
CiAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQgPSBudWxsOwotICAgICAgICB0aGlzLmRl
ZmluZShzdGF0ZW1lbnQpOwogICAgIH0KICAgICAKICAgICByZWNvZ25pemVJbnRyaW5zaWNzKCkK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMJ
KHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVS
ZXNvbHZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDE1IEBACiAvLyBtb3JlIGNv
bnZlbmllbnQgdG8gY2hlY2sgaGVyZSB0aGFuIGluIHRoZSBDaGVja2VyLiBUaGlzIHVzdWFsbHkg
aW52b2x2ZXMgdGhpbmdzIHRoYXQgbmVlZCB0byBiZQogLy8gY2hlY2tlZCBiZWZvcmUgVHlwZVJl
ZlRvVHlwZURlZlNraXBwZXIuCiBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsK
LSAgICAvLyBJdCdzIHRvdGFsbHkgT0sgdG8gaW5zdGFudGlhdGUgdGhpcyB3aXRoIHplcm8gYXJn
dW1lbnRzIChpLmUuIHBhc3NpbmcgdW5kZWZpbmVkIGZvciBib3RoIG9mCi0gICAgLy8gdGhlbSkg
aWYgeW91J3JlIGNyZWF0aW5nIGEgTmFtZVJlc29sdmVyIHRvIHZpc2l0IGEgUHJvZ3JhbS4KICAg
ICBjb25zdHJ1Y3RvcihuYW1lQ29udGV4dCkKICAgICB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAg
ICAgIHRoaXMuX25hbWVDb250ZXh0ID0gbmFtZUNvbnRleHQ7CiAgICAgfQotICAgIAotICAgIHZp
c2l0UHJvZ3JhbShub2RlKQorCisgICAgZG9TdGF0ZW1lbnQoc3RhdGVtZW50KQogICAgIHsKLSAg
ICAgICAgbGV0IG5hbWVDb250ZXh0ID0gbmV3IE5hbWVDb250ZXh0KHRoaXMuX25hbWVDb250ZXh0
KTsKLSAgICAgICAgbmFtZUNvbnRleHQucHJvZ3JhbSA9IG5vZGU7Ci0gICAgICAgIG5hbWVDb250
ZXh0LnJlY29nbml6ZUludHJpbnNpY3MoKTsKLSAgICAgICAgbmFtZUNvbnRleHQuaGFuZGxlRGVm
aW5pbmcoKTsKLSAgICAgICAgbm9kZS5pbnRyaW5zaWNzID0gbmFtZUNvbnRleHQuaW50cmluc2lj
czsKLSAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRz
KQotICAgICAgICAgICAgbmFtZUNvbnRleHQuYWRkKHN0YXRlbWVudCk7Ci0gICAgICAgIGxldCBj
aGVja2VyID0gbmV3IE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCk7Ci0gICAgICAgIGZvciAobGV0
IHN0YXRlbWVudCBvZiBub2RlLnRvcExldmVsU3RhdGVtZW50cykKLSAgICAgICAgICAgIG5hbWVD
b250ZXh0LmRvU3RhdGVtZW50KHN0YXRlbWVudCwgKCkgPT4gc3RhdGVtZW50LnZpc2l0KGNoZWNr
ZXIpKTsKLSAgICAgICAgbm9kZS5nbG9iYWxOYW1lQ29udGV4dCA9IG5hbWVDb250ZXh0OworICAg
ICAgICB0aGlzLl9uYW1lQ29udGV4dC5kb1N0YXRlbWVudChzdGF0ZW1lbnQsICgpID0+IHN0YXRl
bWVudC52aXNpdCh0aGlzKSk7CiAgICAgfQogICAgIAogICAgIF92aXNpdFR5cGVQYXJhbWV0ZXJz
QW5kQnVpbGROYW1lQ29udGV4dChub2RlKQpAQCAtMjA3LDggKzE5NSw2IEBAIGNsYXNzIE5hbWVS
ZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgdHlwZSA9IHRoaXMuX25hbWVD
b250ZXh0LmdldChUeXBlLCBub2RlLm5hbWUpOwogICAgICAgICAgICAgaWYgKCF0eXBlKQogICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmlu
ZywgIkNvdWxkIG5vdCBmaW5kIHR5cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7Ci0gICAgICAgICAg
ICBpZiAoIXRoaXMuX25hbWVDb250ZXh0LmlzRGVmaW5lZCh0eXBlKSkKLSAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJJbGxlZ2Fs
IGZvcndhcmQgdXNlIG9mIHR5cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7CiAgICAgICAgICAgICBu
b2RlLnR5cGUgPSB0eXBlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjMwLDcgKzIxNiw2IEBA
IGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHZpc2l0UmVmZXJlbmNl
VHlwZShub2RlKQogICAgIHsKICAgICAgICAgbGV0IG5hbWVDb250ZXh0ID0gbmV3IE5hbWVDb250
ZXh0KHRoaXMuX25hbWVDb250ZXh0KTsKLSAgICAgICAgbmFtZUNvbnRleHQuZGVmaW5lQWxsKCk7
CiAgICAgICAgIG5vZGUuZWxlbWVudFR5cGUudmlzaXQobmV3IE5hbWVSZXNvbHZlcihuYW1lQ29u
dGV4dCkpOwogICAgIH0KICAgICAKQEAgLTI1OCw2ICsyNDMsMjggQEAgY2xhc3MgTmFtZVJlc29s
dmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHN1cGVyLnZpc2l0UmV0dXJuKG5vZGUpOwog
ICAgIH0KICAgICAKKyAgICBfaGFuZGxlUHJvcGVydHlBY2Nlc3Mobm9kZSkKKyAgICB7CisgICAg
ICAgIG5vZGUucG9zc2libGVHZXRPdmVybG9hZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVu
Yywgbm9kZS5nZXRGdW5jTmFtZSk7CisgICAgICAgIG5vZGUucG9zc2libGVTZXRPdmVybG9hZHMg
PSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgbm9kZS5zZXRGdW5jTmFtZSk7CisgICAgICAg
IG5vZGUucG9zc2libGVBbmRPdmVybG9hZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywg
bm9kZS5hbmRGdW5jTmFtZSk7CisKKyAgICAgICAgaWYgKCFub2RlLnBvc3NpYmxlR2V0T3Zlcmxv
YWRzICYmICFub2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzKQorICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGZpbmQgZWl0aGVy
ICIgKyBub2RlLmdldEZ1bmNOYW1lICsgIiBvciAiICsgbm9kZS5hbmRGdW5jTmFtZSk7CisgICAg
fQorICAgIAorICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhp
cy5faGFuZGxlUHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAgICAgIHN1cGVyLnZpc2l0RG90RXhw
cmVzc2lvbihub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9k
ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzKG5vZGUpOworICAg
ICAgICBzdXBlci52aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKTsKKyAgICB9CisgICAgCiAgICAg
dmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzb2x2ZVR5
cGVBcmd1bWVudHMobm9kZS50eXBlQXJndW1lbnRzKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksMTAgQEAgY2xhc3MgTmF0aXZlRnVuYyBleHRlbmRzIEZ1bmMgewogICAgIHsKICAg
ICAgICAgc3VwZXIob3JpZ2luLCBuYW1lLCByZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycywgcGFy
YW1ldGVycywgaXNDYXN0KTsKICAgICAgICAgdGhpcy5pc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbiA9IG51bGw7CisgICAgICAgIHRoaXMuaW5zdGFudGlh
dGVJbXBsZW1lbnRhdGlvbiA9IChzdWJzdGl0dXRpb24pID0+IHt9OworICAgICAgICB0aGlzLnZp
c2l0SW1wbGVtZW50YXRpb25EYXRhID0gKGltcGxlbWVudGF0aW9uRGF0YSwgdmlzaXRvcikgPT4g
bnVsbDsKKyAgICAgICAgdGhpcy5kaWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEg
PSBpbXBsZW1lbnRhdGlvbkRhdGEgPT4gbnVsbDsKICAgICB9CiAgICAgCiAgICAgZ2V0IGlzTmF0
aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmNJbnN0YW5jZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSwxNCArMjUsMTYgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgTmF0
aXZlRnVuY0luc3RhbmNlIGV4dGVuZHMgRnVuYyB7Ci0gICAgY29uc3RydWN0b3IoZnVuYywgcmV0
dXJuVHlwZSwgcGFyYW1ldGVycywgaXNDYXN0KQorICAgIGNvbnN0cnVjdG9yKGZ1bmMsIHJldHVy
blR5cGUsIHBhcmFtZXRlcnMsIGlzQ2FzdCwgaW1wbGVtZW50YXRpb25EYXRhKQogICAgIHsKICAg
ICAgICAgc3VwZXIoZnVuYy5vcmlnaW4sIGZ1bmMubmFtZSwgcmV0dXJuVHlwZSwgW10sIHBhcmFt
ZXRlcnMsIGlzQ2FzdCk7CiAgICAgICAgIHRoaXMuX2Z1bmMgPSBmdW5jOworICAgICAgICB0aGlz
Ll9pbXBsZW1lbnRhdGlvbkRhdGEgPSBpbXBsZW1lbnRhdGlvbkRhdGE7CiAgICAgfQogICAgIAog
ICAgIGdldCBmdW5jKCkgeyByZXR1cm4gdGhpcy5fZnVuYzsgfQogICAgIGdldCBpc05hdGl2ZSgp
IHsgcmV0dXJuIHRydWU7IH0KKyAgICBnZXQgaW1wbGVtZW50YXRpb25EYXRhKCkgeyByZXR1cm4g
dGhpcy5faW1wbGVtZW50YXRpb25EYXRhOyB9CiAKICAgICB0b0RlY2xTdHJpbmcoKQogICAgIHsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkocmV2aXNpb24gMjIyMTIz
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMzMsOSArMzMsMTcgQEAgY2xhc3MgTm9kZSB7CiAgICAgICAgIGxldCByZXR1cm5WYWx1
ZSA9IHZpc2l0RnVuYy5jYWxsKHZpc2l0b3IsIHRoaXMpOwogICAgICAgICBpZiAoInJldHVyblZh
bHVlIiBpbiB2aXNpdG9yKQogICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB2aXNpdG9yLnJldHVy
blZhbHVlOworICAgICAgICAKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KICAg
ICAKKyAgICBzdGF0aWMgdmlzaXQobm9kZSwgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlmIChu
b2RlIGluc3RhbmNlb2YgTm9kZSkKKyAgICAgICAgICAgIHJldHVybiBub2RlLnZpc2l0KHZpc2l0
b3IpOworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisgICAgCiAgICAgdW5pZnkodW5pZmlj
YXRpb25Db250ZXh0LCBvdGhlcikKICAgICB7CiAgICAgICAgIGlmICghb3RoZXIpCkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vcm1hbFVzZVBy
b3BlcnR5UmVzb2x2ZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisidXNlIHN0cmljdCI7CisKK2NsYXNzIE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIgZXh0ZW5k
cyBSZXdyaXRlciB7CisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAg
ICByZXR1cm4gc3VwZXIudmlzaXREb3RFeHByZXNzaW9uKG5vZGUpLnJld3JpdGVBZnRlckNsb25p
bmcoKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBzdXBlci52aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKS5yZXdyaXRl
QWZ0ZXJDbG9uaW5nKCk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9QYXJzZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9QYXJzZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUGFyc2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw5ICszMzcsOSBAQCBmdW5j
dGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgIH0pOwogICAgIH0K
ICAgICAKLSAgICBmdW5jdGlvbiBlbWl0SW5jcmVtZW50KHRva2VuLCBwdHIsIGV4dHJhQXJnKQor
ICAgIGZ1bmN0aW9uIGVtaXRJbmNyZW1lbnQodG9rZW4sIG9sZCwgZXh0cmFBcmcpCiAgICAgewot
ICAgICAgICBsZXQgYXJncyA9IFtuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJp
YWJsZVJlZi53cmFwKHB0cikpXTsKKyAgICAgICAgbGV0IGFyZ3MgPSBbb2xkXTsKICAgICAgICAg
aWYgKGV4dHJhQXJnKQogICAgICAgICAgICAgYXJncy5wdXNoKGV4dHJhQXJnKTsKICAgICAgICAg
CkBAIC0zNTAsMjcgKzM1MCwxNSBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9y
aWdpbktpCiAgICAgICAgIGlmIChuYW1lID09ICJvcGVyYXRvciIpCiAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkludmFsaWQgbmFtZTogIiArIG5hbWUpOwogICAgICAgICAKLSAgICAgICAg
cmV0dXJuIG5ldyBBc3NpZ25tZW50KAotICAgICAgICAgICAgdG9rZW4sCi0gICAgICAgICAgICBu
ZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpLAot
ICAgICAgICAgICAgbmV3IENhbGxFeHByZXNzaW9uKHRva2VuLCBuYW1lLCBbXSwgYXJncykpOwor
ICAgICAgICByZXR1cm4gbmV3IENhbGxFeHByZXNzaW9uKHRva2VuLCBuYW1lLCBbXSwgYXJncyk7
CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KHRv
a2VuLCBsZWZ0KQogICAgIHsKLSAgICAgICAgbGV0IHB0ciA9IG5ldyBMZXRFeHByZXNzaW9uKHRv
a2VuKTsKLSAgICAgICAgcHRyLmFyZ3VtZW50ID0gbmV3IE1ha2VQdHJFeHByZXNzaW9uKHRva2Vu
LCBsZWZ0KTsKLSAgICAgICAgCi0gICAgICAgIGxldCBvbGRWYWx1ZSA9IG5ldyBMZXRFeHByZXNz
aW9uKHRva2VuKTsKLSAgICAgICAgb2xkVmFsdWUuYXJndW1lbnQgPSBuZXcgRGVyZWZlcmVuY2VF
eHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpOwotICAgICAgICAKLSAgICAg
ICAgcHRyLmJvZHkgPSBvbGRWYWx1ZTsKLSAgICAgICAgCi0gICAgICAgIG9sZFZhbHVlLmJvZHkg
PSBuZXcgQ29tbWFFeHByZXNzaW9uKHRva2VuLCBbCi0gICAgICAgICAgICBlbWl0SW5jcmVtZW50
KHRva2VuLCBwdHIpLAotICAgICAgICAgICAgVmFyaWFibGVSZWYud3JhcChvbGRWYWx1ZSkKLSAg
ICAgICAgXSk7Ci0gICAgICAgIHJldHVybiBwdHI7CisgICAgICAgIGxldCByZWFkTW9kaWZ5V3Jp
dGUgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7CisgICAgICAg
IHJlYWRNb2RpZnlXcml0ZS5uZXdWYWx1ZUV4cCA9IGVtaXRJbmNyZW1lbnQodG9rZW4sIHJlYWRN
b2RpZnlXcml0ZS5vbGRWYWx1ZVJlZigpKTsKKyAgICAgICAgcmVhZE1vZGlmeVdyaXRlLnJlc3Vs
dEV4cCA9IHJlYWRNb2RpZnlXcml0ZS5vbGRWYWx1ZVJlZigpOworICAgICAgICByZXR1cm4gcmVh
ZE1vZGlmeVdyaXRlOwogICAgIH0KICAgICAKICAgICBmdW5jdGlvbiBwYXJzZVBvc3NpYmxlU3Vm
Zml4KCkKQEAgLTM5NSw5ICszODMsNyBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4s
IG9yaWdpbktpCiAgICAgICAgICAgICBjYXNlICJbIjogewogICAgICAgICAgICAgICAgIGxldCBp
bmRleCA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgICAgICAgICAgIGNvbnN1bWUoIl0iKTsK
LSAgICAgICAgICAgICAgICBsZWZ0ID0gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbigKLSAgICAg
ICAgICAgICAgICAgICAgdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgIG5ldyBDYWxsRXhwcmVz
c2lvbih0b2tlbiwgIm9wZXJhdG9yJltdIiwgW10sIFtsZWZ0LCBpbmRleF0pKTsKKyAgICAgICAg
ICAgICAgICBsZWZ0ID0gbmV3IEluZGV4RXhwcmVzc2lvbih0b2tlbiwgbGVmdCwgaW5kZXgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVs
dDoKQEAgLTQwOSwxMyArMzk1LDEwIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwg
b3JpZ2luS2kKICAgICAKICAgICBmdW5jdGlvbiBmaW5pc2hQYXJzaW5nUHJlSW5jcmVtZW50KHRv
a2VuLCBsZWZ0LCBleHRyYUFyZykKICAgICB7Ci0gICAgICAgIGxldCBwdHIgPSBuZXcgTGV0RXhw
cmVzc2lvbih0b2tlbik7Ci0gICAgICAgIHB0ci5hcmd1bWVudCA9IG5ldyBNYWtlUHRyRXhwcmVz
c2lvbih0b2tlbiwgbGVmdCk7Ci0gICAgICAgIHB0ci5ib2R5ID0gbmV3IENvbW1hRXhwcmVzc2lv
bih0b2tlbiwgWwotICAgICAgICAgICAgZW1pdEluY3JlbWVudCh0b2tlbiwgcHRyLCBleHRyYUFy
ZyksCi0gICAgICAgICAgICBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJs
ZVJlZi53cmFwKHB0cikpCi0gICAgICAgIF0pOwotICAgICAgICByZXR1cm4gcHRyOworICAgICAg
ICBsZXQgcmVhZE1vZGlmeVdyaXRlID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24odG9r
ZW4sIGxlZnQpOworICAgICAgICByZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVFeHAgPSBlbWl0SW5j
cmVtZW50KHRva2VuLCByZWFkTW9kaWZ5V3JpdGUub2xkVmFsdWVSZWYoKSwgZXh0cmFBcmcpOwor
ICAgICAgICByZWFkTW9kaWZ5V3JpdGUucmVzdWx0RXhwID0gcmVhZE1vZGlmeVdyaXRlLm5ld1Zh
bHVlUmVmKCk7CisgICAgICAgIHJldHVybiByZWFkTW9kaWZ5V3JpdGU7CiAgICAgfQogICAgIAog
ICAgIGZ1bmN0aW9uIHBhcnNlUHJlSW5jcmVtZW50KCkKQEAgLTU3NSw2ICs1NTgsMTAgQEAgZnVu
Y3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgbGlzdC5wdXNoKGVmZmVjdGZ1bEV4cHJlc3Npb24pOwogICAgICAgICB9CisgICAg
ICAgIGlmICghbGlzdC5sZW5ndGgpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkxlbmd0
aCBzaG91bGQgbmV2ZXIgYmUgemVybyIpOworICAgICAgICBpZiAobGlzdC5sZW5ndGggPT0gMSkK
KyAgICAgICAgICAgIHJldHVybiBsaXN0WzBdOwogICAgICAgICByZXR1cm4gbmV3IENvbW1hRXhw
cmVzc2lvbihvcmlnaW4sIGxpc3QpOwogICAgIH0KICAgICAKQEAgLTc2MSwxNSArNzQ4LDMwIEBA
IGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICBmdW5jdGlvbiBw
YXJzZUZ1bmNOYW1lKCkKICAgICB7CiAgICAgICAgIGlmICh0cnlDb25zdW1lKCJvcGVyYXRvciIp
KSB7Ci0gICAgICAgICAgICBsZXQgdG9rZW4gPSB0cnlDb25zdW1lKCIrIiwgIi0iLCAiKiIsICIv
IiwgIiUiLCAiXiIsICImIiwgInwiLCAiPCIsICI+IiwgIjw9IiwgIj49IiwgIj09IiwgIisrIiwg
Ii0tIiwgIiYiKTsKLSAgICAgICAgICAgIGlmICh0b2tlbikgewotICAgICAgICAgICAgICAgIGlm
ICh0b2tlbi50ZXh0ICE9ICImIiB8fCAhdHJ5Q29uc3VtZSgiWyIpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gIm9wZXJhdG9yIiArIHRva2VuLnRleHQ7CisgICAgICAgICAgICBsZXQgdG9r
ZW4gPSBjb25zdW1lKCIrIiwgIi0iLCAiKiIsICIvIiwgIiUiLCAiXiIsICImIiwgInwiLCAiPCIs
ICI+IiwgIjw9IiwgIj49IiwgIj09IiwgIisrIiwgIi0tIiwgIiYiLCAiLiIpOworICAgICAgICAg
ICAgaWYgKHRva2VuLnRleHQgPT0gIiYiKSB7CisgICAgICAgICAgICAgICAgaWYgKHRyeUNvbnN1
bWUoIlsiKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCJdIik7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAib3BlcmF0b3ImW10iOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAodHJ5Q29uc3VtZSgiLiIpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gIm9wZXJhdG9yJi4iICsgY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKS50ZXh0OworICAgICAg
ICAgICAgICAgIHJldHVybiAib3BlcmF0b3ImIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0b2tlbi50ZXh0ID09ICIuIikgeworICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAi
b3BlcmF0b3IuIiArIGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIikudGV4dDsKKyAgICAgICAgICAg
ICAgICBpZiAodHJ5Q29uc3VtZSgiPSIpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0g
Ij0iOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodG9rZW4udGV4dCA9PSAiWyIpIHsKICAgICAgICAgICAgICAgICBjb25zdW1l
KCJdIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciZbXSI7CisgICAgICAgICAg
ICAgICAgbGV0IHJlc3VsdCA9ICJvcGVyYXRvcltdIjsKKyAgICAgICAgICAgICAgICBpZiAodHJ5
Q29uc3VtZSgiPSIpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIj0iOworICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZXQg
bmFtZSA9IGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIik7Ci0gICAgICAgICAgICByZXR1cm4gIm9w
ZXJhdG9yICIgKyBuYW1lOworICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciIgKyB0b2tlbi50
ZXh0OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb25zdW1lS2luZCgiaWRlbnRpZmllciIp
LnRleHQ7CiAgICAgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFy
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJl
LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Q
cmVwYXJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMjYgQEAKIGZ1bmN0aW9uIHBy
ZXBhcmUob3JpZ2luLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KQogewogICAgIGxldCBwcm9ncmFt
ID0gbmV3IFByb2dyYW0oKTsKKyAgICAKICAgICBwYXJzZShwcm9ncmFtLCAiL2ludGVybmFsL3N0
ZGxpYiIsICJuYXRpdmUiLCAyNywgc3RhbmRhcmRMaWJyYXJ5KTsKICAgICBwYXJzZShwcm9ncmFt
LCBvcmlnaW4sICJ1c2VyIiwgbGluZU51bWJlck9mZnNldCwgdGV4dCk7Ci0gICAgcmVzb2x2ZU5h
bWVzKHByb2dyYW0pOwotICAgIHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKTsKKyAgICAKKyAgICBs
ZXQgbmFtZVJlc29sdmVyID0gY3JlYXRlTmFtZVJlc29sdmVyKHByb2dyYW0pOworICAgIHJlc29s
dmVOYW1lc0luVHlwZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNvbHZlTmFtZXNJ
blByb3RvY29scyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIHJlc29sdmVUeXBlRGVmc0lu
VHlwZXMocHJvZ3JhbSk7CisgICAgcmVzb2x2ZVR5cGVEZWZzSW5Qcm90b2NvbHMocHJvZ3JhbSk7
CisgICAgLy8gRklYTUU6IE5lZWQgdG8gdmVyaWZ5IHRoYXQgc3RydWN0cmUgYXJlIG5vdCBjeWNs
aWMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzA0
NAorICAgIHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSk7CisgICAgcmVzb2x2ZU5h
bWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNvbHZlVHlwZURl
ZnNJbkZ1bmN0aW9ucyhwcm9ncmFtKTsKKyAgICAKICAgICBmbGF0dGVuUHJvdG9jb2xFeHRlbmRz
KHByb2dyYW0pOwogICAgIGNoZWNrKHByb2dyYW0pOwogICAgIGNoZWNrTGl0ZXJhbFR5cGVzKHBy
b2dyYW0pOworICAgIHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pOworICAgIGNoZWNrTGl0ZXJh
bFR5cGVzKHByb2dyYW0pOwogICAgIGNoZWNrUHJvZ3JhbVdyYXBwZWQocHJvZ3JhbSk7CiAgICAg
Y2hlY2tSZXR1cm5zKHByb2dyYW0pOwogICAgIGNoZWNrVW5yZWFjaGFibGVDb2RlKHByb2dyYW0p
OwpAQCAtNDEsNiArNTQsNyBAQCBmdW5jdGlvbiBwcmVwYXJlKG9yaWdpbiwgbGluZU51bWJlck9m
ZnNlCiAgICAgY2hlY2tSZWN1cnNpb24ocHJvZ3JhbSk7CiAgICAgY2hlY2tQcm9ncmFtV3JhcHBl
ZChwcm9ncmFtKTsKICAgICBpbmxpbmUocHJvZ3JhbSk7CisgICAgCiAgICAgcmV0dXJuIHByb2dy
YW07CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwko
cmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3Jh
bS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTAgQEAgY2xhc3MgUHJvZ3JhbSBleHRl
bmRzIE5vZGUgewogICAgICAgICB0aGlzLl90eXBlcyA9IG5ldyBNYXAoKTsKICAgICAgICAgdGhp
cy5fcHJvdG9jb2xzID0gbmV3IE1hcCgpOwogICAgICAgICB0aGlzLl9mdW5jSW5zdGFudGlhdG9y
ID0gbmV3IEZ1bmNJbnN0YW50aWF0b3IodGhpcyk7CisgICAgICAgIHRoaXMuX2dsb2JhbE5hbWVD
b250ZXh0ID0gbmV3IE5hbWVDb250ZXh0KCk7CisgICAgICAgIHRoaXMuX2dsb2JhbE5hbWVDb250
ZXh0LnByb2dyYW0gPSB0aGlzOworICAgICAgICB0aGlzLl9nbG9iYWxOYW1lQ29udGV4dC5yZWNv
Z25pemVJbnRyaW5zaWNzKCk7CisgICAgICAgIHRoaXMuaW50cmluc2ljcyA9IHRoaXMuX2dsb2Jh
bE5hbWVDb250ZXh0LmludHJpbnNpY3M7CiAgICAgfQogICAgIAogICAgIGdldCB0b3BMZXZlbFN0
YXRlbWVudHMoKSB7IHJldHVybiB0aGlzLl90b3BMZXZlbFN0YXRlbWVudHM7IH0KQEAgLTQwLDYg
KzQ0LDcgQEAgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIE5vZGUgewogICAgIGdldCB0eXBlcygpIHsg
cmV0dXJuIHRoaXMuX3R5cGVzOyB9CiAgICAgZ2V0IHByb3RvY29scygpIHsgcmV0dXJuIHRoaXMu
X3Byb3RvY29sczsgfQogICAgIGdldCBmdW5jSW5zdGFudGlhdG9yKCkgeyByZXR1cm4gdGhpcy5f
ZnVuY0luc3RhbnRpYXRvcjsgfQorICAgIGdldCBnbG9iYWxOYW1lQ29udGV4dCgpIHsgcmV0dXJu
IHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0OyB9CiAgICAgCiAgICAgYWRkKHN0YXRlbWVudCkKICAg
ICB7CkBAIC01MiwxMCArNTcsMTEgQEAgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIE5vZGUgewogICAg
ICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudCBpbnN0YW5jZW9mIFR5cGUpCiAgICAgICAgICAgICB0
aGlzLl90eXBlcy5zZXQoc3RhdGVtZW50Lm5hbWUsIHN0YXRlbWVudCk7CiAgICAgICAgIGVsc2Ug
aWYgKHN0YXRlbWVudCBpbnN0YW5jZW9mIFByb3RvY29sKQotICAgICAgICAgICAgdGhpcy5fcHJv
dG9jb2xzLnNldChzdGF0ZW1lbnQuYWRkLCBzdGF0ZW1lbnQpOworICAgICAgICAgICAgdGhpcy5f
cHJvdG9jb2xzLnNldChzdGF0ZW1lbnQubmFtZSwgc3RhdGVtZW50KTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTdGF0ZW1lbnQgaXMgbm90IGEgZnVuY3Rpb24g
b3IgdHlwZTogIiArIHN0YXRlbWVudCk7CiAgICAgICAgIHRoaXMuX3RvcExldmVsU3RhdGVtZW50
cy5wdXNoKHN0YXRlbWVudCk7CisgICAgICAgIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0LmFkZChz
dGF0ZW1lbnQpOwogICAgIH0KICAgICAKICAgICB0b1N0cmluZygpCkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1By
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmlj
dCI7CisKK2NsYXNzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24g
eworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgYmFzZSkKKyAgICB7CisgICAgICAgIHN1cGVyKG9y
aWdpbik7CisgICAgICAgIHRoaXMuYmFzZSA9IGJhc2U7CisgICAgfQorICAgIAorICAgIGdldCBy
ZXN1bHRUeXBlKCkgeyByZXR1cm4gdGhpcy5yZXN1bHRUeXBlRm9yR2V0ID8gdGhpcy5yZXN1bHRU
eXBlRm9yR2V0IDogdGhpcy5yZXN1bHRUeXBlRm9yQW5kOyB9CisgICAgCisgICAgcmV3cml0ZUFm
dGVyQ2xvbmluZygpCisgICAgeworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBub2RlLmJhc2Uu
aXNMVmFsdWUgd2lsbCBvbmx5IHJldHVybiB0cnVlIGlmIGl0J3MgcG9zc2libGUgdG8gZ2V0IGEg
cG9pbnRlciB0byBpdCwKKyAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCBubyBsb25nZXIgc2VlIGFu
eSBEb3RFeHByZXNzaW9ucyBvciBJbmRleEV4cHJlc3Npb25zLiBBbHNvLCBub2RlIGlzIGEgbmV3
bHkgY3JlYXRlZAorICAgICAgICAvLyBub2RlIGFuZCBldmVyeXRoaW5nIGJlbmVhdGggaXQgaXMg
bmV3bHkgY3JlYXRlZCwgc28gd2UgY2FuIGVkaXQgaXQgaW4tcGxhY2UuCisgICAgICAgIAorICAg
ICAgICBpZiAoKHRoaXMuYmFzZS5pc0xWYWx1ZSB8fCB0aGlzLmJhc2VUeXBlLmlzUmVmKSAmJiB0
aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICByZXR1cm4gbmV3IERlcmVmZXJlbmNlRXhwcmVz
c2lvbih0aGlzLm9yaWdpbiwgdGhpcy5jYWxsRm9yQW5kKTsKKyAgICAgICAgCisgICAgICAgIGlm
ICh0aGlzLmNhbGxGb3JHZXQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsRm9yR2V0Owor
ICAgICAgICAKKyAgICAgICAgaWYgKCF0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IodGhpcy5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIjogUHJvcGVydHkgYWNjZXNz
IHdpdGhvdXQgZ2V0dGVyIGFuZCBhbmRlcjogIiArIHRoaXMpOworICAgICAgICAKKyAgICAgICAg
bGV0IGFub25WYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUodGhpcy5vcmlnaW4sIHRoaXMuYmFz
ZVR5cGUpOworICAgICAgICB0aGlzLmNhbGxGb3JBbmQuYXJndW1lbnRMaXN0WzBdID0gdGhpcy5i
YXNlVHlwZS51bmlmeU5vZGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZCh0aGlzLm9yaWdpbiwgVmFy
aWFibGVSZWYud3JhcChhbm9uVmFyKSk7CisgICAgICAgIHJldHVybiBuZXcgQ29tbWFFeHByZXNz
aW9uKHRoaXMub3JpZ2luLCBbCisgICAgICAgICAgICBhbm9uVmFyLAorICAgICAgICAgICAgbmV3
IEFzc2lnbm1lbnQodGhpcy5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAoYW5vblZhciksIHRoaXMu
YmFzZSwgdGhpcy5iYXNlVHlwZSksCisgICAgICAgICAgICBuZXcgRGVyZWZlcmVuY2VFeHByZXNz
aW9uKHRoaXMub3JpZ2luLCB0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgIF0pOworICAgIH0KKyAg
ICAKKyAgICB1cGRhdGVDYWxsc0FmdGVyQ2hhbmdpbmdCYXNlKCkKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLmNhbGxGb3JHZXQpCisgICAgICAgICAgICB0aGlzLmNhbGxGb3JHZXRbMF0gPSB0aGlz
LmJhc2U7CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICB0aGlzLmNh
bGxGb3JBbmRbMF0gPSB0aGlzLmJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQodGhpcy5v
cmlnaW4sIHRoaXMuYmFzZSk7CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JTZXQpCisgICAgICAg
ICAgICB0aGlzLmNhbGxGb3JTZXRbMF0gPSB0aGlzLmJhc2U7CisgICAgfQorICAgIAorICAgIGVt
aXRHZXQoYmFzZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnZpc2l0KG5ldyBS
ZXdyaXRlcigpKTsKKyAgICAgICAgcmVzdWx0LmJhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQu
dXBkYXRlQ2FsbHNBZnRlckNoYW5naW5nQmFzZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0LnJl
d3JpdGVBZnRlckNsb25pbmcoKTsKKyAgICB9CisgICAgCisgICAgZW1pdFNldChiYXNlLCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnZpc2l0KG5ldyBSZXdyaXRlcigp
KTsKKyAgICAgICAgaWYgKCFyZXN1bHQuY2FsbEZvclNldCkKKyAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKHRoaXMub3JpZ2luLm9yaWdpblN0cmluZywgIkNhbm5vdCBlbWl0IHNldCBi
ZWNhdXNlOiAiICsgdGhpcy5lcnJvckZvclNldC50eXBlRXJyb3JNZXNzYWdlKTsKKyAgICAgICAg
cmVzdWx0LmJhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQudXBkYXRlQ2FsbHNBZnRlckNoYW5n
aW5nQmFzZSgpOworICAgICAgICByZXN1bHQuY2FsbEZvclNldC5hcmd1bWVudExpc3RbcmVzdWx0
LmNhbGxGb3JTZXQuYXJndW1lbnRMaXN0Lmxlbmd0aCAtIDFdID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiByZXN1bHQuY2FsbEZvclNldDsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5UmVzb2x2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlSZXNvbHZlci5qcwkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eVJlc29sdmVyLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFByb3BlcnR5UmVzb2x2
ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBfdmlzaXRQcm9wZXJ0eUFjY2Vzcyhub2RlKQorICAg
IHsKKyAgICAgICAgbGV0IG5ld05vZGUgPSBub2RlLnZpc2l0KG5ldyBOb3JtYWxVc2VQcm9wZXJ0
eVJlc29sdmVyKCkpOworICAgICAgICBuZXdOb2RlLnZpc2l0KHRoaXMpOworICAgICAgICBub2Rl
LmJlY29tZShuZXdOb2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5v
ZGUpCisgICAgeworICAgICAgICB0aGlzLl92aXNpdFByb3BlcnR5QWNjZXNzKG5vZGUpOworICAg
IH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAg
dGhpcy5fdmlzaXRQcm9wZXJ0eUFjY2Vzcyhub2RlKTsKKyAgICB9CisgICAgCisgICAgX2hhbmRs
ZVJlYWRNb2RpZnlXcml0ZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHR5cGUgPSBub2RlLm9s
ZFZhbHVlVmFyLnR5cGU7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiTnVsbCB0eXBlIik7CisgICAgICAgIGxldCBzaW1wbGVMSFMgPSBub2RlLmxWYWx1
ZS52aXNpdChuZXcgTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlcigpKTsKKyAgICAgICAgaWYgKHNp
bXBsZUxIUy5pc0xWYWx1ZSkgeworICAgICAgICAgICAgbGV0IHB0clR5cGUgPSBuZXcgUHRyVHlw
ZShub2RlLm9yaWdpbiwgc2ltcGxlTEhTLmFkZHJlc3NTcGFjZSwgdHlwZSk7CisgICAgICAgICAg
ICBsZXQgcHRyVmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG5vZGUub3JpZ2luLCBwdHJUeXBl
KTsKKyAgICAgICAgICAgIG5vZGUuYmVjb21lKG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmln
aW4sIFsKKyAgICAgICAgICAgICAgICBub2RlLm9sZFZhbHVlVmFyLCBub2RlLm5ld1ZhbHVlVmFy
LCBwdHJWYXIsCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQoCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHB0clZhciksCisgICAgICAgICAg
ICAgICAgICAgIG5ldyBNYWtlUHRyRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgc2ltcGxlTEhTKSwg
cHRyVHlwZSksCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQoCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm9sZFZhbHVlUmVmKCksCisgICAgICAgICAgICAgICAg
ICAgIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndy
YXAocHRyVmFyKSksIHR5cGUpLAorICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUu
b3JpZ2luLCBub2RlLm5ld1ZhbHVlUmVmKCksIG5vZGUubmV3VmFsdWVFeHAsIHR5cGUpLAorICAg
ICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KAorICAgICAgICAgICAgICAgICAgICBub2RlLm9y
aWdpbiwgbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgVmFyaWFibGVSZWYu
d3JhcChwdHJWYXIpKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5uZXdWYWx1ZVJlZigpLCB0
eXBlKSwKKyAgICAgICAgICAgICAgICBub2RlLnJlc3VsdEV4cAorICAgICAgICAgICAgXSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsZXQgcmVz
dWx0ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubFZh
bHVlLmJhc2UpOworICAgICAgICByZXN1bHQubmV3VmFsdWVFeHAgPSBuZXcgQ29tbWFFeHByZXNz
aW9uKG5vZGUub3JpZ2luLCBbCisgICAgICAgICAgICBub2RlLm9sZFZhbHVlVmFyLCBub2RlLm5l
d1ZhbHVlVmFyLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIG5vZGUu
b2xkVmFsdWVSZWYoKSwgbm9kZS5sVmFsdWUuZW1pdEdldChyZXN1bHQub2xkVmFsdWVSZWYoKSks
IHR5cGUpLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIG5vZGUubmV3
VmFsdWVSZWYoKSwgbm9kZS5uZXdWYWx1ZUV4cCwgdHlwZSksCisgICAgICAgICAgICBub2RlLmxW
YWx1ZS5lbWl0U2V0KHJlc3VsdC5vbGRWYWx1ZVJlZigpLCBub2RlLm5ld1ZhbHVlUmVmKCkpCisg
ICAgICAgIF0pOworICAgICAgICByZXN1bHQucmVzdWx0RXhwID0gbm9kZS5uZXdWYWx1ZVJlZigp
OworICAgICAgICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUocmVzdWx0KTsKKyAgICAgICAg
bm9kZS5iZWNvbWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdmlzaXRSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLm5ld1ZhbHVlRXhwLnZpc2l0
KHRoaXMpOworICAgICAgICBub2RlLnJlc3VsdEV4cC52aXNpdCh0aGlzKTsKKyAgICAgICAgdGhp
cy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEFz
c2lnbm1lbnQobm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUucmhzLnZpc2l0KHRoaXMpOworICAg
ICAgICAKKyAgICAgICAgbGV0IHNpbXBsZUxIUyA9IG5vZGUubGhzLnZpc2l0KG5ldyBOb3JtYWxV
c2VQcm9wZXJ0eVJlc29sdmVyKCkpOworICAgICAgICBpZiAoc2ltcGxlTEhTLmlzTFZhbHVlKSB7
CisgICAgICAgICAgICBub2RlLmxocy5iZWNvbWUoc2ltcGxlTEhTKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCEobm9kZS5saHMgaW5zdGFu
Y2VvZiBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJVbmV4cGVjdGVkIGxocyB0eXBlOiAiICsgbm9kZS5saHMuY29uc3RydWN0b3IubmFtZSk7
CisgICAgICAgIAorICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24obm9kZS5vcmlnaW4sIG5vZGUubGhzLmJhc2UsIG5vZGUubGhzLmJhc2VUeXBlKTsKKyAg
ICAgICAgbGV0IHJlc3VsdFZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwg
bm9kZS50eXBlKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlRXhwID0gbmV3IENvbW1hRXhwcmVz
c2lvbihub2RlLm9yaWdpbiwgWworICAgICAgICAgICAgcmVzdWx0VmFyLAorICAgICAgICAgICAg
bmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAocmVzdWx0VmFyKSwg
bm9kZS5yaHMsIG5vZGUudHlwZSksCisgICAgICAgICAgICBub2RlLmxocy5lbWl0U2V0KHJlc3Vs
dC5vbGRWYWx1ZVJlZigpLCBWYXJpYWJsZVJlZi53cmFwKHJlc3VsdFZhcikpCisgICAgICAgIF0p
OworICAgICAgICByZXN1bHQucmVzdWx0RXhwID0gVmFyaWFibGVSZWYud3JhcChyZXN1bHRWYXIp
OworICAgICAgICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUocmVzdWx0KTsKKyAgICAgICAg
bm9kZS5iZWNvbWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdmlzaXRNYWtlUHRyRXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXRNYWtlUHRyRXhwcmVzc2lvbihu
b2RlKTsKKyAgICAgICAgaWYgKCFub2RlLmxWYWx1ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAgIHRo
cm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk5vdCBhbiBsdmFs
dWU6ICIgKyBub2RlLmxWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0TWFrZUFycmF5UmVm
RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXRNYWtlQXJyYXlSZWZF
eHByZXNzaW9uKG5vZGUpOworICAgICAgICBpZiAoIW5vZGUubFZhbHVlLmlzTFZhbHVlKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
Tm90IGFuIGx2YWx1ZTogIiArIG5vZGUubFZhbHVlKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMzYsNiArMzYsMTkgQEAgY2xhc3MgUHRyVHlwZSBleHRlbmRzIFJlZmVyZW5jZVR5cGUgewog
ICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQs
IG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CiAgICAgCisgICAgYXJndW1lbnRGb3JBbmRPdmVy
bG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Io
b3JpZ2luLm9yaWdpblN0cmluZywgIlBvaW50ZXIgc3Vic2NyaXB0IGlzIG5vdCB2YWxpZCIpOwor
ICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChvcmlnaW4sIHR5cGUpCisgICAg
eworICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9p
bnRlciBzdWJzY3JpcHQgaXMgbm90IHZhbGlkIik7CisgICAgfQorICAgIHJldHVyblR5cGVGcm9t
QW5kT3ZlcmxvYWQob3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5
cGU7CisgICAgfQorCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMu
ZWxlbWVudFR5cGUgKyAiXiAiICsgdGhpcy5hZGRyZXNzU3BhY2U7CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24uanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0
cmljdCI7CisKK2NsYXNzIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNz
aW9uIHsKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGxWYWx1ZSwgdHlwZSA9IG51bGwpCisgICAg
eworICAgICAgICBzdXBlcihvcmlnaW4pOworICAgICAgICB0aGlzLl9sVmFsdWUgPSBsVmFsdWU7
CisgICAgICAgIHRoaXMub2xkVmFsdWVWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUob3JpZ2lu
LCB0eXBlKTsKKyAgICAgICAgdGhpcy5uZXdWYWx1ZVZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJs
ZShvcmlnaW4sIHR5cGUpOworICAgICAgICB0aGlzLm5ld1ZhbHVlRXhwID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5yZXN1bHRFeHAgPSBudWxsOworICAgIH0KKyAgICAKKyAgICBnZXQgbFZhbHVlKCkg
eyByZXR1cm4gdGhpcy5fbFZhbHVlOyB9CisgICAgCisgICAgb2xkVmFsdWVSZWYoKSB7IHJldHVy
biBWYXJpYWJsZVJlZi53cmFwKHRoaXMub2xkVmFsdWVWYXIpOyB9CisgICAgbmV3VmFsdWVSZWYo
KSB7IHJldHVybiBWYXJpYWJsZVJlZi53cmFwKHRoaXMubmV3VmFsdWVWYXIpOyB9CisgICAgCisg
ICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJSTVcoIiArIHRoaXMubFZhbHVl
ICsgIiwgIiArIHRoaXMub2xkVmFsdWVWYXIgKyAiLCAiICsgdGhpcy5uZXdWYWx1ZVZhciArICIs
ICIgKyB0aGlzLm5ld1ZhbHVlRXhwICsgIiwgIiArIHRoaXMucmVzdWx0RXhwICsgIikiOworICAg
IH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU5hbWVz
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVO
YW1lcy5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUmVzb2x2ZU5hbWVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCwyOCBAQAogICov
CiAidXNlIHN0cmljdCI7CiAKLWZ1bmN0aW9uIHJlc29sdmVOYW1lcyhwcm9ncmFtKQorZnVuY3Rp
b24gY3JlYXRlTmFtZVJlc29sdmVyKHByb2dyYW0pCiB7Ci0gICAgcHJvZ3JhbS52aXNpdChuZXcg
TmFtZVJlc29sdmVyKCkpOworICAgIHJldHVybiBuZXcgTmFtZVJlc29sdmVyKHByb2dyYW0uZ2xv
YmFsTmFtZUNvbnRleHQpOwogfQorCitmdW5jdGlvbiByZXNvbHZlTmFtZXNJblR5cGVzKHByb2dy
YW0sIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0udHlwZXMu
dmFsdWVzKCkpCisgICAgICAgIG5hbWVSZXNvbHZlci5kb1N0YXRlbWVudCh0eXBlKTsKK30KKwor
ZnVuY3Rpb24gcmVzb2x2ZU5hbWVzSW5Qcm90b2NvbHMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKQor
eworICAgIGZvciAobGV0IHByb3RvY29sIG9mIHByb2dyYW0ucHJvdG9jb2xzLnZhbHVlcygpKQor
ICAgICAgICBuYW1lUmVzb2x2ZXIuZG9TdGF0ZW1lbnQocHJvdG9jb2wpOworfQorCitmdW5jdGlv
biByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpCit7CisgICAg
Zm9yIChsZXQgZnVuY3Mgb2YgcHJvZ3JhbS5mdW5jdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAg
Zm9yIChsZXQgZnVuYyBvZiBmdW5jcykKKyAgICAgICAgICAgIG5hbWVSZXNvbHZlci5kb1N0YXRl
bWVudChmdW5jKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcwkocmV2aXNpb24gMjIyMTIzKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogCiBmdW5jdGlvbiByZXNvbHZlT3Zlcmxv
YWRJbXBsKGZ1bmN0aW9ucywgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlw
ZSkKIHsKKyAgICBpZiAoIWZ1bmN0aW9ucykKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxs
IGZ1bmN0aW9uczsgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodCBieSB0aGUgY2FsbGVyLiIp
OworICAgIAogICAgIGxldCBmYWlsdXJlcyA9IFtdOwogICAgIGxldCBzdWNjZXNzZXMgPSBbXTsK
ICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmN0aW9ucykgewpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVByb3BlcnRpZXMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVByb3BlcnRpZXMuanMJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVByb3BlcnRpZXMuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCisvLyBUaGlzIHR1cm5zIERvdEV4
cHJlc3Npb24gYW5kIEluZGV4RXhwcmVzc2lvbiBpbnRvIGNhbGxzIHRvIGdldHRlcnMgKG9wZXJh
dG9yLmZpZWxkIGFuZCBvcGVyYXRvcltdKSwKKy8vIHNldHRlcnMgKG9wZXJhdG9yLmZpZWxkPSBh
bmQgb3BlcmF0b3JbXT0pLCBhbmQgYW5kZXJzIChvcGVyYXRvciYuZmllbGQgYW5kIG9wZXJhdG9y
JltdKS4gVGhpcyBpbnZvbHZlcworLy8gdHJhbnNmb3JtaW5nIGFzc2lnbm1lbnRzIGFuZCBSTVcn
cyB0byBkbyBsdmFsdWUgZW11bGF0aW9uLgorZnVuY3Rpb24gcmVzb2x2ZVByb3BlcnRpZXMocHJv
Z3JhbSkKK3sKKyAgICBwcm9ncmFtLnZpc2l0KG5ldyBQcm9wZXJ0eVJlc29sdmVyKCkpOworfQpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVR5cGVEZWZzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVUeXBlRGVm
cy5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmVzb2x2ZVR5cGVEZWZzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCwyNiBAQAogICov
CiAidXNlIHN0cmljdCI7CiAKLWZ1bmN0aW9uIHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKQorZnVu
Y3Rpb24gcmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyhwcm9ncmFtKQogewotICAgIHByb2dyYW0udmlz
aXQobmV3IFR5cGVEZWZSZXNvbHZlcigpKTsKKyAgICBsZXQgcmVzb2x2ZXIgPSBuZXcgVHlwZURl
ZlJlc29sdmVyKCk7CisgICAgZm9yIChsZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygp
KQorICAgICAgICB0eXBlLnZpc2l0KHJlc29sdmVyKTsKK30KKworZnVuY3Rpb24gcmVzb2x2ZVR5
cGVEZWZzSW5Qcm90b2NvbHMocHJvZ3JhbSkKK3sKKyAgICBsZXQgcmVzb2x2ZXIgPSBuZXcgVHlw
ZURlZlJlc29sdmVyKCk7CisgICAgZm9yIChsZXQgcHJvdG9jb2wgb2YgcHJvZ3JhbS5wcm90b2Nv
bHMudmFsdWVzKCkpCisgICAgICAgIHByb3RvY29sLnZpc2l0KHJlc29sdmVyKTsKK30KKworZnVu
Y3Rpb24gcmVzb2x2ZVR5cGVEZWZzSW5GdW5jdGlvbnMocHJvZ3JhbSkKK3sKKyAgICBsZXQgcmVz
b2x2ZXIgPSBuZXcgVHlwZURlZlJlc29sdmVyKCk7CisgICAgZm9yIChsZXQgZnVuY3Mgb2YgcHJv
Z3JhbS5mdW5jdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5j
cykKKyAgICAgICAgICAgIGZ1bmMudmlzaXQocmVzb2x2ZXIpOworICAgIH0KIH0KIApJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXR1cm5DaGVja2VyLmpzCShyZXZp
c2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXR1cm5DaGVj
a2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIGNsYXNzIFJldHVybkNoZWNr
ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKIAogICAgIF9pc0Jvb2xDYXN0RnJvbUxpdGVyYWxUcnVlKG5v
ZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbm9kZS5pc0Nhc3QgJiYgbm9kZS5yZXR1cm5UeXBl
IGluc3RhbmNlb2YgVHlwZVJlZiAmJiBub2RlLnJldHVyblR5cGUuZXF1YWxzKHRoaXMuX3Byb2dy
YW0uaW50cmluc2ljcy5ib29sKSAmJiBub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGggPT0gMSAmJiBu
b2RlLmFyZ3VtZW50TGlzdFswXS5saXN0Lmxlbmd0aCA9PSAxICYmIG5vZGUuYXJndW1lbnRMaXN0
WzBdLmxpc3RbMF0gaW5zdGFuY2VvZiBCb29sTGl0ZXJhbCAmJiBub2RlLmFyZ3VtZW50TGlzdFsw
XS5saXN0WzBdLnZhbHVlOworICAgICAgICByZXR1cm4gbm9kZS5pc0Nhc3QgJiYgbm9kZS5yZXR1
cm5UeXBlIGluc3RhbmNlb2YgVHlwZVJlZiAmJiBub2RlLnJldHVyblR5cGUuZXF1YWxzKHRoaXMu
X3Byb2dyYW0uaW50cmluc2ljcy5ib29sKSAmJiBub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGggPT0g
MSAmJiBub2RlLmFyZ3VtZW50TGlzdFswXSBpbnN0YW5jZW9mIEJvb2xMaXRlcmFsICYmIG5vZGUu
YXJndW1lbnRMaXN0WzBdLnZhbHVlOwogICAgIH0KIAogICAgIHZpc2l0V2hpbGVMb29wKG5vZGUp
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkocmV2aXNp
b24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNyw5IEBACiAvLyBGSVhNRTogVGhpcyBzaG91bGQg
aGF2ZSBzZW5zaWJsZSBiZWhhdmlvciB3aGVuIGl0IGVuY291bnRlcnMgZGVmaW5pdGlvbnMgdGhh
dCBpdCBjYW5ub3QgaGFuZGxlLiBSaWdodAogLy8gbm93IHdlIGFyZSBoYWNraXNobHkgcHJldmVu
dGluZyB0aGlzIGJ5IHdyYXBwaW5nIHRoaW5ncyBpbiBUeXBlUmVmLiBUaGF0J3MgcHJvYmFibHkg
d3JvbmcuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjA4
Ci1jbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKK2NsYXNzIFJld3JpdGVyIHsK
ICAgICBjb25zdHJ1Y3RvcigpCiAgICAgewotICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlz
Ll9tYXBwaW5nID0gbmV3IE1hcCgpOwogICAgIH0KICAgICAKQEAgLTk5LDcgKzk4LDcgQEAgY2xh
c3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgIGxldCByZXN1bHQgPSBu
ZXcgVmFyaWFibGVEZWNsKAogICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUubmFtZSwKICAg
ICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKSwKLSAgICAgICAgICAgIG5vZGUuaW5pdGlh
bGl6ZXIgPyBub2RlLmluaXRpYWxpemVyLnZpc2l0KHRoaXMpIDogbnVsbCk7CisgICAgICAgICAg
ICBOb2RlLnZpc2l0KG5vZGUuaW5pdGlhbGl6ZXIsIHRoaXMpKTsKICAgICAgICAgdGhpcy5fbWFw
Tm9kZShub2RlLCByZXN1bHQpOwogICAgICAgICByZXN1bHQuZVB0ciA9IG5vZGUuZVB0cjsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEzMSw3ICsxMzAsNyBAQCBjbGFzcyBSZXdyaXRlciBl
eHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdFR5cGVSZWYobm9kZSkKICAgICB7CiAgICAg
ICAgIGxldCByZXN1bHQgPSBuZXcgVHlwZVJlZihub2RlLm9yaWdpbiwgbm9kZS5uYW1lLCBub2Rl
LnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhp
cykpKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQo
dGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBl
LCB0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0xNjMsMjQg
KzE2Miw1MyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNp
dEFzc2lnbm1lbnQobm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXNzaWdu
bWVudChub2RlLm9yaWdpbiwgbm9kZS5saHMudmlzaXQodGhpcyksIG5vZGUucmhzLnZpc2l0KHRo
aXMpKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQo
dGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBl
LCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdmlzaXRS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0
ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubFZhbHVl
LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgcmVzdWx0Lm9sZFZhbHVlVmFyID0gbm9kZS5vbGRWYWx1
ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlVmFyID0gbm9kZS5uZXdW
YWx1ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlRXhwID0gbm9kZS5u
ZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdEV4cCA9IG5vZGUu
cmVzdWx0RXhwLnZpc2l0KHRoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAg
bGV0IHJlc3VsdCA9IG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUu
cHRyLnZpc2l0KHRoaXMpKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2Rl
LnR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlz
aXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAg
CisgICAgX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQsIG5vZGUpCisgICAg
eworICAgICAgICByZXN1bHQucG9zc2libGVHZXRPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlR2V0
T3ZlcmxvYWRzOworICAgICAgICByZXN1bHQucG9zc2libGVTZXRPdmVybG9hZHMgPSBub2RlLnBv
c3NpYmxlU2V0T3ZlcmxvYWRzOworICAgICAgICByZXN1bHQucG9zc2libGVBbmRPdmVybG9hZHMg
PSBub2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzOworICAgICAgICByZXN1bHQuYmFzZVR5cGUgPSBO
b2RlLnZpc2l0KG5vZGUuYmFzZVR5cGUsIHRoaXMpOworICAgICAgICByZXN1bHQuY2FsbEZvckdl
dCA9IE5vZGUudmlzaXQobm9kZS5jYWxsRm9yR2V0LCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LnJl
c3VsdFR5cGVGb3JHZXQgPSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckdldCwgdGhpcyk7
CisgICAgICAgIHJlc3VsdC5jYWxsRm9yQW5kID0gTm9kZS52aXNpdChub2RlLmNhbGxGb3JBbmQs
IHRoaXMpOworICAgICAgICByZXN1bHQucmVzdWx0VHlwZUZvckFuZCA9IE5vZGUudmlzaXQobm9k
ZS5yZXN1bHRUeXBlRm9yQW5kLCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LmNhbGxGb3JTZXQgPSBO
b2RlLnZpc2l0KG5vZGUuY2FsbEZvclNldCwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5lcnJvckZv
clNldCA9IG5vZGUuZXJyb3JGb3JTZXQ7CisgICAgICAgIHJlc3VsdC51cGRhdGVDYWxsc0FmdGVy
Q2hhbmdpbmdCYXNlKCk7CisgICAgfQorICAgIAogICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2Rl
KQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBEb3RFeHByZXNzaW9uKG5vZGUub3Jp
Z2luLCBub2RlLnN0cnVjdC52aXNpdCh0aGlzKSwgbm9kZS5maWVsZE5hbWUpOwotICAgICAgICBy
ZXN1bHQuc3RydWN0VHlwZSA9IG5vZGUuc3RydWN0VHlwZSA/IG5vZGUuc3RydWN0VHlwZS52aXNp
dCh0aGlzKSA6IG51bGw7Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmV3cml0ZSBmaWVs
ZCwgc2luY2UgdGhpcyBpcyBhIGRlZXAgcmVmZXJlbmNlIGdvaW5nIG91dCBvZiB0aGUgZnVuY3Rp
b24uCi0gICAgICAgIC8vIEFsc28sIHRoaXMgaXMgc2V0IHVwIGR1cmluZyBpbmxpbmluZywgc28g
d2UncmUgYWxyZWFkeSBmdWxseSBtb25vbW9ycGhpc2VkLgotICAgICAgICByZXN1bHQuZmllbGQg
PSBub2RlLmZpZWxkOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24ocmVzdWx0LCBub2RlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQg
PSBuZXcgSW5kZXhFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmFycmF5LnZpc2l0KHRoaXMp
LCBub2RlLmluZGV4LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uKHJlc3VsdCwgbm9kZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIApAQCAtMjE2LDcgKzI0NCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlz
aXRvckJhc2UgewogICAgIAogICAgIHZpc2l0UmV0dXJuKG5vZGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbmV3IFJldHVybihub2RlLm9yaWdpbiwgbm9kZS52YWx1ZSA/IG5vZGUudmFsdWUudmlz
aXQodGhpcykgOiBudWxsKTsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm4obm9kZS5vcmlnaW4s
IE5vZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcykpOwogICAgIH0KICAgICAKICAgICB2aXNpdENv
bnRpbnVlKG5vZGUpCkBAIC0yNDAsNyArMjY4LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBW
aXNpdG9yQmFzZSB7CiAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9kZSkKICAgICB7CiAg
ICAgICAgIGxldCByZXN1bHQgPSBuZXcgbm9kZS5jb25zdHJ1Y3Rvcihub2RlLm9yaWdpbiwgbm9k
ZS52YWx1ZSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZp
c2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUu
dHlwZSwgdGhpcyk7CiAgICAgICAgIHJlc3VsdC5wcmVmZXJyZWRUeXBlID0gbm9kZS5wcmVmZXJy
ZWRUeXBlLnZpc2l0KHRoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI2
MSw3ICsyODksNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2
aXNpdE51bGxUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE51bGxU
eXBlKG5vZGUub3JpZ2luKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2Rl
LnR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlz
aXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAg
LTI4MCw3ICszMDgsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAg
ICAgICAgcmVzdWx0LnBvc3NpYmxlT3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZU92ZXJsb2FkczsK
ICAgICAgICAgaWYgKG5vZGUuaXNDYXN0KQogICAgICAgICAgICAgcmVzdWx0LnNldENhc3REYXRh
KG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKSk7Ci0gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBl
ID0gbm9kZS5yZXN1bHRUeXBlID8gbm9kZS5yZXN1bHRUeXBlLnZpc2l0KHRoaXMpIDogbnVsbDsK
KyAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZSwg
dGhpcyk7CiAgICAgICAgIHJlc3VsdC5yZXN1bHRFUHRyID0gbm9kZS5yZXN1bHRFUHRyOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI5MCw3ICszMTgsNyBAQCBjbGFzcyBSZXdy
aXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBDYWxs
RXhwcmVzc2lvbigKICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm5hbWUsCiAgICAgICAg
ICAgICBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQu
dmlzaXQodGhpcykpLAotICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFyZ3VtZW50
ID0+IGFyZ3VtZW50LnZpc2l0KHRoaXMpKSk7CisgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlz
dC5tYXAoYXJndW1lbnQgPT4gTm9kZS52aXNpdChhcmd1bWVudCwgdGhpcykpKTsKICAgICAgICAg
cmV0dXJuIHRoaXMucHJvY2Vzc0Rlcml2ZWRDYWxsRGF0YShub2RlLCByZXN1bHQpOwogICAgIH0K
ICAgICAKQEAgLTI5OCw3ICszMjYsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JC
YXNlIHsKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRnVuY3Rpb25MaWtlQmxvY2so
CiAgICAgICAgICAgICBub2RlLm9yaWdpbiwKLSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZSA/
IG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKSA6IG51bGwsCisgICAgICAgICAgICBOb2RlLnZp
c2l0KG5vZGUucmV0dXJuVHlwZSwgdGhpcyksCiAgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlz
dC5tYXAoYXJndW1lbnQgPT4gYXJndW1lbnQudmlzaXQodGhpcykpLAogICAgICAgICAgICAgbm9k
ZS5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMpKSwKICAg
ICAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKSk7CkBAIC0zMTUsNyArMzQzLDcgQEAgY2xh
c3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAKICAgICB2aXNpdElmU3RhdGVtZW50
KG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IElmU3RhdGVtZW50KG5vZGUub3JpZ2lu
LCBub2RlLmNvbmRpdGlvbmFsLnZpc2l0KHRoaXMpLCBub2RlLmJvZHkudmlzaXQodGhpcyksIG5v
ZGUuZWxzZUJvZHkgPyBub2RlLmVsc2VCb2R5LnZpc2l0KHRoaXMpIDogdW5kZWZpbmVkKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBJZlN0YXRlbWVudChub2RlLm9yaWdpbiwgbm9kZS5jb25kaXRpb25h
bC52aXNpdCh0aGlzKSwgbm9kZS5ib2R5LnZpc2l0KHRoaXMpLCBOb2RlLnZpc2l0KG5vZGUuZWxz
ZUJvZHksIHRoaXMpKTsKICAgICB9CiAKICAgICB2aXNpdFdoaWxlTG9vcChub2RlKQpAQCAtMzMx
LDIyICszNTksMjQgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAg
dmlzaXRGb3JMb29wKG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEZvckxvb3Aobm9k
ZS5vcmlnaW4sCi0gICAgICAgICAgICBub2RlLmluaXRpYWxpemF0aW9uID8gbm9kZS5pbml0aWFs
aXphdGlvbi52aXNpdCh0aGlzKSA6IHVuZGVmaW5lZCwKLSAgICAgICAgICAgIG5vZGUuY29uZGl0
aW9uID8gbm9kZS5jb25kaXRpb24udmlzaXQodGhpcykgOiB1bmRlZmluZWQsCi0gICAgICAgICAg
ICBub2RlLmluY3JlbWVudCA/IG5vZGUuaW5jcmVtZW50LnZpc2l0KHRoaXMpIDogdW5kZWZpbmVk
LAorICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRpYWxpemF0aW9uLCB0aGlzKSwKKyAg
ICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5jb25kaXRpb24sIHRoaXMpLAorICAgICAgICAgICAg
Tm9kZS52aXNpdChub2RlLmluY3JlbWVudCwgdGhpcyksCiAgICAgICAgICAgICBub2RlLmJvZHku
dmlzaXQodGhpcykpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkK
KyAgICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewotICAgICAgICBsZXQgcmVz
dWx0ID0gbmV3IExldEV4cHJlc3Npb24obm9kZS5vcmlnaW4pOwotICAgICAgICByZXN1bHQuaW5k
ZXggPSBub2RlLmluZGV4OwotICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUu
dHlwZS52aXNpdCh0aGlzKSA6IG51bGw7Ci0gICAgICAgIHJlc3VsdC5hcmd1bWVudCA9IG5vZGUu
YXJndW1lbnQudmlzaXQodGhpcyk7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgQW5vbnltb3Vz
VmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUudHlwZS52aXNpdCh0aGlzKSk7CisgICAgICAgIHJl
c3VsdC5faW5kZXggPSBub2RlLl9pbmRleDsKICAgICAgICAgdGhpcy5fbWFwTm9kZShub2RlLCBy
ZXN1bHQpOwotICAgICAgICByZXN1bHQuYm9keSA9IG5vZGUuYm9keS52aXNpdCh0aGlzKTsKICAg
ICAgICAgcmVzdWx0LmVQdHIgPSBub2RlLmVQdHI7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQorICAgIAorICAgIHZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IElkZW50aXR5RXhwcmVzc2lvbihub2RlLnRhcmdldC52aXNpdCh0aGlz
KSk7CisgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFu
ZGFyZExpYnJhcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RhbmRhcmRMaWJyYXJ5LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTky
LDQgKzkyLDkgQEAgbmF0aXZlIHRocmVhZCBUXiBvcGVyYXRvciZbXTxUPih0aHJlYWQgVAogbmF0
aXZlIHRocmVhZGdyb3VwIFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPih0aHJlYWRncm91cCBU
W10sIHVpbnQpOwogbmF0aXZlIGRldmljZSBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4oZGV2
aWNlIFRbXSwgdWludCk7CiBuYXRpdmUgY29uc3RhbnQgVF4gb3BlcmF0b3ImW108VDpwcmltaXRp
dmU+KGNvbnN0YW50IFRbXSwgdWludCk7CisKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxU
Pih0aHJlYWQgVFtdKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOnByaW1pdGl2ZT4o
dGhyZWFkZ3JvdXAgVFtdKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOnByaW1pdGl2
ZT4oZGV2aWNlIFRbXSk7CituYXRpdmUgdWludCBvcGVyYXRvci5sZW5ndGg8VDpwcmltaXRpdmU+
KGNvbnN0YW50IFRbXSk7CiBgOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3RydWN0TGF5b3V0QnVpbGRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw1ICs1OSwxMSBAQCBjbGFzcyBTdHJ1Y3RMYXlvdXRCdWlsZGVyIGV4
dGVuZHMgVmlzaXRvCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlR5cGUgZG9lcyBub3Qg
aGF2ZSBzaXplOiAiICsgbm9kZS50eXBlKTsKICAgICAgICAgdGhpcy5fb2Zmc2V0ICs9IHNpemU7
CiAgICAgfQorICAgIAorICAgIHZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKG5vZGUpCisgICAgewor
ICAgICAgICBzdXBlci52aXNpdE5hdGl2ZUZ1bmNJbnN0YW5jZShub2RlKTsKKyAgICAgICAgbm9k
ZS5mdW5jLmRpZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YShub2RlLmltcGxlbWVu
dGF0aW9uRGF0YSk7CisgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9TdHJ1Y3RUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1N0cnVjdFR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3LDIxICs1
NywyOSBAQCBjbGFzcyBTdHJ1Y3RUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogICAgIAotICAgIGluc3RhbnRpYXRlKHR5cGVBcmd1bWVudHMsIG1vZGUp
CisgICAgaW5zdGFudGlhdGUodHlwZUFyZ3VtZW50cyA9IG51bGwpCiAgICAgewotICAgICAgICBp
ZiAodHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gdGhpcy50eXBlUGFyYW1ldGVycy5sZW5ndGgpCi0g
ICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiV3Jv
bmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIHRvIGluc3RhbnRpYXRpb24iKTsKKyAgICAgICAg
bGV0IHN1YnN0aXR1dGlvbiA9IG51bGw7CisgICAgICAgIGxldCB0eXBlUGFyYW1ldGVycyA9IHRo
aXMudHlwZVBhcmFtZXRlcnM7CiAgICAgICAgIAotICAgICAgICBpZiAoIXR5cGVBcmd1bWVudHMu
bGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIGlmICh0eXBlQXJndW1l
bnRzKSB7CisgICAgICAgICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gdGhpcy50eXBl
UGFyYW1ldGVycy5sZW5ndGgpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Io
b3JpZ2luLm9yaWdpblN0cmluZywgIldyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyB0byBp
bnN0YW50aWF0aW9uIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghdHlwZUFyZ3Vt
ZW50cy5sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IG5ldyBTdWJzdGl0dXRpb24odGhpcy50eXBlUGFy
YW1ldGVycywgdHlwZUFyZ3VtZW50cyk7CisgICAgICAgICAgICB0eXBlUGFyYW1ldGVycyA9IFtd
OworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBsZXQgc3Vic3RpdHV0aW9uID0gbmV3IFN1
YnN0aXR1dGlvbih0aGlzLnR5cGVQYXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKTsKLSAgICAgICAg
bGV0IGluc3RhbnRpYXRlSW1tZWRpYXRlcyA9IG1vZGUgPT0gInNoYWxsb3ciID8gbnVsbCA6IG5l
dyBJbnN0YW50aWF0ZUltbWVkaWF0ZXMoKTsKLSAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTdHJ1
Y3RUeXBlKHRoaXMub3JpZ2luLCB0aGlzLm5hbWUsIFtdKTsKKyAgICAgICAgbGV0IGluc3RhbnRp
YXRlSW1tZWRpYXRlcyA9IG5ldyBJbnN0YW50aWF0ZUltbWVkaWF0ZXMoKTsKKyAgICAgICAgbGV0
IHJlc3VsdCA9IG5ldyBTdHJ1Y3RUeXBlKHRoaXMub3JpZ2luLCB0aGlzLm5hbWUsIHR5cGVQYXJh
bWV0ZXJzKTsKICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWVsZHMpIHsKLSAgICAg
ICAgICAgIGxldCBuZXdGaWVsZCA9IGZpZWxkLnZpc2l0KHN1YnN0aXR1dGlvbik7Ci0gICAgICAg
ICAgICBpZiAoaW5zdGFudGlhdGVJbW1lZGlhdGVzKQotICAgICAgICAgICAgICAgIG5ld0ZpZWxk
ID0gbmV3RmllbGQudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlhdGVzKTsKKyAgICAgICAgICAgIGxl
dCBuZXdGaWVsZCA9IGZpZWxkOworICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbikKKyAgICAg
ICAgICAgICAgICBuZXdGaWVsZCA9IG5ld0ZpZWxkLnZpc2l0KHN1YnN0aXR1dGlvbik7CisgICAg
ICAgICAgICBuZXdGaWVsZCA9IG5ld0ZpZWxkLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyk7
CiAgICAgICAgICAgICByZXN1bHQuYWRkKG5ld0ZpZWxkKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Vic3Rp
dHV0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1
YnN0aXR1dGlvbi5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvU3Vic3RpdHV0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBA
IGNsYXNzIFN1YnN0aXR1dGlvbiBleHRlbmRzIFJld3JpdGVyIHsKICAgICAgICAgICAgIHRoaXMu
X21hcC5zZXQocGFyYW1ldGVyc1tpXSwgYXJndW1lbnRMaXN0W2ldKTsKICAgICB9CiAgICAgCisg
ICAgZ2V0IG1hcCgpIHsgcmV0dXJuIHRoaXMuX21hcDsgfQorICAgIAogICAgIHZpc2l0VHlwZVJl
Zihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdGhpcy5fbWFwLmdldChu
b2RlLnR5cGUpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3VmZml4Q2Fs
bEFzc2lnbm1lbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1ZmZpeENhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVu
dCkKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBTdWZmaXhDYWxsQXNzaWdubWVudCBleHRl
bmRzIEV4cHJlc3Npb24gewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzKQotICAg
IHsKLSAgICAgICAgc3VwZXIob3JpZ2luKTsKLSAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7Ci0g
ICAgICAgIHRoaXMuX2xocyA9IGxoczsKLSAgICAgICAgdGhpcy5mdW5jID0gbnVsbDsKLSAgICB9
Ci0gICAgCi0gICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9Ci0gICAgZ2V0IGxo
cygpIHsgcmV0dXJuIHRoaXMuX2xoczsgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLmxocyArICIgc3VmZml4ICIgKyB0aGlzLm5hbWU7Ci0gICAgfQot
fQotCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBzeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzKHByb2dyYW0pCit7CisgICAgZm9yIChsZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVz
LnZhbHVlcygpKSB7CisgICAgICAgIGlmICghKHR5cGUgaW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgZm9yIChsZXQgZmllbGQg
b2YgdHlwZS5maWVsZHMpIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVR5cGVQYXJhbWV0
ZXJzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZS50eXBlUGFy
YW1ldGVycy5tYXAoCisgICAgICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIgPT4gdHlwZVBh
cmFtZXRlci52aXNpdChuZXcgVHlwZVBhcmFtZXRlclJld3JpdGVyKCkpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlwZUFyZ3VtZW50
cygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVQYXJhbWV0ZXJz
Lm1hcCh0eXBlUGFyYW1ldGVyID0+IHR5cGVQYXJhbWV0ZXIudmlzaXQobmV3IEF1dG9XcmFwcGVy
KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24g
c2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgaW1wbGVtZW50YXRpb24pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbmF0aXZlRnVuYy5pbnN0YW50aWF0ZUltcGxlbWVu
dGF0aW9uID0gc3Vic3RpdHV0aW9uID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1R5
cGUgPSB0eXBlLmluc3RhbnRpYXRlKHR5cGVQYXJhbWV0ZXJzLm1hcCh0eXBlUGFyYW1ldGVyID0+
IHN1YnN0aXR1dGlvbi5tYXAuZ2V0KHR5cGVQYXJhbWV0ZXIpKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB7dHlwZTogbmV3VHlwZSwgZmllbGROYW1lOiBmaWVsZC5uYW1lfTsKKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMudmlzaXRJbXBsZW1lbnRh
dGlvbkRhdGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFZpc2l0aW5nIHRoZSB0eXBlIGZpcnN0IGVuc3VyZXMgdGhhdCB0aGUgc3Ry
dWN0IGxheW91dCBidWlsZGVyIGZpZ3VyZXMgb3V0IHRoZSBmaWVsZCdzCisgICAgICAgICAgICAg
ICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRh
LnR5cGUudmlzaXQodmlzaXRvcik7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICBuYXRpdmVGdW5jLmRpZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxl
bWVudGF0aW9uRGF0YSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGxldCBzdHJ1Y3RTaXplID0g
aW1wbGVtZW50YXRpb25EYXRhLnR5cGUuc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0
cnVjdFNpemUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiTm8gc3RydWN0IHNpemUgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAgICAgICAgICAgICAg
ICAgbGV0IGZpZWxkID0gaW1wbGVtZW50YXRpb25EYXRhLnR5cGUuZmllbGRCeU5hbWUoaW1wbGVt
ZW50YXRpb25EYXRhLmZpZWxkTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghZmllbGQp
CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5k
IGZpZWxkIik7CisgICAgICAgICAgICAgICAgICAgIGxldCBvZmZzZXQgPSBmaWVsZC5vZmZzZXQ7
CisgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZFNpemUgPSBmaWVsZC50eXBlLnNpemU7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZFNpemUgPT0gbnVsbCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gZmllbGQgc2l6ZSBmb3IgIiArIG5hdGl2ZUZ1
bmMpOworICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09IG51bGwpCisgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIG9mZnNldCBmb3IgIiArIG5hdGl2ZUZ1
bmMpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50
YXRpb25EYXRhLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50
YXRpb25EYXRhLnN0cnVjdFNpemUgPSBzdHJ1Y3RTaXplOworICAgICAgICAgICAgICAgICAgICBp
bXBsZW1lbnRhdGlvbkRhdGEuZmllbGRTaXplID0gZmllbGRTaXplOworICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgbmF0aXZlRnVuYy5pbXBsZW1lbnRhdGlvbiA9IChhcmd1bWVu
dExpc3QsIG5vZGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5hdGl2ZUZ1bmNJbnN0
YW5jZSA9IG5vZGUubmF0aXZlRnVuY0luc3RhbmNlOworICAgICAgICAgICAgICAgICAgICBsZXQg
aW1wbGVtZW50YXRpb25EYXRhID0gbmF0aXZlRnVuY0luc3RhbmNlLmltcGxlbWVudGF0aW9uRGF0
YTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uKAorICAgICAgICAg
ICAgICAgICAgICAgICAgYXJndW1lbnRMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW1w
bGVtZW50YXRpb25EYXRhLm9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVu
dGF0aW9uRGF0YS5zdHJ1Y3RTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50
YXRpb25EYXRhLmZpZWxkU2l6ZSk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlRmllbGRUeXBlKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQudHlwZS52aXNpdChuZXcg
U3Vic3RpdHV0aW9uKHR5cGUudHlwZVBhcmFtZXRlcnMsIHR5cGVQYXJhbWV0ZXJzKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVR5cGVS
ZWYoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBUeXBlUmVmLmluc3Rh
bnRpYXRlKHR5cGUsIGNyZWF0ZVR5cGVBcmd1bWVudHMoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGxldCBpc0Nhc3QgPSBmYWxzZTsKKyAgICAgICAgICAgIGxl
dCB0eXBlUGFyYW1ldGVyczsKKyAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jOworCisgICAgICAg
ICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAorICAgICAgICAgICAgdHlwZVBhcmFt
ZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOworICAgICAgICAgICAgbmF0aXZlRnVuYyA9
IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9y
LiIgKyBmaWVsZC5uYW1lLCBjcmVhdGVGaWVsZFR5cGUoKSwgdHlwZVBhcmFtZXRlcnMsCisgICAg
ICAgICAgICAgICAgW25ldyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgY3JlYXRl
VHlwZVJlZigpKV0sIGlzQ2FzdCk7CisgICAgICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0
YShuYXRpdmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4g
eworICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1ZmZlcihmaWVs
ZFNpemUpLCAwKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuY29weUZyb20oYmFzZS5wbHVzKG9m
ZnNldCksIGZpZWxkU2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQorICAgICAg
ICAgICAgdHlwZVBhcmFtZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOworICAgICAgICAg
ICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgICAgIGZpZWxkLm9y
aWdpbiwgIm9wZXJhdG9yLiIgKyBmaWVsZC5uYW1lICsgIj0iLCBjcmVhdGVUeXBlUmVmKCksIHR5
cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgbmV3
IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVUeXBlUmVmKCkpLAorICAg
ICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNy
ZWF0ZUZpZWxkVHlwZSgpKQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgaXND
YXN0KTsKKyAgICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChb
YmFzZSwgdmFsdWVdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4geworICAgICAg
ICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1ZmZlcihzdHJ1Y3RTaXplKSwg
MCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UsIHN0cnVjdFNpemUpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdC5wbHVzKG9mZnNldCkuY29weUZyb20odmFsdWUsIGZpZWxk
U2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisgICAgICAgICAgICBmdW5jdGlv
biBzZXR1cEFuZGVyKGFkZHJlc3NTcGFjZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB0eXBlUGFyYW1ldGVycyA9IGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCk7CisgICAgICAgICAgICAg
ICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgICAgICAgICBmaWVs
ZC5vcmlnaW4sICJvcGVyYXRvciYuIiArIGZpZWxkLm5hbWUsIG5ldyBQdHJUeXBlKGZpZWxkLm9y
aWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVGaWVsZFR5cGUoKSksCisgICAgICAgICAgICAgICAg
ICAgIHR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAg
ICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZC5vcmlnaW4sIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFB0
clR5cGUoZmllbGQub3JpZ2luLCBhZGRyZXNzU3BhY2UsIGNyZWF0ZVR5cGVSZWYoKSkpCisgICAg
ICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgIGlzQ2FzdCk7CisgICAgICAg
ICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlXSwgb2Zm
c2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgYmFz
ZSA9IGJhc2UubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghYmFzZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3JpZ2luLm9y
aWdpblN0cmluZywgIk51bGwgZGVyZWZlcmVuY2UiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEVQdHIuYm94KGJhc2UucGx1cyhvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgc2V0dXBBbmRlcigidGhyZWFkIik7CisgICAgICAgICAg
ICBpZiAodHlwZS5pbnN0YW50aWF0ZSgpLmlzUHJpbWl0aXZlKSB7CisgICAgICAgICAgICAgICAg
c2V0dXBBbmRlcigidGhyZWFkZ3JvdXAiKTsKKyAgICAgICAgICAgICAgICBzZXR1cEFuZGVyKCJk
ZXZpY2UiKTsKKyAgICAgICAgICAgICAgICBzZXR1cEFuZGVyKCJjb25zdGFudCIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVGVzdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Rlc3QuaHRtbAkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02LDEzICs2LDE0IEBACiA8
c2NyaXB0IHNyYz0iUmVmZXJlbmNlVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmFs
dWUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkV4cHJlc3Npb24uanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9IlZpc2l0b3JCYXNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXdy
aXRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmlzaXRvci5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iQ3JlYXRlTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ3Jl
YXRlTGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiAKIDxzY3JpcHQgc3JjPSJBZGRyZXNzU3BhY2UuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkFub255bW91c1ZhcmlhYmxlLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJBcnJheVJlZlR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFy
cmF5VHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQXNzaWdubWVudC5qcyI+PC9zY3Jp
cHQ+CkBAIC0yMCw3ICsyMSw2IEBACiA8c2NyaXB0IHNyYz0iQmxvY2suanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IkJvb2xMaXRlcmFsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJCcmVh
ay5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iQ2FsbEFzc2lnbm1lbnQuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IkNhbGxFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJDYWxsRnVuY3Rpb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNoZWNrLmpzIj48L3Nj
cmlwdD4KQEAgLTUzLDcgKzUzLDkgQEAKIDxzY3JpcHQgc3JjPSJGdW5jSW5zdGFudGlhdG9yLmpz
Ij48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGdW5jUGFyYW1ldGVyLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJGdW5jdGlvbkxpa2VCbG9jay5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
SWRlbnRpdHlFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJZlN0YXRlbWVu
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iSW5kZXhFeHByZXNzaW9uLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJJbmZlclR5cGVzRm9yQ2FsbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iSW5saW5lLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJbmxpbmVyLmpzIj48L3Nj
cmlwdD4KQEAgLTc1LDIwICs3NywyNCBAQAogPHNjcmlwdCBzcmM9Ik5hdGl2ZUZ1bmNJbnN0YW5j
ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZS5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iTmF0aXZlVHlwZUluc3RhbmNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJO
dWxsTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTnVsbFR5cGUuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9Ik92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IlBhcnNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcmVwYXJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJQcm9wZXJ0eVJlc29sdmVyLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJQcm9ncmFtLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm90
b2NvbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvdG9jb2xEZWNsLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJQcm90b2NvbEZ1bmNEZWNsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJQcm90b2NvbFJlZi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHRyVHlwZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVjdXJzaW9uQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iUmVzb2x2ZU5hbWVzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXNvbHZl
T3ZlcmxvYWRJbXBsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJSZXNvbHZlUHJvcGVydGll
cy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVzb2x2ZVR5cGVEZWZzLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJSZXR1cm4uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJldHVy
bkNoZWNrZXIuanMiPjwvc2NyaXB0PgpAQCAtOTcsMTIgKzEwMywxNCBAQAogPHNjcmlwdCBzcmM9
IlN0cnVjdExheW91dEJ1aWxkZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlN0cnVjdFR5
cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlN1YnN0aXR1dGlvbi5qcyI+PC9zY3JpcHQ+
Ci08c2NyaXB0IHNyYz0iU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9IlN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IlR5cGVEZWYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5cGVEZWZSZXNvbHZlci5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZU9yVmFyaWFibGVSZWYuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9IlR5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iVHlwZVJlZi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZVZhcmlhYmxl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJUeXBlVmFyaWFibGVUcmFja2VyLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlZFZhbHVlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJVaW50TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVWludExpdGVyYWxUeXBl
LmpzIj48L3NjcmlwdD4KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3Qu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwko
cmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5q
cwkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBmdW5jdGlvbiBjaGVja051bWJlcihw
cm9ncmFtLCByZXN1bHQsIGV4CiAgICAgaWYgKCFyZXN1bHQudHlwZS5pc051bWJlcikKICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQgdHlwZTsgcmVzdWx0OiAiICsgcmVzdWx0
KTsKICAgICBpZiAocmVzdWx0LnZhbHVlICE9IGV4cGVjdGVkKQotICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIldyb25nIHJlc3VsdDogIiArIHJlc3VsdCArICIgKGV4cGVjdGVkICIgKyBleHBlY3Rl
ZCArICIpIik7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0OiAiICsgcmVz
dWx0LnZhbHVlICsgIiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIikiKTsKIH0KIAogZnVuY3Rp
b24gbWFrZVVpbnQocHJvZ3JhbSwgdmFsdWUpCkBAIC03NDMsNyArNzQzLDcgQEAgZnVuY3Rpb24g
VEVTVF9zdG9yZU51bGxBcnJheVJlZigpCiAgICAgICAgICgpID0+IGRvUHJlcChgCiAgICAgICAg
ICAgICB2b2lkIGZvbygpIHsgbnVsbFswdV0gPSA0MjsgfQogICAgICAgICBgKSwKLSAgICAgICAg
KGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJEaWQg
bm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwiKSAhPSAtMSk7CisgICAgICAgIChlKSA9PiBlIGlu
c3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiTEhTIG9mIGFzc2lnbm1l
bnQgaXMgbm90IGFuIExWYWx1ZSIpICE9IC0xKTsKIH0KIAogZnVuY3Rpb24gVEVTVF9yZXR1cm5O
dWxsQXJyYXlSZWYoKQpAQCAtMjU2Niw2ICsyNTY2LDE2OSBAQCBmdW5jdGlvbiBURVNUX21ha2VB
cnJheVJlZkZyb21BcnJheVJlZigpCiAgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVF
cnJvcik7CiB9CiAKK2Z1bmN0aW9uIFRFU1Rfc2ltcGxlTGVuZ3RoKCkKK3sKKyAgICBsZXQgcHJv
Z3JhbSA9IGRvUHJlcChgCisgICAgICAgIHVpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZG91YmxlWzc1NF0gYXJyYXk7CisgICAgICAgICAgICByZXR1cm4gKEBhcnJheSkubGVuZ3Ro
OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNzU0KTsKK30KKworZnVuY3Rpb24gVEVTVF9hc3Np
Z25MZW5ndGgoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAg
ICAgICAgICAgIHZvaWQgZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb3Vi
bGVbNzU0XSBhcnJheTsKKyAgICAgICAgICAgICAgICAoQGFycmF5KS5sZW5ndGggPSA0MjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5
cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiTEhTIG9mIGFzc2lnbm1lbnQgaXMgbm90IGFu
IExWYWx1ZSIpICE9IC0xKTsKK30KKworZnVuY3Rpb24gVEVTVF9hc3NpZ25MZW5ndGhIZWxwZXIo
KQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAg
IHZvaWQgYmFyKHRocmVhZCBkb3VibGVbXSBhcnJheSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBhcnJheS5sZW5ndGggPSA0MjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZv
aWQgZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb3VibGVbNzU0XSBhcnJh
eTsKKyAgICAgICAgICAgICAgICBiYXIoQGFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
YCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3NhZ2Uu
aW5kZXhPZigiQ2Fubm90IGVtaXQgc2V0IGJlY2F1c2U6IERpZCBub3QgZmluZCBhbnkgZnVuY3Rp
b25zIG5hbWVkIG9wZXJhdG9yLmxlbmd0aD0iKSAhPSAtMSk7Cit9CisKK2Z1bmN0aW9uIFRFU1Rf
c2ltcGxlR2V0dGVyKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0
cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9w
ZXJhdG9yLnkoRm9vIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby54Owor
ICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28g
Zm9vOworICAgICAgICAgICAgZm9vLnggPSA3ODA0OworICAgICAgICAgICAgcmV0dXJuIGZvby55
OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW10pLCA3ODA0KTsKK30KKworZnVuY3Rpb24gVEVTVF9zaW1w
bGVTZXR0ZXIoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0
IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAgICBpbnQgb3BlcmF0
b3IueShGb28gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vLng7CisgICAg
ICAgIH0KKyAgICAgICAgRm9vIG9wZXJhdG9yLnk9KEZvbyBmb28sIGludCB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9vLnggPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBmb287
CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZv
byBmb287CisgICAgICAgICAgICBmb28ueSA9IDc4MDQ7CisgICAgICAgICAgICByZXR1cm4gZm9v
Lng7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDc4MDQpOworfQorCitmdW5jdGlvbiBURVNUX2dl
bmVyaWNBY2Nlc3NvcnMoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAg
c3RydWN0IEZvbzxUPiB7CisgICAgICAgICAgICBUIHg7CisgICAgICAgICAgICBUWzNdIHk7Cisg
ICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJhcjxUPiB7CisgICAgICAgICAgICBUIHg7CisgICAg
ICAgICAgICBUIHk7CisgICAgICAgIH0KKyAgICAgICAgQmFyPFQ+IG9wZXJhdG9yLno8VD4oRm9v
PFQ+IGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgQmFyPFQ+IHJlc3VsdDsKKyAgICAgICAg
ICAgIHJlc3VsdC54ID0gZm9vLng7CisgICAgICAgICAgICByZXN1bHQueSA9IGZvby55WzFdOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBGb288VD4gb3Bl
cmF0b3Iuej08VD4oRm9vPFQ+IGZvbywgQmFyPFQ+IGJhcikKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9vLnggPSBiYXIueDsKKyAgICAgICAgICAgIGZvby55WzFdID0gYmFyLnk7CisgICAgICAg
ICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgICAgIGludCBvcGVyYXRvci5zdW0oRm9v
PGludD4gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vLnggKyBmb28ueVsw
XSArIGZvby55WzFdICsgZm9vLnlbMl07CisgICAgICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9y
LnN1bShCYXI8aW50PiBiYXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXIueCAr
IGJhci55OworICAgICAgICB9CisgICAgICAgIG9wZXJhdG9yPFQ+IEJhcjxUPihUIHgsIFQgeSkK
KyAgICAgICAgeworICAgICAgICAgICAgQmFyPFQ+IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3Vs
dC54ID0geDsKKyAgICAgICAgICAgIHJlc3VsdC55ID0geTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RTdXBlckJhc2ljKCkKKyAgICAgICAg
eworICAgICAgICAgICAgRm9vPGludD4gZm9vOworICAgICAgICAgICAgZm9vLnggPSAxOworICAg
ICAgICAgICAgZm9vLnlbMF0gPSAyOworICAgICAgICAgICAgZm9vLnlbMV0gPSAzOworICAgICAg
ICAgICAgZm9vLnlbMl0gPSA0OworICAgICAgICAgICAgcmV0dXJuIGZvby5zdW07CisgICAgICAg
IH0KKyAgICAgICAgaW50IHRlc3RaU2V0dGVyRGlkU2V0WSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIGZvby56ID0gQmFyPGludD4oNTMsIDkzMik7
CisgICAgICAgICAgICByZXR1cm4gZm9vLnlbMV07CisgICAgICAgIH0KKyAgICAgICAgaW50IHRl
c3RaU2V0dGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vPGludD4gZm9vOworICAgICAg
ICAgICAgZm9vLnogPSBCYXI8aW50Pig1MywgOTMyKTsKKyAgICAgICAgICAgIHJldHVybiBmb28u
c3VtOworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0WkdldHRlcigpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIGZvby54ID0gMTsKKyAgICAgICAg
ICAgIGZvby55WzBdID0gMjsKKyAgICAgICAgICAgIGZvby55WzFdID0gMzsKKyAgICAgICAgICAg
IGZvby55WzJdID0gNDsKKyAgICAgICAgICAgIHJldHVybiBmb28uei5zdW07CisgICAgICAgIH0K
KyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRl
c3RTdXBlckJhc2ljIiwgW10sIFtdKSwgMSArIDIgKyAzICsgNCk7CisgICAgY2hlY2tJbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0WlNldHRlckRpZFNldFkiLCBbXSwgW10p
LCA5MzIpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVz
dFpTZXR0ZXIiLCBbXSwgW10pLCA1MyArIDkzMik7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0WkdldHRlciIsIFtdLCBbXSksIDEgKyAzKTsKK30KKwog
bGV0IGZpbHRlciA9IC8uKi87IC8vIHJ1biBldmVyeXRoaW5nIGJ5IGRlZmF1bHQKIGlmICh0aGlz
WyJhcmd1bWVudHMiXSkgewogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0
aDsgaSsrKSB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHJldmlz
aW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAgY2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewog
ICAgIGdldCBraW5kKCkgeyByZXR1cm4gVHlwZTsgfQogICAgIGdldCBpc1B0cigpIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgZ2V0IGlzQXJyYXlSZWYoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGdl
dCBpc1JlZigpIHsgcmV0dXJuIHRoaXMuaXNQdHIgfHwgdGhpcy5pc0FycmF5UmVmOyB9CiAgICAg
Z2V0IGlzTnVtYmVyKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNJbnQoKSB7IHJldHVy
biBmYWxzZTsgfQogICAgIGdldCBpc0Zsb2F0KCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTQxLDUg
KzQyLDE5IEBAIGNsYXNzIFR5cGUgZXh0ZW5kcyBOb2RlIHsKICAgICB9CiAgICAgCiAgICAgZ2V0
IGluc3RhbnRpYXRlZFR5cGUoKSB7IHJldHVybiB0aGlzLnZpc2l0KG5ldyBJbnN0YW50aWF0ZUlt
bWVkaWF0ZXMoKSk7IH0KKyAgICAKKyAgICAvLyBIYXZlIHRvIGNhbGwgdGhlc2Ugb24gdGhlIHVu
aWZ5Tm9kZS4KKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IE1ha2VQdHJFeHByZXNzaW9uKG9yaWdpbiwgdmFsdWUpOwor
ICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChvcmlnaW4pCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IFB0clR5cGUob3JpZ2luLCAidGhyZWFkIiwgdGhpcyk7CisgICAgfQor
ICAgIHJldHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQob3JpZ2luKQorICAgIHsKKyAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIkJ5LXBvaW50ZXIgb3Zlcmxv
YWQgcmV0dXJuZWQgbm9uLXBvaW50ZXIgdHlwZTogIiArIHRoaXMpOworICAgIH0KIH0KIApJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJhbWV0
ZXJSZXdyaXRlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UeXBlUGFyYW1ldGVyUmV3cml0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBz
dHJpY3QiOworCitjbGFzcyBUeXBlUGFyYW1ldGVyUmV3cml0ZXIgeworICAgIHZpc2l0Q29uc3Rl
eHByVHlwZVBhcmFtZXRlcihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDb25zdGV4
cHJUeXBlUGFyYW1ldGVyKG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUudHlwZS52aXNpdChu
ZXcgUmV3cml0ZXIoKSkpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFR5cGVWYXJpYWJsZShub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUeXBlVmFyaWFibGUobm9kZS5vcmlnaW4sIG5v
ZGUubmFtZSwgbm9kZS5wcm90b2NvbCk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVWYXJpYWJsZVRyYWNrZXIuanMJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlVHJh
Y2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFR5cGVW
YXJpYWJsZVRyYWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAg
eworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9zZXQgPSBuZXcgU2V0KCk7CisgICAg
fQorICAgIAorICAgIGdldCBzZXQoKSB7IHJldHVybiB0aGlzLl9zZXQ7IH0KKyAgICAKKyAgICBf
Y29uc2lkZXIodGhpbmcpCisgICAgeworICAgICAgICBpZiAodGhpbmcuaXNVbmlmaWFibGUpCisg
ICAgICAgICAgICB0aGlzLl9zZXQuYWRkKHRoaW5nKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRU
eXBlUmVmKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9jb25zaWRlcihub2RlLnR5cGUpOwor
ICAgIH0KKyAgICAKKyAgICB2aXNpdFZhcmlhYmxlUmVmKG5vZGUpCisgICAgeworICAgICAgICB0
aGlzLl9jb25zaWRlcih0aGlzLnZhcmlhYmxlKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhbHVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1ZhbHVlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYWx1ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjgsNSAr
MjgsMTQgQEAgY2xhc3MgVmFsdWUgZXh0ZW5kcyBOb2RlIHsKICAgICBnZXQga2luZCgpIHsgcmV0
dXJuIFZhbHVlOyB9CiAgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIGJlY29tZShvdGhl
clZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gTk9URTogTWFrZSBzdXJlIHRoYXQgSWRlbnRpdHlF
eHByZXNzaW9uIGltcGxlbWVudHMgdW5pZnlOb2RlIGFuZCBhbGwgdGhhdAorICAgICAgICBsZXQg
b3JpZ2luID0gdGhpcy5vcmlnaW47CisgICAgICAgIHRoaXMuX19wcm90b19fID0gSWRlbnRpdHlF
eHByZXNzaW9uLnByb3RvdHlwZTsKKyAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOworICAg
ICAgICB0aGlzLl90YXJnZXQgPSBvdGhlclZhbHVlOworICAgIH0KIH0KIApJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwxMCArNDEsOSBAQCBjbGFzcyBWYXJpYWJsZVJlZiBleHRlbmRzIEV4
cHJlc3Npb24gewogICAgIAogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQog
ICAgIGdldCBpc0NvbnN0ZXhwcigpIHsgcmV0dXJuIHRoaXMudmFyaWFibGUuaXNDb25zdGV4cHI7
IH0KLSAgICBnZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZS51bmlmeU5vZGU7
IH0KKyAgICBnZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZS51bmlmeU5vZGU7
IH0gLy8gVGhpcyBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gdGhpcyBpcyBhIGNvbnN0ZXhwci4KICAg
ICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgZ2V0IGFkZHJlc3NTcGFjZSgp
IHsgcmV0dXJuICJ0aHJlYWQiOyB9Ci0gICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMu
dmFyaWFibGU7IH0KICAgICAKICAgICB0b1N0cmluZygpCiAgICAgewpJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCwxMiArMjQsNyBAQAogICovCiAidXNlIHN0cmljdCI7CiAKLWNsYXNzIFZpc2l0b3IgZXh0ZW5k
cyBWaXNpdG9yQmFzZSB7Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAgc3VwZXIo
KTsKLSAgICB9Ci0gICAgCitjbGFzcyBWaXNpdG9yIHsKICAgICB2aXNpdFByb2dyYW0obm9kZSkK
ICAgICB7CiAgICAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBub2RlLnRvcExldmVsU3RhdGVt
ZW50cykKQEAgLTcwLDYgKzY1LDcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNl
IHsKICAgICB7CiAgICAgICAgIG5vZGUuZnVuYy52aXNpdCh0aGlzKTsKICAgICAgICAgdGhpcy52
aXNpdEZ1bmMobm9kZSk7CisgICAgICAgIG5vZGUuZnVuYy52aXNpdEltcGxlbWVudGF0aW9uRGF0
YShub2RlLmltcGxlbWVudGF0aW9uRGF0YSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0
QmxvY2sobm9kZSkKQEAgLTEwMCw4ICs5Niw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNp
dG9yQmFzZSB7CiAgICAgewogICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50
eXBlQXJndW1lbnRzKQogICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpOwotICAg
ICAgICBpZiAobm9kZS50eXBlKQotICAgICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOwor
ICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZp
c2l0TmF0aXZlVHlwZShub2RlKQpAQCAtMTM0LDggKzEyOSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0
ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRUeXBlVmFyaWFibGUobm9kZSkKICAg
ICB7Ci0gICAgICAgIGlmIChub2RlLnByb3RvY29sKQotICAgICAgICAgICAgbm9kZS5wcm90b2Nv
bC52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnByb3RvY29sLCB0aGlzKTsK
ICAgICB9CiAgICAgCiAgICAgdmlzaXRDb25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUpCkBAIC0x
NzcsMTQgKzE3MSwyMyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAg
IHZpc2l0VmFyaWFibGVEZWNsKG5vZGUpCiAgICAgewogICAgICAgICBub2RlLnR5cGUudmlzaXQo
dGhpcyk7Ci0gICAgICAgIGlmIChub2RlLmluaXRpYWxpemVyKQotICAgICAgICAgICAgbm9kZS5p
bml0aWFsaXplci52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRpYWxp
emVyLCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRBc3NpZ25tZW50KG5vZGUpCiAgICAg
ewogICAgICAgICBub2RlLmxocy52aXNpdCh0aGlzKTsKICAgICAgICAgbm9kZS5yaHMudmlzaXQo
dGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAg
ICBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5vbGRWYWx1ZVZhci52aXNp
dCh0aGlzKTsKKyAgICAgICAgbm9kZS5uZXdWYWx1ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAg
bm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5yZXN1bHRFeHAudmlz
aXQodGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5v
ZGUpCkBAIC0xOTIsMTEgKzE5NSwyNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJh
c2UgewogICAgICAgICBub2RlLnB0ci52aXNpdCh0aGlzKTsKICAgICB9CiAgICAgCisgICAgX2hh
bmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgTm9kZS52
aXNpdChub2RlLmJhc2VUeXBlLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmNhbGxG
b3JHZXQsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckdldCwg
dGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5jYWxsRm9yQW5kLCB0aGlzKTsKKyAgICAg
ICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JBbmQsIHRoaXMpOworICAgICAgICBOb2Rl
LnZpc2l0KG5vZGUuY2FsbEZvclNldCwgdGhpcyk7CisgICAgfQorICAgIAogICAgIHZpc2l0RG90
RXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyk7
Ci0gICAgICAgIGlmIChub2RlLnN0cnVjdFR5cGUpCi0gICAgICAgICAgICBub2RlLnN0cnVjdFR5
cGUudmlzaXQodGhpcyk7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbihub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkK
KyAgICB7CisgICAgICAgIG5vZGUuYXJyYXkudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUuaW5k
ZXgudmlzaXQodGhpcyk7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbihub2RlKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2Rl
KQpAQCAtMjA3LDggKzIyNiw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7
CiAgICAgdmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBu
b2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUubnVtRWxlbWVudHMpCi0g
ICAgICAgICAgICBub2RlLm51bUVsZW1lbnRzLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZp
c2l0KG5vZGUubnVtRWxlbWVudHMsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdENvbnZl
cnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihub2RlKQpAQCAtMjI0LDggKzI0Miw3IEBAIGNsYXNz
IFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgewogICAgICAgICBub2RlLmNvbmRp
dGlvbmFsLnZpc2l0KHRoaXMpOwogICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7Ci0gICAg
ICAgIGlmIChub2RlLmVsc2VCb2R5KQotICAgICAgICAgICAgbm9kZS5lbHNlQm9keS52aXNpdCh0
aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmVsc2VCb2R5LCB0aGlzKTsKICAgICB9CiAg
ICAgCiAgICAgdmlzaXRXaGlsZUxvb3Aobm9kZSkKQEAgLTI0MiwxOSArMjU5LDE1IEBAIGNsYXNz
IFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRGb3JMb29wKG5v
ZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5pbml0aWFsaXphdGlvbikKLSAgICAgICAgICAg
IG5vZGUuaW5pdGlhbGl6YXRpb24udmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLmNvbmRp
dGlvbikKLSAgICAgICAgICAgIG5vZGUuY29uZGl0aW9uLnZpc2l0KHRoaXMpOwotICAgICAgICBp
ZiAobm9kZS5pbmNyZW1lbnQpCi0gICAgICAgICAgICBub2RlLmluY3JlbWVudC52aXNpdCh0aGlz
KTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRpYWxpemF0aW9uLCB0aGlzKTsKKyAgICAg
ICAgTm9kZS52aXNpdChub2RlLmNvbmRpdGlvbiwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQo
bm9kZS5pbmNyZW1lbnQsIHRoaXMpOwogICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAg
ICAgfQogCiAgICAgdmlzaXRSZXR1cm4obm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLnZh
bHVlKQotICAgICAgICAgICAgbm9kZS52YWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52
aXNpdChub2RlLnZhbHVlLCB0aGlzKTsKICAgICB9CiAKICAgICB2aXNpdENvbnRpbnVlKG5vZGUp
CkBAIC0yNzIsOCArMjg1LDcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
ICAgICAKICAgICB2aXNpdEdlbmVyaWNMaXRlcmFsVHlwZShub2RlKQogICAgIHsKLSAgICAgICAg
aWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKKyAgICAg
ICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgICAgICBub2RlLnByZWZlcnJlZFR5
cGUudmlzaXQodGhpcyk7CiAgICAgfQogICAgIApAQCAtMjg4LDggKzMwMCw3IEBAIGNsYXNzIFZp
c2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXROdWxsVHlwZShub2Rl
KQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUudHlwZS52
aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgIH0K
ICAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCkBAIC0yOTcsMTYgKzMwOCwxNSBA
QCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICBmb3IgKGxldCB0
eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBlQXJndW1lbnRzKQogICAgICAgICAgICAgdHlwZUFyZ3Vt
ZW50LnZpc2l0KHRoaXMpOwogICAgICAgICBmb3IgKGxldCBhcmd1bWVudCBvZiBub2RlLmFyZ3Vt
ZW50TGlzdCkKLSAgICAgICAgICAgIGFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAgICAgICAgICAg
Tm9kZS52aXNpdChhcmd1bWVudCwgdGhpcyk7CiAgICAgICAgIGxldCBhY3R1YWxUeXBlQXJndW1l
bnRzID0gbm9kZS5hY3R1YWxUeXBlQXJndW1lbnRzOwogICAgICAgICBpZiAoYWN0dWFsVHlwZUFy
Z3VtZW50cykgewogICAgICAgICAgICAgZm9yIChsZXQgYXJndW1lbnQgb2YgYWN0dWFsVHlwZUFy
Z3VtZW50cykKICAgICAgICAgICAgICAgICBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAg
fQotICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQotICAgICAgICAgICAgbm9kZS5yZXR1cm5U
eXBlLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5yZXN1bHRUeXBlKQotICAgICAgICAg
ICAgbm9kZS5yZXN1bHRUeXBlLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUu
bmF0aXZlRnVuY0luc3RhbmNlLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJldHVy
blR5cGUsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZSwgdGhpcyk7
CiAgICAgfQogICAgIAogICAgIHZpc2l0TG9naWNhbE5vdChub2RlKQpAQCAtMzE2LDIxICszMjYs
MjMgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2aXNp
dEZ1bmN0aW9uTGlrZUJsb2NrKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5yZXR1cm5U
eXBlKQotICAgICAgICAgICAgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpOworICAgICAgICBO
b2RlLnZpc2l0KG5vZGUucmV0dXJuVHlwZSwgdGhpcyk7CiAgICAgICAgIGZvciAobGV0IGFyZ3Vt
ZW50IG9mIG5vZGUuYXJndW1lbnRMaXN0KQogICAgICAgICAgICAgYXJndW1lbnQudmlzaXQodGhp
cyk7CiAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlciBvZiBub2RlLnBhcmFtZXRlcnMpCiAgICAg
ICAgICAgICBwYXJhbWV0ZXIudmlzaXQodGhpcyk7CiAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0
aGlzKTsKLSAgICAgICAgaWYgKG5vZGUucmVzdWx0VHlwZSkKLSAgICAgICAgICAgIG5vZGUucmVz
dWx0VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGUs
IHRoaXMpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkKKyAgICB2
aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewotICAgICAgICBub2RlLmFyZ3VtZW50
LnZpc2l0KHRoaXMpOwotICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJZGVudGl0
eUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMp
OwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRv
ckJhc2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlz
aXRvckJhc2UuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Zpc2l0b3JCYXNlLmpzCShub25leGlzdGVudCkKQEAgLTEsMzIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwot
Ci1jbGFzcyBWaXNpdG9yQmFzZSB7Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAg
dGhpcy5fbWVtb1RhYmxlID0gbmV3IE1hcCgpOwotICAgIH0KLX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321025</attachid>
            <date>2017-09-16 21:58:43 -0700</date>
            <delta_ts>2017-09-17 12:00:17 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>147011</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjEzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5NiBAQAorMjAxNy0wOS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEZpZ3VyZSBvdXQgaG93IFdTTCB3aWxsIHN1cHBvcnQgZmllbGQgb3ZlcmxvYWRz
IGxpa2UgZmxvYXQ0Lnh6IGFuZCBmcmllbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdTTCBuZWVkcyB0byBzdXBwb3J0IGdldHRlcnMg
YW5kIHNldHRlcnMsIHNvIHRoYXQgd2UgY2FuIGRvIHRoaW5ncyBsaWtlOgorICAgICAgICAKKyAg
ICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAgICB2ZWMuenggPSBmbG9hdDIoMSwgMik7
CisgICAgICAgICAgICAvLyB6ID0gMSwgeCA9IDIKKyAgICAgICAgCisgICAgICAgIFRoZXJlJ3Mg
bm8gd2F5IHRvIGV4cHJlc3MgdGhpcyBmbG9hdDQuenggcmV0dXJuaW5nIGEgcG9pbnRlciB0byBz
b21ldGhpbmcsIHNpbmNlIGl0J3MgZG9pbmcgc3dpenpsaW5nLgorICAgICAgICBJdCBjb3VsZCBy
ZXR1cm4gYSBjcmF6eSBzbWFydCBwb2ludGVyLCBidXQgdGhhdCBzb3VuZHMgbGlrZSBhIGxvdCBv
ZiB3b3JrLiBTbywgSSBkZWNpZGVkIHRvIGdvIGZvcgorICAgICAgICBsdmFsdWUgZW11bGF0aW9u
IGluc3RlYWQuCisgICAgICAgIAorICAgICAgICBUaGUgaWRlYSBvZiBsdmFsdWUgZW11bGF0aW9u
IGlzIHRoYXQgd2hlbiB3ZSB0cnkgdG8gbWFrZSBhbiBsdmFsdWUgd29yayBmb3IgYW4gYXNzaWdu
bWVudCBvciBSTVcKKyAgICAgICAgb3BlcmF0aW9uIChsaWtlICs9IGFuZCBmcmllbmRzKSwgd2Ug
Y29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgd2UgaGF2ZSB0byBmaXJzdCBsb2FkIHRoZSB2
YWx1ZSB1c2luZworICAgICAgICBhIGdldHRlciBhbmQgdGhlbiBzdG9yZSBpdCB3aXRoIGEgc2V0
dGVyLiBUaGlzIHBhdGNoIG1ha2VzIHRoaXMgd29yayByZWN1cnNpdmVseSwgc28gdGhhdCB0aGlz
IHdpbGwKKyAgICAgICAgd29yazoKKyAgICAgICAgCisgICAgICAgICAgICBmbG9hdDQgdmVjOwor
ICAgICAgICAgICAgdmVjLnp3eC55ID0gNDI7CisgICAgICAgICAgICAvLyBub3cgdyBpcyA0Mgor
ICAgICAgICAKKyAgICAgICAgVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRlY29tcG9zZSBpdCBhdXRv
bWF0aWNhbGx5OgorICAgICAgICAKKyAgICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAg
ICBmbG9hdDMgdG1wID0gdmVjLnp3eDsKKyAgICAgICAgICAgIHRtcC55ID0gNDI7CisgICAgICAg
ICAgICB2ZWMuend4ID0gdG1wOworICAgICAgICAKKyAgICAgICAgVGhpcydsbCB3b3JrIHRvIGFu
eSBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIFRvIGNoZWNrIGlmIHRoaXMgd29ya3MsIHRoaXMg
cGF0Y2ggYWRkcyBhIHN1YnN0YW50aWFsIG5ldyB0ZXN0IGNhbGxlZCBURVNUX2dlbmVyaWNBY2Nl
c3NvcnMoKS4gVGhpcworICAgICAgICB0ZXN0cyB0aGF0IHRoaXMgc3R1ZmYgd29ya3Mgd2l0aCBh
IGxvdCBvZiBnZW5lcmljIHR5cGVzLiBUaGlzIHBhdGNoIGFsc28gYWRkcyBzbWFsbGVyIHVuaXQg
dGVzdHMgYWxzby4KKyAgICAgICAgCisgICAgICAgIE9oLCBhbmQgaXQncyBub3cgcG9zc2libGUg
dG8gZ2V0IGFuIGFycmF5J3MgbGVuZ3RoLgorCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQWRkcmVzc1NwYWNlLmpzOgorICAgICAgICAobmVlZHNQcmltaXRpdmVQcm90b2NvbCk6
CisgICAgICAgIChwcm90b2NvbFN1ZmZpeCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91
c1ZhcmlhYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlKToKKyAgICAg
ICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5nZXQgb3JpZ2luKToKKyAgICAgICAgKEFu
b255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5nZXQgbmFtZSk6CisgICAgICAgIChBbm9ueW1vdXNW
YXJpYWJsZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0FycmF5UmVmVHlwZS5qczoKKyAgICAgICAgKEFycmF5UmVmVHlwZS5wcm90b3R5cGUu
YXJndW1lbnRGb3JBbmRPdmVybG9hZCk6CisgICAgICAgIChBcnJheVJlZlR5cGUucHJvdG90eXBl
LmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9BcnJheVR5cGUuanM6CisgICAgICAgIChBcnJheVR5cGUucHJvdG90eXBlLmFyZ3Vt
ZW50Rm9yQW5kT3ZlcmxvYWQpOgorICAgICAgICAoQXJyYXlUeXBlLnByb3RvdHlwZS5hcmd1bWVu
dFR5cGVGb3JBbmRPdmVybG9hZCk6CisgICAgICAgIChBcnJheVR5cGUpOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQuanM6CisgICAgICAgIChBc3NpZ25tZW50
KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsQXNzaWdubWVudC5qczog
UmVtb3ZlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lv
bi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9uLnJlc29sdmUpOgorICAgICAgICAoQ2FsbEV4
cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmUpOgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJv
dG90eXBlLnJlc29sdmVUb092ZXJsb2FkKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DaGVja2VyLmpzOgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm9ncmFt
KToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAgICAgIChD
aGVja2VyLnByb3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmMpOgorICAgICAgICAoQ2hlY2tlci5wcm90
b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlz
aXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZp
c2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRN
YWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLl9maW5p
c2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZp
c2l0RG90RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdEluZGV4
RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdENhbGxFeHByZXNz
aW9uKToKKyAgICAgICAgKENoZWNrZXIpOgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlz
aXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxlLnByb3RvdHlwZS52aXNpdFR5cGVSZWYp
OiBEZWxldGVkLgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wu
Tm90aWNlVHlwZVZhcmlhYmxlLnByb3RvdHlwZS52aXNpdFZhcmlhYmxlUmVmKTogRGVsZXRlZC4K
KyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xEZWNsLk5vdGljZVR5cGVW
YXJpYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdFByb3Rv
Y29sRGVjbC5zZXQgdGhyb3cpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Eb3RFeHByZXNzaW9uLmpzOgorICAgICAgICAoRG90RXhwcmVzc2lvbik6CisgICAgICAg
IChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc3RydWN0KToKKyAgICAgICAgKERvdEV4cHJl
c3Npb24ucHJvdG90eXBlLmdldCBnZXRGdW5jTmFtZSk6CisgICAgICAgIChEb3RFeHByZXNzaW9u
LnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAgICAgICAoRG90RXhwcmVzc2lvbi5wcm90
b3R5cGUuZ2V0IHNldEZ1bmNOYW1lKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9FQnVmZmVyLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJC
dWlsZGVyLmpzOgorICAgICAgICAoRUJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLnZpc2l0QW5vbnlt
b3VzVmFyaWFibGUpOgorICAgICAgICAoRUJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLnZpc2l0TGV0
RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RXZhbHVhdG9yLmpzOgorICAgICAgICAoRXZhbHVhdG9yLnByb3RvdHlwZS52aXNpdElkZW50aXR5
RXhwcmVzc2lvbik6CisgICAgICAgIChFdmFsdWF0b3IucHJvdG90eXBlLnZpc2l0TWFrZVB0ckV4
cHJlc3Npb24pOgorICAgICAgICAoRXZhbHVhdG9yLnByb3RvdHlwZS52aXNpdEFub255bW91c1Zh
cmlhYmxlKToKKyAgICAgICAgKEV2YWx1YXRvci5wcm90b3R5cGUudmlzaXREb3RFeHByZXNzaW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKEV2YWx1YXRvci5wcm90b3R5cGUudmlzaXRMZXRFeHByZXNz
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNz
aW9uRmluZGVyLmpzOgorICAgICAgICAoRXhwcmVzc2lvbkZpbmRlci5wcm90b3R5cGUudmlzaXRS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAgICAgKEV4cHJlc3Npb25GaW5kZXIucHJv
dG90eXBlLnZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9Gb3JMb29wLmpzOgorICAgICAgICAoRm9yTG9vcC5wcm90b3R5cGUudG9TdHJp
bmcpOgorICAgICAgICAoRm9yTG9vcCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanM6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnBy
b3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1YnN0aXR1dGlvbi5wcm90b3R5cGUudmlz
aXRDYWxsRXhwcmVzc2lvbik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5n
ZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1YnN0aXR1dGlvbik6CisgICAgICAgIChGdW5jSW5zdGFu
dGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGUucHJvdG90eXBlLnZpc2l0RnVu
Y0RlZik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5z
dGFudGlhdGUucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVuYyk6CisgICAgICAgIChGdW5jSW5zdGFu
dGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGUpOgorICAgICAgICAoRnVuY0lu
c3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlKToKKyAgICAgICAgKEZ1bmNJbnN0YW50aWF0
b3IpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lkZW50aXR5RXhwcmVzc2lv
bi5qczogQWRkZWQuCisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAoSWRl
bnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgdGFyZ2V0KToKKyAgICAgICAgKElkZW50aXR5
RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9kZSk6CisgICAgICAgIChJZGVudGl0eUV4
cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0NvbnN0ZXhwcik6CisgICAgICAgIChJZGVudGl0eUV4
cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1ZSk6CisgICAgICAgIChJZGVudGl0eUV4cHJl
c3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2UpOgorICAgICAgICAoSWRlbnRpdHlFeHBy
ZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKEluZGV4RXhwcmVzc2lv
bik6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhcnJheSk6CisgICAg
ICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpbmRleCk6CisgICAgICAgIChJbmRl
eEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1ZSk6CisgICAgICAgIChJbmRleEV4cHJl
c3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2UpOgorICAgICAgICAoSW5kZXhFeHByZXNz
aW9uLnByb3RvdHlwZS5nZXQgZ2V0RnVuY05hbWUpOgorICAgICAgICAoSW5kZXhFeHByZXNzaW9u
LnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnBy
b3RvdHlwZS5nZXQgc2V0RnVuY05hbWUpOgorICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3Rv
dHlwZS50b1N0cmluZyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJU
eXBlc0ZvckNhbGwuanM6CisgICAgICAgIChpbmZlclR5cGVzRm9yQ2FsbCk6CisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzOgorICAgICAgICAoX2lubGluZUZ1bmN0
aW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmVyLmpzOgorICAg
ICAgICAoSW5saW5lci5wcm90b3R5cGUudmlzaXRDYWxsRXhwcmVzc2lvbik6CisgICAgICAgIChJ
bmxpbmVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanM6CisgICAgICAgIChJbnRyaW5z
aWNzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpz
OiBSZW1vdmVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VBcnJheVJl
ZkV4cHJlc3Npb24uanM6CisgICAgICAgIChNYWtlQXJyYXlSZWZFeHByZXNzaW9uLnByb3RvdHlw
ZS5iZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24pOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzOgorICAgICAgICAoTmFt
ZUNvbnRleHQpOgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmFkZCk6CisgICAgICAg
IChOYW1lQ29udGV4dC5wcm90b3R5cGUuZG9TdGF0ZW1lbnQpOgorICAgICAgICAoTmFtZUNvbnRl
eHQucHJvdG90eXBlLmhhbmRsZURlZmluaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKE5hbWVDb250
ZXh0LnByb3RvdHlwZS5pc0RlZmluZWQpOiBEZWxldGVkLgorICAgICAgICAoTmFtZUNvbnRleHQu
cHJvdG90eXBlLmRlZmluZSk6IERlbGV0ZWQuCisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5
cGUuZGVmaW5lQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9OYW1lUmVzb2x2ZXIuanM6CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90eXBlLmRvU3Rh
dGVtZW50KToKKyAgICAgICAgKE5hbWVSZXNvbHZlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERl
Y2wpOgorICAgICAgICAoTmFtZVJlc29sdmVyLnByb3RvdHlwZS52aXNpdFByb2dyYW0pOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMuanM6Cisg
ICAgICAgIChOYXRpdmVGdW5jKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9O
YXRpdmVGdW5jSW5zdGFuY2UuanM6CisgICAgICAgIChOYXRpdmVGdW5jSW5zdGFuY2UpOgorICAg
ICAgICAoTmF0aXZlRnVuY0luc3RhbmNlLnByb3RvdHlwZS5nZXQgaW1wbGVtZW50YXRpb25EYXRh
KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzOgorICAgICAgICAo
Tm9kZS5wcm90b3R5cGUudmlzaXQpOgorICAgICAgICAoTm9kZS52aXNpdCk6CisgICAgICAgIChO
b2RlLnVuaWZ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9O
b3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKE5vcm1hbFVzZVBy
b3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0RG90RXhwcmVzc2lvbik6CisgICAgICAgIChO
b3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLnByb3RvdHlwZS52aXNpdEluZGV4RXhwcmVzc2lvbik6
CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyKToKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAgICAgKGZpbmlzaFBhcnNpbmdQb3N0SW5j
cmVtZW50KToKKyAgICAgICAgKHBhcnNlUG9zc2libGVTdWZmaXgpOgorICAgICAgICAoZmluaXNo
UGFyc2luZ1ByZUluY3JlbWVudCk6CisgICAgICAgIChnZW5lcmljUGFyc2VDb21tYUV4cHJlc3Np
b24pOgorICAgICAgICAocGFyc2VGdW5jTmFtZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUHJlcGFyZS5qczoKKyAgICAgICAgKHByZXBhcmUpOgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanM6CisgICAgICAgIChQcm9ncmFtKToKKyAgICAg
ICAgKFByb2dyYW0ucHJvdG90eXBlLmdldCBnbG9iYWxOYW1lQ29udGV4dCk6CisgICAgICAgIChQ
cm9ncmFtLnByb3RvdHlwZS5hZGQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qczogQWRkZWQuCisgICAgICAgIChQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnByb3Rv
dHlwZS5nZXQgcmVzdWx0VHlwZSk6CisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
cHJvdG90eXBlLnJld3JpdGVBZnRlckNsb25pbmcpOgorICAgICAgICAoUHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLnByb3RvdHlwZS51cGRhdGVDYWxsc0FmdGVyQ2hhbmdpbmdCYXNlKToKKyAgICAg
ICAgKFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wcm90b3R5cGUuZW1pdEdldCk6CisgICAgICAg
IChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90eXBlLmVtaXRTZXQpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5UmVzb2x2ZXIuanM6IEFkZGVkLgorICAg
ICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUuX3Zpc2l0UHJvcGVydHlBY2Nlc3MpOgor
ICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUudmlzaXREb3RFeHByZXNzaW9uKToK
KyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9u
KToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLl9oYW5kbGVSZWFkTW9kaWZ5
V3JpdGUpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUudmlzaXRSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJvdG90eXBl
LnZpc2l0QXNzaWdubWVudCk6CisgICAgICAgIChQcm9wZXJ0eVJlc29sdmVyLnZpc2l0TWFrZVB0
ckV4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUudmlzaXRN
YWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanM6CisgICAgICAgIChQdHJU
eXBlLnByb3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFB0clR5cGUu
cHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFB0clR5cGUu
cHJvdG90eXBlLnJldHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQpOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanM6IEFkZGVkLgorICAg
ICAgICAoUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbik6CisgICAgICAgIChSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgbFZhbHVlKToKKyAgICAgICAgKFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm9sZFZhbHVlUmVmKToKKyAgICAgICAgKFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm5ld1ZhbHVlUmVmKToKKyAgICAgICAgKFJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMuanM6CisgICAgICAgIChjcmVhdGVOYW1l
UmVzb2x2ZXIpOgorICAgICAgICAocmVzb2x2ZU5hbWVzSW5UeXBlcyk6CisgICAgICAgIChyZXNv
bHZlTmFtZXNJblByb3RvY29scyk6CisgICAgICAgIChyZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6
CisgICAgICAgIChyZXNvbHZlTmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanM6CisgICAgICAgIChyZXNvbHZlT3Zl
cmxvYWRJbXBsKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJv
cGVydGllcy5qczogQWRkZWQuCisgICAgICAgIChyZXNvbHZlUHJvcGVydGllcyk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVR5cGVEZWZzLmpzOgorICAgICAgICAo
cmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnNJblByb3Rv
Y29scyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnNJbkZ1bmN0aW9ucyk6CisgICAgICAgIChy
ZXNvbHZlVHlwZURlZnMpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1JldHVybkNoZWNrZXIuanM6CisgICAgICAgIChSZXR1cm5DaGVja2VyLnByb3RvdHlwZS5f
aXNCb29sQ2FzdEZyb21MaXRlcmFsVHJ1ZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUmV3cml0ZXIuanM6CisgICAgICAgIChSZXdyaXRlcik6CisgICAgICAgIChSZXdyaXRl
ci5wcm90b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90
eXBlLnZpc2l0VHlwZVJlZik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRBc3Np
Z25tZW50KToKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdFJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0RGVyZWZlcmVu
Y2VFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS5faGFuZGxlUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdERv
dEV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0SW5kZXhFeHBy
ZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdFJldHVybik6CisgICAg
ICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUpOgorICAgICAg
ICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0TnVsbFR5cGUpOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnByb2Nlc3NEZXJpdmVkQ2FsbERhdGEpOgorICAgICAgICAoUmV3cml0ZXIucHJv
dG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBl
LnZpc2l0RnVuY3Rpb25MaWtlQmxvY2spOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZp
c2l0SWZTdGF0ZW1lbnQpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0Rm9yTG9v
cCk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRBbm9ueW1vdXNWYXJpYWJsZSk6
CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRJZGVudGl0eUV4cHJlc3Npb24pOgor
ICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQu
CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzOgor
ICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIuanM6
CisgICAgICAgIChTdHJ1Y3RMYXlvdXRCdWlsZGVyLnByb3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmNJ
bnN0YW5jZSk6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRCdWlsZGVyKToKKyAgICAgICAgKiBXZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpzOgorICAgICAgICAoU3RydWN0VHlwZS5w
cm90b3R5cGUuaW5zdGFudGlhdGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N1YnN0aXR1dGlvbi5qczoKKyAgICAgICAgKFN1YnN0aXR1dGlvbi5wcm90b3R5cGUuZ2V0IG1h
cCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1l
bnQuanM6IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhl
c2l6ZVN0cnVjdEFjY2Vzc29ycy5qczogQWRkZWQuCisgICAgICAgIChzeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzLmNyZWF0ZVR5cGVQYXJhbWV0ZXJzKToKKyAgICAgICAgKHN5bnRoZXNpemVTdHJ1
Y3RBY2Nlc3NvcnMuKToKKyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuY3JlYXRl
RmllbGRUeXBlKToKKyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlVHlw
ZVJlZik6CisgICAgICAgIChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLnNldHVwQW5kZXIpOgor
ICAgICAgICAoc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycyk6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Rlc3QuanM6CisgICAgICAgIChjaGVja051bWJlcik6CisgICAgICAgIChURVNUX3NpbXBs
ZVByb3RvY29sKToKKyAgICAgICAgKFRFU1RfYXNzaWduTGVuZ3RoKToKKyAgICAgICAgKFRFU1Rf
c2ltcGxlU2V0dGVyKToKKyAgICAgICAgKFRFU1RfZ2VuZXJpY0FjY2Vzc29ycyk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qczoKKyAgICAgICAgKFR5cGUucHJvdG90
eXBlLmdldCBpc1JlZik6CisgICAgICAgIChUeXBlLnByb3RvdHlwZS5hcmd1bWVudEZvckFuZE92
ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLnJldHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQp
OgorICAgICAgICAoVHlwZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlw
ZVBhcmFtZXRlclJld3JpdGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdy
aXRlci5wcm90b3R5cGUudmlzaXRDb25zdGV4cHJUeXBlUGFyYW1ldGVyKToKKyAgICAgICAgKFR5
cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlzaXRUeXBlVmFyaWFibGUpOgorICAgICAg
ICAoVHlwZVBhcmFtZXRlclJld3JpdGVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzOiBBZGRlZC4KKyAgICAgICAgKFR5cGVWYXJpYWJs
ZVRyYWNrZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhbHVlLmpzOgor
ICAgICAgICAoVmFsdWUucHJvdG90eXBlLmJlY29tZSk6CisgICAgICAgIChWYWx1ZSk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanM6CisgICAgICAgIChW
YXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9kZSk6CisgICAgICAgIChWYXJpYWJsZVJl
Zi5wcm90b3R5cGUuZ2V0IGFkZHJlc3NTcGFjZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZpc2l0b3IucHJvdG90eXBlLnZpc2l0TmF0
aXZlRnVuY0luc3RhbmNlKToKKyAgICAgICAgKFZpc2l0b3IucHJvdG90eXBlLnZpc2l0UHJvdG9j
b2xEZWNsKToKKyAgICAgICAgKFZpc2l0b3IpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzOiBSZW1vdmVkLgorCiAyMDE3LTA5LTE2ICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUg
VG9vbHMgYnVpbGQgd2l0aCBDTWFrZSBvbiBtYWNPUwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSwxNiBAQCBmdW5jdGlvbiBpc0FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2Up
CiAgICAgfQogfQogCitmdW5jdGlvbiBuZWVkc1ByaW1pdGl2ZVByb3RvY29sKGFkZHJlc3NTcGFj
ZSkKK3sKKyAgICByZXR1cm4gYWRkcmVzc1NwYWNlICE9ICJ0aHJlYWQiOworfQorCitmdW5jdGlv
biBwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpCit7CisgICAgcmV0dXJuIG5lZWRzUHJpbWl0
aXZlUHJvdG9jb2woYWRkcmVzc1NwYWNlKSA/ICI6cHJpbWl0aXZlIiA6ICIiOworfQorCiBmdW5j
dGlvbiB2YWxpZGF0ZUFkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCiB7CiAgICAgaWYgKCFpc0Fk
ZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0FsbC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTQgQEAgbG9hZCgiVHlwZS5q
cyIpOwogbG9hZCgiUmVmZXJlbmNlVHlwZS5qcyIpOwogbG9hZCgiVmFsdWUuanMiKTsKIGxvYWQo
IkV4cHJlc3Npb24uanMiKTsKLWxvYWQoIlZpc2l0b3JCYXNlLmpzIik7CiBsb2FkKCJSZXdyaXRl
ci5qcyIpOwogbG9hZCgiVmlzaXRvci5qcyIpOwogbG9hZCgiQ3JlYXRlTGl0ZXJhbC5qcyIpOwog
bG9hZCgiQ3JlYXRlTGl0ZXJhbFR5cGUuanMiKTsKK2xvYWQoIlByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5qcyIpOwogCiBsb2FkKCJBZGRyZXNzU3BhY2UuanMiKTsKK2xvYWQoIkFub255bW91c1Zh
cmlhYmxlLmpzIik7CiBsb2FkKCJBcnJheVJlZlR5cGUuanMiKTsKIGxvYWQoIkFycmF5VHlwZS5q
cyIpOwogbG9hZCgiQXNzaWdubWVudC5qcyIpOwpAQCAtNDMsNyArNDQsNiBAQCBsb2FkKCJBdXRv
V3JhcHBlci5qcyIpOwogbG9hZCgiQmxvY2suanMiKTsKIGxvYWQoIkJvb2xMaXRlcmFsLmpzIik7
CiBsb2FkKCJCcmVhay5qcyIpOwotbG9hZCgiQ2FsbEFzc2lnbm1lbnQuanMiKTsKIGxvYWQoIkNh
bGxFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJDYWxsRnVuY3Rpb24uanMiKTsKIGxvYWQoIkNoZWNr
LmpzIik7CkBAIC03Niw3ICs3Niw5IEBAIGxvYWQoIkZ1bmNEZWYuanMiKTsKIGxvYWQoIkZ1bmNJ
bnN0YW50aWF0b3IuanMiKTsKIGxvYWQoIkZ1bmNQYXJhbWV0ZXIuanMiKTsKIGxvYWQoIkZ1bmN0
aW9uTGlrZUJsb2NrLmpzIik7Citsb2FkKCJJZGVudGl0eUV4cHJlc3Npb24uanMiKTsKIGxvYWQo
IklmU3RhdGVtZW50LmpzIik7Citsb2FkKCJJbmRleEV4cHJlc3Npb24uanMiKTsKIGxvYWQoIklu
ZmVyVHlwZXNGb3JDYWxsLmpzIik7CiBsb2FkKCJJbmxpbmUuanMiKTsKIGxvYWQoIklubGluZXIu
anMiKTsKQEAgLTg0LDcgKzg2LDYgQEAgbG9hZCgiSW5zdGFudGlhdGVJbW1lZGlhdGVzLmpzIik7
CiBsb2FkKCJJbnRMaXRlcmFsLmpzIik7CiBsb2FkKCJJbnRMaXRlcmFsVHlwZS5qcyIpOwogbG9h
ZCgiSW50cmluc2ljcy5qcyIpOwotbG9hZCgiTGV0RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiTGV4
ZXIuanMiKTsKIGxvYWQoIkxleGVyVG9rZW4uanMiKTsKIGxvYWQoIkxpdGVyYWxUeXBlQ2hlY2tl
ci5qcyIpOwpAQCAtOTgsMjAgKzk5LDI0IEBAIGxvYWQoIk5hdGl2ZUZ1bmMuanMiKTsKIGxvYWQo
Ik5hdGl2ZUZ1bmNJbnN0YW5jZS5qcyIpOwogbG9hZCgiTmF0aXZlVHlwZS5qcyIpOwogbG9hZCgi
TmF0aXZlVHlwZUluc3RhbmNlLmpzIik7Citsb2FkKCJOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVy
LmpzIik7CiBsb2FkKCJOdWxsTGl0ZXJhbC5qcyIpOwogbG9hZCgiTnVsbFR5cGUuanMiKTsKIGxv
YWQoIk92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiKTsKIGxvYWQoIlBhcnNlLmpzIik7CiBs
b2FkKCJQcmVwYXJlLmpzIik7CiBsb2FkKCJQcm9ncmFtLmpzIik7Citsb2FkKCJQcm9wZXJ0eVJl
c29sdmVyLmpzIik7CiBsb2FkKCJQcm90b2NvbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xEZWNsLmpz
Iik7CiBsb2FkKCJQcm90b2NvbEZ1bmNEZWNsLmpzIik7CiBsb2FkKCJQcm90b2NvbFJlZi5qcyIp
OwogbG9hZCgiUHRyVHlwZS5qcyIpOworbG9hZCgiUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5q
cyIpOwogbG9hZCgiUmVjdXJzaW9uQ2hlY2tlci5qcyIpOwogbG9hZCgiUmVzb2x2ZU5hbWVzLmpz
Iik7CiBsb2FkKCJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIik7Citsb2FkKCJSZXNvbHZlUHJvcGVy
dGllcy5qcyIpOwogbG9hZCgiUmVzb2x2ZVR5cGVEZWZzLmpzIik7CiBsb2FkKCJSZXR1cm4uanMi
KTsKIGxvYWQoIlJldHVybkNoZWNrZXIuanMiKTsKQEAgLTEyMCwxMiArMTI1LDE0IEBAIGxvYWQo
IlN0YW5kYXJkTGlicmFyeS5qcyIpOwogbG9hZCgiU3RydWN0TGF5b3V0QnVpbGRlci5qcyIpOwog
bG9hZCgiU3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vic3RpdHV0aW9uLmpzIik7Ci1sb2FkKCJT
dWZmaXhDYWxsQXNzaWdubWVudC5qcyIpOworbG9hZCgiU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29y
cy5qcyIpOwogbG9hZCgiVHlwZURlZi5qcyIpOwogbG9hZCgiVHlwZURlZlJlc29sdmVyLmpzIik7
CiBsb2FkKCJUeXBlT3JWYXJpYWJsZVJlZi5qcyIpOworbG9hZCgiVHlwZVBhcmFtZXRlclJld3Jp
dGVyLmpzIik7CiBsb2FkKCJUeXBlUmVmLmpzIik7CiBsb2FkKCJUeXBlVmFyaWFibGUuanMiKTsK
K2xvYWQoIlR5cGVWYXJpYWJsZVRyYWNrZXIuanMiKTsKIGxvYWQoIlR5cGVkVmFsdWUuanMiKTsK
IGxvYWQoIlVpbnRMaXRlcmFsLmpzIik7CiBsb2FkKCJVaW50TGl0ZXJhbFR5cGUuanMiKTsKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1Zhcmlh
YmxlLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fu
b255bW91c1ZhcmlhYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
bGV0IGFub255bW91c1ZhcmlhYmxlQ291bnQgPSAwOworCitjbGFzcyBBbm9ueW1vdXNWYXJpYWJs
ZSBleHRlbmRzIFZhbHVlIHsKKyAgICAvLyBZb3UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSB2YXJp
YWJsZSdzIHZhbHVlIGJlZm9yZSB1c2UsIGJ1dCB0aGF0IGNvdWxkIGJlIHF1aXRlIGxhdGUuCisg
ICAgY29uc3RydWN0b3Iob3JpZ2luLCB0eXBlID0gbnVsbCkKKyAgICB7CisgICAgICAgIHN1cGVy
KCk7CisgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5pbmRleCA9
IGFub255bW91c1ZhcmlhYmxlQ291bnQrKzsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAg
ICB9CisgICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAg
IGdldCBuYW1lKCkgeyByZXR1cm4gImFub25WYXI8IiArIHRoaXMuaW5kZXggKyAiPiI7IH0KKyAg
ICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5uYW1lOworICAg
IH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVm
VHlwZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQXJyYXlSZWZUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxNSBAQCBjbGFz
cyBBcnJheVJlZlR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlCiAgICAgCiAgICAgZ2V0IGlzQXJy
YXlSZWYoKSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2FkKG9y
aWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICAgIGFy
Z3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
LmVsZW1lbnRUeXBlICsgIltdICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtNzMsNSArNzMsMTYgQEAgY2xhc3MgQXJyYXlUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNv
bnRleHQsIG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CisKKyAgICBhcmd1bWVudEZvckFuZE92
ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE1h
a2VBcnJheVJlZkV4cHJlc3Npb24ob3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5udW1F
bGVtZW50cyA9IHRoaXMubnVtRWxlbWVudHM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAg
IHJldHVybiBuZXcgQXJyYXlSZWZUeXBlKG9yaWdpbiwgInRocmVhZCIsIHRoaXMuZWxlbWVudFR5
cGUpOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNz
aWdubWVudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9B
c3NpZ25tZW50LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9Bc3NpZ25tZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTIgQEAK
ICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewot
ICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMpCisgICAgY29uc3RydWN0b3Iob3JpZ2lu
LCBsaHMsIHJocywgdHlwZSA9IG51bGwpCiAgICAgewogICAgICAgICBzdXBlcihvcmlnaW4pOwog
ICAgICAgICB0aGlzLl9saHMgPSBsaHM7CiAgICAgICAgIHRoaXMuX3JocyA9IHJoczsKKyAgICAg
ICAgdGhpcy50eXBlID0gdHlwZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGxocygpIHsgcmV0dXJu
IHRoaXMuX2xoczsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFz
c2lnbm1lbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
Q2FsbEFzc2lnbm1lbnQuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVudCkKQEAgLTEsNDYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBz
dHJpY3QiOwotCi1jbGFzcyBDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAg
IGNvbnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzLCByaHMpCi0gICAgewotICAgICAgICBzdXBl
cihvcmlnaW4pOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fbGhz
ID0gbGhzOwotICAgICAgICB0aGlzLl9yaHMgPSByaHM7Ci0gICAgICAgIHRoaXMuZnVuYyA9IG51
bGw7Ci0gICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQot
ICAgIGdldCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KLSAgICBnZXQgcmhzKCkgeyByZXR1
cm4gdGhpcy5fcmhzOyB9IC8vIFRoaXMgY2FuIGJlIG51bGwuCi0gICAgCi0gICAgdG9TdHJpbmco
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGhzICsgIiAiICsgdGhpcy5uYW1lICsgKHRo
aXMucmhzID8gIj0gIiArIHRoaXMucmhzIDogIiIpOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMJKHJldmlzaW9u
IDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9u
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsODIgQEAgY2xhc3MgQ2FsbEV4cHJlc3Np
b24gZXh0ZW5kcyBFeHByZXNzaW9uIAogICAgIGdldCBpc0Nhc3QoKSB7IHJldHVybiB0aGlzLl9p
c0Nhc3Q7IH0KICAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3JldHVyblR5cGU7
IH0KICAgICAKLSAgICByZXNvbHZlKG92ZXJsb2FkKQorICAgIHN0YXRpYyByZXNvbHZlKG9yaWdp
biwgcG9zc2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSwgbmFtZSwgdHlwZUFy
Z3VtZW50cywgYXJndW1lbnRMaXN0LCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQorICAgIHsK
KyAgICAgICAgbGV0IGNhbGwgPSBuZXcgQ2FsbEV4cHJlc3Npb24ob3JpZ2luLCBuYW1lLCB0eXBl
QXJndW1lbnRzLCBhcmd1bWVudExpc3QpOworICAgICAgICBjYWxsLmFyZ3VtZW50VHlwZXMgPSBh
cmd1bWVudFR5cGVzOworICAgICAgICBpZiAocmV0dXJuVHlwZSkKKyAgICAgICAgICAgIGNhbGwu
c2V0Q2FzdERhdGEocmV0dXJuVHlwZSk7CisgICAgICAgIHJldHVybiB7Y2FsbCwgcmVzdWx0VHlw
ZTogY2FsbC5yZXNvbHZlKHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1ldGVyc0luU2NvcGUs
IHR5cGVBcmd1bWVudHMpfTsKKyAgICB9CisgICAgCisgICAgcmVzb2x2ZShwb3NzaWJsZU92ZXJs
b2FkcywgdHlwZVBhcmFtZXRlcnNJblNjb3BlLCB0eXBlQXJndW1lbnRzKQorICAgIHsKKyAgICAg
ICAgaWYgKCFwb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVy
cm9yKHRoaXMub3JpZ2luLm9yaWdpblN0cmluZywgIkRpZCBub3QgZmluZCBhbnkgZnVuY3Rpb25z
IG5hbWVkICIgKyB0aGlzLm5hbWUpOworICAgICAgICAKKyAgICAgICAgbGV0IG92ZXJsb2FkID0g
bnVsbDsKKyAgICAgICAgbGV0IGZhaWx1cmVzID0gW107CisgICAgICAgIGZvciAobGV0IHR5cGVQ
YXJhbWV0ZXIgb2YgdHlwZVBhcmFtZXRlcnNJblNjb3BlKSB7CisgICAgICAgICAgICBpZiAoISh0
eXBlUGFyYW1ldGVyIGluc3RhbmNlb2YgVHlwZVZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5wcm90b2NvbCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxldCBzaWduYXR1cmVzID0KKyAgICAg
ICAgICAgICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnByb3RvY29sRGVjbC5zaWduYXR1cmVz
QnlOYW1lV2l0aFR5cGVWYXJpYWJsZSh0aGlzLm5hbWUsIHR5cGVQYXJhbWV0ZXIpOworICAgICAg
ICAgICAgaWYgKCFzaWduYXR1cmVzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMsIHRoaXMudHlw
ZUFyZ3VtZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlzLnJldHVyblR5cGUpOworICAgICAg
ICAgICAgaWYgKG92ZXJsb2FkLmZ1bmMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBmYWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKKyAgICAgICAgICAgIG92
ZXJsb2FkID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW92ZXJsb2FkKSB7CisgICAg
ICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCisgICAgICAgICAgICAgICAg
cG9zc2libGVPdmVybG9hZHMsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5hcmd1bWVudFR5cGVz
LCB0aGlzLnJldHVyblR5cGUpOworICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7Cisg
ICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7CisgICAg
ICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxs
IHdpdGggIjsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlQXJndW1lbnRzLmxlbmd0aCkK
KyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyB0aGlz
LnR5cGVBcmd1bWVudHMgKyAiPiBhbmQgIjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJh
cmd1bWVudCB0eXBlcyAoIiArIHRoaXMuYXJndW1lbnRUeXBlcyArICIpIjsKKyAgICAgICAgICAg
ICAgICBpZiAodGhpcy5yZXR1cm5UeXBlKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9
IiBhbmQgcmV0dXJuIHR5cGUgIiArIHRoaXMucmV0dXJuVHlwZTsKKyAgICAgICAgICAgICAgICBp
ZiAoZmFpbHVyZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIsIGJ1
dCBjb25zaWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKKyAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1lc3NhZ2UpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlw
ZUFyZ3VtZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5
cGUgPSB0eXBlQXJndW1lbnRzW2ldOworICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBv
dmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOworICAgICAgICAgICAgaWYgKCEodHlwZVBh
cmFtZXRlciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxz
V2l0aENvbW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBl
IGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0
eXBlQXJndW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7
CisgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyZ3VtZW50VHlw
ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBhcmd1bWVudFR5cGUgPSB0aGlzLmFy
Z3VtZW50VHlwZXNbaV07CisgICAgICAgICAgICBsZXQgcGFyYW1ldGVyVHlwZSA9IG92ZXJsb2Fk
LmZ1bmMucGFyYW1ldGVyc1tpXS50eXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAorICAgICAg
ICAgICAgICAgIG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0
aW9uQ29udGV4dCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRUeXBlLmVxdWFs
c1dpdGhDb21taXQocGFyYW1ldGVyVHlwZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5T
dHJpbmcgKyAiIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsIGFmdGVyIHR5
cGUgYXJndW1lbnQgc3Vic3RpdHV0aW9uOiBhcmd1bWVudCA9ICIgKyBhcmd1bWVudFR5cGUgKyAi
LCBwYXJhbWV0ZXIgPSAiICsgcGFyYW1ldGVyVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMucmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQpOworICAgIH0KKyAgICAKKyAgICBy
ZXNvbHZlVG9PdmVybG9hZChvdmVybG9hZCkKICAgICB7CiAgICAgICAgIHRoaXMuZnVuYyA9IG92
ZXJsb2FkLmZ1bmM7CiAgICAgICAgIHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA9IG92ZXJsb2Fk
LnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQgaW5zdGFuY2Vv
ZiBUeXBlID8gdHlwZUFyZ3VtZW50LnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKSA6IHR5cGVBcmd1
bWVudCk7CiAgICAgICAgIGxldCByZXN1bHQgPSBvdmVybG9hZC5mdW5jLnJldHVyblR5cGUuc3Vi
c3RpdHV0ZVRvVW5pZmljYXRpb24oCiAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJh
bWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwotICAgICAgICB0aGlzLnJlc3Vs
dFR5cGUgPSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOwogICAgICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCByZXR1cm4gdHlwZSIpOwor
ICAgICAgICByZXN1bHQgPSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOworICAgICAg
ICB0aGlzLnJlc3VsdFR5cGUgPSByZXN1bHQ7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCShy
ZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2Vy
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwzOSArMzQsNDYgQEAgY2xhc3MgQ2hlY2tlciBleHRl
bmRzIFZpc2l0b3IgewogICAgIAogICAgIHZpc2l0UHJvZ3JhbShub2RlKQogICAgIHsKLSAgICAg
ICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKSB7CisgICAg
ICAgIGxldCBkb1N0YXRlbWVudCA9IHN0YXRlbWVudCA9PiB7CiAgICAgICAgICAgICB0aGlzLl9j
dXJyZW50U3RhdGVtZW50ID0gc3RhdGVtZW50OwogICAgICAgICAgICAgc3RhdGVtZW50LnZpc2l0
KHRoaXMpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGxldCB0eXBlIG9mIG5v
ZGUudHlwZXMudmFsdWVzKCkpCisgICAgICAgICAgICBkb1N0YXRlbWVudCh0eXBlKTsKKyAgICAg
ICAgZm9yIChsZXQgcHJvdG9jb2wgb2Ygbm9kZS5wcm90b2NvbHMudmFsdWVzKCkpCisgICAgICAg
ICAgICBkb1N0YXRlbWVudChwcm90b2NvbCk7CisgICAgICAgIGZvciAobGV0IGZ1bmNzIG9mIG5v
ZGUuZnVuY3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1
bmNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy52aXNpdEZ1bmMoZnVuYyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgZnVuY3Mgb2Ygbm9kZS5mdW5jdGlvbnMu
dmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAgICAg
ICAgICAgICAgZG9TdGF0ZW1lbnQoZnVuYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAor
ICAgIHZpc2l0RnVuY0RlZihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRo
aXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdE5hdGl2ZUZ1bmMobm9kZSkKKyAgICB7CiAgICAg
fQogICAgIAogICAgIHZpc2l0UHJvdG9jb2xEZWNsKG5vZGUpCiAgICAgewogICAgICAgICBmb3Ig
KGxldCBzaWduYXR1cmUgb2Ygbm9kZS5zaWduYXR1cmVzKSB7Ci0gICAgICAgICAgICBsZXQgc2V0
ID0gbmV3IFNldCgpOwotICAgICAgICAgICAgZnVuY3Rpb24gY29uc2lkZXIodGhpbmcpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaW5nLmlzVW5pZmlhYmxlKQotICAgICAg
ICAgICAgICAgICAgICBzZXQuYWRkKHRoaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNsYXNzIE5vdGljZVR5cGVWYXJpYWJsZSBleHRlbmRzIFZpc2l0b3IgewotICAgICAgICAgICAg
ICAgIHZpc2l0VHlwZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc2lkZXIobm9kZS50eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc2lkZXIobm9kZS52YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbGV0IG5vdGljZVR5cGVWYXJpYWJsZSA9IG5ldyBO
b3RpY2VUeXBlVmFyaWFibGUoKTsKKyAgICAgICAgICAgIGxldCB0eXBlVmFyaWFibGVUcmFja2Vy
ID0gbmV3IFR5cGVWYXJpYWJsZVRyYWNrZXIoKTsKICAgICAgICAgICAgIGZvciAobGV0IHBhcmFt
ZXRlclR5cGUgb2Ygc2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzKQotICAgICAgICAgICAgICAgIHBh
cmFtZXRlclR5cGUudmlzaXQobm90aWNlVHlwZVZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJUeXBlLnZpc2l0KHR5cGVWYXJpYWJsZVRyYWNrZXIpOwogICAgICAgICAgICAgZm9y
IChsZXQgdHlwZVBhcmFtZXRlciBvZiBzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIXNldC5oYXModHlwZVBhcmFtZXRlcikpCisgICAgICAgICAgICAgICAg
aWYgKCF0eXBlVmFyaWFibGVUcmFja2VyLnNldC5oYXModHlwZVBhcmFtZXRlcikpCiAgICAgICAg
ICAgICAgICAgICAgIHRocm93IFdUeXBlRXJyb3IodHlwZVBhcmFtZXRlci5vcmlnaW4ub3JpZ2lu
U3RyaW5nLCAiVHlwZSBwYXJhbWV0ZXIgdG8gcHJvdG9jb2wgc2lnbmF0dXJlIG5vdCBpbmZlcnJh
YmxlIGZyb20gdmFsdWUgcGFyYW1ldGVycyIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKCFzZXQuaGFzKG5vZGUudHlwZVZhcmlhYmxlKSkKKyAgICAgICAgICAgIGlmICghdHlwZVZh
cmlhYmxlVHJhY2tlci5zZXQuaGFzKG5vZGUudHlwZVZhcmlhYmxlKSkKICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgV1R5cGVFcnJvcihzaWduYXR1cmUub3JpZ2luLm9yaWdpblN0cmluZywgIlBy
b3RvY29sJ3MgdHlwZSB2YXJpYWJsZSAoIiArIG5vZGUubmFtZSArICIpIG5vdCBtZW50aW9uZWQg
aW4gc2lnbmF0dXJlOiAiICsgc2lnbmF0dXJlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE0MSw2
ICsxNDgsMzIgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICByZXR1
cm4gbGhzVHlwZTsKICAgICB9CiAgICAgCisgICAgdmlzaXRJZGVudGl0eUV4cHJlc3Npb24obm9k
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlLnRhcmdldC52aXNpdCh0aGlzKTsKKyAgICB9
CisgICAgCisgICAgdmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUpCisgICAgewor
ICAgICAgICBpZiAoIW5vZGUubFZhbHVlLmlzTFZhbHVlKQorICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTEhTIG9mIHJlYWQtbW9kaWZ5
LXdyaXRlIGlzIG5vdCBhbiBMVmFsdWU6ICIgKyBub2RlLmxWYWxlKTsKKyAgICAgICAgbGV0IGxo
c1R5cGUgPSBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5vbGRWYWx1ZVZh
ci50eXBlID0gbGhzVHlwZTsKKyAgICAgICAgbm9kZS5uZXdWYWx1ZVZhci50eXBlID0gbGhzVHlw
ZTsKKyAgICAgICAgbm9kZS5vbGRWYWx1ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5u
ZXdWYWx1ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAgbGV0IG5ld1ZhbHVlVHlwZSA9IG5vZGUu
bmV3VmFsdWVFeHAudmlzaXQodGhpcyk7CisgICAgICAgIGlmICghbGhzVHlwZS5lcXVhbHNXaXRo
Q29tbWl0KG5ld1ZhbHVlVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gbmV3IFdUeXBlRXJyb3Io
bm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVHlwZSBtaXNtYXRjaCBpbiByZWFkLW1vZGlmeS13
cml0ZTogIiArIGxoc1R5cGUgKyAiIHZlcnN1cyAiICsgbmV3VmFsdWVUeXBlKTsKKyAgICAgICAg
cmV0dXJuIG5vZGUucmVzdWx0RXhwLnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNp
dEFub255bW91c1ZhcmlhYmxlKG5vZGUpCisgICAgeworICAgICAgICBpZiAoIW5vZGUudHlwZSkK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQW5vbnltb3VzIHZhcmlhYmxlIG11c3Qga25v
dyB0eXBlIGJlZm9yZSBmaXJzdCBhcHBlYXJhbmNlIik7CisgICAgfQorICAgIAogICAgIHZpc2l0
RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgdHlwZSA9IG5v
ZGUucHRyLnZpc2l0KHRoaXMpLnVuaWZ5Tm9kZTsKQEAgLTE2NSw3ICsxOTgsNyBAQCBjbGFzcyBD
aGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgewogICAgICAgICBsZXQgZWxlbWVudFR5cGUg
PSBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKS51bmlmeU5vZGU7CiAgICAgICAgIGlmIChlbGVtZW50
VHlwZSBpbnN0YW5jZW9mIFB0clR5cGUpIHsKLSAgICAgICAgICAgIG5vZGUuYmVjb21lQ29udmVy
dFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBub2RlLmJlY29tZShuZXcg
Q29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmxWYWx1ZSkp
OwogICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheVJlZlR5cGUobm9kZS5vcmlnaW4sIGVsZW1l
bnRUeXBlLmFkZHJlc3NTcGFjZSwgZWxlbWVudFR5cGUuZWxlbWVudFR5cGUpOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMTg5LDM1ICsyMjIsODcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZp
c2l0b3IgewogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNob3VsZCBub3QgZXhpc3QgeWV0LiIp
OwogICAgIH0KICAgICAKLSAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICBfZmluaXNo
VmlzaXRpbmdQcm9wZXJ0eUFjY2Vzcyhub2RlLCBiYXNlVHlwZSwgZXh0cmFBcmdzLCBleHRyYUFy
Z1R5cGVzKQogICAgIHsKLSAgICAgICAgbGV0IHN0cnVjdFR5cGUgPSBub2RlLnN0cnVjdC52aXNp
dCh0aGlzKS51bmlmeU5vZGU7CisgICAgICAgIGJhc2VUeXBlID0gYmFzZVR5cGUudmlzaXQobmV3
IEF1dG9XcmFwcGVyKCkpCisgICAgICAgIG5vZGUuYmFzZVR5cGUgPSBiYXNlVHlwZTsKICAgICAg
ICAgCi0gICAgICAgIG5vZGUuc3RydWN0VHlwZSA9IHN0cnVjdFR5cGUudmlzaXQobmV3IEF1dG9X
cmFwcGVyKCkpOwotICAgICAgICAKLSAgICAgICAgbGV0IHVuZGVybHlpbmdTdHJ1Y3QgPSBzdHJ1
Y3RUeXBlOwotICAgICAgICAKLSAgICAgICAgaWYgKHN0cnVjdFR5cGUgaW5zdGFuY2VvZiBUeXBl
UmVmKQotICAgICAgICAgICAgdW5kZXJseWluZ1N0cnVjdCA9IHVuZGVybHlpbmdTdHJ1Y3QudHlw
ZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghKHVuZGVybHlpbmdTdHJ1Y3QgaW5zdGFuY2VvZiBT
dHJ1Y3RUeXBlKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2lu
Lm9yaWdpblN0cmluZywgIk9wZXJhbmQgdG8gZG90IGV4cHJlc3Npb24gaXMgbm90IGEgc3RydWN0
IHR5cGU6ICIgKyBzdHJ1Y3RUeXBlKTsKKyAgICAgICAgLy8gU3VjaCBhIHR5cGUgbXVzdCBleGlz
dC4gVGhpcyBtYXkgdGhyb3cgaWYgaXQgZG9lc24ndC4KKyAgICAgICAgbGV0IHR5cGVGb3JBbmQg
PSBiYXNlVHlwZS5hcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChub2RlLm9yaWdpbik7CisgICAg
ICAgIGlmICghdHlwZUZvckFuZCkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90
IGdldCB0eXBlRm9yQW5kIik7CisgICAgICAgIAorICAgICAgICBsZXQgZXJyb3JGb3JHZXQ7Cisg
ICAgICAgIGxldCBlcnJvckZvckFuZDsKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVzb2x2ZSgKKyAgICAgICAgICAgICAg
ICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkcywgdGhpcy5fY3VycmVudFN0
YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICBub2RlLmdldEZ1bmNOYW1l
LCBbXSwgW25vZGUuYmFzZSwgLi4uZXh0cmFBcmdzXSwgW2Jhc2VUeXBlLCAuLi5leHRyYUFyZ1R5
cGVzXSwgbnVsbCk7CisgICAgICAgICAgICBub2RlLmNhbGxGb3JHZXQgPSByZXN1bHQuY2FsbDsK
KyAgICAgICAgICAgIG5vZGUucmVzdWx0VHlwZUZvckdldCA9IHJlc3VsdC5yZXN1bHRUeXBlOwor
ICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgV1R5
cGVFcnJvcikpCisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIGVycm9yRm9y
R2V0ID0gZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKHN0cnVjdFR5cGUgaW5z
dGFuY2VvZiBUeXBlUmVmKSAKLSAgICAgICAgICAgIHVuZGVybHlpbmdTdHJ1Y3QgPSB1bmRlcmx5
aW5nU3RydWN0Lmluc3RhbnRpYXRlKHN0cnVjdFR5cGUudHlwZUFyZ3VtZW50cywgInNoYWxsb3ci
KTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCBiYXNlRm9yQW5kID0gYmFzZVR5cGUu
YXJndW1lbnRGb3JBbmRPdmVybG9hZChub2RlLm9yaWdpbiwgbm9kZS5iYXNlKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbGV0IHJlc3VsdCA9IENhbGxFeHByZXNzaW9uLnJlc29sdmUoCisg
ICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUucG9zc2libGVBbmRPdmVybG9hZHMsIHRo
aXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgbm9k
ZS5hbmRGdW5jTmFtZSwgW10sIFtiYXNlRm9yQW5kLCAuLi5leHRyYUFyZ3NdLCBbdHlwZUZvckFu
ZCwgLi4uZXh0cmFBcmdUeXBlc10sCisgICAgICAgICAgICAgICAgbnVsbCk7CisgICAgICAgICAg
ICBub2RlLmNhbGxGb3JBbmQgPSByZXN1bHQuY2FsbDsKKyAgICAgICAgICAgIG5vZGUucmVzdWx0
VHlwZUZvckFuZCA9IHJlc3VsdC5yZXN1bHRUeXBlLnVuaWZ5Tm9kZS5yZXR1cm5UeXBlRnJvbUFu
ZE92ZXJsb2FkKG5vZGUub3JpZ2luKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgaWYgKCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93
IGU7CisgICAgICAgICAgICBlcnJvckZvckFuZCA9IGU7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghbm9kZS5yZXN1bHRUeXBlRm9yR2V0ICYmICFub2RlLnJlc3VsdFR5cGVGb3JB
bmQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKAorICAgICAgICAgICAgICAg
IG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywKKyAgICAgICAgICAgICAgICAiQ2Fubm90IHJlc29s
dmUgYWNjZXNzOyB0cmllZCBieS12YWx1ZTpcbiIgKworICAgICAgICAgICAgICAgIGVycm9yRm9y
R2V0Lm1lc3NhZ2UgKyAiXG4iICsKKyAgICAgICAgICAgICAgICAiYW5kIHRyaWVkIGJ5LXBvaW50
ZXI6XG4iICsKKyAgICAgICAgICAgICAgICBlcnJvckZvckFuZC5tZXNzYWdlKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUucmVzdWx0VHlwZUZvckdldCAmJiBub2RlLnJl
c3VsdFR5cGVGb3JBbmQKKyAgICAgICAgICAgICYmICFub2RlLnJlc3VsdFR5cGVGb3JHZXQuZXF1
YWxzKG5vZGUucmVzdWx0VHlwZUZvckFuZCkpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVF
cnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJSZXN1bHQgdHlwZSByZXNvbHZlZCBieS12
YWx1ZSAoIiArIG5vZGUucmVzdWx0VHlwZUZvckdldCArICIpIGRvZXMgbm90IG1hdGNoIHJlc3Vs
dCB0eXBlIHJlc29sdmVkIGJ5LXBvaW50ZXIgKCIgKyBub2RlLnJlc3VsdFR5cGVGb3JBbmQgKyAi
KSIpOworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBD
YWxsRXhwcmVzc2lvbi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2Rl
LnBvc3NpYmxlU2V0T3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0
ZXJzLAorICAgICAgICAgICAgICAgIG5vZGUuc2V0RnVuY05hbWUsIFtdLCBbbm9kZS5iYXNlLCAu
Li5leHRyYUFyZ3MsIG51bGxdLCBbYmFzZVR5cGUsIC4uLmV4dHJhQXJnVHlwZXMsIG5vZGUucmVz
dWx0VHlwZV0sIG51bGwpOworICAgICAgICAgICAgbm9kZS5jYWxsRm9yU2V0ID0gcmVzdWx0LmNh
bGw7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5yZXN1bHRUeXBlLmVxdWFscyhiYXNlVHlwZSkp
CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2lu
U3RyaW5nLCAiUmVzdWx0IHR5cGUgb2Ygc2V0dGVyICIgKyByZXN1bHQuY2FsbC5mdW5jICsgIiBp
cyBub3QgdGhlIGJhc2UgdHlwZSAiICsgYmFzZVR5cGUpOworICAgICAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgV1R5cGVFcnJvcikpCisgICAgICAgICAg
ICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIG5vZGUuZXJyb3JGb3JTZXQgPSBlOworICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBsZXQgZmllbGQgPSB1bmRlcmx5aW5nU3RydWN0LmZpZWxk
QnlOYW1lKG5vZGUuZmllbGROYW1lKTsKLSAgICAgICAgaWYgKCFmaWVsZCkKLSAgICAgICAgICAg
IHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkZpZWxkICIg
KyBub2RlLmZpZWxkTmFtZSArICIgbm90IGZvdW5kIGluICIgKyBzdHJ1Y3RUeXBlKTsKLSAgICAg
ICAgcmV0dXJuIGZpZWxkLnR5cGU7CisgICAgICAgIHJldHVybiBub2RlLnJlc3VsdFR5cGU7CiAg
ICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0RG90RXhw
cmVzc2lvbihub2RlKQogICAgIHsKLSAgICAgICAgbm9kZS50eXBlID0gbm9kZS5hcmd1bWVudC52
aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKCFub2RlLnR5cGUpCi0gICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkRpZCBub3QgZ2V0IHR5cGUgZm9yIG5vZGU6ICIgKyBub2RlLmFyZ3VtZW50KTsK
LSAgICAgICAgcmV0dXJuIG5vZGUuYm9keS52aXNpdCh0aGlzKTsKKyAgICAgICAgbGV0IHN0cnVj
dFR5cGUgPSBub2RlLnN0cnVjdC52aXNpdCh0aGlzKS51bmlmeU5vZGU7CisgICAgICAgIHJldHVy
biB0aGlzLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIHN0cnVjdFR5cGUsIFtd
LCBbXSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAg
eworICAgICAgICBsZXQgYXJyYXlUeXBlID0gbm9kZS5hcnJheS52aXNpdCh0aGlzKS51bmlmeU5v
ZGU7CisgICAgICAgIGxldCBpbmRleFR5cGUgPSBub2RlLmluZGV4LnZpc2l0KHRoaXMpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3Mo
bm9kZSwgYXJyYXlUeXBlLCBbbm9kZS5pbmRleF0sIFtpbmRleFR5cGVdKTsKICAgICB9CiAgICAg
CiAgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQpAQCAtMzIyLDEwICs0MDcsMTAgQEAgY2xhc3Mg
Q2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgcmVzdWx0ID0gZXhwcmVzc2lv
bi52aXNpdCh0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAgICAKICAg
ICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAgewotICAgICAgICBsZXQgdHlwZUFyZ3Vt
ZW50VHlwZXMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJn
dW1lbnQudmlzaXQodGhpcykpOworICAgICAgICBsZXQgdHlwZUFyZ3VtZW50cyA9IG5vZGUudHlw
ZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3VtZW50ID0+IHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKSk7
CiAgICAgICAgIGxldCBhcmd1bWVudFR5cGVzID0gbm9kZS5hcmd1bWVudExpc3QubWFwKGFyZ3Vt
ZW50ID0+IHsKICAgICAgICAgICAgIGxldCBuZXdBcmd1bWVudCA9IGFyZ3VtZW50LnZpc2l0KHRo
aXMpOwogICAgICAgICAgICAgaWYgKCFuZXdBcmd1bWVudCkKQEAgLTMzMyw3NyArNDE4LDEyIEBA
IGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgIHJldHVybiBuZXdB
cmd1bWVudC52aXNpdChuZXcgQXV0b1dyYXBwZXIoKSk7CiAgICAgICAgIH0pOwogICAgICAgICAK
LSAgICAgICAgLy8gSGVyZSB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgb3BlcmF0
b3ImW10gaXMgY2FsbGVkIHdpdGggYSB0eXBlIHRoYXQgaXNuJ3Qgc3VmZmljaWVudGx5Ci0gICAg
ICAgIC8vIHJlZmVyZW5jZXkuCi0gICAgICAgIGlmIChub2RlLm5hbWUgPT0gIm9wZXJhdG9yJltd
IikgewotICAgICAgICAgICAgbGV0IGFyZ1R5cGUgPSBhcmd1bWVudFR5cGVzWzBdLnVuaWZ5Tm9k
ZTsKLSAgICAgICAgICAgIGlmIChhcmdUeXBlIGluc3RhbmNlb2YgUHRyVHlwZSkKLSAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJQ
b2ludGVyIHN1YnNjcmlwdCBpcyBub3QgdmFsaWQiKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKGFyZ1R5cGUgaW5zdGFuY2VvZiBBcnJheVR5cGUpIHsKLSAgICAgICAgICAgICAgICBu
b2RlLmFyZ3VtZW50TGlzdFswXSA9IG5ldyBNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUub3Jp
Z2luLCBub2RlLmFyZ3VtZW50TGlzdFswXSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVu
dExpc3RbMF0ubnVtRWxlbWVudHMgPSBhcmdUeXBlLm51bUVsZW1lbnRzOwotICAgICAgICAgICAg
ICAgIGFyZ3VtZW50VHlwZXNbMF0gPSBuZXcgQXJyYXlSZWZUeXBlKG5vZGUub3JpZ2luLCAidGhy
ZWFkIiwgYXJnVHlwZS5lbGVtZW50VHlwZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEoYXJn
VHlwZSBpbnN0YW5jZW9mIEFycmF5UmVmVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBub2RlLmFy
Z3VtZW50TGlzdFswXSA9IG5ldyBNYWtlUHRyRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5h
cmd1bWVudExpc3RbMF0pOwotICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlwZXNbMF0gPSBuZXcg
UHRyVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ3VtZW50VHlwZXNbMF0pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBub2RlLmFyZ3VtZW50VHlwZXMg
PSBhcmd1bWVudFR5cGVzOwogICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQogICAgICAgICAg
ICAgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgbGV0IG92
ZXJsb2FkID0gbnVsbDsKLSAgICAgICAgbGV0IGZhaWx1cmVzID0gW107Ci0gICAgICAgIGZvciAo
bGV0IHR5cGVQYXJhbWV0ZXIgb2YgdGhpcy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVy
cykgewotICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRlciBpbnN0YW5jZW9mIFR5cGVWYXJp
YWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXR5cGVQ
YXJhbWV0ZXIucHJvdG9jb2wpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBsZXQgc2lnbmF0dXJlcyA9Ci0gICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5wcm90b2Nv
bC5wcm90b2NvbERlY2wuc2lnbmF0dXJlc0J5TmFtZVdpdGhUeXBlVmFyaWFibGUobm9kZS5uYW1l
LCB0eXBlUGFyYW1ldGVyKTsKLSAgICAgICAgICAgIGlmICghc2lnbmF0dXJlcykKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG92ZXJsb2FkID0gcmVzb2x2ZU92ZXJsb2Fk
SW1wbChzaWduYXR1cmVzLCBub2RlLnR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIG5vZGUu
cmV0dXJuVHlwZSk7Ci0gICAgICAgICAgICBpZiAob3ZlcmxvYWQuZnVuYykKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGZhaWx1cmVzLnB1c2goLi4ub3ZlcmxvYWQuZmFpbHVy
ZXMpOwotICAgICAgICAgICAgb3ZlcmxvYWQgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICghb3ZlcmxvYWQpIHsKLSAgICAgICAgICAgIG92ZXJsb2FkID0gcmVzb2x2ZU92ZXJsb2FkSW1w
bCgKLSAgICAgICAgICAgICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzLCBub2RlLnR5cGVBcmd1
bWVudHMsIGFyZ3VtZW50VHlwZXMsIG5vZGUucmV0dXJuVHlwZSk7Ci0gICAgICAgICAgICBpZiAo
IW92ZXJsb2FkLmZ1bmMpIHsKLSAgICAgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKC4uLm92ZXJs
b2FkLmZhaWx1cmVzKTsKLSAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICJEaWQgbm90IGZp
bmQgZnVuY3Rpb24gZm9yIGNhbGwgd2l0aCAiOwotICAgICAgICAgICAgICAgIGlmIChub2RlLnR5
cGVBcmd1bWVudHMubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJ0eXBl
IGFyZ3VtZW50cyA8IiArIG5vZGUudHlwZUFyZ3VtZW50cyArICI+IGFuZCAiOwotICAgICAgICAg
ICAgICAgIG1lc3NhZ2UgKz0gImFyZ3VtZW50IHR5cGVzICgiICsgYXJndW1lbnRUeXBlcyArICIp
IjsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQotICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlICs9IiBhbmQgcmV0dXJuIHR5cGUgIiArIG5vZGUucmV0dXJuVHlwZTsKLSAg
ICAgICAgICAgICAgICBpZiAoZmFpbHVyZXMubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlICs9ICIsIGJ1dCBjb25zaWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKLSAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJp
bmcsIG1lc3NhZ2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50VHlwZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
IGxldCB0eXBlQXJndW1lbnRUeXBlID0gdHlwZUFyZ3VtZW50VHlwZXNbaV07Ci0gICAgICAgICAg
ICBsZXQgdHlwZVBhcmFtZXRlciA9IG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnNbaV07Ci0g
ICAgICAgICAgICBpZiAoISh0eXBlUGFyYW1ldGVyIGluc3RhbmNlb2YgQ29uc3RleHByVHlwZVBh
cmFtZXRlcikpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXR5
cGVQYXJhbWV0ZXIudHlwZS5lcXVhbHNXaXRoQ29tbWl0KHR5cGVBcmd1bWVudFR5cGUpKQotICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0
cmluZyArICIgY29uc3RleHByIHR5cGUgYXJndW1lbnQgYW5kIHBhcmFtZXRlciB0eXBlcyBub3Qg
ZXF1YWw6IGFyZ3VtZW50ID0gIiArIHR5cGVBcmd1bWVudFR5cGUgKyAiLCBwYXJhbWV0ZXIgPSAi
ICsgdHlwZVBhcmFtZXRlci50eXBlKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGxldCBpID0g
MDsgaSA8IGFyZ3VtZW50VHlwZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGxldCBhcmd1
bWVudFR5cGUgPSBhcmd1bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0IHBhcmFtZXRlclR5
cGUgPSBvdmVybG9hZC5mdW5jLnBhcmFtZXRlcnNbaV0udHlwZS5zdWJzdGl0dXRlVG9VbmlmaWNh
dGlvbigKLSAgICAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJzLCBvdmVy
bG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwotICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGFyZ3Vt
ZW50VHlwZS5lcXVhbHNXaXRoQ29tbWl0KHBhcmFtZXRlclR5cGUpOwotICAgICAgICAgICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdCAiICsgbm9kZS5v
cmlnaW4ub3JpZ2luU3RyaW5nICsgIiBhcmd1bWVudCBhbmQgcGFyYW1ldGVyIHR5cGVzIG5vdCBl
cXVhbCBhZnRlciB0eXBlIGFyZ3VtZW50IHN1YnN0aXR1dGlvbjogYXJndW1lbnQgPSAiICsgYXJn
dW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHBhcmFtZXRlclR5cGUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBub2RlLnJlc29sdmUob3ZlcmxvYWQpOworCisgICAgICAgIGxldCBy
ZXN1bHQgPSBub2RlLnJlc29sdmUobm9kZS5wb3NzaWJsZU92ZXJsb2FkcywgdGhpcy5fY3VycmVu
dFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Db21tYUV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQ29tbWFFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Db21tYUV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDYgKzM3LDkgQEAgY2xhc3MgQ29tbWFFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lv
bgogICAgIAogICAgIGdldCBsaXN0KCkgeyByZXR1cm4gdGhpcy5fbGlzdDsgfQogICAgIAorICAg
IC8vIE5PVEU6IEl0J3Mgc3VwZXIgdGVtcHRpbmcgdG8gc2F5IHRoYXQgQ29tbWFFeHByZXNzaW9u
IGlzIGFuIGxWYWx1ZSBpZiBpdHMgbGFzdCBlbnRyeSBpcyBhbiBsVmFsdWUuIEJ1dCwKKyAgICAv
LyBQcm9wZXJ0eVJlc29sdmVyIHJlbGllcyBvbiB0aGlzIG5vdCBiZWluZyB0aGUgY2FzZS4KKyAg
ICAKICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gIigiICsgdGhpcy5saXN0
LnRvU3RyaW5nKCkgKyAiKSI7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9E
b3RFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0RvdEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0RvdEV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE5
ICsyNCwyMiBAQAogICovCiAidXNlIHN0cmljdCI7CiAKLWNsYXNzIERvdEV4cHJlc3Npb24gZXh0
ZW5kcyBFeHByZXNzaW9uIHsKK2NsYXNzIERvdEV4cHJlc3Npb24gZXh0ZW5kcyBQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24gewogICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgc3RydWN0LCBmaWVsZE5h
bWUpCiAgICAgewotICAgICAgICBzdXBlcihvcmlnaW4pOwotICAgICAgICB0aGlzLl9zdHJ1Y3Qg
PSBzdHJ1Y3Q7CisgICAgICAgIHN1cGVyKG9yaWdpbiwgc3RydWN0KTsKICAgICAgICAgdGhpcy5f
ZmllbGROYW1lID0gZmllbGROYW1lOwogICAgIH0KICAgICAKLSAgICBnZXQgc3RydWN0KCkgeyBy
ZXR1cm4gdGhpcy5fc3RydWN0OyB9CisgICAgZ2V0IHN0cnVjdCgpIHsgcmV0dXJuIHRoaXMuYmFz
ZTsgfQogICAgIGdldCBmaWVsZE5hbWUoKSB7IHJldHVybiB0aGlzLl9maWVsZE5hbWU7IH0KICAg
ICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0aGlzLnN0cnVjdC5pc0xWYWx1ZTsgfQogICAgIGdl
dCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiB0aGlzLnN0cnVjdC5hZGRyZXNzU3BhY2U7IH0KICAg
ICAKKyAgICBnZXQgZ2V0RnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0b3IuIiArIHRoaXMuZmll
bGROYW1lOyB9CisgICAgZ2V0IGFuZEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yJi4iICsg
dGhpcy5maWVsZE5hbWU7IH0KKyAgICBnZXQgc2V0RnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0
b3IuIiArIHRoaXMuZmllbGROYW1lICsgIj0iOyB9CisgICAgCiAgICAgdG9TdHJpbmcoKQogICAg
IHsKICAgICAgICAgcmV0dXJuICIoIiArIHRoaXMuc3RydWN0ICsgIi4iICsgdGhpcy5maWVsZE5h
bWUgKyAiKSI7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXIuanMJ
KHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZm
ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEyICs2MCwxNCBAQCBjbGFzcyBFQnVmZmVyIHsK
ICAgICBnZXQoaW5kZXgpCiAgICAgewogICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49
IHRoaXMuX2FycmF5Lmxlbmd0aCkKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigib3V0IG9m
IGJvdW5kcyBidWZmZXIgYWNjZXNzIik7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk91
dCBvZiBib3VuZHMgYnVmZmVyIGFjY2VzcyAoYnVmZmVyID0gIiArIHRoaXMgKyAiLCBpbmRleCA9
ICIgKyBpbmRleCArICIpIik7CiAgICAgICAgIHJldHVybiB0aGlzLl9hcnJheVtpbmRleF07CiAg
ICAgfQogICAgIAogICAgIHNldChpbmRleCwgdmFsdWUpCiAgICAgeworICAgICAgICBpZiAoaW5k
ZXggPCAwIHx8IGluZGV4ID49IHRoaXMuX2FycmF5Lmxlbmd0aCkKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigib3V0IG9mIGJvdW5kcyBidWZmZXIgYWNjZXNzIChidWZmZXIgPSAiICsgdGhp
cyArICIsIGluZGV4ID0gIiArIGluZGV4ICsgIikiKTsKICAgICAgICAgdGhpcy5fYXJyYXlbaW5k
ZXhdID0gdmFsdWU7CiAgICAgfQogICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRUJ1ZmZlckJ1aWxkZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvRUJ1ZmZlckJ1aWxkZXIuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQsMTEgKzEwNCw5IEBAIGNsYXNzIEVCdWZmZXJCdWlsZGVyIGV4dGVuZHMgVmlzaXRv
ciB7CiAgICAgICAgIHN1cGVyLnZpc2l0TG9naWNhbE5vdChub2RlKTsKICAgICB9CiAgICAgCi0g
ICAgdmlzaXRMZXRFeHByZXNzaW9uKG5vZGUpCisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShu
b2RlKQogICAgIHsKICAgICAgICAgdGhpcy5fY3JlYXRlRVB0ckZvck5vZGUobm9kZSk7Ci0gICAg
ICAgIG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAgIG5vZGUuYm9keS52aXNpdCh0
aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUp
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCShyZXZp
c2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3Iu
anMJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsMTEgQEAgY2xhc3MgRXZhbHVhdG9yIGV4
dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICAgfQogICAgIAorICAg
IHZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9k
ZS50YXJnZXQudmlzaXQodGhpcyk7CisgICAgfQorICAgIAogICAgIHZpc2l0RGVyZWZlcmVuY2VF
eHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcHRyID0gbm9kZS5wdHIudmlzaXQo
dGhpcykubG9hZFZhbHVlKCk7CkBAIC0xMTIsNyArMTE3LDggQEAgY2xhc3MgRXZhbHVhdG9yIGV4
dGVuZHMgVmlzaXRvciB7CiAgICAgCiAgICAgdmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2RlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGUuZVB0ci5ib3gobm9kZS5sVmFsdWUudmlzaXQodGhp
cykpOworICAgICAgICBsZXQgcHRyID0gbm9kZS5sVmFsdWUudmlzaXQodGhpcyk7CisgICAgICAg
IHJldHVybiBub2RlLmVQdHIuYm94KHB0cik7CiAgICAgfQogICAgIAogICAgIHZpc2l0TWFrZUFy
cmF5UmVmRXhwcmVzc2lvbihub2RlKQpAQCAtMTI1LDEyICsxMzEsNiBAQCBjbGFzcyBFdmFsdWF0
b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgcmV0dXJuIG5vZGUuZVB0ci5ib3gobmV3IEVB
cnJheVJlZihub2RlLmxWYWx1ZS52aXNpdCh0aGlzKS5sb2FkVmFsdWUoKSwgMSkpOwogICAgIH0K
ICAgICAKLSAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKLSAgICB7Ci0gICAgICAgIGxldCBz
dHJ1Y3RQdHIgPSBub2RlLnN0cnVjdC52aXNpdCh0aGlzKTsKLSAgICAgICAgcmV0dXJuIHN0cnVj
dFB0ci5wbHVzKG5vZGUuZmllbGQub2Zmc2V0KTsKLSAgICB9Ci0gICAgCiAgICAgdmlzaXRDb21t
YUV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQ7CkBAIC0yMzEsMTAg
KzIzMSw5IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICB0aHJv
dyBDb250aW51ZUV4Y2VwdGlvbjsKICAgICB9CiAgICAgCi0gICAgdmlzaXRMZXRFeHByZXNzaW9u
KG5vZGUpCisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShub2RlKQogICAgIHsKLSAgICAgICAg
bm9kZS5lUHRyLmNvcHlGcm9tKG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyksIG5vZGUudHlwZS5z
aXplKTsKLSAgICAgICAgcmV0dXJuIG5vZGUuYm9keS52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9k
ZS50eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVlKG5vZGUuZVB0ci5idWZmZXIsIG5vZGUuZVB0ci5v
ZmZzZXQpOwogICAgIH0KICAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIu
anMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V4
cHJlc3Npb25GaW5kZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDE2IEBAIGNsYXNz
IEV4cHJlc3Npb25GaW5kZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhpcy5fY2FsbGJh
Y2sobm9kZSk7CiAgICAgfQogICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CisgICAgfQorICAg
IAorICAgIHZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlz
Ll9jYWxsYmFjayhub2RlKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihu
b2RlKQogICAgIHsKICAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDcgQEAgY2xhc3MgRm9yTG9vcCBleHRlbmRzIE5vZGUgewogCiAgICAgdG9TdHJp
bmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJmb3IgKCIgKyAodGhpcy5pbml0aWFsaXphdGlv
biA/IHRoaXMuaW5pdGlhbGl6YXRpb24gOiAiICIpICsgIjsgIiArICh0aGlzLmNvbmRpdGlvbiA/
IHRoaXMuY29uZGl0aW9uIDogIiIpICsgIjsgIiArICh0aGlzLmluY3JlbWVudCA/IHRoaXMuaW5j
cmVtZW50IDogIiIpICsgIikgIiArIGJvZHk7CisgICAgICAgIHJldHVybiAiZm9yICgiICsgKHRo
aXMuaW5pdGlhbGl6YXRpb24gPyB0aGlzLmluaXRpYWxpemF0aW9uIDogIiAiKSArICI7ICIgKyAo
dGhpcy5jb25kaXRpb24gPyB0aGlzLmNvbmRpdGlvbiA6ICIiKSArICI7ICIgKyAodGhpcy5pbmNy
ZW1lbnQgPyB0aGlzLmluY3JlbWVudCA6ICIiKSArICIpICIgKyB0aGlzLmJvZHk7CiAgICAgfQog
fTsKIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCShyZXZpc2lvbiAy
MjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSwxMiBAQCBjbGFzcyBGdW5jIGV4dGVuZHMgTm9kZSB7CiAgICAg
ewogICAgICAgICBpZiAoIShvcmlnaW4gaW5zdGFuY2VvZiBMZXhlclRva2VuKSkKICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiQmFkIG9yaWdpbjogIiArIG9yaWdpbik7CisgICAgICAgIGZv
ciAobGV0IHBhcmFtZXRlciBvZiBwYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICBpZiAoIXBhcmFt
ZXRlcikKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcGFyYW1ldGVyIik7
CisgICAgICAgICAgICBpZiAoIXBhcmFtZXRlci50eXBlKQorICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiTnVsbCBwYXJhbWV0ZXIgdHlwZSIpOworICAgICAgICB9CiAgICAgICAgIHN1
cGVyKCk7CiAgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKICAgICAgICAgdGhpcy5fbmFt
ZSA9IG5hbWU7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFu
dGlhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1
bmNJbnN0YW50aWF0b3IuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTc1LDMz
ICs3NSwzOCBAQCBjbGFzcyBGdW5jSW5zdGFudGlhdG9yIHsKICAgICAgICAgICAgICAgICAgICAg
bGV0IG92ZXJsb2FkID0gcmVzb2x2ZU92ZXJsb2FkSW1wbChyZXN1bHQucG9zc2libGVPdmVybG9h
ZHMsIHJlc3VsdC50eXBlQXJndW1lbnRzLCByZXN1bHQuYXJndW1lbnRUeXBlcywgcmVzdWx0LnJl
dHVyblR5cGVGb3JPdmVybG9hZFJlc29sdXRpb24pOwogICAgICAgICAgICAgICAgICAgICBpZiAo
IW92ZXJsb2FkLmZ1bmMpCiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkNvdWxkIG5vdCByZXNvbHZlIHByb3RvY29sIHNpZ25hdHVyZSBmdW5jdGlvbiBjYWxsIGR1cmlu
ZyBpbnN0YW50aWF0aW9uOiAiICsgcmVzdWx0LmZ1bmMgKyAob3ZlcmxvYWQuZmFpbHVyZXMubGVu
Z3RoID8gIjsgdHJpZWQ6XG4iICsgb3ZlcmxvYWQuZmFpbHVyZXMuam9pbigiXG4iKSA6ICIiKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKG92ZXJsb2FkKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnJlc29sdmVUb092ZXJsb2FkKG92ZXJsb2FkKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5m
dW5jLmlzTmF0aXZlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQubmF0aXZlRnVuY0luc3Rh
bmNlID0gdGhpc0luc3RhbnRpYXRvci5nZXRVbmlxdWUocmVzdWx0LmZ1bmMsIHJlc3VsdC5hY3R1
YWxUeXBlQXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBs
ZXQgc3Vic3RpdHV0aW9uID0gbmV3IEluc3RhbnRpYXRpb25TdWJzdGl0dXRpb24oZnVuYy50eXBl
UGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7CisgICAgICAgIGxldCBpbnN0YW50aWF0ZUltbWVk
aWF0ZXMgPSBuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCk7CiAgICAgICAgIAotICAgICAgICBj
bGFzcyBJbnN0YW50aWF0ZSBleHRlbmRzIFZpc2l0b3JCYXNlIHsKKyAgICAgICAgY2xhc3MgSW5z
dGFudGlhdGUgewogICAgICAgICAgICAgdmlzaXRGdW5jRGVmKGZ1bmMpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdW5jRGVmKAogICAgICAgICAgICAgICAgICAg
ICBmdW5jLm9yaWdpbiwgZnVuYy5uYW1lLAotICAgICAgICAgICAgICAgICAgICBmdW5jLnJldHVy
blR5cGUudmlzaXQoc3Vic3RpdHV0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5yZXR1
cm5UeXBlLnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlhdGVzKSwK
ICAgICAgICAgICAgICAgICAgICAgW10sIC8vIFdlJ3JlIGluc3RhbnRpYXRlZCBzbyB3ZSBubyBs
b25nZXIgdGFrZSB0eXBlIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMucGFy
YW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChzdWJzdGl0dXRpb24pKSwK
LSAgICAgICAgICAgICAgICAgICAgZnVuYy5ib2R5LnZpc2l0KHN1YnN0aXR1dGlvbikpOworICAg
ICAgICAgICAgICAgICAgICBmdW5jLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0
ZXIudmlzaXQoc3Vic3RpdHV0aW9uKS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpKSwKKyAg
ICAgICAgICAgICAgICAgICAgZnVuYy5ib2R5LnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5z
dGFudGlhdGVJbW1lZGlhdGVzKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHZpc2l0TmF0aXZlRnVuYyhmdW5jKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgTmF0aXZlRnVuY0luc3RhbmNlKAogICAgICAgICAgICAgICAgICAgICBm
dW5jLAotICAgICAgICAgICAgICAgICAgICBmdW5jLnJldHVyblR5cGUudmlzaXQoc3Vic3RpdHV0
aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIg
PT4gcGFyYW1ldGVyLnZpc2l0KHN1YnN0aXR1dGlvbikpLAotICAgICAgICAgICAgICAgICAgICBm
dW5jLmlzQ2FzdCk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMucmV0dXJuVHlwZS52aXNpdChz
dWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyksCisgICAgICAgICAgICAg
ICAgICAgIGZ1bmMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChz
dWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcykpLAorICAgICAgICAgICAg
ICAgICAgICBmdW5jLmlzQ2FzdCwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5pbnN0YW50aWF0
ZUltcGxlbWVudGF0aW9uKHN1YnN0aXR1dGlvbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIGxldCByZXN1bHRpbmdGdW5jID0gZnVuYy52aXNpdChuZXcgSW5zdGFudGlhdGUo
KSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JZGVudGl0eUV4cHJlc3Np
b24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSWRlbnRp
dHlFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0
cmljdCI7CisKK2NsYXNzIElkZW50aXR5RXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewor
ICAgIGNvbnN0cnVjdG9yKHRhcmdldCkKKyAgICB7CisgICAgICAgIHN1cGVyKHRhcmdldC5vcmln
aW4pOworICAgICAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7CisgICAgfQorICAgIAorICAgIGdl
dCB0YXJnZXQoKSB7IHJldHVybiB0aGlzLl90YXJnZXQ7IH0KKyAgICAKKyAgICBnZXQgdW5pZnlO
b2RlKCkgeyByZXR1cm4gdGhpcy50YXJnZXQudW5pZnlOb2RlOyB9CisgICAgZ2V0IGlzQ29uc3Rl
eHByKCkgeyByZXR1cm4gdGhpcy50YXJnZXQuaXNDb25zdGV4cHI7IH0KKyAgICBnZXQgaXNMVmFs
dWUoKSB7IHJldHVybiB0aGlzLnRhcmdldC5pc0xWYWx1ZTsgfQorICAgIGdldCBhZGRyZXNzU3Bh
Y2UoKSB7IHJldHVybiB0aGlzLnRhcmdldC5hZGRyZXNzU3BhY2U7IH0KKyAgICAKKyAgICB0b1N0
cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIigiICsgdGhpcy50YXJnZXQgKyAiKSI7Cisg
ICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmRleEV4cHJl
c3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5k
ZXhFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0luZGV4RXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmlj
dCI7CisKK2NsYXNzIEluZGV4RXhwcmVzc2lvbiBleHRlbmRzIFByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbiB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBhcnJheSwgaW5kZXgpCisgICAgeworICAg
ICAgICBzdXBlcihvcmlnaW4sIGFycmF5KTsKKyAgICAgICAgdGhpcy5faW5kZXggPSBpbmRleDsK
KyAgICB9CisgICAgCisgICAgZ2V0IGFycmF5KCkgeyByZXR1cm4gdGhpcy5iYXNlOyB9CisgICAg
Z2V0IGluZGV4KCkgeyByZXR1cm4gdGhpcy5faW5kZXg7IH0KKyAgICBnZXQgaXNMVmFsdWUoKSB7
IHJldHVybiB0aGlzLmFycmF5LmlzTFZhbHVlOyB9CisgICAgZ2V0IGFkZHJlc3NTcGFjZSgpIHsg
cmV0dXJuIHRoaXMuYXJyYXkuYWRkcmVzc1NwYWNlOyB9CisgICAgCisgICAgZ2V0IGdldEZ1bmNO
YW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yW10iOyB9CisgICAgZ2V0IGFuZEZ1bmNOYW1lKCkgeyBy
ZXR1cm4gIm9wZXJhdG9yJltdIjsgfQorICAgIGdldCBzZXRGdW5jTmFtZSgpIHsgcmV0dXJuICJv
cGVyYXRvcltdPSI7IH0KKworICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAi
KCIgKyB0aGlzLmFycmF5ICsgIlsiICsgdGhpcy5pbmRleCArICJdKSI7CisgICAgfQorfQpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNh
bGwuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0luZmVyVHlwZXNGb3JDYWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGZ1
bmN0aW9uIGluZmVyVHlwZXNGb3JDYWxsKGZ1bmMsIHR5cGVBcmcKICAgICAgICAgaWYgKCFhcmd1
bWVudFR5cGVzW2ldKQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIGFyZ3VtZW50
IHR5cGUgYXQgaSA9ICIgKyBpKTsKICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldLnVuaWZ5
KHVuaWZpY2F0aW9uQ29udGV4dCwgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUpKQotICAgICAgICAg
ICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAi
QXJndW1lbnQgIyIgKyAoaSArIDEpICsgIiAiICsgKGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lID8g
ImZvciBwYXJhbWV0ZXIgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lIDogIiIpICsgIiBkb2Vz
IG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVudFR5cGVzW2ldICsgIiwgcmVxdWlyZSAiICsg
ZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUgKyAiKSIpfTsKKyAgICAgICAgICAgIHJldHVybiB7ZmFp
bHVyZTogbmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIkFyZ3VtZW50ICMiICsg
KGkgKyAxKSArICIgIiArIChmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSA/ICJmb3IgcGFyYW1ldGVy
ICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSArICIgIiA6ICIiKSArICJkb2VzIG5vdCBtYXRj
aCAocGFzc2VkICIgKyBhcmd1bWVudFR5cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJh
bWV0ZXJzW2ldLnR5cGUgKyAiKSIpfTsKICAgICB9CiAgICAgaWYgKHJldHVyblR5cGUgJiYgIXJl
dHVyblR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBmdW5jLnJldHVyblR5cGUpKQogICAg
ICAgICByZXR1cm4ge2ZhaWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMs
ICJSZXR1cm4gdHlwZSAiICsgZnVuYy5yZXR1cm5UeXBlICsgIiBkb2VzIG5vdCBtYXRjaCAiICsg
cmV0dXJuVHlwZSl9OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5l
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5q
cwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5s
aW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw2IEBAIGZ1bmN0aW9uIF9pbmxpbmVG
dW5jdGlvbihwcm9ncmFtLCBmdW5jLCAKICAgICBpZiAoZnVuYy5pbmxpbmVkIHx8IGZ1bmMuaXNO
YXRpdmUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBmdW5jLnJld3JpdGUobmV3IEluc3Rh
bnRpYXRlSW1tZWRpYXRlcygpKTsKLSAgICAKICAgICAvLyBUaGlzIGlzIHRoZSBwcmVjaXNlIHRp
bWUgd2hlbiB3ZSBjYW4gYnVpbGQgRUJ1ZmZlcnMgaW4gb3JkZXIgdG8gZ2V0IHRoZW0gdG8gYmUg
dW5pcXVlZCBieQogICAgIC8vIHR5cGUgaW5zdGFudGlhdGlvbiBidXQgbm90aGluZyBlbHNlLgog
ICAgIGZ1bmMudmlzaXQobmV3IFN0cnVjdExheW91dEJ1aWxkZXIoKSk7CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDI0ICszMiwxNSBAQCBjbGFzcyBJbmxpbmVyIGV4dGVuZHMgUmV3cml0ZXIgewogICAgICAg
ICB0aGlzLl92aXNpdGluZyA9IHZpc2l0aW5nOwogICAgIH0KICAgICAKLSAgICB2aXNpdERvdEV4
cHJlc3Npb24obm9kZSkKLSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBzdXBlci52aXNpdERv
dEV4cHJlc3Npb24obm9kZSk7Ci0gICAgICAgIHJlc3VsdC5maWVsZCA9IHJlc3VsdC5zdHJ1Y3RU
eXBlLnVuaWZ5Tm9kZS5maWVsZEJ5TmFtZShyZXN1bHQuZmllbGROYW1lKTsKLSAgICAgICAgaWYg
KHJlc3VsdC5maWVsZC5vZmZzZXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiVW4tbGFpZC1vdXQgZmllbGQ6ICIgKyByZXN1bHQuZmllbGQgKyAiIChpbiAiICsgcmVzdWx0
LnN0cnVjdFR5cGUgKyAiKSIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAK
ICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0
ID0gc3VwZXIudmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5u
YXRpdmVGdW5jSW5zdGFuY2UpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICBy
ZXR1cm4gdGhpcy5fdmlzaXRpbmcuZG9WaXNpdChub2RlLmZ1bmMsICgpID0+IHsKICAgICAgICAg
ICAgIGxldCBmdW5jID0gdGhpcy5fcHJvZ3JhbS5mdW5jSW5zdGFudGlhdG9yLmdldFVuaXF1ZShy
ZXN1bHQuZnVuYywgcmVzdWx0LmFjdHVhbFR5cGVBcmd1bWVudHMpOwotICAgICAgICAgICAgaWYg
KGZ1bmMuaXNOYXRpdmUpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQubmF0aXZlRnVuY0luc3Rh
bmNlID0gZnVuYzsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGZ1bmMuaXNOYXRpdmUpCisgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJVbmV4cGVjdGVkIG5hdGl2ZSBmdW5jOiAiICsgZnVuYyk7CiAgICAgICAgICAg
ICBfaW5saW5lRnVuY3Rpb24odGhpcy5fcHJvZ3JhbSwgZnVuYywgdGhpcy5fdmlzaXRpbmcpOwog
ICAgICAgICAgICAgbGV0IHJlc3VsdGluZ0Jsb2NrID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAog
ICAgICAgICAgICAgICAgIHJlc3VsdC5vcmlnaW4sIGZ1bmMucmV0dXJuVHlwZSwgcmVzdWx0LmFy
Z3VtZW50TGlzdCwgZnVuYy5wYXJhbWV0ZXJzLCBmdW5jLmJvZHkpOwpJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCShyZXZpc2lvbiAyMjIxMjMpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDgsMzAgKzI0OCwzMiBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAg
ICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2FkVmFsdWUoKSA+PSByaWdodC5sb2FkVmFsdWUoKSk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIGxldCBhcnJheUVsZW1lbnRQdHIg
PSBmdW5jID0+IHsKLSAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZiwgaW5k
ZXhdLCBub2RlKSA9PiB7Ci0gICAgICAgICAgICAgICAgcmVmID0gcmVmLmxvYWRWYWx1ZSgpOwot
ICAgICAgICAgICAgICAgIGlmICghcmVmKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
V1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7
Ci0gICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleC5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoaW5kZXggPiByZWYubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJBcnJheSBpbmRleCAiICsg
aW5kZXggKyAiIGlzIG91dCBvZiBib3VuZHMgb2YgIiArIHJlZik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIEVQdHIuYm94KHJlZi5wdHIucGx1cyhpbmRleCAqIG5vZGUuYWN0dWFsVHlwZUFyZ3Vt
ZW50c1swXS5zaXplKSk7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9OwotICAgICAgICAKLSAg
ICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgVF4gdGhyZWFkIG9wZXJh
dG9yJltdPFQ+KFRbXSB0aHJlYWQsdWludCkiLAotICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRy
KTsKLSAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgVF4gdGhyZWFk
Z3JvdXAgb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KFRbXSB0aHJlYWRncm91cCx1aW50KSIsCi0g
ICAgICAgICAgICBhcnJheUVsZW1lbnRQdHIpOwotICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAg
ICAgICAgICAgIm5hdGl2ZSBUXiBkZXZpY2Ugb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KFRbXSBk
ZXZpY2UsdWludCkiLAotICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsKLSAgICAgICAgdGhp
cy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgVF4gY29uc3RhbnQgb3BlcmF0b3ImW108
VDpwcmltaXRpdmU+KFRbXSBjb25zdGFudCx1aW50KSIsCi0gICAgICAgICAgICBhcnJheUVsZW1l
bnRQdHIpOworICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2Ugb2YgYWRkcmVzc1NwYWNlcykg
eworICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICAgICBgbmF0aXZlIFRe
ICR7YWRkcmVzc1NwYWNlfSBvcGVyYXRvciZbXTxUJHtwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3Bh
Y2UpfT4oVFtdICR7YWRkcmVzc1NwYWNlfSx1aW50KWAsCisgICAgICAgICAgICAgICAgZnVuYyA9
PiB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZiwgaW5k
ZXhdLCBub2RlKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWYgPSByZWYubG9hZFZh
bHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJp
bmcsICJOdWxsIGRlcmVmZXJlbmNlIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9
IGluZGV4LmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4g
cmVmLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBF
cnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJBcnJheSBpbmRleCAiICsgaW5kZXggKyAi
IGlzIG91dCBvZiBib3VuZHMgb2YgIiArIHJlZik7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gRVB0ci5ib3gocmVmLnB0ci5wbHVzKGluZGV4ICogbm9kZS5hY3R1YWxUeXBlQXJndW1l
bnRzWzBdLnNpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9
KTsKKworICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICAgICBgbmF0aXZl
IHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQke3Byb3RvY29sU3VmZml4KGFkZHJlc3NTcGFjZSl9PihU
W10gJHthZGRyZXNzU3BhY2V9KWAsCisgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAg
ICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZl0sIG5vZGUpID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlZiA9IHJlZi5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghcmVmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBFUHRyLmJveCgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveChy
ZWYubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBhZGQodGhpbmcpCkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xldEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xldEV4cHJlc3Npb24uanMJKG5v
bmV4aXN0ZW50KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWxldCBsZXRFeHByZXNzaW9uQ291bnQg
PSAwOwotCi1jbGFzcyBMZXRFeHByZXNzaW9uIGV4dGVuZHMgVmFsdWUgewotICAgIGNvbnN0cnVj
dG9yKG9yaWdpbikKLSAgICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgICAgIHRoaXMuX29yaWdp
biA9IG9yaWdpbjsKLSAgICAgICAgdGhpcy5pbmRleCA9IGxldEV4cHJlc3Npb25Db3VudCsrOwot
ICAgICAgICB0aGlzLmFyZ3VtZW50ID0gbnVsbDsKLSAgICAgICAgdGhpcy5ib2R5ID0gbnVsbDsK
LSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQot
ICAgIGdldCBuYW1lKCkgeyByZXR1cm4gImxldDwiICsgdGhpcy5pbmRleCArICI+IjsgfQotICAg
IAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAiKCIg
KyB0aGlzLmFyZ3VtZW50ICsgIiwgIiArIHRoaXMuYm9keSArICIpIjsKLSAgICB9Ci19Ci0KSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24u
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5
UmVmRXhwcmVzc2lvbi5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzMsMTEgKzMzLDYgQEAgY2xhc3MgTWFrZUFycmF5UmVmRXhwcmVzc2lvbiBleHRlbmRzIEV4cAog
ICAgIAogICAgIGdldCBsVmFsdWUoKSB7IHJldHVybiB0aGlzLl9sVmFsdWU7IH0KICAgICAKLSAg
ICBiZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5fX3Byb3RvX18gPSBDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24ucHJvdG90eXBl
OwotICAgIH0KLSAgICAKICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gIkAi
ICsgKHRoaXMubnVtRWxlbWVudHMgPyAiPDwiICsgdGhpcy5udW1FbGVtZW50cyArICI+PiIgOiAi
IikgKyAiKCIgKyB0aGlzLmxWYWx1ZSArICIpIjsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lQ29udGV4dC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNiBAQCBjbGFzcyBOYW1lQ29udGV4dCB7CiAgICAgewogICAgICAgICB0aGlzLl9t
YXAgPSBuZXcgTWFwKCk7CiAgICAgICAgIHRoaXMuX3NldCA9IG5ldyBTZXQoKTsKLSAgICAgICAg
dGhpcy5fZGVmaW5lZCA9IG51bGw7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQgPSBu
dWxsOwogICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwogICAgICAgICB0aGlzLl9p
bnRyaW5zaWNzID0gbnVsbDsKQEAgLTYyLDcgKzYxLDcgQEAgY2xhc3MgTmFtZUNvbnRleHQgewog
ICAgICAgICBpZiAoIXRoaW5nLm5hbWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAot
ICAgICAgICBpZiAodGhpbmcuaXNOYXRpdmUpIHsKKyAgICAgICAgaWYgKHRoaW5nLmlzTmF0aXZl
ICYmICF0aGluZy5pbXBsZW1lbnRhdGlvbikgewogICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnRy
aW5zaWNzKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTmF0aXZlIGZ1bmN0aW9u
IGluIGEgc2NvcGUgdGhhdCBkb2VzIG5vdCByZWNvZ25pemUgaW50cmluc2ljcyIpOwogICAgICAg
ICAgICAgdGhpcy5faW50cmluc2ljcy5hZGQodGhpbmcpOwpAQCAtMTE1LDM2ICsxMTQsMTEgQEAg
Y2xhc3MgTmFtZUNvbnRleHQgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAgICAgCi0g
ICAgaGFuZGxlRGVmaW5pbmcoKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVmaW5lZCA9IG5ldyBT
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgaXNEZWZpbmVkKHRoaW5nKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX3NldC5oYXModGhpbmcpKSB7Ci0gICAgICAgICAgICByZXR1cm4gIXRoaXMuX2Rl
ZmluZWQKLSAgICAgICAgICAgICAgICB8fCB0aGlzLl9kZWZpbmVkLmhhcyh0aGluZyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlICYmIHRoaXMuX2RlbGVnYXRlLmlz
RGVmaW5lZCh0aGluZyk7Ci0gICAgfQotICAgIAotICAgIGRlZmluZSh0aGluZykKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2RlZmluZWQuYWRkKHRoaW5nKTsKLSAgICB9Ci0gICAgCi0gICAgZGVmaW5l
QWxsKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RlZmluZWQgPSBudWxsOwotICAgIH0KLSAgICAK
ICAgICBkb1N0YXRlbWVudChzdGF0ZW1lbnQsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdGhp
cy5fY3VycmVudFN0YXRlbWVudCA9IHN0YXRlbWVudDsKICAgICAgICAgY2FsbGJhY2soKTsKICAg
ICAgICAgdGhpcy5fY3VycmVudFN0YXRlbWVudCA9IG51bGw7Ci0gICAgICAgIHRoaXMuZGVmaW5l
KHN0YXRlbWVudCk7CiAgICAgfQogICAgIAogICAgIHJlY29nbml6ZUludHJpbnNpY3MoKQpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwkocmV2
aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29s
dmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNyArMzAsMTUgQEAKIC8vIG1vcmUgY29udmVu
aWVudCB0byBjaGVjayBoZXJlIHRoYW4gaW4gdGhlIENoZWNrZXIuIFRoaXMgdXN1YWxseSBpbnZv
bHZlcyB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlCiAvLyBjaGVja2VkIGJlZm9yZSBUeXBlUmVmVG9U
eXBlRGVmU2tpcHBlci4KIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewotICAg
IC8vIEl0J3MgdG90YWxseSBPSyB0byBpbnN0YW50aWF0ZSB0aGlzIHdpdGggemVybyBhcmd1bWVu
dHMgKGkuZS4gcGFzc2luZyB1bmRlZmluZWQgZm9yIGJvdGggb2YKLSAgICAvLyB0aGVtKSBpZiB5
b3UncmUgY3JlYXRpbmcgYSBOYW1lUmVzb2x2ZXIgdG8gdmlzaXQgYSBQcm9ncmFtLgogICAgIGNv
bnN0cnVjdG9yKG5hbWVDb250ZXh0KQogICAgIHsKICAgICAgICAgc3VwZXIoKTsKICAgICAgICAg
dGhpcy5fbmFtZUNvbnRleHQgPSBuYW1lQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgdmlzaXRQ
cm9ncmFtKG5vZGUpCisKKyAgICBkb1N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgewotICAgICAg
ICBsZXQgbmFtZUNvbnRleHQgPSBuZXcgTmFtZUNvbnRleHQodGhpcy5fbmFtZUNvbnRleHQpOwot
ICAgICAgICBuYW1lQ29udGV4dC5wcm9ncmFtID0gbm9kZTsKLSAgICAgICAgbmFtZUNvbnRleHQu
cmVjb2duaXplSW50cmluc2ljcygpOwotICAgICAgICBuYW1lQ29udGV4dC5oYW5kbGVEZWZpbmlu
ZygpOwotICAgICAgICBub2RlLmludHJpbnNpY3MgPSBuYW1lQ29udGV4dC5pbnRyaW5zaWNzOwot
ICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCi0g
ICAgICAgICAgICBuYW1lQ29udGV4dC5hZGQoc3RhdGVtZW50KTsKLSAgICAgICAgbGV0IGNoZWNr
ZXIgPSBuZXcgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KTsKLSAgICAgICAgZm9yIChsZXQgc3Rh
dGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKQotICAgICAgICAgICAgbmFtZUNvbnRl
eHQuZG9TdGF0ZW1lbnQoc3RhdGVtZW50LCAoKSA9PiBzdGF0ZW1lbnQudmlzaXQoY2hlY2tlcikp
OwotICAgICAgICBub2RlLmdsb2JhbE5hbWVDb250ZXh0ID0gbmFtZUNvbnRleHQ7CisgICAgICAg
IHRoaXMuX25hbWVDb250ZXh0LmRvU3RhdGVtZW50KHN0YXRlbWVudCwgKCkgPT4gc3RhdGVtZW50
LnZpc2l0KHRoaXMpKTsKICAgICB9CiAgICAgCiAgICAgX3Zpc2l0VHlwZVBhcmFtZXRlcnNBbmRC
dWlsZE5hbWVDb250ZXh0KG5vZGUpCkBAIC0yMDcsOCArMTk1LDYgQEAgY2xhc3MgTmFtZVJlc29s
dmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICB0eXBlID0gdGhpcy5fbmFtZUNvbnRl
eHQuZ2V0KFR5cGUsIG5vZGUubmFtZSk7CiAgICAgICAgICAgICBpZiAoIXR5cGUpCiAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
Q291bGQgbm90IGZpbmQgdHlwZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKLSAgICAgICAgICAgIGlm
ICghdGhpcy5fbmFtZUNvbnRleHQuaXNEZWZpbmVkKHR5cGUpKQotICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIklsbGVnYWwgZm9y
d2FyZCB1c2Ugb2YgdHlwZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKICAgICAgICAgICAgIG5vZGUu
dHlwZSA9IHR5cGU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMzAsNyArMjE2LDYgQEAgY2xh
c3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgdmlzaXRSZWZlcmVuY2VUeXBl
KG5vZGUpCiAgICAgewogICAgICAgICBsZXQgbmFtZUNvbnRleHQgPSBuZXcgTmFtZUNvbnRleHQo
dGhpcy5fbmFtZUNvbnRleHQpOwotICAgICAgICBuYW1lQ29udGV4dC5kZWZpbmVBbGwoKTsKICAg
ICAgICAgbm9kZS5lbGVtZW50VHlwZS52aXNpdChuZXcgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0
KSk7CiAgICAgfQogICAgIApAQCAtMjU4LDYgKzI0MywyOCBAQCBjbGFzcyBOYW1lUmVzb2x2ZXIg
ZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgc3VwZXIudmlzaXRSZXR1cm4obm9kZSk7CiAgICAg
fQogICAgIAorICAgIF9oYW5kbGVQcm9wZXJ0eUFjY2Vzcyhub2RlKQorICAgIHsKKyAgICAgICAg
bm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkcyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBu
b2RlLmdldEZ1bmNOYW1lKTsKKyAgICAgICAgbm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkcyA9IHRo
aXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLnNldEZ1bmNOYW1lKTsKKyAgICAgICAgbm9k
ZS5wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2Rl
LmFuZEZ1bmNOYW1lKTsKKworICAgICAgICBpZiAoIW5vZGUucG9zc2libGVHZXRPdmVybG9hZHMg
JiYgIW5vZGUucG9zc2libGVBbmRPdmVybG9hZHMpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmluZCBlaXRoZXIgIiAr
IG5vZGUuZ2V0RnVuY05hbWUgKyAiIG9yICIgKyBub2RlLmFuZEZ1bmNOYW1lKTsKKyAgICB9Cisg
ICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9o
YW5kbGVQcm9wZXJ0eUFjY2Vzcyhub2RlKTsKKyAgICAgICAgc3VwZXIudmlzaXREb3RFeHByZXNz
aW9uKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQor
ICAgIHsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAgICAg
IHN1cGVyLnZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpOworICAgIH0KKyAgICAKICAgICB2aXNp
dENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICB0aGlzLl9yZXNvbHZlVHlwZUFy
Z3VtZW50cyhub2RlLnR5cGVBcmd1bWVudHMpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTmF0aXZlRnVuYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSwxMCBAQCBjbGFzcyBOYXRpdmVGdW5jIGV4dGVuZHMgRnVuYyB7CiAgICAgewogICAgICAg
ICBzdXBlcihvcmlnaW4sIG5hbWUsIHJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0
ZXJzLCBpc0Nhc3QpOwogICAgICAgICB0aGlzLmlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgICAg
ICB0aGlzLmltcGxlbWVudGF0aW9uID0gbnVsbDsKKyAgICAgICAgdGhpcy5pbnN0YW50aWF0ZUlt
cGxlbWVudGF0aW9uID0gKHN1YnN0aXR1dGlvbikgPT4ge307CisgICAgICAgIHRoaXMudmlzaXRJ
bXBsZW1lbnRhdGlvbkRhdGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiBudWxs
OworICAgICAgICB0aGlzLmRpZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9IGlt
cGxlbWVudGF0aW9uRGF0YSA9PiBudWxsOwogICAgIH0KICAgICAKICAgICBnZXQgaXNOYXRpdmUo
KSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9O
YXRpdmVGdW5jSW5zdGFuY2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDE0ICsyNSwxNiBAQAogInVzZSBzdHJpY3QiOwogCiBjbGFzcyBOYXRpdmVG
dW5jSW5zdGFuY2UgZXh0ZW5kcyBGdW5jIHsKLSAgICBjb25zdHJ1Y3RvcihmdW5jLCByZXR1cm5U
eXBlLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpCisgICAgY29uc3RydWN0b3IoZnVuYywgcmV0dXJuVHlw
ZSwgcGFyYW1ldGVycywgaXNDYXN0LCBpbXBsZW1lbnRhdGlvbkRhdGEpCiAgICAgewogICAgICAg
ICBzdXBlcihmdW5jLm9yaWdpbiwgZnVuYy5uYW1lLCByZXR1cm5UeXBlLCBbXSwgcGFyYW1ldGVy
cywgaXNDYXN0KTsKICAgICAgICAgdGhpcy5fZnVuYyA9IGZ1bmM7CisgICAgICAgIHRoaXMuX2lt
cGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVudGF0aW9uRGF0YTsKICAgICB9CiAgICAgCiAgICAg
Z2V0IGZ1bmMoKSB7IHJldHVybiB0aGlzLl9mdW5jOyB9CiAgICAgZ2V0IGlzTmF0aXZlKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIGdldCBpbXBsZW1lbnRhdGlvbkRhdGEoKSB7IHJldHVybiB0aGlz
Ll9pbXBsZW1lbnRhdGlvbkRhdGE7IH0KIAogICAgIHRvRGVjbFN0cmluZygpCiAgICAgewpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw5ICszMywxNyBAQCBjbGFzcyBOb2RlIHsKICAgICAgICAgbGV0IHJldHVyblZhbHVlID0g
dmlzaXRGdW5jLmNhbGwodmlzaXRvciwgdGhpcyk7CiAgICAgICAgIGlmICgicmV0dXJuVmFsdWUi
IGluIHZpc2l0b3IpCiAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHZpc2l0b3IucmV0dXJuVmFs
dWU7CisgICAgICAgIAogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogICAgIAor
ICAgIHN0YXRpYyB2aXNpdChub2RlLCB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUg
aW5zdGFuY2VvZiBOb2RlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUudmlzaXQodmlzaXRvcik7
CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKyAgICAKICAgICB1bmlmeSh1bmlmaWNhdGlv
bkNvbnRleHQsIG90aGVyKQogICAgIHsKICAgICAgICAgaWYgKCFvdGhlcikKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9ybWFsVXNlUHJvcGVy
dHlSZXNvbHZlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworY2xhc3MgTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlciBleHRlbmRzIFJl
d3JpdGVyIHsKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdXBlci52aXNpdERvdEV4cHJlc3Npb24obm9kZSkucmV3cml0ZUFmdGVyQ2xvbmluZygp
OworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpLnJld3JpdGVBZnRl
ckNsb25pbmcoKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1BhcnNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1BhcnNlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9QYXJzZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzM3LDkgKzMzNyw5IEBAIGZ1bmN0aW9u
IHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgfSk7CiAgICAgfQogICAg
IAotICAgIGZ1bmN0aW9uIGVtaXRJbmNyZW1lbnQodG9rZW4sIHB0ciwgZXh0cmFBcmcpCisgICAg
ZnVuY3Rpb24gZW1pdEluY3JlbWVudCh0b2tlbiwgb2xkLCBleHRyYUFyZykKICAgICB7Ci0gICAg
ICAgIGxldCBhcmdzID0gW25ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxl
UmVmLndyYXAocHRyKSldOworICAgICAgICBsZXQgYXJncyA9IFtvbGRdOwogICAgICAgICBpZiAo
ZXh0cmFBcmcpCiAgICAgICAgICAgICBhcmdzLnB1c2goZXh0cmFBcmcpOwogICAgICAgICAKQEAg
LTM1MCwyNyArMzUwLDE1IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2lu
S2kKICAgICAgICAgaWYgKG5hbWUgPT0gIm9wZXJhdG9yIikKICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiSW52YWxpZCBuYW1lOiAiICsgbmFtZSk7CiAgICAgICAgIAotICAgICAgICByZXR1
cm4gbmV3IEFzc2lnbm1lbnQoCi0gICAgICAgICAgICB0b2tlbiwKLSAgICAgICAgICAgIG5ldyBE
ZXJlZmVyZW5jZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAocHRyKSksCi0gICAg
ICAgICAgICBuZXcgQ2FsbEV4cHJlc3Npb24odG9rZW4sIG5hbWUsIFtdLCBhcmdzKSk7CisgICAg
ICAgIHJldHVybiBuZXcgQ2FsbEV4cHJlc3Npb24odG9rZW4sIG5hbWUsIFtdLCBhcmdzKTsKICAg
ICB9CiAgICAgCiAgICAgZnVuY3Rpb24gZmluaXNoUGFyc2luZ1Bvc3RJbmNyZW1lbnQodG9rZW4s
IGxlZnQpCiAgICAgewotICAgICAgICBsZXQgcHRyID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4p
OwotICAgICAgICBwdHIuYXJndW1lbnQgPSBuZXcgTWFrZVB0ckV4cHJlc3Npb24odG9rZW4sIGxl
ZnQpOwotICAgICAgICAKLSAgICAgICAgbGV0IG9sZFZhbHVlID0gbmV3IExldEV4cHJlc3Npb24o
dG9rZW4pOwotICAgICAgICBvbGRWYWx1ZS5hcmd1bWVudCA9IG5ldyBEZXJlZmVyZW5jZUV4cHJl
c3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAocHRyKSk7Ci0gICAgICAgIAotICAgICAgICBw
dHIuYm9keSA9IG9sZFZhbHVlOwotICAgICAgICAKLSAgICAgICAgb2xkVmFsdWUuYm9keSA9IG5l
dyBDb21tYUV4cHJlc3Npb24odG9rZW4sIFsKLSAgICAgICAgICAgIGVtaXRJbmNyZW1lbnQodG9r
ZW4sIHB0ciksCi0gICAgICAgICAgICBWYXJpYWJsZVJlZi53cmFwKG9sZFZhbHVlKQotICAgICAg
ICBdKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKKyAgICAgICAgbGV0IHJlYWRNb2RpZnlXcml0ZSA9
IG5ldyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKHRva2VuLCBsZWZ0KTsKKyAgICAgICAgcmVh
ZE1vZGlmeVdyaXRlLm5ld1ZhbHVlRXhwID0gZW1pdEluY3JlbWVudCh0b2tlbiwgcmVhZE1vZGlm
eVdyaXRlLm9sZFZhbHVlUmVmKCkpOworICAgICAgICByZWFkTW9kaWZ5V3JpdGUucmVzdWx0RXhw
ID0gcmVhZE1vZGlmeVdyaXRlLm9sZFZhbHVlUmVmKCk7CisgICAgICAgIHJldHVybiByZWFkTW9k
aWZ5V3JpdGU7CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIHBhcnNlUG9zc2libGVTdWZmaXgo
KQpAQCAtMzk1LDkgKzM4Myw3IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3Jp
Z2luS2kKICAgICAgICAgICAgIGNhc2UgIlsiOiB7CiAgICAgICAgICAgICAgICAgbGV0IGluZGV4
ID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICAgICAgY29uc3VtZSgiXSIpOwotICAg
ICAgICAgICAgICAgIGxlZnQgPSBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKAotICAgICAgICAg
ICAgICAgICAgICB0b2tlbiwKLSAgICAgICAgICAgICAgICAgICAgbmV3IENhbGxFeHByZXNzaW9u
KHRva2VuLCAib3BlcmF0b3ImW10iLCBbXSwgW2xlZnQsIGluZGV4XSkpOworICAgICAgICAgICAg
ICAgIGxlZnQgPSBuZXcgSW5kZXhFeHByZXNzaW9uKHRva2VuLCBsZWZ0LCBpbmRleCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgpA
QCAtNDA5LDEzICszOTUsMTAgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmln
aW5LaQogICAgIAogICAgIGZ1bmN0aW9uIGZpbmlzaFBhcnNpbmdQcmVJbmNyZW1lbnQodG9rZW4s
IGxlZnQsIGV4dHJhQXJnKQogICAgIHsKLSAgICAgICAgbGV0IHB0ciA9IG5ldyBMZXRFeHByZXNz
aW9uKHRva2VuKTsKLSAgICAgICAgcHRyLmFyZ3VtZW50ID0gbmV3IE1ha2VQdHJFeHByZXNzaW9u
KHRva2VuLCBsZWZ0KTsKLSAgICAgICAgcHRyLmJvZHkgPSBuZXcgQ29tbWFFeHByZXNzaW9uKHRv
a2VuLCBbCi0gICAgICAgICAgICBlbWl0SW5jcmVtZW50KHRva2VuLCBwdHIsIGV4dHJhQXJnKSwK
LSAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVm
LndyYXAocHRyKSkKLSAgICAgICAgXSk7Ci0gICAgICAgIHJldHVybiBwdHI7CisgICAgICAgIGxl
dCByZWFkTW9kaWZ5V3JpdGUgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbih0b2tlbiwg
bGVmdCk7CisgICAgICAgIHJlYWRNb2RpZnlXcml0ZS5uZXdWYWx1ZUV4cCA9IGVtaXRJbmNyZW1l
bnQodG9rZW4sIHJlYWRNb2RpZnlXcml0ZS5vbGRWYWx1ZVJlZigpLCBleHRyYUFyZyk7CisgICAg
ICAgIHJlYWRNb2RpZnlXcml0ZS5yZXN1bHRFeHAgPSByZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVS
ZWYoKTsKKyAgICAgICAgcmV0dXJuIHJlYWRNb2RpZnlXcml0ZTsKICAgICB9CiAgICAgCiAgICAg
ZnVuY3Rpb24gcGFyc2VQcmVJbmNyZW1lbnQoKQpAQCAtNTc1LDYgKzU1OCwxMCBAQCBmdW5jdGlv
biBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBsaXN0LnB1c2goZWZmZWN0ZnVsRXhwcmVzc2lvbik7CiAgICAgICAgIH0KKyAgICAgICAg
aWYgKCFsaXN0Lmxlbmd0aCkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTGVuZ3RoIHNo
b3VsZCBuZXZlciBiZSB6ZXJvIik7CisgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAxKQorICAg
ICAgICAgICAgcmV0dXJuIGxpc3RbMF07CiAgICAgICAgIHJldHVybiBuZXcgQ29tbWFFeHByZXNz
aW9uKG9yaWdpbiwgbGlzdCk7CiAgICAgfQogICAgIApAQCAtNzYxLDE1ICs3NDgsMzAgQEAgZnVu
Y3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgIGZ1bmN0aW9uIHBhcnNl
RnVuY05hbWUoKQogICAgIHsKICAgICAgICAgaWYgKHRyeUNvbnN1bWUoIm9wZXJhdG9yIikpIHsK
LSAgICAgICAgICAgIGxldCB0b2tlbiA9IHRyeUNvbnN1bWUoIisiLCAiLSIsICIqIiwgIi8iLCAi
JSIsICJeIiwgIiYiLCAifCIsICI8IiwgIj4iLCAiPD0iLCAiPj0iLCAiPT0iLCAiKysiLCAiLS0i
LCAiJiIpOwotICAgICAgICAgICAgaWYgKHRva2VuKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRv
a2VuLnRleHQgIT0gIiYiIHx8ICF0cnlDb25zdW1lKCJbIikpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAib3BlcmF0b3IiICsgdG9rZW4udGV4dDsKKyAgICAgICAgICAgIGxldCB0b2tlbiA9
IGNvbnN1bWUoIisiLCAiLSIsICIqIiwgIi8iLCAiJSIsICJeIiwgIiYiLCAifCIsICI8IiwgIj4i
LCAiPD0iLCAiPj0iLCAiPT0iLCAiKysiLCAiLS0iLCAiJiIsICIuIik7CisgICAgICAgICAgICBp
ZiAodG9rZW4udGV4dCA9PSAiJiIpIHsKKyAgICAgICAgICAgICAgICBpZiAodHJ5Q29uc3VtZSgi
WyIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIl0iKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJvcGVyYXRvciZbXSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICh0cnlDb25zdW1lKCIuIikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAi
b3BlcmF0b3ImLiIgKyBjb25zdW1lS2luZCgiaWRlbnRpZmllciIpLnRleHQ7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICJvcGVyYXRvciYiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHRva2VuLnRleHQgPT0gIi4iKSB7CisgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICJvcGVy
YXRvci4iICsgY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKS50ZXh0OworICAgICAgICAgICAgICAg
IGlmICh0cnlDb25zdW1lKCI9IikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPSI7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh0b2tlbi50ZXh0ID09ICJbIikgewogICAgICAgICAgICAgICAgIGNvbnN1bWUoIl0i
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9yJltdIjsKKyAgICAgICAgICAgICAg
ICBsZXQgcmVzdWx0ID0gIm9wZXJhdG9yW10iOworICAgICAgICAgICAgICAgIGlmICh0cnlDb25z
dW1lKCI9IikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPSI7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxldCBuYW1l
ID0gY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKTsKLSAgICAgICAgICAgIHJldHVybiAib3BlcmF0
b3IgIiArIG5hbWU7CisgICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9yIiArIHRva2VuLnRleHQ7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIikudGV4
dDsKICAgICB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMJ
KHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBh
cmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywyNiBAQAogZnVuY3Rpb24gcHJlcGFy
ZShvcmlnaW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBu
ZXcgUHJvZ3JhbSgpOworICAgIAogICAgIHBhcnNlKHByb2dyYW0sICIvaW50ZXJuYWwvc3RkbGli
IiwgIm5hdGl2ZSIsIDI3LCBzdGFuZGFyZExpYnJhcnkpOwogICAgIHBhcnNlKHByb2dyYW0sIG9y
aWdpbiwgInVzZXIiLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KTsKLSAgICByZXNvbHZlTmFtZXMo
cHJvZ3JhbSk7Ci0gICAgcmVzb2x2ZVR5cGVEZWZzKHByb2dyYW0pOworICAgIAorICAgIGxldCBu
YW1lUmVzb2x2ZXIgPSBjcmVhdGVOYW1lUmVzb2x2ZXIocHJvZ3JhbSk7CisgICAgcmVzb2x2ZU5h
bWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIHJlc29sdmVOYW1lc0luUHJv
dG9jb2xzKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CisgICAgcmVzb2x2ZVR5cGVEZWZzSW5UeXBl
cyhwcm9ncmFtKTsKKyAgICByZXNvbHZlVHlwZURlZnNJblByb3RvY29scyhwcm9ncmFtKTsKKyAg
ICAvLyBGSVhNRTogTmVlZCB0byB2ZXJpZnkgdGhhdCBzdHJ1Y3RyZSBhcmUgbm90IGN5Y2xpYy4K
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MDQ0Cisg
ICAgc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycyhwcm9ncmFtKTsKKyAgICByZXNvbHZlTmFtZXNJ
bkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIHJlc29sdmVUeXBlRGVmc0lu
RnVuY3Rpb25zKHByb2dyYW0pOworICAgIAogICAgIGZsYXR0ZW5Qcm90b2NvbEV4dGVuZHMocHJv
Z3JhbSk7CiAgICAgY2hlY2socHJvZ3JhbSk7CiAgICAgY2hlY2tMaXRlcmFsVHlwZXMocHJvZ3Jh
bSk7CisgICAgcmVzb2x2ZVByb3BlcnRpZXMocHJvZ3JhbSk7CisgICAgY2hlY2tMaXRlcmFsVHlw
ZXMocHJvZ3JhbSk7CiAgICAgY2hlY2tQcm9ncmFtV3JhcHBlZChwcm9ncmFtKTsKICAgICBjaGVj
a1JldHVybnMocHJvZ3JhbSk7CiAgICAgY2hlY2tVbnJlYWNoYWJsZUNvZGUocHJvZ3JhbSk7CkBA
IC00MSw2ICs1NCw3IEBAIGZ1bmN0aW9uIHByZXBhcmUob3JpZ2luLCBsaW5lTnVtYmVyT2Zmc2UK
ICAgICBjaGVja1JlY3Vyc2lvbihwcm9ncmFtKTsKICAgICBjaGVja1Byb2dyYW1XcmFwcGVkKHBy
b2dyYW0pOwogICAgIGlubGluZShwcm9ncmFtKTsKKyAgICAKICAgICByZXR1cm4gcHJvZ3JhbTsK
IH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9ncmFtLmpzCShyZXZp
c2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9ncmFtLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxMCBAQCBjbGFzcyBQcm9ncmFtIGV4dGVuZHMg
Tm9kZSB7CiAgICAgICAgIHRoaXMuX3R5cGVzID0gbmV3IE1hcCgpOwogICAgICAgICB0aGlzLl9w
cm90b2NvbHMgPSBuZXcgTWFwKCk7CiAgICAgICAgIHRoaXMuX2Z1bmNJbnN0YW50aWF0b3IgPSBu
ZXcgRnVuY0luc3RhbnRpYXRvcih0aGlzKTsKKyAgICAgICAgdGhpcy5fZ2xvYmFsTmFtZUNvbnRl
eHQgPSBuZXcgTmFtZUNvbnRleHQoKTsKKyAgICAgICAgdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQu
cHJvZ3JhbSA9IHRoaXM7CisgICAgICAgIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0LnJlY29nbml6
ZUludHJpbnNpY3MoKTsKKyAgICAgICAgdGhpcy5pbnRyaW5zaWNzID0gdGhpcy5fZ2xvYmFsTmFt
ZUNvbnRleHQuaW50cmluc2ljczsKICAgICB9CiAgICAgCiAgICAgZ2V0IHRvcExldmVsU3RhdGVt
ZW50cygpIHsgcmV0dXJuIHRoaXMuX3RvcExldmVsU3RhdGVtZW50czsgfQpAQCAtNDAsNiArNDQs
NyBAQCBjbGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAgICAgZ2V0IHR5cGVzKCkgeyByZXR1
cm4gdGhpcy5fdHlwZXM7IH0KICAgICBnZXQgcHJvdG9jb2xzKCkgeyByZXR1cm4gdGhpcy5fcHJv
dG9jb2xzOyB9CiAgICAgZ2V0IGZ1bmNJbnN0YW50aWF0b3IoKSB7IHJldHVybiB0aGlzLl9mdW5j
SW5zdGFudGlhdG9yOyB9CisgICAgZ2V0IGdsb2JhbE5hbWVDb250ZXh0KCkgeyByZXR1cm4gdGhp
cy5fZ2xvYmFsTmFtZUNvbnRleHQ7IH0KICAgICAKICAgICBhZGQoc3RhdGVtZW50KQogICAgIHsK
QEAgLTUyLDEwICs1NywxMSBAQCBjbGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAgICAgICAg
IH0gZWxzZSBpZiAoc3RhdGVtZW50IGluc3RhbmNlb2YgVHlwZSkKICAgICAgICAgICAgIHRoaXMu
X3R5cGVzLnNldChzdGF0ZW1lbnQubmFtZSwgc3RhdGVtZW50KTsKICAgICAgICAgZWxzZSBpZiAo
c3RhdGVtZW50IGluc3RhbmNlb2YgUHJvdG9jb2wpCi0gICAgICAgICAgICB0aGlzLl9wcm90b2Nv
bHMuc2V0KHN0YXRlbWVudC5hZGQsIHN0YXRlbWVudCk7CisgICAgICAgICAgICB0aGlzLl9wcm90
b2NvbHMuc2V0KHN0YXRlbWVudC5uYW1lLCBzdGF0ZW1lbnQpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlN0YXRlbWVudCBpcyBub3QgYSBmdW5jdGlvbiBvciB0
eXBlOiAiICsgc3RhdGVtZW50KTsKICAgICAgICAgdGhpcy5fdG9wTGV2ZWxTdGF0ZW1lbnRzLnB1
c2goc3RhdGVtZW50KTsKKyAgICAgICAgdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQuYWRkKHN0YXRl
bWVudCk7CiAgICAgfQogICAgIAogICAgIHRvU3RyaW5nKCkKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
anMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworY2xhc3MgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7Cisg
ICAgY29uc3RydWN0b3Iob3JpZ2luLCBiYXNlKQorICAgIHsKKyAgICAgICAgc3VwZXIob3JpZ2lu
KTsKKyAgICAgICAgdGhpcy5iYXNlID0gYmFzZTsKKyAgICB9CisgICAgCisgICAgZ2V0IHJlc3Vs
dFR5cGUoKSB7IHJldHVybiB0aGlzLnJlc3VsdFR5cGVGb3JHZXQgPyB0aGlzLnJlc3VsdFR5cGVG
b3JHZXQgOiB0aGlzLnJlc3VsdFR5cGVGb3JBbmQ7IH0KKyAgICAKKyAgICByZXdyaXRlQWZ0ZXJD
bG9uaW5nKCkKKyAgICB7CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIG5vZGUuYmFzZS5pc0xW
YWx1ZSB3aWxsIG9ubHkgcmV0dXJuIHRydWUgaWYgaXQncyBwb3NzaWJsZSB0byBnZXQgYSBwb2lu
dGVyIHRvIGl0LAorICAgICAgICAvLyBzaW5jZSB3ZSB3aWxsIG5vIGxvbmdlciBzZWUgYW55IERv
dEV4cHJlc3Npb25zIG9yIEluZGV4RXhwcmVzc2lvbnMuIEFsc28sIG5vZGUgaXMgYSBuZXdseSBj
cmVhdGVkCisgICAgICAgIC8vIG5vZGUgYW5kIGV2ZXJ5dGhpbmcgYmVuZWF0aCBpdCBpcyBuZXds
eSBjcmVhdGVkLCBzbyB3ZSBjYW4gZWRpdCBpdCBpbi1wbGFjZS4KKyAgICAgICAgCisgICAgICAg
IGlmICgodGhpcy5iYXNlLmlzTFZhbHVlIHx8IHRoaXMuYmFzZVR5cGUuaXNSZWYpICYmIHRoaXMu
Y2FsbEZvckFuZCkKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9u
KHRoaXMub3JpZ2luLCB0aGlzLmNhbGxGb3JBbmQpOworICAgICAgICAKKyAgICAgICAgaWYgKHRo
aXMuY2FsbEZvckdldCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGxGb3JHZXQ7CisgICAg
ICAgIAorICAgICAgICBpZiAoIXRoaXMuY2FsbEZvckFuZCkKKyAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiOiBQcm9wZXJ0eSBhY2Nlc3Mgd2l0
aG91dCBnZXR0ZXIgYW5kIGFuZGVyOiAiICsgdGhpcyk7CisgICAgICAgIAorICAgICAgICBsZXQg
YW5vblZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZSh0aGlzLm9yaWdpbiwgdGhpcy5iYXNlVHlw
ZSk7CisgICAgICAgIHRoaXMuY2FsbEZvckFuZC5hcmd1bWVudExpc3RbMF0gPSB0aGlzLmJhc2VU
eXBlLnVuaWZ5Tm9kZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKHRoaXMub3JpZ2luLCBWYXJpYWJs
ZVJlZi53cmFwKGFub25WYXIpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Npb24o
dGhpcy5vcmlnaW4sIFsKKyAgICAgICAgICAgIGFub25WYXIsCisgICAgICAgICAgICBuZXcgQXNz
aWdubWVudCh0aGlzLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChhbm9uVmFyKSwgdGhpcy5iYXNl
LCB0aGlzLmJhc2VUeXBlKSwKKyAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24o
dGhpcy5vcmlnaW4sIHRoaXMuY2FsbEZvckFuZCkKKyAgICAgICAgXSk7CisgICAgfQorICAgIAor
ICAgIHVwZGF0ZUNhbGxzQWZ0ZXJDaGFuZ2luZ0Jhc2UoKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMuY2FsbEZvckdldCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvckdldC5hcmd1bWVudExpc3Rb
MF0gPSB0aGlzLmJhc2U7CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAg
ICB0aGlzLmNhbGxGb3JBbmQuYXJndW1lbnRMaXN0WzBdID0gdGhpcy5iYXNlVHlwZS5hcmd1bWVu
dEZvckFuZE92ZXJsb2FkKHRoaXMub3JpZ2luLCB0aGlzLmJhc2UpOworICAgICAgICBpZiAodGhp
cy5jYWxsRm9yU2V0KQorICAgICAgICAgICAgdGhpcy5jYWxsRm9yU2V0LmFyZ3VtZW50TGlzdFsw
XSA9IHRoaXMuYmFzZTsKKyAgICB9CisgICAgCisgICAgZW1pdEdldChiYXNlKQorICAgIHsKKyAg
ICAgICAgbGV0IHJlc3VsdCA9IHRoaXMudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICBy
ZXN1bHQuYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC51cGRhdGVDYWxsc0FmdGVyQ2hhbmdp
bmdCYXNlKCk7CisgICAgICAgIHJldHVybiByZXN1bHQucmV3cml0ZUFmdGVyQ2xvbmluZygpOwor
ICAgIH0KKyAgICAKKyAgICBlbWl0U2V0KGJhc2UsIHZhbHVlKQorICAgIHsKKyAgICAgICAgbGV0
IHJlc3VsdCA9IHRoaXMudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICBpZiAoIXJlc3Vs
dC5jYWxsRm9yU2V0KQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IodGhpcy5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGVtaXQgc2V0IGJlY2F1c2U6ICIgKyB0aGlzLmVycm9y
Rm9yU2V0LnR5cGVFcnJvck1lc3NhZ2UpOworICAgICAgICByZXN1bHQuYmFzZSA9IGJhc2U7Cisg
ICAgICAgIHJlc3VsdC51cGRhdGVDYWxsc0FmdGVyQ2hhbmdpbmdCYXNlKCk7CisgICAgICAgIHJl
c3VsdC5jYWxsRm9yU2V0LmFyZ3VtZW50TGlzdFtyZXN1bHQuY2FsbEZvclNldC5hcmd1bWVudExp
c3QubGVuZ3RoIC0gMV0gPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5jYWxsRm9yU2V0
OworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVy
dHlSZXNvbHZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Qcm9wZXJ0eVJlc29sdmVyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Byb3BlcnR5UmVzb2x2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworY2xhc3MgUHJvcGVydHlSZXNvbHZlciBleHRlbmRzIFZpc2l0b3Igewor
ICAgIF92aXNpdFByb3BlcnR5QWNjZXNzKG5vZGUpCisgICAgeworICAgICAgICBsZXQgbmV3Tm9k
ZSA9IG5vZGUudmlzaXQobmV3IE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIoKSk7CisgICAgICAg
IG5ld05vZGUudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUuYmVjb21lKG5ld05vZGUpOworICAg
IH0KKyAgICAKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRo
aXMuX3Zpc2l0UHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5k
ZXhFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl92aXNpdFByb3BlcnR5QWNj
ZXNzKG5vZGUpOworICAgIH0KKyAgICAKKyAgICBfaGFuZGxlUmVhZE1vZGlmeVdyaXRlKG5vZGUp
CisgICAgeworICAgICAgICBsZXQgdHlwZSA9IG5vZGUub2xkVmFsdWVWYXIudHlwZTsKKyAgICAg
ICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIHR5cGUiKTsK
KyAgICAgICAgbGV0IHNpbXBsZUxIUyA9IG5vZGUubFZhbHVlLnZpc2l0KG5ldyBOb3JtYWxVc2VQ
cm9wZXJ0eVJlc29sdmVyKCkpOworICAgICAgICBpZiAoc2ltcGxlTEhTLmlzTFZhbHVlKSB7Cisg
ICAgICAgICAgICBsZXQgcHRyVHlwZSA9IG5ldyBQdHJUeXBlKG5vZGUub3JpZ2luLCBzaW1wbGVM
SFMuYWRkcmVzc1NwYWNlLCB0eXBlKTsKKyAgICAgICAgICAgIGxldCBwdHJWYXIgPSBuZXcgQW5v
bnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIHB0clR5cGUpOworICAgICAgICAgICAgbm9kZS5i
ZWNvbWUobmV3IENvbW1hRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgWworICAgICAgICAgICAgICAg
IG5vZGUub2xkVmFsdWVWYXIsIG5vZGUubmV3VmFsdWVWYXIsIHB0clZhciwKKyAgICAgICAgICAg
ICAgICBuZXcgQXNzaWdubWVudCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIFZh
cmlhYmxlUmVmLndyYXAocHRyVmFyKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IE1ha2VQdHJF
eHByZXNzaW9uKG5vZGUub3JpZ2luLCBzaW1wbGVMSFMpLCBwdHJUeXBlKSwKKyAgICAgICAgICAg
ICAgICBuZXcgQXNzaWdubWVudCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5v
ZGUub2xkVmFsdWVSZWYoKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IERlcmVmZXJlbmNlRXhw
cmVzc2lvbihub2RlLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChwdHJWYXIpKSwgdHlwZSksCisg
ICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIG5vZGUubmV3VmFsdWVS
ZWYoKSwgbm9kZS5uZXdWYWx1ZUV4cCwgdHlwZSksCisgICAgICAgICAgICAgICAgbmV3IEFzc2ln
bm1lbnQoCisgICAgICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBuZXcgRGVyZWZlcmVuY2VF
eHByZXNzaW9uKG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHB0clZhcikpLAorICAgICAg
ICAgICAgICAgICAgICBub2RlLm5ld1ZhbHVlUmVmKCksIHR5cGUpLAorICAgICAgICAgICAgICAg
IG5vZGUucmVzdWx0RXhwCisgICAgICAgICAgICBdKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUuYmFzZSwgbm9kZS5sVmFsdWUu
YmFzZVR5cGUpOworICAgICAgICByZXN1bHQubmV3VmFsdWVFeHAgPSBuZXcgQ29tbWFFeHByZXNz
aW9uKG5vZGUub3JpZ2luLCBbCisgICAgICAgICAgICBub2RlLm9sZFZhbHVlVmFyLCBub2RlLm5l
d1ZhbHVlVmFyLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIG5vZGUu
b2xkVmFsdWVSZWYoKSwgbm9kZS5sVmFsdWUuZW1pdEdldChyZXN1bHQub2xkVmFsdWVSZWYoKSks
IHR5cGUpLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIG5vZGUubmV3
VmFsdWVSZWYoKSwgbm9kZS5uZXdWYWx1ZUV4cCwgdHlwZSksCisgICAgICAgICAgICBub2RlLmxW
YWx1ZS5lbWl0U2V0KHJlc3VsdC5vbGRWYWx1ZVJlZigpLCBub2RlLm5ld1ZhbHVlUmVmKCkpCisg
ICAgICAgIF0pOworICAgICAgICByZXN1bHQucmVzdWx0RXhwID0gbm9kZS5uZXdWYWx1ZVJlZigp
OworICAgICAgICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUocmVzdWx0KTsKKyAgICAgICAg
bm9kZS5iZWNvbWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdmlzaXRSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLm5ld1ZhbHVlRXhwLnZpc2l0
KHRoaXMpOworICAgICAgICBub2RlLnJlc3VsdEV4cC52aXNpdCh0aGlzKTsKKyAgICAgICAgdGhp
cy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEFz
c2lnbm1lbnQobm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUucmhzLnZpc2l0KHRoaXMpOworICAg
ICAgICAKKyAgICAgICAgbGV0IHNpbXBsZUxIUyA9IG5vZGUubGhzLnZpc2l0KG5ldyBOb3JtYWxV
c2VQcm9wZXJ0eVJlc29sdmVyKCkpOworICAgICAgICBpZiAoc2ltcGxlTEhTLmlzTFZhbHVlKSB7
CisgICAgICAgICAgICBub2RlLmxocy5iZWNvbWUoc2ltcGxlTEhTKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCEobm9kZS5saHMgaW5zdGFu
Y2VvZiBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJVbmV4cGVjdGVkIGxocyB0eXBlOiAiICsgbm9kZS5saHMuY29uc3RydWN0b3IubmFtZSk7
CisgICAgICAgIAorICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24obm9kZS5vcmlnaW4sIG5vZGUubGhzLmJhc2UsIG5vZGUubGhzLmJhc2VUeXBlKTsKKyAg
ICAgICAgbGV0IHJlc3VsdFZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwg
bm9kZS50eXBlKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlRXhwID0gbmV3IENvbW1hRXhwcmVz
c2lvbihub2RlLm9yaWdpbiwgWworICAgICAgICAgICAgcmVzdWx0VmFyLAorICAgICAgICAgICAg
bmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAocmVzdWx0VmFyKSwg
bm9kZS5yaHMsIG5vZGUudHlwZSksCisgICAgICAgICAgICBub2RlLmxocy5lbWl0U2V0KHJlc3Vs
dC5vbGRWYWx1ZVJlZigpLCBWYXJpYWJsZVJlZi53cmFwKHJlc3VsdFZhcikpCisgICAgICAgIF0p
OworICAgICAgICByZXN1bHQucmVzdWx0RXhwID0gVmFyaWFibGVSZWYud3JhcChyZXN1bHRWYXIp
OworICAgICAgICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUocmVzdWx0KTsKKyAgICAgICAg
bm9kZS5iZWNvbWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdmlzaXRNYWtlUHRyRXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXRNYWtlUHRyRXhwcmVzc2lvbihu
b2RlKTsKKyAgICAgICAgaWYgKCFub2RlLmxWYWx1ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAgIHRo
cm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk5vdCBhbiBsdmFs
dWU6ICIgKyBub2RlLmxWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0TWFrZUFycmF5UmVm
RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXRNYWtlQXJyYXlSZWZF
eHByZXNzaW9uKG5vZGUpOworICAgICAgICBpZiAoIW5vZGUubFZhbHVlLmlzTFZhbHVlKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
Tm90IGFuIGx2YWx1ZTogIiArIG5vZGUubFZhbHVlKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMzYsNiArMzYsMTkgQEAgY2xhc3MgUHRyVHlwZSBleHRlbmRzIFJlZmVyZW5jZVR5cGUgewog
ICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQs
IG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CiAgICAgCisgICAgYXJndW1lbnRGb3JBbmRPdmVy
bG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Io
b3JpZ2luLm9yaWdpblN0cmluZywgIlBvaW50ZXIgc3Vic2NyaXB0IGlzIG5vdCB2YWxpZCIpOwor
ICAgIH0KKyAgICBhcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChvcmlnaW4sIHR5cGUpCisgICAg
eworICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9p
bnRlciBzdWJzY3JpcHQgaXMgbm90IHZhbGlkIik7CisgICAgfQorICAgIHJldHVyblR5cGVGcm9t
QW5kT3ZlcmxvYWQob3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5
cGU7CisgICAgfQorCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMu
ZWxlbWVudFR5cGUgKyAiXiAiICsgdGhpcy5hZGRyZXNzU3BhY2U7CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24uanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0
cmljdCI7CisKK2NsYXNzIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNz
aW9uIHsKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGxWYWx1ZSwgdHlwZSA9IG51bGwpCisgICAg
eworICAgICAgICBzdXBlcihvcmlnaW4pOworICAgICAgICB0aGlzLl9sVmFsdWUgPSBsVmFsdWU7
CisgICAgICAgIHRoaXMub2xkVmFsdWVWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUob3JpZ2lu
LCB0eXBlKTsKKyAgICAgICAgdGhpcy5uZXdWYWx1ZVZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJs
ZShvcmlnaW4sIHR5cGUpOworICAgICAgICB0aGlzLm5ld1ZhbHVlRXhwID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5yZXN1bHRFeHAgPSBudWxsOworICAgIH0KKyAgICAKKyAgICBnZXQgbFZhbHVlKCkg
eyByZXR1cm4gdGhpcy5fbFZhbHVlOyB9CisgICAgCisgICAgb2xkVmFsdWVSZWYoKSB7IHJldHVy
biBWYXJpYWJsZVJlZi53cmFwKHRoaXMub2xkVmFsdWVWYXIpOyB9CisgICAgbmV3VmFsdWVSZWYo
KSB7IHJldHVybiBWYXJpYWJsZVJlZi53cmFwKHRoaXMubmV3VmFsdWVWYXIpOyB9CisgICAgCisg
ICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJSTVcoIiArIHRoaXMubFZhbHVl
ICsgIiwgIiArIHRoaXMub2xkVmFsdWVWYXIgKyAiLCAiICsgdGhpcy5uZXdWYWx1ZVZhciArICIs
ICIgKyB0aGlzLm5ld1ZhbHVlRXhwICsgIiwgIiArIHRoaXMucmVzdWx0RXhwICsgIikiOworICAg
IH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU5hbWVz
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVO
YW1lcy5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUmVzb2x2ZU5hbWVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCwyOCBAQAogICov
CiAidXNlIHN0cmljdCI7CiAKLWZ1bmN0aW9uIHJlc29sdmVOYW1lcyhwcm9ncmFtKQorZnVuY3Rp
b24gY3JlYXRlTmFtZVJlc29sdmVyKHByb2dyYW0pCiB7Ci0gICAgcHJvZ3JhbS52aXNpdChuZXcg
TmFtZVJlc29sdmVyKCkpOworICAgIHJldHVybiBuZXcgTmFtZVJlc29sdmVyKHByb2dyYW0uZ2xv
YmFsTmFtZUNvbnRleHQpOwogfQorCitmdW5jdGlvbiByZXNvbHZlTmFtZXNJblR5cGVzKHByb2dy
YW0sIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0udHlwZXMu
dmFsdWVzKCkpCisgICAgICAgIG5hbWVSZXNvbHZlci5kb1N0YXRlbWVudCh0eXBlKTsKK30KKwor
ZnVuY3Rpb24gcmVzb2x2ZU5hbWVzSW5Qcm90b2NvbHMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKQor
eworICAgIGZvciAobGV0IHByb3RvY29sIG9mIHByb2dyYW0ucHJvdG9jb2xzLnZhbHVlcygpKQor
ICAgICAgICBuYW1lUmVzb2x2ZXIuZG9TdGF0ZW1lbnQocHJvdG9jb2wpOworfQorCitmdW5jdGlv
biByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpCit7CisgICAg
Zm9yIChsZXQgZnVuY3Mgb2YgcHJvZ3JhbS5mdW5jdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAg
Zm9yIChsZXQgZnVuYyBvZiBmdW5jcykKKyAgICAgICAgICAgIG5hbWVSZXNvbHZlci5kb1N0YXRl
bWVudChmdW5jKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcwkocmV2aXNpb24gMjIyMTIzKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogCiBmdW5jdGlvbiByZXNvbHZlT3Zlcmxv
YWRJbXBsKGZ1bmN0aW9ucywgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlw
ZSkKIHsKKyAgICBpZiAoIWZ1bmN0aW9ucykKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxs
IGZ1bmN0aW9uczsgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodCBieSB0aGUgY2FsbGVyLiIp
OworICAgIAogICAgIGxldCBmYWlsdXJlcyA9IFtdOwogICAgIGxldCBzdWNjZXNzZXMgPSBbXTsK
ICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmN0aW9ucykgewpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVByb3BlcnRpZXMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVByb3BlcnRpZXMuanMJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVByb3BlcnRpZXMuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCisvLyBUaGlzIHR1cm5zIERvdEV4
cHJlc3Npb24gYW5kIEluZGV4RXhwcmVzc2lvbiBpbnRvIGNhbGxzIHRvIGdldHRlcnMgKG9wZXJh
dG9yLmZpZWxkIGFuZCBvcGVyYXRvcltdKSwKKy8vIHNldHRlcnMgKG9wZXJhdG9yLmZpZWxkPSBh
bmQgb3BlcmF0b3JbXT0pLCBhbmQgYW5kZXJzIChvcGVyYXRvciYuZmllbGQgYW5kIG9wZXJhdG9y
JltdKS4gVGhpcyBpbnZvbHZlcworLy8gdHJhbnNmb3JtaW5nIGFzc2lnbm1lbnRzIGFuZCBSTVcn
cyB0byBkbyBsdmFsdWUgZW11bGF0aW9uLgorZnVuY3Rpb24gcmVzb2x2ZVByb3BlcnRpZXMocHJv
Z3JhbSkKK3sKKyAgICBwcm9ncmFtLnZpc2l0KG5ldyBQcm9wZXJ0eVJlc29sdmVyKCkpOworfQpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVR5cGVEZWZzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVUeXBlRGVm
cy5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmVzb2x2ZVR5cGVEZWZzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCwyNiBAQAogICov
CiAidXNlIHN0cmljdCI7CiAKLWZ1bmN0aW9uIHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKQorZnVu
Y3Rpb24gcmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyhwcm9ncmFtKQogewotICAgIHByb2dyYW0udmlz
aXQobmV3IFR5cGVEZWZSZXNvbHZlcigpKTsKKyAgICBsZXQgcmVzb2x2ZXIgPSBuZXcgVHlwZURl
ZlJlc29sdmVyKCk7CisgICAgZm9yIChsZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygp
KQorICAgICAgICB0eXBlLnZpc2l0KHJlc29sdmVyKTsKK30KKworZnVuY3Rpb24gcmVzb2x2ZVR5
cGVEZWZzSW5Qcm90b2NvbHMocHJvZ3JhbSkKK3sKKyAgICBsZXQgcmVzb2x2ZXIgPSBuZXcgVHlw
ZURlZlJlc29sdmVyKCk7CisgICAgZm9yIChsZXQgcHJvdG9jb2wgb2YgcHJvZ3JhbS5wcm90b2Nv
bHMudmFsdWVzKCkpCisgICAgICAgIHByb3RvY29sLnZpc2l0KHJlc29sdmVyKTsKK30KKworZnVu
Y3Rpb24gcmVzb2x2ZVR5cGVEZWZzSW5GdW5jdGlvbnMocHJvZ3JhbSkKK3sKKyAgICBsZXQgcmVz
b2x2ZXIgPSBuZXcgVHlwZURlZlJlc29sdmVyKCk7CisgICAgZm9yIChsZXQgZnVuY3Mgb2YgcHJv
Z3JhbS5mdW5jdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5j
cykKKyAgICAgICAgICAgIGZ1bmMudmlzaXQocmVzb2x2ZXIpOworICAgIH0KIH0KIApJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXR1cm5DaGVja2VyLmpzCShyZXZp
c2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXR1cm5DaGVj
a2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIGNsYXNzIFJldHVybkNoZWNr
ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKIAogICAgIF9pc0Jvb2xDYXN0RnJvbUxpdGVyYWxUcnVlKG5v
ZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbm9kZS5pc0Nhc3QgJiYgbm9kZS5yZXR1cm5UeXBl
IGluc3RhbmNlb2YgVHlwZVJlZiAmJiBub2RlLnJldHVyblR5cGUuZXF1YWxzKHRoaXMuX3Byb2dy
YW0uaW50cmluc2ljcy5ib29sKSAmJiBub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGggPT0gMSAmJiBu
b2RlLmFyZ3VtZW50TGlzdFswXS5saXN0Lmxlbmd0aCA9PSAxICYmIG5vZGUuYXJndW1lbnRMaXN0
WzBdLmxpc3RbMF0gaW5zdGFuY2VvZiBCb29sTGl0ZXJhbCAmJiBub2RlLmFyZ3VtZW50TGlzdFsw
XS5saXN0WzBdLnZhbHVlOworICAgICAgICByZXR1cm4gbm9kZS5pc0Nhc3QgJiYgbm9kZS5yZXR1
cm5UeXBlIGluc3RhbmNlb2YgVHlwZVJlZiAmJiBub2RlLnJldHVyblR5cGUuZXF1YWxzKHRoaXMu
X3Byb2dyYW0uaW50cmluc2ljcy5ib29sKSAmJiBub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGggPT0g
MSAmJiBub2RlLmFyZ3VtZW50TGlzdFswXSBpbnN0YW5jZW9mIEJvb2xMaXRlcmFsICYmIG5vZGUu
YXJndW1lbnRMaXN0WzBdLnZhbHVlOwogICAgIH0KIAogICAgIHZpc2l0V2hpbGVMb29wKG5vZGUp
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkocmV2aXNp
b24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNyw5IEBACiAvLyBGSVhNRTogVGhpcyBzaG91bGQg
aGF2ZSBzZW5zaWJsZSBiZWhhdmlvciB3aGVuIGl0IGVuY291bnRlcnMgZGVmaW5pdGlvbnMgdGhh
dCBpdCBjYW5ub3QgaGFuZGxlLiBSaWdodAogLy8gbm93IHdlIGFyZSBoYWNraXNobHkgcHJldmVu
dGluZyB0aGlzIGJ5IHdyYXBwaW5nIHRoaW5ncyBpbiBUeXBlUmVmLiBUaGF0J3MgcHJvYmFibHkg
d3JvbmcuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjA4
Ci1jbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKK2NsYXNzIFJld3JpdGVyIHsK
ICAgICBjb25zdHJ1Y3RvcigpCiAgICAgewotICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlz
Ll9tYXBwaW5nID0gbmV3IE1hcCgpOwogICAgIH0KICAgICAKQEAgLTk5LDcgKzk4LDcgQEAgY2xh
c3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgIGxldCByZXN1bHQgPSBu
ZXcgVmFyaWFibGVEZWNsKAogICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUubmFtZSwKICAg
ICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKSwKLSAgICAgICAgICAgIG5vZGUuaW5pdGlh
bGl6ZXIgPyBub2RlLmluaXRpYWxpemVyLnZpc2l0KHRoaXMpIDogbnVsbCk7CisgICAgICAgICAg
ICBOb2RlLnZpc2l0KG5vZGUuaW5pdGlhbGl6ZXIsIHRoaXMpKTsKICAgICAgICAgdGhpcy5fbWFw
Tm9kZShub2RlLCByZXN1bHQpOwogICAgICAgICByZXN1bHQuZVB0ciA9IG5vZGUuZVB0cjsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEzMSw3ICsxMzAsNyBAQCBjbGFzcyBSZXdyaXRlciBl
eHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdFR5cGVSZWYobm9kZSkKICAgICB7CiAgICAg
ICAgIGxldCByZXN1bHQgPSBuZXcgVHlwZVJlZihub2RlLm9yaWdpbiwgbm9kZS5uYW1lLCBub2Rl
LnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhp
cykpKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQo
dGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBl
LCB0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0xNjMsMjQg
KzE2Miw1MyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNp
dEFzc2lnbm1lbnQobm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXNzaWdu
bWVudChub2RlLm9yaWdpbiwgbm9kZS5saHMudmlzaXQodGhpcyksIG5vZGUucmhzLnZpc2l0KHRo
aXMpKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQo
dGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBl
LCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdmlzaXRS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0
ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubFZhbHVl
LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgcmVzdWx0Lm9sZFZhbHVlVmFyID0gbm9kZS5vbGRWYWx1
ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlVmFyID0gbm9kZS5uZXdW
YWx1ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlRXhwID0gbm9kZS5u
ZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdEV4cCA9IG5vZGUu
cmVzdWx0RXhwLnZpc2l0KHRoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAg
bGV0IHJlc3VsdCA9IG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUu
cHRyLnZpc2l0KHRoaXMpKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2Rl
LnR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlz
aXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAg
CisgICAgX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQsIG5vZGUpCisgICAg
eworICAgICAgICByZXN1bHQucG9zc2libGVHZXRPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlR2V0
T3ZlcmxvYWRzOworICAgICAgICByZXN1bHQucG9zc2libGVTZXRPdmVybG9hZHMgPSBub2RlLnBv
c3NpYmxlU2V0T3ZlcmxvYWRzOworICAgICAgICByZXN1bHQucG9zc2libGVBbmRPdmVybG9hZHMg
PSBub2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzOworICAgICAgICByZXN1bHQuYmFzZVR5cGUgPSBO
b2RlLnZpc2l0KG5vZGUuYmFzZVR5cGUsIHRoaXMpOworICAgICAgICByZXN1bHQuY2FsbEZvckdl
dCA9IE5vZGUudmlzaXQobm9kZS5jYWxsRm9yR2V0LCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LnJl
c3VsdFR5cGVGb3JHZXQgPSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckdldCwgdGhpcyk7
CisgICAgICAgIHJlc3VsdC5jYWxsRm9yQW5kID0gTm9kZS52aXNpdChub2RlLmNhbGxGb3JBbmQs
IHRoaXMpOworICAgICAgICByZXN1bHQucmVzdWx0VHlwZUZvckFuZCA9IE5vZGUudmlzaXQobm9k
ZS5yZXN1bHRUeXBlRm9yQW5kLCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LmNhbGxGb3JTZXQgPSBO
b2RlLnZpc2l0KG5vZGUuY2FsbEZvclNldCwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5lcnJvckZv
clNldCA9IG5vZGUuZXJyb3JGb3JTZXQ7CisgICAgICAgIHJlc3VsdC51cGRhdGVDYWxsc0FmdGVy
Q2hhbmdpbmdCYXNlKCk7CisgICAgfQorICAgIAogICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2Rl
KQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBEb3RFeHByZXNzaW9uKG5vZGUub3Jp
Z2luLCBub2RlLnN0cnVjdC52aXNpdCh0aGlzKSwgbm9kZS5maWVsZE5hbWUpOwotICAgICAgICBy
ZXN1bHQuc3RydWN0VHlwZSA9IG5vZGUuc3RydWN0VHlwZSA/IG5vZGUuc3RydWN0VHlwZS52aXNp
dCh0aGlzKSA6IG51bGw7Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmV3cml0ZSBmaWVs
ZCwgc2luY2UgdGhpcyBpcyBhIGRlZXAgcmVmZXJlbmNlIGdvaW5nIG91dCBvZiB0aGUgZnVuY3Rp
b24uCi0gICAgICAgIC8vIEFsc28sIHRoaXMgaXMgc2V0IHVwIGR1cmluZyBpbmxpbmluZywgc28g
d2UncmUgYWxyZWFkeSBmdWxseSBtb25vbW9ycGhpc2VkLgotICAgICAgICByZXN1bHQuZmllbGQg
PSBub2RlLmZpZWxkOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24ocmVzdWx0LCBub2RlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQg
PSBuZXcgSW5kZXhFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmFycmF5LnZpc2l0KHRoaXMp
LCBub2RlLmluZGV4LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uKHJlc3VsdCwgbm9kZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIApAQCAtMjE2LDcgKzI0NCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlz
aXRvckJhc2UgewogICAgIAogICAgIHZpc2l0UmV0dXJuKG5vZGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbmV3IFJldHVybihub2RlLm9yaWdpbiwgbm9kZS52YWx1ZSA/IG5vZGUudmFsdWUudmlz
aXQodGhpcykgOiBudWxsKTsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm4obm9kZS5vcmlnaW4s
IE5vZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcykpOwogICAgIH0KICAgICAKICAgICB2aXNpdENv
bnRpbnVlKG5vZGUpCkBAIC0yNDAsNyArMjY4LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBW
aXNpdG9yQmFzZSB7CiAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9kZSkKICAgICB7CiAg
ICAgICAgIGxldCByZXN1bHQgPSBuZXcgbm9kZS5jb25zdHJ1Y3Rvcihub2RlLm9yaWdpbiwgbm9k
ZS52YWx1ZSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZp
c2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUu
dHlwZSwgdGhpcyk7CiAgICAgICAgIHJlc3VsdC5wcmVmZXJyZWRUeXBlID0gbm9kZS5wcmVmZXJy
ZWRUeXBlLnZpc2l0KHRoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI2
MSw3ICsyODksNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2
aXNpdE51bGxUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE51bGxU
eXBlKG5vZGUub3JpZ2luKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2Rl
LnR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlz
aXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAg
LTI4MCw3ICszMDgsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAg
ICAgICAgcmVzdWx0LnBvc3NpYmxlT3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZU92ZXJsb2FkczsK
ICAgICAgICAgaWYgKG5vZGUuaXNDYXN0KQogICAgICAgICAgICAgcmVzdWx0LnNldENhc3REYXRh
KG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKSk7Ci0gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBl
ID0gbm9kZS5yZXN1bHRUeXBlID8gbm9kZS5yZXN1bHRUeXBlLnZpc2l0KHRoaXMpIDogbnVsbDsK
KyAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZSwg
dGhpcyk7CiAgICAgICAgIHJlc3VsdC5yZXN1bHRFUHRyID0gbm9kZS5yZXN1bHRFUHRyOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI5MCw3ICszMTgsNyBAQCBjbGFzcyBSZXdy
aXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBDYWxs
RXhwcmVzc2lvbigKICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm5hbWUsCiAgICAgICAg
ICAgICBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQu
dmlzaXQodGhpcykpLAotICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFyZ3VtZW50
ID0+IGFyZ3VtZW50LnZpc2l0KHRoaXMpKSk7CisgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlz
dC5tYXAoYXJndW1lbnQgPT4gTm9kZS52aXNpdChhcmd1bWVudCwgdGhpcykpKTsKICAgICAgICAg
cmV0dXJuIHRoaXMucHJvY2Vzc0Rlcml2ZWRDYWxsRGF0YShub2RlLCByZXN1bHQpOwogICAgIH0K
ICAgICAKQEAgLTI5OCw3ICszMjYsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JC
YXNlIHsKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRnVuY3Rpb25MaWtlQmxvY2so
CiAgICAgICAgICAgICBub2RlLm9yaWdpbiwKLSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZSA/
IG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKSA6IG51bGwsCisgICAgICAgICAgICBOb2RlLnZp
c2l0KG5vZGUucmV0dXJuVHlwZSwgdGhpcyksCiAgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlz
dC5tYXAoYXJndW1lbnQgPT4gYXJndW1lbnQudmlzaXQodGhpcykpLAogICAgICAgICAgICAgbm9k
ZS5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMpKSwKICAg
ICAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKSk7CkBAIC0zMTUsNyArMzQzLDcgQEAgY2xh
c3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAKICAgICB2aXNpdElmU3RhdGVtZW50
KG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IElmU3RhdGVtZW50KG5vZGUub3JpZ2lu
LCBub2RlLmNvbmRpdGlvbmFsLnZpc2l0KHRoaXMpLCBub2RlLmJvZHkudmlzaXQodGhpcyksIG5v
ZGUuZWxzZUJvZHkgPyBub2RlLmVsc2VCb2R5LnZpc2l0KHRoaXMpIDogdW5kZWZpbmVkKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBJZlN0YXRlbWVudChub2RlLm9yaWdpbiwgbm9kZS5jb25kaXRpb25h
bC52aXNpdCh0aGlzKSwgbm9kZS5ib2R5LnZpc2l0KHRoaXMpLCBOb2RlLnZpc2l0KG5vZGUuZWxz
ZUJvZHksIHRoaXMpKTsKICAgICB9CiAKICAgICB2aXNpdFdoaWxlTG9vcChub2RlKQpAQCAtMzMx
LDIyICszNTksMjQgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAg
dmlzaXRGb3JMb29wKG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEZvckxvb3Aobm9k
ZS5vcmlnaW4sCi0gICAgICAgICAgICBub2RlLmluaXRpYWxpemF0aW9uID8gbm9kZS5pbml0aWFs
aXphdGlvbi52aXNpdCh0aGlzKSA6IHVuZGVmaW5lZCwKLSAgICAgICAgICAgIG5vZGUuY29uZGl0
aW9uID8gbm9kZS5jb25kaXRpb24udmlzaXQodGhpcykgOiB1bmRlZmluZWQsCi0gICAgICAgICAg
ICBub2RlLmluY3JlbWVudCA/IG5vZGUuaW5jcmVtZW50LnZpc2l0KHRoaXMpIDogdW5kZWZpbmVk
LAorICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRpYWxpemF0aW9uLCB0aGlzKSwKKyAg
ICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5jb25kaXRpb24sIHRoaXMpLAorICAgICAgICAgICAg
Tm9kZS52aXNpdChub2RlLmluY3JlbWVudCwgdGhpcyksCiAgICAgICAgICAgICBub2RlLmJvZHku
dmlzaXQodGhpcykpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkK
KyAgICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewotICAgICAgICBsZXQgcmVz
dWx0ID0gbmV3IExldEV4cHJlc3Npb24obm9kZS5vcmlnaW4pOwotICAgICAgICByZXN1bHQuaW5k
ZXggPSBub2RlLmluZGV4OwotICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUu
dHlwZS52aXNpdCh0aGlzKSA6IG51bGw7Ci0gICAgICAgIHJlc3VsdC5hcmd1bWVudCA9IG5vZGUu
YXJndW1lbnQudmlzaXQodGhpcyk7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgQW5vbnltb3Vz
VmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUudHlwZS52aXNpdCh0aGlzKSk7CisgICAgICAgIHJl
c3VsdC5faW5kZXggPSBub2RlLl9pbmRleDsKICAgICAgICAgdGhpcy5fbWFwTm9kZShub2RlLCBy
ZXN1bHQpOwotICAgICAgICByZXN1bHQuYm9keSA9IG5vZGUuYm9keS52aXNpdCh0aGlzKTsKICAg
ICAgICAgcmVzdWx0LmVQdHIgPSBub2RlLmVQdHI7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQorICAgIAorICAgIHZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IElkZW50aXR5RXhwcmVzc2lvbihub2RlLnRhcmdldC52aXNpdCh0aGlz
KSk7CisgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFu
ZGFyZExpYnJhcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RhbmRhcmRMaWJyYXJ5LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDYgKzY4LDEwIEBAIG5hdGl2ZSBib29sIG9wZXJhdG9yPih1aW50LCB1aW50KTsKIG5hdGl2ZSBi
b29sIG9wZXJhdG9yPj0oaW50LCBpbnQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I+PSh1aW50LCB1
aW50KTsKIAorcHJvdG9jb2wgQWRkYWJsZSB7CisgICAgQWRkYWJsZSBvcGVyYXRvcisoQWRkYWJs
ZSwgQWRkYWJsZSk7Cit9CisKIHByb3RvY29sIEVxdWF0YWJsZSB7CiAgICAgYm9vbCBvcGVyYXRv
cj09KEVxdWF0YWJsZSwgRXF1YXRhYmxlKTsKIH0KQEAgLTkyLDQgKzk2LDkgQEAgbmF0aXZlIHRo
cmVhZCBUXiBvcGVyYXRvciZbXTxUPih0aHJlYWQgVAogbmF0aXZlIHRocmVhZGdyb3VwIFReIG9w
ZXJhdG9yJltdPFQ6cHJpbWl0aXZlPih0aHJlYWRncm91cCBUW10sIHVpbnQpOwogbmF0aXZlIGRl
dmljZSBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4oZGV2aWNlIFRbXSwgdWludCk7CiBuYXRp
dmUgY29uc3RhbnQgVF4gb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KGNvbnN0YW50IFRbXSwgdWlu
dCk7CisKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUPih0aHJlYWQgVFtdKTsKK25hdGl2
ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOnByaW1pdGl2ZT4odGhyZWFkZ3JvdXAgVFtdKTsKK25h
dGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOnByaW1pdGl2ZT4oZGV2aWNlIFRbXSk7CituYXRp
dmUgdWludCBvcGVyYXRvci5sZW5ndGg8VDpwcmltaXRpdmU+KGNvbnN0YW50IFRbXSk7CiBgOwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0TGF5b3V0QnVpbGRlci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RMYXlv
dXRCdWlsZGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01OSw1ICs1
OSwxMSBAQCBjbGFzcyBTdHJ1Y3RMYXlvdXRCdWlsZGVyIGV4dGVuZHMgVmlzaXRvCiAgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIlR5cGUgZG9lcyBub3QgaGF2ZSBzaXplOiAiICsgbm9kZS50
eXBlKTsKICAgICAgICAgdGhpcy5fb2Zmc2V0ICs9IHNpemU7CiAgICAgfQorICAgIAorICAgIHZp
c2l0TmF0aXZlRnVuY0luc3RhbmNlKG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNpdE5h
dGl2ZUZ1bmNJbnN0YW5jZShub2RlKTsKKyAgICAgICAgbm9kZS5mdW5jLmRpZExheW91dFN0cnVj
dHNJbkltcGxlbWVudGF0aW9uRGF0YShub2RlLmltcGxlbWVudGF0aW9uRGF0YSk7CisgICAgfQog
fQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanMJ
KHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVj
dFR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3LDIxICs1NywyOSBAQCBjbGFzcyBTdHJ1Y3RU
eXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAot
ICAgIGluc3RhbnRpYXRlKHR5cGVBcmd1bWVudHMsIG1vZGUpCisgICAgaW5zdGFudGlhdGUodHlw
ZUFyZ3VtZW50cyA9IG51bGwpCiAgICAgewotICAgICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5n
dGggIT0gdGhpcy50eXBlUGFyYW1ldGVycy5sZW5ndGgpCi0gICAgICAgICAgICB0aHJvdyBuZXcg
V1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJn
dW1lbnRzIHRvIGluc3RhbnRpYXRpb24iKTsKKyAgICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9IG51
bGw7CisgICAgICAgIGxldCB0eXBlUGFyYW1ldGVycyA9IHRoaXMudHlwZVBhcmFtZXRlcnM7CiAg
ICAgICAgIAotICAgICAgICBpZiAoIXR5cGVBcmd1bWVudHMubGVuZ3RoKQotICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgIGlmICh0eXBlQXJndW1lbnRzKSB7CisgICAgICAgICAgICBp
ZiAodHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gdGhpcy50eXBlUGFyYW1ldGVycy5sZW5ndGgpCisg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywg
Ildyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyB0byBpbnN0YW50aWF0aW9uIik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICghdHlwZUFyZ3VtZW50cy5sZW5ndGgpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN1YnN0aXR1
dGlvbiA9IG5ldyBTdWJzdGl0dXRpb24odGhpcy50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50
cyk7CisgICAgICAgICAgICB0eXBlUGFyYW1ldGVycyA9IFtdOworICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBsZXQgc3Vic3RpdHV0aW9uID0gbmV3IFN1YnN0aXR1dGlvbih0aGlzLnR5cGVQ
YXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKTsKLSAgICAgICAgbGV0IGluc3RhbnRpYXRlSW1tZWRp
YXRlcyA9IG1vZGUgPT0gInNoYWxsb3ciID8gbnVsbCA6IG5ldyBJbnN0YW50aWF0ZUltbWVkaWF0
ZXMoKTsKLSAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTdHJ1Y3RUeXBlKHRoaXMub3JpZ2luLCB0
aGlzLm5hbWUsIFtdKTsKKyAgICAgICAgbGV0IGluc3RhbnRpYXRlSW1tZWRpYXRlcyA9IG5ldyBJ
bnN0YW50aWF0ZUltbWVkaWF0ZXMoKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTdHJ1Y3RU
eXBlKHRoaXMub3JpZ2luLCB0aGlzLm5hbWUsIHR5cGVQYXJhbWV0ZXJzKTsKICAgICAgICAgZm9y
IChsZXQgZmllbGQgb2YgdGhpcy5maWVsZHMpIHsKLSAgICAgICAgICAgIGxldCBuZXdGaWVsZCA9
IGZpZWxkLnZpc2l0KHN1YnN0aXR1dGlvbik7Ci0gICAgICAgICAgICBpZiAoaW5zdGFudGlhdGVJ
bW1lZGlhdGVzKQotICAgICAgICAgICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQudmlzaXQoaW5z
dGFudGlhdGVJbW1lZGlhdGVzKTsKKyAgICAgICAgICAgIGxldCBuZXdGaWVsZCA9IGZpZWxkOwor
ICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbikKKyAgICAgICAgICAgICAgICBuZXdGaWVsZCA9
IG5ld0ZpZWxkLnZpc2l0KHN1YnN0aXR1dGlvbik7CisgICAgICAgICAgICBuZXdGaWVsZCA9IG5l
d0ZpZWxkLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyk7CiAgICAgICAgICAgICByZXN1bHQu
YWRkKG5ld0ZpZWxkKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Vic3RpdHV0aW9uLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qcwkocmV2aXNp
b24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Vic3RpdHV0aW9u
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBAIGNsYXNzIFN1YnN0aXR1dGlvbiBl
eHRlbmRzIFJld3JpdGVyIHsKICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQocGFyYW1ldGVyc1tp
XSwgYXJndW1lbnRMaXN0W2ldKTsKICAgICB9CiAgICAgCisgICAgZ2V0IG1hcCgpIHsgcmV0dXJu
IHRoaXMuX21hcDsgfQorICAgIAogICAgIHZpc2l0VHlwZVJlZihub2RlKQogICAgIHsKICAgICAg
ICAgbGV0IHJlcGxhY2VtZW50ID0gdGhpcy5fbWFwLmdldChub2RlLnR5cGUpOwpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1l
bnQuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N1ZmZpeENhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVudCkKQEAgLTEsNDQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3Qi
OwotCi1jbGFzcyBTdWZmaXhDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAg
IGNvbnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzKQotICAgIHsKLSAgICAgICAgc3VwZXIob3Jp
Z2luKTsKLSAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMuX2xocyA9IGxo
czsKLSAgICAgICAgdGhpcy5mdW5jID0gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG5hbWUo
KSB7IHJldHVybiB0aGlzLl9uYW1lOyB9Ci0gICAgZ2V0IGxocygpIHsgcmV0dXJuIHRoaXMuX2xo
czsgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmxo
cyArICIgc3VmZml4ICIgKyB0aGlzLm5hbWU7Ci0gICAgfQotfQotCkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nl
c3NvcnMuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBz
dHJpY3QiOworCitmdW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pCit7
CisgICAgZm9yIChsZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygpKSB7CisgICAgICAg
IGlmICghKHR5cGUgaW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAKKyAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdHlwZS5maWVsZHMpIHsKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZS50eXBlUGFyYW1ldGVycy5tYXAoCisgICAgICAg
ICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFtZXRlci52aXNpdChuZXcgVHlw
ZVBhcmFtZXRlclJld3JpdGVyKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlwZUFyZ3VtZW50cygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVQYXJhbWV0ZXJzLm1hcCh0eXBlUGFyYW1ldGVyID0+
IHR5cGVQYXJhbWV0ZXIudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gc2V0dXBJbXBsZW1lbnRhdGlvbkRh
dGEobmF0aXZlRnVuYywgaW1wbGVtZW50YXRpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbmF0aXZlRnVuYy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uID0gc3Vic3RpdHV0aW9u
ID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1R5cGUgPSB0eXBlLmluc3RhbnRpYXRl
KG5hdGl2ZUZ1bmMudHlwZVBhcmFtZXRlcnMubWFwKHR5cGVQYXJhbWV0ZXIgPT4geworICAgICAg
ICAgICAgICAgICAgICAgICAgbGV0IHN1YnN0aXR1dGUgPSBzdWJzdGl0dXRpb24ubWFwLmdldCh0
eXBlUGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Vic3RpdHV0ZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgc3Vic3Rp
dHV0ZSBmb3IgdHlwZSBwYXJhbWV0ZXIgIiArIHR5cGVQYXJhbWV0ZXIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGU7CisgICAgICAgICAgICAgICAgICAgIH0pKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiBuZXdUeXBlLCBmaWVsZE5hbWU6IGZp
ZWxkLm5hbWV9OworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgbmF0aXZlRnVu
Yy52aXNpdEltcGxlbWVudGF0aW9uRGF0YSA9IChpbXBsZW1lbnRhdGlvbkRhdGEsIHZpc2l0b3Ip
ID0+IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXRpbmcgdGhlIHR5cGUgZmlyc3QgZW5z
dXJlcyB0aGF0IHRoZSBzdHJ1Y3QgbGF5b3V0IGJ1aWxkZXIgZmlndXJlcyBvdXQgdGhlIGZpZWxk
J3MKKyAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0LgorICAgICAgICAgICAgICAgICAgICBp
bXBsZW1lbnRhdGlvbkRhdGEudHlwZS52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMuZGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50
YXRpb25EYXRhID0gaW1wbGVtZW50YXRpb25EYXRhID0+IHsKKyAgICAgICAgICAgICAgICAgICAg
bGV0IHN0cnVjdFNpemUgPSBpbXBsZW1lbnRhdGlvbkRhdGEudHlwZS5zaXplOworICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RydWN0U2l6ZSA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJObyBzdHJ1Y3Qgc2l6ZSBmb3IgIiArIG5hdGl2ZUZ1bmMpOwor
ICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBpbXBsZW1lbnRhdGlvbkRhdGEudHlwZS5m
aWVsZEJ5TmFtZShpbXBsZW1lbnRhdGlvbkRhdGEuZmllbGROYW1lKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFmaWVsZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiQ291bGQgbm90IGZpbmQgZmllbGQiKTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG9mZnNl
dCA9IGZpZWxkLm9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkU2l6ZSA9IGZp
ZWxkLnR5cGUuc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkU2l6ZSA9PSBudWxs
KQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBmaWVsZCBzaXpl
IGZvciAiICsgbmF0aXZlRnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT0g
bnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gb2Zmc2V0
IGZvciAiICsgbmF0aXZlRnVuYyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAg
ICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEuc3RydWN0U2l6ZSA9IHN0cnVjdFNpemU7CisgICAg
ICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5maWVsZFNpemUgPSBmaWVsZFNpemU7
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLmltcGxlbWVu
dGF0aW9uID0gKGFyZ3VtZW50TGlzdCwgbm9kZSkgPT4geworICAgICAgICAgICAgICAgICAgICBs
ZXQgbmF0aXZlRnVuY0luc3RhbmNlID0gbm9kZS5uYXRpdmVGdW5jSW5zdGFuY2U7CisgICAgICAg
ICAgICAgICAgICAgIGxldCBpbXBsZW1lbnRhdGlvbkRhdGEgPSBuYXRpdmVGdW5jSW5zdGFuY2Uu
aW1wbGVtZW50YXRpb25EYXRhOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1wbGVtZW50
YXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudExpc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEub2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLnN0cnVjdFNpemUsCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEuZmllbGRTaXplKTsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVh
dGVGaWVsZFR5cGUoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmaWVs
ZC50eXBlLnZpc2l0KG5ldyBTdWJzdGl0dXRpb24odHlwZS50eXBlUGFyYW1ldGVycywgdHlwZVBh
cmFtZXRlcnMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVu
Y3Rpb24gY3JlYXRlVHlwZVJlZigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIFR5cGVSZWYuaW5zdGFudGlhdGUodHlwZSwgY3JlYXRlVHlwZUFyZ3VtZW50cygpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGV0IGlzQ2FzdCA9IGZhbHNl
OworICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXJzOworICAgICAgICAgICAgbGV0IG5hdGl2
ZUZ1bmM7CisKKyAgICAgICAgICAgIC8vIFRoZSBnZXR0ZXI6IG9wZXJhdG9yLmZpZWxkCisgICAg
ICAgICAgICB0eXBlUGFyYW1ldGVycyA9IGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCk7CisgICAgICAg
ICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAgICAgICAgICAgICAgZmllbGQu
b3JpZ2luLCAib3BlcmF0b3IuIiArIGZpZWxkLm5hbWUsIGNyZWF0ZUZpZWxkVHlwZSgpLCB0eXBl
UGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICBbbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3Jp
Z2luLCBudWxsLCBjcmVhdGVUeXBlUmVmKCkpXSwgaXNDYXN0KTsKKyAgICAgICAgICAgIHNldHVw
SW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6
ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFUHRy
KG5ldyBFQnVmZmVyKGZpZWxkU2l6ZSksIDApOworICAgICAgICAgICAgICAgIHJlc3VsdC5jb3B5
RnJvbShiYXNlLnBsdXMob2Zmc2V0KSwgZmllbGRTaXplKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBwcm9ncmFtLmFkZChuYXRp
dmVGdW5jKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhlIHNldHRlcjogb3BlcmF0
b3IuZmllbGQ9CisgICAgICAgICAgICB0eXBlUGFyYW1ldGVycyA9IGNyZWF0ZVR5cGVQYXJhbWV0
ZXJzKCk7CisgICAgICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAgICAg
ICAgICAgICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3IuIiArIGZpZWxkLm5hbWUgKyAiPSIsIGNy
ZWF0ZVR5cGVSZWYoKSwgdHlwZVBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgWworICAgICAg
ICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0
ZVR5cGVSZWYoKSksCisgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKGZpZWxk
Lm9yaWdpbiwgbnVsbCwgY3JlYXRlRmllbGRUeXBlKCkpCisgICAgICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICAgICBpc0Nhc3QpOworICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRh
dGEobmF0aXZlRnVuYywgKFtiYXNlLCB2YWx1ZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRT
aXplKSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBFQnVm
ZmVyKHN0cnVjdFNpemUpLCAwKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuY29weUZyb20oYmFz
ZSwgc3RydWN0U2l6ZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LnBsdXMob2Zmc2V0KS5jb3B5
RnJvbSh2YWx1ZSwgZmllbGRTaXplKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIHNldHVwQW5kZXIoYWRkcmVzc1NwYWNlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzID0gY3JlYXRlVHlwZVBhcmFtZXRlcnMo
KTsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAgICAg
ICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9yJi4iICsgZmllbGQubmFtZSwgbmV3
IFB0clR5cGUoZmllbGQub3JpZ2luLCBhZGRyZXNzU3BhY2UsIGNyZWF0ZUZpZWxkVHlwZSgpKSwK
KyAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAg
IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgbnVsbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXcgUHRyVHlwZShmaWVsZC5vcmlnaW4sIGFkZHJlc3NTcGFjZSwgY3JlYXRl
VHlwZVJlZigpKSkKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAg
aXNDYXN0KTsKKyAgICAgICAgICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVG
dW5jLCAoW2Jhc2VdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4geworICAgICAg
ICAgICAgICAgICAgICBiYXNlID0gYmFzZS5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFiYXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBkZXJlZmVyZW5jZSIpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gRVB0ci5ib3goYmFzZS5wbHVzKG9mZnNldCkpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzZXR1cEFuZGVyKCJ0aHJl
YWQiKTsKKyAgICAgICAgICAgIGlmICh0eXBlLmluc3RhbnRpYXRlKCkuaXNQcmltaXRpdmUpIHsK
KyAgICAgICAgICAgICAgICBzZXR1cEFuZGVyKCJ0aHJlYWRncm91cCIpOworICAgICAgICAgICAg
ICAgIHNldHVwQW5kZXIoImRldmljZSIpOworICAgICAgICAgICAgICAgIHNldHVwQW5kZXIoImNv
bnN0YW50Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCShyZXZpc2lvbiAyMjIxMjMpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTYsMTMgKzYsMTQgQEAKIDxzY3JpcHQgc3JjPSJSZWZlcmVuY2VUeXBlLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJWYWx1ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRXhwcmVzc2lv
bi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iVmlzaXRvckJhc2UuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IlJld3JpdGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJWaXNpdG9y
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDcmVhdGVMaXRlcmFsLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJDcmVhdGVMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIAogPHNjcmlwdCBzcmM9
IkFkZHJlc3NTcGFjZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQW5vbnltb3VzVmFyaWFi
bGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFycmF5UmVmVHlwZS5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iQXJyYXlUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBc3Np
Z25tZW50LmpzIj48L3NjcmlwdD4KQEAgLTIwLDcgKzIxLDYgQEAKIDxzY3JpcHQgc3JjPSJCbG9j
ay5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQm9vbExpdGVyYWwuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IkJyZWFrLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJDYWxsQXNzaWdu
bWVudC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ2FsbEV4cHJlc3Npb24uanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IkNhbGxGdW5jdGlvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iQ2hlY2suanMiPjwvc2NyaXB0PgpAQCAtNTMsNyArNTMsOSBAQAogPHNjcmlwdCBzcmM9IkZ1
bmNJbnN0YW50aWF0b3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZ1bmNQYXJhbWV0ZXIu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZ1bmN0aW9uTGlrZUJsb2NrLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJJZGVudGl0eUV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9IklmU3RhdGVtZW50LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJJbmRleEV4cHJl
c3Npb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkluZmVyVHlwZXNGb3JDYWxsLmpzIj48
L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJbmxpbmUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IklubGluZXIuanMiPjwvc2NyaXB0PgpAQCAtNzUsMjAgKzc3LDI0IEBACiA8c2NyaXB0IHNyYz0i
TmF0aXZlRnVuY0luc3RhbmNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJOYXRpdmVUeXBl
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJOYXRpdmVUeXBlSW5zdGFuY2UuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ik5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9Ik51bGxMaXRlcmFsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJO
dWxsVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iT3ZlcmxvYWRSZXNvbHV0aW9uRmFp
bHVyZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUGFyc2UuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IlByZXBhcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlByb3BlcnR5UmVz
b2x2ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb2dyYW0uanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IlByb3RvY29sLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm90b2Nv
bERlY2wuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3RvY29sRnVuY0RlY2wuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3RvY29sUmVmLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJQdHJUeXBlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZWN1cnNpb25DaGVja2VyLmpz
Ij48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXNvbHZlTmFtZXMuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IlJlc29sdmVPdmVybG9hZEltcGwuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
IlJlc29sdmVQcm9wZXJ0aWVzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXNvbHZlVHlw
ZURlZnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJldHVybi5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iUmV0dXJuQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CkBAIC05NywxMiArMTAzLDE0
IEBACiA8c2NyaXB0IHNyYz0iU3RydWN0TGF5b3V0QnVpbGRlci5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iU3RydWN0VHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3Vic3RpdHV0
aW9uLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJTdWZmaXhDYWxsQXNzaWdubWVudC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZURlZi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
VHlwZURlZlJlc29sdmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlT3JWYXJpYWJs
ZVJlZi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iVHlwZVBhcmFtZXRlclJld3JpdGVyLmpz
Ij48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlUmVmLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJUeXBlVmFyaWFibGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlR5cGVWYXJpYWJs
ZVRyYWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5cGVkVmFsdWUuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IlVpbnRMaXRlcmFsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJVaW50TGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UZXN0LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9UZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIGZ1bmN0
aW9uIGNoZWNrTnVtYmVyKHByb2dyYW0sIHJlc3VsdCwgZXgKICAgICBpZiAoIXJlc3VsdC50eXBl
LmlzTnVtYmVyKQogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdCB0eXBlOyBy
ZXN1bHQ6ICIgKyByZXN1bHQpOwogICAgIGlmIChyZXN1bHQudmFsdWUgIT0gZXhwZWN0ZWQpCi0g
ICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0OiAiICsgcmVzdWx0ICsgIiAoZXhw
ZWN0ZWQgIiArIGV4cGVjdGVkICsgIikiKTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9u
ZyByZXN1bHQ6ICIgKyByZXN1bHQudmFsdWUgKyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAi
KSIpOwogfQogCiBmdW5jdGlvbiBtYWtlVWludChwcm9ncmFtLCB2YWx1ZSkKQEAgLTQyMiwxMCAr
NDIyLDEwIEBAIGZ1bmN0aW9uIFRFU1RfZGV2aWNlQXJyYXlTdG9yZUludExpdGVyYWwKIGZ1bmN0
aW9uIFRFU1Rfc2ltcGxlUHJvdG9jb2woKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
LSAgICAgICAgcHJvdG9jb2wgQWRkYWJsZSB7Ci0gICAgICAgICAgICBBZGRhYmxlIG9wZXJhdG9y
KyhBZGRhYmxlLCBBZGRhYmxlKTsKKyAgICAgICAgcHJvdG9jb2wgTXlBZGRhYmxlIHsKKyAgICAg
ICAgICAgIE15QWRkYWJsZSBvcGVyYXRvcisoTXlBZGRhYmxlLCBNeUFkZGFibGUpOwogICAgICAg
ICB9Ci0gICAgICAgIFQgYWRkPFQ6QWRkYWJsZT4oVCBhLCBUIGIpCisgICAgICAgIFQgYWRkPFQ6
TXlBZGRhYmxlPihUIGEsIFQgYikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGEgKyBi
OwogICAgICAgICB9CkBAIC03NDMsNyArNzQzLDcgQEAgZnVuY3Rpb24gVEVTVF9zdG9yZU51bGxB
cnJheVJlZigpCiAgICAgICAgICgpID0+IGRvUHJlcChgCiAgICAgICAgICAgICB2b2lkIGZvbygp
IHsgbnVsbFswdV0gPSA0MjsgfQogICAgICAgICBgKSwKLSAgICAgICAgKGUpID0+IGUgaW5zdGFu
Y2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJEaWQgbm90IGZpbmQgZnVuY3Rp
b24gZm9yIGNhbGwiKSAhPSAtMSk7CisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVF
cnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiTEhTIG9mIGFzc2lnbm1lbnQgaXMgbm90IGFuIExW
YWx1ZSIpICE9IC0xKTsKIH0KIAogZnVuY3Rpb24gVEVTVF9yZXR1cm5OdWxsQXJyYXlSZWYoKQpA
QCAtMjU2Niw2ICsyNTY2LDE4MiBAQCBmdW5jdGlvbiBURVNUX21ha2VBcnJheVJlZkZyb21BcnJh
eVJlZigpCiAgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7CiB9CiAKK2Z1
bmN0aW9uIFRFU1Rfc2ltcGxlTGVuZ3RoKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChg
CisgICAgICAgIHVpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgZG91YmxlWzc1NF0g
YXJyYXk7CisgICAgICAgICAgICByZXR1cm4gKEBhcnJheSkubGVuZ3RoOworICAgICAgICB9Cisg
ICAgYCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10sIFtdKSwgNzU0KTsKK30KKworZnVuY3Rpb24gVEVTVF9hc3NpZ25MZW5ndGgoKQorewor
ICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQg
Zm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb3VibGVbNzU0XSBhcnJheTsK
KyAgICAgICAgICAgICAgICAoQGFycmF5KS5sZW5ndGggPSA0MjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1l
c3NhZ2UuaW5kZXhPZigiTEhTIG9mIGFzc2lnbm1lbnQgaXMgbm90IGFuIExWYWx1ZSIpICE9IC0x
KTsKK30KKworZnVuY3Rpb24gVEVTVF9hc3NpZ25MZW5ndGhIZWxwZXIoKQoreworICAgIGNoZWNr
RmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgYmFyKHRocmVh
ZCBkb3VibGVbXSBhcnJheSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhcnJheS5s
ZW5ndGggPSA0MjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQgZm9vKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb3VibGVbNzU0XSBhcnJheTsKKyAgICAgICAgICAg
ICAgICBiYXIoQGFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChl
KSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiQ2Fubm90
IGVtaXQgc2V0IGJlY2F1c2U6IERpZCBub3QgZmluZCBhbnkgZnVuY3Rpb25zIG5hbWVkIG9wZXJh
dG9yLmxlbmd0aD0iKSAhPSAtMSk7Cit9CisKK2Z1bmN0aW9uIFRFU1Rfc2ltcGxlR2V0dGVyKCkK
K3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb28geworICAg
ICAgICAgICAgaW50IHg7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9yLnkoRm9vIGZv
bykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby54OworICAgICAgICB9CisgICAg
ICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAg
ICAgZm9vLnggPSA3ODA0OworICAgICAgICAgICAgcmV0dXJuIGZvby55OworICAgICAgICB9Cisg
ICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSwgW10pLCA3ODA0KTsKK30KKworZnVuY3Rpb24gVEVTVF9zaW1wbGVTZXR0ZXIoKQorewor
ICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAg
ICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAgICBpbnQgb3BlcmF0b3IueShGb28gZm9vKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vLng7CisgICAgICAgIH0KKyAgICAgICAg
Rm9vIG9wZXJhdG9yLnk9KEZvbyBmb28sIGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9vLnggPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAg
ICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAgICAg
ICAgICBmb28ueSA9IDc4MDQ7CisgICAgICAgICAgICByZXR1cm4gZm9vLng7CisgICAgICAgIH0K
KyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdLCBbXSksIDc4MDQpOworfQorCitmdW5jdGlvbiBURVNUX2dlbmVyaWNBY2Nlc3NvcnMo
KQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZvbzxUPiB7
CisgICAgICAgICAgICBUIHg7CisgICAgICAgICAgICBUWzNdIHk7CisgICAgICAgIH0KKyAgICAg
ICAgc3RydWN0IEJhcjxUPiB7CisgICAgICAgICAgICBUIHg7CisgICAgICAgICAgICBUIHk7Cisg
ICAgICAgIH0KKyAgICAgICAgQmFyPFQ+IG9wZXJhdG9yLno8VD4oRm9vPFQ+IGZvbykKKyAgICAg
ICAgeworICAgICAgICAgICAgQmFyPFQ+IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC54ID0g
Zm9vLng7CisgICAgICAgICAgICByZXN1bHQueSA9IGZvby55WzFdOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBGb288VD4gb3BlcmF0b3Iuej08VD4oRm9v
PFQ+IGZvbywgQmFyPFQ+IGJhcikKKyAgICAgICAgeworICAgICAgICAgICAgZm9vLnggPSBiYXIu
eDsKKyAgICAgICAgICAgIGZvby55WzFdID0gYmFyLnk7CisgICAgICAgICAgICByZXR1cm4gZm9v
OworICAgICAgICB9CisgICAgICAgIFQgb3BlcmF0b3Iuc3VtPFQ6QWRkYWJsZT4oRm9vPFQ+IGZv
bykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby54ICsgZm9vLnlbMF0gKyBmb28u
eVsxXSArIGZvby55WzJdOworICAgICAgICB9CisgICAgICAgIFQgb3BlcmF0b3Iuc3VtPFQ6QWRk
YWJsZT4oQmFyPFQ+IGJhcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhci54ICsg
YmFyLnk7CisgICAgICAgIH0KKyAgICAgICAgb3BlcmF0b3I8VD4gQmFyPFQ+KFQgeCwgVCB5KQor
ICAgICAgICB7CisgICAgICAgICAgICBCYXI8VD4gcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0
LnggPSB4OworICAgICAgICAgICAgcmVzdWx0LnkgPSB5OworICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNldHVwKHRocmVhZCBGb288aW50Pl4gZm9v
KQorICAgICAgICB7CisgICAgICAgICAgICBmb28tPnggPSAxOworICAgICAgICAgICAgZm9vLT55
WzBdID0gMjsKKyAgICAgICAgICAgIGZvby0+eVsxXSA9IDM7CisgICAgICAgICAgICBmb28tPnlb
Ml0gPSA0OworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0U3VwZXJCYXNpYygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIHNldHVwKCZmb28pOwor
ICAgICAgICAgICAgcmV0dXJuIGZvby5zdW07CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3Ra
U2V0dGVyRGlkU2V0WSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZvbzsKKyAg
ICAgICAgICAgIGZvby56ID0gQmFyPGludD4oNTMsIDkzMik7CisgICAgICAgICAgICByZXR1cm4g
Zm9vLnlbMV07CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RaU2V0dGVyKCkKKyAgICAgICAg
eworICAgICAgICAgICAgRm9vPGludD4gZm9vOworICAgICAgICAgICAgZm9vLnogPSBCYXI8aW50
Pig1MywgOTMyKTsKKyAgICAgICAgICAgIHJldHVybiBmb28uc3VtOworICAgICAgICB9CisgICAg
ICAgIGludCB0ZXN0WkdldHRlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZv
bzsKKyAgICAgICAgICAgIC8vIFRoaXMgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IGNhbGwgc2V0dXAo
KSBqdXN0IHNvIHdlIHRlc3QgdGhpcyBzeW50YXguCisgICAgICAgICAgICBmb28ueCA9IDE7Cisg
ICAgICAgICAgICBmb28ueVswXSA9IDI7CisgICAgICAgICAgICBmb28ueVsxXSA9IDM7CisgICAg
ICAgICAgICBmb28ueVsyXSA9IDQ7CisgICAgICAgICAgICByZXR1cm4gZm9vLnouc3VtOworICAg
ICAgICB9CisgICAgICAgIGludCB0ZXN0TFZhbHVlRW11bGF0aW9uKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgRm9vPGludD4gZm9vOworICAgICAgICAgICAgc2V0dXAoJmZvbyk7CisgICAgICAg
ICAgICBmb28uei55ICo9IDU7CisgICAgICAgICAgICByZXR1cm4gZm9vLnN1bTsKKyAgICAgICAg
fQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
dGVzdFN1cGVyQmFzaWMiLCBbXSwgW10pLCAxICsgMiArIDMgKyA0KTsKKyAgICBjaGVja0ludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RaU2V0dGVyRGlkU2V0WSIsIFtdLCBb
XSksIDkzMik7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0
ZXN0WlNldHRlciIsIFtdLCBbXSksIDUzICsgOTMyKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RaR2V0dGVyIiwgW10sIFtdKSwgMSArIDMpOworICAg
IGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdExWYWx1ZUVtdWxh
dGlvbiIsIFtdLCBbXSksIDEgKyAyICsgMyAqIDUgKyA0KTsKK30KKwogbGV0IGZpbHRlciA9IC8u
Ki87IC8vIHJ1biBldmVyeXRoaW5nIGJ5IGRlZmF1bHQKIGlmICh0aGlzWyJhcmd1bWVudHMiXSkg
ewogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAgY2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewogICAgIGdldCBraW5kKCkg
eyByZXR1cm4gVHlwZTsgfQogICAgIGdldCBpc1B0cigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
Z2V0IGlzQXJyYXlSZWYoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGdldCBpc1JlZigpIHsgcmV0
dXJuIHRoaXMuaXNQdHIgfHwgdGhpcy5pc0FycmF5UmVmOyB9CiAgICAgZ2V0IGlzTnVtYmVyKCkg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNJbnQoKSB7IHJldHVybiBmYWxzZTsgfQogICAg
IGdldCBpc0Zsb2F0KCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTQxLDUgKzQyLDE5IEBAIGNsYXNz
IFR5cGUgZXh0ZW5kcyBOb2RlIHsKICAgICB9CiAgICAgCiAgICAgZ2V0IGluc3RhbnRpYXRlZFR5
cGUoKSB7IHJldHVybiB0aGlzLnZpc2l0KG5ldyBJbnN0YW50aWF0ZUltbWVkaWF0ZXMoKSk7IH0K
KyAgICAKKyAgICAvLyBIYXZlIHRvIGNhbGwgdGhlc2Ugb24gdGhlIHVuaWZ5Tm9kZS4KKyAgICBh
cmd1bWVudEZvckFuZE92ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gbmV3IE1ha2VQdHJFeHByZXNzaW9uKG9yaWdpbiwgdmFsdWUpOworICAgIH0KKyAgICBhcmd1
bWVudFR5cGVGb3JBbmRPdmVybG9hZChvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gbmV3
IFB0clR5cGUob3JpZ2luLCAidGhyZWFkIiwgdGhpcyk7CisgICAgfQorICAgIHJldHVyblR5cGVG
cm9tQW5kT3ZlcmxvYWQob3JpZ2luKQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iob3JpZ2luLm9yaWdpblN0cmluZywgIkJ5LXBvaW50ZXIgb3ZlcmxvYWQgcmV0dXJuZWQgbm9u
LXBvaW50ZXIgdHlwZTogIiArIHRoaXMpOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcwko
bm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUGFyYW1l
dGVyUmV3cml0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFz
cyBUeXBlUGFyYW1ldGVyUmV3cml0ZXIgeworICAgIHZpc2l0Q29uc3RleHByVHlwZVBhcmFtZXRl
cihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDb25zdGV4cHJUeXBlUGFyYW1ldGVy
KG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUudHlwZS52aXNpdChuZXcgUmV3cml0ZXIoKSkp
OworICAgIH0KKyAgICAKKyAgICB2aXNpdFR5cGVWYXJpYWJsZShub2RlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG5ldyBUeXBlVmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUubmFtZSwgbm9kZS5w
cm90b2NvbCk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9UeXBlVmFyaWFibGVUcmFja2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1R5cGVWYXJpYWJsZVRyYWNrZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlVHJhY2tlci5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFR5cGVWYXJpYWJsZVRyYWNrZXIg
ZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBl
cigpOworICAgICAgICB0aGlzLl9zZXQgPSBuZXcgU2V0KCk7CisgICAgfQorICAgIAorICAgIGdl
dCBzZXQoKSB7IHJldHVybiB0aGlzLl9zZXQ7IH0KKyAgICAKKyAgICBfY29uc2lkZXIodGhpbmcp
CisgICAgeworICAgICAgICBpZiAodGhpbmcuaXNVbmlmaWFibGUpCisgICAgICAgICAgICB0aGlz
Ll9zZXQuYWRkKHRoaW5nKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRUeXBlUmVmKG5vZGUpCisg
ICAgeworICAgICAgICB0aGlzLl9jb25zaWRlcihub2RlLnR5cGUpOworICAgIH0KKyAgICAKKyAg
ICB2aXNpdFZhcmlhYmxlUmVmKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9jb25zaWRlcih0
aGlzLnZhcmlhYmxlKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1ZhbHVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1ZhbHVlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9WYWx1ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjgsNSArMjgsMTQgQEAgY2xhc3Mg
VmFsdWUgZXh0ZW5kcyBOb2RlIHsKICAgICBnZXQga2luZCgpIHsgcmV0dXJuIFZhbHVlOyB9CiAg
ICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNMVmFsdWUo
KSB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIGJlY29tZShvdGhlclZhbHVlKQorICAgIHsK
KyAgICAgICAgLy8gTk9URTogTWFrZSBzdXJlIHRoYXQgSWRlbnRpdHlFeHByZXNzaW9uIGltcGxl
bWVudHMgdW5pZnlOb2RlIGFuZCBhbGwgdGhhdAorICAgICAgICBsZXQgb3JpZ2luID0gdGhpcy5v
cmlnaW47CisgICAgICAgIHRoaXMuX19wcm90b19fID0gSWRlbnRpdHlFeHByZXNzaW9uLnByb3Rv
dHlwZTsKKyAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOworICAgICAgICB0aGlzLl90YXJn
ZXQgPSBvdGhlclZhbHVlOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVmFyaWFibGVSZWYuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
MSwxMCArNDEsOSBAQCBjbGFzcyBWYXJpYWJsZVJlZiBleHRlbmRzIEV4cHJlc3Npb24gewogICAg
IAogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQogICAgIGdldCBpc0NvbnN0
ZXhwcigpIHsgcmV0dXJuIHRoaXMudmFyaWFibGUuaXNDb25zdGV4cHI7IH0KLSAgICBnZXQgdW5p
ZnlOb2RlKCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZS51bmlmeU5vZGU7IH0KKyAgICBnZXQgdW5p
ZnlOb2RlKCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZS51bmlmeU5vZGU7IH0gLy8gVGhpcyBvbmx5
IG1ha2VzIHNlbnNlIHdoZW4gdGhpcyBpcyBhIGNvbnN0ZXhwci4KICAgICBnZXQgaXNMVmFsdWUo
KSB7IHJldHVybiB0cnVlOyB9CiAgICAgZ2V0IGFkZHJlc3NTcGFjZSgpIHsgcmV0dXJuICJ0aHJl
YWQiOyB9Ci0gICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFyaWFibGU7IH0KICAg
ICAKICAgICB0b1N0cmluZygpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVmlzaXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9WaXNpdG9yLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMiArMjQsNyBAQAog
ICovCiAidXNlIHN0cmljdCI7CiAKLWNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7
Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICB9Ci0gICAg
CitjbGFzcyBWaXNpdG9yIHsKICAgICB2aXNpdFByb2dyYW0obm9kZSkKICAgICB7CiAgICAgICAg
IGZvciAobGV0IHN0YXRlbWVudCBvZiBub2RlLnRvcExldmVsU3RhdGVtZW50cykKQEAgLTY4LDgg
KzYzLDggQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2
aXNpdE5hdGl2ZUZ1bmNJbnN0YW5jZShub2RlKQogICAgIHsKLSAgICAgICAgbm9kZS5mdW5jLnZp
c2l0KHRoaXMpOwogICAgICAgICB0aGlzLnZpc2l0RnVuYyhub2RlKTsKKyAgICAgICAgbm9kZS5m
dW5jLnZpc2l0SW1wbGVtZW50YXRpb25EYXRhKG5vZGUuaW1wbGVtZW50YXRpb25EYXRhLCB0aGlz
KTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRCbG9jayhub2RlKQpAQCAtMTAwLDggKzk1LDcgQEAg
Y2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB7CiAgICAgICAgIGZvciAo
bGV0IHR5cGVBcmd1bWVudCBvZiBub2RlLnR5cGVBcmd1bWVudHMpCiAgICAgICAgICAgICB0eXBl
QXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLnR5cGUpCi0gICAgICAgICAg
ICBub2RlLnR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBlLCB0
aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXROYXRpdmVUeXBlKG5vZGUpCkBAIC0xMzQsOCAr
MTI4LDcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2
aXNpdFR5cGVWYXJpYWJsZShub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUucHJvdG9jb2wp
Ci0gICAgICAgICAgICBub2RlLnByb3RvY29sLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZp
c2l0KG5vZGUucHJvdG9jb2wsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdENvbnN0ZXhw
clR5cGVQYXJhbWV0ZXIobm9kZSkKQEAgLTE3NywxNCArMTcwLDIzIEBAIGNsYXNzIFZpc2l0b3Ig
ZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXRWYXJpYWJsZURlY2wobm9kZSkKICAgICB7
CiAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUuaW5pdGlh
bGl6ZXIpCi0gICAgICAgICAgICBub2RlLmluaXRpYWxpemVyLnZpc2l0KHRoaXMpOworICAgICAg
ICBOb2RlLnZpc2l0KG5vZGUuaW5pdGlhbGl6ZXIsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2
aXNpdEFzc2lnbm1lbnQobm9kZSkKICAgICB7CiAgICAgICAgIG5vZGUubGhzLnZpc2l0KHRoaXMp
OwogICAgICAgICBub2RlLnJocy52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2Rl
LnR5cGUsIHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpOworICAg
ICAgICBub2RlLm9sZFZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLm5ld1ZhbHVl
VmFyLnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLm5ld1ZhbHVlRXhwLnZpc2l0KHRoaXMpOwor
ICAgICAgICBub2RlLnJlc3VsdEV4cC52aXNpdCh0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlz
aXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKQEAgLTE5MiwxMSArMTk0LDI3IEBAIGNsYXNz
IFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgIG5vZGUucHRyLnZpc2l0KHRo
aXMpOwogICAgIH0KICAgICAKKyAgICBfaGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5v
ZGUpCisgICAgeworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuYmFzZVR5cGUsIHRoaXMpOworICAg
ICAgICBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvckdldCwgdGhpcyk7CisgICAgICAgIE5vZGUudmlz
aXQobm9kZS5yZXN1bHRUeXBlRm9yR2V0LCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2Rl
LmNhbGxGb3JBbmQsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZv
ckFuZCwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5jYWxsRm9yU2V0LCB0aGlzKTsK
KyAgICB9CisgICAgCiAgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAg
ICBub2RlLnN0cnVjdC52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUuc3RydWN0VHlwZSkK
LSAgICAgICAgICAgIG5vZGUuc3RydWN0VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgdGhpcy5f
aGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2
aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5hcnJheS52aXNp
dCh0aGlzKTsKKyAgICAgICAgbm9kZS5pbmRleC52aXNpdCh0aGlzKTsKKyAgICAgICAgdGhpcy5f
aGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUpOwogICAgIH0KICAgICAKICAgICB2
aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5vZGUpCkBAIC0yMDcsOCArMjI1LDcgQEAgY2xhc3MgVmlz
aXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Np
b24obm9kZSkKICAgICB7CiAgICAgICAgIG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpOwotICAgICAg
ICBpZiAobm9kZS5udW1FbGVtZW50cykKLSAgICAgICAgICAgIG5vZGUubnVtRWxlbWVudHMudmlz
aXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5udW1FbGVtZW50cywgdGhpcyk7CiAg
ICAgfQogICAgIAogICAgIHZpc2l0Q29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUp
CkBAIC0yMjQsOCArMjQxLDcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
ICAgICB7CiAgICAgICAgIG5vZGUuY29uZGl0aW9uYWwudmlzaXQodGhpcyk7CiAgICAgICAgIG5v
ZGUuYm9keS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUuZWxzZUJvZHkpCi0gICAgICAg
ICAgICBub2RlLmVsc2VCb2R5LnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUu
ZWxzZUJvZHksIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdFdoaWxlTG9vcChub2RlKQpA
QCAtMjQyLDE5ICsyNTgsMTUgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
ICAgICAKICAgICB2aXNpdEZvckxvb3Aobm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmlu
aXRpYWxpemF0aW9uKQotICAgICAgICAgICAgbm9kZS5pbml0aWFsaXphdGlvbi52aXNpdCh0aGlz
KTsKLSAgICAgICAgaWYgKG5vZGUuY29uZGl0aW9uKQotICAgICAgICAgICAgbm9kZS5jb25kaXRp
b24udmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLmluY3JlbWVudCkKLSAgICAgICAgICAg
IG5vZGUuaW5jcmVtZW50LnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5p
dGlhbGl6YXRpb24sIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuY29uZGl0aW9uLCB0
aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmluY3JlbWVudCwgdGhpcyk7CiAgICAgICAg
IG5vZGUuYm9keS52aXNpdCh0aGlzKTsKICAgICB9CiAKICAgICB2aXNpdFJldHVybihub2RlKQog
ICAgIHsKLSAgICAgICAgaWYgKG5vZGUudmFsdWUpCi0gICAgICAgICAgICBub2RlLnZhbHVlLnZp
c2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudmFsdWUsIHRoaXMpOwogICAgIH0K
IAogICAgIHZpc2l0Q29udGludWUobm9kZSkKQEAgLTI3Miw4ICsyODQsNyBAQCBjbGFzcyBWaXNp
dG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0R2VuZXJpY0xpdGVyYWxU
eXBlKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS50eXBlKQotICAgICAgICAgICAgbm9k
ZS50eXBlLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7
CiAgICAgICAgIG5vZGUucHJlZmVycmVkVHlwZS52aXNpdCh0aGlzKTsKICAgICB9CiAgICAgCkBA
IC0yODgsOCArMjk5LDcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAg
ICAKICAgICB2aXNpdE51bGxUeXBlKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS50eXBl
KQotICAgICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0
KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24o
bm9kZSkKQEAgLTI5NywxNiArMzA3LDE1IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9y
QmFzZSB7CiAgICAgICAgIGZvciAobGV0IHR5cGVBcmd1bWVudCBvZiBub2RlLnR5cGVBcmd1bWVu
dHMpCiAgICAgICAgICAgICB0eXBlQXJndW1lbnQudmlzaXQodGhpcyk7CiAgICAgICAgIGZvciAo
bGV0IGFyZ3VtZW50IG9mIG5vZGUuYXJndW1lbnRMaXN0KQotICAgICAgICAgICAgYXJndW1lbnQu
dmlzaXQodGhpcyk7CisgICAgICAgICAgICBOb2RlLnZpc2l0KGFyZ3VtZW50LCB0aGlzKTsKICAg
ICAgICAgbGV0IGFjdHVhbFR5cGVBcmd1bWVudHMgPSBub2RlLmFjdHVhbFR5cGVBcmd1bWVudHM7
CiAgICAgICAgIGlmIChhY3R1YWxUeXBlQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBmb3IgKGxl
dCBhcmd1bWVudCBvZiBhY3R1YWxUeXBlQXJndW1lbnRzKQogICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50LnZpc2l0KHRoaXMpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlLnJldHVyblR5cGUp
Ci0gICAgICAgICAgICBub2RlLnJldHVyblR5cGUudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChu
b2RlLnJlc3VsdFR5cGUpCi0gICAgICAgICAgICBub2RlLnJlc3VsdFR5cGUudmlzaXQodGhpcyk7
CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5uYXRpdmVGdW5jSW5zdGFuY2UsIHRoaXMpOworICAg
ICAgICBOb2RlLnZpc2l0KG5vZGUucmV0dXJuVHlwZSwgdGhpcyk7CisgICAgICAgIE5vZGUudmlz
aXQobm9kZS5yZXN1bHRUeXBlLCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRMb2dpY2Fs
Tm90KG5vZGUpCkBAIC0zMTYsMjEgKzMyNSwyMyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlz
aXRvckJhc2UgewogICAgIAogICAgIHZpc2l0RnVuY3Rpb25MaWtlQmxvY2sobm9kZSkKICAgICB7
Ci0gICAgICAgIGlmIChub2RlLnJldHVyblR5cGUpCi0gICAgICAgICAgICBub2RlLnJldHVyblR5
cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXR1cm5UeXBlLCB0aGlz
KTsKICAgICAgICAgZm9yIChsZXQgYXJndW1lbnQgb2Ygbm9kZS5hcmd1bWVudExpc3QpCiAgICAg
ICAgICAgICBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgZm9yIChsZXQgcGFyYW1ldGVy
IG9mIG5vZGUucGFyYW1ldGVycykKICAgICAgICAgICAgIHBhcmFtZXRlci52aXNpdCh0aGlzKTsK
ICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5yZXN1bHRU
eXBlKQotICAgICAgICAgICAgbm9kZS5yZXN1bHRUeXBlLnZpc2l0KHRoaXMpOworICAgICAgICBO
b2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZSwgdGhpcyk7CiAgICAgfQogICAgIAotICAgIHZpc2l0
TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKICAg
ICB7Ci0gICAgICAgIG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAgIG5vZGUuYm9k
eS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOworICAg
IH0KKyAgICAKKyAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAg
ICAgbm9kZS50YXJnZXQudmlzaXQodGhpcyk7CiAgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yQmFzZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yQmFzZS5qcwkocmV2aXNpb24gMjIyMTIzKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvckJhc2UuanMJKG5vbmV4aXN0
ZW50KQpAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIFZpc2l0b3JCYXNlIHsKLSAgICBjb25z
dHJ1Y3RvcigpCi0gICAgewotICAgICAgICB0aGlzLl9tZW1vVGFibGUgPSBuZXcgTWFwKCk7Ci0g
ICAgfQotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321050</attachid>
            <date>2017-09-17 12:00:17 -0700</date>
            <delta_ts>2017-09-17 13:15:04 -0700</delta_ts>
            <desc>added another substantial test</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>161743</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjEzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5OCBAQAorMjAxNy0wOS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEZpZ3VyZSBvdXQgaG93IFdTTCB3aWxsIHN1cHBvcnQgZmllbGQgb3ZlcmxvYWRz
IGxpa2UgZmxvYXQ0Lnh6IGFuZCBmcmllbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdTTCBuZWVkcyB0byBzdXBwb3J0IGdldHRlcnMg
YW5kIHNldHRlcnMsIHNvIHRoYXQgd2UgY2FuIGRvIHRoaW5ncyBsaWtlOgorICAgICAgICAKKyAg
ICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAgICB2ZWMuenggPSBmbG9hdDIoMSwgMik7
CisgICAgICAgICAgICAvLyB6ID0gMSwgeCA9IDIKKyAgICAgICAgCisgICAgICAgIFRoZXJlJ3Mg
bm8gd2F5IHRvIGV4cHJlc3MgdGhpcyBmbG9hdDQuenggcmV0dXJuaW5nIGEgcG9pbnRlciB0byBz
b21ldGhpbmcsIHNpbmNlIGl0J3MgZG9pbmcgc3dpenpsaW5nLgorICAgICAgICBJdCBjb3VsZCBy
ZXR1cm4gYSBjcmF6eSBzbWFydCBwb2ludGVyLCBidXQgdGhhdCBzb3VuZHMgbGlrZSBhIGxvdCBv
ZiB3b3JrLiBTbywgSSBkZWNpZGVkIHRvIGdvIGZvcgorICAgICAgICBsdmFsdWUgZW11bGF0aW9u
IGluc3RlYWQuCisgICAgICAgIAorICAgICAgICBUaGUgaWRlYSBvZiBsdmFsdWUgZW11bGF0aW9u
IGlzIHRoYXQgd2hlbiB3ZSB0cnkgdG8gbWFrZSBhbiBsdmFsdWUgd29yayBmb3IgYW4gYXNzaWdu
bWVudCBvciBSTVcKKyAgICAgICAgb3BlcmF0aW9uIChsaWtlICs9IGFuZCBmcmllbmRzKSwgd2Ug
Y29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgd2UgaGF2ZSB0byBmaXJzdCBsb2FkIHRoZSB2
YWx1ZSB1c2luZworICAgICAgICBhIGdldHRlciBhbmQgdGhlbiBzdG9yZSBpdCB3aXRoIGEgc2V0
dGVyLiBUaGlzIHBhdGNoIG1ha2VzIHRoaXMgd29yayByZWN1cnNpdmVseSwgc28gdGhhdCB0aGlz
IHdpbGwKKyAgICAgICAgd29yazoKKyAgICAgICAgCisgICAgICAgICAgICBmbG9hdDQgdmVjOwor
ICAgICAgICAgICAgdmVjLnp3eC55ID0gNDI7CisgICAgICAgICAgICAvLyBub3cgdyBpcyA0Mgor
ICAgICAgICAKKyAgICAgICAgVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRlY29tcG9zZSBpdCBhdXRv
bWF0aWNhbGx5OgorICAgICAgICAKKyAgICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAg
ICBmbG9hdDMgdG1wID0gdmVjLnp3eDsKKyAgICAgICAgICAgIHRtcC55ID0gNDI7CisgICAgICAg
ICAgICB2ZWMuend4ID0gdG1wOworICAgICAgICAKKyAgICAgICAgVGhpcydsbCB3b3JrIHRvIGFu
eSBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIFRvIGNoZWNrIGlmIHRoaXMgd29ya3MsIHRoaXMg
cGF0Y2ggYWRkcyB0d28gc3Vic3RhbnRpYWwgbmV3IHRlc3RzIGNhbGxlZCBURVNUX2dlbmVyaWNB
Y2Nlc3NvcnMoKSBhbmQKKyAgICAgICAgVEVTVF9iaXRTdWJzY3JpcHRBY2Nlc3NvcigpLiBUaGlz
IHRlc3RzIHRoYXQgdGhpcyBzdHVmZiB3b3JrcyB3aXRoIGEgbG90IG9mIGdlbmVyaWMgdHlwZXMs
IGFuZCB0aGF0IGl0J3MKKyAgICAgICAgcG9zc2libGUgdG8gdHVybiBpbnRlZ2VycyBpbnRvIGJp
dHZlY3RvcnMgdXNpbmcgc3Vic2NyaXB0IG92ZXJsb2FkaW5nLiBUaGlzIHBhdGNoIGFsc28gYWRk
cyBzbWFsbGVyIHVuaXQKKyAgICAgICAgdGVzdHMgYWxzby4KKyAgICAgICAgCisgICAgICAgIE9o
LCBhbmQgaXQncyBub3cgcG9zc2libGUgdG8gZ2V0IGFuIGFycmF5J3MgbGVuZ3RoLgorCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzOgorICAgICAgICAo
bmVlZHNQcmltaXRpdmVQcm90b2NvbCk6CisgICAgICAgIChwcm90b2NvbFN1ZmZpeCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKEFu
b255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5n
ZXQgb3JpZ2luKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5nZXQgbmFt
ZSk6CisgICAgICAgIChBbm9ueW1vdXNWYXJpYWJsZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qczoKKyAgICAgICAg
KEFycmF5UmVmVHlwZS5wcm90b3R5cGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZCk6CisgICAgICAg
IChBcnJheVJlZlR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanM6CisgICAgICAgIChB
cnJheVR5cGUucHJvdG90eXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQpOgorICAgICAgICAoQXJy
YXlUeXBlLnByb3RvdHlwZS5hcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCk6CisgICAgICAgIChB
cnJheVR5cGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQu
anM6CisgICAgICAgIChBc3NpZ25tZW50KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DYWxsQXNzaWdubWVudC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9uLnJl
c29sdmUpOgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmUpOgorICAg
ICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmVUb092ZXJsb2FkKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzOgorICAgICAgICAoQ2hlY2tl
ci5wcm90b3R5cGUudmlzaXRQcm9ncmFtKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZp
c2l0RnVuY0RlZik6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmMp
OgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KENoZWNrZXIucHJvdG90eXBlLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0RG90RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVja2VyLnBy
b3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9uKToKKyAgICAgICAgKENoZWNrZXIpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxl
LnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOiBEZWxldGVkLgorICAgICAgICAoQ2hlY2tlci5wcm90
b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxlLnByb3RvdHlwZS52aXNp
dFZhcmlhYmxlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0
UHJvdG9jb2xEZWNsLk5vdGljZVR5cGVWYXJpYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdFByb3RvY29sRGVjbC5zZXQgdGhyb3cpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qczoKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzOgorICAgICAgICAo
RG90RXhwcmVzc2lvbik6CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc3Ry
dWN0KToKKyAgICAgICAgKERvdEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBnZXRGdW5jTmFtZSk6
CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoRG90RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHNldEZ1bmNOYW1lKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzOgorICAgICAgICAoRUJ1ZmZlckJ1aWxk
ZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAoRUJ1ZmZlckJ1
aWxkZXIucHJvdG90eXBlLnZpc2l0TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAgICAgICAoRXZhbHVhdG9y
LnByb3RvdHlwZS52aXNpdElkZW50aXR5RXhwcmVzc2lvbik6CisgICAgICAgIChFdmFsdWF0b3Iu
cHJvdG90eXBlLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoRXZhbHVhdG9yLnBy
b3RvdHlwZS52aXNpdEFub255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEV2YWx1YXRvci5wcm90
b3R5cGUudmlzaXREb3RFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEV2YWx1YXRvci5w
cm90b3R5cGUudmlzaXRMZXRFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzOgorICAgICAgICAoRXhwcmVzc2lv
bkZpbmRlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzOgorICAgICAgICAo
Rm9yTG9vcC5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoRm9yTG9vcCk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanM6CisgICAg
ICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1
YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRDYWxsRXhwcmVzc2lvbik6CisgICAgICAgIChGdW5j
SW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1YnN0aXR1dGlv
bik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9y
LnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGUucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVu
Yyk6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUpOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlKToK
KyAgICAgICAgKEZ1bmNJbnN0YW50aWF0b3IpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qczogQWRkZWQuCisgICAgICAgIChJZGVudGl0eUV4
cHJlc3Npb24pOgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgdGFy
Z2V0KToKKyAgICAgICAgKElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0NvbnN0ZXhw
cik6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1ZSk6
CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJv
dG90eXBlLmdldCBhcnJheSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdl
dCBpbmRleCk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1
ZSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgZ2V0RnVuY05hbWUpOgor
ICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc2V0RnVuY05hbWUpOgorICAgICAg
ICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanM6CisgICAgICAgIChpbmZlclR5
cGVzRm9yQ2FsbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpz
OgorICAgICAgICAoX2lubGluZUZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzOgorICAgICAgICAoSW5saW5lci5wcm90b3R5cGUudmlzaXRDYWxs
RXhwcmVzc2lvbik6CisgICAgICAgIChJbmxpbmVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Np
b24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNp
Y3MuanM6CisgICAgICAgIChJbnRyaW5zaWNzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanM6CisgICAgICAgIChNYWtlQXJy
YXlSZWZFeHByZXNzaW9uLnByb3RvdHlwZS5iZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJl
c3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVD
b250ZXh0LmpzOgorICAgICAgICAoTmFtZUNvbnRleHQpOgorICAgICAgICAoTmFtZUNvbnRleHQu
cHJvdG90eXBlLmFkZCk6CisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZG9TdGF0ZW1l
bnQpOgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmhhbmRsZURlZmluaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKE5hbWVDb250ZXh0LnByb3RvdHlwZS5pc0RlZmluZWQpOiBEZWxldGVk
LgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmRlZmluZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZGVmaW5lQWxsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanM6CisgICAgICAgIChOYW1l
UmVzb2x2ZXIucHJvdG90eXBlLmRvU3RhdGVtZW50KToKKyAgICAgICAgKE5hbWVSZXNvbHZlci5w
cm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAgICAoTmFtZVJlc29sdmVyLnByb3Rv
dHlwZS52aXNpdFByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL05hdGl2ZUZ1bmMuanM6CisgICAgICAgIChOYXRpdmVGdW5jKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanM6CisgICAgICAgIChO
YXRpdmVGdW5jSW5zdGFuY2UpOgorICAgICAgICAoTmF0aXZlRnVuY0luc3RhbmNlLnByb3RvdHlw
ZS5nZXQgaW1wbGVtZW50YXRpb25EYXRhKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob2RlLmpzOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUudmlzaXQpOgorICAgICAgICAo
Tm9kZS52aXNpdCk6CisgICAgICAgIChOb2RlLnVuaWZ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0RG90
RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLnByb3RvdHlw
ZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAg
ICAgKGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KToKKyAgICAgICAgKHBhcnNlUG9zc2libGVT
dWZmaXgpOgorICAgICAgICAoZmluaXNoUGFyc2luZ1ByZUluY3JlbWVudCk6CisgICAgICAgIChn
ZW5lcmljUGFyc2VDb21tYUV4cHJlc3Npb24pOgorICAgICAgICAocGFyc2VGdW5jTmFtZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qczoKKyAgICAgICAgKHBy
ZXBhcmUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanM6Cisg
ICAgICAgIChQcm9ncmFtKToKKyAgICAgICAgKFByb2dyYW0ucHJvdG90eXBlLmdldCBnbG9iYWxO
YW1lQ29udGV4dCk6CisgICAgICAgIChQcm9ncmFtLnByb3RvdHlwZS5hZGQpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qczogQWRk
ZWQuCisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgcmVzdWx0VHlwZSk6CisgICAgICAgIChQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90eXBlLnJld3JpdGVBZnRlckNsb25pbmcpOgor
ICAgICAgICAoUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS51cGRhdGVDYWxsc0Fm
dGVyQ2hhbmdpbmdCYXNlKToKKyAgICAgICAgKFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wcm90
b3R5cGUuZW1pdEdldCk6CisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90
eXBlLmVtaXRTZXQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5
UmVzb2x2ZXIuanM6IEFkZGVkLgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUu
X3Zpc2l0UHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5
cGUudmlzaXREb3RFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJvdG90
eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJv
dG90eXBlLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZl
ci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFBy
b3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0QXNzaWdubWVudCk6CisgICAgICAgIChQcm9w
ZXJ0eVJlc29sdmVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVydHlS
ZXNvbHZlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KFByb3BlcnR5UmVzb2x2ZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0
clR5cGUuanM6CisgICAgICAgIChQdHJUeXBlLnByb3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLnJldHVyblR5cGVGcm9tQW5kT3Zlcmxv
YWQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24uanM6IEFkZGVkLgorICAgICAgICAoUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbik6
CisgICAgICAgIChSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgbFZhbHVl
KToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm9sZFZhbHVl
UmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm5ld1Zh
bHVlUmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLnRv
U3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMu
anM6CisgICAgICAgIChjcmVhdGVOYW1lUmVzb2x2ZXIpOgorICAgICAgICAocmVzb2x2ZU5hbWVz
SW5UeXBlcyk6CisgICAgICAgIChyZXNvbHZlTmFtZXNJblByb3RvY29scyk6CisgICAgICAgIChy
ZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlTmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwu
anM6CisgICAgICAgIChyZXNvbHZlT3ZlcmxvYWRJbXBsKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qczogQWRkZWQuCisgICAgICAgIChyZXNv
bHZlUHJvcGVydGllcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2
ZVR5cGVEZWZzLmpzOgorICAgICAgICAocmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyk6CisgICAgICAg
IChyZXNvbHZlVHlwZURlZnNJblByb3RvY29scyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnNJ
bkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnMpOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanM6CisgICAgICAgIChS
ZXR1cm5DaGVja2VyLnByb3RvdHlwZS5faXNCb29sQ2FzdEZyb21MaXRlcmFsVHJ1ZSk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanM6CisgICAgICAgIChSZXdy
aXRlcik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgor
ICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJlZik6CisgICAgICAgIChSZXdy
aXRlci5wcm90b3R5cGUudmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVy
LnByb3RvdHlwZS5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKToKKyAgICAgICAgKFJl
d3JpdGVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJldHVybik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRHZW5l
cmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0TnVsbFR5
cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnByb2Nlc3NEZXJpdmVkQ2FsbERhdGEp
OgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgorICAg
ICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0RnVuY3Rpb25MaWtlQmxvY2spOgorICAgICAg
ICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0SWZTdGF0ZW1lbnQpOgorICAgICAgICAoUmV3cml0
ZXIucHJvdG90eXBlLnZpc2l0Rm9yTG9vcCk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUu
dmlzaXRBbm9ueW1vdXNWYXJpYWJsZSk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0
TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RhbmRhcmRMaWJyYXJ5LmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0cnVjdExheW91dEJ1aWxkZXIuanM6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRCdWlsZGVyLnBy
b3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmNJbnN0YW5jZSk6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRC
dWlsZGVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpz
OgorICAgICAgICAoU3RydWN0VHlwZS5wcm90b3R5cGUuaW5zdGFudGlhdGUpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qczoKKyAgICAgICAgKFN1YnN0
aXR1dGlvbi5wcm90b3R5cGUuZ2V0IG1hcCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanM6IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qczogQWRkZWQuCisg
ICAgICAgIChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmNyZWF0ZVR5cGVQYXJhbWV0ZXJzKToK
KyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuKToKKyAgICAgICAgKHN5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlRmllbGRUeXBlKToKKyAgICAgICAgKHN5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlVHlwZVJlZik6CisgICAgICAgIChzeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzLnNldHVwQW5kZXIpOgorICAgICAgICAoc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29y
cyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChjaGVja051bWJl
cik6CisgICAgICAgIChURVNUX3NpbXBsZVByb3RvY29sKToKKyAgICAgICAgKFRFU1RfYXNzaWdu
TGVuZ3RoKToKKyAgICAgICAgKFRFU1Rfc2ltcGxlU2V0dGVyKToKKyAgICAgICAgKFRFU1RfZ2Vu
ZXJpY0FjY2Vzc29ycyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5q
czoKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmdldCBpc1JlZik6CisgICAgICAgIChUeXBlLnBy
b3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBl
LmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLnJl
dHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQpOgorICAgICAgICAoVHlwZSk6CisgICAgICAgICogV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzOiBBZGRlZC4KKyAg
ICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlzaXRDb25zdGV4cHJUeXBl
UGFyYW1ldGVyKToKKyAgICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRUeXBlVmFyaWFibGUpOgorICAgICAgICAoVHlwZVBhcmFtZXRlclJld3JpdGVyKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFR5cGVWYXJpYWJsZVRyYWNrZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1ZhbHVlLmpzOgorICAgICAgICAoVmFsdWUucHJvdG90eXBlLmJlY29tZSk6
CisgICAgICAgIChWYWx1ZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFy
aWFibGVSZWYuanM6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IGFkZHJlc3NTcGFjZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZp
c2l0b3IucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKToKKyAgICAgICAgKFZpc2l0
b3IucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xEZWNsKToKKyAgICAgICAgKFZpc2l0b3IpOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzOiBS
ZW1vdmVkLgorCiAyMDE3LTA5LTE2ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCB0aGUgVG9vbHMgYnVpbGQgd2l0aCBDTWFrZSBvbiBtYWNPUwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5qcwko
cmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVz
c1NwYWNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxNiBAQCBmdW5jdGlvbiBpc0Fk
ZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCiAgICAgfQogfQogCitmdW5jdGlvbiBuZWVkc1ByaW1p
dGl2ZVByb3RvY29sKGFkZHJlc3NTcGFjZSkKK3sKKyAgICByZXR1cm4gYWRkcmVzc1NwYWNlICE9
ICJ0aHJlYWQiOworfQorCitmdW5jdGlvbiBwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpCit7
CisgICAgcmV0dXJuIG5lZWRzUHJpbWl0aXZlUHJvdG9jb2woYWRkcmVzc1NwYWNlKSA/ICI6cHJp
bWl0aXZlIiA6ICIiOworfQorCiBmdW5jdGlvbiB2YWxpZGF0ZUFkZHJlc3NTcGFjZShhZGRyZXNz
U3BhY2UpCiB7CiAgICAgaWYgKCFpc0FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpKQpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MyArMjksMTQgQEAgbG9hZCgiVHlwZS5qcyIpOwogbG9hZCgiUmVmZXJlbmNlVHlwZS5qcyIpOwog
bG9hZCgiVmFsdWUuanMiKTsKIGxvYWQoIkV4cHJlc3Npb24uanMiKTsKLWxvYWQoIlZpc2l0b3JC
YXNlLmpzIik7CiBsb2FkKCJSZXdyaXRlci5qcyIpOwogbG9hZCgiVmlzaXRvci5qcyIpOwogbG9h
ZCgiQ3JlYXRlTGl0ZXJhbC5qcyIpOwogbG9hZCgiQ3JlYXRlTGl0ZXJhbFR5cGUuanMiKTsKK2xv
YWQoIlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcyIpOwogCiBsb2FkKCJBZGRyZXNzU3BhY2Uu
anMiKTsKK2xvYWQoIkFub255bW91c1ZhcmlhYmxlLmpzIik7CiBsb2FkKCJBcnJheVJlZlR5cGUu
anMiKTsKIGxvYWQoIkFycmF5VHlwZS5qcyIpOwogbG9hZCgiQXNzaWdubWVudC5qcyIpOwpAQCAt
NDMsNyArNDQsNiBAQCBsb2FkKCJBdXRvV3JhcHBlci5qcyIpOwogbG9hZCgiQmxvY2suanMiKTsK
IGxvYWQoIkJvb2xMaXRlcmFsLmpzIik7CiBsb2FkKCJCcmVhay5qcyIpOwotbG9hZCgiQ2FsbEFz
c2lnbm1lbnQuanMiKTsKIGxvYWQoIkNhbGxFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJDYWxsRnVu
Y3Rpb24uanMiKTsKIGxvYWQoIkNoZWNrLmpzIik7CkBAIC02OSw2ICs2OSw3IEBAIGxvYWQoIkV2
YWx1YXRpb25Db21tb24uanMiKTsKIGxvYWQoIkV2YWx1YXRvci5qcyIpOwogbG9hZCgiRXhwcmVz
c2lvbkZpbmRlci5qcyIpOwogbG9hZCgiRmllbGQuanMiKTsKK2xvYWQoIkZpbmRIaWdoWm9tYmll
cy5qcyIpOwogbG9hZCgiRmxhdHRlblByb3RvY29sRXh0ZW5kcy5qcyIpOwogbG9hZCgiRm9yTG9v
cC5qcyIpOwogbG9hZCgiRnVuYy5qcyIpOwpAQCAtNzYsNyArNzcsMTAgQEAgbG9hZCgiRnVuY0Rl
Zi5qcyIpOwogbG9hZCgiRnVuY0luc3RhbnRpYXRvci5qcyIpOwogbG9hZCgiRnVuY1BhcmFtZXRl
ci5qcyIpOwogbG9hZCgiRnVuY3Rpb25MaWtlQmxvY2suanMiKTsKK2xvYWQoIkhpZ2hab21iaWVG
aW5kZXIuanMiKTsKK2xvYWQoIklkZW50aXR5RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiSWZTdGF0
ZW1lbnQuanMiKTsKK2xvYWQoIkluZGV4RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiSW5mZXJUeXBl
c0ZvckNhbGwuanMiKTsKIGxvYWQoIklubGluZS5qcyIpOwogbG9hZCgiSW5saW5lci5qcyIpOwpA
QCAtODQsNyArODgsNiBAQCBsb2FkKCJJbnN0YW50aWF0ZUltbWVkaWF0ZXMuanMiKTsKIGxvYWQo
IkludExpdGVyYWwuanMiKTsKIGxvYWQoIkludExpdGVyYWxUeXBlLmpzIik7CiBsb2FkKCJJbnRy
aW5zaWNzLmpzIik7Ci1sb2FkKCJMZXRFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJMZXhlci5qcyIp
OwogbG9hZCgiTGV4ZXJUb2tlbi5qcyIpOwogbG9hZCgiTGl0ZXJhbFR5cGVDaGVja2VyLmpzIik7
CkBAIC05OCwyMCArMTAxLDI0IEBAIGxvYWQoIk5hdGl2ZUZ1bmMuanMiKTsKIGxvYWQoIk5hdGl2
ZUZ1bmNJbnN0YW5jZS5qcyIpOwogbG9hZCgiTmF0aXZlVHlwZS5qcyIpOwogbG9hZCgiTmF0aXZl
VHlwZUluc3RhbmNlLmpzIik7Citsb2FkKCJOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzIik7
CiBsb2FkKCJOdWxsTGl0ZXJhbC5qcyIpOwogbG9hZCgiTnVsbFR5cGUuanMiKTsKIGxvYWQoIk92
ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiKTsKIGxvYWQoIlBhcnNlLmpzIik7CiBsb2FkKCJQ
cmVwYXJlLmpzIik7CiBsb2FkKCJQcm9ncmFtLmpzIik7Citsb2FkKCJQcm9wZXJ0eVJlc29sdmVy
LmpzIik7CiBsb2FkKCJQcm90b2NvbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xEZWNsLmpzIik7CiBs
b2FkKCJQcm90b2NvbEZ1bmNEZWNsLmpzIik7CiBsb2FkKCJQcm90b2NvbFJlZi5qcyIpOwogbG9h
ZCgiUHRyVHlwZS5qcyIpOworbG9hZCgiUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyIpOwog
bG9hZCgiUmVjdXJzaW9uQ2hlY2tlci5qcyIpOwogbG9hZCgiUmVzb2x2ZU5hbWVzLmpzIik7CiBs
b2FkKCJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIik7Citsb2FkKCJSZXNvbHZlUHJvcGVydGllcy5q
cyIpOwogbG9hZCgiUmVzb2x2ZVR5cGVEZWZzLmpzIik7CiBsb2FkKCJSZXR1cm4uanMiKTsKIGxv
YWQoIlJldHVybkNoZWNrZXIuanMiKTsKQEAgLTEyMCwxMiArMTI3LDE0IEBAIGxvYWQoIlN0YW5k
YXJkTGlicmFyeS5qcyIpOwogbG9hZCgiU3RydWN0TGF5b3V0QnVpbGRlci5qcyIpOwogbG9hZCgi
U3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vic3RpdHV0aW9uLmpzIik7Ci1sb2FkKCJTdWZmaXhD
YWxsQXNzaWdubWVudC5qcyIpOworbG9hZCgiU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyIp
OwogbG9hZCgiVHlwZURlZi5qcyIpOwogbG9hZCgiVHlwZURlZlJlc29sdmVyLmpzIik7CiBsb2Fk
KCJUeXBlT3JWYXJpYWJsZVJlZi5qcyIpOworbG9hZCgiVHlwZVBhcmFtZXRlclJld3JpdGVyLmpz
Iik7CiBsb2FkKCJUeXBlUmVmLmpzIik7CiBsb2FkKCJUeXBlVmFyaWFibGUuanMiKTsKK2xvYWQo
IlR5cGVWYXJpYWJsZVRyYWNrZXIuanMiKTsKIGxvYWQoIlR5cGVkVmFsdWUuanMiKTsKIGxvYWQo
IlVpbnRMaXRlcmFsLmpzIik7CiBsb2FkKCJVaW50TGl0ZXJhbFR5cGUuanMiKTsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpz
CShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91
c1ZhcmlhYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworbGV0IGFu
b255bW91c1ZhcmlhYmxlQ291bnQgPSAwOworCitjbGFzcyBBbm9ueW1vdXNWYXJpYWJsZSBleHRl
bmRzIFZhbHVlIHsKKyAgICAvLyBZb3UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSB2YXJpYWJsZSdz
IHZhbHVlIGJlZm9yZSB1c2UsIGJ1dCB0aGF0IGNvdWxkIGJlIHF1aXRlIGxhdGUuCisgICAgY29u
c3RydWN0b3Iob3JpZ2luLCB0eXBlID0gbnVsbCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7Cisg
ICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5pbmRleCA9IGFub255
bW91c1ZhcmlhYmxlQ291bnQrKzsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB9Cisg
ICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAgIGdldCBu
YW1lKCkgeyByZXR1cm4gImFub25WYXI8IiArIHRoaXMuaW5kZXggKyAiPiI7IH0KKyAgICAKKyAg
ICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5uYW1lOworICAgIH0KK30K
KwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5q
cwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJy
YXlSZWZUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxNSBAQCBjbGFzcyBBcnJh
eVJlZlR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlCiAgICAgCiAgICAgZ2V0IGlzQXJyYXlSZWYo
KSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2FkKG9yaWdpbiwg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICAgIGFyZ3VtZW50
VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1l
bnRUeXBlICsgIltdICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
NzMsNSArNzMsMTYgQEAgY2xhc3MgQXJyYXlUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQs
IG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CisKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2Fk
KG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE1ha2VBcnJh
eVJlZkV4cHJlc3Npb24ob3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5udW1FbGVtZW50
cyA9IHRoaXMubnVtRWxlbWVudHM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgQXJyYXlSZWZUeXBlKG9yaWdpbiwgInRocmVhZCIsIHRoaXMuZWxlbWVudFR5cGUpOwor
ICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVu
dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bc3NpZ25t
ZW50LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Bc3NpZ25tZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTIgQEAKICJ1c2Ug
c3RyaWN0IjsKIAogY2xhc3MgQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNv
bnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMpCisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBsaHMs
IHJocywgdHlwZSA9IG51bGwpCiAgICAgewogICAgICAgICBzdXBlcihvcmlnaW4pOwogICAgICAg
ICB0aGlzLl9saHMgPSBsaHM7CiAgICAgICAgIHRoaXMuX3JocyA9IHJoczsKKyAgICAgICAgdGhp
cy50eXBlID0gdHlwZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGxocygpIHsgcmV0dXJuIHRoaXMu
X2xoczsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFzc2lnbm1l
bnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFz
c2lnbm1lbnQuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVudCkKQEAgLTEsNDYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3Qi
OwotCi1jbGFzcyBDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNvbnN0
cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzLCByaHMpCi0gICAgewotICAgICAgICBzdXBlcihvcmln
aW4pOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fbGhzID0gbGhz
OwotICAgICAgICB0aGlzLl9yaHMgPSByaHM7Ci0gICAgICAgIHRoaXMuZnVuYyA9IG51bGw7Ci0g
ICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAgIGdl
dCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KLSAgICBnZXQgcmhzKCkgeyByZXR1cm4gdGhp
cy5fcmhzOyB9IC8vIFRoaXMgY2FuIGJlIG51bGwuCi0gICAgCi0gICAgdG9TdHJpbmcoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGhzICsgIiAiICsgdGhpcy5uYW1lICsgKHRoaXMucmhz
ID8gIj0gIiArIHRoaXMucmhzIDogIiIpOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsODIgQEAgY2xhc3MgQ2FsbEV4cHJlc3Npb24gZXh0
ZW5kcyBFeHByZXNzaW9uIAogICAgIGdldCBpc0Nhc3QoKSB7IHJldHVybiB0aGlzLl9pc0Nhc3Q7
IH0KICAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3JldHVyblR5cGU7IH0KICAg
ICAKLSAgICByZXNvbHZlKG92ZXJsb2FkKQorICAgIHN0YXRpYyByZXNvbHZlKG9yaWdpbiwgcG9z
c2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSwgbmFtZSwgdHlwZUFyZ3VtZW50
cywgYXJndW1lbnRMaXN0LCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQorICAgIHsKKyAgICAg
ICAgbGV0IGNhbGwgPSBuZXcgQ2FsbEV4cHJlc3Npb24ob3JpZ2luLCBuYW1lLCB0eXBlQXJndW1l
bnRzLCBhcmd1bWVudExpc3QpOworICAgICAgICBjYWxsLmFyZ3VtZW50VHlwZXMgPSBhcmd1bWVu
dFR5cGVzOworICAgICAgICBpZiAocmV0dXJuVHlwZSkKKyAgICAgICAgICAgIGNhbGwuc2V0Q2Fz
dERhdGEocmV0dXJuVHlwZSk7CisgICAgICAgIHJldHVybiB7Y2FsbCwgcmVzdWx0VHlwZTogY2Fs
bC5yZXNvbHZlKHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1ldGVyc0luU2NvcGUsIHR5cGVB
cmd1bWVudHMpfTsKKyAgICB9CisgICAgCisgICAgcmVzb2x2ZShwb3NzaWJsZU92ZXJsb2Fkcywg
dHlwZVBhcmFtZXRlcnNJblNjb3BlLCB0eXBlQXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaWYg
KCFwb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHRo
aXMub3JpZ2luLm9yaWdpblN0cmluZywgIkRpZCBub3QgZmluZCBhbnkgZnVuY3Rpb25zIG5hbWVk
ICIgKyB0aGlzLm5hbWUpOworICAgICAgICAKKyAgICAgICAgbGV0IG92ZXJsb2FkID0gbnVsbDsK
KyAgICAgICAgbGV0IGZhaWx1cmVzID0gW107CisgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0
ZXIgb2YgdHlwZVBhcmFtZXRlcnNJblNjb3BlKSB7CisgICAgICAgICAgICBpZiAoISh0eXBlUGFy
YW1ldGVyIGluc3RhbmNlb2YgVHlwZVZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5wcm90b2NvbCkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxldCBzaWduYXR1cmVzID0KKyAgICAgICAgICAg
ICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnByb3RvY29sRGVjbC5zaWduYXR1cmVzQnlOYW1l
V2l0aFR5cGVWYXJpYWJsZSh0aGlzLm5hbWUsIHR5cGVQYXJhbWV0ZXIpOworICAgICAgICAgICAg
aWYgKCFzaWduYXR1cmVzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
b3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMsIHRoaXMudHlwZUFyZ3Vt
ZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlzLnJldHVyblR5cGUpOworICAgICAgICAgICAg
aWYgKG92ZXJsb2FkLmZ1bmMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBm
YWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKKyAgICAgICAgICAgIG92ZXJsb2Fk
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW92ZXJsb2FkKSB7CisgICAgICAgICAg
ICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCisgICAgICAgICAgICAgICAgcG9zc2li
bGVPdmVybG9hZHMsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlz
LnJldHVyblR5cGUpOworICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7CisgICAgICAg
ICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7CisgICAgICAgICAg
ICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdpdGgg
IjsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlQXJndW1lbnRzLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyB0aGlzLnR5cGVB
cmd1bWVudHMgKyAiPiBhbmQgIjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1bWVu
dCB0eXBlcyAoIiArIHRoaXMuYXJndW1lbnRUeXBlcyArICIpIjsKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5yZXR1cm5UeXBlKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IiBhbmQg
cmV0dXJuIHR5cGUgIiArIHRoaXMucmV0dXJuVHlwZTsKKyAgICAgICAgICAgICAgICBpZiAoZmFp
bHVyZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIsIGJ1dCBjb25z
aWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1lc3NhZ2UpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZUFyZ3Vt
ZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGUgPSB0
eXBlQXJndW1lbnRzW2ldOworICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBvdmVybG9h
ZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOworICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRl
ciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxzV2l0aENv
bW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBlIGFyZ3Vt
ZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0eXBlQXJn
dW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7CisgICAg
ICAgIH0KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyZ3VtZW50VHlwZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBhcmd1bWVudFR5cGUgPSB0aGlzLmFyZ3VtZW50
VHlwZXNbaV07CisgICAgICAgICAgICBsZXQgcGFyYW1ldGVyVHlwZSA9IG92ZXJsb2FkLmZ1bmMu
cGFyYW1ldGVyc1tpXS50eXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAorICAgICAgICAgICAg
ICAgIG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0aW9uQ29u
dGV4dCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRUeXBlLmVxdWFsc1dpdGhD
b21taXQocGFyYW1ldGVyVHlwZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcg
KyAiIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsIGFmdGVyIHR5cGUgYXJn
dW1lbnQgc3Vic3RpdHV0aW9uOiBhcmd1bWVudCA9ICIgKyBhcmd1bWVudFR5cGUgKyAiLCBwYXJh
bWV0ZXIgPSAiICsgcGFyYW1ldGVyVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXMucmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQpOworICAgIH0KKyAgICAKKyAgICByZXNvbHZl
VG9PdmVybG9hZChvdmVybG9hZCkKICAgICB7CiAgICAgICAgIHRoaXMuZnVuYyA9IG92ZXJsb2Fk
LmZ1bmM7CiAgICAgICAgIHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA9IG92ZXJsb2FkLnR5cGVB
cmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQgaW5zdGFuY2VvZiBUeXBl
ID8gdHlwZUFyZ3VtZW50LnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKSA6IHR5cGVBcmd1bWVudCk7
CiAgICAgICAgIGxldCByZXN1bHQgPSBvdmVybG9hZC5mdW5jLnJldHVyblR5cGUuc3Vic3RpdHV0
ZVRvVW5pZmljYXRpb24oCiAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJz
LCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwotICAgICAgICB0aGlzLnJlc3VsdFR5cGUg
PSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOwogICAgICAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCByZXR1cm4gdHlwZSIpOworICAgICAg
ICByZXN1bHQgPSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOworICAgICAgICB0aGlz
LnJlc3VsdFR5cGUgPSByZXN1bHQ7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwzOSArMzQsNDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZp
c2l0b3IgewogICAgIAogICAgIHZpc2l0UHJvZ3JhbShub2RlKQogICAgIHsKLSAgICAgICAgZm9y
IChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKSB7CisgICAgICAgIGxl
dCBkb1N0YXRlbWVudCA9IHN0YXRlbWVudCA9PiB7CiAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
U3RhdGVtZW50ID0gc3RhdGVtZW50OwogICAgICAgICAgICAgc3RhdGVtZW50LnZpc2l0KHRoaXMp
OwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGxldCB0eXBlIG9mIG5vZGUudHlw
ZXMudmFsdWVzKCkpCisgICAgICAgICAgICBkb1N0YXRlbWVudCh0eXBlKTsKKyAgICAgICAgZm9y
IChsZXQgcHJvdG9jb2wgb2Ygbm9kZS5wcm90b2NvbHMudmFsdWVzKCkpCisgICAgICAgICAgICBk
b1N0YXRlbWVudChwcm90b2NvbCk7CisgICAgICAgIGZvciAobGV0IGZ1bmNzIG9mIG5vZGUuZnVu
Y3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmNzKSB7
CisgICAgICAgICAgICAgICAgdGhpcy52aXNpdEZ1bmMoZnVuYyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgZnVuY3Mgb2Ygbm9kZS5mdW5jdGlvbnMudmFsdWVz
KCkpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAgICAgICAgICAg
ICAgZG9TdGF0ZW1lbnQoZnVuYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIHZp
c2l0RnVuY0RlZihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwor
ICAgIH0KKyAgICAKKyAgICB2aXNpdE5hdGl2ZUZ1bmMobm9kZSkKKyAgICB7CiAgICAgfQogICAg
IAogICAgIHZpc2l0UHJvdG9jb2xEZWNsKG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxldCBz
aWduYXR1cmUgb2Ygbm9kZS5zaWduYXR1cmVzKSB7Ci0gICAgICAgICAgICBsZXQgc2V0ID0gbmV3
IFNldCgpOwotICAgICAgICAgICAgZnVuY3Rpb24gY29uc2lkZXIodGhpbmcpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaW5nLmlzVW5pZmlhYmxlKQotICAgICAgICAgICAg
ICAgICAgICBzZXQuYWRkKHRoaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNsYXNz
IE5vdGljZVR5cGVWYXJpYWJsZSBleHRlbmRzIFZpc2l0b3IgewotICAgICAgICAgICAgICAgIHZp
c2l0VHlwZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29uc2lkZXIobm9kZS50eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
dmlzaXRWYXJpYWJsZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc2lkZXIobm9kZS52YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbGV0IG5vdGljZVR5cGVWYXJpYWJsZSA9IG5ldyBOb3RpY2VU
eXBlVmFyaWFibGUoKTsKKyAgICAgICAgICAgIGxldCB0eXBlVmFyaWFibGVUcmFja2VyID0gbmV3
IFR5cGVWYXJpYWJsZVRyYWNrZXIoKTsKICAgICAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlclR5
cGUgb2Ygc2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRl
clR5cGUudmlzaXQobm90aWNlVHlwZVZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJUeXBlLnZpc2l0KHR5cGVWYXJpYWJsZVRyYWNrZXIpOworICAgICAgICAgICAgTm9kZS52aXNp
dChzaWduYXR1cmUucmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbiwgdHlwZVZhcmlhYmxl
VHJhY2tlcik7CiAgICAgICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHNpZ25hdHVy
ZS50eXBlUGFyYW1ldGVycykgewotICAgICAgICAgICAgICAgIGlmICghc2V0Lmhhcyh0eXBlUGFy
YW1ldGVyKSkKKyAgICAgICAgICAgICAgICBpZiAoIXR5cGVWYXJpYWJsZVRyYWNrZXIuc2V0Lmhh
cyh0eXBlUGFyYW1ldGVyKSkKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgV1R5cGVFcnJvcih0
eXBlUGFyYW1ldGVyLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBlIHBhcmFtZXRlciB0byBwcm90
b2NvbCBzaWduYXR1cmUgbm90IGluZmVycmFibGUgZnJvbSB2YWx1ZSBwYXJhbWV0ZXJzIik7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXNldC5oYXMobm9kZS50eXBlVmFyaWFibGUp
KQorICAgICAgICAgICAgaWYgKCF0eXBlVmFyaWFibGVUcmFja2VyLnNldC5oYXMobm9kZS50eXBl
VmFyaWFibGUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHNpZ25hdHVy
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUHJvdG9jb2wncyB0eXBlIHZhcmlhYmxlICgiICsgbm9k
ZS5uYW1lICsgIikgbm90IG1lbnRpb25lZCBpbiBzaWduYXR1cmU6ICIgKyBzaWduYXR1cmUpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTQxLDYgKzE0OSwzMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVu
ZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiBsaHNUeXBlOwogICAgIH0KICAgICAKKyAgICB2
aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUu
dGFyZ2V0LnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS5sVmFsdWUuaXNMVmFs
dWUpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsICJMSFMgb2YgcmVhZC1tb2RpZnktd3JpdGUgaXMgbm90IGFuIExWYWx1ZTogIiArIG5v
ZGUubFZhbGUpOworICAgICAgICBsZXQgbGhzVHlwZSA9IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMp
OworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAgICBub2Rl
Lm5ld1ZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnZp
c2l0KHRoaXMpOworICAgICAgICBub2RlLm5ld1ZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAg
ICBsZXQgbmV3VmFsdWVUeXBlID0gbm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAgICAg
ICAgaWYgKCFsaHNUeXBlLmVxdWFsc1dpdGhDb21taXQobmV3VmFsdWVUeXBlKSkKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBl
IG1pc21hdGNoIGluIHJlYWQtbW9kaWZ5LXdyaXRlOiAiICsgbGhzVHlwZSArICIgdmVyc3VzICIg
KyBuZXdWYWx1ZVR5cGUpOworICAgICAgICByZXR1cm4gbm9kZS5yZXN1bHRFeHAudmlzaXQodGhp
cyk7CisgICAgfQorICAgIAorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKKyAgICB7
CisgICAgICAgIGlmICghbm9kZS50eXBlKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJB
bm9ueW1vdXMgdmFyaWFibGUgbXVzdCBrbm93IHR5cGUgYmVmb3JlIGZpcnN0IGFwcGVhcmFuY2Ui
KTsKKyAgICB9CisgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKICAg
ICB7CiAgICAgICAgIGxldCB0eXBlID0gbm9kZS5wdHIudmlzaXQodGhpcykudW5pZnlOb2RlOwpA
QCAtMTY1LDcgKzE5OSw3IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICB7
CiAgICAgICAgIGxldCBlbGVtZW50VHlwZSA9IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpLnVuaWZ5
Tm9kZTsKICAgICAgICAgaWYgKGVsZW1lbnRUeXBlIGluc3RhbmNlb2YgUHRyVHlwZSkgewotICAg
ICAgICAgICAgbm9kZS5iZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24oKTsKKyAg
ICAgICAgICAgIG5vZGUuYmVjb21lKG5ldyBDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24o
bm9kZS5vcmlnaW4sIG5vZGUubFZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5
UmVmVHlwZShub2RlLm9yaWdpbiwgZWxlbWVudFR5cGUuYWRkcmVzc1NwYWNlLCBlbGVtZW50VHlw
ZS5lbGVtZW50VHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xODksMzUgKzIyMyw4NyBA
QCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiU2hvdWxkIG5vdCBleGlzdCB5ZXQuIik7CiAgICAgfQogICAgIAotICAgIHZpc2l0RG90RXhw
cmVzc2lvbihub2RlKQorICAgIF9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIGJh
c2VUeXBlLCBleHRyYUFyZ3MsIGV4dHJhQXJnVHlwZXMpCiAgICAgewotICAgICAgICBsZXQgc3Ry
dWN0VHlwZSA9IG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpLnVuaWZ5Tm9kZTsKKyAgICAgICAgYmFz
ZVR5cGUgPSBiYXNlVHlwZS52aXNpdChuZXcgQXV0b1dyYXBwZXIoKSkKKyAgICAgICAgbm9kZS5i
YXNlVHlwZSA9IGJhc2VUeXBlOwogICAgICAgICAKLSAgICAgICAgbm9kZS5zdHJ1Y3RUeXBlID0g
c3RydWN0VHlwZS52aXNpdChuZXcgQXV0b1dyYXBwZXIoKSk7Ci0gICAgICAgIAotICAgICAgICBs
ZXQgdW5kZXJseWluZ1N0cnVjdCA9IHN0cnVjdFR5cGU7Ci0gICAgICAgIAotICAgICAgICBpZiAo
c3RydWN0VHlwZSBpbnN0YW5jZW9mIFR5cGVSZWYpCi0gICAgICAgICAgICB1bmRlcmx5aW5nU3Ry
dWN0ID0gdW5kZXJseWluZ1N0cnVjdC50eXBlOwotICAgICAgICAKLSAgICAgICAgaWYgKCEodW5k
ZXJseWluZ1N0cnVjdCBpbnN0YW5jZW9mIFN0cnVjdFR5cGUpKQotICAgICAgICAgICAgdGhyb3cg
bmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiT3BlcmFuZCB0byBkb3Qg
ZXhwcmVzc2lvbiBpcyBub3QgYSBzdHJ1Y3QgdHlwZTogIiArIHN0cnVjdFR5cGUpOworICAgICAg
ICAvLyBTdWNoIGEgdHlwZSBtdXN0IGV4aXN0LiBUaGlzIG1heSB0aHJvdyBpZiBpdCBkb2Vzbid0
LgorICAgICAgICBsZXQgdHlwZUZvckFuZCA9IGJhc2VUeXBlLmFyZ3VtZW50VHlwZUZvckFuZE92
ZXJsb2FkKG5vZGUub3JpZ2luKTsKKyAgICAgICAgaWYgKCF0eXBlRm9yQW5kKQorICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZ2V0IHR5cGVGb3JBbmQiKTsKKyAgICAgICAgCisg
ICAgICAgIGxldCBlcnJvckZvckdldDsKKyAgICAgICAgbGV0IGVycm9yRm9yQW5kOworICAgICAg
ICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBDYWxsRXhwcmVzc2lv
bi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLnBvc3NpYmxlR2V0
T3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0ZXJzLAorICAgICAg
ICAgICAgICAgIG5vZGUuZ2V0RnVuY05hbWUsIFtdLCBbbm9kZS5iYXNlLCAuLi5leHRyYUFyZ3Nd
LCBbYmFzZVR5cGUsIC4uLmV4dHJhQXJnVHlwZXNdLCBudWxsKTsKKyAgICAgICAgICAgIG5vZGUu
Y2FsbEZvckdldCA9IHJlc3VsdC5jYWxsOworICAgICAgICAgICAgbm9kZS5yZXN1bHRUeXBlRm9y
R2V0ID0gcmVzdWx0LnJlc3VsdFR5cGU7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgIGlmICghKGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICB0aHJv
dyBlOworICAgICAgICAgICAgZXJyb3JGb3JHZXQgPSBlOworICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBpZiAoc3RydWN0VHlwZSBpbnN0YW5jZW9mIFR5cGVSZWYpIAotICAgICAgICAgICAg
dW5kZXJseWluZ1N0cnVjdCA9IHVuZGVybHlpbmdTdHJ1Y3QuaW5zdGFudGlhdGUoc3RydWN0VHlw
ZS50eXBlQXJndW1lbnRzLCAic2hhbGxvdyIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAg
bGV0IGJhc2VGb3JBbmQgPSBiYXNlVHlwZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKG5vZGUub3Jp
Z2luLCBub2RlLmJhc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsZXQgcmVzdWx0ID0g
Q2FsbEV4cHJlc3Npb24ucmVzb2x2ZSgKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9k
ZS5wb3NzaWJsZUFuZE92ZXJsb2FkcywgdGhpcy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFyYW1l
dGVycywKKyAgICAgICAgICAgICAgICBub2RlLmFuZEZ1bmNOYW1lLCBbXSwgW2Jhc2VGb3JBbmQs
IC4uLmV4dHJhQXJnc10sIFt0eXBlRm9yQW5kLCAuLi5leHRyYUFyZ1R5cGVzXSwKKyAgICAgICAg
ICAgICAgICBudWxsKTsKKyAgICAgICAgICAgIG5vZGUuY2FsbEZvckFuZCA9IHJlc3VsdC5jYWxs
OworICAgICAgICAgICAgbm9kZS5yZXN1bHRUeXBlRm9yQW5kID0gcmVzdWx0LnJlc3VsdFR5cGUu
dW5pZnlOb2RlLnJldHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQobm9kZS5vcmlnaW4pOworICAgICAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgV1R5cGVFcnJv
cikpCisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIGVycm9yRm9yQW5kID0g
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFub2RlLnJlc3VsdFR5cGVGb3JH
ZXQgJiYgIW5vZGUucmVzdWx0VHlwZUZvckFuZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFdU
eXBlRXJyb3IoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLAorICAg
ICAgICAgICAgICAgICJDYW5ub3QgcmVzb2x2ZSBhY2Nlc3M7IHRyaWVkIGJ5LXZhbHVlOlxuIiAr
CisgICAgICAgICAgICAgICAgZXJyb3JGb3JHZXQubWVzc2FnZSArICJcbiIgKworICAgICAgICAg
ICAgICAgICJhbmQgdHJpZWQgYnktcG9pbnRlcjpcbiIgKworICAgICAgICAgICAgICAgIGVycm9y
Rm9yQW5kLm1lc3NhZ2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS5y
ZXN1bHRUeXBlRm9yR2V0ICYmIG5vZGUucmVzdWx0VHlwZUZvckFuZAorICAgICAgICAgICAgJiYg
IW5vZGUucmVzdWx0VHlwZUZvckdldC5lcXVhbHMobm9kZS5yZXN1bHRUeXBlRm9yQW5kKSkKKyAg
ICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywg
IlJlc3VsdCB0eXBlIHJlc29sdmVkIGJ5LXZhbHVlICgiICsgbm9kZS5yZXN1bHRUeXBlRm9yR2V0
ICsgIikgZG9lcyBub3QgbWF0Y2ggcmVzdWx0IHR5cGUgcmVzb2x2ZWQgYnktcG9pbnRlciAoIiAr
IG5vZGUucmVzdWx0VHlwZUZvckFuZCArICIpIik7CisgICAgICAgIAorICAgICAgICB0cnkgewor
ICAgICAgICAgICAgbGV0IHJlc3VsdCA9IENhbGxFeHByZXNzaW9uLnJlc29sdmUoCisgICAgICAg
ICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUucG9zc2libGVTZXRPdmVybG9hZHMsIHRoaXMuX2N1
cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgbm9kZS5zZXRG
dW5jTmFtZSwgW10sIFtub2RlLmJhc2UsIC4uLmV4dHJhQXJncywgbnVsbF0sIFtiYXNlVHlwZSwg
Li4uZXh0cmFBcmdUeXBlcywgbm9kZS5yZXN1bHRUeXBlXSwgbnVsbCk7CisgICAgICAgICAgICBu
b2RlLmNhbGxGb3JTZXQgPSByZXN1bHQuY2FsbDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnJl
c3VsdFR5cGUuZXF1YWxzKGJhc2VUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJSZXN1bHQgdHlwZSBvZiBzZXR0ZXIg
IiArIHJlc3VsdC5jYWxsLmZ1bmMgKyAiIGlzIG5vdCB0aGUgYmFzZSB0eXBlICIgKyBiYXNlVHlw
ZSk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2Vv
ZiBXVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgbm9k
ZS5lcnJvckZvclNldCA9IGU7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGxldCBmaWVs
ZCA9IHVuZGVybHlpbmdTdHJ1Y3QuZmllbGRCeU5hbWUobm9kZS5maWVsZE5hbWUpOwotICAgICAg
ICBpZiAoIWZpZWxkKQotICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiRmllbGQgIiArIG5vZGUuZmllbGROYW1lICsgIiBub3QgZm91bmQg
aW4gIiArIHN0cnVjdFR5cGUpOwotICAgICAgICByZXR1cm4gZmllbGQudHlwZTsKKyAgICAgICAg
cmV0dXJuIG5vZGUucmVzdWx0VHlwZTsKICAgICB9CiAgICAgCi0gICAgdmlzaXRMZXRFeHByZXNz
aW9uKG5vZGUpCisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCiAgICAgewotICAgICAgICBu
b2RlLnR5cGUgPSBub2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAoIW5vZGUu
dHlwZSkKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRGlkIG5vdCBnZXQgdHlwZSBmb3Ig
bm9kZTogIiArIG5vZGUuYXJndW1lbnQpOwotICAgICAgICByZXR1cm4gbm9kZS5ib2R5LnZpc2l0
KHRoaXMpOworICAgICAgICBsZXQgc3RydWN0VHlwZSA9IG5vZGUuc3RydWN0LnZpc2l0KHRoaXMp
LnVuaWZ5Tm9kZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmlzaFZpc2l0aW5nUHJvcGVydHlB
Y2Nlc3Mobm9kZSwgc3RydWN0VHlwZSwgW10sIFtdKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJ
bmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCBhcnJheVR5cGUgPSBub2Rl
LmFycmF5LnZpc2l0KHRoaXMpLnVuaWZ5Tm9kZTsKKyAgICAgICAgbGV0IGluZGV4VHlwZSA9IG5v
ZGUuaW5kZXgudmlzaXQodGhpcyk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdGhpcy5fZmlu
aXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2Vzcyhub2RlLCBhcnJheVR5cGUsIFtub2RlLmluZGV4XSwg
W2luZGV4VHlwZV0pOwogICAgIH0KICAgICAKICAgICB2aXNpdFZhcmlhYmxlUmVmKG5vZGUpCkBA
IC0zMjIsMTAgKzQwOCwxMCBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAg
ICAgICAgICByZXN1bHQgPSBleHByZXNzaW9uLnZpc2l0KHRoaXMpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KLQorICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAg
ICB7Ci0gICAgICAgIGxldCB0eXBlQXJndW1lbnRUeXBlcyA9IG5vZGUudHlwZUFyZ3VtZW50cy5t
YXAodHlwZUFyZ3VtZW50ID0+IHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKSk7CisgICAgICAgIGxl
dCB0eXBlQXJndW1lbnRzID0gbm9kZS50eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJndW1lbnQgPT4g
dHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKTsKICAgICAgICAgbGV0IGFyZ3VtZW50VHlwZXMgPSBu
b2RlLmFyZ3VtZW50TGlzdC5tYXAoYXJndW1lbnQgPT4gewogICAgICAgICAgICAgbGV0IG5ld0Fy
Z3VtZW50ID0gYXJndW1lbnQudmlzaXQodGhpcyk7CiAgICAgICAgICAgICBpZiAoIW5ld0FyZ3Vt
ZW50KQpAQCAtMzMzLDc3ICs0MTksMTIgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3Ig
ewogICAgICAgICAgICAgcmV0dXJuIG5ld0FyZ3VtZW50LnZpc2l0KG5ldyBBdXRvV3JhcHBlcigp
KTsKICAgICAgICAgfSk7CiAgICAgICAgIAotICAgICAgICAvLyBIZXJlIHdlIG5lZWQgdG8gaGFu
ZGxlIHRoZSBjYXNlcyB3aGVyZSBvcGVyYXRvciZbXSBpcyBjYWxsZWQgd2l0aCBhIHR5cGUgdGhh
dCBpc24ndCBzdWZmaWNpZW50bHkKLSAgICAgICAgLy8gcmVmZXJlbmNleS4KLSAgICAgICAgaWYg
KG5vZGUubmFtZSA9PSAib3BlcmF0b3ImW10iKSB7Ci0gICAgICAgICAgICBsZXQgYXJnVHlwZSA9
IGFyZ3VtZW50VHlwZXNbMF0udW5pZnlOb2RlOwotICAgICAgICAgICAgaWYgKGFyZ1R5cGUgaW5z
dGFuY2VvZiBQdHJUeXBlKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5v
ZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlBvaW50ZXIgc3Vic2NyaXB0IGlzIG5vdCB2YWxpZCIp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYXJnVHlwZSBpbnN0YW5jZW9mIEFycmF5
VHlwZSkgewotICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdID0gbmV3IE1ha2VB
cnJheVJlZkV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0WzBdKTsKLSAg
ICAgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdFswXS5udW1FbGVtZW50cyA9IGFyZ1R5cGUu
bnVtRWxlbWVudHM7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlc1swXSA9IG5ldyBBcnJh
eVJlZlR5cGUobm9kZS5vcmlnaW4sICJ0aHJlYWQiLCBhcmdUeXBlLmVsZW1lbnRUeXBlKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIShhcmdUeXBlIGluc3RhbmNlb2YgQXJyYXlSZWZUeXBlKSkg
ewotICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdID0gbmV3IE1ha2VQdHJFeHBy
ZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmFyZ3VtZW50TGlzdFswXSk7Ci0gICAgICAgICAgICAg
ICAgYXJndW1lbnRUeXBlc1swXSA9IG5ldyBQdHJUeXBlKG5vZGUub3JpZ2luLCAidGhyZWFkIiwg
YXJndW1lbnRUeXBlc1swXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCiAg
ICAgICAgIG5vZGUuYXJndW1lbnRUeXBlcyA9IGFyZ3VtZW50VHlwZXM7CiAgICAgICAgIGlmIChu
b2RlLnJldHVyblR5cGUpCiAgICAgICAgICAgICBub2RlLnJldHVyblR5cGUudmlzaXQodGhpcyk7
Ci0gICAgICAgIAotICAgICAgICBsZXQgb3ZlcmxvYWQgPSBudWxsOwotICAgICAgICBsZXQgZmFp
bHVyZXMgPSBbXTsKLSAgICAgICAgZm9yIChsZXQgdHlwZVBhcmFtZXRlciBvZiB0aGlzLl9jdXJy
ZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICBpZiAoISh0eXBlUGFy
YW1ldGVyIGluc3RhbmNlb2YgVHlwZVZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5wcm90b2NvbCkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGxldCBzaWduYXR1cmVzID0KLSAgICAgICAgICAg
ICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnByb3RvY29sRGVjbC5zaWduYXR1cmVzQnlOYW1l
V2l0aFR5cGVWYXJpYWJsZShub2RlLm5hbWUsIHR5cGVQYXJhbWV0ZXIpOwotICAgICAgICAgICAg
aWYgKCFzaWduYXR1cmVzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
b3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMsIG5vZGUudHlwZUFyZ3Vt
ZW50cywgYXJndW1lbnRUeXBlcywgbm9kZS5yZXR1cm5UeXBlKTsKLSAgICAgICAgICAgIGlmIChv
dmVybG9hZC5mdW5jKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZmFpbHVy
ZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Ci0gICAgICAgICAgICBvdmVybG9hZCA9IG51
bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFvdmVybG9hZCkgewotICAgICAgICAgICAgb3Zl
cmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKAotICAgICAgICAgICAgICAgIG5vZGUucG9zc2li
bGVPdmVybG9hZHMsIG5vZGUudHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgbm9kZS5yZXR1
cm5UeXBlKTsKLSAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykgewotICAgICAgICAgICAg
ICAgIGZhaWx1cmVzLnB1c2goLi4ub3ZlcmxvYWQuZmFpbHVyZXMpOwotICAgICAgICAgICAgICAg
IGxldCBtZXNzYWdlID0gIkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCB3aXRoICI7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpCi0gICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2UgKz0gInR5cGUgYXJndW1lbnRzIDwiICsgbm9kZS50eXBlQXJndW1l
bnRzICsgIj4gYW5kICI7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiYXJndW1lbnQgdHlw
ZXMgKCIgKyBhcmd1bWVudFR5cGVzICsgIikiOwotICAgICAgICAgICAgICAgIGlmIChub2RlLnJl
dHVyblR5cGUpCi0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0iIGFuZCByZXR1cm4gdHlw
ZSAiICsgbm9kZS5yZXR1cm5UeXBlOwotICAgICAgICAgICAgICAgIGlmIChmYWlsdXJlcy5sZW5n
dGgpCi0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIiwgYnV0IGNvbnNpZGVyZWQ6XG4i
ICsgZmFpbHVyZXMuam9pbigiXG4iKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVy
cm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgbWVzc2FnZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRUeXBlcy5s
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGUgPSB0eXBlQXJn
dW1lbnRUeXBlc1tpXTsKLSAgICAgICAgICAgIGxldCB0eXBlUGFyYW1ldGVyID0gb3ZlcmxvYWQu
ZnVuYy50eXBlUGFyYW1ldGVyc1tpXTsKLSAgICAgICAgICAgIGlmICghKHR5cGVQYXJhbWV0ZXIg
aW5zdGFuY2VvZiBDb25zdGV4cHJUeXBlUGFyYW1ldGVyKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci50eXBlLmVxdWFsc1dpdGhDb21t
aXQodHlwZUFyZ3VtZW50VHlwZSkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJB
dCAiICsgbm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIiBjb25zdGV4cHIgdHlwZSBhcmd1bWVu
dCBhbmQgcGFyYW1ldGVyIHR5cGVzIG5vdCBlcXVhbDogYXJndW1lbnQgPSAiICsgdHlwZUFyZ3Vt
ZW50VHlwZSArICIsIHBhcmFtZXRlciA9ICIgKyB0eXBlUGFyYW1ldGVyLnR5cGUpOwotICAgICAg
ICB9Ci0gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRUeXBlcy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgbGV0IGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZXNbaV07Ci0g
ICAgICAgICAgICBsZXQgcGFyYW1ldGVyVHlwZSA9IG92ZXJsb2FkLmZ1bmMucGFyYW1ldGVyc1tp
XS50eXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAotICAgICAgICAgICAgICAgIG92ZXJsb2Fk
LmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0aW9uQ29udGV4dCk7Ci0gICAg
ICAgICAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRUeXBlLmVxdWFsc1dpdGhDb21taXQocGFyYW1l
dGVyVHlwZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkF0ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGFyZ3VtZW50
IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsIGFmdGVyIHR5cGUgYXJndW1lbnQgc3Vic3Rp
dHV0aW9uOiBhcmd1bWVudCA9ICIgKyBhcmd1bWVudFR5cGUgKyAiLCBwYXJhbWV0ZXIgPSAiICsg
cGFyYW1ldGVyVHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5vZGUucmVzb2x2ZShv
dmVybG9hZCk7CisKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5vZGUucmVzb2x2ZShub2RlLnBvc3Np
YmxlT3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0ZXJzLCB0eXBl
QXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiB9CiAKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Db21tYUV4cHJlc3Npb24uanMJKHJl
dmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhw
cmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOSBAQCBjbGFzcyBDb21tYUV4
cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uCiAgICAgCiAgICAgZ2V0IGxpc3QoKSB7IHJldHVy
biB0aGlzLl9saXN0OyB9CiAgICAgCisgICAgLy8gTk9URTogSXQncyBzdXBlciB0ZW1wdGluZyB0
byBzYXkgdGhhdCBDb21tYUV4cHJlc3Npb24gaXMgYW4gbFZhbHVlIGlmIGl0cyBsYXN0IGVudHJ5
IGlzIGFuIGxWYWx1ZS4gQnV0LAorICAgIC8vIFByb3BlcnR5UmVzb2x2ZXIgcmVsaWVzIG9uIHRo
aXMgbm90IGJlaW5nIHRoZSBjYXNlLgorICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiAiKCIgKyB0aGlzLmxpc3QudG9TdHJpbmcoKSArICIpIjsKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RvdEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjQsMTkgKzI0LDIyIEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsK
IAotY2xhc3MgRG90RXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24geworY2xhc3MgRG90RXhw
cmVzc2lvbiBleHRlbmRzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiB7CiAgICAgY29uc3RydWN0
b3Iob3JpZ2luLCBzdHJ1Y3QsIGZpZWxkTmFtZSkKICAgICB7Ci0gICAgICAgIHN1cGVyKG9yaWdp
bik7Ci0gICAgICAgIHRoaXMuX3N0cnVjdCA9IHN0cnVjdDsKKyAgICAgICAgc3VwZXIob3JpZ2lu
LCBzdHJ1Y3QpOwogICAgICAgICB0aGlzLl9maWVsZE5hbWUgPSBmaWVsZE5hbWU7CiAgICAgfQog
ICAgIAotICAgIGdldCBzdHJ1Y3QoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3Q7IH0KKyAgICBnZXQg
c3RydWN0KCkgeyByZXR1cm4gdGhpcy5iYXNlOyB9CiAgICAgZ2V0IGZpZWxkTmFtZSgpIHsgcmV0
dXJuIHRoaXMuX2ZpZWxkTmFtZTsgfQogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIHRoaXMu
c3RydWN0LmlzTFZhbHVlOyB9CiAgICAgZ2V0IGFkZHJlc3NTcGFjZSgpIHsgcmV0dXJuIHRoaXMu
c3RydWN0LmFkZHJlc3NTcGFjZTsgfQogICAgIAorICAgIGdldCBnZXRGdW5jTmFtZSgpIHsgcmV0
dXJuICJvcGVyYXRvci4iICsgdGhpcy5maWVsZE5hbWU7IH0KKyAgICBnZXQgYW5kRnVuY05hbWUo
KSB7IHJldHVybiAib3BlcmF0b3ImLiIgKyB0aGlzLmZpZWxkTmFtZTsgfQorICAgIGdldCBzZXRG
dW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvci4iICsgdGhpcy5maWVsZE5hbWUgKyAiPSI7IH0K
KyAgICAKICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gIigiICsgdGhpcy5z
dHJ1Y3QgKyAiLiIgKyB0aGlzLmZpZWxkTmFtZSArICIpIjsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0VCdWZmZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIg
KzYwLDE0IEBAIGNsYXNzIEVCdWZmZXIgewogICAgIGdldChpbmRleCkKICAgICB7CiAgICAgICAg
IGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5fYXJyYXkubGVuZ3RoKQotICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJvdXQgb2YgYm91bmRzIGJ1ZmZlciBhY2Nlc3MiKTsKKyAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiT3V0IG9mIGJvdW5kcyBidWZmZXIgYWNjZXNzIChidWZm
ZXIgPSAiICsgdGhpcyArICIsIGluZGV4ID0gIiArIGluZGV4ICsgIikiKTsKICAgICAgICAgcmV0
dXJuIHRoaXMuX2FycmF5W2luZGV4XTsKICAgICB9CiAgICAgCiAgICAgc2V0KGluZGV4LCB2YWx1
ZSkKICAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5fYXJyYXku
bGVuZ3RoKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJvdXQgb2YgYm91bmRzIGJ1ZmZl
ciBhY2Nlc3MgKGJ1ZmZlciA9ICIgKyB0aGlzICsgIiwgaW5kZXggPSAiICsgaW5kZXggKyAiKSIp
OwogICAgICAgICB0aGlzLl9hcnJheVtpbmRleF0gPSB2YWx1ZTsKICAgICB9CiAgICAgCkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwko
cmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZl
ckJ1aWxkZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMSArMTA0LDkgQEAgY2xhc3MgRUJ1
ZmZlckJ1aWxkZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgc3VwZXIudmlzaXRMb2dpY2Fs
Tm90KG5vZGUpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkKKyAg
ICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewogICAgICAgICB0aGlzLl9jcmVh
dGVFUHRyRm9yTm9kZShub2RlKTsKLSAgICAgICAgbm9kZS5hcmd1bWVudC52aXNpdCh0aGlzKTsK
LSAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdE1h
a2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0V2YWx1YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9FdmFsdWF0b3IuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEw
MiwxMSBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgcmV0dXJu
IHRhcmdldDsKICAgICB9CiAgICAgCisgICAgdmlzaXRJZGVudGl0eUV4cHJlc3Npb24obm9kZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBub2RlLnRhcmdldC52aXNpdCh0aGlzKTsKKyAgICB9Cisg
ICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAg
IGxldCBwdHIgPSBub2RlLnB0ci52aXNpdCh0aGlzKS5sb2FkVmFsdWUoKTsKQEAgLTExMiw3ICsx
MTcsOCBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAKICAgICB2aXNp
dE1ha2VQdHJFeHByZXNzaW9uKG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbm9kZS5lUHRy
LmJveChub2RlLmxWYWx1ZS52aXNpdCh0aGlzKSk7CisgICAgICAgIGxldCBwdHIgPSBub2RlLmxW
YWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIG5vZGUuZVB0ci5ib3gocHRyKTsKICAg
ICB9CiAgICAgCiAgICAgdmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpCkBAIC0xMjUs
MTIgKzEzMSw2IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBy
ZXR1cm4gbm9kZS5lUHRyLmJveChuZXcgRUFycmF5UmVmKG5vZGUubFZhbHVlLnZpc2l0KHRoaXMp
LmxvYWRWYWx1ZSgpLCAxKSk7CiAgICAgfQogICAgIAotICAgIHZpc2l0RG90RXhwcmVzc2lvbihu
b2RlKQotICAgIHsKLSAgICAgICAgbGV0IHN0cnVjdFB0ciA9IG5vZGUuc3RydWN0LnZpc2l0KHRo
aXMpOwotICAgICAgICByZXR1cm4gc3RydWN0UHRyLnBsdXMobm9kZS5maWVsZC5vZmZzZXQpOwot
ICAgIH0KLSAgICAKICAgICB2aXNpdENvbW1hRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAg
ICAgbGV0IHJlc3VsdDsKQEAgLTIzMSwxMCArMjMxLDkgQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVu
ZHMgVmlzaXRvciB7CiAgICAgICAgIHRocm93IENvbnRpbnVlRXhjZXB0aW9uOwogICAgIH0KICAg
ICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkKKyAgICB2aXNpdEFub255bW91c1Zhcmlh
YmxlKG5vZGUpCiAgICAgewotICAgICAgICBub2RlLmVQdHIuY29weUZyb20obm9kZS5hcmd1bWVu
dC52aXNpdCh0aGlzKSwgbm9kZS50eXBlLnNpemUpOwotICAgICAgICByZXR1cm4gbm9kZS5ib2R5
LnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLnR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUobm9k
ZS5lUHRyLmJ1ZmZlciwgbm9kZS5lUHRyLm9mZnNldCk7CiAgICAgfQogICAgIAogICAgIHZpc2l0
Q2FsbEV4cHJlc3Npb24obm9kZSkKQEAgLTI0Nyw2ICsyNDYsOCBAQCBjbGFzcyBFdmFsdWF0b3Ig
ZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgIGlmICghdHlwZSB8fCAhYXJndW1lbnQpCiAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZ2V0IHR5cGUgb3IgYXJndW1l
bnQ7IGkgPSAiICsgaSArICIsIGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50ICsgIiwgdHlwZSA9ICIg
KyB0eXBlICsgIjsgaW4gIiArIG5vZGUpOwogICAgICAgICAgICAgbGV0IGFyZ3VtZW50VmFsdWUg
PSBhcmd1bWVudC52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIGlmICghYXJndW1lbnRWYWx1ZSkK
KyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgYXJndW1lbnQgdmFsdWUsIGkg
PSAiICsgaSArICIsIG5vZGUgPSAiICsgbm9kZSk7CiAgICAgICAgICAgICBjYWxsQXJndW1lbnRz
LnB1c2goKCkgPT4gdGhpcy5fc25hcHNob3QodHlwZSwgbnVsbCwgYXJndW1lbnRWYWx1ZSkpOwog
ICAgICAgICB9CiAgICAgICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RXhwcmVzc2lvbkZpbmRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw2ICs1NiwxNiBAQCBjbGFzcyBFeHByZXNzaW9uRmluZGVyIGV4dGVuZHMgVmlzaXRv
ciB7CiAgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUpOwogICAgIH0KICAgICAKKyAgICB2aXNp
dFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2Nh
bGxiYWNrKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihu
b2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CisgICAgfQorICAgIAog
ICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIHRoaXMuX2NhbGxi
YWNrKG5vZGUpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRmluZEhpZ2ha
b21iaWVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zp
bmRIaWdoWm9tYmllcy5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9GaW5kSGlnaFpvbWJpZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJp
Y3QiOworCitmdW5jdGlvbiBmaW5kSGlnaFpvbWJpZXMocHJvZ3JhbSkKK3sKKyAgICBwcm9ncmFt
LnZpc2l0KG5ldyBIaWdoWm9tYmllRmluZGVyKCkpOworfQpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRm9yTG9vcC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0
Myw3IEBAIGNsYXNzIEZvckxvb3AgZXh0ZW5kcyBOb2RlIHsKIAogICAgIHRvU3RyaW5nKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiAiZm9yICgiICsgKHRoaXMuaW5pdGlhbGl6YXRpb24gPyB0aGlz
LmluaXRpYWxpemF0aW9uIDogIiAiKSArICI7ICIgKyAodGhpcy5jb25kaXRpb24gPyB0aGlzLmNv
bmRpdGlvbiA6ICIiKSArICI7ICIgKyAodGhpcy5pbmNyZW1lbnQgPyB0aGlzLmluY3JlbWVudCA6
ICIiKSArICIpICIgKyBib2R5OworICAgICAgICByZXR1cm4gImZvciAoIiArICh0aGlzLmluaXRp
YWxpemF0aW9uID8gdGhpcy5pbml0aWFsaXphdGlvbiA6ICIgIikgKyAiOyAiICsgKHRoaXMuY29u
ZGl0aW9uID8gdGhpcy5jb25kaXRpb24gOiAiIikgKyAiOyAiICsgKHRoaXMuaW5jcmVtZW50ID8g
dGhpcy5pbmNyZW1lbnQgOiAiIikgKyAiKSAiICsgdGhpcy5ib2R5OwogICAgIH0KIH07CiAKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwkocmV2aXNpb24gMjIyMTIzKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksMTIgQEAgY2xhc3MgRnVuYyBleHRlbmRzIE5vZGUgewogICAgIHsKICAgICAg
ICAgaWYgKCEob3JpZ2luIGluc3RhbmNlb2YgTGV4ZXJUb2tlbikpCiAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkJhZCBvcmlnaW46ICIgKyBvcmlnaW4pOworICAgICAgICBmb3IgKGxldCBw
YXJhbWV0ZXIgb2YgcGFyYW1ldGVycykgeworICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXIpCisg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIHBhcmFtZXRlciIpOworICAgICAg
ICAgICAgaWYgKCFwYXJhbWV0ZXIudHlwZSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIk51bGwgcGFyYW1ldGVyIHR5cGUiKTsKKyAgICAgICAgfQogICAgICAgICBzdXBlcigpOwog
ICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CiAgICAgICAgIHRoaXMuX25hbWUgPSBuYW1l
OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0luc3RhbnRpYXRvci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFu
dGlhdG9yLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03NSwzMyArNzUsMzgg
QEAgY2xhc3MgRnVuY0luc3RhbnRpYXRvciB7CiAgICAgICAgICAgICAgICAgICAgIGxldCBvdmVy
bG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwocmVzdWx0LnBvc3NpYmxlT3ZlcmxvYWRzLCByZXN1
bHQudHlwZUFyZ3VtZW50cywgcmVzdWx0LmFyZ3VtZW50VHlwZXMsIHJlc3VsdC5yZXR1cm5UeXBl
Rm9yT3ZlcmxvYWRSZXNvbHV0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFvdmVybG9h
ZC5mdW5jKQogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBu
b3QgcmVzb2x2ZSBwcm90b2NvbCBzaWduYXR1cmUgZnVuY3Rpb24gY2FsbCBkdXJpbmcgaW5zdGFu
dGlhdGlvbjogIiArIHJlc3VsdC5mdW5jICsgKG92ZXJsb2FkLmZhaWx1cmVzLmxlbmd0aCA/ICI7
IHRyaWVkOlxuIiArIG92ZXJsb2FkLmZhaWx1cmVzLmpvaW4oIlxuIikgOiAiIikpOwotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQucmVzb2x2ZShvdmVybG9hZCk7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5yZXNvbHZlVG9PdmVybG9hZChvdmVybG9hZCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZnVuYy5pc05h
dGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm5hdGl2ZUZ1bmNJbnN0YW5jZSA9IHRo
aXNJbnN0YW50aWF0b3IuZ2V0VW5pcXVlKHJlc3VsdC5mdW5jLCByZXN1bHQuYWN0dWFsVHlwZUFy
Z3VtZW50cyk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbGV0IHN1YnN0
aXR1dGlvbiA9IG5ldyBJbnN0YW50aWF0aW9uU3Vic3RpdHV0aW9uKGZ1bmMudHlwZVBhcmFtZXRl
cnMsIHR5cGVBcmd1bWVudHMpOworICAgICAgICBsZXQgaW5zdGFudGlhdGVJbW1lZGlhdGVzID0g
bmV3IEluc3RhbnRpYXRlSW1tZWRpYXRlcygpOwogICAgICAgICAKLSAgICAgICAgY2xhc3MgSW5z
dGFudGlhdGUgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CisgICAgICAgIGNsYXNzIEluc3RhbnRpYXRl
IHsKICAgICAgICAgICAgIHZpc2l0RnVuY0RlZihmdW5jKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgRnVuY0RlZigKICAgICAgICAgICAgICAgICAgICAgZnVuYy5v
cmlnaW4sIGZ1bmMubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5yZXR1cm5UeXBlLnZp
c2l0KHN1YnN0aXR1dGlvbiksCisgICAgICAgICAgICAgICAgICAgIGZ1bmMucmV0dXJuVHlwZS52
aXNpdChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyksCiAgICAgICAg
ICAgICAgICAgICAgIFtdLCAvLyBXZSdyZSBpbnN0YW50aWF0ZWQgc28gd2Ugbm8gbG9uZ2VyIHRh
a2UgdHlwZSBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgICAgICAgICBmdW5jLnBhcmFtZXRlcnMu
bWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQoc3Vic3RpdHV0aW9uKSksCi0gICAgICAg
ICAgICAgICAgICAgIGZ1bmMuYm9keS52aXNpdChzdWJzdGl0dXRpb24pKTsKKyAgICAgICAgICAg
ICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0
KHN1YnN0aXR1dGlvbikudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlhdGVzKSksCisgICAgICAgICAg
ICAgICAgICAgIGZ1bmMuYm9keS52aXNpdChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRl
SW1tZWRpYXRlcykpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICB2
aXNpdE5hdGl2ZUZ1bmMoZnVuYykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gbmV3IE5hdGl2ZUZ1bmNJbnN0YW5jZSgKICAgICAgICAgICAgICAgICAgICAgZnVuYywKLSAg
ICAgICAgICAgICAgICAgICAgZnVuYy5yZXR1cm5UeXBlLnZpc2l0KHN1YnN0aXR1dGlvbiksCi0g
ICAgICAgICAgICAgICAgICAgIGZ1bmMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFt
ZXRlci52aXNpdChzdWJzdGl0dXRpb24pKSwKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5pc0Nh
c3QpOworICAgICAgICAgICAgICAgICAgICBmdW5jLnJldHVyblR5cGUudmlzaXQoc3Vic3RpdHV0
aW9uKS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpLAorICAgICAgICAgICAgICAgICAgICBm
dW5jLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQoc3Vic3RpdHV0
aW9uKS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpKSwKKyAgICAgICAgICAgICAgICAgICAg
ZnVuYy5pc0Nhc3QsCisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW5zdGFudGlhdGVJbXBsZW1l
bnRhdGlvbihzdWJzdGl0dXRpb24pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBsZXQgcmVzdWx0aW5nRnVuYyA9IGZ1bmMudmlzaXQobmV3IEluc3RhbnRpYXRlKCkpOwpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSGlnaFpvbWJpZUZpbmRlci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9IaWdoWm9tYmllRmluZGVy
LmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0hpZ2ha
b21iaWVGaW5kZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCisvLyBJ
ZiBhIGhpZ2gtbGV2ZWwgY29uc3RydWN0IHNvbWVob3cgbWFuYWdlcyB0byBsaXZlIG9uIHdoZW4g
d2UncmUgbG93ZXJlZCwgaXQncyBhIGhpZ2ggem9tYmllLgorY2xhc3MgSGlnaFpvbWJpZUZpbmRl
ciBleHRlbmRzIFZpc2l0b3IgeworICAgIF9mb3VuZChub2RlKQorICAgIHsKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyArICI6IEhpZ2ggem9tYmllOiAi
ICsgbm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQorICAg
IHsKKyAgICAgICAgdGhpcy5fZm91bmQobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5k
ZXhFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9mb3VuZChub2RlKTsKKyAg
ICB9CisgICAgCisgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAg
c3VwZXIudmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JZGVudGl0eUV4cHJlc3Npb24uanMJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSWRlbnRpdHlF
eHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3Mg
SWRlbnRpdHlFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Io
dGFyZ2V0KQorICAgIHsKKyAgICAgICAgc3VwZXIodGFyZ2V0Lm9yaWdpbik7CisgICAgICAgIHRo
aXMuX3RhcmdldCA9IHRhcmdldDsKKyAgICB9CisgICAgCisgICAgZ2V0IHRhcmdldCgpIHsgcmV0
dXJuIHRoaXMuX3RhcmdldDsgfQorICAgIAorICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0
aGlzLnRhcmdldC51bmlmeU5vZGU7IH0KKyAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJldHVybiB0
aGlzLnRhcmdldC5pc0NvbnN0ZXhwcjsgfQorICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIHRo
aXMudGFyZ2V0LmlzTFZhbHVlOyB9CisgICAgZ2V0IGFkZHJlc3NTcGFjZSgpIHsgcmV0dXJuIHRo
aXMudGFyZ2V0LmFkZHJlc3NTcGFjZTsgfQorICAgIAorICAgIHRvU3RyaW5nKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAiKCIgKyB0aGlzLnRhcmdldCArICIpIjsKKyAgICB9Cit9CisKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZGV4RXhwcmVzc2lvbi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmRleEV4cHJlc3Npb24uanMJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHBy
ZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgSW5k
ZXhFeHByZXNzaW9uIGV4dGVuZHMgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIHsKKyAgICBjb25z
dHJ1Y3RvcihvcmlnaW4sIGFycmF5LCBpbmRleCkKKyAgICB7CisgICAgICAgIHN1cGVyKG9yaWdp
biwgYXJyYXkpOworICAgICAgICB0aGlzLl9pbmRleCA9IGluZGV4OworICAgIH0KKyAgICAKKyAg
ICBnZXQgYXJyYXkoKSB7IHJldHVybiB0aGlzLmJhc2U7IH0KKyAgICBnZXQgaW5kZXgoKSB7IHJl
dHVybiB0aGlzLl9pbmRleDsgfQorICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIHRoaXMuYXJy
YXkuaXNMVmFsdWU7IH0KKyAgICBnZXQgYWRkcmVzc1NwYWNlKCkgeyByZXR1cm4gdGhpcy5hcnJh
eS5hZGRyZXNzU3BhY2U7IH0KKyAgICAKKyAgICBnZXQgZ2V0RnVuY05hbWUoKSB7IHJldHVybiAi
b3BlcmF0b3JbXSI7IH0KKyAgICBnZXQgYW5kRnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0b3Im
W10iOyB9CisgICAgZ2V0IHNldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yW109IjsgfQor
CisgICAgdXBkYXRlQ2FsbHMoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuY2FsbEZvckdldCkK
KyAgICAgICAgICAgIHRoaXMuY2FsbEZvckdldC5hcmd1bWVudExpc3RbMV0gPSB0aGlzLmluZGV4
OworICAgICAgICBpZiAodGhpcy5jYWxsRm9yQW5kKQorICAgICAgICAgICAgdGhpcy5jYWxsRm9y
QW5kLmFyZ3VtZW50TGlzdFsxXSA9IHRoaXMuaW5kZXg7CisgICAgICAgIGlmICh0aGlzLmNhbGxG
b3JTZXQpCisgICAgICAgICAgICB0aGlzLmNhbGxGb3JTZXQuYXJndW1lbnRMaXN0WzFdID0gdGhp
cy5pbmRleDsKKyAgICAgICAgc3VwZXIudXBkYXRlQ2FsbHMoKTsKKyAgICB9CisKKyAgICB0b1N0
cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIigiICsgdGhpcy5hcnJheSArICJbIiArIHRo
aXMuaW5kZXggKyAiXSkiOworICAgIH0KK30KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzCShyZXZpc2lvbiAyMjIxMjMpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVzRm9yQ2FsbC5qcwkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBmdW5jdGlvbiBpbmZlclR5cGVzRm9yQ2FsbChm
dW5jLCB0eXBlQXJnCiAgICAgICAgIGlmICghYXJndW1lbnRUeXBlc1tpXSkKICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiTnVsbCBhcmd1bWVudCB0eXBlIGF0IGkgPSAiICsgaSk7CiAgICAg
ICAgIGlmICghYXJndW1lbnRUeXBlc1tpXS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIGZ1bmMu
cGFyYW1ldGVyc1tpXS50eXBlKSkKLSAgICAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92
ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIkFyZ3VtZW50ICMiICsgKGkgKyAxKSArICIg
IiArIChmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSA/ICJmb3IgcGFyYW1ldGVyICIgKyBmdW5jLnBh
cmFtZXRlcnNbaV0ubmFtZSA6ICIiKSArICIgZG9lcyBub3QgbWF0Y2ggKHBhc3NlZCAiICsgYXJn
dW1lbnRUeXBlc1tpXSArICIsIHJlcXVpcmUgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS50eXBlICsg
IikiKX07CisgICAgICAgICAgICByZXR1cm4ge2ZhaWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRp
b25GYWlsdXJlKGZ1bmMsICJBcmd1bWVudCAjIiArIChpICsgMSkgKyAiICIgKyAoZnVuYy5wYXJh
bWV0ZXJzW2ldLm5hbWUgPyAiZm9yIHBhcmFtZXRlciAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLm5h
bWUgKyAiICIgOiAiIikgKyAiZG9lcyBub3QgbWF0Y2ggKHBhc3NlZCAiICsgYXJndW1lbnRUeXBl
c1tpXSArICIsIHJlcXVpcmUgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS50eXBlICsgIikiKX07CiAg
ICAgfQogICAgIGlmIChyZXR1cm5UeXBlICYmICFyZXR1cm5UeXBlLnVuaWZ5KHVuaWZpY2F0aW9u
Q29udGV4dCwgZnVuYy5yZXR1cm5UeXBlKSkKICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcg
T3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiUmV0dXJuIHR5cGUgIiArIGZ1bmMucmV0
dXJuVHlwZSArICIgZG9lcyBub3QgbWF0Y2ggIiArIHJldHVyblR5cGUpfTsKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
NDMsOCArNDMsNiBAQCBmdW5jdGlvbiBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwgZnVuYywgCiAg
ICAgaWYgKGZ1bmMuaW5saW5lZCB8fCBmdW5jLmlzTmF0aXZlKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgZnVuYy5yZXdyaXRlKG5ldyBJbnN0YW50aWF0ZUltbWVkaWF0ZXMoKSk7Ci0gICAg
CiAgICAgLy8gVGhpcyBpcyB0aGUgcHJlY2lzZSB0aW1lIHdoZW4gd2UgY2FuIGJ1aWxkIEVCdWZm
ZXJzIGluIG9yZGVyIHRvIGdldCB0aGVtIHRvIGJlIHVuaXF1ZWQgYnkKICAgICAvLyB0eXBlIGlu
c3RhbnRpYXRpb24gYnV0IG5vdGhpbmcgZWxzZS4KICAgICBmdW5jLnZpc2l0KG5ldyBTdHJ1Y3RM
YXlvdXRCdWlsZGVyKCkpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5s
aW5lci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Jbmxp
bmVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JbmxpbmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyNCArMzIsMTUgQEAgY2xhc3MgSW5s
aW5lciBleHRlbmRzIFJld3JpdGVyIHsKICAgICAgICAgdGhpcy5fdmlzaXRpbmcgPSB2aXNpdGlu
ZzsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCi0gICAgewotICAg
ICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlzaXREb3RFeHByZXNzaW9uKG5vZGUpOwotICAgICAg
ICByZXN1bHQuZmllbGQgPSByZXN1bHQuc3RydWN0VHlwZS51bmlmeU5vZGUuZmllbGRCeU5hbWUo
cmVzdWx0LmZpZWxkTmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQuZmllbGQub2Zmc2V0ID09IG51
bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuLWxhaWQtb3V0IGZpZWxkOiAiICsg
cmVzdWx0LmZpZWxkICsgIiAoaW4gIiArIHJlc3VsdC5zdHJ1Y3RUeXBlICsgIikiKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihu
b2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Np
b24obm9kZSk7CisgICAgICAgIGlmIChyZXN1bHQubmF0aXZlRnVuY0luc3RhbmNlKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2l0aW5nLmRvVmlz
aXQobm9kZS5mdW5jLCAoKSA9PiB7CiAgICAgICAgICAgICBsZXQgZnVuYyA9IHRoaXMuX3Byb2dy
YW0uZnVuY0luc3RhbnRpYXRvci5nZXRVbmlxdWUocmVzdWx0LmZ1bmMsIHJlc3VsdC5hY3R1YWxU
eXBlQXJndW1lbnRzKTsKLSAgICAgICAgICAgIGlmIChmdW5jLmlzTmF0aXZlKSB7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0Lm5hdGl2ZUZ1bmNJbnN0YW5jZSA9IGZ1bmM7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmdW5jLmlz
TmF0aXZlKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBuYXRp
dmUgZnVuYzogIiArIGZ1bmMpOwogICAgICAgICAgICAgX2lubGluZUZ1bmN0aW9uKHRoaXMuX3By
b2dyYW0sIGZ1bmMsIHRoaXMuX3Zpc2l0aW5nKTsKICAgICAgICAgICAgIGxldCByZXN1bHRpbmdC
bG9jayA9IG5ldyBGdW5jdGlvbkxpa2VCbG9jaygKICAgICAgICAgICAgICAgICByZXN1bHQub3Jp
Z2luLCBmdW5jLnJldHVyblR5cGUsIHJlc3VsdC5hcmd1bWVudExpc3QsIGZ1bmMucGFyYW1ldGVy
cywgZnVuYy5ib2R5KTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJp
bnNpY3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50
cmluc2ljcy5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSW50cmluc2ljcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTcyLDYgKzE3Miw4OCBAQCBj
bGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgdGhp
cy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgaW50IG9wZXJhdG9yJjw+KGludCxpbnQp
IiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50
YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3go
bGVmdC5sb2FkVmFsdWUoKSAmIHJpZ2h0LmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgdWlu
dCBvcGVyYXRvciY8Pih1aW50LHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAg
ICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAg
ICAgICAgICAgICAgICAgRVB0ci5ib3goKGxlZnQubG9hZFZhbHVlKCkgJiByaWdodC5sb2FkVmFs
dWUoKSkgPj4+IDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9t
YXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0b3J8PD4oaW50LGludCkiLAor
ICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlv
biA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJveChsZWZ0
LmxvYWRWYWx1ZSgpIHwgcmlnaHQubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSB1aW50IG9w
ZXJhdG9yfDw+KHVpbnQsdWludCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAg
ICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAg
ICAgICAgICAgICBFUHRyLmJveCgobGVmdC5sb2FkVmFsdWUoKSB8IHJpZ2h0LmxvYWRWYWx1ZSgp
KSA+Pj4gMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5z
ZXQoCisgICAgICAgICAgICAibmF0aXZlIGludCBvcGVyYXRvcl48PihpbnQsaW50KSIsCisgICAg
ICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0g
KFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9h
ZFZhbHVlKCkgXiByaWdodC5sb2FkVmFsdWUoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
CisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0aXZlIHVpbnQgb3BlcmF0
b3JePD4odWludCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAg
ICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAg
ICAgICAgIEVQdHIuYm94KChsZWZ0LmxvYWRWYWx1ZSgpIF4gcmlnaHQubG9hZFZhbHVlKCkpID4+
PiAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgK
KyAgICAgICAgICAgICJuYXRpdmUgaW50IG9wZXJhdG9yPDw8PihpbnQsdWludCkiLAorICAgICAg
ICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChb
bGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJveChsZWZ0LmxvYWRW
YWx1ZSgpIDw8IHJpZ2h0LmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAK
KyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgdWludCBvcGVyYXRv
cjw8PD4odWludCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAg
ICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAg
ICAgICAgIEVQdHIuYm94KChsZWZ0LmxvYWRWYWx1ZSgpIDw8IHJpZ2h0LmxvYWRWYWx1ZSgpKSA+
Pj4gMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQo
CisgICAgICAgICAgICAibmF0aXZlIGludCBvcGVyYXRvcj4+PD4oaW50LHVpbnQpIiwKKyAgICAg
ICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAo
W2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2Fk
VmFsdWUoKSA+PiByaWdodC5sb2FkVmFsdWUoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
CisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0aXZlIHVpbnQgb3BlcmF0
b3I+Pjw+KHVpbnQsdWludCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAg
ICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAg
ICAgICAgICBFUHRyLmJveChsZWZ0LmxvYWRWYWx1ZSgpID4+PiByaWdodC5sb2FkVmFsdWUoKSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAg
ICAgICAgICAibmF0aXZlIGludCBvcGVyYXRvcn48PihpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMg
PT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3ZhbHVlXSkgPT4g
RVB0ci5ib3gofnZhbHVlLmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAK
KyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgdWludCBvcGVyYXRv
cn48Pih1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5j
LmltcGxlbWVudGF0aW9uID0gKFt2YWx1ZV0pID0+IEVQdHIuYm94KCh+dmFsdWUubG9hZFZhbHVl
KCkpID4+PiAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFw
LnNldCgKICAgICAgICAgICAgICJuYXRpdmUgYm9vbCBvcGVyYXRvcj09PD4oaW50LGludCkiLAog
ICAgICAgICAgICAgZnVuYyA9PiB7CiAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlv
biA9IChbbGVmdCwgcmlnaHRdKSA9PgpAQCAtMjQ4LDMwICszMzAsMzIgQEAgY2xhc3MgSW50cmlu
c2ljcyB7CiAgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkgPj0g
cmlnaHQubG9hZFZhbHVlKCkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIAotICAgICAgICBs
ZXQgYXJyYXlFbGVtZW50UHRyID0gZnVuYyA9PiB7Ci0gICAgICAgICAgICBmdW5jLmltcGxlbWVu
dGF0aW9uID0gKFtyZWYsIGluZGV4XSwgbm9kZSkgPT4gewotICAgICAgICAgICAgICAgIHJlZiA9
IHJlZi5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlZikKLSAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
TnVsbCBkZXJlZmVyZW5jZSIpOwotICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXgubG9hZFZh
bHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gcmVmLmxlbmd0aCkKLSAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5n
LCAiQXJyYXkgaW5kZXggIiArIGluZGV4ICsgIiBpcyBvdXQgb2YgYm91bmRzIG9mICIgKyByZWYp
OwotICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveChyZWYucHRyLnBsdXMoaW5kZXggKiBu
b2RlLmFjdHVhbFR5cGVBcmd1bWVudHNbMF0uc2l6ZSkpOwotICAgICAgICAgICAgfTsKLSAgICAg
ICAgfTsKLSAgICAgICAgCi0gICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAibmF0
aXZlIFReIHRocmVhZCBvcGVyYXRvciZbXTxUPihUW10gdGhyZWFkLHVpbnQpIiwKLSAgICAgICAg
ICAgIGFycmF5RWxlbWVudFB0cik7Ci0gICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAg
ICAibmF0aXZlIFReIHRocmVhZGdyb3VwIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihUW10gdGhy
ZWFkZ3JvdXAsdWludCkiLAotICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsKLSAgICAgICAg
dGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgVF4gZGV2aWNlIG9wZXJhdG9yJltd
PFQ6cHJpbWl0aXZlPihUW10gZGV2aWNlLHVpbnQpIiwKLSAgICAgICAgICAgIGFycmF5RWxlbWVu
dFB0cik7Ci0gICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZlIFReIGNv
bnN0YW50IG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihUW10gY29uc3RhbnQsdWludCkiLAotICAg
ICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsKKyAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNl
IG9mIGFkZHJlc3NTcGFjZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAg
ICAgICAgICAgYG5hdGl2ZSBUXiAke2FkZHJlc3NTcGFjZX0gb3BlcmF0b3ImW108VCR7cHJvdG9j
b2xTdWZmaXgoYWRkcmVzc1NwYWNlKX0+KFRbXSAke2FkZHJlc3NTcGFjZX0sdWludClgLAorICAg
ICAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVu
dGF0aW9uID0gKFtyZWYsIGluZGV4XSwgbm9kZSkgPT4geworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVmID0gcmVmLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFy
ZWYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBkZXJlZmVyZW5jZSIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXggPSBpbmRleC5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpbmRleCA+IHJlZi5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQXJyYXkg
aW5kZXggIiArIGluZGV4ICsgIiBpcyBvdXQgb2YgYm91bmRzIG9mICIgKyByZWYpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEVQdHIuYm94KHJlZi5wdHIucGx1cyhpbmRleCAqIG5v
ZGUuYWN0dWFsVHlwZUFyZ3VtZW50c1swXS5zaXplKSk7CisgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAg
ICAgICAgICAgICAgYG5hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUJHtwcm90b2NvbFN1ZmZp
eChhZGRyZXNzU3BhY2UpfT4oVFtdICR7YWRkcmVzc1NwYWNlfSlgLAorICAgICAgICAgICAgICAg
IGZ1bmMgPT4geworICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFty
ZWZdLCBub2RlKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWYgPSByZWYubG9hZFZh
bHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gRVB0ci5ib3goMCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gRVB0ci5ib3gocmVmLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgYWRkKHRoaW5n
KQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV0RXhwcmVzc2lvbi5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXRFeHByZXNzaW9u
LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9M
ZXRFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1sZXQg
bGV0RXhwcmVzc2lvbkNvdW50ID0gMDsKLQotY2xhc3MgTGV0RXhwcmVzc2lvbiBleHRlbmRzIFZh
bHVlIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4pCi0gICAgewotICAgICAgICBzdXBlcigpOwot
ICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47Ci0gICAgICAgIHRoaXMuaW5kZXggPSBsZXRF
eHByZXNzaW9uQ291bnQrKzsKLSAgICAgICAgdGhpcy5hcmd1bWVudCA9IG51bGw7Ci0gICAgICAg
IHRoaXMuYm9keSA9IG51bGw7Ci0gICAgfQotICAgIAotICAgIGdldCBvcmlnaW4oKSB7IHJldHVy
biB0aGlzLl9vcmlnaW47IH0KLSAgICBnZXQgbmFtZSgpIHsgcmV0dXJuICJsZXQ8IiArIHRoaXMu
aW5kZXggKyAiPiI7IH0KLSAgICAKLSAgICB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5uYW1lICsgIigiICsgdGhpcy5hcmd1bWVudCArICIsICIgKyB0aGlzLmJvZHkgKyAi
KSI7Ci0gICAgfQotfQotCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhl
ci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlci5q
cwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4
ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBjbGFzcyBMZXhlciB7CiAg
ICAgICAgIGlmICgvXihbMC05XSpcLlswLTldKyl8KFswLTldK1wuWzAtOV0qKS8udGVzdChyZWxl
dmFudFRleHQpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgiZG91YmxlTGl0ZXJhbCIpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKC9eLT58Pj18PD18PT18IT18XCs9fC09fFwqPXxcLz18JT18
Xj18XHw9fCY9fFwrXCt8LS18KFt7fSgpXFtcXT86PSsqXC8sLiUhfl4mfDw+QDstXSkvLnRlc3Qo
cmVsZXZhbnRUZXh0KSkKKyAgICAgICAgaWYgKC9ePDx8Pj58LT58Pj18PD18PT18IT18XCs9fC09
fFwqPXxcLz18JT18Xj18XHw9fCY9fFwrXCt8LS18KFt7fSgpXFtcXT86PSsqXC8sLiUhfl4mfDw+
QDstXSkvLnRlc3QocmVsZXZhbnRUZXh0KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQoInB1
bmN0dWF0aW9uIik7CiAgICAgICAgIAogICAgICAgICBsZXQgcmVtYWluaW5nID0gcmVsZXZhbnRU
ZXh0LnN1YnN0cmluZygwLCAyMCkuc3BsaXQoL1xzLylbMF07CkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9NYWtlQXJyYXlSZWZFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanMJ
KHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VB
cnJheVJlZkV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMyw2IEBAIGNs
YXNzIE1ha2VBcnJheVJlZkV4cHJlc3Npb24gZXh0ZW5kcyBFeHAKICAgICAKICAgICBnZXQgbFZh
bHVlKCkgeyByZXR1cm4gdGhpcy5fbFZhbHVlOyB9CiAgICAgCi0gICAgYmVjb21lQ29udmVydFB0
clRvQXJyYXlSZWZFeHByZXNzaW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX19wcm90b19fID0g
Q29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uLnByb3RvdHlwZTsKLSAgICB9Ci0gICAgCiAg
ICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuICJAIiArICh0aGlzLm51bUVsZW1l
bnRzID8gIjw8IiArIHRoaXMubnVtRWxlbWVudHMgKyAiPj4iIDogIiIpICsgIigiICsgdGhpcy5s
VmFsdWUgKyAiKSI7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lQ29u
dGV4dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1l
Q29udGV4dC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTmFtZUNvbnRleHQuanMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAgY2xh
c3MgTmFtZUNvbnRleHQgewogICAgIHsKICAgICAgICAgdGhpcy5fbWFwID0gbmV3IE1hcCgpOwog
ICAgICAgICB0aGlzLl9zZXQgPSBuZXcgU2V0KCk7Ci0gICAgICAgIHRoaXMuX2RlZmluZWQgPSBu
dWxsOwogICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGVtZW50ID0gbnVsbDsKICAgICAgICAgdGhp
cy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKICAgICAgICAgdGhpcy5faW50cmluc2ljcyA9IG51bGw7
CkBAIC02Miw3ICs2MSw3IEBAIGNsYXNzIE5hbWVDb250ZXh0IHsKICAgICAgICAgaWYgKCF0aGlu
Zy5uYW1lKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgaWYgKHRoaW5n
LmlzTmF0aXZlKSB7CisgICAgICAgIGlmICh0aGluZy5pc05hdGl2ZSAmJiAhdGhpbmcuaW1wbGVt
ZW50YXRpb24pIHsKICAgICAgICAgICAgIGlmICghdGhpcy5faW50cmluc2ljcykKICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBmdW5jdGlvbiBpbiBhIHNjb3BlIHRoYXQg
ZG9lcyBub3QgcmVjb2duaXplIGludHJpbnNpY3MiKTsKICAgICAgICAgICAgIHRoaXMuX2ludHJp
bnNpY3MuYWRkKHRoaW5nKTsKQEAgLTExNSwzNiArMTE0LDExIEBAIGNsYXNzIE5hbWVDb250ZXh0
IHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogICAgIAotICAgIGhhbmRsZURlZmluaW5n
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RlZmluZWQgPSBuZXcgU2V0KCk7Ci0gICAgfQotICAg
IAotICAgIGlzRGVmaW5lZCh0aGluZykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zZXQuaGFz
KHRoaW5nKSkgewotICAgICAgICAgICAgcmV0dXJuICF0aGlzLl9kZWZpbmVkCi0gICAgICAgICAg
ICAgICAgfHwgdGhpcy5fZGVmaW5lZC5oYXModGhpbmcpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9kZWxlZ2F0ZSAmJiB0aGlzLl9kZWxlZ2F0ZS5pc0RlZmluZWQodGhpbmcpOwot
ICAgIH0KLSAgICAKLSAgICBkZWZpbmUodGhpbmcpCi0gICAgewotICAgICAgICB0aGlzLl9kZWZp
bmVkLmFkZCh0aGluZyk7Ci0gICAgfQotICAgIAotICAgIGRlZmluZUFsbCgpCi0gICAgewotICAg
ICAgICB0aGlzLl9kZWZpbmVkID0gbnVsbDsKLSAgICB9Ci0gICAgCiAgICAgZG9TdGF0ZW1lbnQo
c3RhdGVtZW50LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZW1l
bnQgPSBzdGF0ZW1lbnQ7CiAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgIHRoaXMuX2N1cnJl
bnRTdGF0ZW1lbnQgPSBudWxsOwotICAgICAgICB0aGlzLmRlZmluZShzdGF0ZW1lbnQpOwogICAg
IH0KICAgICAKICAgICByZWNvZ25pemVJbnRyaW5zaWNzKCkKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMJKHJldmlzaW9uIDIyMjEyMykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzAsMjcgKzMwLDE1IEBACiAvLyBtb3JlIGNvbnZlbmllbnQgdG8gY2hlY2sgaGVy
ZSB0aGFuIGluIHRoZSBDaGVja2VyLiBUaGlzIHVzdWFsbHkgaW52b2x2ZXMgdGhpbmdzIHRoYXQg
bmVlZCB0byBiZQogLy8gY2hlY2tlZCBiZWZvcmUgVHlwZVJlZlRvVHlwZURlZlNraXBwZXIuCiBj
bGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKLSAgICAvLyBJdCdzIHRvdGFsbHkg
T0sgdG8gaW5zdGFudGlhdGUgdGhpcyB3aXRoIHplcm8gYXJndW1lbnRzIChpLmUuIHBhc3Npbmcg
dW5kZWZpbmVkIGZvciBib3RoIG9mCi0gICAgLy8gdGhlbSkgaWYgeW91J3JlIGNyZWF0aW5nIGEg
TmFtZVJlc29sdmVyIHRvIHZpc2l0IGEgUHJvZ3JhbS4KICAgICBjb25zdHJ1Y3RvcihuYW1lQ29u
dGV4dCkKICAgICB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX25hbWVDb250ZXh0
ID0gbmFtZUNvbnRleHQ7CiAgICAgfQotICAgIAotICAgIHZpc2l0UHJvZ3JhbShub2RlKQorCisg
ICAgZG9TdGF0ZW1lbnQoc3RhdGVtZW50KQogICAgIHsKLSAgICAgICAgbGV0IG5hbWVDb250ZXh0
ID0gbmV3IE5hbWVDb250ZXh0KHRoaXMuX25hbWVDb250ZXh0KTsKLSAgICAgICAgbmFtZUNvbnRl
eHQucHJvZ3JhbSA9IG5vZGU7Ci0gICAgICAgIG5hbWVDb250ZXh0LnJlY29nbml6ZUludHJpbnNp
Y3MoKTsKLSAgICAgICAgbmFtZUNvbnRleHQuaGFuZGxlRGVmaW5pbmcoKTsKLSAgICAgICAgbm9k
ZS5pbnRyaW5zaWNzID0gbmFtZUNvbnRleHQuaW50cmluc2ljczsKLSAgICAgICAgZm9yIChsZXQg
c3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKQotICAgICAgICAgICAgbmFtZUNv
bnRleHQuYWRkKHN0YXRlbWVudCk7Ci0gICAgICAgIGxldCBjaGVja2VyID0gbmV3IE5hbWVSZXNv
bHZlcihuYW1lQ29udGV4dCk7Ci0gICAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBub2RlLnRv
cExldmVsU3RhdGVtZW50cykKLSAgICAgICAgICAgIG5hbWVDb250ZXh0LmRvU3RhdGVtZW50KHN0
YXRlbWVudCwgKCkgPT4gc3RhdGVtZW50LnZpc2l0KGNoZWNrZXIpKTsKLSAgICAgICAgbm9kZS5n
bG9iYWxOYW1lQ29udGV4dCA9IG5hbWVDb250ZXh0OworICAgICAgICB0aGlzLl9uYW1lQ29udGV4
dC5kb1N0YXRlbWVudChzdGF0ZW1lbnQsICgpID0+IHN0YXRlbWVudC52aXNpdCh0aGlzKSk7CiAg
ICAgfQogICAgIAogICAgIF92aXNpdFR5cGVQYXJhbWV0ZXJzQW5kQnVpbGROYW1lQ29udGV4dChu
b2RlKQpAQCAtMjA3LDggKzE5NSw2IEBAIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0
b3IgewogICAgICAgICAgICAgdHlwZSA9IHRoaXMuX25hbWVDb250ZXh0LmdldChUeXBlLCBub2Rl
Lm5hbWUpOwogICAgICAgICAgICAgaWYgKCF0eXBlKQogICAgICAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkNvdWxkIG5vdCBmaW5kIHR5
cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX25hbWVDb250
ZXh0LmlzRGVmaW5lZCh0eXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJv
cihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJJbGxlZ2FsIGZvcndhcmQgdXNlIG9mIHR5cGUg
bmFtZWQgIiArIG5vZGUubmFtZSk7CiAgICAgICAgICAgICBub2RlLnR5cGUgPSB0eXBlOwogICAg
ICAgICB9CiAgICAgICAgIApAQCAtMjMwLDcgKzIxNiw2IEBAIGNsYXNzIE5hbWVSZXNvbHZlciBl
eHRlbmRzIFZpc2l0b3IgewogICAgIHZpc2l0UmVmZXJlbmNlVHlwZShub2RlKQogICAgIHsKICAg
ICAgICAgbGV0IG5hbWVDb250ZXh0ID0gbmV3IE5hbWVDb250ZXh0KHRoaXMuX25hbWVDb250ZXh0
KTsKLSAgICAgICAgbmFtZUNvbnRleHQuZGVmaW5lQWxsKCk7CiAgICAgICAgIG5vZGUuZWxlbWVu
dFR5cGUudmlzaXQobmV3IE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkpOwogICAgIH0KICAgICAK
QEAgLTI1OCw2ICsyNDMsMjggQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7
CiAgICAgICAgIHN1cGVyLnZpc2l0UmV0dXJuKG5vZGUpOwogICAgIH0KICAgICAKKyAgICBfaGFu
ZGxlUHJvcGVydHlBY2Nlc3Mobm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUucG9zc2libGVHZXRP
dmVybG9hZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgbm9kZS5nZXRGdW5jTmFtZSk7
CisgICAgICAgIG5vZGUucG9zc2libGVTZXRPdmVybG9hZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5n
ZXQoRnVuYywgbm9kZS5zZXRGdW5jTmFtZSk7CisgICAgICAgIG5vZGUucG9zc2libGVBbmRPdmVy
bG9hZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgbm9kZS5hbmRGdW5jTmFtZSk7CisK
KyAgICAgICAgaWYgKCFub2RlLnBvc3NpYmxlR2V0T3ZlcmxvYWRzICYmICFub2RlLnBvc3NpYmxl
QW5kT3ZlcmxvYWRzKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGZpbmQgZWl0aGVyICIgKyBub2RlLmdldEZ1bmNOYW1l
ICsgIiBvciAiICsgbm9kZS5hbmRGdW5jTmFtZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0RG90
RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVydHlBY2Nl
c3Mobm9kZSk7CisgICAgICAgIHN1cGVyLnZpc2l0RG90RXhwcmVzc2lvbihub2RlKTsKKyAgICB9
CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRo
aXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzKG5vZGUpOworICAgICAgICBzdXBlci52aXNpdEluZGV4
RXhwcmVzc2lvbihub2RlKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihu
b2RlKQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzb2x2ZVR5cGVBcmd1bWVudHMobm9kZS50eXBl
QXJndW1lbnRzKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1
bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZl
RnVuYy5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTmF0aXZlRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTAgQEAgY2xhc3Mg
TmF0aXZlRnVuYyBleHRlbmRzIEZ1bmMgewogICAgIHsKICAgICAgICAgc3VwZXIob3JpZ2luLCBu
YW1lLCByZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycywgcGFyYW1ldGVycywgaXNDYXN0KTsKICAg
ICAgICAgdGhpcy5pc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5pbXBsZW1lbnRh
dGlvbiA9IG51bGw7CisgICAgICAgIHRoaXMuaW5zdGFudGlhdGVJbXBsZW1lbnRhdGlvbiA9IChz
dWJzdGl0dXRpb24pID0+IHt9OworICAgICAgICB0aGlzLnZpc2l0SW1wbGVtZW50YXRpb25EYXRh
ID0gKGltcGxlbWVudGF0aW9uRGF0YSwgdmlzaXRvcikgPT4gbnVsbDsKKyAgICAgICAgdGhpcy5k
aWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEgPSBpbXBsZW1lbnRhdGlvbkRhdGEg
PT4gbnVsbDsKICAgICB9CiAgICAgCiAgICAgZ2V0IGlzTmF0aXZlKCkgeyByZXR1cm4gdHJ1ZTsg
fQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1
bmNJbnN0YW5jZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNCAr
MjUsMTYgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgTmF0aXZlRnVuY0luc3RhbmNlIGV4dGVu
ZHMgRnVuYyB7Ci0gICAgY29uc3RydWN0b3IoZnVuYywgcmV0dXJuVHlwZSwgcGFyYW1ldGVycywg
aXNDYXN0KQorICAgIGNvbnN0cnVjdG9yKGZ1bmMsIHJldHVyblR5cGUsIHBhcmFtZXRlcnMsIGlz
Q2FzdCwgaW1wbGVtZW50YXRpb25EYXRhKQogICAgIHsKICAgICAgICAgc3VwZXIoZnVuYy5vcmln
aW4sIGZ1bmMubmFtZSwgcmV0dXJuVHlwZSwgW10sIHBhcmFtZXRlcnMsIGlzQ2FzdCk7CiAgICAg
ICAgIHRoaXMuX2Z1bmMgPSBmdW5jOworICAgICAgICB0aGlzLl9pbXBsZW1lbnRhdGlvbkRhdGEg
PSBpbXBsZW1lbnRhdGlvbkRhdGE7CiAgICAgfQogICAgIAogICAgIGdldCBmdW5jKCkgeyByZXR1
cm4gdGhpcy5fZnVuYzsgfQogICAgIGdldCBpc05hdGl2ZSgpIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICBnZXQgaW1wbGVtZW50YXRpb25EYXRhKCkgeyByZXR1cm4gdGhpcy5faW1wbGVtZW50YXRpb25E
YXRhOyB9CiAKICAgICB0b0RlY2xTdHJpbmcoKQogICAgIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL05vZGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvTm9kZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTcgQEAg
Y2xhc3MgTm9kZSB7CiAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IHZpc2l0RnVuYy5jYWxsKHZp
c2l0b3IsIHRoaXMpOwogICAgICAgICBpZiAoInJldHVyblZhbHVlIiBpbiB2aXNpdG9yKQogICAg
ICAgICAgICAgcmV0dXJuVmFsdWUgPSB2aXNpdG9yLnJldHVyblZhbHVlOworICAgICAgICAKICAg
ICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgdmlzaXQo
bm9kZSwgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgTm9kZSkK
KyAgICAgICAgICAgIHJldHVybiBub2RlLnZpc2l0KHZpc2l0b3IpOworICAgICAgICByZXR1cm4g
bm9kZTsKKyAgICB9CisgICAgCiAgICAgdW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikK
ICAgICB7CiAgICAgICAgIGlmICghb3RoZXIpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9ybWFsVXNlUHJv
cGVydHlSZXNvbHZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2Ns
YXNzIE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIgZXh0ZW5kcyBSZXdyaXRlciB7CisgICAgdmlz
aXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRE
b3RFeHByZXNzaW9uKG5vZGUpLnJld3JpdGVBZnRlckNsb25pbmcoKTsKKyAgICB9CisgICAgCisg
ICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdXBl
ci52aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKS5yZXdyaXRlQWZ0ZXJDbG9uaW5nKCk7CisgICAg
fQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkocmV2aXNp
b24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHdv
cmtpbmcgY29weSkKQEAgLTMzNyw5ICszMzcsOSBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBv
cmlnaW4sIG9yaWdpbktpCiAgICAgICAgIH0pOwogICAgIH0KICAgICAKLSAgICBmdW5jdGlvbiBl
bWl0SW5jcmVtZW50KHRva2VuLCBwdHIsIGV4dHJhQXJnKQorICAgIGZ1bmN0aW9uIGVtaXRJbmNy
ZW1lbnQodG9rZW4sIG9sZCwgZXh0cmFBcmcpCiAgICAgewotICAgICAgICBsZXQgYXJncyA9IFtu
ZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpXTsK
KyAgICAgICAgbGV0IGFyZ3MgPSBbb2xkXTsKICAgICAgICAgaWYgKGV4dHJhQXJnKQogICAgICAg
ICAgICAgYXJncy5wdXNoKGV4dHJhQXJnKTsKICAgICAgICAgCkBAIC0zNTAsMjcgKzM1MCwxNSBA
QCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgIGlmIChu
YW1lID09ICJvcGVyYXRvciIpCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQg
bmFtZTogIiArIG5hbWUpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50
KAotICAgICAgICAgICAgdG9rZW4sCi0gICAgICAgICAgICBuZXcgRGVyZWZlcmVuY2VFeHByZXNz
aW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpLAotICAgICAgICAgICAgbmV3IENhbGxF
eHByZXNzaW9uKHRva2VuLCBuYW1lLCBbXSwgYXJncykpOworICAgICAgICByZXR1cm4gbmV3IENh
bGxFeHByZXNzaW9uKHRva2VuLCBuYW1lLCBbXSwgYXJncyk7CiAgICAgfQogICAgIAogICAgIGZ1
bmN0aW9uIGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KHRva2VuLCBsZWZ0KQogICAgIHsKLSAg
ICAgICAgbGV0IHB0ciA9IG5ldyBMZXRFeHByZXNzaW9uKHRva2VuKTsKLSAgICAgICAgcHRyLmFy
Z3VtZW50ID0gbmV3IE1ha2VQdHJFeHByZXNzaW9uKHRva2VuLCBsZWZ0KTsKLSAgICAgICAgCi0g
ICAgICAgIGxldCBvbGRWYWx1ZSA9IG5ldyBMZXRFeHByZXNzaW9uKHRva2VuKTsKLSAgICAgICAg
b2xkVmFsdWUuYXJndW1lbnQgPSBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJp
YWJsZVJlZi53cmFwKHB0cikpOwotICAgICAgICAKLSAgICAgICAgcHRyLmJvZHkgPSBvbGRWYWx1
ZTsKLSAgICAgICAgCi0gICAgICAgIG9sZFZhbHVlLmJvZHkgPSBuZXcgQ29tbWFFeHByZXNzaW9u
KHRva2VuLCBbCi0gICAgICAgICAgICBlbWl0SW5jcmVtZW50KHRva2VuLCBwdHIpLAotICAgICAg
ICAgICAgVmFyaWFibGVSZWYud3JhcChvbGRWYWx1ZSkKLSAgICAgICAgXSk7Ci0gICAgICAgIHJl
dHVybiBwdHI7CisgICAgICAgIGxldCByZWFkTW9kaWZ5V3JpdGUgPSBuZXcgUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7CisgICAgICAgIHJlYWRNb2RpZnlXcml0ZS5uZXdW
YWx1ZUV4cCA9IGVtaXRJbmNyZW1lbnQodG9rZW4sIHJlYWRNb2RpZnlXcml0ZS5vbGRWYWx1ZVJl
ZigpKTsKKyAgICAgICAgcmVhZE1vZGlmeVdyaXRlLnJlc3VsdEV4cCA9IHJlYWRNb2RpZnlXcml0
ZS5vbGRWYWx1ZVJlZigpOworICAgICAgICByZXR1cm4gcmVhZE1vZGlmeVdyaXRlOwogICAgIH0K
ICAgICAKICAgICBmdW5jdGlvbiBwYXJzZVBvc3NpYmxlU3VmZml4KCkKQEAgLTM5NSw5ICszODMs
NyBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgICAg
ICBjYXNlICJbIjogewogICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHBhcnNlRXhwcmVzc2lv
bigpOwogICAgICAgICAgICAgICAgIGNvbnN1bWUoIl0iKTsKLSAgICAgICAgICAgICAgICBsZWZ0
ID0gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbigKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4s
Ci0gICAgICAgICAgICAgICAgICAgIG5ldyBDYWxsRXhwcmVzc2lvbih0b2tlbiwgIm9wZXJhdG9y
JltdIiwgW10sIFtsZWZ0LCBpbmRleF0pKTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbmV3IElu
ZGV4RXhwcmVzc2lvbih0b2tlbiwgbGVmdCwgaW5kZXgpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTQwOSwxMyArMzk1LDEw
IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAKICAgICBm
dW5jdGlvbiBmaW5pc2hQYXJzaW5nUHJlSW5jcmVtZW50KHRva2VuLCBsZWZ0LCBleHRyYUFyZykK
ICAgICB7Ci0gICAgICAgIGxldCBwdHIgPSBuZXcgTGV0RXhwcmVzc2lvbih0b2tlbik7Ci0gICAg
ICAgIHB0ci5hcmd1bWVudCA9IG5ldyBNYWtlUHRyRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7Ci0g
ICAgICAgIHB0ci5ib2R5ID0gbmV3IENvbW1hRXhwcmVzc2lvbih0b2tlbiwgWwotICAgICAgICAg
ICAgZW1pdEluY3JlbWVudCh0b2tlbiwgcHRyLCBleHRyYUFyZyksCi0gICAgICAgICAgICBuZXcg
RGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpCi0gICAg
ICAgIF0pOwotICAgICAgICByZXR1cm4gcHRyOworICAgICAgICBsZXQgcmVhZE1vZGlmeVdyaXRl
ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24odG9rZW4sIGxlZnQpOworICAgICAgICBy
ZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVFeHAgPSBlbWl0SW5jcmVtZW50KHRva2VuLCByZWFkTW9k
aWZ5V3JpdGUub2xkVmFsdWVSZWYoKSwgZXh0cmFBcmcpOworICAgICAgICByZWFkTW9kaWZ5V3Jp
dGUucmVzdWx0RXhwID0gcmVhZE1vZGlmeVdyaXRlLm5ld1ZhbHVlUmVmKCk7CisgICAgICAgIHJl
dHVybiByZWFkTW9kaWZ5V3JpdGU7CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIHBhcnNlUHJl
SW5jcmVtZW50KCkKQEAgLTU3NSw2ICs1NTgsMTAgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwg
b3JpZ2luLCBvcmlnaW5LaQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGlzdC5wdXNoKGVm
ZmVjdGZ1bEV4cHJlc3Npb24pOwogICAgICAgICB9CisgICAgICAgIGlmICghbGlzdC5sZW5ndGgp
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBzaG91bGQgbmV2ZXIgYmUgemVy
byIpOworICAgICAgICBpZiAobGlzdC5sZW5ndGggPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBs
aXN0WzBdOwogICAgICAgICByZXR1cm4gbmV3IENvbW1hRXhwcmVzc2lvbihvcmlnaW4sIGxpc3Qp
OwogICAgIH0KICAgICAKQEAgLTc2MSwxNSArNzQ4LDMwIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dy
YW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICBmdW5jdGlvbiBwYXJzZUZ1bmNOYW1lKCkKICAgICB7
CiAgICAgICAgIGlmICh0cnlDb25zdW1lKCJvcGVyYXRvciIpKSB7Ci0gICAgICAgICAgICBsZXQg
dG9rZW4gPSB0cnlDb25zdW1lKCIrIiwgIi0iLCAiKiIsICIvIiwgIiUiLCAiXiIsICImIiwgInwi
LCAiPCIsICI+IiwgIjw9IiwgIj49IiwgIj09IiwgIisrIiwgIi0tIiwgIiYiKTsKLSAgICAgICAg
ICAgIGlmICh0b2tlbikgewotICAgICAgICAgICAgICAgIGlmICh0b2tlbi50ZXh0ICE9ICImIiB8
fCAhdHJ5Q29uc3VtZSgiWyIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9y
IiArIHRva2VuLnRleHQ7CisgICAgICAgICAgICBsZXQgdG9rZW4gPSBjb25zdW1lKCIrIiwgIi0i
LCAiKiIsICIvIiwgIiUiLCAiXiIsICImIiwgInwiLCAiPCIsICI+IiwgIjw9IiwgIj49IiwgIj09
IiwgIisrIiwgIi0tIiwgIiYiLCAiLiIsICJ+IiwgIjw8IiwgIj4+IiwgIlsiKTsKKyAgICAgICAg
ICAgIGlmICh0b2tlbi50ZXh0ID09ICImIikgeworICAgICAgICAgICAgICAgIGlmICh0cnlDb25z
dW1lKCJbIikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiXSIpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9yJltdIjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKHRyeUNvbnN1bWUoIi4iKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJvcGVyYXRvciYuIiArIGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIikudGV4dDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9yJiI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodG9rZW4udGV4dCA9PSAiLiIpIHsKKyAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0g
Im9wZXJhdG9yLiIgKyBjb25zdW1lS2luZCgiaWRlbnRpZmllciIpLnRleHQ7CisgICAgICAgICAg
ICAgICAgaWYgKHRyeUNvbnN1bWUoIj0iKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9
ICI9IjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHRva2VuLnRleHQgPT0gIlsiKSB7CiAgICAgICAgICAgICAgICAgY29uc3Vt
ZSgiXSIpOwotICAgICAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3ImW10iOworICAgICAgICAg
ICAgICAgIGxldCByZXN1bHQgPSAib3BlcmF0b3JbXSI7CisgICAgICAgICAgICAgICAgaWYgKHRy
eUNvbnN1bWUoIj0iKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI9IjsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGV0
IG5hbWUgPSBjb25zdW1lS2luZCgiaWRlbnRpZmllciIpOwotICAgICAgICAgICAgcmV0dXJuICJv
cGVyYXRvciAiICsgbmFtZTsKKyAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3IiICsgdG9rZW4u
dGV4dDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29uc3VtZUtpbmQoImlkZW50aWZpZXIi
KS50ZXh0OwogICAgIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBh
cmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFy
ZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHJlcGFyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjcsMjAgKzI3LDM2IEBACiBmdW5jdGlvbiBw
cmVwYXJlKG9yaWdpbiwgbGluZU51bWJlck9mZnNldCwgdGV4dCkKIHsKICAgICBsZXQgcHJvZ3Jh
bSA9IG5ldyBQcm9ncmFtKCk7CisgICAgCiAgICAgcGFyc2UocHJvZ3JhbSwgIi9pbnRlcm5hbC9z
dGRsaWIiLCAibmF0aXZlIiwgMjcsIHN0YW5kYXJkTGlicmFyeSk7CiAgICAgcGFyc2UocHJvZ3Jh
bSwgb3JpZ2luLCAidXNlciIsIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpOwotICAgIHJlc29sdmVO
YW1lcyhwcm9ncmFtKTsKLSAgICByZXNvbHZlVHlwZURlZnMocHJvZ3JhbSk7CisgICAgCisgICAg
bGV0IG5hbWVSZXNvbHZlciA9IGNyZWF0ZU5hbWVSZXNvbHZlcihwcm9ncmFtKTsKKyAgICByZXNv
bHZlTmFtZXNJblR5cGVzKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CisgICAgcmVzb2x2ZU5hbWVz
SW5Qcm90b2NvbHMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNvbHZlVHlwZURlZnNJ
blR5cGVzKHByb2dyYW0pOworICAgIHJlc29sdmVUeXBlRGVmc0luUHJvdG9jb2xzKHByb2dyYW0p
OworICAgIC8vIEZJWE1FOiBOZWVkIHRvIHZlcmlmeSB0aGF0IHN0cnVjdHJlIGFyZSBub3QgY3lj
bGljLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcw
NDQKKyAgICBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pOworICAgIHJlc29sdmVO
YW1lc0luRnVuY3Rpb25zKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CisgICAgcmVzb2x2ZVR5cGVE
ZWZzSW5GdW5jdGlvbnMocHJvZ3JhbSk7CisgICAgCiAgICAgZmxhdHRlblByb3RvY29sRXh0ZW5k
cyhwcm9ncmFtKTsKICAgICBjaGVjayhwcm9ncmFtKTsKICAgICBjaGVja0xpdGVyYWxUeXBlcyhw
cm9ncmFtKTsKKyAgICByZXNvbHZlUHJvcGVydGllcyhwcm9ncmFtKTsKKyAgICBmaW5kSGlnaFpv
bWJpZXMocHJvZ3JhbSk7CisgICAgY2hlY2tMaXRlcmFsVHlwZXMocHJvZ3JhbSk7CiAgICAgY2hl
Y2tQcm9ncmFtV3JhcHBlZChwcm9ncmFtKTsKICAgICBjaGVja1JldHVybnMocHJvZ3JhbSk7CiAg
ICAgY2hlY2tVbnJlYWNoYWJsZUNvZGUocHJvZ3JhbSk7CiAgICAgY2hlY2tMb29wcyhwcm9ncmFt
KTsKICAgICBjaGVja1JlY3Vyc2lvbihwcm9ncmFtKTsKICAgICBjaGVja1Byb2dyYW1XcmFwcGVk
KHByb2dyYW0pOworICAgIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKICAgICBpbmxpbmUocHJv
Z3JhbSk7CisgICAgCiAgICAgcmV0dXJuIHByb2dyYW07CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsMTAgQEAgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIE5vZGUgewogICAgICAgICB0aGlzLl90
eXBlcyA9IG5ldyBNYXAoKTsKICAgICAgICAgdGhpcy5fcHJvdG9jb2xzID0gbmV3IE1hcCgpOwog
ICAgICAgICB0aGlzLl9mdW5jSW5zdGFudGlhdG9yID0gbmV3IEZ1bmNJbnN0YW50aWF0b3IodGhp
cyk7CisgICAgICAgIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0ID0gbmV3IE5hbWVDb250ZXh0KCk7
CisgICAgICAgIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0LnByb2dyYW0gPSB0aGlzOworICAgICAg
ICB0aGlzLl9nbG9iYWxOYW1lQ29udGV4dC5yZWNvZ25pemVJbnRyaW5zaWNzKCk7CisgICAgICAg
IHRoaXMuaW50cmluc2ljcyA9IHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0LmludHJpbnNpY3M7CiAg
ICAgfQogICAgIAogICAgIGdldCB0b3BMZXZlbFN0YXRlbWVudHMoKSB7IHJldHVybiB0aGlzLl90
b3BMZXZlbFN0YXRlbWVudHM7IH0KQEAgLTQwLDYgKzQ0LDcgQEAgY2xhc3MgUHJvZ3JhbSBleHRl
bmRzIE5vZGUgewogICAgIGdldCB0eXBlcygpIHsgcmV0dXJuIHRoaXMuX3R5cGVzOyB9CiAgICAg
Z2V0IHByb3RvY29scygpIHsgcmV0dXJuIHRoaXMuX3Byb3RvY29sczsgfQogICAgIGdldCBmdW5j
SW5zdGFudGlhdG9yKCkgeyByZXR1cm4gdGhpcy5fZnVuY0luc3RhbnRpYXRvcjsgfQorICAgIGdl
dCBnbG9iYWxOYW1lQ29udGV4dCgpIHsgcmV0dXJuIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0OyB9
CiAgICAgCiAgICAgYWRkKHN0YXRlbWVudCkKICAgICB7CkBAIC01MiwxMCArNTcsMTEgQEAgY2xh
c3MgUHJvZ3JhbSBleHRlbmRzIE5vZGUgewogICAgICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudCBp
bnN0YW5jZW9mIFR5cGUpCiAgICAgICAgICAgICB0aGlzLl90eXBlcy5zZXQoc3RhdGVtZW50Lm5h
bWUsIHN0YXRlbWVudCk7CiAgICAgICAgIGVsc2UgaWYgKHN0YXRlbWVudCBpbnN0YW5jZW9mIFBy
b3RvY29sKQotICAgICAgICAgICAgdGhpcy5fcHJvdG9jb2xzLnNldChzdGF0ZW1lbnQuYWRkLCBz
dGF0ZW1lbnQpOworICAgICAgICAgICAgdGhpcy5fcHJvdG9jb2xzLnNldChzdGF0ZW1lbnQubmFt
ZSwgc3RhdGVtZW50KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJTdGF0ZW1lbnQgaXMgbm90IGEgZnVuY3Rpb24gb3IgdHlwZTogIiArIHN0YXRlbWVudCk7CiAg
ICAgICAgIHRoaXMuX3RvcExldmVsU3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7CisgICAgICAg
IHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0LmFkZChzdGF0ZW1lbnQpOwogICAgIH0KICAgICAKICAg
ICB0b1N0cmluZygpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwg
YmFzZSkKKyAgICB7CisgICAgICAgIHN1cGVyKG9yaWdpbik7CisgICAgICAgIHRoaXMuYmFzZSA9
IGJhc2U7CisgICAgfQorICAgIAorICAgIGdldCByZXN1bHRUeXBlKCkgeyByZXR1cm4gdGhpcy5y
ZXN1bHRUeXBlRm9yR2V0ID8gdGhpcy5yZXN1bHRUeXBlRm9yR2V0IDogdGhpcy5yZXN1bHRUeXBl
Rm9yQW5kOyB9CisgICAgCisgICAgcmV3cml0ZUFmdGVyQ2xvbmluZygpCisgICAgeworICAgICAg
ICAvLyBBdCB0aGlzIHBvaW50LCBub2RlLmJhc2UuaXNMVmFsdWUgd2lsbCBvbmx5IHJldHVybiB0
cnVlIGlmIGl0J3MgcG9zc2libGUgdG8gZ2V0IGEgcG9pbnRlciB0byBpdCwKKyAgICAgICAgLy8g
c2luY2Ugd2Ugd2lsbCBubyBsb25nZXIgc2VlIGFueSBEb3RFeHByZXNzaW9ucyBvciBJbmRleEV4
cHJlc3Npb25zLiBBbHNvLCBub2RlIGlzIGEgbmV3bHkgY3JlYXRlZAorICAgICAgICAvLyBub2Rl
IGFuZCBldmVyeXRoaW5nIGJlbmVhdGggaXQgaXMgbmV3bHkgY3JlYXRlZCwgc28gd2UgY2FuIGVk
aXQgaXQgaW4tcGxhY2UuCisgICAgICAgIAorICAgICAgICBpZiAoKHRoaXMuYmFzZS5pc0xWYWx1
ZSB8fCB0aGlzLmJhc2VUeXBlLmlzUmVmKSAmJiB0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAg
ICByZXR1cm4gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0aGlzLm9yaWdpbiwgdGhpcy5jYWxs
Rm9yQW5kKTsKKyAgICAgICAgCisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JHZXQpCisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5jYWxsRm9yR2V0OworICAgICAgICAKKyAgICAgICAgaWYgKCF0aGlz
LmNhbGxGb3JBbmQpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5vcmlnaW4ub3Jp
Z2luU3RyaW5nICsgIjogUHJvcGVydHkgYWNjZXNzIHdpdGhvdXQgZ2V0dGVyIGFuZCBhbmRlcjog
IiArIHRoaXMpOworICAgICAgICAKKyAgICAgICAgbGV0IGFub25WYXIgPSBuZXcgQW5vbnltb3Vz
VmFyaWFibGUodGhpcy5vcmlnaW4sIHRoaXMuYmFzZVR5cGUpOworICAgICAgICB0aGlzLmNhbGxG
b3JBbmQuYXJndW1lbnRMaXN0WzBdID0gdGhpcy5iYXNlVHlwZS51bmlmeU5vZGUuYXJndW1lbnRG
b3JBbmRPdmVybG9hZCh0aGlzLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChhbm9uVmFyKSk7Cisg
ICAgICAgIHJldHVybiBuZXcgQ29tbWFFeHByZXNzaW9uKHRoaXMub3JpZ2luLCBbCisgICAgICAg
ICAgICBhbm9uVmFyLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQodGhpcy5vcmlnaW4sIFZh
cmlhYmxlUmVmLndyYXAoYW5vblZhciksIHRoaXMuYmFzZSwgdGhpcy5iYXNlVHlwZSksCisgICAg
ICAgICAgICBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRoaXMub3JpZ2luLCB0aGlzLmNhbGxG
b3JBbmQpCisgICAgICAgIF0pOworICAgIH0KKyAgICAKKyAgICB1cGRhdGVDYWxscygpCisgICAg
eworICAgICAgICBpZiAodGhpcy5jYWxsRm9yR2V0KQorICAgICAgICAgICAgdGhpcy5jYWxsRm9y
R2V0LmFyZ3VtZW50TGlzdFswXSA9IHRoaXMuYmFzZTsKKyAgICAgICAgaWYgKHRoaXMuY2FsbEZv
ckFuZCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvckFuZC5hcmd1bWVudExpc3RbMF0gPSB0aGlz
LmJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQodGhpcy5vcmlnaW4sIHRoaXMuYmFzZSk7
CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JTZXQpCisgICAgICAgICAgICB0aGlzLmNhbGxGb3JT
ZXQuYXJndW1lbnRMaXN0WzBdID0gdGhpcy5iYXNlOworICAgIH0KKyAgICAKKyAgICBlbWl0R2V0
KGJhc2UpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy52aXNpdChuZXcgUmV3cml0
ZXIoKSk7CisgICAgICAgIHJlc3VsdC5iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0LnVwZGF0
ZUNhbGxzKCk7CisgICAgICAgIHJldHVybiByZXN1bHQucmV3cml0ZUFmdGVyQ2xvbmluZygpOwor
ICAgIH0KKyAgICAKKyAgICBlbWl0U2V0KGJhc2UsIHZhbHVlKQorICAgIHsKKyAgICAgICAgbGV0
IHJlc3VsdCA9IHRoaXMudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICBpZiAoIXJlc3Vs
dC5jYWxsRm9yU2V0KQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IodGhpcy5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGVtaXQgc2V0IGJlY2F1c2U6ICIgKyB0aGlzLmVycm9y
Rm9yU2V0LnR5cGVFcnJvck1lc3NhZ2UpOworICAgICAgICByZXN1bHQuYmFzZSA9IGJhc2U7Cisg
ICAgICAgIHJlc3VsdC51cGRhdGVDYWxscygpOworICAgICAgICByZXN1bHQuY2FsbEZvclNldC5h
cmd1bWVudExpc3RbcmVzdWx0LmNhbGxGb3JTZXQuYXJndW1lbnRMaXN0Lmxlbmd0aCAtIDFdID0g
dmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQuY2FsbEZvclNldDsKKyAgICB9Cit9CisKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5UmVzb2x2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlSZXNvbHZl
ci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9w
ZXJ0eVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2Ns
YXNzIFByb3BlcnR5UmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBfdmlzaXRSVmFsdWVz
V2l0aGluTFZhbHVlKG5vZGUpCisgICAgeworICAgICAgICBsZXQgdmlzaXQgPSBub2RlID0+IG5v
ZGUudmlzaXQodGhpcyk7CisgICAgICAgIAorICAgICAgICBjbGFzcyBSVmFsdWVGaW5kZXIgewor
ICAgICAgICAgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbm9kZS5hcnJheS52aXNpdCh0aGlzKTsKKyAgICAgICAg
ICAgICAgICB2aXNpdChub2RlLmluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVz
c2lvbihub2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZpc2l0KG5vZGUucHRy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmlzaXRJZGVudGl0
eUV4cHJlc3Npb24obm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBub2RlLnRh
cmdldC52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgbm9kZS52aXNpdChuZXcgUlZhbHVlRmluZGVyKCkpOworICAgIH0KKyAgICAKKyAgICBf
dmlzaXRQcm9wZXJ0eUFjY2Vzcyhub2RlKQorICAgIHsKKyAgICAgICAgbGV0IG5ld05vZGUgPSBu
b2RlLnZpc2l0KG5ldyBOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyKCkpOworICAgICAgICBuZXdO
b2RlLnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLmJlY29tZShuZXdOb2RlKTsKKyAgICB9Cisg
ICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl92
aXNpdFByb3BlcnR5QWNjZXNzKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhw
cmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fdmlzaXRQcm9wZXJ0eUFjY2Vzcyhu
b2RlKTsKKyAgICB9CisgICAgCisgICAgX2hhbmRsZVJlYWRNb2RpZnlXcml0ZShub2RlKQorICAg
IHsKKyAgICAgICAgbGV0IHR5cGUgPSBub2RlLm9sZFZhbHVlVmFyLnR5cGU7CisgICAgICAgIGlm
ICghdHlwZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCB0eXBlIik7CisgICAg
ICAgIGxldCBzaW1wbGVMSFMgPSBub2RlLmxWYWx1ZS52aXNpdChuZXcgTm9ybWFsVXNlUHJvcGVy
dHlSZXNvbHZlcigpKTsKKyAgICAgICAgaWYgKHNpbXBsZUxIUy5pc0xWYWx1ZSkgeworICAgICAg
ICAgICAgbGV0IHB0clR5cGUgPSBuZXcgUHRyVHlwZShub2RlLm9yaWdpbiwgc2ltcGxlTEhTLmFk
ZHJlc3NTcGFjZSwgdHlwZSk7CisgICAgICAgICAgICBsZXQgcHRyVmFyID0gbmV3IEFub255bW91
c1ZhcmlhYmxlKG5vZGUub3JpZ2luLCBwdHJUeXBlKTsKKyAgICAgICAgICAgIG5vZGUuYmVjb21l
KG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIFsKKyAgICAgICAgICAgICAgICBub2Rl
Lm9sZFZhbHVlVmFyLCBub2RlLm5ld1ZhbHVlVmFyLCBwdHJWYXIsCisgICAgICAgICAgICAgICAg
bmV3IEFzc2lnbm1lbnQoCisgICAgICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBWYXJpYWJs
ZVJlZi53cmFwKHB0clZhciksCisgICAgICAgICAgICAgICAgICAgIG5ldyBNYWtlUHRyRXhwcmVz
c2lvbihub2RlLm9yaWdpbiwgc2ltcGxlTEhTKSwgcHRyVHlwZSksCisgICAgICAgICAgICAgICAg
bmV3IEFzc2lnbm1lbnQoCisgICAgICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm9s
ZFZhbHVlUmVmKCksCisgICAgICAgICAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Np
b24obm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAocHRyVmFyKSksIHR5cGUpLAorICAgICAg
ICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2RlLm5ld1ZhbHVlUmVmKCks
IG5vZGUubmV3VmFsdWVFeHAsIHR5cGUpLAorICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50
KAorICAgICAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbmV3IERlcmVmZXJlbmNlRXhwcmVz
c2lvbihub2RlLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChwdHJWYXIpKSwKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS5uZXdWYWx1ZVJlZigpLCB0eXBlKSwKKyAgICAgICAgICAgICAgICBub2Rl
LnJlc3VsdEV4cAorICAgICAgICAgICAgXSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubFZhbHVlLmJhc2UsIG5vZGUubFZhbHVlLmJhc2VU
eXBlKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlRXhwID0gbmV3IENvbW1hRXhwcmVzc2lvbihu
b2RlLm9yaWdpbiwgWworICAgICAgICAgICAgbm9kZS5vbGRWYWx1ZVZhciwgbm9kZS5uZXdWYWx1
ZVZhciwKKyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2RlLm9sZFZh
bHVlUmVmKCksIG5vZGUubFZhbHVlLmVtaXRHZXQocmVzdWx0Lm9sZFZhbHVlUmVmKCkpLCB0eXBl
KSwKKyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2RlLm5ld1ZhbHVl
UmVmKCksIG5vZGUubmV3VmFsdWVFeHAsIHR5cGUpLAorICAgICAgICAgICAgbm9kZS5sVmFsdWUu
ZW1pdFNldChyZXN1bHQub2xkVmFsdWVSZWYoKSwgbm9kZS5uZXdWYWx1ZVJlZigpKQorICAgICAg
ICBdKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdEV4cCA9IG5vZGUubmV3VmFsdWVSZWYoKTsKKyAg
ICAgICAgdGhpcy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKHJlc3VsdCk7CisgICAgICAgIG5vZGUu
YmVjb21lKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlz
KTsKKyAgICAgICAgbm9kZS5yZXN1bHRFeHAudmlzaXQodGhpcyk7CisgICAgICAgIHRoaXMuX3Zp
c2l0UlZhbHVlc1dpdGhpbkxWYWx1ZShub2RlLmxWYWx1ZSk7CisgICAgICAgIHRoaXMuX2hhbmRs
ZVJlYWRNb2RpZnlXcml0ZShub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRBc3NpZ25tZW50
KG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl92aXNpdFJWYWx1ZXNXaXRoaW5MVmFsdWUobm9k
ZS5saHMpOworICAgICAgICBub2RlLnJocy52aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAg
IGxldCBzaW1wbGVMSFMgPSBub2RlLmxocy52aXNpdChuZXcgTm9ybWFsVXNlUHJvcGVydHlSZXNv
bHZlcigpKTsKKyAgICAgICAgaWYgKHNpbXBsZUxIUy5pc0xWYWx1ZSkgeworICAgICAgICAgICAg
bm9kZS5saHMuYmVjb21lKHNpbXBsZUxIUyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmICghKG5vZGUubGhzIGluc3RhbmNlb2YgUHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5leHBlY3Rl
ZCBsaHMgdHlwZTogIiArIG5vZGUubGhzLmNvbnN0cnVjdG9yLm5hbWUpOworICAgICAgICAKKyAg
ICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUub3Jp
Z2luLCBub2RlLmxocy5iYXNlLCBub2RlLmxocy5iYXNlVHlwZSk7CisgICAgICAgIGxldCByZXN1
bHRWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUudHlwZSk7Cisg
ICAgICAgIHJlc3VsdC5uZXdWYWx1ZUV4cCA9IG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmln
aW4sIFsKKyAgICAgICAgICAgIHJlc3VsdFZhciwKKyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50
KG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHJlc3VsdFZhciksIG5vZGUucmhzLCBub2Rl
LnR5cGUpLAorICAgICAgICAgICAgbm9kZS5saHMuZW1pdFNldChyZXN1bHQub2xkVmFsdWVSZWYo
KSwgVmFyaWFibGVSZWYud3JhcChyZXN1bHRWYXIpKQorICAgICAgICBdKTsKKyAgICAgICAgcmVz
dWx0LnJlc3VsdEV4cCA9IFZhcmlhYmxlUmVmLndyYXAocmVzdWx0VmFyKTsKKyAgICAgICAgdGhp
cy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKHJlc3VsdCk7CisgICAgICAgIG5vZGUuYmVjb21lKHJl
c3VsdCk7CisgICAgfQorICAgIAorICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKKyAg
ICB7CisgICAgICAgIHN1cGVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSk7CisgICAgICAg
IGlmICghbm9kZS5sVmFsdWUuaXNMVmFsdWUpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVF
cnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOb3QgYW4gbHZhbHVlOiAiICsgbm9kZS5s
VmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9k
ZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2Rl
KTsKKyAgICAgICAgaWYgKCFub2RlLmxWYWx1ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAgIHRocm93
IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk5vdCBhbiBsdmFsdWU6
ICIgKyBub2RlLmxWYWx1ZSk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1B0clR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDE5
IEBAIGNsYXNzIFB0clR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlIHsKICAgICAgICAgcmV0dXJu
IHRoaXMuZWxlbWVudFR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5lbGVtZW50
VHlwZSk7CiAgICAgfQogICAgIAorICAgIGFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQob3JpZ2luLCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5T
dHJpbmcsICJQb2ludGVyIHN1YnNjcmlwdCBpcyBub3QgdmFsaWQiKTsKKyAgICB9CisgICAgYXJn
dW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQob3JpZ2luLCB0eXBlKQorICAgIHsKKyAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIlBvaW50ZXIgc3Vic2NyaXB0
IGlzIG5vdCB2YWxpZCIpOworICAgIH0KKyAgICByZXR1cm5UeXBlRnJvbUFuZE92ZXJsb2FkKG9y
aWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlOworICAgIH0KKwog
ICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlICsg
Il4gIiArIHRoaXMuYWRkcmVzc1NwYWNlOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzCShub25l
eGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFz
cyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CisgICAgY29u
c3RydWN0b3Iob3JpZ2luLCBsVmFsdWUsIHR5cGUgPSBudWxsKQorICAgIHsKKyAgICAgICAgc3Vw
ZXIob3JpZ2luKTsKKyAgICAgICAgdGhpcy5fbFZhbHVlID0gbFZhbHVlOworICAgICAgICB0aGlz
Lm9sZFZhbHVlVmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG9yaWdpbiwgdHlwZSk7CisgICAg
ICAgIHRoaXMubmV3VmFsdWVWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUob3JpZ2luLCB0eXBl
KTsKKyAgICAgICAgdGhpcy5uZXdWYWx1ZUV4cCA9IG51bGw7CisgICAgICAgIHRoaXMucmVzdWx0
RXhwID0gbnVsbDsKKyAgICB9CisgICAgCisgICAgZ2V0IGxWYWx1ZSgpIHsgcmV0dXJuIHRoaXMu
X2xWYWx1ZTsgfQorICAgIAorICAgIG9sZFZhbHVlUmVmKCkgeyByZXR1cm4gVmFyaWFibGVSZWYu
d3JhcCh0aGlzLm9sZFZhbHVlVmFyKTsgfQorICAgIG5ld1ZhbHVlUmVmKCkgeyByZXR1cm4gVmFy
aWFibGVSZWYud3JhcCh0aGlzLm5ld1ZhbHVlVmFyKTsgfQorICAgIAorICAgIHRvU3RyaW5nKCkK
KyAgICB7CisgICAgICAgIHJldHVybiAiUk1XKCIgKyB0aGlzLmxWYWx1ZSArICIsICIgKyB0aGlz
Lm9sZFZhbHVlVmFyICsgIiwgIiArIHRoaXMubmV3VmFsdWVWYXIgKyAiLCAiICsgdGhpcy5uZXdW
YWx1ZUV4cCArICIsICIgKyB0aGlzLnJlc3VsdEV4cCArICIpIjsKKyAgICB9Cit9CisKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVOYW1lcy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMuanMJKHJldmlz
aW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVOYW1l
cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsMjggQEAKICAqLwogInVzZSBzdHJpY3Qi
OwogCi1mdW5jdGlvbiByZXNvbHZlTmFtZXMocHJvZ3JhbSkKK2Z1bmN0aW9uIGNyZWF0ZU5hbWVS
ZXNvbHZlcihwcm9ncmFtKQogewotICAgIHByb2dyYW0udmlzaXQobmV3IE5hbWVSZXNvbHZlcigp
KTsKKyAgICByZXR1cm4gbmV3IE5hbWVSZXNvbHZlcihwcm9ncmFtLmdsb2JhbE5hbWVDb250ZXh0
KTsKIH0KKworZnVuY3Rpb24gcmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2
ZXIpCit7CisgICAgZm9yIChsZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygpKQorICAg
ICAgICBuYW1lUmVzb2x2ZXIuZG9TdGF0ZW1lbnQodHlwZSk7Cit9CisKK2Z1bmN0aW9uIHJlc29s
dmVOYW1lc0luUHJvdG9jb2xzKHByb2dyYW0sIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGxl
dCBwcm90b2NvbCBvZiBwcm9ncmFtLnByb3RvY29scy52YWx1ZXMoKSkKKyAgICAgICAgbmFtZVJl
c29sdmVyLmRvU3RhdGVtZW50KHByb3RvY29sKTsKK30KKworZnVuY3Rpb24gcmVzb2x2ZU5hbWVz
SW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAobGV0IGZ1bmNz
IG9mIHByb2dyYW0uZnVuY3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAobGV0IGZ1bmMg
b2YgZnVuY3MpCisgICAgICAgICAgICBuYW1lUmVzb2x2ZXIuZG9TdGF0ZW1lbnQoZnVuYyk7Cisg
ICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlT3Zl
cmxvYWRJbXBsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Jlc29sdmVPdmVybG9hZEltcGwuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDkgQEAKIAogZnVuY3Rpb24gcmVzb2x2ZU92ZXJsb2FkSW1wbChmdW5jdGlv
bnMsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpCiB7CisgICAgaWYg
KCFmdW5jdGlvbnMpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBmdW5jdGlvbnM7IHRo
YXQgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYnkgdGhlIGNhbGxlci4iKTsKKyAgICAKICAgICBs
ZXQgZmFpbHVyZXMgPSBbXTsKICAgICBsZXQgc3VjY2Vzc2VzID0gW107CiAgICAgZm9yIChsZXQg
ZnVuYyBvZiBmdW5jdGlvbnMpIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Jlc29sdmVQcm9wZXJ0aWVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Jlc29sdmVQcm9wZXJ0aWVzLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVQcm9wZXJ0aWVzLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8gVGhpcyB0dXJucyBEb3RFeHByZXNzaW9uIGFuZCBJ
bmRleEV4cHJlc3Npb24gaW50byBjYWxscyB0byBnZXR0ZXJzIChvcGVyYXRvci5maWVsZCBhbmQg
b3BlcmF0b3JbXSksCisvLyBzZXR0ZXJzIChvcGVyYXRvci5maWVsZD0gYW5kIG9wZXJhdG9yW109
KSwgYW5kIGFuZGVycyAob3BlcmF0b3ImLmZpZWxkIGFuZCBvcGVyYXRvciZbXSkuIFRoaXMgaW52
b2x2ZXMKKy8vIHRyYW5zZm9ybWluZyBhc3NpZ25tZW50cyBhbmQgUk1XJ3MgdG8gZG8gbHZhbHVl
IGVtdWxhdGlvbi4KK2Z1bmN0aW9uIHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pCit7CisgICAg
cHJvZ3JhbS52aXNpdChuZXcgUHJvcGVydHlSZXNvbHZlcigpKTsKK30KSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVUeXBlRGVmcy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlVHlwZURlZnMuanMJKHJldmlzaW9u
IDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVUeXBlRGVm
cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsMjYgQEAKICAqLwogInVzZSBzdHJpY3Qi
OwogCi1mdW5jdGlvbiByZXNvbHZlVHlwZURlZnMocHJvZ3JhbSkKK2Z1bmN0aW9uIHJlc29sdmVU
eXBlRGVmc0luVHlwZXMocHJvZ3JhbSkKIHsKLSAgICBwcm9ncmFtLnZpc2l0KG5ldyBUeXBlRGVm
UmVzb2x2ZXIoKSk7CisgICAgbGV0IHJlc29sdmVyID0gbmV3IFR5cGVEZWZSZXNvbHZlcigpOwor
ICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkKKyAgICAgICAgdHlw
ZS52aXNpdChyZXNvbHZlcik7Cit9CisKK2Z1bmN0aW9uIHJlc29sdmVUeXBlRGVmc0luUHJvdG9j
b2xzKHByb2dyYW0pCit7CisgICAgbGV0IHJlc29sdmVyID0gbmV3IFR5cGVEZWZSZXNvbHZlcigp
OworICAgIGZvciAobGV0IHByb3RvY29sIG9mIHByb2dyYW0ucHJvdG9jb2xzLnZhbHVlcygpKQor
ICAgICAgICBwcm90b2NvbC52aXNpdChyZXNvbHZlcik7Cit9CisKK2Z1bmN0aW9uIHJlc29sdmVU
eXBlRGVmc0luRnVuY3Rpb25zKHByb2dyYW0pCit7CisgICAgbGV0IHJlc29sdmVyID0gbmV3IFR5
cGVEZWZSZXNvbHZlcigpOworICAgIGZvciAobGV0IGZ1bmNzIG9mIHByb2dyYW0uZnVuY3Rpb25z
LnZhbHVlcygpKSB7CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAgICAgICAg
ICBmdW5jLnZpc2l0KHJlc29sdmVyKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwkocmV2aXNpb24gMjIyMTIzKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBjbGFzcyBSZXR1cm5DaGVja2VyIGV4dGVuZHMgVmlz
aXRvciB7CiAKICAgICBfaXNCb29sQ2FzdEZyb21MaXRlcmFsVHJ1ZShub2RlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG5vZGUuaXNDYXN0ICYmIG5vZGUucmV0dXJuVHlwZSBpbnN0YW5jZW9mIFR5
cGVSZWYgJiYgbm9kZS5yZXR1cm5UeXBlLmVxdWFscyh0aGlzLl9wcm9ncmFtLmludHJpbnNpY3Mu
Ym9vbCkgJiYgbm9kZS5hcmd1bWVudExpc3QubGVuZ3RoID09IDEgJiYgbm9kZS5hcmd1bWVudExp
c3RbMF0ubGlzdC5sZW5ndGggPT0gMSAmJiBub2RlLmFyZ3VtZW50TGlzdFswXS5saXN0WzBdIGlu
c3RhbmNlb2YgQm9vbExpdGVyYWwgJiYgbm9kZS5hcmd1bWVudExpc3RbMF0ubGlzdFswXS52YWx1
ZTsKKyAgICAgICAgcmV0dXJuIG5vZGUuaXNDYXN0ICYmIG5vZGUucmV0dXJuVHlwZSBpbnN0YW5j
ZW9mIFR5cGVSZWYgJiYgbm9kZS5yZXR1cm5UeXBlLmVxdWFscyh0aGlzLl9wcm9ncmFtLmludHJp
bnNpY3MuYm9vbCkgJiYgbm9kZS5hcmd1bWVudExpc3QubGVuZ3RoID09IDEgJiYgbm9kZS5hcmd1
bWVudExpc3RbMF0gaW5zdGFuY2VvZiBCb29sTGl0ZXJhbCAmJiBub2RlLmFyZ3VtZW50TGlzdFsw
XS52YWx1ZTsKICAgICB9CiAKICAgICB2aXNpdFdoaWxlTG9vcChub2RlKQpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHJldmlzaW9uIDIyMjEyMykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywxMCArMjcsOSBAQAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIGhhdmUgc2Vuc2libGUg
YmVoYXZpb3Igd2hlbiBpdCBlbmNvdW50ZXJzIGRlZmluaXRpb25zIHRoYXQgaXQgY2Fubm90IGhh
bmRsZS4gUmlnaHQKIC8vIG5vdyB3ZSBhcmUgaGFja2lzaGx5IHByZXZlbnRpbmcgdGhpcyBieSB3
cmFwcGluZyB0aGluZ3MgaW4gVHlwZVJlZi4gVGhhdCdzIHByb2JhYmx5IHdyb25nLgogLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjIwOAotY2xhc3MgUmV3cml0
ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CitjbGFzcyBSZXdyaXRlciB7CiAgICAgY29uc3RydWN0
b3IoKQogICAgIHsKLSAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5fbWFwcGluZyA9IG5l
dyBNYXAoKTsKICAgICB9CiAgICAgCkBAIC05OSw3ICs5OCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4
dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZhcmlhYmxlRGVj
bCgKICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm5hbWUsCiAgICAgICAgICAgICBub2Rl
LnR5cGUudmlzaXQodGhpcyksCi0gICAgICAgICAgICBub2RlLmluaXRpYWxpemVyID8gbm9kZS5p
bml0aWFsaXplci52aXNpdCh0aGlzKSA6IG51bGwpOworICAgICAgICAgICAgTm9kZS52aXNpdChu
b2RlLmluaXRpYWxpemVyLCB0aGlzKSk7CiAgICAgICAgIHRoaXMuX21hcE5vZGUobm9kZSwgcmVz
dWx0KTsKICAgICAgICAgcmVzdWx0LmVQdHIgPSBub2RlLmVQdHI7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC0xMzEsNyArMTMwLDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9y
QmFzZSB7CiAgICAgdmlzaXRUeXBlUmVmKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0
ID0gbmV3IFR5cGVSZWYobm9kZS5vcmlnaW4sIG5vZGUubmFtZSwgbm9kZS50eXBlQXJndW1lbnRz
Lm1hcCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKSk7Ci0gICAgICAg
IHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsK
KyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMTYzLDI0ICsxNjIsNTMgQEAgY2xh
c3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXRBc3NpZ25tZW50KG5v
ZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFzc2lnbm1lbnQobm9kZS5vcmln
aW4sIG5vZGUubGhzLnZpc2l0KHRoaXMpLCBub2RlLnJocy52aXNpdCh0aGlzKSk7Ci0gICAgICAg
IHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsK
KyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKSk7
CisgICAgICAgIHJlc3VsdC5vbGRWYWx1ZVZhciA9IG5vZGUub2xkVmFsdWVWYXIudmlzaXQodGhp
cyk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1ZVZhciA9IG5vZGUubmV3VmFsdWVWYXIudmlzaXQo
dGhpcyk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1ZUV4cCA9IG5vZGUubmV3VmFsdWVFeHAudmlz
aXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5yZXN1bHRFeHAgPSBub2RlLnJlc3VsdEV4cC52aXNp
dCh0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgdmlzaXRE
ZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBu
ZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLnB0ci52aXNpdCh0aGlz
KSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRo
aXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlwZSwg
dGhpcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIF9oYW5kbGVQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ocmVzdWx0LCBub2RlKQorICAgIHsKKyAgICAgICAgcmVz
dWx0LnBvc3NpYmxlR2V0T3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkczsKKyAg
ICAgICAgcmVzdWx0LnBvc3NpYmxlU2V0T3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZVNldE92ZXJs
b2FkczsKKyAgICAgICAgcmVzdWx0LnBvc3NpYmxlQW5kT3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJs
ZUFuZE92ZXJsb2FkczsKKyAgICAgICAgcmVzdWx0LmJhc2VUeXBlID0gTm9kZS52aXNpdChub2Rl
LmJhc2VUeXBlLCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LmNhbGxGb3JHZXQgPSBOb2RlLnZpc2l0
KG5vZGUuY2FsbEZvckdldCwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlRm9yR2V0
ID0gTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JHZXQsIHRoaXMpOworICAgICAgICByZXN1
bHQuY2FsbEZvckFuZCA9IE5vZGUudmlzaXQobm9kZS5jYWxsRm9yQW5kLCB0aGlzKTsKKyAgICAg
ICAgcmVzdWx0LnJlc3VsdFR5cGVGb3JBbmQgPSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZv
ckFuZCwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5jYWxsRm9yU2V0ID0gTm9kZS52aXNpdChub2Rl
LmNhbGxGb3JTZXQsIHRoaXMpOworICAgICAgICByZXN1bHQuZXJyb3JGb3JTZXQgPSBub2RlLmVy
cm9yRm9yU2V0OworICAgICAgICByZXN1bHQudXBkYXRlQ2FsbHMoKTsKKyAgICB9CisgICAgCiAg
ICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0g
bmV3IERvdEV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpLCBu
b2RlLmZpZWxkTmFtZSk7Ci0gICAgICAgIHJlc3VsdC5zdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3RU
eXBlID8gbm9kZS5zdHJ1Y3RUeXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKLSAgICAgICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byByZXdyaXRlIGZpZWxkLCBzaW5jZSB0aGlzIGlzIGEgZGVlcCByZWZlcmVu
Y2UgZ29pbmcgb3V0IG9mIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgLy8gQWxzbywgdGhpcyBpcyBz
ZXQgdXAgZHVyaW5nIGlubGluaW5nLCBzbyB3ZSdyZSBhbHJlYWR5IGZ1bGx5IG1vbm9tb3JwaGlz
ZWQuCi0gICAgICAgIHJlc3VsdC5maWVsZCA9IG5vZGUuZmllbGQ7CisgICAgICAgIHRoaXMuX2hh
bmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQsIG5vZGUpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQor
ICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBJbmRleEV4cHJlc3Npb24obm9kZS5vcmln
aW4sIG5vZGUuYXJyYXkudmlzaXQodGhpcyksIG5vZGUuaW5kZXgudmlzaXQodGhpcykpOworICAg
ICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ocmVzdWx0LCBub2RlKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0yMTYsNyArMjQ0LDcgQEAg
Y2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRSZXR1
cm4obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgUmV0dXJuKG5vZGUub3JpZ2luLCBu
b2RlLnZhbHVlID8gbm9kZS52YWx1ZS52aXNpdCh0aGlzKSA6IG51bGwpOworICAgICAgICByZXR1
cm4gbmV3IFJldHVybihub2RlLm9yaWdpbiwgTm9kZS52aXNpdChub2RlLnZhbHVlLCB0aGlzKSk7
CiAgICAgfQogICAgIAogICAgIHZpc2l0Q29udGludWUobm9kZSkKQEAgLTI0MCw3ICsyNjgsNyBA
QCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdEdlbmVyaWNM
aXRlcmFsVHlwZShub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBub2RlLmNv
bnN0cnVjdG9yKG5vZGUub3JpZ2luLCBub2RlLnZhbHVlKTsKLSAgICAgICAgcmVzdWx0LnR5cGUg
PSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1
bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgcmVzdWx0LnBy
ZWZlcnJlZFR5cGUgPSBub2RlLnByZWZlcnJlZFR5cGUudmlzaXQodGhpcyk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjYxLDcgKzI4OSw3IEBAIGNsYXNzIFJld3JpdGVyIGV4
dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0TnVsbFR5cGUobm9kZSkKICAgICB7CiAgICAg
ICAgIGxldCByZXN1bHQgPSBuZXcgTnVsbFR5cGUobm9kZS5vcmlnaW4pOwotICAgICAgICByZXN1
bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAg
ICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjgwLDcgKzMwOCw3IEBAIGNsYXNzIFJld3JpdGVy
IGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICByZXN1bHQucG9zc2libGVPdmVybG9hZHMg
PSBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzOwogICAgICAgICBpZiAobm9kZS5pc0Nhc3QpCiAgICAg
ICAgICAgICByZXN1bHQuc2V0Q2FzdERhdGEobm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpKTsK
LSAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBub2RlLnJlc3VsdFR5cGUgPyBub2RlLnJlc3Vs
dFR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IE5v
ZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlLCB0aGlzKTsKICAgICAgICAgcmVzdWx0LnJlc3VsdEVQ
dHIgPSBub2RlLnJlc3VsdEVQdHI7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAt
MjkwLDcgKzMxOCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAg
ICAgICBsZXQgcmVzdWx0ID0gbmV3IENhbGxFeHByZXNzaW9uKAogICAgICAgICAgICAgbm9kZS5v
cmlnaW4sIG5vZGUubmFtZSwKICAgICAgICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodHlw
ZUFyZ3VtZW50ID0+IHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKSksCi0gICAgICAgICAgICBub2Rl
LmFyZ3VtZW50TGlzdC5tYXAoYXJndW1lbnQgPT4gYXJndW1lbnQudmlzaXQodGhpcykpKTsKKyAg
ICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBOb2RlLnZpc2l0KGFy
Z3VtZW50LCB0aGlzKSkpOwogICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGVyaXZlZENhbGxE
YXRhKG5vZGUsIHJlc3VsdCk7CiAgICAgfQogICAgIApAQCAtMjk4LDcgKzMyNiw3IEBAIGNsYXNz
IFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHsKICAgICAgICAgbGV0IHJlc3Vs
dCA9IG5ldyBGdW5jdGlvbkxpa2VCbG9jaygKICAgICAgICAgICAgIG5vZGUub3JpZ2luLAotICAg
ICAgICAgICAgbm9kZS5yZXR1cm5UeXBlID8gbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpIDog
bnVsbCwKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXR1cm5UeXBlLCB0aGlzKSwKICAg
ICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBhcmd1bWVudC52aXNp
dCh0aGlzKSksCiAgICAgICAgICAgICBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBw
YXJhbWV0ZXIudmlzaXQodGhpcykpLAogICAgICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMp
KTsKQEAgLTMxNSw3ICszNDMsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNl
IHsKIAogICAgIHZpc2l0SWZTdGF0ZW1lbnQobm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBu
ZXcgSWZTdGF0ZW1lbnQobm9kZS5vcmlnaW4sIG5vZGUuY29uZGl0aW9uYWwudmlzaXQodGhpcyks
IG5vZGUuYm9keS52aXNpdCh0aGlzKSwgbm9kZS5lbHNlQm9keSA/IG5vZGUuZWxzZUJvZHkudmlz
aXQodGhpcykgOiB1bmRlZmluZWQpOworICAgICAgICByZXR1cm4gbmV3IElmU3RhdGVtZW50KG5v
ZGUub3JpZ2luLCBub2RlLmNvbmRpdGlvbmFsLnZpc2l0KHRoaXMpLCBub2RlLmJvZHkudmlzaXQo
dGhpcyksIE5vZGUudmlzaXQobm9kZS5lbHNlQm9keSwgdGhpcykpOwogICAgIH0KIAogICAgIHZp
c2l0V2hpbGVMb29wKG5vZGUpCkBAIC0zMzEsMjIgKzM1OSwyNCBAQCBjbGFzcyBSZXdyaXRlciBl
eHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdEZvckxvb3Aobm9kZSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBuZXcgRm9yTG9vcChub2RlLm9yaWdpbiwKLSAgICAgICAgICAgIG5vZGUuaW5p
dGlhbGl6YXRpb24gPyBub2RlLmluaXRpYWxpemF0aW9uLnZpc2l0KHRoaXMpIDogdW5kZWZpbmVk
LAotICAgICAgICAgICAgbm9kZS5jb25kaXRpb24gPyBub2RlLmNvbmRpdGlvbi52aXNpdCh0aGlz
KSA6IHVuZGVmaW5lZCwKLSAgICAgICAgICAgIG5vZGUuaW5jcmVtZW50ID8gbm9kZS5pbmNyZW1l
bnQudmlzaXQodGhpcykgOiB1bmRlZmluZWQsCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUu
aW5pdGlhbGl6YXRpb24sIHRoaXMpLAorICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLmNvbmRp
dGlvbiwgdGhpcyksCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5jcmVtZW50LCB0aGlz
KSwKICAgICAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKSk7CiAgICAgfQogICAgIAotICAg
IHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9k
ZSkKICAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTGV0RXhwcmVzc2lvbihub2RlLm9y
aWdpbik7Ci0gICAgICAgIHJlc3VsdC5pbmRleCA9IG5vZGUuaW5kZXg7Ci0gICAgICAgIHJlc3Vs
dC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKLSAgICAg
ICAgcmVzdWx0LmFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudC52aXNpdCh0aGlzKTsKKyAgICAgICAg
bGV0IHJlc3VsdCA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwgbm9kZS50eXBl
LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgcmVzdWx0Ll9pbmRleCA9IG5vZGUuX2luZGV4OwogICAg
ICAgICB0aGlzLl9tYXBOb2RlKG5vZGUsIHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdC5ib2R5ID0g
bm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgICAgICByZXN1bHQuZVB0ciA9IG5vZGUuZVB0cjsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisgICAgdmlzaXRJZGVudGl0eUV4
cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgSWRlbnRpdHlFeHByZXNz
aW9uKG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKHJldmlzaW9u
IDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFy
eS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTggQEAgbmF0aXZlIGludCBvcGVyYXRv
ciooaW50LCBpbnQpOwogbmF0aXZlIHVpbnQgb3BlcmF0b3IqKHVpbnQsIHVpbnQpOwogbmF0aXZl
IGludCBvcGVyYXRvci8oaW50LCBpbnQpOwogbmF0aXZlIHVpbnQgb3BlcmF0b3IvKHVpbnQsIHVp
bnQpOworbmF0aXZlIGludCBvcGVyYXRvciYoaW50LCBpbnQpOworbmF0aXZlIGludCBvcGVyYXRv
cnwoaW50LCBpbnQpOworbmF0aXZlIGludCBvcGVyYXRvcl4oaW50LCBpbnQpOworbmF0aXZlIGlu
dCBvcGVyYXRvcn4oaW50KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3I8PChpbnQsIHVpbnQpOworbmF0
aXZlIGludCBvcGVyYXRvcj4+KGludCwgdWludCk7CituYXRpdmUgdWludCBvcGVyYXRvciYodWlu
dCwgdWludCk7CituYXRpdmUgdWludCBvcGVyYXRvcnwodWludCwgdWludCk7CituYXRpdmUgdWlu
dCBvcGVyYXRvcl4odWludCwgdWludCk7CituYXRpdmUgdWludCBvcGVyYXRvcn4odWludCk7Citu
YXRpdmUgdWludCBvcGVyYXRvcjw8KHVpbnQsIHVpbnQpOworbmF0aXZlIHVpbnQgb3BlcmF0b3I+
Pih1aW50LCB1aW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPT0oaW50LCBpbnQpOwogbmF0aXZl
IGJvb2wgb3BlcmF0b3I9PSh1aW50LCB1aW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPT0oYm9v
bCwgYm9vbCk7CkBAIC02OCw2ICs4MCwxMCBAQCBuYXRpdmUgYm9vbCBvcGVyYXRvcj4odWludCwg
dWludCk7CiBuYXRpdmUgYm9vbCBvcGVyYXRvcj49KGludCwgaW50KTsKIG5hdGl2ZSBib29sIG9w
ZXJhdG9yPj0odWludCwgdWludCk7CiAKK3Byb3RvY29sIEFkZGFibGUgeworICAgIEFkZGFibGUg
b3BlcmF0b3IrKEFkZGFibGUsIEFkZGFibGUpOworfQorCiBwcm90b2NvbCBFcXVhdGFibGUgewog
ICAgIGJvb2wgb3BlcmF0b3I9PShFcXVhdGFibGUsIEVxdWF0YWJsZSk7CiB9CkBAIC05Miw0ICsx
MDgsOSBAQCBuYXRpdmUgdGhyZWFkIFReIG9wZXJhdG9yJltdPFQ+KHRocmVhZCBUCiBuYXRpdmUg
dGhyZWFkZ3JvdXAgVF4gb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KHRocmVhZGdyb3VwIFRbXSwg
dWludCk7CiBuYXRpdmUgZGV2aWNlIFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihkZXZpY2Ug
VFtdLCB1aW50KTsKIG5hdGl2ZSBjb25zdGFudCBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4o
Y29uc3RhbnQgVFtdLCB1aW50KTsKKworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ+KHRo
cmVhZCBUW10pOworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6cHJpbWl0aXZlPih0aHJl
YWRncm91cCBUW10pOworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6cHJpbWl0aXZlPihk
ZXZpY2UgVFtdKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOnByaW1pdGl2ZT4oY29u
c3RhbnQgVFtdKTsKIGA7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1
Y3RMYXlvdXRCdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDUgKzU5LDExIEBAIGNsYXNzIFN0cnVjdExheW91dEJ1aWxkZXIgZXh0ZW5k
cyBWaXNpdG8KICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVHlwZSBkb2VzIG5vdCBoYXZl
IHNpemU6ICIgKyBub2RlLnR5cGUpOwogICAgICAgICB0aGlzLl9vZmZzZXQgKz0gc2l6ZTsKICAg
ICB9CisgICAgCisgICAgdmlzaXROYXRpdmVGdW5jSW5zdGFuY2Uobm9kZSkKKyAgICB7CisgICAg
ICAgIHN1cGVyLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKG5vZGUpOworICAgICAgICBub2RlLmZ1
bmMuZGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRhKG5vZGUuaW1wbGVtZW50YXRp
b25EYXRhKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0cnVjdFR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RydWN0VHlwZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTcsMjEgKzU3LDI5
IEBAIGNsYXNzIFN0cnVjdFR5cGUgZXh0ZW5kcyBUeXBlIHsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgCi0gICAgaW5zdGFudGlhdGUodHlwZUFyZ3VtZW50cywgbW9kZSkKKyAg
ICBpbnN0YW50aWF0ZSh0eXBlQXJndW1lbnRzID0gbnVsbCkKICAgICB7Ci0gICAgICAgIGlmICh0
eXBlQXJndW1lbnRzLmxlbmd0aCAhPSB0aGlzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkKLSAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJXcm9uZyBu
dW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgdG8gaW5zdGFudGlhdGlvbiIpOworICAgICAgICBsZXQg
c3Vic3RpdHV0aW9uID0gbnVsbDsKKyAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy50
eXBlUGFyYW1ldGVyczsKICAgICAgICAgCi0gICAgICAgIGlmICghdHlwZUFyZ3VtZW50cy5sZW5n
dGgpCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMp
IHsKKyAgICAgICAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSB0aGlzLnR5cGVQYXJh
bWV0ZXJzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmln
aW4ub3JpZ2luU3RyaW5nLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIHRvIGluc3Rh
bnRpYXRpb24iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCF0eXBlQXJndW1lbnRz
Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc3Vic3RpdHV0aW9uID0gbmV3IFN1YnN0aXR1dGlvbih0aGlzLnR5cGVQYXJhbWV0
ZXJzLCB0eXBlQXJndW1lbnRzKTsKKyAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzID0gW107Cisg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBuZXcgU3Vic3Rp
dHV0aW9uKHRoaXMudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOwotICAgICAgICBsZXQg
aW5zdGFudGlhdGVJbW1lZGlhdGVzID0gbW9kZSA9PSAic2hhbGxvdyIgPyBudWxsIDogbmV3IElu
c3RhbnRpYXRlSW1tZWRpYXRlcygpOwotICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFN0cnVjdFR5
cGUodGhpcy5vcmlnaW4sIHRoaXMubmFtZSwgW10pOworICAgICAgICBsZXQgaW5zdGFudGlhdGVJ
bW1lZGlhdGVzID0gbmV3IEluc3RhbnRpYXRlSW1tZWRpYXRlcygpOworICAgICAgICBsZXQgcmVz
dWx0ID0gbmV3IFN0cnVjdFR5cGUodGhpcy5vcmlnaW4sIHRoaXMubmFtZSwgdHlwZVBhcmFtZXRl
cnMpOwogICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkcykgewotICAgICAgICAg
ICAgbGV0IG5ld0ZpZWxkID0gZmllbGQudmlzaXQoc3Vic3RpdHV0aW9uKTsKLSAgICAgICAgICAg
IGlmIChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpCi0gICAgICAgICAgICAgICAgbmV3RmllbGQgPSBu
ZXdGaWVsZC52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpOworICAgICAgICAgICAgbGV0IG5l
d0ZpZWxkID0gZmllbGQ7CisgICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uKQorICAgICAgICAg
ICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQudmlzaXQoc3Vic3RpdHV0aW9uKTsKKyAgICAgICAg
ICAgIG5ld0ZpZWxkID0gbmV3RmllbGQudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlhdGVzKTsKICAg
ICAgICAgICAgIHJlc3VsdC5hZGQobmV3RmllbGQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWJzdGl0dXRp
b24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Vic3Rp
dHV0aW9uLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9TdWJzdGl0dXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAgY2xh
c3MgU3Vic3RpdHV0aW9uIGV4dGVuZHMgUmV3cml0ZXIgewogICAgICAgICAgICAgdGhpcy5fbWFw
LnNldChwYXJhbWV0ZXJzW2ldLCBhcmd1bWVudExpc3RbaV0pOwogICAgIH0KICAgICAKKyAgICBn
ZXQgbWFwKCkgeyByZXR1cm4gdGhpcy5fbWFwOyB9CisgICAgCiAgICAgdmlzaXRUeXBlUmVmKG5v
ZGUpCiAgICAgewogICAgICAgICBsZXQgcmVwbGFjZW1lbnQgPSB0aGlzLl9tYXAuZ2V0KG5vZGUu
dHlwZSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWZmaXhDYWxsQXNz
aWdubWVudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9T
dWZmaXhDYWxsQXNzaWdubWVudC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMJKG5vbmV4aXN0ZW50KQpA
QCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIFN1ZmZpeENhbGxBc3NpZ25tZW50IGV4dGVuZHMg
RXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBuYW1lLCBsaHMpCi0gICAgewot
ICAgICAgICBzdXBlcihvcmlnaW4pOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAg
ICAgdGhpcy5fbGhzID0gbGhzOwotICAgICAgICB0aGlzLmZ1bmMgPSBudWxsOwotICAgIH0KLSAg
ICAKLSAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KLSAgICBnZXQgbGhzKCkg
eyByZXR1cm4gdGhpcy5fbGhzOyB9Ci0gICAgCi0gICAgdG9TdHJpbmcoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMubGhzICsgIiBzdWZmaXggIiArIHRoaXMubmFtZTsKLSAgICB9Ci19Ci0K
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nl
c3NvcnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3lu
dGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIHN5bnRoZXNpemVTdHJ1Y3RBY2Nl
c3NvcnMocHJvZ3JhbSkKK3sKKyAgICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0udHlwZXMudmFs
dWVzKCkpIHsKKyAgICAgICAgaWYgKCEodHlwZSBpbnN0YW5jZW9mIFN0cnVjdFR5cGUpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0
eXBlLmZpZWxkcykgeworICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlwZVBhcmFtZXRlcnMo
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLnR5cGVQYXJhbWV0
ZXJzLm1hcCgKKyAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlciA9PiB0eXBlUGFyYW1l
dGVyLnZpc2l0KG5ldyBUeXBlUGFyYW1ldGVyUmV3cml0ZXIoKSkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBlQXJndW1lbnRzKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVBhcmFtZXRlcnMubWFw
KHR5cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFtZXRlci52aXNpdChuZXcgQXV0b1dyYXBwZXIoKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBzZXR1
cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLmluc3RhbnRpYXRlSW1wbGVtZW50YXRp
b24gPSBzdWJzdGl0dXRpb24gPT4geworICAgICAgICAgICAgICAgICAgICBsZXQgbmV3VHlwZSA9
IHR5cGUuaW5zdGFudGlhdGUobmF0aXZlRnVuYy50eXBlUGFyYW1ldGVycy5tYXAodHlwZVBhcmFt
ZXRlciA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3Vic3RpdHV0ZSA9IHN1YnN0
aXR1dGlvbi5tYXAuZ2V0KHR5cGVQYXJhbWV0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFzdWJzdGl0dXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiTnVsbCBzdWJzdGl0dXRlIGZvciB0eXBlIHBhcmFtZXRlciAiICsgdHlwZVBhcmFtZXRl
cik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3R5cGU6IG5ld1R5
cGUsIGZpZWxkTmFtZTogZmllbGQubmFtZX07CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICBuYXRpdmVGdW5jLnZpc2l0SW1wbGVtZW50YXRpb25EYXRhID0gKGltcGxlbWVudGF0
aW9uRGF0YSwgdmlzaXRvcikgPT4geworICAgICAgICAgICAgICAgICAgICAvLyBWaXNpdGluZyB0
aGUgdHlwZSBmaXJzdCBlbnN1cmVzIHRoYXQgdGhlIHN0cnVjdCBsYXlvdXQgYnVpbGRlciBmaWd1
cmVzIG91dCB0aGUgZmllbGQncworICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQuCisgICAg
ICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS50eXBlLnZpc2l0KHZpc2l0b3IpOwor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgbmF0aXZlRnVuYy5kaWRMYXlvdXRT
dHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEgPSBpbXBsZW1lbnRhdGlvbkRhdGEgPT4geworICAg
ICAgICAgICAgICAgICAgICBsZXQgc3RydWN0U2l6ZSA9IGltcGxlbWVudGF0aW9uRGF0YS50eXBl
LnNpemU7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3RTaXplID09IG51bGwpCisgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIHN0cnVjdCBzaXplIGZvciAi
ICsgbmF0aXZlRnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGltcGxlbWVu
dGF0aW9uRGF0YS50eXBlLmZpZWxkQnlOYW1lKGltcGxlbWVudGF0aW9uRGF0YS5maWVsZE5hbWUp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBmaWVsZCIpOworICAgICAgICAgICAg
ICAgICAgICBsZXQgb2Zmc2V0ID0gZmllbGQub2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBs
ZXQgZmllbGRTaXplID0gZmllbGQudHlwZS5zaXplOworICAgICAgICAgICAgICAgICAgICBpZiAo
ZmllbGRTaXplID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIk5vIGZpZWxkIHNpemUgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG9mZnNldCA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJObyBvZmZzZXQgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5zdHJ1Y3RTaXplID0g
c3RydWN0U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLmZpZWxk
U2l6ZSA9IGZpZWxkU2l6ZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIG5h
dGl2ZUZ1bmMuaW1wbGVtZW50YXRpb24gPSAoYXJndW1lbnRMaXN0LCBub2RlKSA9PiB7CisgICAg
ICAgICAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jSW5zdGFuY2UgPSBub2RlLm5hdGl2ZUZ1bmNJ
bnN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGltcGxlbWVudGF0aW9uRGF0YSA9IG5h
dGl2ZUZ1bmNJbnN0YW5jZS5pbXBsZW1lbnRhdGlvbkRhdGE7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBpbXBsZW1lbnRhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50
TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5vZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEuc3RydWN0U2l6ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5maWVsZFNpemUpOwor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIGNyZWF0ZUZpZWxkVHlwZSgpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZpZWxkLnR5cGUudmlzaXQobmV3IFN1YnN0aXR1dGlvbih0eXBlLnR5cGVQ
YXJhbWV0ZXJzLCB0eXBlUGFyYW1ldGVycykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBlUmVmKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gVHlwZVJlZi5pbnN0YW50aWF0ZSh0eXBlLCBjcmVhdGVUeXBl
QXJndW1lbnRzKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBs
ZXQgaXNDYXN0ID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgdHlwZVBhcmFtZXRlcnM7CisgICAg
ICAgICAgICBsZXQgbmF0aXZlRnVuYzsKKworICAgICAgICAgICAgLy8gVGhlIGdldHRlcjogb3Bl
cmF0b3IuZmllbGQKKyAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzID0gY3JlYXRlVHlwZVBhcmFt
ZXRlcnMoKTsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAgICAg
ICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQubmFtZSwgY3JlYXRl
RmllbGRUeXBlKCksIHR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgIFtuZXcgRnVuY1Bh
cmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0ZVR5cGVSZWYoKSldLCBpc0Nhc3QpOwor
ICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlXSwg
b2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAgICAgICBsZXQg
cmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoZmllbGRTaXplKSwgMCk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UucGx1cyhvZmZzZXQpLCBmaWVsZFNpemUpOworICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBU
aGUgc2V0dGVyOiBvcGVyYXRvci5maWVsZD0KKyAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzID0g
Y3JlYXRlVHlwZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0
aXZlRnVuYygKKyAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmll
bGQubmFtZSArICI9IiwgY3JlYXRlVHlwZVJlZigpLCB0eXBlUGFyYW1ldGVycywKKyAgICAgICAg
ICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9y
aWdpbiwgbnVsbCwgY3JlYXRlVHlwZVJlZigpKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IEZ1
bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVGaWVsZFR5cGUoKSkKKyAgICAg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGlzQ2FzdCk7CisgICAgICAgICAgICBzZXR1
cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2UsIHZhbHVlXSwgb2Zmc2V0LCBz
dHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0g
bmV3IEVQdHIobmV3IEVCdWZmZXIoc3RydWN0U2l6ZSksIDApOworICAgICAgICAgICAgICAgIHJl
c3VsdC5jb3B5RnJvbShiYXNlLCBzdHJ1Y3RTaXplKTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
cGx1cyhvZmZzZXQpLmNvcHlGcm9tKHZhbHVlLCBmaWVsZFNpemUpOworICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHByb2dyYW0uYWRk
KG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGUgYW5kZXI6IG9w
ZXJhdG9yJi5maWVsZAorICAgICAgICAgICAgZnVuY3Rpb24gc2V0dXBBbmRlcihhZGRyZXNzU3Bh
Y2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBjcmVh
dGVUeXBlUGFyYW1ldGVycygpOworICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0
aXZlRnVuYygKKyAgICAgICAgICAgICAgICAgICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3ImLiIg
KyBmaWVsZC5uYW1lLCBuZXcgUHRyVHlwZShmaWVsZC5vcmlnaW4sIGFkZHJlc3NTcGFjZSwgY3Jl
YXRlRmllbGRUeXBlKCkpLAorICAgICAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVycywKKyAg
ICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZ1bmNQYXJh
bWV0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQub3JpZ2luLCBudWxsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQdHJUeXBlKGZpZWxkLm9yaWdpbiwgYWRk
cmVzc1NwYWNlLCBjcmVhdGVUeXBlUmVmKCkpKQorICAgICAgICAgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgICAgICAgICBpc0Nhc3QpOworICAgICAgICAgICAgICAgIHNldHVwSW1wbGVtZW50
YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmllbGRT
aXplKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlLmxvYWRWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2UpCisgICAgICAgICAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGRlcmVm
ZXJlbmNlIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveChiYXNlLnBsdXMo
b2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS5h
ZGQobmF0aXZlRnVuYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHNldHVwQW5kZXIoInRocmVhZCIpOworICAgICAgICAgICAgaWYgKHR5cGUuaW5zdGFudGlhdGUo
KS5pc1ByaW1pdGl2ZSkgeworICAgICAgICAgICAgICAgIHNldHVwQW5kZXIoInRocmVhZGdyb3Vw
Iik7CisgICAgICAgICAgICAgICAgc2V0dXBBbmRlcigiZGV2aWNlIik7CisgICAgICAgICAgICAg
ICAgc2V0dXBBbmRlcigiY29uc3RhbnQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHJldmlz
aW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtNiwxMyArNiwxNCBAQAogPHNjcmlwdCBzcmM9IlJlZmVyZW5jZVR5
cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlZhbHVlLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJWaXNpdG9yQmFz
ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmV3cml0ZXIuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IlZpc2l0b3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVy
YWwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWxUeXBlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMiPjwvc2NyaXB0
PgogCiA8c2NyaXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJBbm9ueW1vdXNWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQXJyYXlSZWZU
eXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVR5cGUuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IkFzc2lnbm1lbnQuanMiPjwvc2NyaXB0PgpAQCAtMjAsNyArMjEsNiBAQAog
PHNjcmlwdCBzcmM9IkJsb2NrLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJCb29sTGl0ZXJh
bC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQnJlYWsuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9IkNhbGxBc3NpZ25tZW50LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDYWxsRXhw
cmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ2FsbEZ1bmN0aW9uLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJDaGVjay5qcyI+PC9zY3JpcHQ+CkBAIC00Niw2ICs0Niw3IEBA
CiA8c2NyaXB0IHNyYz0iRXZhbHVhdG9yLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJFeHBy
ZXNzaW9uRmluZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGaWVsZC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iRmluZEhpZ2hab21iaWVzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJGbGF0dGVuUHJvdG9jb2xFeHRlbmRzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJG
b3JMb29wLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGdW5jLmpzIj48L3NjcmlwdD4KQEAg
LTUzLDcgKzU0LDEwIEBACiA8c2NyaXB0IHNyYz0iRnVuY0luc3RhbnRpYXRvci5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iRnVuY1BhcmFtZXRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iRnVuY3Rpb25MaWtlQmxvY2suanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkhpZ2hab21i
aWVGaW5kZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IklkZW50aXR5RXhwcmVzc2lvbi5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSWZTdGF0ZW1lbnQuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9IkluZGV4RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW5m
ZXJUeXBlc0ZvckNhbGwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IklubGluZS5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW5saW5lci5qcyI+PC9zY3JpcHQ+CkBAIC03NSwyMCArNzks
MjQgQEAKIDxzY3JpcHQgc3JjPSJOYXRpdmVGdW5jSW5zdGFuY2UuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9Ik5hdGl2ZVR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5
cGVJbnN0YW5jZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTm9ybWFsVXNlUHJvcGVydHlS
ZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTnVsbExpdGVyYWwuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9Ik51bGxUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJP
dmVybG9hZFJlc29sdXRpb25GYWlsdXJlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQYXJz
ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJlcGFyZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iUHJvcGVydHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJv
Z3JhbS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvdG9jb2wuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IlByb3RvY29sRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJv
dG9jb2xGdW5jRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvdG9jb2xSZWYuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlB0clR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9IlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IlJlY3Vyc2lvbkNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJlc29sdmVOYW1l
cy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iUmVzb2x2ZVByb3BlcnRpZXMuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IlJlc29sdmVUeXBlRGVmcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmV0
dXJuLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXR1cm5DaGVja2VyLmpzIj48L3Njcmlw
dD4KQEAgLTk3LDEyICsxMDUsMTQgQEAKIDxzY3JpcHQgc3JjPSJTdHJ1Y3RMYXlvdXRCdWlsZGVy
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJTdHJ1Y3RUeXBlLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJTdWJzdGl0dXRpb24uanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9IlN1ZmZp
eENhbGxBc3NpZ25tZW50LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJTeW50aGVzaXplU3Ry
dWN0QWNjZXNzb3JzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlRGVmLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlRGVmUmVzb2x2ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9IlR5cGVPclZhcmlhYmxlUmVmLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJUeXBl
UGFyYW1ldGVyUmV3cml0ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5cGVSZWYuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5cGVWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iVHlwZVZhcmlhYmxlVHJhY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
VHlwZWRWYWx1ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVWludExpdGVyYWwuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IlVpbnRMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+CkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHJldmlzaW9uIDIyMjEyMykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDcgKzYyLDcgQEAgZnVuY3Rpb24gY2hlY2tOdW1iZXIocHJvZ3JhbSwgcmVzdWx0LCBleAog
ICAgIGlmICghcmVzdWx0LnR5cGUuaXNOdW1iZXIpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
V3JvbmcgcmVzdWx0IHR5cGU7IHJlc3VsdDogIiArIHJlc3VsdCk7CiAgICAgaWYgKHJlc3VsdC52
YWx1ZSAhPSBleHBlY3RlZCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQ6
ICIgKyByZXN1bHQgKyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiKSIpOworICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdDogIiArIHJlc3VsdC52YWx1ZSArICIgKGV4cGVj
dGVkICIgKyBleHBlY3RlZCArICIpIik7CiB9CiAKIGZ1bmN0aW9uIG1ha2VVaW50KHByb2dyYW0s
IHZhbHVlKQpAQCAtNDIyLDEwICs0MjIsMTAgQEAgZnVuY3Rpb24gVEVTVF9kZXZpY2VBcnJheVN0
b3JlSW50TGl0ZXJhbAogZnVuY3Rpb24gVEVTVF9zaW1wbGVQcm90b2NvbCgpCiB7CiAgICAgbGV0
IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBwcm90b2NvbCBBZGRhYmxlIHsKLSAgICAgICAg
ICAgIEFkZGFibGUgb3BlcmF0b3IrKEFkZGFibGUsIEFkZGFibGUpOworICAgICAgICBwcm90b2Nv
bCBNeUFkZGFibGUgeworICAgICAgICAgICAgTXlBZGRhYmxlIG9wZXJhdG9yKyhNeUFkZGFibGUs
IE15QWRkYWJsZSk7CiAgICAgICAgIH0KLSAgICAgICAgVCBhZGQ8VDpBZGRhYmxlPihUIGEsIFQg
YikKKyAgICAgICAgVCBhZGQ8VDpNeUFkZGFibGU+KFQgYSwgVCBiKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gYSArIGI7CiAgICAgICAgIH0KQEAgLTc0Myw3ICs3NDMsNyBAQCBmdW5j
dGlvbiBURVNUX3N0b3JlTnVsbEFycmF5UmVmKCkKICAgICAgICAgKCkgPT4gZG9QcmVwKGAKICAg
ICAgICAgICAgIHZvaWQgZm9vKCkgeyBudWxsWzB1XSA9IDQyOyB9CiAgICAgICAgIGApLAotICAg
ICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2Yo
IkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCIpICE9IC0xKTsKKyAgICAgICAgKGUpID0+
IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJMSFMgb2YgYXNz
aWdubWVudCBpcyBub3QgYW4gTFZhbHVlIikgIT0gLTEpOwogfQogCiBmdW5jdGlvbiBURVNUX3Jl
dHVybk51bGxBcnJheVJlZigpCkBAIC0xNDY3LDEwICsxNDY3LDEwIEBAIGZ1bmN0aW9uIFRFU1Rf
aW50TGl0ZXJhbEdlbmVyaWMoKQogZnVuY3Rpb24gVEVTVF9pbnRMaXRlcmFsR2VuZXJpY1dpdGhQ
cm90b2NvbHMoKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgcHJvdG9j
b2wgQ29udmVydGlibGVUb0ludCB7Ci0gICAgICAgICAgICBvcGVyYXRvciBpbnQoQ29udmVydGli
bGVUb0ludCk7CisgICAgICAgIHByb3RvY29sIE15Q29udmVydGlibGVUb0ludCB7CisgICAgICAg
ICAgICBvcGVyYXRvciBpbnQoTXlDb252ZXJ0aWJsZVRvSW50KTsKICAgICAgICAgfQotICAgICAg
ICBpbnQgZm9vPFQ6Q29udmVydGlibGVUb0ludD4oVCB4KSB7IHJldHVybiBpbnQoeCk7IH0KKyAg
ICAgICAgaW50IGZvbzxUOk15Q29udmVydGlibGVUb0ludD4oVCB4KSB7IHJldHVybiBpbnQoeCk7
IH0KICAgICAgICAgaW50IGJhcigpIHsgcmV0dXJuIGZvbyg0Mik7IH0KICAgICBgKTsKICAgICBj
aGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdLCBbXSksIDQy
KTsKQEAgLTE0ODgsMTAgKzE0ODgsMTAgQEAgZnVuY3Rpb24gVEVTVF91aW50TGl0ZXJhbEdlbmVy
aWMoKQogZnVuY3Rpb24gVEVTVF91aW50TGl0ZXJhbEdlbmVyaWNXaXRoUHJvdG9jb2xzKCkKIHsK
ICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIHByb3RvY29sIENvbnZlcnRpYmxl
VG9VaW50IHsKLSAgICAgICAgICAgIG9wZXJhdG9yIHVpbnQoQ29udmVydGlibGVUb1VpbnQpOwor
ICAgICAgICBwcm90b2NvbCBNeUNvbnZlcnRpYmxlVG9VaW50IHsKKyAgICAgICAgICAgIG9wZXJh
dG9yIHVpbnQoTXlDb252ZXJ0aWJsZVRvVWludCk7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBm
b288VDpDb252ZXJ0aWJsZVRvVWludD4oVCB4KSB7IHJldHVybiB1aW50KHgpOyB9CisgICAgICAg
IHVpbnQgZm9vPFQ6TXlDb252ZXJ0aWJsZVRvVWludD4oVCB4KSB7IHJldHVybiB1aW50KHgpOyB9
CiAgICAgICAgIHVpbnQgYmFyKCkgeyByZXR1cm4gZm9vKDQydSk7IH0KICAgICBgKTsKICAgICBj
aGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSwgW10pLCA0
Mik7CkBAIC0yNTY2LDYgKzI1NjYsMjYzIEBAIGZ1bmN0aW9uIFRFU1RfbWFrZUFycmF5UmVmRnJv
bUFycmF5UmVmKCkKICAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKIH0K
IAorZnVuY3Rpb24gVEVTVF9zaW1wbGVMZW5ndGgoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9Q
cmVwKGAKKyAgICAgICAgdWludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBkb3VibGVb
NzU0XSBhcnJheTsKKyAgICAgICAgICAgIHJldHVybiAoQGFycmF5KS5sZW5ndGg7CisgICAgICAg
IH0KKyAgICBgKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSwgW10pLCA3NTQpOworfQorCitmdW5jdGlvbiBURVNUX2Fzc2lnbkxlbmd0aCgp
Cit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAg
dm9pZCBmb28oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvdWJsZVs3NTRdIGFy
cmF5OworICAgICAgICAgICAgICAgIChAYXJyYXkpLmxlbmd0aCA9IDQyOworICAgICAgICAgICAg
fQorICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYm
IGUubWVzc2FnZS5pbmRleE9mKCJMSFMgb2YgYXNzaWdubWVudCBpcyBub3QgYW4gTFZhbHVlIikg
IT0gLTEpOworfQorCitmdW5jdGlvbiBURVNUX2Fzc2lnbkxlbmd0aEhlbHBlcigpCit7CisgICAg
Y2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgdm9pZCBiYXIo
dGhyZWFkIGRvdWJsZVtdIGFycmF5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFy
cmF5Lmxlbmd0aCA9IDQyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBmb28oKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvdWJsZVs3NTRdIGFycmF5OworICAgICAg
ICAgICAgICAgIGJhcihAYXJyYXkpOworICAgICAgICAgICAgfQorICAgICAgICBgKSwKKyAgICAg
ICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJD
YW5ub3QgZW1pdCBzZXQgYmVjYXVzZTogRGlkIG5vdCBmaW5kIGFueSBmdW5jdGlvbnMgbmFtZWQg
b3BlcmF0b3IubGVuZ3RoPSIpICE9IC0xKTsKK30KKworZnVuY3Rpb24gVEVTVF9zaW1wbGVHZXR0
ZXIoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZvbyB7
CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAgICBpbnQgb3BlcmF0b3IueShG
b28gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vLng7CisgICAgICAgIH0K
KyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAg
ICAgICAgICBmb28ueCA9IDc4MDQ7CisgICAgICAgICAgICByZXR1cm4gZm9vLnk7CisgICAgICAg
IH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFtdLCBbXSksIDc4MDQpOworfQorCitmdW5jdGlvbiBURVNUX3NpbXBsZVNldHRlcigp
Cit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAg
ICAgICAgICAgIGludCB4OworICAgICAgICB9CisgICAgICAgIGludCBvcGVyYXRvci55KEZvbyBm
b28pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb28ueDsKKyAgICAgICAgfQorICAg
ICAgICBGb28gb3BlcmF0b3IueT0oRm9vIGZvbywgaW50IHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBmb28ueCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIGZvbzsKKyAgICAgICAg
fQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIGZvbzsKKyAg
ICAgICAgICAgIGZvby55ID0gNzgwNDsKKyAgICAgICAgICAgIHJldHVybiBmb28ueDsKKyAgICAg
ICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10sIFtdKSwgNzgwNCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfZ2VuZXJpY0FjY2Vz
c29ycygpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBzdHJ1Y3QgRm9v
PFQ+IHsKKyAgICAgICAgICAgIFQgeDsKKyAgICAgICAgICAgIFRbM10geTsKKyAgICAgICAgfQor
ICAgICAgICBzdHJ1Y3QgQmFyPFQ+IHsKKyAgICAgICAgICAgIFQgeDsKKyAgICAgICAgICAgIFQg
eTsKKyAgICAgICAgfQorICAgICAgICBCYXI8VD4gb3BlcmF0b3IuejxUPihGb288VD4gZm9vKQor
ICAgICAgICB7CisgICAgICAgICAgICBCYXI8VD4gcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0
LnggPSBmb28ueDsKKyAgICAgICAgICAgIHJlc3VsdC55ID0gZm9vLnlbMV07CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIEZvbzxUPiBvcGVyYXRvci56PTxU
PihGb288VD4gZm9vLCBCYXI8VD4gYmFyKQorICAgICAgICB7CisgICAgICAgICAgICBmb28ueCA9
IGJhci54OworICAgICAgICAgICAgZm9vLnlbMV0gPSBiYXIueTsKKyAgICAgICAgICAgIHJldHVy
biBmb287CisgICAgICAgIH0KKyAgICAgICAgVCBvcGVyYXRvci5zdW08VDpBZGRhYmxlPihGb288
VD4gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vLnggKyBmb28ueVswXSAr
IGZvby55WzFdICsgZm9vLnlbMl07CisgICAgICAgIH0KKyAgICAgICAgVCBvcGVyYXRvci5zdW08
VDpBZGRhYmxlPihCYXI8VD4gYmFyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmFy
LnggKyBiYXIueTsKKyAgICAgICAgfQorICAgICAgICBvcGVyYXRvcjxUPiBCYXI8VD4oVCB4LCBU
IHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhcjxUPiByZXN1bHQ7CisgICAgICAgICAgICBy
ZXN1bHQueCA9IHg7CisgICAgICAgICAgICByZXN1bHQueSA9IHk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0dXAodGhyZWFkIEZvbzxpbnQ+
XiBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvby0+eCA9IDE7CisgICAgICAgICAgICBm
b28tPnlbMF0gPSAyOworICAgICAgICAgICAgZm9vLT55WzFdID0gMzsKKyAgICAgICAgICAgIGZv
by0+eVsyXSA9IDQ7CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RTdXBlckJhc2ljKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgRm9vPGludD4gZm9vOworICAgICAgICAgICAgc2V0dXAoJmZv
byk7CisgICAgICAgICAgICByZXR1cm4gZm9vLnN1bTsKKyAgICAgICAgfQorICAgICAgICBpbnQg
dGVzdFpTZXR0ZXJEaWRTZXRZKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vPGludD4gZm9v
OworICAgICAgICAgICAgZm9vLnogPSBCYXI8aW50Pig1MywgOTMyKTsKKyAgICAgICAgICAgIHJl
dHVybiBmb28ueVsxXTsKKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdFpTZXR0ZXIoKQorICAg
ICAgICB7CisgICAgICAgICAgICBGb288aW50PiBmb287CisgICAgICAgICAgICBmb28ueiA9IEJh
cjxpbnQ+KDUzLCA5MzIpOworICAgICAgICAgICAgcmV0dXJuIGZvby5zdW07CisgICAgICAgIH0K
KyAgICAgICAgaW50IHRlc3RaR2V0dGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vPGlu
dD4gZm9vOworICAgICAgICAgICAgLy8gVGhpcyBkZWxpYmVyYXRlbHkgZG9lcyBub3QgY2FsbCBz
ZXR1cCgpIGp1c3Qgc28gd2UgdGVzdCB0aGlzIHN5bnRheC4KKyAgICAgICAgICAgIGZvby54ID0g
MTsKKyAgICAgICAgICAgIGZvby55WzBdID0gMjsKKyAgICAgICAgICAgIGZvby55WzFdID0gMzsK
KyAgICAgICAgICAgIGZvby55WzJdID0gNDsKKyAgICAgICAgICAgIHJldHVybiBmb28uei5zdW07
CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RMVmFsdWVFbXVsYXRpb24oKQorICAgICAgICB7
CisgICAgICAgICAgICBGb288aW50PiBmb287CisgICAgICAgICAgICBzZXR1cCgmZm9vKTsKKyAg
ICAgICAgICAgIGZvby56LnkgKj0gNTsKKyAgICAgICAgICAgIHJldHVybiBmb28uc3VtOworICAg
ICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJ0ZXN0U3VwZXJCYXNpYyIsIFtdLCBbXSksIDEgKyAyICsgMyArIDQpOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFpTZXR0ZXJEaWRTZXRZIiwg
W10sIFtdKSwgOTMyKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgInRlc3RaU2V0dGVyIiwgW10sIFtdKSwgNTMgKyA5MzIpOworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFpHZXR0ZXIiLCBbXSwgW10pLCAxICsgMyk7
CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0TFZhbHVl
RW11bGF0aW9uIiwgW10sIFtdKSwgMSArIDIgKyAzICogNSArIDQpOworfQorCitmdW5jdGlvbiBU
RVNUX2JpdFN1YnNjcmlwdEFjY2Vzc29yKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChg
CisgICAgICAgIHByb3RvY29sIE15Qml0bWFza2FibGUgOiBFcXVhdGFibGUgeworICAgICAgICAg
ICAgTXlCaXRtYXNrYWJsZSBvcGVyYXRvciYoTXlCaXRtYXNrYWJsZSwgTXlCaXRtYXNrYWJsZSk7
CisgICAgICAgICAgICBNeUJpdG1hc2thYmxlIG9wZXJhdG9yfChNeUJpdG1hc2thYmxlLCBNeUJp
dG1hc2thYmxlKTsKKyAgICAgICAgICAgIE15Qml0bWFza2FibGUgb3BlcmF0b3J+KE15Qml0bWFz
a2FibGUpOworICAgICAgICAgICAgTXlCaXRtYXNrYWJsZSBvcGVyYXRvcjw8KE15Qml0bWFza2Fi
bGUsIHVpbnQpOworICAgICAgICAgICAgTXlCaXRtYXNrYWJsZSBvcGVyYXRvcj4+KE15Qml0bWFz
a2FibGUsIHVpbnQpOworICAgICAgICAgICAgb3BlcmF0b3IgTXlCaXRtYXNrYWJsZShpbnQpOwor
ICAgICAgICB9CisgICAgICAgIFQgbWFza0ZvckJpdEluZGV4PFQ6TXlCaXRtYXNrYWJsZT4odWlu
dCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFQoMSkgPDwgaW5kZXg7Cisg
ICAgICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcltdPFQ6TXlCaXRtYXNrYWJsZT4oVCB2YWx1
ZSwgdWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJvb2wodmFsdWUg
JiBtYXNrRm9yQml0SW5kZXg8VD4oaW5kZXgpKTsKKyAgICAgICAgfQorICAgICAgICBUIG9wZXJh
dG9yW109PFQ6TXlCaXRtYXNrYWJsZT4oVCB2YWx1ZSwgdWludCBpbmRleCwgYm9vbCBiaXQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFQgbWFzayA9IG1hc2tGb3JCaXRJbmRleDxUPihpbmRleCk7
CisgICAgICAgICAgICBpZiAoYml0KQorICAgICAgICAgICAgICAgIHZhbHVlIHw9IG1hc2s7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdmFsdWUgJj0gfm1hc2s7CisgICAgICAg
ICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgdWludCBvcGVyYXRvci5sZW5n
dGgoaW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMzI7CisgICAgICAgIH0KKyAg
ICAgICAgdWludCBvcGVyYXRvci5sZW5ndGgodWludCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIDMyOworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0SW50U2V0Qml0MygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBmb287CisgICAgICAgICAgICBmb29bM10gPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIGZvbzsKKyAgICAgICAgfQorICAgICAgICBib29sIHRlc3RJbnRT
ZXRHZXRCaXQ1KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGZvbzsKKyAgICAgICAgICAg
IGZvb1s1XSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZm9vWzVdOworICAgICAgICB9Cisg
ICAgICAgIGJvb2wgdGVzdEludEdldEJpdDEoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQg
Zm9vOworICAgICAgICAgICAgcmV0dXJuIGZvb1sxXTsKKyAgICAgICAgfQorICAgICAgICBpbnQg
dGVzdFVpbnRTdW1CaXRzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGZvbyA9IDQyOwor
ICAgICAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8
IGZvby5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChmb29baV0pCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdFVpbnRTd2FwQml0cygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBmb28gPSA0MjsKKyAgICAgICAgICAgIGZvciAodWludCBp
ID0gMDsgaSA8IGZvby5sZW5ndGggLyAyOyArK2kpIHsKKyAgICAgICAgICAgICAgICBib29sIHRt
cCA9IGZvb1tpXTsKKyAgICAgICAgICAgICAgICBmb29baV0gPSBmb29bZm9vLmxlbmd0aCAtIGkg
LSAxXTsKKyAgICAgICAgICAgICAgICBmb29bZm9vLmxlbmd0aCAtIGkgLSAxXSA9IHRtcDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAgICBgKTsK
KyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RJbnRTZXRC
aXQzIiwgW10sIFtdKSwgOCk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAidGVzdEludFNldEdldEJpdDUiLCBbXSwgW10pLCB0cnVlKTsKKyAgICBjaGVja0Jv
b2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0SW50R2V0Qml0MSIsIFtdLCBb
XSksIGZhbHNlKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
InRlc3RVaW50U3VtQml0cyIsIFtdLCBbXSksIDMpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFVpbnRTd2FwQml0cyIsIFtdLCBbXSksIDE0MDkyODYx
NDQpOworfQorCiBsZXQgZmlsdGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcgYnkgZGVmYXVs
dAogaWYgKHRoaXNbImFyZ3VtZW50cyJdKSB7CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1
bWVudHMubGVuZ3RoOyBpKyspIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1R5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlw
ZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQCBjbGFzcyBUeXBlIGV4dGVu
ZHMgTm9kZSB7CiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBUeXBlOyB9CiAgICAgZ2V0IGlzUHRy
KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNBcnJheVJlZigpIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgZ2V0IGlzUmVmKCkgeyByZXR1cm4gdGhpcy5pc1B0ciB8fCB0aGlzLmlzQXJyYXlS
ZWY7IH0KICAgICBnZXQgaXNOdW1iZXIoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGdldCBpc0lu
dCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzRmxvYXQoKSB7IHJldHVybiBmYWxzZTsg
fQpAQCAtNDEsNSArNDIsMTkgQEAgY2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewogICAgIH0KICAg
ICAKICAgICBnZXQgaW5zdGFudGlhdGVkVHlwZSgpIHsgcmV0dXJuIHRoaXMudmlzaXQobmV3IElu
c3RhbnRpYXRlSW1tZWRpYXRlcygpKTsgfQorICAgIAorICAgIC8vIEhhdmUgdG8gY2FsbCB0aGVz
ZSBvbiB0aGUgdW5pZnlOb2RlLgorICAgIGFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQob3JpZ2luLCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgTWFrZVB0ckV4cHJlc3Npb24ob3JpZ2lu
LCB2YWx1ZSk7CisgICAgfQorICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUHRyVHlwZShvcmlnaW4sICJ0aHJlYWQiLCB0aGlz
KTsKKyAgICB9CisgICAgcmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChvcmlnaW4pCisgICAgewor
ICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiQnktcG9p
bnRlciBvdmVybG9hZCByZXR1cm5lZCBub24tcG9pbnRlciB0eXBlOiAiICsgdGhpcyk7CisgICAg
fQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUGFyYW1ldGVy
UmV3cml0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VHlwZVBhcmFtZXRlclJld3JpdGVyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFR5cGVQYXJhbWV0ZXJSZXdyaXRlciB7CisgICAg
dmlzaXRDb25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIobm9kZS5vcmlnaW4sIG5vZGUubmFtZSwgbm9kZS50
eXBlLnZpc2l0KG5ldyBSZXdyaXRlcigpKSk7CisgICAgfQorICAgIAorICAgIHZpc2l0VHlwZVZh
cmlhYmxlKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZShub2Rl
Lm9yaWdpbiwgbm9kZS5uYW1lLCBub2RlLnByb3RvY29sKTsKKyAgICB9Cit9CisKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVWYXJpYWJsZVRyYWNrZXIuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlVHJhY2tl
ci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBl
VmFyaWFibGVUcmFja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Y2xhc3MgVHlwZVZhcmlhYmxlVHJhY2tlciBleHRlbmRzIFZpc2l0b3IgeworICAgIGNvbnN0cnVj
dG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuX3NldCA9IG5ldyBT
ZXQoKTsKKyAgICB9CisgICAgCisgICAgZ2V0IHNldCgpIHsgcmV0dXJuIHRoaXMuX3NldDsgfQor
ICAgIAorICAgIF9jb25zaWRlcih0aGluZykKKyAgICB7CisgICAgICAgIGlmICh0aGluZy5pc1Vu
aWZpYWJsZSkKKyAgICAgICAgICAgIHRoaXMuX3NldC5hZGQodGhpbmcpOworICAgIH0KKyAgICAK
KyAgICB2aXNpdFR5cGVSZWYobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2NvbnNpZGVyKG5v
ZGUudHlwZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKKyAgICB7
CisgICAgICAgIHRoaXMuX2NvbnNpZGVyKHRoaXMudmFyaWFibGUpOworICAgIH0KK30KKwpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhbHVlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw1ICsyOCwxNCBAQCBjbGFzcyBWYWx1ZSBleHRlbmRzIE5vZGUgewogICAgIGdldCBr
aW5kKCkgeyByZXR1cm4gVmFsdWU7IH0KICAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJldHVybiBm
YWxzZTsgfQogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCisgICAg
YmVjb21lKG90aGVyVmFsdWUpCisgICAgeworICAgICAgICAvLyBOT1RFOiBNYWtlIHN1cmUgdGhh
dCBJZGVudGl0eUV4cHJlc3Npb24gaW1wbGVtZW50cyB1bmlmeU5vZGUgYW5kIGFsbCB0aGF0Cisg
ICAgICAgIGxldCBvcmlnaW4gPSB0aGlzLm9yaWdpbjsKKyAgICAgICAgdGhpcy5fX3Byb3RvX18g
PSBJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlOworICAgICAgICB0aGlzLl9vcmlnaW4gPSBv
cmlnaW47CisgICAgICAgIHRoaXMuX3RhcmdldCA9IG90aGVyVmFsdWU7CisgICAgfQogfQogCklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZVJlZi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZVJlZi5qcwkocmV2
aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVS
ZWYuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSw5IEBAIGNsYXNzIFZhcmlhYmxlUmVm
IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgICAgCiAgICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlz
Ll9uYW1lOyB9CiAgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZS5p
c0NvbnN0ZXhwcjsgfQotICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxl
LnVuaWZ5Tm9kZTsgfQorICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxl
LnVuaWZ5Tm9kZTsgfSAvLyBUaGlzIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB0aGlzIGlzIGEgY29u
c3RleHByLgogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBnZXQgYWRk
cmVzc1NwYWNlKCkgeyByZXR1cm4gInRocmVhZCI7IH0KLSAgICBnZXQgdW5pZnlOb2RlKCkgeyBy
ZXR1cm4gdGhpcy52YXJpYWJsZTsgfQogICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDEyICsyNCw3IEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotY2xhc3MgVmlz
aXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKLSAgICBjb25zdHJ1Y3RvcigpCi0gICAgewotICAg
ICAgICBzdXBlcigpOwotICAgIH0KLSAgICAKK2NsYXNzIFZpc2l0b3IgewogICAgIHZpc2l0UHJv
Z3JhbShub2RlKQogICAgIHsKICAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9w
TGV2ZWxTdGF0ZW1lbnRzKQpAQCAtNjgsOCArNjMsOCBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMg
VmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKG5vZGUpCiAg
ICAgewotICAgICAgICBub2RlLmZ1bmMudmlzaXQodGhpcyk7CiAgICAgICAgIHRoaXMudmlzaXRG
dW5jKG5vZGUpOworICAgICAgICBub2RlLmZ1bmMudmlzaXRJbXBsZW1lbnRhdGlvbkRhdGEobm9k
ZS5pbXBsZW1lbnRhdGlvbkRhdGEsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdEJsb2Nr
KG5vZGUpCkBAIC0xMDAsOCArOTUsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJh
c2UgewogICAgIHsKICAgICAgICAgZm9yIChsZXQgdHlwZUFyZ3VtZW50IG9mIG5vZGUudHlwZUFy
Z3VtZW50cykKICAgICAgICAgICAgIHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKTsKLSAgICAgICAg
aWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKKyAgICAg
ICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdE5h
dGl2ZVR5cGUobm9kZSkKQEAgLTEzNCw4ICsxMjgsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMg
VmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0VHlwZVZhcmlhYmxlKG5vZGUpCiAgICAgewot
ICAgICAgICBpZiAobm9kZS5wcm90b2NvbCkKLSAgICAgICAgICAgIG5vZGUucHJvdG9jb2wudmlz
aXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5wcm90b2NvbCwgdGhpcyk7CiAgICAg
fQogICAgIAogICAgIHZpc2l0Q29uc3RleHByVHlwZVBhcmFtZXRlcihub2RlKQpAQCAtMTc3LDE0
ICsxNzAsMjMgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNp
dFZhcmlhYmxlRGVjbChub2RlKQogICAgIHsKICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMp
OwotICAgICAgICBpZiAobm9kZS5pbml0aWFsaXplcikKLSAgICAgICAgICAgIG5vZGUuaW5pdGlh
bGl6ZXIudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbml0aWFsaXplciwg
dGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0QXNzaWdubWVudChub2RlKQogICAgIHsKICAg
ICAgICAgbm9kZS5saHMudmlzaXQodGhpcyk7CiAgICAgICAgIG5vZGUucmhzLnZpc2l0KHRoaXMp
OworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CisgICAgfQorICAgIAorICAg
IHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbm9k
ZS5sVmFsdWUudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUub2xkVmFsdWVWYXIudmlzaXQodGhp
cyk7CisgICAgICAgIG5vZGUubmV3VmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUu
bmV3VmFsdWVFeHAudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUucmVzdWx0RXhwLnZpc2l0KHRo
aXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQpA
QCAtMTkyLDExICsxOTQsMjcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
ICAgICAgICAgbm9kZS5wdHIudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAorICAgIF9oYW5kbGVQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIE5vZGUudmlzaXQo
bm9kZS5iYXNlVHlwZSwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5jYWxsRm9yR2V0
LCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JHZXQsIHRoaXMp
OworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvckFuZCwgdGhpcyk7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlRm9yQW5kLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNp
dChub2RlLmNhbGxGb3JTZXQsIHRoaXMpOworICAgIH0KKyAgICAKICAgICB2aXNpdERvdEV4cHJl
c3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpOwotICAg
ICAgICBpZiAobm9kZS5zdHJ1Y3RUeXBlKQotICAgICAgICAgICAgbm9kZS5zdHJ1Y3RUeXBlLnZp
c2l0KHRoaXMpOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24o
bm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAg
eworICAgICAgICBub2RlLmFycmF5LnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLmluZGV4LnZp
c2l0KHRoaXMpOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24o
bm9kZSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKQEAg
LTIwNyw4ICsyMjUsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAg
IHZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbm9kZS5s
VmFsdWUudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLm51bUVsZW1lbnRzKQotICAgICAg
ICAgICAgbm9kZS5udW1FbGVtZW50cy52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChu
b2RlLm51bUVsZW1lbnRzLCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRDb252ZXJ0UHRy
VG9BcnJheVJlZkV4cHJlc3Npb24obm9kZSkKQEAgLTIyNCw4ICsyNDEsNyBAQCBjbGFzcyBWaXNp
dG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHsKICAgICAgICAgbm9kZS5jb25kaXRpb25h
bC52aXNpdCh0aGlzKTsKICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwotICAgICAgICBp
ZiAobm9kZS5lbHNlQm9keSkKLSAgICAgICAgICAgIG5vZGUuZWxzZUJvZHkudmlzaXQodGhpcyk7
CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5lbHNlQm9keSwgdGhpcyk7CiAgICAgfQogICAgIAog
ICAgIHZpc2l0V2hpbGVMb29wKG5vZGUpCkBAIC0yNDIsMTkgKzI1OCwxNSBAQCBjbGFzcyBWaXNp
dG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0Rm9yTG9vcChub2RlKQog
ICAgIHsKLSAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6YXRpb24pCi0gICAgICAgICAgICBub2Rl
LmluaXRpYWxpemF0aW9uLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5jb25kaXRpb24p
Ci0gICAgICAgICAgICBub2RlLmNvbmRpdGlvbi52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5v
ZGUuaW5jcmVtZW50KQotICAgICAgICAgICAgbm9kZS5pbmNyZW1lbnQudmlzaXQodGhpcyk7Cisg
ICAgICAgIE5vZGUudmlzaXQobm9kZS5pbml0aWFsaXphdGlvbiwgdGhpcyk7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS5jb25kaXRpb24sIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUu
aW5jcmVtZW50LCB0aGlzKTsKICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgIH0K
IAogICAgIHZpc2l0UmV0dXJuKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS52YWx1ZSkK
LSAgICAgICAgICAgIG5vZGUudmFsdWUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQo
bm9kZS52YWx1ZSwgdGhpcyk7CiAgICAgfQogCiAgICAgdmlzaXRDb250aW51ZShub2RlKQpAQCAt
MjcyLDggKzI4NCw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAg
CiAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChu
b2RlLnR5cGUpCi0gICAgICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgbm9kZS5wcmVmZXJyZWRUeXBlLnZp
c2l0KHRoaXMpOwogICAgIH0KICAgICAKQEAgLTI4OCw4ICsyOTksNyBAQCBjbGFzcyBWaXNpdG9y
IGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0TnVsbFR5cGUobm9kZSkKICAg
ICB7Ci0gICAgICAgIGlmIChub2RlLnR5cGUpCi0gICAgICAgICAgICBub2RlLnR5cGUudmlzaXQo
dGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAgICB9CiAgICAg
CiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQpAQCAtMjk3LDE2ICszMDcsMTUgQEAgY2xh
c3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgZm9yIChsZXQgdHlwZUFy
Z3VtZW50IG9mIG5vZGUudHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgIHR5cGVBcmd1bWVudC52
aXNpdCh0aGlzKTsKICAgICAgICAgZm9yIChsZXQgYXJndW1lbnQgb2Ygbm9kZS5hcmd1bWVudExp
c3QpCi0gICAgICAgICAgICBhcmd1bWVudC52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIE5vZGUu
dmlzaXQoYXJndW1lbnQsIHRoaXMpOwogICAgICAgICBsZXQgYWN0dWFsVHlwZUFyZ3VtZW50cyA9
IG5vZGUuYWN0dWFsVHlwZUFyZ3VtZW50czsKICAgICAgICAgaWYgKGFjdHVhbFR5cGVBcmd1bWVu
dHMpIHsKICAgICAgICAgICAgIGZvciAobGV0IGFyZ3VtZW50IG9mIGFjdHVhbFR5cGVBcmd1bWVu
dHMpCiAgICAgICAgICAgICAgICAgYXJndW1lbnQudmlzaXQodGhpcyk7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKLSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52
aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUucmVzdWx0VHlwZSkKLSAgICAgICAgICAgIG5v
ZGUucmVzdWx0VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLm5hdGl2
ZUZ1bmNJbnN0YW5jZSwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXR1cm5UeXBl
LCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGUsIHRoaXMpOwogICAg
IH0KICAgICAKICAgICB2aXNpdExvZ2ljYWxOb3Qobm9kZSkKQEAgLTMxNiwyMSArMzI1LDIzIEBA
IGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRGdW5j
dGlvbkxpa2VCbG9jayhub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkK
LSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52
aXNpdChub2RlLnJldHVyblR5cGUsIHRoaXMpOwogICAgICAgICBmb3IgKGxldCBhcmd1bWVudCBv
ZiBub2RlLmFyZ3VtZW50TGlzdCkKICAgICAgICAgICAgIGFyZ3VtZW50LnZpc2l0KHRoaXMpOwog
ICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2Ygbm9kZS5wYXJhbWV0ZXJzKQogICAgICAgICAg
ICAgcGFyYW1ldGVyLnZpc2l0KHRoaXMpOwogICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7
Ci0gICAgICAgIGlmIChub2RlLnJlc3VsdFR5cGUpCi0gICAgICAgICAgICBub2RlLnJlc3VsdFR5
cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlLCB0aGlz
KTsKICAgICB9CiAgICAgCi0gICAgdmlzaXRMZXRFeHByZXNzaW9uKG5vZGUpCisgICAgdmlzaXRB
bm9ueW1vdXNWYXJpYWJsZShub2RlKQogICAgIHsKLSAgICAgICAgbm9kZS5hcmd1bWVudC52aXNp
dCh0aGlzKTsKLSAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZp
c2l0KG5vZGUudHlwZSwgdGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0SWRlbnRpdHlFeHBy
ZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnRhcmdldC52aXNpdCh0aGlzKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JC
YXNlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9WaXNpdG9yQmFzZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xh
c3MgVmlzaXRvckJhc2UgewotICAgIGNvbnN0cnVjdG9yKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X21lbW9UYWJsZSA9IG5ldyBNYXAoKTsKLSAgICB9Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321052</attachid>
            <date>2017-09-17 13:15:04 -0700</date>
            <delta_ts>2017-09-17 14:02:17 -0700</delta_ts>
            <desc>more tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>167358</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjEzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5OCBAQAorMjAxNy0wOS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEZpZ3VyZSBvdXQgaG93IFdTTCB3aWxsIHN1cHBvcnQgZmllbGQgb3ZlcmxvYWRz
IGxpa2UgZmxvYXQ0Lnh6IGFuZCBmcmllbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdTTCBuZWVkcyB0byBzdXBwb3J0IGdldHRlcnMg
YW5kIHNldHRlcnMsIHNvIHRoYXQgd2UgY2FuIGRvIHRoaW5ncyBsaWtlOgorICAgICAgICAKKyAg
ICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAgICB2ZWMuenggPSBmbG9hdDIoMSwgMik7
CisgICAgICAgICAgICAvLyB6ID0gMSwgeCA9IDIKKyAgICAgICAgCisgICAgICAgIFRoZXJlJ3Mg
bm8gd2F5IHRvIGV4cHJlc3MgdGhpcyBmbG9hdDQuenggcmV0dXJuaW5nIGEgcG9pbnRlciB0byBz
b21ldGhpbmcsIHNpbmNlIGl0J3MgZG9pbmcgc3dpenpsaW5nLgorICAgICAgICBJdCBjb3VsZCBy
ZXR1cm4gYSBjcmF6eSBzbWFydCBwb2ludGVyLCBidXQgdGhhdCBzb3VuZHMgbGlrZSBhIGxvdCBv
ZiB3b3JrLiBTbywgSSBkZWNpZGVkIHRvIGdvIGZvcgorICAgICAgICBsdmFsdWUgZW11bGF0aW9u
IGluc3RlYWQuCisgICAgICAgIAorICAgICAgICBUaGUgaWRlYSBvZiBsdmFsdWUgZW11bGF0aW9u
IGlzIHRoYXQgd2hlbiB3ZSB0cnkgdG8gbWFrZSBhbiBsdmFsdWUgd29yayBmb3IgYW4gYXNzaWdu
bWVudCBvciBSTVcKKyAgICAgICAgb3BlcmF0aW9uIChsaWtlICs9IGFuZCBmcmllbmRzKSwgd2Ug
Y29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgd2UgaGF2ZSB0byBmaXJzdCBsb2FkIHRoZSB2
YWx1ZSB1c2luZworICAgICAgICBhIGdldHRlciBhbmQgdGhlbiBzdG9yZSBpdCB3aXRoIGEgc2V0
dGVyLiBUaGlzIHBhdGNoIG1ha2VzIHRoaXMgd29yayByZWN1cnNpdmVseSwgc28gdGhhdCB0aGlz
IHdpbGwKKyAgICAgICAgd29yazoKKyAgICAgICAgCisgICAgICAgICAgICBmbG9hdDQgdmVjOwor
ICAgICAgICAgICAgdmVjLnp3eC55ID0gNDI7CisgICAgICAgICAgICAvLyBub3cgdyBpcyA0Mgor
ICAgICAgICAKKyAgICAgICAgVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRlY29tcG9zZSBpdCBhdXRv
bWF0aWNhbGx5OgorICAgICAgICAKKyAgICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAg
ICBmbG9hdDMgdG1wID0gdmVjLnp3eDsKKyAgICAgICAgICAgIHRtcC55ID0gNDI7CisgICAgICAg
ICAgICB2ZWMuend4ID0gdG1wOworICAgICAgICAKKyAgICAgICAgVGhpcydsbCB3b3JrIHRvIGFu
eSBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIFRvIGNoZWNrIGlmIHRoaXMgd29ya3MsIHRoaXMg
cGF0Y2ggYWRkcyB0d28gc3Vic3RhbnRpYWwgbmV3IHRlc3RzIGNhbGxlZCBURVNUX2dlbmVyaWNB
Y2Nlc3NvcnMoKSBhbmQKKyAgICAgICAgVEVTVF9iaXRTdWJzY3JpcHRBY2Nlc3NvcigpLiBUaGlz
IHRlc3RzIHRoYXQgdGhpcyBzdHVmZiB3b3JrcyB3aXRoIGEgbG90IG9mIGdlbmVyaWMgdHlwZXMs
IGFuZCB0aGF0IGl0J3MKKyAgICAgICAgcG9zc2libGUgdG8gdHVybiBpbnRlZ2VycyBpbnRvIGJp
dHZlY3RvcnMgdXNpbmcgc3Vic2NyaXB0IG92ZXJsb2FkaW5nLiBUaGlzIHBhdGNoIGFsc28gYWRk
cyBzbWFsbGVyIHVuaXQKKyAgICAgICAgdGVzdHMgYWxzby4KKyAgICAgICAgCisgICAgICAgIE9o
LCBhbmQgaXQncyBub3cgcG9zc2libGUgdG8gZ2V0IGFuIGFycmF5J3MgbGVuZ3RoLgorCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzOgorICAgICAgICAo
bmVlZHNQcmltaXRpdmVQcm90b2NvbCk6CisgICAgICAgIChwcm90b2NvbFN1ZmZpeCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKEFu
b255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5n
ZXQgb3JpZ2luKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5nZXQgbmFt
ZSk6CisgICAgICAgIChBbm9ueW1vdXNWYXJpYWJsZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qczoKKyAgICAgICAg
KEFycmF5UmVmVHlwZS5wcm90b3R5cGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZCk6CisgICAgICAg
IChBcnJheVJlZlR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanM6CisgICAgICAgIChB
cnJheVR5cGUucHJvdG90eXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQpOgorICAgICAgICAoQXJy
YXlUeXBlLnByb3RvdHlwZS5hcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCk6CisgICAgICAgIChB
cnJheVR5cGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQu
anM6CisgICAgICAgIChBc3NpZ25tZW50KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DYWxsQXNzaWdubWVudC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9uLnJl
c29sdmUpOgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmUpOgorICAg
ICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmVUb092ZXJsb2FkKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzOgorICAgICAgICAoQ2hlY2tl
ci5wcm90b3R5cGUudmlzaXRQcm9ncmFtKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZp
c2l0RnVuY0RlZik6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmMp
OgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KENoZWNrZXIucHJvdG90eXBlLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0RG90RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVja2VyLnBy
b3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9uKToKKyAgICAgICAgKENoZWNrZXIpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxl
LnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOiBEZWxldGVkLgorICAgICAgICAoQ2hlY2tlci5wcm90
b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxlLnByb3RvdHlwZS52aXNp
dFZhcmlhYmxlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0
UHJvdG9jb2xEZWNsLk5vdGljZVR5cGVWYXJpYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdFByb3RvY29sRGVjbC5zZXQgdGhyb3cpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qczoKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzOgorICAgICAgICAo
RG90RXhwcmVzc2lvbik6CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc3Ry
dWN0KToKKyAgICAgICAgKERvdEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBnZXRGdW5jTmFtZSk6
CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoRG90RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHNldEZ1bmNOYW1lKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzOgorICAgICAgICAoRUJ1ZmZlckJ1aWxk
ZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAoRUJ1ZmZlckJ1
aWxkZXIucHJvdG90eXBlLnZpc2l0TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAgICAgICAoRXZhbHVhdG9y
LnByb3RvdHlwZS52aXNpdElkZW50aXR5RXhwcmVzc2lvbik6CisgICAgICAgIChFdmFsdWF0b3Iu
cHJvdG90eXBlLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoRXZhbHVhdG9yLnBy
b3RvdHlwZS52aXNpdEFub255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEV2YWx1YXRvci5wcm90
b3R5cGUudmlzaXREb3RFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEV2YWx1YXRvci5w
cm90b3R5cGUudmlzaXRMZXRFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzOgorICAgICAgICAoRXhwcmVzc2lv
bkZpbmRlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzOgorICAgICAgICAo
Rm9yTG9vcC5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoRm9yTG9vcCk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanM6CisgICAg
ICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1
YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRDYWxsRXhwcmVzc2lvbik6CisgICAgICAgIChGdW5j
SW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1YnN0aXR1dGlv
bik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9y
LnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGUucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVu
Yyk6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUpOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlKToK
KyAgICAgICAgKEZ1bmNJbnN0YW50aWF0b3IpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qczogQWRkZWQuCisgICAgICAgIChJZGVudGl0eUV4
cHJlc3Npb24pOgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgdGFy
Z2V0KToKKyAgICAgICAgKElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0NvbnN0ZXhw
cik6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1ZSk6
CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJv
dG90eXBlLmdldCBhcnJheSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdl
dCBpbmRleCk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1
ZSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgZ2V0RnVuY05hbWUpOgor
ICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc2V0RnVuY05hbWUpOgorICAgICAg
ICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanM6CisgICAgICAgIChpbmZlclR5
cGVzRm9yQ2FsbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpz
OgorICAgICAgICAoX2lubGluZUZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzOgorICAgICAgICAoSW5saW5lci5wcm90b3R5cGUudmlzaXRDYWxs
RXhwcmVzc2lvbik6CisgICAgICAgIChJbmxpbmVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Np
b24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNp
Y3MuanM6CisgICAgICAgIChJbnRyaW5zaWNzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanM6CisgICAgICAgIChNYWtlQXJy
YXlSZWZFeHByZXNzaW9uLnByb3RvdHlwZS5iZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJl
c3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVD
b250ZXh0LmpzOgorICAgICAgICAoTmFtZUNvbnRleHQpOgorICAgICAgICAoTmFtZUNvbnRleHQu
cHJvdG90eXBlLmFkZCk6CisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZG9TdGF0ZW1l
bnQpOgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmhhbmRsZURlZmluaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKE5hbWVDb250ZXh0LnByb3RvdHlwZS5pc0RlZmluZWQpOiBEZWxldGVk
LgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmRlZmluZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZGVmaW5lQWxsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanM6CisgICAgICAgIChOYW1l
UmVzb2x2ZXIucHJvdG90eXBlLmRvU3RhdGVtZW50KToKKyAgICAgICAgKE5hbWVSZXNvbHZlci5w
cm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAgICAoTmFtZVJlc29sdmVyLnByb3Rv
dHlwZS52aXNpdFByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL05hdGl2ZUZ1bmMuanM6CisgICAgICAgIChOYXRpdmVGdW5jKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanM6CisgICAgICAgIChO
YXRpdmVGdW5jSW5zdGFuY2UpOgorICAgICAgICAoTmF0aXZlRnVuY0luc3RhbmNlLnByb3RvdHlw
ZS5nZXQgaW1wbGVtZW50YXRpb25EYXRhKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob2RlLmpzOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUudmlzaXQpOgorICAgICAgICAo
Tm9kZS52aXNpdCk6CisgICAgICAgIChOb2RlLnVuaWZ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0RG90
RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLnByb3RvdHlw
ZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAg
ICAgKGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KToKKyAgICAgICAgKHBhcnNlUG9zc2libGVT
dWZmaXgpOgorICAgICAgICAoZmluaXNoUGFyc2luZ1ByZUluY3JlbWVudCk6CisgICAgICAgIChn
ZW5lcmljUGFyc2VDb21tYUV4cHJlc3Npb24pOgorICAgICAgICAocGFyc2VGdW5jTmFtZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qczoKKyAgICAgICAgKHBy
ZXBhcmUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanM6Cisg
ICAgICAgIChQcm9ncmFtKToKKyAgICAgICAgKFByb2dyYW0ucHJvdG90eXBlLmdldCBnbG9iYWxO
YW1lQ29udGV4dCk6CisgICAgICAgIChQcm9ncmFtLnByb3RvdHlwZS5hZGQpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qczogQWRk
ZWQuCisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgcmVzdWx0VHlwZSk6CisgICAgICAgIChQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90eXBlLnJld3JpdGVBZnRlckNsb25pbmcpOgor
ICAgICAgICAoUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS51cGRhdGVDYWxsc0Fm
dGVyQ2hhbmdpbmdCYXNlKToKKyAgICAgICAgKFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wcm90
b3R5cGUuZW1pdEdldCk6CisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90
eXBlLmVtaXRTZXQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5
UmVzb2x2ZXIuanM6IEFkZGVkLgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUu
X3Zpc2l0UHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5
cGUudmlzaXREb3RFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJvdG90
eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJv
dG90eXBlLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZl
ci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFBy
b3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0QXNzaWdubWVudCk6CisgICAgICAgIChQcm9w
ZXJ0eVJlc29sdmVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVydHlS
ZXNvbHZlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KFByb3BlcnR5UmVzb2x2ZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0
clR5cGUuanM6CisgICAgICAgIChQdHJUeXBlLnByb3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLnJldHVyblR5cGVGcm9tQW5kT3Zlcmxv
YWQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24uanM6IEFkZGVkLgorICAgICAgICAoUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbik6
CisgICAgICAgIChSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgbFZhbHVl
KToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm9sZFZhbHVl
UmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm5ld1Zh
bHVlUmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLnRv
U3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMu
anM6CisgICAgICAgIChjcmVhdGVOYW1lUmVzb2x2ZXIpOgorICAgICAgICAocmVzb2x2ZU5hbWVz
SW5UeXBlcyk6CisgICAgICAgIChyZXNvbHZlTmFtZXNJblByb3RvY29scyk6CisgICAgICAgIChy
ZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlTmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwu
anM6CisgICAgICAgIChyZXNvbHZlT3ZlcmxvYWRJbXBsKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qczogQWRkZWQuCisgICAgICAgIChyZXNv
bHZlUHJvcGVydGllcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2
ZVR5cGVEZWZzLmpzOgorICAgICAgICAocmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyk6CisgICAgICAg
IChyZXNvbHZlVHlwZURlZnNJblByb3RvY29scyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnNJ
bkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnMpOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanM6CisgICAgICAgIChS
ZXR1cm5DaGVja2VyLnByb3RvdHlwZS5faXNCb29sQ2FzdEZyb21MaXRlcmFsVHJ1ZSk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanM6CisgICAgICAgIChSZXdy
aXRlcik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgor
ICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJlZik6CisgICAgICAgIChSZXdy
aXRlci5wcm90b3R5cGUudmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVy
LnByb3RvdHlwZS5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKToKKyAgICAgICAgKFJl
d3JpdGVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJldHVybik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRHZW5l
cmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0TnVsbFR5
cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnByb2Nlc3NEZXJpdmVkQ2FsbERhdGEp
OgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgorICAg
ICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0RnVuY3Rpb25MaWtlQmxvY2spOgorICAgICAg
ICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0SWZTdGF0ZW1lbnQpOgorICAgICAgICAoUmV3cml0
ZXIucHJvdG90eXBlLnZpc2l0Rm9yTG9vcCk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUu
dmlzaXRBbm9ueW1vdXNWYXJpYWJsZSk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0
TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RhbmRhcmRMaWJyYXJ5LmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0cnVjdExheW91dEJ1aWxkZXIuanM6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRCdWlsZGVyLnBy
b3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmNJbnN0YW5jZSk6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRC
dWlsZGVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpz
OgorICAgICAgICAoU3RydWN0VHlwZS5wcm90b3R5cGUuaW5zdGFudGlhdGUpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qczoKKyAgICAgICAgKFN1YnN0
aXR1dGlvbi5wcm90b3R5cGUuZ2V0IG1hcCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanM6IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qczogQWRkZWQuCisg
ICAgICAgIChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmNyZWF0ZVR5cGVQYXJhbWV0ZXJzKToK
KyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuKToKKyAgICAgICAgKHN5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlRmllbGRUeXBlKToKKyAgICAgICAgKHN5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlVHlwZVJlZik6CisgICAgICAgIChzeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzLnNldHVwQW5kZXIpOgorICAgICAgICAoc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29y
cyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChjaGVja051bWJl
cik6CisgICAgICAgIChURVNUX3NpbXBsZVByb3RvY29sKToKKyAgICAgICAgKFRFU1RfYXNzaWdu
TGVuZ3RoKToKKyAgICAgICAgKFRFU1Rfc2ltcGxlU2V0dGVyKToKKyAgICAgICAgKFRFU1RfZ2Vu
ZXJpY0FjY2Vzc29ycyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5q
czoKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmdldCBpc1JlZik6CisgICAgICAgIChUeXBlLnBy
b3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBl
LmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLnJl
dHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQpOgorICAgICAgICAoVHlwZSk6CisgICAgICAgICogV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzOiBBZGRlZC4KKyAg
ICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlzaXRDb25zdGV4cHJUeXBl
UGFyYW1ldGVyKToKKyAgICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRUeXBlVmFyaWFibGUpOgorICAgICAgICAoVHlwZVBhcmFtZXRlclJld3JpdGVyKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFR5cGVWYXJpYWJsZVRyYWNrZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1ZhbHVlLmpzOgorICAgICAgICAoVmFsdWUucHJvdG90eXBlLmJlY29tZSk6
CisgICAgICAgIChWYWx1ZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFy
aWFibGVSZWYuanM6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IGFkZHJlc3NTcGFjZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZp
c2l0b3IucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKToKKyAgICAgICAgKFZpc2l0
b3IucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xEZWNsKToKKyAgICAgICAgKFZpc2l0b3IpOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzOiBS
ZW1vdmVkLgorCiAyMDE3LTA5LTE2ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCB0aGUgVG9vbHMgYnVpbGQgd2l0aCBDTWFrZSBvbiBtYWNPUwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5qcwko
cmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVz
c1NwYWNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxNiBAQCBmdW5jdGlvbiBpc0Fk
ZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCiAgICAgfQogfQogCitmdW5jdGlvbiBuZWVkc1ByaW1p
dGl2ZVByb3RvY29sKGFkZHJlc3NTcGFjZSkKK3sKKyAgICByZXR1cm4gYWRkcmVzc1NwYWNlICE9
ICJ0aHJlYWQiOworfQorCitmdW5jdGlvbiBwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpCit7
CisgICAgcmV0dXJuIG5lZWRzUHJpbWl0aXZlUHJvdG9jb2woYWRkcmVzc1NwYWNlKSA/ICI6cHJp
bWl0aXZlIiA6ICIiOworfQorCiBmdW5jdGlvbiB2YWxpZGF0ZUFkZHJlc3NTcGFjZShhZGRyZXNz
U3BhY2UpCiB7CiAgICAgaWYgKCFpc0FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpKQpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MyArMjksMTQgQEAgbG9hZCgiVHlwZS5qcyIpOwogbG9hZCgiUmVmZXJlbmNlVHlwZS5qcyIpOwog
bG9hZCgiVmFsdWUuanMiKTsKIGxvYWQoIkV4cHJlc3Npb24uanMiKTsKLWxvYWQoIlZpc2l0b3JC
YXNlLmpzIik7CiBsb2FkKCJSZXdyaXRlci5qcyIpOwogbG9hZCgiVmlzaXRvci5qcyIpOwogbG9h
ZCgiQ3JlYXRlTGl0ZXJhbC5qcyIpOwogbG9hZCgiQ3JlYXRlTGl0ZXJhbFR5cGUuanMiKTsKK2xv
YWQoIlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcyIpOwogCiBsb2FkKCJBZGRyZXNzU3BhY2Uu
anMiKTsKK2xvYWQoIkFub255bW91c1ZhcmlhYmxlLmpzIik7CiBsb2FkKCJBcnJheVJlZlR5cGUu
anMiKTsKIGxvYWQoIkFycmF5VHlwZS5qcyIpOwogbG9hZCgiQXNzaWdubWVudC5qcyIpOwpAQCAt
NDMsNyArNDQsNiBAQCBsb2FkKCJBdXRvV3JhcHBlci5qcyIpOwogbG9hZCgiQmxvY2suanMiKTsK
IGxvYWQoIkJvb2xMaXRlcmFsLmpzIik7CiBsb2FkKCJCcmVhay5qcyIpOwotbG9hZCgiQ2FsbEFz
c2lnbm1lbnQuanMiKTsKIGxvYWQoIkNhbGxFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJDYWxsRnVu
Y3Rpb24uanMiKTsKIGxvYWQoIkNoZWNrLmpzIik7CkBAIC02OSw2ICs2OSw3IEBAIGxvYWQoIkV2
YWx1YXRpb25Db21tb24uanMiKTsKIGxvYWQoIkV2YWx1YXRvci5qcyIpOwogbG9hZCgiRXhwcmVz
c2lvbkZpbmRlci5qcyIpOwogbG9hZCgiRmllbGQuanMiKTsKK2xvYWQoIkZpbmRIaWdoWm9tYmll
cy5qcyIpOwogbG9hZCgiRmxhdHRlblByb3RvY29sRXh0ZW5kcy5qcyIpOwogbG9hZCgiRm9yTG9v
cC5qcyIpOwogbG9hZCgiRnVuYy5qcyIpOwpAQCAtNzYsNyArNzcsMTAgQEAgbG9hZCgiRnVuY0Rl
Zi5qcyIpOwogbG9hZCgiRnVuY0luc3RhbnRpYXRvci5qcyIpOwogbG9hZCgiRnVuY1BhcmFtZXRl
ci5qcyIpOwogbG9hZCgiRnVuY3Rpb25MaWtlQmxvY2suanMiKTsKK2xvYWQoIkhpZ2hab21iaWVG
aW5kZXIuanMiKTsKK2xvYWQoIklkZW50aXR5RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiSWZTdGF0
ZW1lbnQuanMiKTsKK2xvYWQoIkluZGV4RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiSW5mZXJUeXBl
c0ZvckNhbGwuanMiKTsKIGxvYWQoIklubGluZS5qcyIpOwogbG9hZCgiSW5saW5lci5qcyIpOwpA
QCAtODQsNyArODgsNiBAQCBsb2FkKCJJbnN0YW50aWF0ZUltbWVkaWF0ZXMuanMiKTsKIGxvYWQo
IkludExpdGVyYWwuanMiKTsKIGxvYWQoIkludExpdGVyYWxUeXBlLmpzIik7CiBsb2FkKCJJbnRy
aW5zaWNzLmpzIik7Ci1sb2FkKCJMZXRFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJMZXhlci5qcyIp
OwogbG9hZCgiTGV4ZXJUb2tlbi5qcyIpOwogbG9hZCgiTGl0ZXJhbFR5cGVDaGVja2VyLmpzIik7
CkBAIC05OCwyMCArMTAxLDI0IEBAIGxvYWQoIk5hdGl2ZUZ1bmMuanMiKTsKIGxvYWQoIk5hdGl2
ZUZ1bmNJbnN0YW5jZS5qcyIpOwogbG9hZCgiTmF0aXZlVHlwZS5qcyIpOwogbG9hZCgiTmF0aXZl
VHlwZUluc3RhbmNlLmpzIik7Citsb2FkKCJOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzIik7
CiBsb2FkKCJOdWxsTGl0ZXJhbC5qcyIpOwogbG9hZCgiTnVsbFR5cGUuanMiKTsKIGxvYWQoIk92
ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiKTsKIGxvYWQoIlBhcnNlLmpzIik7CiBsb2FkKCJQ
cmVwYXJlLmpzIik7CiBsb2FkKCJQcm9ncmFtLmpzIik7Citsb2FkKCJQcm9wZXJ0eVJlc29sdmVy
LmpzIik7CiBsb2FkKCJQcm90b2NvbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xEZWNsLmpzIik7CiBs
b2FkKCJQcm90b2NvbEZ1bmNEZWNsLmpzIik7CiBsb2FkKCJQcm90b2NvbFJlZi5qcyIpOwogbG9h
ZCgiUHRyVHlwZS5qcyIpOworbG9hZCgiUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyIpOwog
bG9hZCgiUmVjdXJzaW9uQ2hlY2tlci5qcyIpOwogbG9hZCgiUmVzb2x2ZU5hbWVzLmpzIik7CiBs
b2FkKCJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIik7Citsb2FkKCJSZXNvbHZlUHJvcGVydGllcy5q
cyIpOwogbG9hZCgiUmVzb2x2ZVR5cGVEZWZzLmpzIik7CiBsb2FkKCJSZXR1cm4uanMiKTsKIGxv
YWQoIlJldHVybkNoZWNrZXIuanMiKTsKQEAgLTEyMCwxMiArMTI3LDE0IEBAIGxvYWQoIlN0YW5k
YXJkTGlicmFyeS5qcyIpOwogbG9hZCgiU3RydWN0TGF5b3V0QnVpbGRlci5qcyIpOwogbG9hZCgi
U3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vic3RpdHV0aW9uLmpzIik7Ci1sb2FkKCJTdWZmaXhD
YWxsQXNzaWdubWVudC5qcyIpOworbG9hZCgiU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyIp
OwogbG9hZCgiVHlwZURlZi5qcyIpOwogbG9hZCgiVHlwZURlZlJlc29sdmVyLmpzIik7CiBsb2Fk
KCJUeXBlT3JWYXJpYWJsZVJlZi5qcyIpOworbG9hZCgiVHlwZVBhcmFtZXRlclJld3JpdGVyLmpz
Iik7CiBsb2FkKCJUeXBlUmVmLmpzIik7CiBsb2FkKCJUeXBlVmFyaWFibGUuanMiKTsKK2xvYWQo
IlR5cGVWYXJpYWJsZVRyYWNrZXIuanMiKTsKIGxvYWQoIlR5cGVkVmFsdWUuanMiKTsKIGxvYWQo
IlVpbnRMaXRlcmFsLmpzIik7CiBsb2FkKCJVaW50TGl0ZXJhbFR5cGUuanMiKTsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpz
CShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91
c1ZhcmlhYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworbGV0IGFu
b255bW91c1ZhcmlhYmxlQ291bnQgPSAwOworCitjbGFzcyBBbm9ueW1vdXNWYXJpYWJsZSBleHRl
bmRzIFZhbHVlIHsKKyAgICAvLyBZb3UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSB2YXJpYWJsZSdz
IHZhbHVlIGJlZm9yZSB1c2UsIGJ1dCB0aGF0IGNvdWxkIGJlIHF1aXRlIGxhdGUuCisgICAgY29u
c3RydWN0b3Iob3JpZ2luLCB0eXBlID0gbnVsbCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7Cisg
ICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5pbmRleCA9IGFub255
bW91c1ZhcmlhYmxlQ291bnQrKzsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB9Cisg
ICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAgIGdldCBu
YW1lKCkgeyByZXR1cm4gImFub25WYXI8IiArIHRoaXMuaW5kZXggKyAiPiI7IH0KKyAgICAKKyAg
ICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5uYW1lOworICAgIH0KK30K
KwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5q
cwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJy
YXlSZWZUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxNSBAQCBjbGFzcyBBcnJh
eVJlZlR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlCiAgICAgCiAgICAgZ2V0IGlzQXJyYXlSZWYo
KSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2FkKG9yaWdpbiwg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICAgIGFyZ3VtZW50
VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1l
bnRUeXBlICsgIltdICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
NzMsNSArNzMsMTYgQEAgY2xhc3MgQXJyYXlUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQs
IG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CisKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2Fk
KG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE1ha2VBcnJh
eVJlZkV4cHJlc3Npb24ob3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5udW1FbGVtZW50
cyA9IHRoaXMubnVtRWxlbWVudHM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgQXJyYXlSZWZUeXBlKG9yaWdpbiwgInRocmVhZCIsIHRoaXMuZWxlbWVudFR5cGUpOwor
ICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVu
dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bc3NpZ25t
ZW50LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Bc3NpZ25tZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTIgQEAKICJ1c2Ug
c3RyaWN0IjsKIAogY2xhc3MgQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNv
bnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMpCisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBsaHMs
IHJocywgdHlwZSA9IG51bGwpCiAgICAgewogICAgICAgICBzdXBlcihvcmlnaW4pOwogICAgICAg
ICB0aGlzLl9saHMgPSBsaHM7CiAgICAgICAgIHRoaXMuX3JocyA9IHJoczsKKyAgICAgICAgdGhp
cy50eXBlID0gdHlwZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGxocygpIHsgcmV0dXJuIHRoaXMu
X2xoczsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFzc2lnbm1l
bnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFz
c2lnbm1lbnQuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVudCkKQEAgLTEsNDYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3Qi
OwotCi1jbGFzcyBDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNvbnN0
cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzLCByaHMpCi0gICAgewotICAgICAgICBzdXBlcihvcmln
aW4pOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fbGhzID0gbGhz
OwotICAgICAgICB0aGlzLl9yaHMgPSByaHM7Ci0gICAgICAgIHRoaXMuZnVuYyA9IG51bGw7Ci0g
ICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAgIGdl
dCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KLSAgICBnZXQgcmhzKCkgeyByZXR1cm4gdGhp
cy5fcmhzOyB9IC8vIFRoaXMgY2FuIGJlIG51bGwuCi0gICAgCi0gICAgdG9TdHJpbmcoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGhzICsgIiAiICsgdGhpcy5uYW1lICsgKHRoaXMucmhz
ID8gIj0gIiArIHRoaXMucmhzIDogIiIpOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsODIgQEAgY2xhc3MgQ2FsbEV4cHJlc3Npb24gZXh0
ZW5kcyBFeHByZXNzaW9uIAogICAgIGdldCBpc0Nhc3QoKSB7IHJldHVybiB0aGlzLl9pc0Nhc3Q7
IH0KICAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3JldHVyblR5cGU7IH0KICAg
ICAKLSAgICByZXNvbHZlKG92ZXJsb2FkKQorICAgIHN0YXRpYyByZXNvbHZlKG9yaWdpbiwgcG9z
c2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSwgbmFtZSwgdHlwZUFyZ3VtZW50
cywgYXJndW1lbnRMaXN0LCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQorICAgIHsKKyAgICAg
ICAgbGV0IGNhbGwgPSBuZXcgQ2FsbEV4cHJlc3Npb24ob3JpZ2luLCBuYW1lLCB0eXBlQXJndW1l
bnRzLCBhcmd1bWVudExpc3QpOworICAgICAgICBjYWxsLmFyZ3VtZW50VHlwZXMgPSBhcmd1bWVu
dFR5cGVzOworICAgICAgICBpZiAocmV0dXJuVHlwZSkKKyAgICAgICAgICAgIGNhbGwuc2V0Q2Fz
dERhdGEocmV0dXJuVHlwZSk7CisgICAgICAgIHJldHVybiB7Y2FsbCwgcmVzdWx0VHlwZTogY2Fs
bC5yZXNvbHZlKHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1ldGVyc0luU2NvcGUsIHR5cGVB
cmd1bWVudHMpfTsKKyAgICB9CisgICAgCisgICAgcmVzb2x2ZShwb3NzaWJsZU92ZXJsb2Fkcywg
dHlwZVBhcmFtZXRlcnNJblNjb3BlLCB0eXBlQXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaWYg
KCFwb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHRo
aXMub3JpZ2luLm9yaWdpblN0cmluZywgIkRpZCBub3QgZmluZCBhbnkgZnVuY3Rpb25zIG5hbWVk
ICIgKyB0aGlzLm5hbWUpOworICAgICAgICAKKyAgICAgICAgbGV0IG92ZXJsb2FkID0gbnVsbDsK
KyAgICAgICAgbGV0IGZhaWx1cmVzID0gW107CisgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0
ZXIgb2YgdHlwZVBhcmFtZXRlcnNJblNjb3BlKSB7CisgICAgICAgICAgICBpZiAoISh0eXBlUGFy
YW1ldGVyIGluc3RhbmNlb2YgVHlwZVZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5wcm90b2NvbCkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxldCBzaWduYXR1cmVzID0KKyAgICAgICAgICAg
ICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnByb3RvY29sRGVjbC5zaWduYXR1cmVzQnlOYW1l
V2l0aFR5cGVWYXJpYWJsZSh0aGlzLm5hbWUsIHR5cGVQYXJhbWV0ZXIpOworICAgICAgICAgICAg
aWYgKCFzaWduYXR1cmVzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
b3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMsIHRoaXMudHlwZUFyZ3Vt
ZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlzLnJldHVyblR5cGUpOworICAgICAgICAgICAg
aWYgKG92ZXJsb2FkLmZ1bmMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBm
YWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKKyAgICAgICAgICAgIG92ZXJsb2Fk
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW92ZXJsb2FkKSB7CisgICAgICAgICAg
ICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCisgICAgICAgICAgICAgICAgcG9zc2li
bGVPdmVybG9hZHMsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlz
LnJldHVyblR5cGUpOworICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7CisgICAgICAg
ICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7CisgICAgICAgICAg
ICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdpdGgg
IjsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlQXJndW1lbnRzLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyB0aGlzLnR5cGVB
cmd1bWVudHMgKyAiPiBhbmQgIjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1bWVu
dCB0eXBlcyAoIiArIHRoaXMuYXJndW1lbnRUeXBlcyArICIpIjsKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5yZXR1cm5UeXBlKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IiBhbmQg
cmV0dXJuIHR5cGUgIiArIHRoaXMucmV0dXJuVHlwZTsKKyAgICAgICAgICAgICAgICBpZiAoZmFp
bHVyZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIsIGJ1dCBjb25z
aWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1lc3NhZ2UpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZUFyZ3Vt
ZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGUgPSB0
eXBlQXJndW1lbnRzW2ldOworICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBvdmVybG9h
ZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOworICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRl
ciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxzV2l0aENv
bW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBlIGFyZ3Vt
ZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0eXBlQXJn
dW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7CisgICAg
ICAgIH0KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyZ3VtZW50VHlwZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBhcmd1bWVudFR5cGUgPSB0aGlzLmFyZ3VtZW50
VHlwZXNbaV07CisgICAgICAgICAgICBsZXQgcGFyYW1ldGVyVHlwZSA9IG92ZXJsb2FkLmZ1bmMu
cGFyYW1ldGVyc1tpXS50eXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAorICAgICAgICAgICAg
ICAgIG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0aW9uQ29u
dGV4dCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRUeXBlLmVxdWFsc1dpdGhD
b21taXQocGFyYW1ldGVyVHlwZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcg
KyAiIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsIGFmdGVyIHR5cGUgYXJn
dW1lbnQgc3Vic3RpdHV0aW9uOiBhcmd1bWVudCA9ICIgKyBhcmd1bWVudFR5cGUgKyAiLCBwYXJh
bWV0ZXIgPSAiICsgcGFyYW1ldGVyVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXMucmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQpOworICAgIH0KKyAgICAKKyAgICByZXNvbHZl
VG9PdmVybG9hZChvdmVybG9hZCkKICAgICB7CiAgICAgICAgIHRoaXMuZnVuYyA9IG92ZXJsb2Fk
LmZ1bmM7CiAgICAgICAgIHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA9IG92ZXJsb2FkLnR5cGVB
cmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQgaW5zdGFuY2VvZiBUeXBl
ID8gdHlwZUFyZ3VtZW50LnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKSA6IHR5cGVBcmd1bWVudCk7
CiAgICAgICAgIGxldCByZXN1bHQgPSBvdmVybG9hZC5mdW5jLnJldHVyblR5cGUuc3Vic3RpdHV0
ZVRvVW5pZmljYXRpb24oCiAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJz
LCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwotICAgICAgICB0aGlzLnJlc3VsdFR5cGUg
PSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOwogICAgICAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCByZXR1cm4gdHlwZSIpOworICAgICAg
ICByZXN1bHQgPSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOworICAgICAgICB0aGlz
LnJlc3VsdFR5cGUgPSByZXN1bHQ7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwzOSArMzQsNDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZp
c2l0b3IgewogICAgIAogICAgIHZpc2l0UHJvZ3JhbShub2RlKQogICAgIHsKLSAgICAgICAgZm9y
IChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKSB7CisgICAgICAgIGxl
dCBkb1N0YXRlbWVudCA9IHN0YXRlbWVudCA9PiB7CiAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
U3RhdGVtZW50ID0gc3RhdGVtZW50OwogICAgICAgICAgICAgc3RhdGVtZW50LnZpc2l0KHRoaXMp
OwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGxldCB0eXBlIG9mIG5vZGUudHlw
ZXMudmFsdWVzKCkpCisgICAgICAgICAgICBkb1N0YXRlbWVudCh0eXBlKTsKKyAgICAgICAgZm9y
IChsZXQgcHJvdG9jb2wgb2Ygbm9kZS5wcm90b2NvbHMudmFsdWVzKCkpCisgICAgICAgICAgICBk
b1N0YXRlbWVudChwcm90b2NvbCk7CisgICAgICAgIGZvciAobGV0IGZ1bmNzIG9mIG5vZGUuZnVu
Y3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmNzKSB7
CisgICAgICAgICAgICAgICAgdGhpcy52aXNpdEZ1bmMoZnVuYyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgZnVuY3Mgb2Ygbm9kZS5mdW5jdGlvbnMudmFsdWVz
KCkpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAgICAgICAgICAg
ICAgZG9TdGF0ZW1lbnQoZnVuYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIHZp
c2l0RnVuY0RlZihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwor
ICAgIH0KKyAgICAKKyAgICB2aXNpdE5hdGl2ZUZ1bmMobm9kZSkKKyAgICB7CiAgICAgfQogICAg
IAogICAgIHZpc2l0UHJvdG9jb2xEZWNsKG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxldCBz
aWduYXR1cmUgb2Ygbm9kZS5zaWduYXR1cmVzKSB7Ci0gICAgICAgICAgICBsZXQgc2V0ID0gbmV3
IFNldCgpOwotICAgICAgICAgICAgZnVuY3Rpb24gY29uc2lkZXIodGhpbmcpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaW5nLmlzVW5pZmlhYmxlKQotICAgICAgICAgICAg
ICAgICAgICBzZXQuYWRkKHRoaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNsYXNz
IE5vdGljZVR5cGVWYXJpYWJsZSBleHRlbmRzIFZpc2l0b3IgewotICAgICAgICAgICAgICAgIHZp
c2l0VHlwZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29uc2lkZXIobm9kZS50eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
dmlzaXRWYXJpYWJsZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc2lkZXIobm9kZS52YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbGV0IG5vdGljZVR5cGVWYXJpYWJsZSA9IG5ldyBOb3RpY2VU
eXBlVmFyaWFibGUoKTsKKyAgICAgICAgICAgIGxldCB0eXBlVmFyaWFibGVUcmFja2VyID0gbmV3
IFR5cGVWYXJpYWJsZVRyYWNrZXIoKTsKICAgICAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlclR5
cGUgb2Ygc2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRl
clR5cGUudmlzaXQobm90aWNlVHlwZVZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJUeXBlLnZpc2l0KHR5cGVWYXJpYWJsZVRyYWNrZXIpOworICAgICAgICAgICAgTm9kZS52aXNp
dChzaWduYXR1cmUucmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbiwgdHlwZVZhcmlhYmxl
VHJhY2tlcik7CiAgICAgICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHNpZ25hdHVy
ZS50eXBlUGFyYW1ldGVycykgewotICAgICAgICAgICAgICAgIGlmICghc2V0Lmhhcyh0eXBlUGFy
YW1ldGVyKSkKKyAgICAgICAgICAgICAgICBpZiAoIXR5cGVWYXJpYWJsZVRyYWNrZXIuc2V0Lmhh
cyh0eXBlUGFyYW1ldGVyKSkKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgV1R5cGVFcnJvcih0
eXBlUGFyYW1ldGVyLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBlIHBhcmFtZXRlciB0byBwcm90
b2NvbCBzaWduYXR1cmUgbm90IGluZmVycmFibGUgZnJvbSB2YWx1ZSBwYXJhbWV0ZXJzIik7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXNldC5oYXMobm9kZS50eXBlVmFyaWFibGUp
KQorICAgICAgICAgICAgaWYgKCF0eXBlVmFyaWFibGVUcmFja2VyLnNldC5oYXMobm9kZS50eXBl
VmFyaWFibGUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHNpZ25hdHVy
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUHJvdG9jb2wncyB0eXBlIHZhcmlhYmxlICgiICsgbm9k
ZS5uYW1lICsgIikgbm90IG1lbnRpb25lZCBpbiBzaWduYXR1cmU6ICIgKyBzaWduYXR1cmUpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTQxLDYgKzE0OSwzMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVu
ZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiBsaHNUeXBlOwogICAgIH0KICAgICAKKyAgICB2
aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUu
dGFyZ2V0LnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS5sVmFsdWUuaXNMVmFs
dWUpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsICJMSFMgb2YgcmVhZC1tb2RpZnktd3JpdGUgaXMgbm90IGFuIExWYWx1ZTogIiArIG5v
ZGUubFZhbGUpOworICAgICAgICBsZXQgbGhzVHlwZSA9IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMp
OworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAgICBub2Rl
Lm5ld1ZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnZp
c2l0KHRoaXMpOworICAgICAgICBub2RlLm5ld1ZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAg
ICBsZXQgbmV3VmFsdWVUeXBlID0gbm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAgICAg
ICAgaWYgKCFsaHNUeXBlLmVxdWFsc1dpdGhDb21taXQobmV3VmFsdWVUeXBlKSkKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBl
IG1pc21hdGNoIGluIHJlYWQtbW9kaWZ5LXdyaXRlOiAiICsgbGhzVHlwZSArICIgdmVyc3VzICIg
KyBuZXdWYWx1ZVR5cGUpOworICAgICAgICByZXR1cm4gbm9kZS5yZXN1bHRFeHAudmlzaXQodGhp
cyk7CisgICAgfQorICAgIAorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKKyAgICB7
CisgICAgICAgIGlmICghbm9kZS50eXBlKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJB
bm9ueW1vdXMgdmFyaWFibGUgbXVzdCBrbm93IHR5cGUgYmVmb3JlIGZpcnN0IGFwcGVhcmFuY2Ui
KTsKKyAgICB9CisgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKICAg
ICB7CiAgICAgICAgIGxldCB0eXBlID0gbm9kZS5wdHIudmlzaXQodGhpcykudW5pZnlOb2RlOwpA
QCAtMTQ4LDYgKzE4Miw4IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlR5
cGUgcGFzc2VkIHRvIGRlcmVmZXJlbmNlIGlzIG5vdCBhIHBvaW50ZXI6ICIgKyB0eXBlKTsKICAg
ICAgICAgbm9kZS50eXBlID0gdHlwZS5lbGVtZW50VHlwZTsKICAgICAgICAgbm9kZS5hZGRyZXNz
U3BhY2UgPSB0eXBlLmFkZHJlc3NTcGFjZTsKKyAgICAgICAgaWYgKCFub2RlLmFkZHJlc3NTcGFj
ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhZGRyZXNzIHNwYWNlIGluIHR5
cGU6ICIgKyB0eXBlKTsKICAgICAgICAgcmV0dXJuIG5vZGUudHlwZTsKICAgICB9CiAgICAgCkBA
IC0xNjUsNyArMjAxLDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHsK
ICAgICAgICAgbGV0IGVsZW1lbnRUeXBlID0gbm9kZS5sVmFsdWUudmlzaXQodGhpcykudW5pZnlO
b2RlOwogICAgICAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBQdHJUeXBlKSB7Ci0gICAg
ICAgICAgICBub2RlLmJlY29tZUNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihu
b2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlS
ZWZUeXBlKG5vZGUub3JpZ2luLCBlbGVtZW50VHlwZS5hZGRyZXNzU3BhY2UsIGVsZW1lbnRUeXBl
LmVsZW1lbnRUeXBlKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4OSwzNSArMjI1LDg3IEBA
IGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJTaG91bGQgbm90IGV4aXN0IHlldC4iKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RFeHBy
ZXNzaW9uKG5vZGUpCisgICAgX2ZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3Mobm9kZSwgYmFz
ZVR5cGUsIGV4dHJhQXJncywgZXh0cmFBcmdUeXBlcykKICAgICB7Ci0gICAgICAgIGxldCBzdHJ1
Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBiYXNl
VHlwZSA9IGJhc2VUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKQorICAgICAgICBub2RlLmJh
c2VUeXBlID0gYmFzZVR5cGU7CiAgICAgICAgIAotICAgICAgICBub2RlLnN0cnVjdFR5cGUgPSBz
dHJ1Y3RUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKLSAgICAgICAgCi0gICAgICAgIGxl
dCB1bmRlcmx5aW5nU3RydWN0ID0gc3RydWN0VHlwZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChz
dHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikKLSAgICAgICAgICAgIHVuZGVybHlpbmdTdHJ1
Y3QgPSB1bmRlcmx5aW5nU3RydWN0LnR5cGU7Ci0gICAgICAgIAotICAgICAgICBpZiAoISh1bmRl
cmx5aW5nU3RydWN0IGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJPcGVyYW5kIHRvIGRvdCBl
eHByZXNzaW9uIGlzIG5vdCBhIHN0cnVjdCB0eXBlOiAiICsgc3RydWN0VHlwZSk7CisgICAgICAg
IC8vIFN1Y2ggYSB0eXBlIG11c3QgZXhpc3QuIFRoaXMgbWF5IHRocm93IGlmIGl0IGRvZXNuJ3Qu
CisgICAgICAgIGxldCB0eXBlRm9yQW5kID0gYmFzZVR5cGUuYXJndW1lbnRUeXBlRm9yQW5kT3Zl
cmxvYWQobm9kZS5vcmlnaW4pOworICAgICAgICBpZiAoIXR5cGVGb3JBbmQpCisgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlwZUZvckFuZCIpOworICAgICAgICAKKyAg
ICAgICAgbGV0IGVycm9yRm9yR2V0OworICAgICAgICBsZXQgZXJyb3JGb3JBbmQ7CisgICAgICAg
IAorICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IENhbGxFeHByZXNzaW9u
LnJlc29sdmUoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUucG9zc2libGVHZXRP
dmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsCisgICAgICAg
ICAgICAgICAgbm9kZS5nZXRGdW5jTmFtZSwgW10sIFtub2RlLmJhc2UsIC4uLmV4dHJhQXJnc10s
IFtiYXNlVHlwZSwgLi4uZXh0cmFBcmdUeXBlc10sIG51bGwpOworICAgICAgICAgICAgbm9kZS5j
YWxsRm9yR2V0ID0gcmVzdWx0LmNhbGw7CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JH
ZXQgPSByZXN1bHQucmVzdWx0VHlwZTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgaWYgKCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93
IGU7CisgICAgICAgICAgICBlcnJvckZvckdldCA9IGU7CisgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikgCi0gICAgICAgICAgICB1
bmRlcmx5aW5nU3RydWN0ID0gdW5kZXJseWluZ1N0cnVjdC5pbnN0YW50aWF0ZShzdHJ1Y3RUeXBl
LnR5cGVBcmd1bWVudHMsICJzaGFsbG93Iik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBs
ZXQgYmFzZUZvckFuZCA9IGJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQobm9kZS5vcmln
aW4sIG5vZGUuYmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBD
YWxsRXhwcmVzc2lvbi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2Rl
LnBvc3NpYmxlQW5kT3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0
ZXJzLAorICAgICAgICAgICAgICAgIG5vZGUuYW5kRnVuY05hbWUsIFtdLCBbYmFzZUZvckFuZCwg
Li4uZXh0cmFBcmdzXSwgW3R5cGVGb3JBbmQsIC4uLmV4dHJhQXJnVHlwZXNdLAorICAgICAgICAg
ICAgICAgIG51bGwpOworICAgICAgICAgICAgbm9kZS5jYWxsRm9yQW5kID0gcmVzdWx0LmNhbGw7
CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JBbmQgPSByZXN1bHQucmVzdWx0VHlwZS51
bmlmeU5vZGUucmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChub2RlLm9yaWdpbik7CisgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBXVHlwZUVycm9y
KSkKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgZXJyb3JGb3JBbmQgPSBl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGUucmVzdWx0VHlwZUZvckdl
dCAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yQW5kKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcigKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsCisgICAg
ICAgICAgICAgICAgIkNhbm5vdCByZXNvbHZlIGFjY2VzczsgdHJpZWQgYnktdmFsdWU6XG4iICsK
KyAgICAgICAgICAgICAgICBlcnJvckZvckdldC5tZXNzYWdlICsgIlxuIiArCisgICAgICAgICAg
ICAgICAgImFuZCB0cmllZCBieS1wb2ludGVyOlxuIiArCisgICAgICAgICAgICAgICAgZXJyb3JG
b3JBbmQubWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLnJl
c3VsdFR5cGVGb3JHZXQgJiYgbm9kZS5yZXN1bHRUeXBlRm9yQW5kCisgICAgICAgICAgICAmJiAh
bm9kZS5yZXN1bHRUeXBlRm9yR2V0LmVxdWFscyhub2RlLnJlc3VsdFR5cGVGb3JBbmQpKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
UmVzdWx0IHR5cGUgcmVzb2x2ZWQgYnktdmFsdWUgKCIgKyBub2RlLnJlc3VsdFR5cGVGb3JHZXQg
KyAiKSBkb2VzIG5vdCBtYXRjaCByZXN1bHQgdHlwZSByZXNvbHZlZCBieS1wb2ludGVyICgiICsg
bm9kZS5yZXN1bHRUeXBlRm9yQW5kICsgIikiKTsKKyAgICAgICAgCisgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVzb2x2ZSgKKyAgICAgICAg
ICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkcywgdGhpcy5fY3Vy
cmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICBub2RlLnNldEZ1
bmNOYW1lLCBbXSwgW25vZGUuYmFzZSwgLi4uZXh0cmFBcmdzLCBudWxsXSwgW2Jhc2VUeXBlLCAu
Li5leHRyYUFyZ1R5cGVzLCBub2RlLnJlc3VsdFR5cGVdLCBudWxsKTsKKyAgICAgICAgICAgIG5v
ZGUuY2FsbEZvclNldCA9IHJlc3VsdC5jYWxsOworICAgICAgICAgICAgaWYgKCFyZXN1bHQucmVz
dWx0VHlwZS5lcXVhbHMoYmFzZVR5cGUpKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlJlc3VsdCB0eXBlIG9mIHNldHRlciAi
ICsgcmVzdWx0LmNhbGwuZnVuYyArICIgaXMgbm90IHRoZSBiYXNlIHR5cGUgIiArIGJhc2VUeXBl
KTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9m
IFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICBub2Rl
LmVycm9yRm9yU2V0ID0gZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbGV0IGZpZWxk
ID0gdW5kZXJseWluZ1N0cnVjdC5maWVsZEJ5TmFtZShub2RlLmZpZWxkTmFtZSk7Ci0gICAgICAg
IGlmICghZmllbGQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJGaWVsZCAiICsgbm9kZS5maWVsZE5hbWUgKyAiIG5vdCBmb3VuZCBp
biAiICsgc3RydWN0VHlwZSk7Ci0gICAgICAgIHJldHVybiBmaWVsZC50eXBlOworICAgICAgICBy
ZXR1cm4gbm9kZS5yZXN1bHRUeXBlOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Np
b24obm9kZSkKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIG5v
ZGUudHlwZSA9IG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmICghbm9kZS50
eXBlKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEaWQgbm90IGdldCB0eXBlIGZvciBu
b2RlOiAiICsgbm9kZS5hcmd1bWVudCk7Ci0gICAgICAgIHJldHVybiBub2RlLmJvZHkudmlzaXQo
dGhpcyk7CisgICAgICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyku
dW5pZnlOb2RlOworICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFj
Y2Vzcyhub2RlLCBzdHJ1Y3RUeXBlLCBbXSwgW10pOworICAgIH0KKyAgICAKKyAgICB2aXNpdElu
ZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGFycmF5VHlwZSA9IG5vZGUu
YXJyYXkudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBsZXQgaW5kZXhUeXBlID0gbm9k
ZS5pbmRleC52aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0aGlzLl9maW5p
c2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIGFycmF5VHlwZSwgW25vZGUuaW5kZXhdLCBb
aW5kZXhUeXBlXSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKQEAg
LTMyMiwxMCArNDEwLDEwIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgICAgIHJlc3VsdCA9IGV4cHJlc3Npb24udmlzaXQodGhpcyk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAg
IHsKLSAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGVzID0gbm9kZS50eXBlQXJndW1lbnRzLm1h
cCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgbGV0
IHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0
eXBlQXJndW1lbnQudmlzaXQodGhpcykpOwogICAgICAgICBsZXQgYXJndW1lbnRUeXBlcyA9IG5v
ZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiB7CiAgICAgICAgICAgICBsZXQgbmV3QXJn
dW1lbnQgPSBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgICAgIGlmICghbmV3QXJndW1l
bnQpCkBAIC0zMzMsNzcgKzQyMSwxMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7
CiAgICAgICAgICAgICByZXR1cm4gbmV3QXJndW1lbnQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkp
OwogICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBoYW5k
bGUgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yJltdIGlzIGNhbGxlZCB3aXRoIGEgdHlwZSB0aGF0
IGlzbid0IHN1ZmZpY2llbnRseQotICAgICAgICAvLyByZWZlcmVuY2V5LgotICAgICAgICBpZiAo
bm9kZS5uYW1lID09ICJvcGVyYXRvciZbXSIpIHsKLSAgICAgICAgICAgIGxldCBhcmdUeXBlID0g
YXJndW1lbnRUeXBlc1swXS51bmlmeU5vZGU7Ci0gICAgICAgICAgICBpZiAoYXJnVHlwZSBpbnN0
YW5jZW9mIFB0clR5cGUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMgbm90IHZhbGlkIik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcmdUeXBlIGluc3RhbmNlb2YgQXJyYXlU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcgTWFrZUFy
cmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5hcmd1bWVudExpc3RbMF0pOwotICAg
ICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdLm51bUVsZW1lbnRzID0gYXJnVHlwZS5u
dW1FbGVtZW50czsKLSAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IEFycmF5
UmVmVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ1R5cGUuZWxlbWVudFR5cGUpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmICghKGFyZ1R5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKSB7
Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcgTWFrZVB0ckV4cHJl
c3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0WzBdKTsKLSAgICAgICAgICAgICAg
ICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IFB0clR5cGUobm9kZS5vcmlnaW4sICJ0aHJlYWQiLCBh
cmd1bWVudFR5cGVzWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKICAg
ICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlczsKICAgICAgICAgaWYgKG5v
ZGUucmV0dXJuVHlwZSkKICAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsK
LSAgICAgICAgCi0gICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7Ci0gICAgICAgIGxldCBmYWls
dXJlcyA9IFtdOwotICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHRoaXMuX2N1cnJl
bnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGlmICghKHR5cGVQYXJh
bWV0ZXIgaW5zdGFuY2VvZiBUeXBlVmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnByb3RvY29sKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbGV0IHNpZ25hdHVyZXMgPQotICAgICAgICAgICAg
ICAgIHR5cGVQYXJhbWV0ZXIucHJvdG9jb2wucHJvdG9jb2xEZWNsLnNpZ25hdHVyZXNCeU5hbWVX
aXRoVHlwZVZhcmlhYmxlKG5vZGUubmFtZSwgdHlwZVBhcmFtZXRlcik7Ci0gICAgICAgICAgICBp
ZiAoIXNpZ25hdHVyZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBv
dmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgbm9kZS50eXBlQXJndW1l
bnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVyblR5cGUpOwotICAgICAgICAgICAgaWYgKG92
ZXJsb2FkLmZ1bmMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmYWlsdXJl
cy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKLSAgICAgICAgICAgIG92ZXJsb2FkID0gbnVs
bDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW92ZXJsb2FkKSB7Ci0gICAgICAgICAgICBvdmVy
bG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCi0gICAgICAgICAgICAgICAgbm9kZS5wb3NzaWJs
ZU92ZXJsb2Fkcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVy
blR5cGUpOwotICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7Ci0gICAgICAgICAgICAg
ICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Ci0gICAgICAgICAgICAgICAg
bGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdpdGggIjsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyBub2RlLnR5cGVBcmd1bWVu
dHMgKyAiPiBhbmQgIjsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1bWVudCB0eXBl
cyAoIiArIGFyZ3VtZW50VHlwZXMgKyAiKSI7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmV0
dXJuVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5kIHJldHVybiB0eXBl
ICIgKyBub2RlLnJldHVyblR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lkZXJlZDpcbiIg
KyBmYWlsdXJlcy5qb2luKCJcbiIpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudFR5cGVzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgdHlwZUFyZ3VtZW50VHlwZSA9IHR5cGVBcmd1
bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBvdmVybG9hZC5m
dW5jLnR5cGVQYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRlciBp
bnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxzV2l0aENvbW1p
dCh0eXBlQXJndW1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0
ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBlIGFyZ3VtZW50
IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0eXBlQXJndW1l
bnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlc1tpXTsKLSAg
ICAgICAgICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gb3ZlcmxvYWQuZnVuYy5wYXJhbWV0ZXJzW2ld
LnR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCi0gICAgICAgICAgICAgICAgb3ZlcmxvYWQu
ZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250ZXh0KTsKLSAgICAg
ICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVudFR5cGUuZXF1YWxzV2l0aENvbW1pdChwYXJhbWV0
ZXJUeXBlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyArICIgYXJndW1lbnQg
YW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0ZXIgdHlwZSBhcmd1bWVudCBzdWJzdGl0
dXRpb246IGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50VHlwZSArICIsIHBhcmFtZXRlciA9ICIgKyBw
YXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm9kZS5yZXNvbHZlKG92
ZXJsb2FkKTsKKworICAgICAgICBsZXQgcmVzdWx0ID0gbm9kZS5yZXNvbHZlKG5vZGUucG9zc2li
bGVPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsIHR5cGVB
cmd1bWVudHMpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIH0KIApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHByZXNzaW9uLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qcwkocmV2
aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHBy
ZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBAIGNsYXNzIENvbW1hRXhw
cmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24KICAgICAKICAgICBnZXQgbGlzdCgpIHsgcmV0dXJu
IHRoaXMuX2xpc3Q7IH0KICAgICAKKyAgICAvLyBOT1RFOiBJdCdzIHN1cGVyIHRlbXB0aW5nIHRv
IHNheSB0aGF0IENvbW1hRXhwcmVzc2lvbiBpcyBhbiBsVmFsdWUgaWYgaXRzIGxhc3QgZW50cnkg
aXMgYW4gbFZhbHVlLiBCdXQsCisgICAgLy8gUHJvcGVydHlSZXNvbHZlciByZWxpZXMgb24gdGhp
cyBub3QgYmVpbmcgdGhlIGNhc2UuCisgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuICIoIiArIHRoaXMubGlzdC50b1N0cmluZygpICsgIikiOwpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RlcmVmZXJlbmNlRXhwcmVzc2lv
bi5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIg
QEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgRGVyZWZlcmVuY2VFeHByZXNzaW9uIGV4dGVuZHMg
RXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBwdHIpCisgICAgY29uc3RydWN0
b3Iob3JpZ2luLCBwdHIsIHR5cGUgPSBudWxsLCBhZGRyZXNzU3BhY2UgPSBudWxsKQogICAgIHsK
ICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fcHRyID0gcHRyOworICAgICAg
ICB0aGlzLnR5cGUgPSB0eXBlOworICAgICAgICB0aGlzLmFkZHJlc3NTcGFjZSA9IGFkZHJlc3NT
cGFjZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IHB0cigpIHsgcmV0dXJuIHRoaXMuX3B0cjsgfQpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpz
CShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RF
eHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxOSArMjQsMjIgQEAKICAqLwogInVz
ZSBzdHJpY3QiOwogCi1jbGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7Citj
bGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIHsKICAg
ICBjb25zdHJ1Y3RvcihvcmlnaW4sIHN0cnVjdCwgZmllbGROYW1lKQogICAgIHsKLSAgICAgICAg
c3VwZXIob3JpZ2luKTsKLSAgICAgICAgdGhpcy5fc3RydWN0ID0gc3RydWN0OworICAgICAgICBz
dXBlcihvcmlnaW4sIHN0cnVjdCk7CiAgICAgICAgIHRoaXMuX2ZpZWxkTmFtZSA9IGZpZWxkTmFt
ZTsKICAgICB9CiAgICAgCi0gICAgZ2V0IHN0cnVjdCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdDsg
fQorICAgIGdldCBzdHJ1Y3QoKSB7IHJldHVybiB0aGlzLmJhc2U7IH0KICAgICBnZXQgZmllbGRO
YW1lKCkgeyByZXR1cm4gdGhpcy5fZmllbGROYW1lOyB9CiAgICAgZ2V0IGlzTFZhbHVlKCkgeyBy
ZXR1cm4gdGhpcy5zdHJ1Y3QuaXNMVmFsdWU7IH0KICAgICBnZXQgYWRkcmVzc1NwYWNlKCkgeyBy
ZXR1cm4gdGhpcy5zdHJ1Y3QuYWRkcmVzc1NwYWNlOyB9CiAgICAgCisgICAgZ2V0IGdldEZ1bmNO
YW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFtZTsgfQorICAgIGdldCBh
bmRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvciYuIiArIHRoaXMuZmllbGROYW1lOyB9Cisg
ICAgZ2V0IHNldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFt
ZSArICI9IjsgfQorICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiAi
KCIgKyB0aGlzLnN0cnVjdCArICIuIiArIHRoaXMuZmllbGROYW1lICsgIikiOwpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxMiArNjAsMTQgQEAgY2xhc3MgRUJ1ZmZlciB7CiAgICAgZ2V0KGluZGV4KQogICAg
IHsKICAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl9hcnJheS5sZW5ndGgp
Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm91dCBvZiBib3VuZHMgYnVmZmVyIGFjY2Vz
cyIpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJPdXQgb2YgYm91bmRzIGJ1ZmZlciBh
Y2Nlc3MgKGJ1ZmZlciA9ICIgKyB0aGlzICsgIiwgaW5kZXggPSAiICsgaW5kZXggKyAiKSIpOwog
ICAgICAgICByZXR1cm4gdGhpcy5fYXJyYXlbaW5kZXhdOwogICAgIH0KICAgICAKICAgICBzZXQo
aW5kZXgsIHZhbHVlKQogICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0
aGlzLl9hcnJheS5sZW5ndGgpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm91dCBvZiBi
b3VuZHMgYnVmZmVyIGFjY2VzcyAoYnVmZmVyID0gIiArIHRoaXMgKyAiLCBpbmRleCA9ICIgKyBp
bmRleCArICIpIik7CiAgICAgICAgIHRoaXMuX2FycmF5W2luZGV4XSA9IHZhbHVlOwogICAgIH0K
ICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJC
dWlsZGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9FQnVmZmVyQnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTA0LDExICsxMDQsOSBA
QCBjbGFzcyBFQnVmZmVyQnVpbGRlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBzdXBlci52
aXNpdExvZ2ljYWxOb3Qobm9kZSk7CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lv
bihub2RlKQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7CiAgICAgICAg
IHRoaXMuX2NyZWF0ZUVQdHJGb3JOb2RlKG5vZGUpOwotICAgICAgICBub2RlLmFyZ3VtZW50LnZp
c2l0KHRoaXMpOwotICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAog
ICAgIHZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNiArMTAyLDExIEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAg
ICAgICByZXR1cm4gdGFyZ2V0OwogICAgIH0KICAgICAKKyAgICB2aXNpdElkZW50aXR5RXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMp
OworICAgIH0KKyAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAg
IHsKICAgICAgICAgbGV0IHB0ciA9IG5vZGUucHRyLnZpc2l0KHRoaXMpLmxvYWRWYWx1ZSgpOwpA
QCAtMTEyLDcgKzExNyw4IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAg
IAogICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBub2RlLmVQdHIuYm94KG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpKTsKKyAgICAgICAgbGV0IHB0
ciA9IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpOworICAgICAgICByZXR1cm4gbm9kZS5lUHRyLmJv
eChwdHIpOwogICAgIH0KICAgICAKICAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9k
ZSkKQEAgLTEyNSwxMiArMTMxLDYgQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7
CiAgICAgICAgIHJldHVybiBub2RlLmVQdHIuYm94KG5ldyBFQXJyYXlSZWYobm9kZS5sVmFsdWUu
dmlzaXQodGhpcykubG9hZFZhbHVlKCksIDEpKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RF
eHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgc3RydWN0UHRyID0gbm9kZS5zdHJ1
Y3QudmlzaXQodGhpcyk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3RQdHIucGx1cyhub2RlLmZpZWxk
Lm9mZnNldCk7Ci0gICAgfQotICAgIAogICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCiAg
ICAgewogICAgICAgICBsZXQgcmVzdWx0OwpAQCAtMjMxLDEwICsyMzEsOSBAQCBjbGFzcyBFdmFs
dWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgQ29udGludWVFeGNlcHRpb247
CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0QW5v
bnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAgICAgIG5vZGUuZVB0ci5jb3B5RnJvbShu
b2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMpLCBub2RlLnR5cGUuc2l6ZSk7Ci0gICAgICAgIHJldHVy
biBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUudHlwZS5wb3B1bGF0ZURlZmF1
bHRWYWx1ZShub2RlLmVQdHIuYnVmZmVyLCBub2RlLmVQdHIub2Zmc2V0KTsKICAgICB9CiAgICAg
CiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQpAQCAtMjQ3LDYgKzI0Niw4IEBAIGNsYXNz
IEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgaWYgKCF0eXBlIHx8ICFh
cmd1bWVudCkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlw
ZSBvciBhcmd1bWVudDsgaSA9ICIgKyBpICsgIiwgYXJndW1lbnQgPSAiICsgYXJndW1lbnQgKyAi
LCB0eXBlID0gIiArIHR5cGUgKyAiOyBpbiAiICsgbm9kZSk7CiAgICAgICAgICAgICBsZXQgYXJn
dW1lbnRWYWx1ZSA9IGFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAgICAgICAgICAgaWYgKCFhcmd1
bWVudFZhbHVlKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhcmd1bWVu
dCB2YWx1ZSwgaSA9ICIgKyBpICsgIiwgbm9kZSA9ICIgKyBub2RlKTsKICAgICAgICAgICAgIGNh
bGxBcmd1bWVudHMucHVzaCgoKSA9PiB0aGlzLl9zbmFwc2hvdCh0eXBlLCBudWxsLCBhcmd1bWVu
dFZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDE2IEBAIGNsYXNzIEV4cHJlc3Npb25GaW5kZXIgZXh0
ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CiAgICAgfQogICAg
IAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SWRlbnRpdHlF
eHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9jYWxsYmFjayhub2RlKTsKKyAg
ICB9CisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAg
dGhpcy5fY2FsbGJhY2sobm9kZSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9GaW5kSGlnaFpvbWJpZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRmluZEhpZ2hab21iaWVzLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0ZpbmRIaWdoWm9tYmllcy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKQorewor
ICAgIHByb2dyYW0udmlzaXQobmV3IEhpZ2hab21iaWVGaW5kZXIoKSk7Cit9CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHJldmlzaW9uIDIyMjEyMykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgRm9yTG9vcCBleHRlbmRzIE5vZGUgewogCiAgICAgdG9T
dHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJmb3IgKCIgKyAodGhpcy5pbml0aWFsaXph
dGlvbiA/IHRoaXMuaW5pdGlhbGl6YXRpb24gOiAiICIpICsgIjsgIiArICh0aGlzLmNvbmRpdGlv
biA/IHRoaXMuY29uZGl0aW9uIDogIiIpICsgIjsgIiArICh0aGlzLmluY3JlbWVudCA/IHRoaXMu
aW5jcmVtZW50IDogIiIpICsgIikgIiArIGJvZHk7CisgICAgICAgIHJldHVybiAiZm9yICgiICsg
KHRoaXMuaW5pdGlhbGl6YXRpb24gPyB0aGlzLmluaXRpYWxpemF0aW9uIDogIiAiKSArICI7ICIg
KyAodGhpcy5jb25kaXRpb24gPyB0aGlzLmNvbmRpdGlvbiA6ICIiKSArICI7ICIgKyAodGhpcy5p
bmNyZW1lbnQgPyB0aGlzLmluY3JlbWVudCA6ICIiKSArICIpICIgKyB0aGlzLmJvZHk7CiAgICAg
fQogfTsKIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMiBAQCBjbGFzcyBGdW5jIGV4dGVuZHMgTm9kZSB7CiAg
ICAgewogICAgICAgICBpZiAoIShvcmlnaW4gaW5zdGFuY2VvZiBMZXhlclRva2VuKSkKICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIG9yaWdpbjogIiArIG9yaWdpbik7CisgICAgICAg
IGZvciAobGV0IHBhcmFtZXRlciBvZiBwYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICBpZiAoIXBh
cmFtZXRlcikKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcGFyYW1ldGVy
Iik7CisgICAgICAgICAgICBpZiAoIXBhcmFtZXRlci50eXBlKQorICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTnVsbCBwYXJhbWV0ZXIgdHlwZSIpOworICAgICAgICB9CiAgICAgICAg
IHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKICAgICAgICAgdGhpcy5f
bmFtZSA9IG5hbWU7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5z
dGFudGlhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0Z1bmNJbnN0YW50aWF0b3IuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTc1
LDMzICs3NSwzOCBAQCBjbGFzcyBGdW5jSW5zdGFudGlhdG9yIHsKICAgICAgICAgICAgICAgICAg
ICAgbGV0IG92ZXJsb2FkID0gcmVzb2x2ZU92ZXJsb2FkSW1wbChyZXN1bHQucG9zc2libGVPdmVy
bG9hZHMsIHJlc3VsdC50eXBlQXJndW1lbnRzLCByZXN1bHQuYXJndW1lbnRUeXBlcywgcmVzdWx0
LnJldHVyblR5cGVGb3JPdmVybG9hZFJlc29sdXRpb24pOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoIW92ZXJsb2FkLmZ1bmMpCiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkNvdWxkIG5vdCByZXNvbHZlIHByb3RvY29sIHNpZ25hdHVyZSBmdW5jdGlvbiBjYWxsIGR1
cmluZyBpbnN0YW50aWF0aW9uOiAiICsgcmVzdWx0LmZ1bmMgKyAob3ZlcmxvYWQuZmFpbHVyZXMu
bGVuZ3RoID8gIjsgdHJpZWQ6XG4iICsgb3ZlcmxvYWQuZmFpbHVyZXMuam9pbigiXG4iKSA6ICIi
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKG92ZXJsb2FkKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmVUb092ZXJsb2FkKG92ZXJsb2FkKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dC5mdW5jLmlzTmF0aXZlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQubmF0aXZlRnVuY0lu
c3RhbmNlID0gdGhpc0luc3RhbnRpYXRvci5nZXRVbmlxdWUocmVzdWx0LmZ1bmMsIHJlc3VsdC5h
Y3R1YWxUeXBlQXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBsZXQgc3Vic3RpdHV0aW9uID0gbmV3IEluc3RhbnRpYXRpb25TdWJzdGl0dXRpb24oZnVuYy50
eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7CisgICAgICAgIGxldCBpbnN0YW50aWF0ZUlt
bWVkaWF0ZXMgPSBuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCk7CiAgICAgICAgIAotICAgICAg
ICBjbGFzcyBJbnN0YW50aWF0ZSBleHRlbmRzIFZpc2l0b3JCYXNlIHsKKyAgICAgICAgY2xhc3Mg
SW5zdGFudGlhdGUgewogICAgICAgICAgICAgdmlzaXRGdW5jRGVmKGZ1bmMpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdW5jRGVmKAogICAgICAgICAgICAgICAg
ICAgICBmdW5jLm9yaWdpbiwgZnVuYy5uYW1lLAotICAgICAgICAgICAgICAgICAgICBmdW5jLnJl
dHVyblR5cGUudmlzaXQoc3Vic3RpdHV0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5y
ZXR1cm5UeXBlLnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlhdGVz
KSwKICAgICAgICAgICAgICAgICAgICAgW10sIC8vIFdlJ3JlIGluc3RhbnRpYXRlZCBzbyB3ZSBu
byBsb25nZXIgdGFrZSB0eXBlIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMu
cGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChzdWJzdGl0dXRpb24p
KSwKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5ib2R5LnZpc2l0KHN1YnN0aXR1dGlvbikpOwor
ICAgICAgICAgICAgICAgICAgICBmdW5jLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJh
bWV0ZXIudmlzaXQoc3Vic3RpdHV0aW9uKS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpKSwK
KyAgICAgICAgICAgICAgICAgICAgZnVuYy5ib2R5LnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQo
aW5zdGFudGlhdGVJbW1lZGlhdGVzKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHZpc2l0TmF0aXZlRnVuYyhmdW5jKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBuZXcgTmF0aXZlRnVuY0luc3RhbmNlKAogICAgICAgICAgICAgICAgICAg
ICBmdW5jLAotICAgICAgICAgICAgICAgICAgICBmdW5jLnJldHVyblR5cGUudmlzaXQoc3Vic3Rp
dHV0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0
ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHN1YnN0aXR1dGlvbikpLAotICAgICAgICAgICAgICAgICAg
ICBmdW5jLmlzQ2FzdCk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMucmV0dXJuVHlwZS52aXNp
dChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyksCisgICAgICAgICAg
ICAgICAgICAgIGZ1bmMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNp
dChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcykpLAorICAgICAgICAg
ICAgICAgICAgICBmdW5jLmlzQ2FzdCwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5pbnN0YW50
aWF0ZUltcGxlbWVudGF0aW9uKHN1YnN0aXR1dGlvbikpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGxldCByZXN1bHRpbmdGdW5jID0gZnVuYy52aXNpdChuZXcgSW5zdGFudGlh
dGUoKSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9IaWdoWm9tYmllRmlu
ZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0hpZ2ha
b21iaWVGaW5kZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSGlnaFpvbWJpZUZpbmRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmlj
dCI7CisKKy8vIElmIGEgaGlnaC1sZXZlbCBjb25zdHJ1Y3Qgc29tZWhvdyBtYW5hZ2VzIHRvIGxp
dmUgb24gd2hlbiB3ZSdyZSBsb3dlcmVkLCBpdCdzIGEgaGlnaCB6b21iaWUuCitjbGFzcyBIaWdo
Wm9tYmllRmluZGVyIGV4dGVuZHMgVmlzaXRvciB7CisgICAgX2ZvdW5kKG5vZGUpCisgICAgewor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIjogSGln
aCB6b21iaWU6ICIgKyBub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9u
KG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9mb3VuZChub2RlKTsKKyAgICB9CisgICAgCisg
ICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2ZvdW5k
KG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCisgICAg
eworICAgICAgICBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOworICAgIH0KK30KKwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSWRlbnRpdHlFeHByZXNzaW9uLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lkZW50aXR5RXhw
cmVzc2lvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JZGVudGl0eUV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3Qi
OworCitjbGFzcyBJZGVudGl0eUV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKKyAgICBj
b25zdHJ1Y3Rvcih0YXJnZXQpCisgICAgeworICAgICAgICBzdXBlcih0YXJnZXQub3JpZ2luKTsK
KyAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0OworICAgIH0KKyAgICAKKyAgICBnZXQgdGFy
Z2V0KCkgeyByZXR1cm4gdGhpcy5fdGFyZ2V0OyB9CisgICAgCisgICAgZ2V0IHVuaWZ5Tm9kZSgp
IHsgcmV0dXJuIHRoaXMudGFyZ2V0LnVuaWZ5Tm9kZTsgfQorICAgIGdldCBpc0NvbnN0ZXhwcigp
IHsgcmV0dXJuIHRoaXMudGFyZ2V0LmlzQ29uc3RleHByOyB9CisgICAgZ2V0IGlzTFZhbHVlKCkg
eyByZXR1cm4gdGhpcy50YXJnZXQuaXNMVmFsdWU7IH0KKyAgICBnZXQgYWRkcmVzc1NwYWNlKCkg
eyByZXR1cm4gdGhpcy50YXJnZXQuYWRkcmVzc1NwYWNlOyB9CisgICAgCisgICAgdG9TdHJpbmco
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICIoIiArIHRoaXMudGFyZ2V0ICsgIikiOworICAgIH0K
K30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9u
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZGV4RXhw
cmVzc2lvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JbmRleEV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOwor
CitjbGFzcyBJbmRleEV4cHJlc3Npb24gZXh0ZW5kcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24g
eworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgYXJyYXksIGluZGV4KQorICAgIHsKKyAgICAgICAg
c3VwZXIob3JpZ2luLCBhcnJheSk7CisgICAgICAgIHRoaXMuX2luZGV4ID0gaW5kZXg7CisgICAg
fQorICAgIAorICAgIGdldCBhcnJheSgpIHsgcmV0dXJuIHRoaXMuYmFzZTsgfQorICAgIGdldCBp
bmRleCgpIHsgcmV0dXJuIHRoaXMuX2luZGV4OyB9CisgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1
cm4gdGhpcy5hcnJheS5pc0xWYWx1ZTsgfQorICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVy
biB0aGlzLmFycmF5LmFkZHJlc3NTcGFjZTsgfQorICAgIAorICAgIGdldCBnZXRGdW5jTmFtZSgp
IHsgcmV0dXJuICJvcGVyYXRvcltdIjsgfQorICAgIGdldCBhbmRGdW5jTmFtZSgpIHsgcmV0dXJu
ICJvcGVyYXRvciZbXSI7IH0KKyAgICBnZXQgc2V0RnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0
b3JbXT0iOyB9CisKKyAgICB1cGRhdGVDYWxscygpCisgICAgeworICAgICAgICBpZiAodGhpcy5j
YWxsRm9yR2V0KQorICAgICAgICAgICAgdGhpcy5jYWxsRm9yR2V0LmFyZ3VtZW50TGlzdFsxXSA9
IHRoaXMuaW5kZXg7CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICB0
aGlzLmNhbGxGb3JBbmQuYXJndW1lbnRMaXN0WzFdID0gdGhpcy5pbmRleDsKKyAgICAgICAgaWYg
KHRoaXMuY2FsbEZvclNldCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvclNldC5hcmd1bWVudExp
c3RbMV0gPSB0aGlzLmluZGV4OworICAgICAgICBzdXBlci51cGRhdGVDYWxscygpOworICAgIH0K
KworICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiKCIgKyB0aGlzLmFycmF5
ICsgIlsiICsgdGhpcy5pbmRleCArICJdKSI7CisgICAgfQorfQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKHJldmlzaW9u
IDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JD
YWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGZ1bmN0aW9uIGluZmVyVHlw
ZXNGb3JDYWxsKGZ1bmMsIHR5cGVBcmcKICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldKQog
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIGFyZ3VtZW50IHR5cGUgYXQgaSA9ICIg
KyBpKTsKICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldLnVuaWZ5KHVuaWZpY2F0aW9uQ29u
dGV4dCwgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHtmYWls
dXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAo
aSArIDEpICsgIiAiICsgKGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIg
IiArIGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lIDogIiIpICsgIiBkb2VzIG5vdCBtYXRjaCAocGFz
c2VkICIgKyBhcmd1bWVudFR5cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJz
W2ldLnR5cGUgKyAiKSIpfTsKKyAgICAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92ZXJs
b2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIkFyZ3VtZW50ICMiICsgKGkgKyAxKSArICIgIiAr
IChmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSA/ICJmb3IgcGFyYW1ldGVyICIgKyBmdW5jLnBhcmFt
ZXRlcnNbaV0ubmFtZSArICIgIiA6ICIiKSArICJkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBh
cmd1bWVudFR5cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUg
KyAiKSIpfTsKICAgICB9CiAgICAgaWYgKHJldHVyblR5cGUgJiYgIXJldHVyblR5cGUudW5pZnko
dW5pZmljYXRpb25Db250ZXh0LCBmdW5jLnJldHVyblR5cGUpKQogICAgICAgICByZXR1cm4ge2Zh
aWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJSZXR1cm4gdHlwZSAi
ICsgZnVuYy5yZXR1cm5UeXBlICsgIiBkb2VzIG5vdCBtYXRjaCAiICsgcmV0dXJuVHlwZSl9OwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5qcwkocmV2aXNpb24gMjIy
MTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw4ICs0Myw2IEBAIGZ1bmN0aW9uIF9pbmxpbmVGdW5jdGlvbihwcm9ncmFt
LCBmdW5jLCAKICAgICBpZiAoZnVuYy5pbmxpbmVkIHx8IGZ1bmMuaXNOYXRpdmUpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBmdW5jLnJld3JpdGUobmV3IEluc3RhbnRpYXRlSW1tZWRpYXRl
cygpKTsKLSAgICAKICAgICAvLyBUaGlzIGlzIHRoZSBwcmVjaXNlIHRpbWUgd2hlbiB3ZSBjYW4g
YnVpbGQgRUJ1ZmZlcnMgaW4gb3JkZXIgdG8gZ2V0IHRoZW0gdG8gYmUgdW5pcXVlZCBieQogICAg
IC8vIHR5cGUgaW5zdGFudGlhdGlvbiBidXQgbm90aGluZyBlbHNlLgogICAgIGZ1bmMudmlzaXQo
bmV3IFN0cnVjdExheW91dEJ1aWxkZXIoKSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lubGluZXIuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0lubGluZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTMyLDI0ICszMiwxNSBA
QCBjbGFzcyBJbmxpbmVyIGV4dGVuZHMgUmV3cml0ZXIgewogICAgICAgICB0aGlzLl92aXNpdGlu
ZyA9IHZpc2l0aW5nOwogICAgIH0KICAgICAKLSAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkK
LSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBzdXBlci52aXNpdERvdEV4cHJlc3Npb24obm9k
ZSk7Ci0gICAgICAgIHJlc3VsdC5maWVsZCA9IHJlc3VsdC5zdHJ1Y3RUeXBlLnVuaWZ5Tm9kZS5m
aWVsZEJ5TmFtZShyZXN1bHQuZmllbGROYW1lKTsKLSAgICAgICAgaWYgKHJlc3VsdC5maWVsZC5v
ZmZzZXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW4tbGFpZC1vdXQg
ZmllbGQ6ICIgKyByZXN1bHQuZmllbGQgKyAiIChpbiAiICsgcmVzdWx0LnN0cnVjdFR5cGUgKyAi
KSIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKICAgICB2aXNpdENhbGxF
eHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlzaXRD
YWxsRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5uYXRpdmVGdW5jSW5zdGFu
Y2UpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gdGhpcy5fdmlz
aXRpbmcuZG9WaXNpdChub2RlLmZ1bmMsICgpID0+IHsKICAgICAgICAgICAgIGxldCBmdW5jID0g
dGhpcy5fcHJvZ3JhbS5mdW5jSW5zdGFudGlhdG9yLmdldFVuaXF1ZShyZXN1bHQuZnVuYywgcmVz
dWx0LmFjdHVhbFR5cGVBcmd1bWVudHMpOwotICAgICAgICAgICAgaWYgKGZ1bmMuaXNOYXRpdmUp
IHsKLSAgICAgICAgICAgICAgICByZXN1bHQubmF0aXZlRnVuY0luc3RhbmNlID0gZnVuYzsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGZ1bmMuaXNOYXRpdmUpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4
cGVjdGVkIG5hdGl2ZSBmdW5jOiAiICsgZnVuYyk7CiAgICAgICAgICAgICBfaW5saW5lRnVuY3Rp
b24odGhpcy5fcHJvZ3JhbSwgZnVuYywgdGhpcy5fdmlzaXRpbmcpOwogICAgICAgICAgICAgbGV0
IHJlc3VsdGluZ0Jsb2NrID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAogICAgICAgICAgICAgICAg
IHJlc3VsdC5vcmlnaW4sIGZ1bmMucmV0dXJuVHlwZSwgcmVzdWx0LmFyZ3VtZW50TGlzdCwgZnVu
Yy5wYXJhbWV0ZXJzLCBmdW5jLmJvZHkpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSW50cmluc2ljcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbnRyaW5zaWNzLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNiAr
MTcyLDg4IEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgfSk7CiAgICAgICAgIAog
ICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0b3Im
PD4oaW50LGludCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVu
Yy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAg
ICBFUHRyLmJveChsZWZ0LmxvYWRWYWx1ZSgpICYgcmlnaHQubG9hZFZhbHVlKCkpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAg
Im5hdGl2ZSB1aW50IG9wZXJhdG9yJjw+KHVpbnQsdWludCkiLAorICAgICAgICAgICAgZnVuYyA9
PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRd
KSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJveCgobGVmdC5sb2FkVmFsdWUoKSAmIHJp
Z2h0LmxvYWRWYWx1ZSgpKSA+Pj4gMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAg
ICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0aXZlIGludCBvcGVyYXRvcnw8Pihp
bnQsaW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmlt
cGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQ
dHIuYm94KGxlZnQubG9hZFZhbHVlKCkgfCByaWdodC5sb2FkVmFsdWUoKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0
aXZlIHVpbnQgb3BlcmF0b3J8PD4odWludCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsK
KyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+
CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KChsZWZ0LmxvYWRWYWx1ZSgpIHwgcmlnaHQu
bG9hZFZhbHVlKCkpID4+PiAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
dGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgaW50IG9wZXJhdG9yXjw+KGludCxp
bnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVt
ZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5i
b3gobGVmdC5sb2FkVmFsdWUoKSBeIHJpZ2h0LmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUg
dWludCBvcGVyYXRvcl48Pih1aW50LHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAg
ICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAg
ICAgICAgICAgICAgICAgICAgRVB0ci5ib3goKGxlZnQubG9hZFZhbHVlKCkgXiByaWdodC5sb2Fk
VmFsdWUoKSkgPj4+IDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlz
Ll9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0b3I8PDw+KGludCx1aW50
KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVu
dGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94
KGxlZnQubG9hZFZhbHVlKCkgPDwgcmlnaHQubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSB1
aW50IG9wZXJhdG9yPDw8Pih1aW50LHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAg
ICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAg
ICAgICAgICAgICAgICAgICAgRVB0ci5ib3goKGxlZnQubG9hZFZhbHVlKCkgPDwgcmlnaHQubG9h
ZFZhbHVlKCkpID4+PiAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhp
cy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgaW50IG9wZXJhdG9yPj48PihpbnQsdWlu
dCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1l
bnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJv
eChsZWZ0LmxvYWRWYWx1ZSgpID4+IHJpZ2h0LmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUg
dWludCBvcGVyYXRvcj4+PD4odWludCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAg
ICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+Cisg
ICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkgPj4+IHJpZ2h0Lmxv
YWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFw
LnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgaW50IG9wZXJhdG9yfjw+KGludCkiLAorICAgICAg
ICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChb
dmFsdWVdKSA9PiBFUHRyLmJveCh+dmFsdWUubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSB1
aW50IG9wZXJhdG9yfjw+KHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAg
ICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3ZhbHVlXSkgPT4gRVB0ci5ib3goKH52YWx1
ZS5sb2FkVmFsdWUoKSkgPj4+IDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAg
ICB0aGlzLl9tYXAuc2V0KAogICAgICAgICAgICAgIm5hdGl2ZSBib29sIG9wZXJhdG9yPT08Pihp
bnQsaW50KSIsCiAgICAgICAgICAgICBmdW5jID0+IHsKICAgICAgICAgICAgICAgICBmdW5jLmlt
cGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CkBAIC0yNDgsMzAgKzMzMCwzMiBAQCBj
bGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2Fk
VmFsdWUoKSA+PSByaWdodC5sb2FkVmFsdWUoKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
Ci0gICAgICAgIGxldCBhcnJheUVsZW1lbnRQdHIgPSBmdW5jID0+IHsKLSAgICAgICAgICAgIGZ1
bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZiwgaW5kZXhdLCBub2RlKSA9PiB7Ci0gICAgICAgICAg
ICAgICAgcmVmID0gcmVmLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICghcmVmKQot
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7Ci0gICAgICAgICAgICAgICAgaW5kZXggPSBp
bmRleC5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiByZWYubGVuZ3Ro
KQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5v
cmlnaW5TdHJpbmcsICJBcnJheSBpbmRleCAiICsgaW5kZXggKyAiIGlzIG91dCBvZiBib3VuZHMg
b2YgIiArIHJlZik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVQdHIuYm94KHJlZi5wdHIucGx1
cyhpbmRleCAqIG5vZGUuYWN0dWFsVHlwZUFyZ3VtZW50c1swXS5zaXplKSk7Ci0gICAgICAgICAg
ICB9OwotICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAg
ICAgICAgICJuYXRpdmUgVF4gdGhyZWFkIG9wZXJhdG9yJltdPFQ+KFRbXSB0aHJlYWQsdWludCki
LAotICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsKLSAgICAgICAgdGhpcy5fbWFwLnNldCgK
LSAgICAgICAgICAgICJuYXRpdmUgVF4gdGhyZWFkZ3JvdXAgb3BlcmF0b3ImW108VDpwcmltaXRp
dmU+KFRbXSB0aHJlYWRncm91cCx1aW50KSIsCi0gICAgICAgICAgICBhcnJheUVsZW1lbnRQdHIp
OwotICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAgIm5hdGl2ZSBUXiBkZXZpY2Ug
b3BlcmF0b3ImW108VDpwcmltaXRpdmU+KFRbXSBkZXZpY2UsdWludCkiLAotICAgICAgICAgICAg
YXJyYXlFbGVtZW50UHRyKTsKLSAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJu
YXRpdmUgVF4gY29uc3RhbnQgb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KFRbXSBjb25zdGFudCx1
aW50KSIsCi0gICAgICAgICAgICBhcnJheUVsZW1lbnRQdHIpOworICAgICAgICBmb3IgKGxldCBh
ZGRyZXNzU3BhY2Ugb2YgYWRkcmVzc1NwYWNlcykgeworICAgICAgICAgICAgdGhpcy5fbWFwLnNl
dCgKKyAgICAgICAgICAgICAgICBgbmF0aXZlIFReICR7YWRkcmVzc1NwYWNlfSBvcGVyYXRvciZb
XTxUJHtwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpfT4oVFtdICR7YWRkcmVzc1NwYWNlfSx1
aW50KWAsCisgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgICAgIGZ1
bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZiwgaW5kZXhdLCBub2RlKSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZWYgPSByZWYubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXJlZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1Ry
YXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4LmxvYWRWYWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gcmVmLmxlbmd0aCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJp
bmcsICJBcnJheSBpbmRleCAiICsgaW5kZXggKyAiIGlzIG91dCBvZiBib3VuZHMgb2YgIiArIHJl
Zik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVB0ci5ib3gocmVmLnB0ci5wbHVz
KGluZGV4ICogbm9kZS5hY3R1YWxUeXBlQXJndW1lbnRzWzBdLnNpemUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgdGhpcy5fbWFw
LnNldCgKKyAgICAgICAgICAgICAgICBgbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQke3By
b3RvY29sU3VmZml4KGFkZHJlc3NTcGFjZSl9PihUW10gJHthZGRyZXNzU3BhY2V9KWAsCisgICAg
ICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50
YXRpb24gPSAoW3JlZl0sIG5vZGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZiA9
IHJlZi5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVmKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveCgwKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveChyZWYubGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICBhZGQodGhpbmcpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXRFeHBy
ZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xl
dEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0xldEV4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmlj
dCI7Ci0KLWxldCBsZXRFeHByZXNzaW9uQ291bnQgPSAwOwotCi1jbGFzcyBMZXRFeHByZXNzaW9u
IGV4dGVuZHMgVmFsdWUgewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbikKLSAgICB7Ci0gICAgICAg
IHN1cGVyKCk7Ci0gICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKLSAgICAgICAgdGhpcy5p
bmRleCA9IGxldEV4cHJlc3Npb25Db3VudCsrOwotICAgICAgICB0aGlzLmFyZ3VtZW50ID0gbnVs
bDsKLSAgICAgICAgdGhpcy5ib2R5ID0gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdp
bigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gImxl
dDwiICsgdGhpcy5pbmRleCArICI+IjsgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAiKCIgKyB0aGlzLmFyZ3VtZW50ICsgIiwgIiArIHRo
aXMuYm9keSArICIpIjsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0xleGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0xleGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MZXhlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMywxMiBAQCBjbGFz
cyBMZXhlciB7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJpZGVudGlmaWVyIik7CiAgICAg
ICAgIH0KIAorICAgICAgICBpZiAoL14weFswLTlhLWZBLUZdK3UvLnRlc3QocmVsZXZhbnRUZXh0
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQoInVpbnRIZXhMaXRlcmFsIik7CisKKyAgICAg
ICAgaWYgKC9eMHhbMC05YS1mQS1GXSsvLnRlc3QocmVsZXZhbnRUZXh0KSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQoImludEhleExpdGVyYWwiKTsKKwogICAgICAgICBpZiAoL15bMC05XSt1
Ly50ZXN0KHJlbGV2YW50VGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJ1aW50TGl0
ZXJhbCIpOwogCkBAIC0xMjMsNyArMTI5LDcgQEAgY2xhc3MgTGV4ZXIgewogICAgICAgICBpZiAo
L14oWzAtOV0qXC5bMC05XSspfChbMC05XStcLlswLTldKikvLnRlc3QocmVsZXZhbnRUZXh0KSkK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQoImRvdWJsZUxpdGVyYWwiKTsKICAgICAgICAgCi0g
ICAgICAgIGlmICgvXi0+fD49fDw9fD09fCE9fFwrPXwtPXxcKj18XC89fCU9fF49fFx8PXwmPXxc
K1wrfC0tfChbe30oKVxbXF0/Oj0rKlwvLC4lIX5eJnw8PkA7LV0pLy50ZXN0KHJlbGV2YW50VGV4
dCkpCisgICAgICAgIGlmICgvXjw8fD4+fC0+fD49fDw9fD09fCE9fFwrPXwtPXxcKj18XC89fCU9
fFxePXxcfD18Jj18XCtcK3wtLXwoW3t9KClcW1xdPzo9KypcLywuJSF+XiZ8PD5AOy1dKS8udGVz
dChyZWxldmFudFRleHQpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgicHVuY3R1YXRpb24i
KTsKICAgICAgICAgCiAgICAgICAgIGxldCByZW1haW5pbmcgPSByZWxldmFudFRleHQuc3Vic3Ry
aW5nKDAsIDIwKS5zcGxpdCgvXHMvKVswXTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhw
cmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDYgQEAgY2xhc3MgTWFrZUFy
cmF5UmVmRXhwcmVzc2lvbiBleHRlbmRzIEV4cAogICAgIAogICAgIGdldCBsVmFsdWUoKSB7IHJl
dHVybiB0aGlzLl9sVmFsdWU7IH0KICAgICAKLSAgICBiZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJl
ZkV4cHJlc3Npb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fX3Byb3RvX18gPSBDb252ZXJ0UHRy
VG9BcnJheVJlZkV4cHJlc3Npb24ucHJvdG90eXBlOwotICAgIH0KLSAgICAKICAgICB0b1N0cmlu
ZygpCiAgICAgewogICAgICAgICByZXR1cm4gIkAiICsgKHRoaXMubnVtRWxlbWVudHMgPyAiPDwi
ICsgdGhpcy5udW1FbGVtZW50cyArICI+PiIgOiAiIikgKyAiKCIgKyB0aGlzLmxWYWx1ZSArICIp
IjsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0Lmpz
CShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1l
Q29udGV4dC5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQCBjbGFzcyBOYW1lQ29u
dGV4dCB7CiAgICAgewogICAgICAgICB0aGlzLl9tYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgIHRo
aXMuX3NldCA9IG5ldyBTZXQoKTsKLSAgICAgICAgdGhpcy5fZGVmaW5lZCA9IG51bGw7CiAgICAg
ICAgIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICB0aGlzLl9kZWxlZ2F0
ZSA9IGRlbGVnYXRlOwogICAgICAgICB0aGlzLl9pbnRyaW5zaWNzID0gbnVsbDsKQEAgLTYyLDcg
KzYxLDcgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogICAgICAgICBpZiAoIXRoaW5nLm5hbWUpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBpZiAodGhpbmcuaXNOYXRpdmUp
IHsKKyAgICAgICAgaWYgKHRoaW5nLmlzTmF0aXZlICYmICF0aGluZy5pbXBsZW1lbnRhdGlvbikg
ewogICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnRyaW5zaWNzKQogICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTmF0aXZlIGZ1bmN0aW9uIGluIGEgc2NvcGUgdGhhdCBkb2VzIG5vdCBy
ZWNvZ25pemUgaW50cmluc2ljcyIpOwogICAgICAgICAgICAgdGhpcy5faW50cmluc2ljcy5hZGQo
dGhpbmcpOwpAQCAtMTE1LDM2ICsxMTQsMTEgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogICAgICAg
ICByZXR1cm4gbnVsbDsKICAgICB9CiAgICAgCi0gICAgaGFuZGxlRGVmaW5pbmcoKQotICAgIHsK
LSAgICAgICAgdGhpcy5fZGVmaW5lZCA9IG5ldyBTZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgaXNE
ZWZpbmVkKHRoaW5nKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3NldC5oYXModGhpbmcpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gIXRoaXMuX2RlZmluZWQKLSAgICAgICAgICAgICAgICB8fCB0
aGlzLl9kZWZpbmVkLmhhcyh0aGluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMu
X2RlbGVnYXRlICYmIHRoaXMuX2RlbGVnYXRlLmlzRGVmaW5lZCh0aGluZyk7Ci0gICAgfQotICAg
IAotICAgIGRlZmluZSh0aGluZykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RlZmluZWQuYWRkKHRo
aW5nKTsKLSAgICB9Ci0gICAgCi0gICAgZGVmaW5lQWxsKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X2RlZmluZWQgPSBudWxsOwotICAgIH0KLSAgICAKICAgICBkb1N0YXRlbWVudChzdGF0ZW1lbnQs
IGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlbWVudCA9IHN0YXRl
bWVudDsKICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlbWVu
dCA9IG51bGw7Ci0gICAgICAgIHRoaXMuZGVmaW5lKHN0YXRlbWVudCk7CiAgICAgfQogICAgIAog
ICAgIHJlY29nbml6ZUludHJpbnNpY3MoKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTmFtZVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwyNyArMzAsMTUgQEAKIC8vIG1vcmUgY29udmVuaWVudCB0byBjaGVjayBoZXJlIHRoYW4gaW4g
dGhlIENoZWNrZXIuIFRoaXMgdXN1YWxseSBpbnZvbHZlcyB0aGluZ3MgdGhhdCBuZWVkIHRvIGJl
CiAvLyBjaGVja2VkIGJlZm9yZSBUeXBlUmVmVG9UeXBlRGVmU2tpcHBlci4KIGNsYXNzIE5hbWVS
ZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewotICAgIC8vIEl0J3MgdG90YWxseSBPSyB0byBpbnN0
YW50aWF0ZSB0aGlzIHdpdGggemVybyBhcmd1bWVudHMgKGkuZS4gcGFzc2luZyB1bmRlZmluZWQg
Zm9yIGJvdGggb2YKLSAgICAvLyB0aGVtKSBpZiB5b3UncmUgY3JlYXRpbmcgYSBOYW1lUmVzb2x2
ZXIgdG8gdmlzaXQgYSBQcm9ncmFtLgogICAgIGNvbnN0cnVjdG9yKG5hbWVDb250ZXh0KQogICAg
IHsKICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5fbmFtZUNvbnRleHQgPSBuYW1lQ29u
dGV4dDsKICAgICB9Ci0gICAgCi0gICAgdmlzaXRQcm9ncmFtKG5vZGUpCisKKyAgICBkb1N0YXRl
bWVudChzdGF0ZW1lbnQpCiAgICAgewotICAgICAgICBsZXQgbmFtZUNvbnRleHQgPSBuZXcgTmFt
ZUNvbnRleHQodGhpcy5fbmFtZUNvbnRleHQpOwotICAgICAgICBuYW1lQ29udGV4dC5wcm9ncmFt
ID0gbm9kZTsKLSAgICAgICAgbmFtZUNvbnRleHQucmVjb2duaXplSW50cmluc2ljcygpOwotICAg
ICAgICBuYW1lQ29udGV4dC5oYW5kbGVEZWZpbmluZygpOwotICAgICAgICBub2RlLmludHJpbnNp
Y3MgPSBuYW1lQ29udGV4dC5pbnRyaW5zaWNzOwotICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQg
b2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCi0gICAgICAgICAgICBuYW1lQ29udGV4dC5hZGQo
c3RhdGVtZW50KTsKLSAgICAgICAgbGV0IGNoZWNrZXIgPSBuZXcgTmFtZVJlc29sdmVyKG5hbWVD
b250ZXh0KTsKLSAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0
ZW1lbnRzKQotICAgICAgICAgICAgbmFtZUNvbnRleHQuZG9TdGF0ZW1lbnQoc3RhdGVtZW50LCAo
KSA9PiBzdGF0ZW1lbnQudmlzaXQoY2hlY2tlcikpOwotICAgICAgICBub2RlLmdsb2JhbE5hbWVD
b250ZXh0ID0gbmFtZUNvbnRleHQ7CisgICAgICAgIHRoaXMuX25hbWVDb250ZXh0LmRvU3RhdGVt
ZW50KHN0YXRlbWVudCwgKCkgPT4gc3RhdGVtZW50LnZpc2l0KHRoaXMpKTsKICAgICB9CiAgICAg
CiAgICAgX3Zpc2l0VHlwZVBhcmFtZXRlcnNBbmRCdWlsZE5hbWVDb250ZXh0KG5vZGUpCkBAIC0y
MDcsOCArMTk1LDYgQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAg
ICAgICAgICB0eXBlID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KFR5cGUsIG5vZGUubmFtZSk7CiAg
ICAgICAgICAgICBpZiAoIXR5cGUpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ291bGQgbm90IGZpbmQgdHlwZSBuYW1lZCAi
ICsgbm9kZS5uYW1lKTsKLSAgICAgICAgICAgIGlmICghdGhpcy5fbmFtZUNvbnRleHQuaXNEZWZp
bmVkKHR5cGUpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZywgIklsbGVnYWwgZm9yd2FyZCB1c2Ugb2YgdHlwZSBuYW1lZCAiICsg
bm9kZS5uYW1lKTsKICAgICAgICAgICAgIG5vZGUudHlwZSA9IHR5cGU7CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC0yMzAsNyArMjE2LDYgQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlz
aXRvciB7CiAgICAgdmlzaXRSZWZlcmVuY2VUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBsZXQg
bmFtZUNvbnRleHQgPSBuZXcgTmFtZUNvbnRleHQodGhpcy5fbmFtZUNvbnRleHQpOwotICAgICAg
ICBuYW1lQ29udGV4dC5kZWZpbmVBbGwoKTsKICAgICAgICAgbm9kZS5lbGVtZW50VHlwZS52aXNp
dChuZXcgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KSk7CiAgICAgfQogICAgIApAQCAtMjU4LDYg
KzI0MywyOCBAQCBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAg
c3VwZXIudmlzaXRSZXR1cm4obm9kZSk7CiAgICAgfQogICAgIAorICAgIF9oYW5kbGVQcm9wZXJ0
eUFjY2Vzcyhub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkcyA9
IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLmdldEZ1bmNOYW1lKTsKKyAgICAgICAg
bm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkcyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBu
b2RlLnNldEZ1bmNOYW1lKTsKKyAgICAgICAgbm9kZS5wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IHRo
aXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLmFuZEZ1bmNOYW1lKTsKKworICAgICAgICBp
ZiAoIW5vZGUucG9zc2libGVHZXRPdmVybG9hZHMgJiYgIW5vZGUucG9zc2libGVBbmRPdmVybG9h
ZHMpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsICJDYW5ub3QgZmluZCBlaXRoZXIgIiArIG5vZGUuZ2V0RnVuY05hbWUgKyAiIG9yICIg
KyBub2RlLmFuZEZ1bmNOYW1lKTsKKyAgICB9CisgICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9u
KG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzcyhub2RlKTsK
KyAgICAgICAgc3VwZXIudmlzaXREb3RFeHByZXNzaW9uKG5vZGUpOworICAgIH0KKyAgICAKKyAg
ICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5faGFuZGxl
UHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAgICAgIHN1cGVyLnZpc2l0SW5kZXhFeHByZXNzaW9u
KG5vZGUpOworICAgIH0KKyAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAg
ewogICAgICAgICB0aGlzLl9yZXNvbHZlVHlwZUFyZ3VtZW50cyhub2RlLnR5cGVBcmd1bWVudHMp
OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpzCShy
ZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVG
dW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMCBAQCBjbGFzcyBOYXRpdmVGdW5j
IGV4dGVuZHMgRnVuYyB7CiAgICAgewogICAgICAgICBzdXBlcihvcmlnaW4sIG5hbWUsIHJldHVy
blR5cGUsIHR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpOwogICAgICAgICB0aGlz
LmlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uID0gbnVs
bDsKKyAgICAgICAgdGhpcy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uID0gKHN1YnN0aXR1dGlv
bikgPT4ge307CisgICAgICAgIHRoaXMudmlzaXRJbXBsZW1lbnRhdGlvbkRhdGEgPSAoaW1wbGVt
ZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiBudWxsOworICAgICAgICB0aGlzLmRpZExheW91dFN0
cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVudGF0aW9uRGF0YSA9PiBudWxsOwog
ICAgIH0KICAgICAKICAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNl
LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9O
YXRpdmVGdW5jSW5zdGFuY2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNiBAQAog
InVzZSBzdHJpY3QiOwogCiBjbGFzcyBOYXRpdmVGdW5jSW5zdGFuY2UgZXh0ZW5kcyBGdW5jIHsK
LSAgICBjb25zdHJ1Y3RvcihmdW5jLCByZXR1cm5UeXBlLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpCisg
ICAgY29uc3RydWN0b3IoZnVuYywgcmV0dXJuVHlwZSwgcGFyYW1ldGVycywgaXNDYXN0LCBpbXBs
ZW1lbnRhdGlvbkRhdGEpCiAgICAgewogICAgICAgICBzdXBlcihmdW5jLm9yaWdpbiwgZnVuYy5u
YW1lLCByZXR1cm5UeXBlLCBbXSwgcGFyYW1ldGVycywgaXNDYXN0KTsKICAgICAgICAgdGhpcy5f
ZnVuYyA9IGZ1bmM7CisgICAgICAgIHRoaXMuX2ltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVu
dGF0aW9uRGF0YTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGZ1bmMoKSB7IHJldHVybiB0aGlzLl9m
dW5jOyB9CiAgICAgZ2V0IGlzTmF0aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGdldCBpbXBs
ZW1lbnRhdGlvbkRhdGEoKSB7IHJldHVybiB0aGlzLl9pbXBsZW1lbnRhdGlvbkRhdGE7IH0KIAog
ICAgIHRvRGVjbFN0cmluZygpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTm9kZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Ob2RlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob2RlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMywxNyBAQCBjbGFzcyBOb2Rl
IHsKICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gdmlzaXRGdW5jLmNhbGwodmlzaXRvciwgdGhp
cyk7CiAgICAgICAgIGlmICgicmV0dXJuVmFsdWUiIGluIHZpc2l0b3IpCiAgICAgICAgICAgICBy
ZXR1cm5WYWx1ZSA9IHZpc2l0b3IucmV0dXJuVmFsdWU7CisgICAgICAgIAogICAgICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyB2aXNpdChub2RlLCB2aXNp
dG9yKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBOb2RlKQorICAgICAgICAg
ICAgcmV0dXJuIG5vZGUudmlzaXQodmlzaXRvcik7CisgICAgICAgIHJldHVybiBub2RlOworICAg
IH0KKyAgICAKICAgICB1bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKQogICAgIHsKICAg
ICAgICAgaWYgKCFvdGhlcikKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05v
cm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcwkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgTm9ybWFs
VXNlUHJvcGVydHlSZXNvbHZlciBleHRlbmRzIFJld3JpdGVyIHsKKyAgICB2aXNpdERvdEV4cHJl
c3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdXBlci52aXNpdERvdEV4cHJlc3Np
b24obm9kZSkucmV3cml0ZUFmdGVyQ2xvbmluZygpOworICAgIH0KKyAgICAKKyAgICB2aXNpdElu
ZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0SW5k
ZXhFeHByZXNzaW9uKG5vZGUpLnJld3JpdGVBZnRlckNsb25pbmcoKTsKKyAgICB9Cit9CisKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCShyZXZpc2lvbiAyMjIxMjMp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTcyLDE3ICsxNzIsMzUgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBv
cmlnaW5LaQogICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lS2luZCgiaWRlbnRpZmllciIp
KQogICAgICAgICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZVJlZih0b2tlbiwgdG9rZW4udGV4dCk7
CiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWVLaW5kKCJpbnRMaXRlcmFsIikpIHsKLSAg
ICAgICAgICAgIGxldCBpbnRWZXJzaW9uID0gTWF0aC5mbG9vcigrdG9rZW4udGV4dCk7CisgICAg
ICAgICAgICBsZXQgaW50VmVyc2lvbiA9ICgrdG9rZW4udGV4dCkgfCAwOwogICAgICAgICAgICAg
aWYgKCIiICsgaW50VmVyc2lvbiAhPT0gdG9rZW4udGV4dCkKLSAgICAgICAgICAgICAgICBsZXhl
ci5mYWlsKCJJbnRlZ2VyIGxpdGVyYWwgaXMgbm90IGFuIGludGVnZXIiKTsKKyAgICAgICAgICAg
ICAgICBsZXhlci5mYWlsKCJJbnRlZ2VyIGxpdGVyYWwgaXMgbm90IGFuIGludGVnZXI6ICIgKyB0
b2tlbi50ZXh0KTsKICAgICAgICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbCh0b2tlbiwgaW50
VmVyc2lvbik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQo
InVpbnRMaXRlcmFsIikpIHsKICAgICAgICAgICAgIGxldCB1aW50VmVyc2lvbiA9IHRva2VuLnRl
eHQuc3Vic3RyKDAsIHRva2VuLnRleHQubGVuZ3RoIC0gMSkgPj4+IDA7CiAgICAgICAgICAgICBp
ZiAodWludFZlcnNpb24gKyAidSIgIT09IHRva2VuLnRleHQpCi0gICAgICAgICAgICAgICAgbGV4
ZXIuZmFpbCgiSW50ZWdlciBsaXRlcmFsIGlzIG5vdCAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciIp
OworICAgICAgICAgICAgICAgIGxleGVyLmZhaWwoIkludGVnZXIgbGl0ZXJhbCBpcyBub3QgMzIt
Yml0IHVuc2lnbmVkIGludGVnZXI6ICIgKyB0b2tlbi50ZXh0KTsKICAgICAgICAgICAgIHJldHVy
biBuZXcgVWludExpdGVyYWwodG9rZW4sIHVpbnRWZXJzaW9uKTsKICAgICAgICAgfQorICAgICAg
ICBpZiAoKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQoImludEhleExpdGVyYWwiKSkKKyAgICAgICAg
ICAgIHx8ICh0b2tlbiA9IHRyeUNvbnN1bWVLaW5kKCJ1aW50SGV4TGl0ZXJhbCIpKSkgeworICAg
ICAgICAgICAgbGV0IGhleFN0cmluZyA9IHRva2VuLnRleHQuc3Vic3RyKDIpOworICAgICAgICAg
ICAgaWYgKHRva2VuLmtpbmQgPT0gInVpbnRIZXhMaXRlcmFsIikKKyAgICAgICAgICAgICAgICBo
ZXhTdHJpbmcgPSBoZXhTdHJpbmcuc3Vic3RyKDAsIGhleFN0cmluZy5sZW5ndGggLSAxKTsKKyAg
ICAgICAgICAgIGlmICghaGV4U3RyaW5nLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkJhZCBoZXggbGl0ZXJhbDogIiArIHRva2VuKTsKKyAgICAgICAgICAgIGxldCBp
bnRWZXJzaW9uID0gcGFyc2VJbnQoaGV4U3RyaW5nLCAxNik7CisgICAgICAgICAgICBpZiAodG9r
ZW4ua2luZCA9PSAiaW50SGV4TGl0ZXJhbCIpCisgICAgICAgICAgICAgICAgaW50VmVyc2lvbiA9
IGludFZlcnNpb24gfCAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGludFZl
cnNpb24gPSBpbnRWZXJzaW9uID4+PiAwOworICAgICAgICAgICAgaWYgKGludFZlcnNpb24udG9T
dHJpbmcoMTYpICE9PSBoZXhTdHJpbmcpCisgICAgICAgICAgICAgICAgbGV4ZXIuZmFpbCgiSGV4
IGludGVnZXIgbGl0ZXJhbCBpcyBub3QgYW4gaW50ZWdlcjogIiArIHRva2VuLnRleHQpOworICAg
ICAgICAgICAgaWYgKHRva2VuLmtpbmQgPT0gImludEhleExpdGVyYWwiKQorICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbCh0b2tlbiwgaW50VmVyc2lvbik7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IFVpbnRMaXRlcmFsKHRva2VuLCBpbnRWZXJzaW9uID4+PiAwKTsKKyAgICAg
ICAgfQogICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lS2luZCgiZG91YmxlTGl0ZXJhbCIp
KQogICAgICAgICAgICAgcmV0dXJuIG5ldyBEb3VibGVMaXRlcmFsKHRva2VuLCArdG9rZW4udGV4
dCk7CiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWUoInRydWUiLCAiZmFsc2UiKSkKQEAg
LTMzNyw5ICszNTUsOSBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktp
CiAgICAgICAgIH0pOwogICAgIH0KICAgICAKLSAgICBmdW5jdGlvbiBlbWl0SW5jcmVtZW50KHRv
a2VuLCBwdHIsIGV4dHJhQXJnKQorICAgIGZ1bmN0aW9uIGVtaXRJbmNyZW1lbnQodG9rZW4sIG9s
ZCwgZXh0cmFBcmcpCiAgICAgewotICAgICAgICBsZXQgYXJncyA9IFtuZXcgRGVyZWZlcmVuY2VF
eHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpXTsKKyAgICAgICAgbGV0IGFy
Z3MgPSBbb2xkXTsKICAgICAgICAgaWYgKGV4dHJhQXJnKQogICAgICAgICAgICAgYXJncy5wdXNo
KGV4dHJhQXJnKTsKICAgICAgICAgCkBAIC0zNTAsMjcgKzM2OCwxNSBAQCBmdW5jdGlvbiBwYXJz
ZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgIGlmIChuYW1lID09ICJvcGVyYXRv
ciIpCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbmFtZTogIiArIG5hbWUp
OwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50KAotICAgICAgICAgICAg
dG9rZW4sCi0gICAgICAgICAgICBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJp
YWJsZVJlZi53cmFwKHB0cikpLAotICAgICAgICAgICAgbmV3IENhbGxFeHByZXNzaW9uKHRva2Vu
LCBuYW1lLCBbXSwgYXJncykpOworICAgICAgICByZXR1cm4gbmV3IENhbGxFeHByZXNzaW9uKHRv
a2VuLCBuYW1lLCBbXSwgYXJncyk7CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIGZpbmlzaFBh
cnNpbmdQb3N0SW5jcmVtZW50KHRva2VuLCBsZWZ0KQogICAgIHsKLSAgICAgICAgbGV0IHB0ciA9
IG5ldyBMZXRFeHByZXNzaW9uKHRva2VuKTsKLSAgICAgICAgcHRyLmFyZ3VtZW50ID0gbmV3IE1h
a2VQdHJFeHByZXNzaW9uKHRva2VuLCBsZWZ0KTsKLSAgICAgICAgCi0gICAgICAgIGxldCBvbGRW
YWx1ZSA9IG5ldyBMZXRFeHByZXNzaW9uKHRva2VuKTsKLSAgICAgICAgb2xkVmFsdWUuYXJndW1l
bnQgPSBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0
cikpOwotICAgICAgICAKLSAgICAgICAgcHRyLmJvZHkgPSBvbGRWYWx1ZTsKLSAgICAgICAgCi0g
ICAgICAgIG9sZFZhbHVlLmJvZHkgPSBuZXcgQ29tbWFFeHByZXNzaW9uKHRva2VuLCBbCi0gICAg
ICAgICAgICBlbWl0SW5jcmVtZW50KHRva2VuLCBwdHIpLAotICAgICAgICAgICAgVmFyaWFibGVS
ZWYud3JhcChvbGRWYWx1ZSkKLSAgICAgICAgXSk7Ci0gICAgICAgIHJldHVybiBwdHI7CisgICAg
ICAgIGxldCByZWFkTW9kaWZ5V3JpdGUgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbih0
b2tlbiwgbGVmdCk7CisgICAgICAgIHJlYWRNb2RpZnlXcml0ZS5uZXdWYWx1ZUV4cCA9IGVtaXRJ
bmNyZW1lbnQodG9rZW4sIHJlYWRNb2RpZnlXcml0ZS5vbGRWYWx1ZVJlZigpKTsKKyAgICAgICAg
cmVhZE1vZGlmeVdyaXRlLnJlc3VsdEV4cCA9IHJlYWRNb2RpZnlXcml0ZS5vbGRWYWx1ZVJlZigp
OworICAgICAgICByZXR1cm4gcmVhZE1vZGlmeVdyaXRlOwogICAgIH0KICAgICAKICAgICBmdW5j
dGlvbiBwYXJzZVBvc3NpYmxlU3VmZml4KCkKQEAgLTM5NSw5ICs0MDEsNyBAQCBmdW5jdGlvbiBw
YXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgICAgICBjYXNlICJbIjogewog
ICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgICAg
ICAgICAgIGNvbnN1bWUoIl0iKTsKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbmV3IERlcmVmZXJl
bmNlRXhwcmVzc2lvbigKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4sCi0gICAgICAgICAgICAg
ICAgICAgIG5ldyBDYWxsRXhwcmVzc2lvbih0b2tlbiwgIm9wZXJhdG9yJltdIiwgW10sIFtsZWZ0
LCBpbmRleF0pKTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbmV3IEluZGV4RXhwcmVzc2lvbih0
b2tlbiwgbGVmdCwgaW5kZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTQwOSwxMyArNDEzLDEwIEBAIGZ1bmN0aW9uIHBh
cnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAKICAgICBmdW5jdGlvbiBmaW5pc2hQ
YXJzaW5nUHJlSW5jcmVtZW50KHRva2VuLCBsZWZ0LCBleHRyYUFyZykKICAgICB7Ci0gICAgICAg
IGxldCBwdHIgPSBuZXcgTGV0RXhwcmVzc2lvbih0b2tlbik7Ci0gICAgICAgIHB0ci5hcmd1bWVu
dCA9IG5ldyBNYWtlUHRyRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7Ci0gICAgICAgIHB0ci5ib2R5
ID0gbmV3IENvbW1hRXhwcmVzc2lvbih0b2tlbiwgWwotICAgICAgICAgICAgZW1pdEluY3JlbWVu
dCh0b2tlbiwgcHRyLCBleHRyYUFyZyksCi0gICAgICAgICAgICBuZXcgRGVyZWZlcmVuY2VFeHBy
ZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpCi0gICAgICAgIF0pOwotICAgICAg
ICByZXR1cm4gcHRyOworICAgICAgICBsZXQgcmVhZE1vZGlmeVdyaXRlID0gbmV3IFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24odG9rZW4sIGxlZnQpOworICAgICAgICByZWFkTW9kaWZ5V3JpdGUu
bmV3VmFsdWVFeHAgPSBlbWl0SW5jcmVtZW50KHRva2VuLCByZWFkTW9kaWZ5V3JpdGUub2xkVmFs
dWVSZWYoKSwgZXh0cmFBcmcpOworICAgICAgICByZWFkTW9kaWZ5V3JpdGUucmVzdWx0RXhwID0g
cmVhZE1vZGlmeVdyaXRlLm5ld1ZhbHVlUmVmKCk7CisgICAgICAgIHJldHVybiByZWFkTW9kaWZ5
V3JpdGU7CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIHBhcnNlUHJlSW5jcmVtZW50KCkKQEAg
LTU3NSw2ICs1NzYsMTAgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5L
aQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGlzdC5wdXNoKGVmZmVjdGZ1bEV4cHJlc3Np
b24pOwogICAgICAgICB9CisgICAgICAgIGlmICghbGlzdC5sZW5ndGgpCisgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBzaG91bGQgbmV2ZXIgYmUgemVybyIpOworICAgICAgICBp
ZiAobGlzdC5sZW5ndGggPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBsaXN0WzBdOwogICAgICAg
ICByZXR1cm4gbmV3IENvbW1hRXhwcmVzc2lvbihvcmlnaW4sIGxpc3QpOwogICAgIH0KICAgICAK
QEAgLTc2MSwxNSArNzY2LDMwIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3Jp
Z2luS2kKICAgICBmdW5jdGlvbiBwYXJzZUZ1bmNOYW1lKCkKICAgICB7CiAgICAgICAgIGlmICh0
cnlDb25zdW1lKCJvcGVyYXRvciIpKSB7Ci0gICAgICAgICAgICBsZXQgdG9rZW4gPSB0cnlDb25z
dW1lKCIrIiwgIi0iLCAiKiIsICIvIiwgIiUiLCAiXiIsICImIiwgInwiLCAiPCIsICI+IiwgIjw9
IiwgIj49IiwgIj09IiwgIisrIiwgIi0tIiwgIiYiKTsKLSAgICAgICAgICAgIGlmICh0b2tlbikg
ewotICAgICAgICAgICAgICAgIGlmICh0b2tlbi50ZXh0ICE9ICImIiB8fCAhdHJ5Q29uc3VtZSgi
WyIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9yIiArIHRva2VuLnRleHQ7
CisgICAgICAgICAgICBsZXQgdG9rZW4gPSBjb25zdW1lKCIrIiwgIi0iLCAiKiIsICIvIiwgIiUi
LCAiXiIsICImIiwgInwiLCAiPCIsICI+IiwgIjw9IiwgIj49IiwgIj09IiwgIisrIiwgIi0tIiwg
IiYiLCAiLiIsICJ+IiwgIjw8IiwgIj4+IiwgIlsiKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi50
ZXh0ID09ICImIikgeworICAgICAgICAgICAgICAgIGlmICh0cnlDb25zdW1lKCJbIikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3VtZSgiXSIpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gIm9wZXJhdG9yJltdIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KHRyeUNvbnN1bWUoIi4iKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciYu
IiArIGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIikudGV4dDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gIm9wZXJhdG9yJiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9rZW4udGV4
dCA9PSAiLiIpIHsKKyAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gIm9wZXJhdG9yLiIgKyBj
b25zdW1lS2luZCgiaWRlbnRpZmllciIpLnRleHQ7CisgICAgICAgICAgICAgICAgaWYgKHRyeUNv
bnN1bWUoIj0iKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI9IjsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRv
a2VuLnRleHQgPT0gIlsiKSB7CiAgICAgICAgICAgICAgICAgY29uc3VtZSgiXSIpOwotICAgICAg
ICAgICAgICAgIHJldHVybiAib3BlcmF0b3ImW10iOworICAgICAgICAgICAgICAgIGxldCByZXN1
bHQgPSAib3BlcmF0b3JbXSI7CisgICAgICAgICAgICAgICAgaWYgKHRyeUNvbnN1bWUoIj0iKSkK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI9IjsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGV0IG5hbWUgPSBjb25zdW1l
S2luZCgiaWRlbnRpZmllciIpOwotICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciAiICsgbmFt
ZTsKKyAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3IiICsgdG9rZW4udGV4dDsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKS50ZXh0OwogICAgIH0K
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMjcsMjAgKzI3LDM2IEBACiBmdW5jdGlvbiBwcmVwYXJlKG9yaWdpbiwg
bGluZU51bWJlck9mZnNldCwgdGV4dCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IG5ldyBQcm9ncmFt
KCk7CisgICAgCiAgICAgcGFyc2UocHJvZ3JhbSwgIi9pbnRlcm5hbC9zdGRsaWIiLCAibmF0aXZl
IiwgMjcsIHN0YW5kYXJkTGlicmFyeSk7CiAgICAgcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCAidXNl
ciIsIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpOwotICAgIHJlc29sdmVOYW1lcyhwcm9ncmFtKTsK
LSAgICByZXNvbHZlVHlwZURlZnMocHJvZ3JhbSk7CisgICAgCisgICAgbGV0IG5hbWVSZXNvbHZl
ciA9IGNyZWF0ZU5hbWVSZXNvbHZlcihwcm9ncmFtKTsKKyAgICByZXNvbHZlTmFtZXNJblR5cGVz
KHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CisgICAgcmVzb2x2ZU5hbWVzSW5Qcm90b2NvbHMocHJv
Z3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNvbHZlVHlwZURlZnNJblR5cGVzKHByb2dyYW0p
OworICAgIHJlc29sdmVUeXBlRGVmc0luUHJvdG9jb2xzKHByb2dyYW0pOworICAgIC8vIEZJWE1F
OiBOZWVkIHRvIHZlcmlmeSB0aGF0IHN0cnVjdHJlIGFyZSBub3QgY3ljbGljLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwNDQKKyAgICBzeW50aGVz
aXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pOworICAgIHJlc29sdmVOYW1lc0luRnVuY3Rpb25z
KHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CisgICAgcmVzb2x2ZVR5cGVEZWZzSW5GdW5jdGlvbnMo
cHJvZ3JhbSk7CisgICAgCiAgICAgZmxhdHRlblByb3RvY29sRXh0ZW5kcyhwcm9ncmFtKTsKICAg
ICBjaGVjayhwcm9ncmFtKTsKICAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFtKTsKKyAgICBy
ZXNvbHZlUHJvcGVydGllcyhwcm9ncmFtKTsKKyAgICBmaW5kSGlnaFpvbWJpZXMocHJvZ3JhbSk7
CisgICAgY2hlY2tMaXRlcmFsVHlwZXMocHJvZ3JhbSk7CiAgICAgY2hlY2tQcm9ncmFtV3JhcHBl
ZChwcm9ncmFtKTsKICAgICBjaGVja1JldHVybnMocHJvZ3JhbSk7CiAgICAgY2hlY2tVbnJlYWNo
YWJsZUNvZGUocHJvZ3JhbSk7CiAgICAgY2hlY2tMb29wcyhwcm9ncmFtKTsKICAgICBjaGVja1Jl
Y3Vyc2lvbihwcm9ncmFtKTsKICAgICBjaGVja1Byb2dyYW1XcmFwcGVkKHByb2dyYW0pOworICAg
IGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKICAgICBpbmxpbmUocHJvZ3JhbSk7CisgICAgCiAg
ICAgcmV0dXJuIHByb2dyYW07CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Byb2dyYW0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUHJvZ3JhbS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUHJvZ3JhbS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTAgQEAgY2xh
c3MgUHJvZ3JhbSBleHRlbmRzIE5vZGUgewogICAgICAgICB0aGlzLl90eXBlcyA9IG5ldyBNYXAo
KTsKICAgICAgICAgdGhpcy5fcHJvdG9jb2xzID0gbmV3IE1hcCgpOwogICAgICAgICB0aGlzLl9m
dW5jSW5zdGFudGlhdG9yID0gbmV3IEZ1bmNJbnN0YW50aWF0b3IodGhpcyk7CisgICAgICAgIHRo
aXMuX2dsb2JhbE5hbWVDb250ZXh0ID0gbmV3IE5hbWVDb250ZXh0KCk7CisgICAgICAgIHRoaXMu
X2dsb2JhbE5hbWVDb250ZXh0LnByb2dyYW0gPSB0aGlzOworICAgICAgICB0aGlzLl9nbG9iYWxO
YW1lQ29udGV4dC5yZWNvZ25pemVJbnRyaW5zaWNzKCk7CisgICAgICAgIHRoaXMuaW50cmluc2lj
cyA9IHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0LmludHJpbnNpY3M7CiAgICAgfQogICAgIAogICAg
IGdldCB0b3BMZXZlbFN0YXRlbWVudHMoKSB7IHJldHVybiB0aGlzLl90b3BMZXZlbFN0YXRlbWVu
dHM7IH0KQEAgLTQwLDYgKzQ0LDcgQEAgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIE5vZGUgewogICAg
IGdldCB0eXBlcygpIHsgcmV0dXJuIHRoaXMuX3R5cGVzOyB9CiAgICAgZ2V0IHByb3RvY29scygp
IHsgcmV0dXJuIHRoaXMuX3Byb3RvY29sczsgfQogICAgIGdldCBmdW5jSW5zdGFudGlhdG9yKCkg
eyByZXR1cm4gdGhpcy5fZnVuY0luc3RhbnRpYXRvcjsgfQorICAgIGdldCBnbG9iYWxOYW1lQ29u
dGV4dCgpIHsgcmV0dXJuIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0OyB9CiAgICAgCiAgICAgYWRk
KHN0YXRlbWVudCkKICAgICB7CkBAIC01MiwxMCArNTcsMTEgQEAgY2xhc3MgUHJvZ3JhbSBleHRl
bmRzIE5vZGUgewogICAgICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudCBpbnN0YW5jZW9mIFR5cGUp
CiAgICAgICAgICAgICB0aGlzLl90eXBlcy5zZXQoc3RhdGVtZW50Lm5hbWUsIHN0YXRlbWVudCk7
CiAgICAgICAgIGVsc2UgaWYgKHN0YXRlbWVudCBpbnN0YW5jZW9mIFByb3RvY29sKQotICAgICAg
ICAgICAgdGhpcy5fcHJvdG9jb2xzLnNldChzdGF0ZW1lbnQuYWRkLCBzdGF0ZW1lbnQpOworICAg
ICAgICAgICAgdGhpcy5fcHJvdG9jb2xzLnNldChzdGF0ZW1lbnQubmFtZSwgc3RhdGVtZW50KTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTdGF0ZW1lbnQgaXMg
bm90IGEgZnVuY3Rpb24gb3IgdHlwZTogIiArIHN0YXRlbWVudCk7CiAgICAgICAgIHRoaXMuX3Rv
cExldmVsU3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7CisgICAgICAgIHRoaXMuX2dsb2JhbE5h
bWVDb250ZXh0LmFkZChzdGF0ZW1lbnQpOwogICAgIH0KICAgICAKICAgICB0b1N0cmluZygpCklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiBleHRl
bmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgYmFzZSkKKyAgICB7Cisg
ICAgICAgIHN1cGVyKG9yaWdpbik7CisgICAgICAgIHRoaXMuYmFzZSA9IGJhc2U7CisgICAgfQor
ICAgIAorICAgIGdldCByZXN1bHRUeXBlKCkgeyByZXR1cm4gdGhpcy5yZXN1bHRUeXBlRm9yR2V0
ID8gdGhpcy5yZXN1bHRUeXBlRm9yR2V0IDogdGhpcy5yZXN1bHRUeXBlRm9yQW5kOyB9CisgICAg
CisgICAgcmV3cml0ZUFmdGVyQ2xvbmluZygpCisgICAgeworICAgICAgICAvLyBBdCB0aGlzIHBv
aW50LCBub2RlLmJhc2UuaXNMVmFsdWUgd2lsbCBvbmx5IHJldHVybiB0cnVlIGlmIGl0J3MgcG9z
c2libGUgdG8gZ2V0IGEgcG9pbnRlciB0byBpdCwKKyAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCBu
byBsb25nZXIgc2VlIGFueSBEb3RFeHByZXNzaW9ucyBvciBJbmRleEV4cHJlc3Npb25zLiBBbHNv
LCBub2RlIGlzIGEgbmV3bHkgY3JlYXRlZAorICAgICAgICAvLyBub2RlIGFuZCBldmVyeXRoaW5n
IGJlbmVhdGggaXQgaXMgbmV3bHkgY3JlYXRlZCwgc28gd2UgY2FuIGVkaXQgaXQgaW4tcGxhY2Uu
CisgICAgICAgIAorICAgICAgICBpZiAoKHRoaXMuYmFzZS5pc0xWYWx1ZSB8fCB0aGlzLmJhc2VU
eXBlLmlzUmVmKSAmJiB0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICByZXR1cm4gbmV3IERl
cmVmZXJlbmNlRXhwcmVzc2lvbih0aGlzLm9yaWdpbiwgdGhpcy5jYWxsRm9yQW5kLCB0aGlzLnJl
c3VsdFR5cGUsIHRoaXMuY2FsbEZvckFuZC5yZXN1bHRUeXBlLmFkZHJlc3NTcGFjZSk7CisgICAg
ICAgIAorICAgICAgICBpZiAodGhpcy5jYWxsRm9yR2V0KQorICAgICAgICAgICAgcmV0dXJuIHRo
aXMuY2FsbEZvckdldDsKKyAgICAgICAgCisgICAgICAgIGlmICghdGhpcy5jYWxsRm9yQW5kKQor
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMub3JpZ2luLm9yaWdpblN0cmluZyArICI6
IFByb3BlcnR5IGFjY2VzcyB3aXRob3V0IGdldHRlciBhbmQgYW5kZXI6ICIgKyB0aGlzKTsKKyAg
ICAgICAgCisgICAgICAgIGxldCBhbm9uVmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKHRoaXMu
b3JpZ2luLCB0aGlzLmJhc2VUeXBlKTsKKyAgICAgICAgdGhpcy5jYWxsRm9yQW5kLmFyZ3VtZW50
TGlzdFswXSA9IHRoaXMuYmFzZVR5cGUudW5pZnlOb2RlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQo
dGhpcy5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAoYW5vblZhcikpOworICAgICAgICByZXR1cm4g
bmV3IENvbW1hRXhwcmVzc2lvbih0aGlzLm9yaWdpbiwgWworICAgICAgICAgICAgYW5vblZhciwK
KyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KHRoaXMub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFw
KGFub25WYXIpLCB0aGlzLmJhc2UsIHRoaXMuYmFzZVR5cGUpLAorICAgICAgICAgICAgbmV3IERl
cmVmZXJlbmNlRXhwcmVzc2lvbih0aGlzLm9yaWdpbiwgdGhpcy5jYWxsRm9yQW5kLCB0aGlzLnJl
c3VsdFR5cGUsIHRoaXMuY2FsbEZvckFuZC5yZXN1bHRUeXBlLmFkZHJlc3NTcGFjZSkKKyAgICAg
ICAgXSk7CisgICAgfQorICAgIAorICAgIHVwZGF0ZUNhbGxzKCkKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLmNhbGxGb3JHZXQpCisgICAgICAgICAgICB0aGlzLmNhbGxGb3JHZXQuYXJndW1lbnRM
aXN0WzBdID0gdGhpcy5iYXNlOworICAgICAgICBpZiAodGhpcy5jYWxsRm9yQW5kKQorICAgICAg
ICAgICAgdGhpcy5jYWxsRm9yQW5kLmFyZ3VtZW50TGlzdFswXSA9IHRoaXMuYmFzZVR5cGUuYXJn
dW1lbnRGb3JBbmRPdmVybG9hZCh0aGlzLm9yaWdpbiwgdGhpcy5iYXNlKTsKKyAgICAgICAgaWYg
KHRoaXMuY2FsbEZvclNldCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvclNldC5hcmd1bWVudExp
c3RbMF0gPSB0aGlzLmJhc2U7CisgICAgfQorICAgIAorICAgIGVtaXRHZXQoYmFzZSkKKyAgICB7
CisgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnZpc2l0KG5ldyBSZXdyaXRlcigpKTsKKyAgICAg
ICAgcmVzdWx0LmJhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQudXBkYXRlQ2FsbHMoKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5yZXdyaXRlQWZ0ZXJDbG9uaW5nKCk7CisgICAgfQorICAgIAor
ICAgIGVtaXRTZXQoYmFzZSwgdmFsdWUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gdGhp
cy52aXNpdChuZXcgUmV3cml0ZXIoKSk7CisgICAgICAgIGlmICghcmVzdWx0LmNhbGxGb3JTZXQp
CisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJp
bmcsICJDYW5ub3QgZW1pdCBzZXQgYmVjYXVzZTogIiArIHRoaXMuZXJyb3JGb3JTZXQudHlwZUVy
cm9yTWVzc2FnZSk7CisgICAgICAgIHJlc3VsdC5iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0
LnVwZGF0ZUNhbGxzKCk7CisgICAgICAgIHJlc3VsdC5jYWxsRm9yU2V0LmFyZ3VtZW50TGlzdFty
ZXN1bHQuY2FsbEZvclNldC5hcmd1bWVudExpc3QubGVuZ3RoIC0gMV0gPSB2YWx1ZTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5jYWxsRm9yU2V0OworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlSZXNvbHZlci5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eVJlc29sdmVyLmpzCShub25leGlz
dGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5UmVzb2x2ZXIu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgUHJvcGVydHlS
ZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgeworICAgIF92aXNpdFJWYWx1ZXNXaXRoaW5MVmFsdWUo
bm9kZSkKKyAgICB7CisgICAgICAgIGxldCB2aXNpdCA9IG5vZGUgPT4gbm9kZS52aXNpdCh0aGlz
KTsKKyAgICAgICAgCisgICAgICAgIGNsYXNzIFJWYWx1ZUZpbmRlciB7CisgICAgICAgICAgICB2
aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBu
b2RlLnN0cnVjdC52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBub2RlLmFycmF5LnZpc2l0KHRoaXMpOworICAgICAgICAgICAgICAgIHZpc2l0
KG5vZGUuaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB2
aXNpdFZhcmlhYmxlUmVmKG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmlzaXQobm9kZS5wdHIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihu
b2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0LnZpc2l0KHRo
aXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBub2RlLnZp
c2l0KG5ldyBSVmFsdWVGaW5kZXIoKSk7CisgICAgfQorICAgIAorICAgIF92aXNpdFByb3BlcnR5
QWNjZXNzKG5vZGUpCisgICAgeworICAgICAgICBsZXQgbmV3Tm9kZSA9IG5vZGUudmlzaXQobmV3
IE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIoKSk7CisgICAgICAgIG5ld05vZGUudmlzaXQodGhp
cyk7CisgICAgICAgIG5vZGUuYmVjb21lKG5ld05vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNp
dERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Zpc2l0UHJvcGVydHlB
Y2Nlc3Mobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUp
CisgICAgeworICAgICAgICB0aGlzLl92aXNpdFByb3BlcnR5QWNjZXNzKG5vZGUpOworICAgIH0K
KyAgICAKKyAgICBfaGFuZGxlUmVhZE1vZGlmeVdyaXRlKG5vZGUpCisgICAgeworICAgICAgICBs
ZXQgdHlwZSA9IG5vZGUub2xkVmFsdWVWYXIudHlwZTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIHR5cGUiKTsKKyAgICAgICAgbGV0IHNpbXBs
ZUxIUyA9IG5vZGUubFZhbHVlLnZpc2l0KG5ldyBOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyKCkp
OworICAgICAgICBpZiAoc2ltcGxlTEhTLmlzTFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIXNp
bXBsZUxIUy5hZGRyZXNzU3BhY2UpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5v
ZGUub3JpZ2luLm9yaWdpblN0cmluZyArICI6IExIUyB3aXRob3V0IGFkZHJlc3Mgc3BhY2U6ICIg
KyBzaW1wbGVMSFMpOworICAgICAgICAgICAgbGV0IHB0clR5cGUgPSBuZXcgUHRyVHlwZShub2Rl
Lm9yaWdpbiwgc2ltcGxlTEhTLmFkZHJlc3NTcGFjZSwgdHlwZSk7CisgICAgICAgICAgICBsZXQg
cHRyVmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG5vZGUub3JpZ2luLCBwdHJUeXBlKTsKKyAg
ICAgICAgICAgIG5vZGUuYmVjb21lKG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIFsK
KyAgICAgICAgICAgICAgICBub2RlLm9sZFZhbHVlVmFyLCBub2RlLm5ld1ZhbHVlVmFyLCBwdHJW
YXIsCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQoCisgICAgICAgICAgICAgICAgICAg
IG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHB0clZhciksCisgICAgICAgICAgICAgICAg
ICAgIG5ldyBNYWtlUHRyRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgc2ltcGxlTEhTKSwgcHRyVHlw
ZSksCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQoCisgICAgICAgICAgICAgICAgICAg
IG5vZGUub3JpZ2luLCBub2RlLm9sZFZhbHVlUmVmKCksCisgICAgICAgICAgICAgICAgICAgIG5l
dyBEZXJlZmVyZW5jZUV4cHJlc3Npb24oCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLm9y
aWdpbiwgVmFyaWFibGVSZWYud3JhcChwdHJWYXIpLCB0eXBlLCBzaW1wbGVMSFMuYWRkcmVzc1Nw
YWNlKSwKKyAgICAgICAgICAgICAgICAgICAgdHlwZSksCisgICAgICAgICAgICAgICAgbmV3IEFz
c2lnbm1lbnQobm9kZS5vcmlnaW4sIG5vZGUubmV3VmFsdWVSZWYoKSwgbm9kZS5uZXdWYWx1ZUV4
cCwgdHlwZSksCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQoCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUub3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBuZXcgRGVyZWZlcmVuY2VF
eHByZXNzaW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIFZhcmlhYmxl
UmVmLndyYXAocHRyVmFyKSwgdHlwZSwgc2ltcGxlTEhTLmFkZHJlc3NTcGFjZSksCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUubmV3VmFsdWVSZWYoKSwgdHlwZSksCisgICAgICAgICAgICAgICAg
bm9kZS5yZXN1bHRFeHAKKyAgICAgICAgICAgIF0pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmxWYWx1ZS5iYXNlLCBub2RlLmxWYWx1ZS5i
YXNlVHlwZSk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1ZUV4cCA9IG5ldyBDb21tYUV4cHJlc3Np
b24obm9kZS5vcmlnaW4sIFsKKyAgICAgICAgICAgIG5vZGUub2xkVmFsdWVWYXIsIG5vZGUubmV3
VmFsdWVWYXIsCisgICAgICAgICAgICBuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwgbm9kZS5v
bGRWYWx1ZVJlZigpLCBub2RlLmxWYWx1ZS5lbWl0R2V0KHJlc3VsdC5vbGRWYWx1ZVJlZigpKSwg
dHlwZSksCisgICAgICAgICAgICBuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwgbm9kZS5uZXdW
YWx1ZVJlZigpLCBub2RlLm5ld1ZhbHVlRXhwLCB0eXBlKSwKKyAgICAgICAgICAgIG5vZGUubFZh
bHVlLmVtaXRTZXQocmVzdWx0Lm9sZFZhbHVlUmVmKCksIG5vZGUubmV3VmFsdWVSZWYoKSkKKyAg
ICAgICAgXSk7CisgICAgICAgIHJlc3VsdC5yZXN1bHRFeHAgPSBub2RlLm5ld1ZhbHVlUmVmKCk7
CisgICAgICAgIHRoaXMuX2hhbmRsZVJlYWRNb2RpZnlXcml0ZShyZXN1bHQpOworICAgICAgICBu
b2RlLmJlY29tZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUubmV3VmFsdWVFeHAudmlzaXQo
dGhpcyk7CisgICAgICAgIG5vZGUucmVzdWx0RXhwLnZpc2l0KHRoaXMpOworICAgICAgICB0aGlz
Ll92aXNpdFJWYWx1ZXNXaXRoaW5MVmFsdWUobm9kZS5sVmFsdWUpOworICAgICAgICB0aGlzLl9o
YW5kbGVSZWFkTW9kaWZ5V3JpdGUobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0QXNzaWdu
bWVudChub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fdmlzaXRSVmFsdWVzV2l0aGluTFZhbHVl
KG5vZGUubGhzKTsKKyAgICAgICAgbm9kZS5yaHMudmlzaXQodGhpcyk7CisgICAgICAgIAorICAg
ICAgICBsZXQgc2ltcGxlTEhTID0gbm9kZS5saHMudmlzaXQobmV3IE5vcm1hbFVzZVByb3BlcnR5
UmVzb2x2ZXIoKSk7CisgICAgICAgIGlmIChzaW1wbGVMSFMuaXNMVmFsdWUpIHsKKyAgICAgICAg
ICAgIG5vZGUubGhzLmJlY29tZShzaW1wbGVMSFMpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIShub2RlLmxocyBpbnN0YW5jZW9mIFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbikpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhw
ZWN0ZWQgbGhzIHR5cGU6ICIgKyBub2RlLmxocy5jb25zdHJ1Y3Rvci5uYW1lKTsKKyAgICAgICAg
CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2Rl
Lm9yaWdpbiwgbm9kZS5saHMuYmFzZSwgbm9kZS5saHMuYmFzZVR5cGUpOworICAgICAgICBsZXQg
cmVzdWx0VmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG5vZGUub3JpZ2luLCBub2RlLnR5cGUp
OworICAgICAgICByZXN1bHQubmV3VmFsdWVFeHAgPSBuZXcgQ29tbWFFeHByZXNzaW9uKG5vZGUu
b3JpZ2luLCBbCisgICAgICAgICAgICByZXN1bHRWYXIsCisgICAgICAgICAgICBuZXcgQXNzaWdu
bWVudChub2RlLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChyZXN1bHRWYXIpLCBub2RlLnJocywg
bm9kZS50eXBlKSwKKyAgICAgICAgICAgIG5vZGUubGhzLmVtaXRTZXQocmVzdWx0Lm9sZFZhbHVl
UmVmKCksIFZhcmlhYmxlUmVmLndyYXAocmVzdWx0VmFyKSkKKyAgICAgICAgXSk7CisgICAgICAg
IHJlc3VsdC5yZXN1bHRFeHAgPSBWYXJpYWJsZVJlZi53cmFwKHJlc3VsdFZhcik7CisgICAgICAg
IHRoaXMuX2hhbmRsZVJlYWRNb2RpZnlXcml0ZShyZXN1bHQpOworICAgICAgICBub2RlLmJlY29t
ZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5vZGUp
CisgICAgeworICAgICAgICBzdXBlci52aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5vZGUpOworICAg
ICAgICBpZiAoIW5vZGUubFZhbHVlLmlzTFZhbHVlKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdU
eXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTm90IGFuIGx2YWx1ZTogIiArIG5v
ZGUubFZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9u
KG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24o
bm9kZSk7CisgICAgICAgIGlmICghbm9kZS5sVmFsdWUuaXNMVmFsdWUpCisgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOb3QgYW4gbHZh
bHVlOiAiICsgbm9kZS5sVmFsdWUpOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICsz
NiwxOSBAQCBjbGFzcyBQdHJUeXBlIGV4dGVuZHMgUmVmZXJlbmNlVHlwZSB7CiAgICAgICAgIHJl
dHVybiB0aGlzLmVsZW1lbnRUeXBlLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIuZWxl
bWVudFR5cGUpOwogICAgIH0KICAgICAKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2FkKG9yaWdp
biwgdmFsdWUpCisgICAgeworICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3Jp
Z2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMgbm90IHZhbGlkIik7CisgICAgfQorICAg
IGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbiwgdHlwZSkKKyAgICB7CisgICAgICAg
IHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJQb2ludGVyIHN1YnNj
cmlwdCBpcyBub3QgdmFsaWQiKTsKKyAgICB9CisgICAgcmV0dXJuVHlwZUZyb21BbmRPdmVybG9h
ZChvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZTsKKyAgICB9
CisKICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlw
ZSArICJeICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcwko
bm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Y2xhc3MgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24geworICAg
IGNvbnN0cnVjdG9yKG9yaWdpbiwgbFZhbHVlLCB0eXBlID0gbnVsbCkKKyAgICB7CisgICAgICAg
IHN1cGVyKG9yaWdpbik7CisgICAgICAgIHRoaXMuX2xWYWx1ZSA9IGxWYWx1ZTsKKyAgICAgICAg
dGhpcy5vbGRWYWx1ZVZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShvcmlnaW4sIHR5cGUpOwor
ICAgICAgICB0aGlzLm5ld1ZhbHVlVmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG9yaWdpbiwg
dHlwZSk7CisgICAgICAgIHRoaXMubmV3VmFsdWVFeHAgPSBudWxsOworICAgICAgICB0aGlzLnJl
c3VsdEV4cCA9IG51bGw7CisgICAgfQorICAgIAorICAgIGdldCBsVmFsdWUoKSB7IHJldHVybiB0
aGlzLl9sVmFsdWU7IH0KKyAgICAKKyAgICBvbGRWYWx1ZVJlZigpIHsgcmV0dXJuIFZhcmlhYmxl
UmVmLndyYXAodGhpcy5vbGRWYWx1ZVZhcik7IH0KKyAgICBuZXdWYWx1ZVJlZigpIHsgcmV0dXJu
IFZhcmlhYmxlUmVmLndyYXAodGhpcy5uZXdWYWx1ZVZhcik7IH0KKyAgICAKKyAgICB0b1N0cmlu
ZygpCisgICAgeworICAgICAgICByZXR1cm4gIlJNVygiICsgdGhpcy5sVmFsdWUgKyAiLCAiICsg
dGhpcy5vbGRWYWx1ZVZhciArICIsICIgKyB0aGlzLm5ld1ZhbHVlVmFyICsgIiwgIiArIHRoaXMu
bmV3VmFsdWVFeHAgKyAiLCAiICsgdGhpcy5yZXN1bHRFeHAgKyAiKSI7CisgICAgfQorfQorCklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU5hbWVzLmpzCShy
ZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZl
TmFtZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDI4IEBACiAgKi8KICJ1c2Ugc3Ry
aWN0IjsKIAotZnVuY3Rpb24gcmVzb2x2ZU5hbWVzKHByb2dyYW0pCitmdW5jdGlvbiBjcmVhdGVO
YW1lUmVzb2x2ZXIocHJvZ3JhbSkKIHsKLSAgICBwcm9ncmFtLnZpc2l0KG5ldyBOYW1lUmVzb2x2
ZXIoKSk7CisgICAgcmV0dXJuIG5ldyBOYW1lUmVzb2x2ZXIocHJvZ3JhbS5nbG9iYWxOYW1lQ29u
dGV4dCk7CiB9CisKK2Z1bmN0aW9uIHJlc29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSwgbmFtZVJl
c29sdmVyKQoreworICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkK
KyAgICAgICAgbmFtZVJlc29sdmVyLmRvU3RhdGVtZW50KHR5cGUpOworfQorCitmdW5jdGlvbiBy
ZXNvbHZlTmFtZXNJblByb3RvY29scyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpCit7CisgICAgZm9y
IChsZXQgcHJvdG9jb2wgb2YgcHJvZ3JhbS5wcm90b2NvbHMudmFsdWVzKCkpCisgICAgICAgIG5h
bWVSZXNvbHZlci5kb1N0YXRlbWVudChwcm90b2NvbCk7Cit9CisKK2Z1bmN0aW9uIHJlc29sdmVO
YW1lc0luRnVuY3Rpb25zKHByb2dyYW0sIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGxldCBm
dW5jcyBvZiBwcm9ncmFtLmZ1bmN0aW9ucy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGxldCBm
dW5jIG9mIGZ1bmNzKQorICAgICAgICAgICAgbmFtZVJlc29sdmVyLmRvU3RhdGVtZW50KGZ1bmMp
OworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2
ZU92ZXJsb2FkSW1wbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9SZXNvbHZlT3ZlcmxvYWRJbXBsLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlT3ZlcmxvYWRJbXBsLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw5IEBACiAKIGZ1bmN0aW9uIHJlc29sdmVPdmVybG9hZEltcGwoZnVu
Y3Rpb25zLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQogeworICAg
IGlmICghZnVuY3Rpb25zKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgZnVuY3Rpb25z
OyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IHRoZSBjYWxsZXIuIik7CisgICAgCiAg
ICAgbGV0IGZhaWx1cmVzID0gW107CiAgICAgbGV0IHN1Y2Nlc3NlcyA9IFtdOwogICAgIGZvciAo
bGV0IGZ1bmMgb2YgZnVuY3Rpb25zKSB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9SZXNvbHZlUHJvcGVydGllcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisidXNlIHN0cmljdCI7CisKKy8vIFRoaXMgdHVybnMgRG90RXhwcmVzc2lvbiBh
bmQgSW5kZXhFeHByZXNzaW9uIGludG8gY2FsbHMgdG8gZ2V0dGVycyAob3BlcmF0b3IuZmllbGQg
YW5kIG9wZXJhdG9yW10pLAorLy8gc2V0dGVycyAob3BlcmF0b3IuZmllbGQ9IGFuZCBvcGVyYXRv
cltdPSksIGFuZCBhbmRlcnMgKG9wZXJhdG9yJi5maWVsZCBhbmQgb3BlcmF0b3ImW10pLiBUaGlz
IGludm9sdmVzCisvLyB0cmFuc2Zvcm1pbmcgYXNzaWdubWVudHMgYW5kIFJNVydzIHRvIGRvIGx2
YWx1ZSBlbXVsYXRpb24uCitmdW5jdGlvbiByZXNvbHZlUHJvcGVydGllcyhwcm9ncmFtKQorewor
ICAgIHByb2dyYW0udmlzaXQobmV3IFByb3BlcnR5UmVzb2x2ZXIoKSk7Cit9CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlVHlwZURlZnMuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVR5cGVEZWZzLmpzCShyZXZp
c2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlVHlw
ZURlZnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDI2IEBACiAgKi8KICJ1c2Ugc3Ry
aWN0IjsKIAotZnVuY3Rpb24gcmVzb2x2ZVR5cGVEZWZzKHByb2dyYW0pCitmdW5jdGlvbiByZXNv
bHZlVHlwZURlZnNJblR5cGVzKHByb2dyYW0pCiB7Ci0gICAgcHJvZ3JhbS52aXNpdChuZXcgVHlw
ZURlZlJlc29sdmVyKCkpOworICAgIGxldCByZXNvbHZlciA9IG5ldyBUeXBlRGVmUmVzb2x2ZXIo
KTsKKyAgICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0udHlwZXMudmFsdWVzKCkpCisgICAgICAg
IHR5cGUudmlzaXQocmVzb2x2ZXIpOworfQorCitmdW5jdGlvbiByZXNvbHZlVHlwZURlZnNJblBy
b3RvY29scyhwcm9ncmFtKQoreworICAgIGxldCByZXNvbHZlciA9IG5ldyBUeXBlRGVmUmVzb2x2
ZXIoKTsKKyAgICBmb3IgKGxldCBwcm90b2NvbCBvZiBwcm9ncmFtLnByb3RvY29scy52YWx1ZXMo
KSkKKyAgICAgICAgcHJvdG9jb2wudmlzaXQocmVzb2x2ZXIpOworfQorCitmdW5jdGlvbiByZXNv
bHZlVHlwZURlZnNJbkZ1bmN0aW9ucyhwcm9ncmFtKQoreworICAgIGxldCByZXNvbHZlciA9IG5l
dyBUeXBlRGVmUmVzb2x2ZXIoKTsKKyAgICBmb3IgKGxldCBmdW5jcyBvZiBwcm9ncmFtLmZ1bmN0
aW9ucy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmNzKQorICAgICAg
ICAgICAgZnVuYy52aXNpdChyZXNvbHZlcik7CisgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXR1cm5DaGVja2VyLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgY2xhc3MgUmV0dXJuQ2hlY2tlciBleHRlbmRz
IFZpc2l0b3IgewogCiAgICAgX2lzQm9vbENhc3RGcm9tTGl0ZXJhbFRydWUobm9kZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBub2RlLmlzQ2FzdCAmJiBub2RlLnJldHVyblR5cGUgaW5zdGFuY2Vv
ZiBUeXBlUmVmICYmIG5vZGUucmV0dXJuVHlwZS5lcXVhbHModGhpcy5fcHJvZ3JhbS5pbnRyaW5z
aWNzLmJvb2wpICYmIG5vZGUuYXJndW1lbnRMaXN0Lmxlbmd0aCA9PSAxICYmIG5vZGUuYXJndW1l
bnRMaXN0WzBdLmxpc3QubGVuZ3RoID09IDEgJiYgbm9kZS5hcmd1bWVudExpc3RbMF0ubGlzdFsw
XSBpbnN0YW5jZW9mIEJvb2xMaXRlcmFsICYmIG5vZGUuYXJndW1lbnRMaXN0WzBdLmxpc3RbMF0u
dmFsdWU7CisgICAgICAgIHJldHVybiBub2RlLmlzQ2FzdCAmJiBub2RlLnJldHVyblR5cGUgaW5z
dGFuY2VvZiBUeXBlUmVmICYmIG5vZGUucmV0dXJuVHlwZS5lcXVhbHModGhpcy5fcHJvZ3JhbS5p
bnRyaW5zaWNzLmJvb2wpICYmIG5vZGUuYXJndW1lbnRMaXN0Lmxlbmd0aCA9PSAxICYmIG5vZGUu
YXJndW1lbnRMaXN0WzBdIGluc3RhbmNlb2YgQm9vbExpdGVyYWwgJiYgbm9kZS5hcmd1bWVudExp
c3RbMF0udmFsdWU7CiAgICAgfQogCiAgICAgdmlzaXRXaGlsZUxvb3Aobm9kZSkKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCShyZXZpc2lvbiAyMjIxMjMp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjcsMTAgKzI3LDkgQEAKIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoYXZlIHNlbnNp
YmxlIGJlaGF2aW9yIHdoZW4gaXQgZW5jb3VudGVycyBkZWZpbml0aW9ucyB0aGF0IGl0IGNhbm5v
dCBoYW5kbGUuIFJpZ2h0CiAvLyBub3cgd2UgYXJlIGhhY2tpc2hseSBwcmV2ZW50aW5nIHRoaXMg
Ynkgd3JhcHBpbmcgdGhpbmdzIGluIFR5cGVSZWYuIFRoYXQncyBwcm9iYWJseSB3cm9uZy4KIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYyMDgKLWNsYXNzIFJl
d3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgeworY2xhc3MgUmV3cml0ZXIgewogICAgIGNvbnN0
cnVjdG9yKCkKICAgICB7Ci0gICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX21hcHBpbmcg
PSBuZXcgTWFwKCk7CiAgICAgfQogICAgIApAQCAtOTksNyArOTgsNyBAQCBjbGFzcyBSZXdyaXRl
ciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYXJpYWJs
ZURlY2woCiAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5uYW1lLAogICAgICAgICAgICAg
bm9kZS50eXBlLnZpc2l0KHRoaXMpLAotICAgICAgICAgICAgbm9kZS5pbml0aWFsaXplciA/IG5v
ZGUuaW5pdGlhbGl6ZXIudmlzaXQodGhpcykgOiBudWxsKTsKKyAgICAgICAgICAgIE5vZGUudmlz
aXQobm9kZS5pbml0aWFsaXplciwgdGhpcykpOwogICAgICAgICB0aGlzLl9tYXBOb2RlKG5vZGUs
IHJlc3VsdCk7CiAgICAgICAgIHJlc3VsdC5lUHRyID0gbm9kZS5lUHRyOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwpAQCAtMTMxLDcgKzEzMCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlz
aXRvckJhc2UgewogICAgIHZpc2l0VHlwZVJlZihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJl
c3VsdCA9IG5ldyBUeXBlUmVmKG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUudHlwZUFyZ3Vt
ZW50cy5tYXAodHlwZUFyZ3VtZW50ID0+IHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKSkpOwotICAg
ICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51
bGw7CisgICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTE2MywyNCArMTYyLDU0IEBA
IGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0QXNzaWdubWVu
dChub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBc3NpZ25tZW50KG5vZGUu
b3JpZ2luLCBub2RlLmxocy52aXNpdCh0aGlzKSwgbm9kZS5yaHMudmlzaXQodGhpcykpOwotICAg
ICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51
bGw7CisgICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUudmlzaXQodGhp
cykpOworICAgICAgICByZXN1bHQub2xkVmFsdWVWYXIgPSBub2RlLm9sZFZhbHVlVmFyLnZpc2l0
KHRoaXMpOworICAgICAgICByZXN1bHQubmV3VmFsdWVWYXIgPSBub2RlLm5ld1ZhbHVlVmFyLnZp
c2l0KHRoaXMpOworICAgICAgICByZXN1bHQubmV3VmFsdWVFeHAgPSBub2RlLm5ld1ZhbHVlRXhw
LnZpc2l0KHRoaXMpOworICAgICAgICByZXN1bHQucmVzdWx0RXhwID0gbm9kZS5yZXN1bHRFeHAu
dmlzaXQodGhpcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIHZp
c2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0
ID0gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5wdHIudmlzaXQo
dGhpcykpOwotICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNp
dCh0aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5
cGUsIHRoaXMpOworICAgICAgICByZXN1bHQuYWRkcmVzc1NwYWNlID0gbm9kZS5hZGRyZXNzU3Bh
Y2U7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIF9oYW5kbGVQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24ocmVzdWx0LCBub2RlKQorICAgIHsKKyAgICAgICAgcmVzdWx0
LnBvc3NpYmxlR2V0T3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkczsKKyAgICAg
ICAgcmVzdWx0LnBvc3NpYmxlU2V0T3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZVNldE92ZXJsb2Fk
czsKKyAgICAgICAgcmVzdWx0LnBvc3NpYmxlQW5kT3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZUFu
ZE92ZXJsb2FkczsKKyAgICAgICAgcmVzdWx0LmJhc2VUeXBlID0gTm9kZS52aXNpdChub2RlLmJh
c2VUeXBlLCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LmNhbGxGb3JHZXQgPSBOb2RlLnZpc2l0KG5v
ZGUuY2FsbEZvckdldCwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlRm9yR2V0ID0g
Tm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JHZXQsIHRoaXMpOworICAgICAgICByZXN1bHQu
Y2FsbEZvckFuZCA9IE5vZGUudmlzaXQobm9kZS5jYWxsRm9yQW5kLCB0aGlzKTsKKyAgICAgICAg
cmVzdWx0LnJlc3VsdFR5cGVGb3JBbmQgPSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckFu
ZCwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5jYWxsRm9yU2V0ID0gTm9kZS52aXNpdChub2RlLmNh
bGxGb3JTZXQsIHRoaXMpOworICAgICAgICByZXN1bHQuZXJyb3JGb3JTZXQgPSBub2RlLmVycm9y
Rm9yU2V0OworICAgICAgICByZXN1bHQudXBkYXRlQ2FsbHMoKTsKKyAgICB9CisgICAgCiAgICAg
dmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3
IERvdEV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpLCBub2Rl
LmZpZWxkTmFtZSk7Ci0gICAgICAgIHJlc3VsdC5zdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3RUeXBl
ID8gbm9kZS5zdHJ1Y3RUeXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKLSAgICAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byByZXdyaXRlIGZpZWxkLCBzaW5jZSB0aGlzIGlzIGEgZGVlcCByZWZlcmVuY2Ug
Z29pbmcgb3V0IG9mIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgLy8gQWxzbywgdGhpcyBpcyBzZXQg
dXAgZHVyaW5nIGlubGluaW5nLCBzbyB3ZSdyZSBhbHJlYWR5IGZ1bGx5IG1vbm9tb3JwaGlzZWQu
Ci0gICAgICAgIHJlc3VsdC5maWVsZCA9IG5vZGUuZmllbGQ7CisgICAgICAgIHRoaXMuX2hhbmRs
ZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQsIG5vZGUpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAg
IHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBJbmRleEV4cHJlc3Npb24obm9kZS5vcmlnaW4s
IG5vZGUuYXJyYXkudmlzaXQodGhpcyksIG5vZGUuaW5kZXgudmlzaXQodGhpcykpOworICAgICAg
ICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ocmVzdWx0LCBub2RlKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0yMTYsNyArMjQ1LDcgQEAgY2xh
c3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRSZXR1cm4o
bm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgUmV0dXJuKG5vZGUub3JpZ2luLCBub2Rl
LnZhbHVlID8gbm9kZS52YWx1ZS52aXNpdCh0aGlzKSA6IG51bGwpOworICAgICAgICByZXR1cm4g
bmV3IFJldHVybihub2RlLm9yaWdpbiwgTm9kZS52aXNpdChub2RlLnZhbHVlLCB0aGlzKSk7CiAg
ICAgfQogICAgIAogICAgIHZpc2l0Q29udGludWUobm9kZSkKQEAgLTI0MCw3ICsyNjksNyBAQCBj
bGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdEdlbmVyaWNMaXRl
cmFsVHlwZShub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBub2RlLmNvbnN0
cnVjdG9yKG5vZGUub3JpZ2luLCBub2RlLnZhbHVlKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBu
b2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQu
dHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgcmVzdWx0LnByZWZl
cnJlZFR5cGUgPSBub2RlLnByZWZlcnJlZFR5cGUudmlzaXQodGhpcyk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpAQCAtMjYxLDcgKzI5MCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVu
ZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0TnVsbFR5cGUobm9kZSkKICAgICB7CiAgICAgICAg
IGxldCByZXN1bHQgPSBuZXcgTnVsbFR5cGUobm9kZS5vcmlnaW4pOwotICAgICAgICByZXN1bHQu
dHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAg
IHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjgwLDcgKzMwOSw3IEBAIGNsYXNzIFJld3JpdGVyIGV4
dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICByZXN1bHQucG9zc2libGVPdmVybG9hZHMgPSBu
b2RlLnBvc3NpYmxlT3ZlcmxvYWRzOwogICAgICAgICBpZiAobm9kZS5pc0Nhc3QpCiAgICAgICAg
ICAgICByZXN1bHQuc2V0Q2FzdERhdGEobm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpKTsKLSAg
ICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBub2RlLnJlc3VsdFR5cGUgPyBub2RlLnJlc3VsdFR5
cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IE5vZGUu
dmlzaXQobm9kZS5yZXN1bHRUeXBlLCB0aGlzKTsKICAgICAgICAgcmVzdWx0LnJlc3VsdEVQdHIg
PSBub2RlLnJlc3VsdEVQdHI7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjkw
LDcgKzMxOSw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAg
ICBsZXQgcmVzdWx0ID0gbmV3IENhbGxFeHByZXNzaW9uKAogICAgICAgICAgICAgbm9kZS5vcmln
aW4sIG5vZGUubmFtZSwKICAgICAgICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodHlwZUFy
Z3VtZW50ID0+IHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKSksCi0gICAgICAgICAgICBub2RlLmFy
Z3VtZW50TGlzdC5tYXAoYXJndW1lbnQgPT4gYXJndW1lbnQudmlzaXQodGhpcykpKTsKKyAgICAg
ICAgICAgIG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBOb2RlLnZpc2l0KGFyZ3Vt
ZW50LCB0aGlzKSkpOwogICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGVyaXZlZENhbGxEYXRh
KG5vZGUsIHJlc3VsdCk7CiAgICAgfQogICAgIApAQCAtMjk4LDcgKzMyNyw3IEBAIGNsYXNzIFJl
d3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9
IG5ldyBGdW5jdGlvbkxpa2VCbG9jaygKICAgICAgICAgICAgIG5vZGUub3JpZ2luLAotICAgICAg
ICAgICAgbm9kZS5yZXR1cm5UeXBlID8gbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpIDogbnVs
bCwKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXR1cm5UeXBlLCB0aGlzKSwKICAgICAg
ICAgICAgIG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBhcmd1bWVudC52aXNpdCh0
aGlzKSksCiAgICAgICAgICAgICBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJh
bWV0ZXIudmlzaXQodGhpcykpLAogICAgICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsK
QEAgLTMxNSw3ICszNDQsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
IAogICAgIHZpc2l0SWZTdGF0ZW1lbnQobm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcg
SWZTdGF0ZW1lbnQobm9kZS5vcmlnaW4sIG5vZGUuY29uZGl0aW9uYWwudmlzaXQodGhpcyksIG5v
ZGUuYm9keS52aXNpdCh0aGlzKSwgbm9kZS5lbHNlQm9keSA/IG5vZGUuZWxzZUJvZHkudmlzaXQo
dGhpcykgOiB1bmRlZmluZWQpOworICAgICAgICByZXR1cm4gbmV3IElmU3RhdGVtZW50KG5vZGUu
b3JpZ2luLCBub2RlLmNvbmRpdGlvbmFsLnZpc2l0KHRoaXMpLCBub2RlLmJvZHkudmlzaXQodGhp
cyksIE5vZGUudmlzaXQobm9kZS5lbHNlQm9keSwgdGhpcykpOwogICAgIH0KIAogICAgIHZpc2l0
V2hpbGVMb29wKG5vZGUpCkBAIC0zMzEsMjIgKzM2MCwyNCBAQCBjbGFzcyBSZXdyaXRlciBleHRl
bmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdEZvckxvb3Aobm9kZSkKICAgICB7CiAgICAgICAg
IHJldHVybiBuZXcgRm9yTG9vcChub2RlLm9yaWdpbiwKLSAgICAgICAgICAgIG5vZGUuaW5pdGlh
bGl6YXRpb24gPyBub2RlLmluaXRpYWxpemF0aW9uLnZpc2l0KHRoaXMpIDogdW5kZWZpbmVkLAot
ICAgICAgICAgICAgbm9kZS5jb25kaXRpb24gPyBub2RlLmNvbmRpdGlvbi52aXNpdCh0aGlzKSA6
IHVuZGVmaW5lZCwKLSAgICAgICAgICAgIG5vZGUuaW5jcmVtZW50ID8gbm9kZS5pbmNyZW1lbnQu
dmlzaXQodGhpcykgOiB1bmRlZmluZWQsCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5p
dGlhbGl6YXRpb24sIHRoaXMpLAorICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLmNvbmRpdGlv
biwgdGhpcyksCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5jcmVtZW50LCB0aGlzKSwK
ICAgICAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKSk7CiAgICAgfQogICAgIAotICAgIHZp
c2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkK
ICAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTGV0RXhwcmVzc2lvbihub2RlLm9yaWdp
bik7Ci0gICAgICAgIHJlc3VsdC5pbmRleCA9IG5vZGUuaW5kZXg7Ci0gICAgICAgIHJlc3VsdC50
eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKLSAgICAgICAg
cmVzdWx0LmFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudC52aXNpdCh0aGlzKTsKKyAgICAgICAgbGV0
IHJlc3VsdCA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwgbm9kZS50eXBlLnZp
c2l0KHRoaXMpKTsKKyAgICAgICAgcmVzdWx0Ll9pbmRleCA9IG5vZGUuX2luZGV4OwogICAgICAg
ICB0aGlzLl9tYXBOb2RlKG5vZGUsIHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdC5ib2R5ID0gbm9k
ZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgICAgICByZXN1bHQuZVB0ciA9IG5vZGUuZVB0cjsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisgICAgdmlzaXRJZGVudGl0eUV4cHJl
c3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgSWRlbnRpdHlFeHByZXNzaW9u
KG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKHJldmlzaW9uIDIy
MjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5q
cwkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTggQEAgbmF0aXZlIGludCBvcGVyYXRvcioo
aW50LCBpbnQpOwogbmF0aXZlIHVpbnQgb3BlcmF0b3IqKHVpbnQsIHVpbnQpOwogbmF0aXZlIGlu
dCBvcGVyYXRvci8oaW50LCBpbnQpOwogbmF0aXZlIHVpbnQgb3BlcmF0b3IvKHVpbnQsIHVpbnQp
OworbmF0aXZlIGludCBvcGVyYXRvciYoaW50LCBpbnQpOworbmF0aXZlIGludCBvcGVyYXRvcnwo
aW50LCBpbnQpOworbmF0aXZlIGludCBvcGVyYXRvcl4oaW50LCBpbnQpOworbmF0aXZlIGludCBv
cGVyYXRvcn4oaW50KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3I8PChpbnQsIHVpbnQpOworbmF0aXZl
IGludCBvcGVyYXRvcj4+KGludCwgdWludCk7CituYXRpdmUgdWludCBvcGVyYXRvciYodWludCwg
dWludCk7CituYXRpdmUgdWludCBvcGVyYXRvcnwodWludCwgdWludCk7CituYXRpdmUgdWludCBv
cGVyYXRvcl4odWludCwgdWludCk7CituYXRpdmUgdWludCBvcGVyYXRvcn4odWludCk7CituYXRp
dmUgdWludCBvcGVyYXRvcjw8KHVpbnQsIHVpbnQpOworbmF0aXZlIHVpbnQgb3BlcmF0b3I+Pih1
aW50LCB1aW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPT0oaW50LCBpbnQpOwogbmF0aXZlIGJv
b2wgb3BlcmF0b3I9PSh1aW50LCB1aW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPT0oYm9vbCwg
Ym9vbCk7CkBAIC02OCw2ICs4MCwzNSBAQCBuYXRpdmUgYm9vbCBvcGVyYXRvcj4odWludCwgdWlu
dCk7CiBuYXRpdmUgYm9vbCBvcGVyYXRvcj49KGludCwgaW50KTsKIG5hdGl2ZSBib29sIG9wZXJh
dG9yPj0odWludCwgdWludCk7CiAKK2Jvb2wgb3BlcmF0b3ImKGJvb2wgYSwgYm9vbCBiKQorewor
ICAgIGlmIChhKQorICAgICAgICByZXR1cm4gYjsKKyAgICByZXR1cm4gZmFsc2U7Cit9Citib29s
IG9wZXJhdG9yfChib29sIGEsIGJvb2wgYikKK3sKKyAgICBpZiAoYSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxz
ZTsKK30KK2Jvb2wgb3BlcmF0b3JeKGJvb2wgYSwgYm9vbCBiKQoreworICAgIGlmIChhKQorICAg
ICAgICByZXR1cm4gIWI7CisgICAgcmV0dXJuIGI7Cit9Citib29sIG9wZXJhdG9yfihib29sIHZh
bHVlKQoreworICAgIHJldHVybiAhdmFsdWU7Cit9CisKK3Byb3RvY29sIEFkZGFibGUgeworICAg
IEFkZGFibGUgb3BlcmF0b3IrKEFkZGFibGUsIEFkZGFibGUpOworfQorCiBwcm90b2NvbCBFcXVh
dGFibGUgewogICAgIGJvb2wgb3BlcmF0b3I9PShFcXVhdGFibGUsIEVxdWF0YWJsZSk7CiB9CkBA
IC05Miw0ICsxMzMsOSBAQCBuYXRpdmUgdGhyZWFkIFReIG9wZXJhdG9yJltdPFQ+KHRocmVhZCBU
CiBuYXRpdmUgdGhyZWFkZ3JvdXAgVF4gb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KHRocmVhZGdy
b3VwIFRbXSwgdWludCk7CiBuYXRpdmUgZGV2aWNlIFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZl
PihkZXZpY2UgVFtdLCB1aW50KTsKIG5hdGl2ZSBjb25zdGFudCBUXiBvcGVyYXRvciZbXTxUOnBy
aW1pdGl2ZT4oY29uc3RhbnQgVFtdLCB1aW50KTsKKworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVu
Z3RoPFQ+KHRocmVhZCBUW10pOworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6cHJpbWl0
aXZlPih0aHJlYWRncm91cCBUW10pOworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6cHJp
bWl0aXZlPihkZXZpY2UgVFtdKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOnByaW1p
dGl2ZT4oY29uc3RhbnQgVFtdKTsKIGA7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDUgKzU5LDExIEBAIGNsYXNzIFN0cnVjdExheW91dEJ1aWxk
ZXIgZXh0ZW5kcyBWaXNpdG8KICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVHlwZSBkb2Vz
IG5vdCBoYXZlIHNpemU6ICIgKyBub2RlLnR5cGUpOwogICAgICAgICB0aGlzLl9vZmZzZXQgKz0g
c2l6ZTsKICAgICB9CisgICAgCisgICAgdmlzaXROYXRpdmVGdW5jSW5zdGFuY2Uobm9kZSkKKyAg
ICB7CisgICAgICAgIHN1cGVyLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKG5vZGUpOworICAgICAg
ICBub2RlLmZ1bmMuZGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRhKG5vZGUuaW1w
bGVtZW50YXRpb25EYXRhKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1N0cnVjdFR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTcs
MjEgKzU3LDI5IEBAIGNsYXNzIFN0cnVjdFR5cGUgZXh0ZW5kcyBUeXBlIHsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgaW5zdGFudGlhdGUodHlwZUFyZ3VtZW50cywg
bW9kZSkKKyAgICBpbnN0YW50aWF0ZSh0eXBlQXJndW1lbnRzID0gbnVsbCkKICAgICB7Ci0gICAg
ICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSB0aGlzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0
aCkKLSAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcs
ICJXcm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgdG8gaW5zdGFudGlhdGlvbiIpOworICAg
ICAgICBsZXQgc3Vic3RpdHV0aW9uID0gbnVsbDsKKyAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXJz
ID0gdGhpcy50eXBlUGFyYW1ldGVyczsKICAgICAgICAgCi0gICAgICAgIGlmICghdHlwZUFyZ3Vt
ZW50cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgaWYgKHR5cGVB
cmd1bWVudHMpIHsKKyAgICAgICAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSB0aGlz
LnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVF
cnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRz
IHRvIGluc3RhbnRpYXRpb24iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCF0eXBl
QXJndW1lbnRzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc3Vic3RpdHV0aW9uID0gbmV3IFN1YnN0aXR1dGlvbih0aGlzLnR5
cGVQYXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKTsKKyAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJz
ID0gW107CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBu
ZXcgU3Vic3RpdHV0aW9uKHRoaXMudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOwotICAg
ICAgICBsZXQgaW5zdGFudGlhdGVJbW1lZGlhdGVzID0gbW9kZSA9PSAic2hhbGxvdyIgPyBudWxs
IDogbmV3IEluc3RhbnRpYXRlSW1tZWRpYXRlcygpOwotICAgICAgICBsZXQgcmVzdWx0ID0gbmV3
IFN0cnVjdFR5cGUodGhpcy5vcmlnaW4sIHRoaXMubmFtZSwgW10pOworICAgICAgICBsZXQgaW5z
dGFudGlhdGVJbW1lZGlhdGVzID0gbmV3IEluc3RhbnRpYXRlSW1tZWRpYXRlcygpOworICAgICAg
ICBsZXQgcmVzdWx0ID0gbmV3IFN0cnVjdFR5cGUodGhpcy5vcmlnaW4sIHRoaXMubmFtZSwgdHlw
ZVBhcmFtZXRlcnMpOwogICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkcykgewot
ICAgICAgICAgICAgbGV0IG5ld0ZpZWxkID0gZmllbGQudmlzaXQoc3Vic3RpdHV0aW9uKTsKLSAg
ICAgICAgICAgIGlmIChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpCi0gICAgICAgICAgICAgICAgbmV3
RmllbGQgPSBuZXdGaWVsZC52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpOworICAgICAgICAg
ICAgbGV0IG5ld0ZpZWxkID0gZmllbGQ7CisgICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uKQor
ICAgICAgICAgICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQudmlzaXQoc3Vic3RpdHV0aW9uKTsK
KyAgICAgICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlh
dGVzKTsKICAgICAgICAgICAgIHJlc3VsdC5hZGQobmV3RmllbGQpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9T
dWJzdGl0dXRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3Vic3RpdHV0aW9uLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9TdWJzdGl0dXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDggQEAgY2xhc3MgU3Vic3RpdHV0aW9uIGV4dGVuZHMgUmV3cml0ZXIgewogICAgICAgICAgICAg
dGhpcy5fbWFwLnNldChwYXJhbWV0ZXJzW2ldLCBhcmd1bWVudExpc3RbaV0pOwogICAgIH0KICAg
ICAKKyAgICBnZXQgbWFwKCkgeyByZXR1cm4gdGhpcy5fbWFwOyB9CisgICAgCiAgICAgdmlzaXRU
eXBlUmVmKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVwbGFjZW1lbnQgPSB0aGlzLl9tYXAu
Z2V0KG5vZGUudHlwZSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWZm
aXhDYWxsQXNzaWdubWVudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9TdWZmaXhDYWxsQXNzaWdubWVudC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMJKG5vbmV4
aXN0ZW50KQpAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIFN1ZmZpeENhbGxBc3NpZ25tZW50
IGV4dGVuZHMgRXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBuYW1lLCBsaHMp
Ci0gICAgewotICAgICAgICBzdXBlcihvcmlnaW4pOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFt
ZTsKLSAgICAgICAgdGhpcy5fbGhzID0gbGhzOwotICAgICAgICB0aGlzLmZ1bmMgPSBudWxsOwot
ICAgIH0KLSAgICAKLSAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KLSAgICBn
ZXQgbGhzKCkgeyByZXR1cm4gdGhpcy5fbGhzOyB9Ci0gICAgCi0gICAgdG9TdHJpbmcoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGhzICsgIiBzdWZmaXggIiArIHRoaXMubmFtZTsKLSAg
ICB9Ci19Ci0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIHN5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSkKK3sKKyAgICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0u
dHlwZXMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCEodHlwZSBpbnN0YW5jZW9mIFN0cnVjdFR5
cGUpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBmb3IgKGxldCBm
aWVsZCBvZiB0eXBlLmZpZWxkcykgeworICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlwZVBh
cmFtZXRlcnMoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLnR5
cGVQYXJhbWV0ZXJzLm1hcCgKKyAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlciA9PiB0
eXBlUGFyYW1ldGVyLnZpc2l0KG5ldyBUeXBlUGFyYW1ldGVyUmV3cml0ZXIoKSkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBlQXJn
dW1lbnRzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVBhcmFt
ZXRlcnMubWFwKHR5cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFtZXRlci52aXNpdChuZXcgQXV0b1dy
YXBwZXIoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5j
dGlvbiBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCBpbXBsZW1lbnRhdGlvbikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLmluc3RhbnRpYXRlSW1w
bGVtZW50YXRpb24gPSBzdWJzdGl0dXRpb24gPT4geworICAgICAgICAgICAgICAgICAgICBsZXQg
bmV3VHlwZSA9IHR5cGUuaW5zdGFudGlhdGUobmF0aXZlRnVuYy50eXBlUGFyYW1ldGVycy5tYXAo
dHlwZVBhcmFtZXRlciA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3Vic3RpdHV0
ZSA9IHN1YnN0aXR1dGlvbi5tYXAuZ2V0KHR5cGVQYXJhbWV0ZXIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFzdWJzdGl0dXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTnVsbCBzdWJzdGl0dXRlIGZvciB0eXBlIHBhcmFtZXRlciAiICsgdHlw
ZVBhcmFtZXRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZTsK
KyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3R5
cGU6IG5ld1R5cGUsIGZpZWxkTmFtZTogZmllbGQubmFtZX07CisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLnZpc2l0SW1wbGVtZW50YXRpb25EYXRhID0gKGlt
cGxlbWVudGF0aW9uRGF0YSwgdmlzaXRvcikgPT4geworICAgICAgICAgICAgICAgICAgICAvLyBW
aXNpdGluZyB0aGUgdHlwZSBmaXJzdCBlbnN1cmVzIHRoYXQgdGhlIHN0cnVjdCBsYXlvdXQgYnVp
bGRlciBmaWd1cmVzIG91dCB0aGUgZmllbGQncworICAgICAgICAgICAgICAgICAgICAvLyBvZmZz
ZXQuCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS50eXBlLnZpc2l0KHZp
c2l0b3IpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgbmF0aXZlRnVuYy5k
aWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEgPSBpbXBsZW1lbnRhdGlvbkRhdGEg
PT4geworICAgICAgICAgICAgICAgICAgICBsZXQgc3RydWN0U2l6ZSA9IGltcGxlbWVudGF0aW9u
RGF0YS50eXBlLnNpemU7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3RTaXplID09IG51
bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIHN0cnVjdCBz
aXplIGZvciAiICsgbmF0aXZlRnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9
IGltcGxlbWVudGF0aW9uRGF0YS50eXBlLmZpZWxkQnlOYW1lKGltcGxlbWVudGF0aW9uRGF0YS5m
aWVsZE5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkKQorICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBmaWVsZCIpOworICAg
ICAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gZmllbGQub2Zmc2V0OworICAgICAgICAgICAg
ICAgICAgICBsZXQgZmllbGRTaXplID0gZmllbGQudHlwZS5zaXplOworICAgICAgICAgICAgICAg
ICAgICBpZiAoZmllbGRTaXplID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIk5vIGZpZWxkIHNpemUgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJObyBvZmZzZXQgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5vZmZz
ZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5zdHJ1
Y3RTaXplID0gc3RydWN0U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25E
YXRhLmZpZWxkU2l6ZSA9IGZpZWxkU2l6ZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgIG5hdGl2ZUZ1bmMuaW1wbGVtZW50YXRpb24gPSAoYXJndW1lbnRMaXN0LCBub2RlKSA9
PiB7CisgICAgICAgICAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jSW5zdGFuY2UgPSBub2RlLm5h
dGl2ZUZ1bmNJbnN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGltcGxlbWVudGF0aW9u
RGF0YSA9IG5hdGl2ZUZ1bmNJbnN0YW5jZS5pbXBsZW1lbnRhdGlvbkRhdGE7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3VtZW50TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0
YS5vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEuc3Ry
dWN0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5maWVs
ZFNpemUpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUZpZWxkVHlwZSgpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGUudmlzaXQobmV3IFN1YnN0aXR1dGlvbih0
eXBlLnR5cGVQYXJhbWV0ZXJzLCB0eXBlUGFyYW1ldGVycykpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBlUmVmKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVHlwZVJlZi5pbnN0YW50aWF0ZSh0eXBlLCBj
cmVhdGVUeXBlQXJndW1lbnRzKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBsZXQgaXNDYXN0ID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgdHlwZVBhcmFtZXRl
cnM7CisgICAgICAgICAgICBsZXQgbmF0aXZlRnVuYzsKKworICAgICAgICAgICAgLy8gVGhlIGdl
dHRlcjogb3BlcmF0b3IuZmllbGQKKyAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzID0gY3JlYXRl
VHlwZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVu
YygKKyAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQubmFt
ZSwgY3JlYXRlRmllbGRUeXBlKCksIHR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgIFtu
ZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0ZVR5cGVSZWYoKSldLCBp
c0Nhc3QpOworICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywg
KFtiYXNlXSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAg
ICAgICBsZXQgcmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoZmllbGRTaXplKSwgMCk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UucGx1cyhvZmZzZXQpLCBmaWVsZFNp
emUpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBUaGUgc2V0dGVyOiBvcGVyYXRvci5maWVsZD0KKyAgICAgICAgICAgIHR5cGVQYXJh
bWV0ZXJzID0gY3JlYXRlVHlwZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMg
PSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRv
ci4iICsgZmllbGQubmFtZSArICI9IiwgY3JlYXRlVHlwZVJlZigpLCB0eXBlUGFyYW1ldGVycywK
KyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVy
KGZpZWxkLm9yaWdpbiwgbnVsbCwgY3JlYXRlVHlwZVJlZigpKSwKKyAgICAgICAgICAgICAgICAg
ICAgbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVGaWVsZFR5cGUo
KSkKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGlzQ2FzdCk7CisgICAgICAg
ICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2UsIHZhbHVlXSwg
b2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAgICAgICBsZXQg
cmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoc3RydWN0U2l6ZSksIDApOworICAgICAgICAg
ICAgICAgIHJlc3VsdC5jb3B5RnJvbShiYXNlLCBzdHJ1Y3RTaXplKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQucGx1cyhvZmZzZXQpLmNvcHlGcm9tKHZhbHVlLCBmaWVsZFNpemUpOworICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHBy
b2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGUg
YW5kZXI6IG9wZXJhdG9yJi5maWVsZAorICAgICAgICAgICAgZnVuY3Rpb24gc2V0dXBBbmRlcihh
ZGRyZXNzU3BhY2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRl
cnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOworICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMg
PSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgICAgICAgICAgZmllbGQub3JpZ2luLCAib3Bl
cmF0b3ImLiIgKyBmaWVsZC5uYW1lLCBuZXcgUHRyVHlwZShmaWVsZC5vcmlnaW4sIGFkZHJlc3NT
cGFjZSwgY3JlYXRlRmllbGRUeXBlKCkpLAorICAgICAgICAgICAgICAgICAgICB0eXBlUGFyYW1l
dGVycywKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgbmV3
IEZ1bmNQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQub3JpZ2lu
LCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQdHJUeXBlKGZpZWxkLm9y
aWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVUeXBlUmVmKCkpKQorICAgICAgICAgICAgICAgICAg
ICBdLAorICAgICAgICAgICAgICAgICAgICBpc0Nhc3QpOworICAgICAgICAgICAgICAgIHNldHVw
SW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0U2l6
ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlLmxvYWRW
YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2UpCisgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJO
dWxsIGRlcmVmZXJlbmNlIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveChi
YXNlLnBsdXMob2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
cHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNldHVwQW5kZXIoInRocmVhZCIpOworICAgICAgICAgICAgaWYgKHR5cGUuaW5z
dGFudGlhdGUoKS5pc1ByaW1pdGl2ZSkgeworICAgICAgICAgICAgICAgIHNldHVwQW5kZXIoInRo
cmVhZGdyb3VwIik7CisgICAgICAgICAgICAgICAgc2V0dXBBbmRlcigiZGV2aWNlIik7CisgICAg
ICAgICAgICAgICAgc2V0dXBBbmRlcigiY29uc3RhbnQiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3Qu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0
bWwJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rl
c3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiwxMyArNiwxNCBAQAogPHNjcmlwdCBzcmM9IlJl
ZmVyZW5jZVR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlZhbHVlLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJW
aXNpdG9yQmFzZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmV3cml0ZXIuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IlZpc2l0b3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNy
ZWF0ZUxpdGVyYWwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWxUeXBl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMi
Pjwvc2NyaXB0PgogCiA8c2NyaXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJBbm9ueW1vdXNWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
QXJyYXlSZWZUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVR5cGUuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IkFzc2lnbm1lbnQuanMiPjwvc2NyaXB0PgpAQCAtMjAsNyAr
MjEsNiBAQAogPHNjcmlwdCBzcmM9IkJsb2NrLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJC
b29sTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQnJlYWsuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9IkNhbGxBc3NpZ25tZW50LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJDYWxsRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ2FsbEZ1bmN0aW9u
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDaGVjay5qcyI+PC9zY3JpcHQ+CkBAIC00Niw2
ICs0Niw3IEBACiA8c2NyaXB0IHNyYz0iRXZhbHVhdG9yLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJFeHByZXNzaW9uRmluZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGaWVsZC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iRmluZEhpZ2hab21iaWVzLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJGbGF0dGVuUHJvdG9jb2xFeHRlbmRzLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJGb3JMb29wLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGdW5jLmpzIj48L3Nj
cmlwdD4KQEAgLTUzLDcgKzU0LDEwIEBACiA8c2NyaXB0IHNyYz0iRnVuY0luc3RhbnRpYXRvci5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRnVuY1BhcmFtZXRlci5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iRnVuY3Rpb25MaWtlQmxvY2suanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
IkhpZ2hab21iaWVGaW5kZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IklkZW50aXR5RXhw
cmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSWZTdGF0ZW1lbnQuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9IkluZGV4RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iSW5mZXJUeXBlc0ZvckNhbGwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IklubGlu
ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW5saW5lci5qcyI+PC9zY3JpcHQ+CkBAIC03
NSwyMCArNzksMjQgQEAKIDxzY3JpcHQgc3JjPSJOYXRpdmVGdW5jSW5zdGFuY2UuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
Ik5hdGl2ZVR5cGVJbnN0YW5jZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTm9ybWFsVXNl
UHJvcGVydHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTnVsbExpdGVyYWwu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik51bGxUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJQYXJzZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJlcGFyZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iUHJvcGVydHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iUHJvZ3JhbS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvdG9jb2wuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3RvY29sRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iUHJvdG9jb2xGdW5jRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvdG9j
b2xSZWYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlB0clR5cGUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9IlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IlJlY3Vyc2lvbkNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJl
c29sdmVOYW1lcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVzb2x2ZU92ZXJsb2FkSW1w
bC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUmVzb2x2ZVByb3BlcnRpZXMuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IlJlc29sdmVUeXBlRGVmcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iUmV0dXJuLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXR1cm5DaGVja2VyLmpz
Ij48L3NjcmlwdD4KQEAgLTk3LDEyICsxMDUsMTQgQEAKIDxzY3JpcHQgc3JjPSJTdHJ1Y3RMYXlv
dXRCdWlsZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJTdHJ1Y3RUeXBlLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJTdWJzdGl0dXRpb24uanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9IlN1ZmZpeENhbGxBc3NpZ25tZW50LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJTeW50
aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlRGVm
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlRGVmUmVzb2x2ZXIuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IlR5cGVPclZhcmlhYmxlUmVmLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJUeXBlUGFyYW1ldGVyUmV3cml0ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5
cGVSZWYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5cGVWYXJpYWJsZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iVHlwZVZhcmlhYmxlVHJhY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iVHlwZWRWYWx1ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVWludExpdGVy
YWwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlVpbnRMaXRlcmFsVHlwZS5qcyI+PC9zY3Jp
cHQ+CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHJldmlzaW9uIDIy
MjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDcgKzYyLDcgQEAgZnVuY3Rpb24gY2hlY2tOdW1iZXIocHJvZ3JhbSwgcmVz
dWx0LCBleAogICAgIGlmICghcmVzdWx0LnR5cGUuaXNOdW1iZXIpCiAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiV3JvbmcgcmVzdWx0IHR5cGU7IHJlc3VsdDogIiArIHJlc3VsdCk7CiAgICAgaWYg
KHJlc3VsdC52YWx1ZSAhPSBleHBlY3RlZCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9u
ZyByZXN1bHQ6ICIgKyByZXN1bHQgKyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiKSIpOwor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdDogIiArIHJlc3VsdC52YWx1ZSAr
ICIgKGV4cGVjdGVkICIgKyBleHBlY3RlZCArICIpIik7CiB9CiAKIGZ1bmN0aW9uIG1ha2VVaW50
KHByb2dyYW0sIHZhbHVlKQpAQCAtNDIyLDEwICs0MjIsMTAgQEAgZnVuY3Rpb24gVEVTVF9kZXZp
Y2VBcnJheVN0b3JlSW50TGl0ZXJhbAogZnVuY3Rpb24gVEVTVF9zaW1wbGVQcm90b2NvbCgpCiB7
CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBwcm90b2NvbCBBZGRhYmxlIHsK
LSAgICAgICAgICAgIEFkZGFibGUgb3BlcmF0b3IrKEFkZGFibGUsIEFkZGFibGUpOworICAgICAg
ICBwcm90b2NvbCBNeUFkZGFibGUgeworICAgICAgICAgICAgTXlBZGRhYmxlIG9wZXJhdG9yKyhN
eUFkZGFibGUsIE15QWRkYWJsZSk7CiAgICAgICAgIH0KLSAgICAgICAgVCBhZGQ8VDpBZGRhYmxl
PihUIGEsIFQgYikKKyAgICAgICAgVCBhZGQ8VDpNeUFkZGFibGU+KFQgYSwgVCBiKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gYSArIGI7CiAgICAgICAgIH0KQEAgLTc0Myw3ICs3NDMs
NyBAQCBmdW5jdGlvbiBURVNUX3N0b3JlTnVsbEFycmF5UmVmKCkKICAgICAgICAgKCkgPT4gZG9Q
cmVwKGAKICAgICAgICAgICAgIHZvaWQgZm9vKCkgeyBudWxsWzB1XSA9IDQyOyB9CiAgICAgICAg
IGApLAotICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdl
LmluZGV4T2YoIkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCIpICE9IC0xKTsKKyAgICAg
ICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJM
SFMgb2YgYXNzaWdubWVudCBpcyBub3QgYW4gTFZhbHVlIikgIT0gLTEpOwogfQogCiBmdW5jdGlv
biBURVNUX3JldHVybk51bGxBcnJheVJlZigpCkBAIC04NTEsMTQgKzg1MSwxNCBAQCBmdW5jdGlv
biBURVNUX2JhZEludExpdGVyYWxGb3JJbnQoKQogewogICAgIGNoZWNrRmFpbCgKICAgICAgICAg
KCkgPT4gZG9QcmVwKCJ2b2lkIGZvbygpIHsgaW50IHggPSAzMDAwMDAwMDAwOyB9IiksCi0gICAg
ICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7CisgICAgICAgIChlKSA9PiBlIGlu
c3RhbmNlb2YgV1N5bnRheEVycm9yKTsKIH0KIAogZnVuY3Rpb24gVEVTVF9iYWRJbnRMaXRlcmFs
Rm9yVWludCgpCiB7CiAgICAgY2hlY2tGYWlsKAogICAgICAgICAoKSA9PiBkb1ByZXAoInZvaWQg
Zm9vKCkgeyB1aW50IHggPSA1MDAwMDAwMDAwOyB9IiksCi0gICAgICAgIChlKSA9PiBlIGluc3Rh
bmNlb2YgV1R5cGVFcnJvcik7CisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1N5bnRheEVy
cm9yKTsKIH0KIAogZnVuY3Rpb24gVEVTVF9iYWRJbnRMaXRlcmFsRm9yRG91YmxlKCkKQEAgLTE0
NjcsMTAgKzE0NjcsMTAgQEAgZnVuY3Rpb24gVEVTVF9pbnRMaXRlcmFsR2VuZXJpYygpCiBmdW5j
dGlvbiBURVNUX2ludExpdGVyYWxHZW5lcmljV2l0aFByb3RvY29scygpCiB7CiAgICAgbGV0IHBy
b2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBwcm90b2NvbCBDb252ZXJ0aWJsZVRvSW50IHsKLSAg
ICAgICAgICAgIG9wZXJhdG9yIGludChDb252ZXJ0aWJsZVRvSW50KTsKKyAgICAgICAgcHJvdG9j
b2wgTXlDb252ZXJ0aWJsZVRvSW50IHsKKyAgICAgICAgICAgIG9wZXJhdG9yIGludChNeUNvbnZl
cnRpYmxlVG9JbnQpOwogICAgICAgICB9Ci0gICAgICAgIGludCBmb288VDpDb252ZXJ0aWJsZVRv
SW50PihUIHgpIHsgcmV0dXJuIGludCh4KTsgfQorICAgICAgICBpbnQgZm9vPFQ6TXlDb252ZXJ0
aWJsZVRvSW50PihUIHgpIHsgcmV0dXJuIGludCh4KTsgfQogICAgICAgICBpbnQgYmFyKCkgeyBy
ZXR1cm4gZm9vKDQyKTsgfQogICAgIGApOwogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiYmFyIiwgW10sIFtdKSwgNDIpOwpAQCAtMTQ4OCwxMCArMTQ4OCwxMCBA
QCBmdW5jdGlvbiBURVNUX3VpbnRMaXRlcmFsR2VuZXJpYygpCiBmdW5jdGlvbiBURVNUX3VpbnRM
aXRlcmFsR2VuZXJpY1dpdGhQcm90b2NvbHMoKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVw
KGAKLSAgICAgICAgcHJvdG9jb2wgQ29udmVydGlibGVUb1VpbnQgewotICAgICAgICAgICAgb3Bl
cmF0b3IgdWludChDb252ZXJ0aWJsZVRvVWludCk7CisgICAgICAgIHByb3RvY29sIE15Q29udmVy
dGlibGVUb1VpbnQgeworICAgICAgICAgICAgb3BlcmF0b3IgdWludChNeUNvbnZlcnRpYmxlVG9V
aW50KTsKICAgICAgICAgfQotICAgICAgICB1aW50IGZvbzxUOkNvbnZlcnRpYmxlVG9VaW50PihU
IHgpIHsgcmV0dXJuIHVpbnQoeCk7IH0KKyAgICAgICAgdWludCBmb288VDpNeUNvbnZlcnRpYmxl
VG9VaW50PihUIHgpIHsgcmV0dXJuIHVpbnQoeCk7IH0KICAgICAgICAgdWludCBiYXIoKSB7IHJl
dHVybiBmb28oNDJ1KTsgfQogICAgIGApOwogICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdLCBbXSksIDQyKTsKQEAgLTI1NjYsNiArMjU2NiwyODkg
QEAgZnVuY3Rpb24gVEVTVF9tYWtlQXJyYXlSZWZGcm9tQXJyYXlSZWYoKQogICAgICAgICAoZSkg
PT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOwogfQogCitmdW5jdGlvbiBURVNUX3NpbXBsZUxl
bmd0aCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1aW50IGZvbygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGRvdWJsZVs3NTRdIGFycmF5OworICAgICAgICAgICAg
cmV0dXJuIChAYXJyYXkpLmxlbmd0aDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrVWlu
dChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDc1NCk7Cit9
CisKK2Z1bmN0aW9uIFRFU1RfYXNzaWduTGVuZ3RoKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAg
ICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZG91YmxlWzc1NF0gYXJyYXk7CisgICAgICAgICAgICAgICAgKEBh
cnJheSkubGVuZ3RoID0gNDI7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICAo
ZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoIkxIUyBv
ZiBhc3NpZ25tZW50IGlzIG5vdCBhbiBMVmFsdWUiKSAhPSAtMSk7Cit9CisKK2Z1bmN0aW9uIFRF
U1RfYXNzaWduTGVuZ3RoSGVscGVyKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+
IGRvUHJlcChgCisgICAgICAgICAgICB2b2lkIGJhcih0aHJlYWQgZG91YmxlW10gYXJyYXkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXJyYXkubGVuZ3RoID0gNDI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZG91YmxlWzc1NF0gYXJyYXk7CisgICAgICAgICAgICAgICAgYmFyKEBhcnJheSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdU
eXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoIkNhbm5vdCBlbWl0IHNldCBiZWNhdXNlOiBE
aWQgbm90IGZpbmQgYW55IGZ1bmN0aW9ucyBuYW1lZCBvcGVyYXRvci5sZW5ndGg9IikgIT0gLTEp
OworfQorCitmdW5jdGlvbiBURVNUX3NpbXBsZUdldHRlcigpCit7CisgICAgbGV0IHByb2dyYW0g
PSBkb1ByZXAoYAorICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAg
ICAgICB9CisgICAgICAgIGludCBvcGVyYXRvci55KEZvbyBmb28pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmb28ueDsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAgICAgICAgIGZvby54ID0gNzgwNDsKKyAg
ICAgICAgICAgIHJldHVybiBmb28ueTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNzgwNCk7Cit9
CisKK2Z1bmN0aW9uIFRFU1Rfc2ltcGxlU2V0dGVyKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRv
UHJlcChgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAg
IH0KKyAgICAgICAgaW50IG9wZXJhdG9yLnkoRm9vIGZvbykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGZvby54OworICAgICAgICB9CisgICAgICAgIEZvbyBvcGVyYXRvci55PShGb28g
Zm9vLCBpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvby54ID0gdmFsdWU7Cisg
ICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAg
ICAgICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgZm9vLnkgPSA3ODA0Owor
ICAgICAgICAgICAgcmV0dXJuIGZvby54OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJ
bnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLCA3ODA0KTsK
K30KKworZnVuY3Rpb24gVEVTVF9nZW5lcmljQWNjZXNzb3JzKCkKK3sKKyAgICBsZXQgcHJvZ3Jh
bSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb288VD4geworICAgICAgICAgICAgVCB4Owor
ICAgICAgICAgICAgVFszXSB5OworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBCYXI8VD4gewor
ICAgICAgICAgICAgVCB4OworICAgICAgICAgICAgVCB5OworICAgICAgICB9CisgICAgICAgIEJh
cjxUPiBvcGVyYXRvci56PFQ+KEZvbzxUPiBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIEJh
cjxUPiByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQueCA9IGZvby54OworICAgICAgICAgICAg
cmVzdWx0LnkgPSBmb28ueVsxXTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKyAgICAgICAgRm9vPFQ+IG9wZXJhdG9yLno9PFQ+KEZvbzxUPiBmb28sIEJhcjxUPiBiYXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvby54ID0gYmFyLng7CisgICAgICAgICAgICBmb28u
eVsxXSA9IGJhci55OworICAgICAgICAgICAgcmV0dXJuIGZvbzsKKyAgICAgICAgfQorICAgICAg
ICBUIG9wZXJhdG9yLnN1bTxUOkFkZGFibGU+KEZvbzxUPiBmb28pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmb28ueCArIGZvby55WzBdICsgZm9vLnlbMV0gKyBmb28ueVsyXTsKKyAg
ICAgICAgfQorICAgICAgICBUIG9wZXJhdG9yLnN1bTxUOkFkZGFibGU+KEJhcjxUPiBiYXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXIueCArIGJhci55OworICAgICAgICB9Cisg
ICAgICAgIG9wZXJhdG9yPFQ+IEJhcjxUPihUIHgsIFQgeSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQmFyPFQ+IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC54ID0geDsKKyAgICAgICAgICAg
IHJlc3VsdC55ID0geTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAg
ICAgICAgdm9pZCBzZXR1cCh0aHJlYWQgRm9vPGludD5eIGZvbykKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9vLT54ID0gMTsKKyAgICAgICAgICAgIGZvby0+eVswXSA9IDI7CisgICAgICAgICAg
ICBmb28tPnlbMV0gPSAzOworICAgICAgICAgICAgZm9vLT55WzJdID0gNDsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgdGVzdFN1cGVyQmFzaWMoKQorICAgICAgICB7CisgICAgICAgICAgICBGb288
aW50PiBmb287CisgICAgICAgICAgICBzZXR1cCgmZm9vKTsKKyAgICAgICAgICAgIHJldHVybiBm
b28uc3VtOworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0WlNldHRlckRpZFNldFkoKQorICAg
ICAgICB7CisgICAgICAgICAgICBGb288aW50PiBmb287CisgICAgICAgICAgICBmb28ueiA9IEJh
cjxpbnQ+KDUzLCA5MzIpOworICAgICAgICAgICAgcmV0dXJuIGZvby55WzFdOworICAgICAgICB9
CisgICAgICAgIGludCB0ZXN0WlNldHRlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbzxp
bnQ+IGZvbzsKKyAgICAgICAgICAgIGZvby56ID0gQmFyPGludD4oNTMsIDkzMik7CisgICAgICAg
ICAgICByZXR1cm4gZm9vLnN1bTsKKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdFpHZXR0ZXIo
KQorICAgICAgICB7CisgICAgICAgICAgICBGb288aW50PiBmb287CisgICAgICAgICAgICAvLyBU
aGlzIGRlbGliZXJhdGVseSBkb2VzIG5vdCBjYWxsIHNldHVwKCkganVzdCBzbyB3ZSB0ZXN0IHRo
aXMgc3ludGF4LgorICAgICAgICAgICAgZm9vLnggPSAxOworICAgICAgICAgICAgZm9vLnlbMF0g
PSAyOworICAgICAgICAgICAgZm9vLnlbMV0gPSAzOworICAgICAgICAgICAgZm9vLnlbMl0gPSA0
OworICAgICAgICAgICAgcmV0dXJuIGZvby56LnN1bTsKKyAgICAgICAgfQorICAgICAgICBpbnQg
dGVzdExWYWx1ZUVtdWxhdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZv
bzsKKyAgICAgICAgICAgIHNldHVwKCZmb28pOworICAgICAgICAgICAgZm9vLnoueSAqPSA1Owor
ICAgICAgICAgICAgcmV0dXJuIGZvby5zdW07CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RTdXBlckJhc2ljIiwgW10s
IFtdKSwgMSArIDIgKyAzICsgNCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJ0ZXN0WlNldHRlckRpZFNldFkiLCBbXSwgW10pLCA5MzIpOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFpTZXR0ZXIiLCBbXSwgW10p
LCA1MyArIDkzMik7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJ0ZXN0WkdldHRlciIsIFtdLCBbXSksIDEgKyAzKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RMVmFsdWVFbXVsYXRpb24iLCBbXSwgW10pLCAxICsg
MiArIDMgKiA1ICsgNCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfYml0U3Vic2NyaXB0QWNjZXNzb3Io
KQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgcHJvdG9jb2wgTXlCaXRt
YXNrYWJsZSA6IEVxdWF0YWJsZSB7CisgICAgICAgICAgICBNeUJpdG1hc2thYmxlIG9wZXJhdG9y
JihNeUJpdG1hc2thYmxlLCBNeUJpdG1hc2thYmxlKTsKKyAgICAgICAgICAgIE15Qml0bWFza2Fi
bGUgb3BlcmF0b3J8KE15Qml0bWFza2FibGUsIE15Qml0bWFza2FibGUpOworICAgICAgICAgICAg
TXlCaXRtYXNrYWJsZSBvcGVyYXRvcn4oTXlCaXRtYXNrYWJsZSk7CisgICAgICAgICAgICBNeUJp
dG1hc2thYmxlIG9wZXJhdG9yPDwoTXlCaXRtYXNrYWJsZSwgdWludCk7CisgICAgICAgICAgICBN
eUJpdG1hc2thYmxlIG9wZXJhdG9yPj4oTXlCaXRtYXNrYWJsZSwgdWludCk7CisgICAgICAgICAg
ICBvcGVyYXRvciBNeUJpdG1hc2thYmxlKGludCk7CisgICAgICAgIH0KKyAgICAgICAgVCBtYXNr
Rm9yQml0SW5kZXg8VDpNeUJpdG1hc2thYmxlPih1aW50IGluZGV4KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gVCgxKSA8PCBpbmRleDsKKyAgICAgICAgfQorICAgICAgICBib29sIG9w
ZXJhdG9yW108VDpNeUJpdG1hc2thYmxlPihUIHZhbHVlLCB1aW50IGluZGV4KQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYm9vbCh2YWx1ZSAmIG1hc2tGb3JCaXRJbmRleDxUPihpbmRl
eCkpOworICAgICAgICB9CisgICAgICAgIFQgb3BlcmF0b3JbXT08VDpNeUJpdG1hc2thYmxlPihU
IHZhbHVlLCB1aW50IGluZGV4LCBib29sIGJpdCkKKyAgICAgICAgeworICAgICAgICAgICAgVCBt
YXNrID0gbWFza0ZvckJpdEluZGV4PFQ+KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChiaXQpCisg
ICAgICAgICAgICAgICAgdmFsdWUgfD0gbWFzazsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB2YWx1ZSAmPSB+bWFzazsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAg
ICAgfQorICAgICAgICB1aW50IG9wZXJhdG9yLmxlbmd0aChpbnQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAzMjsKKyAgICAgICAgfQorICAgICAgICB1aW50IG9wZXJhdG9yLmxlbmd0
aCh1aW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMzI7CisgICAgICAgIH0KKyAg
ICAgICAgaW50IHRlc3RJbnRTZXRCaXQzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGZv
bzsKKyAgICAgICAgICAgIGZvb1szXSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZm9vOwor
ICAgICAgICB9CisgICAgICAgIGJvb2wgdGVzdEludFNldEdldEJpdDUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbnQgZm9vOworICAgICAgICAgICAgZm9vWzVdID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybiBmb29bNV07CisgICAgICAgIH0KKyAgICAgICAgYm9vbCB0ZXN0SW50R2V0Qml0
MSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBmb287CisgICAgICAgICAgICByZXR1cm4g
Zm9vWzFdOworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0VWludFN1bUJpdHMoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbnQgZm9vID0gNDI7CisgICAgICAgICAgICBpbnQgcmVzdWx0Owor
ICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgZm9vLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGZvb1tpXSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Kys7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAg
ICAgIGludCB0ZXN0VWludFN3YXBCaXRzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGZv
byA9IDQyOworICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgZm9vLmxlbmd0aCAvIDI7
ICsraSkgeworICAgICAgICAgICAgICAgIGJvb2wgdG1wID0gZm9vW2ldOworICAgICAgICAgICAg
ICAgIGZvb1tpXSA9IGZvb1tmb28ubGVuZ3RoIC0gaSAtIDFdOworICAgICAgICAgICAgICAgIGZv
b1tmb28ubGVuZ3RoIC0gaSAtIDFdID0gdG1wOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIGZvbzsKKyAgICAgICAgfQorICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAg
IHVpbnQgZjsKKyAgICAgICAgICAgIHVpbnQgZzsKKyAgICAgICAgfQorICAgICAgICBpbnQgb3Bl
cmF0b3IuaChGb28gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW50KChmb28u
ZiAmIDB4ZmZmZikgfCAoKGZvby5nICYgMHhmZmZmKSA8PCAxNikpOworICAgICAgICB9CisgICAg
ICAgIEZvbyBvcGVyYXRvci5oPShGb28gZm9vLCBpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvby5mICY9IH4weGZmZmZ1OworICAgICAgICAgICAgZm9vLmYgfD0gdWludCh2YWx1
ZSkgJiAweGZmZmY7CisgICAgICAgICAgICBmb28uZyAmPSB+MHhmZmZmdTsKKyAgICAgICAgICAg
IGZvby5nIHw9ICh1aW50KHZhbHVlKSA+PiAxNikgJiAweGZmZmY7CisgICAgICAgICAgICByZXR1
cm4gZm9vOworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0TFZhbHVlRW11bGF0aW9uKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAgICAgICAgIGZvby5mID0gNDI7Cisg
ICAgICAgICAgICBmb28uZyA9IDM3OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwg
Zm9vLmgubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgZm9vLmhbaV0gXj0gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBpbnQoZm9vLmYgKyBmb28uZyk7CisgICAgICAgIH0KKyAgICBgKTsK
KyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RJbnRTZXRC
aXQzIiwgW10sIFtdKSwgOCk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAidGVzdEludFNldEdldEJpdDUiLCBbXSwgW10pLCB0cnVlKTsKKyAgICBjaGVja0Jv
b2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0SW50R2V0Qml0MSIsIFtdLCBb
XSksIGZhbHNlKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
InRlc3RVaW50U3VtQml0cyIsIFtdLCBbXSksIDMpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFVpbnRTd2FwQml0cyIsIFtdLCBbXSksIDE0MDkyODYx
NDQpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdExW
YWx1ZUVtdWxhdGlvbiIsIFtdLCBbXSksIDEzMDk5MSk7Cit9CisKIGxldCBmaWx0ZXIgPSAvLiov
OyAvLyBydW4gZXZlcnl0aGluZyBieSBkZWZhdWx0CiBpZiAodGhpc1siYXJndW1lbnRzIl0pIHsK
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBAIGNsYXNzIFR5cGUgZXh0ZW5kcyBOb2RlIHsKICAgICBnZXQga2luZCgpIHsg
cmV0dXJuIFR5cGU7IH0KICAgICBnZXQgaXNQdHIoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGdl
dCBpc0FycmF5UmVmKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBnZXQgaXNSZWYoKSB7IHJldHVy
biB0aGlzLmlzUHRyIHx8IHRoaXMuaXNBcnJheVJlZjsgfQogICAgIGdldCBpc051bWJlcigpIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzSW50KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBn
ZXQgaXNGbG9hdCgpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC00MSw1ICs0MiwxOSBAQCBjbGFzcyBU
eXBlIGV4dGVuZHMgTm9kZSB7CiAgICAgfQogICAgIAogICAgIGdldCBpbnN0YW50aWF0ZWRUeXBl
KCkgeyByZXR1cm4gdGhpcy52aXNpdChuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCkpOyB9Cisg
ICAgCisgICAgLy8gSGF2ZSB0byBjYWxsIHRoZXNlIG9uIHRoZSB1bmlmeU5vZGUuCisgICAgYXJn
dW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBNYWtlUHRyRXhwcmVzc2lvbihvcmlnaW4sIHZhbHVlKTsKKyAgICB9CisgICAgYXJndW1l
bnRUeXBlRm9yQW5kT3ZlcmxvYWQob3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQ
dHJUeXBlKG9yaWdpbiwgInRocmVhZCIsIHRoaXMpOworICAgIH0KKyAgICByZXR1cm5UeXBlRnJv
bUFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9y
KG9yaWdpbi5vcmlnaW5TdHJpbmcsICJCeS1wb2ludGVyIG92ZXJsb2FkIHJldHVybmVkIG5vbi1w
b2ludGVyIHR5cGU6ICIgKyB0aGlzKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUGFyYW1ldGVyUmV3cml0ZXIuanMJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRl
clJld3JpdGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3Mg
VHlwZVBhcmFtZXRlclJld3JpdGVyIHsKKyAgICB2aXNpdENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIo
bm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ29uc3RleHByVHlwZVBhcmFtZXRlcihu
b2RlLm9yaWdpbiwgbm9kZS5uYW1lLCBub2RlLnR5cGUudmlzaXQobmV3IFJld3JpdGVyKCkpKTsK
KyAgICB9CisgICAgCisgICAgdmlzaXRUeXBlVmFyaWFibGUobm9kZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBuZXcgVHlwZVZhcmlhYmxlKG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUucHJv
dG9jb2wpOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VHlwZVZhcmlhYmxlVHJhY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVWYXJpYWJsZVRyYWNrZXIuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBUeXBlVmFyaWFibGVUcmFja2VyIGV4
dGVuZHMgVmlzaXRvciB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIo
KTsKKyAgICAgICAgdGhpcy5fc2V0ID0gbmV3IFNldCgpOworICAgIH0KKyAgICAKKyAgICBnZXQg
c2V0KCkgeyByZXR1cm4gdGhpcy5fc2V0OyB9CisgICAgCisgICAgX2NvbnNpZGVyKHRoaW5nKQor
ICAgIHsKKyAgICAgICAgaWYgKHRoaW5nLmlzVW5pZmlhYmxlKQorICAgICAgICAgICAgdGhpcy5f
c2V0LmFkZCh0aGluZyk7CisgICAgfQorICAgIAorICAgIHZpc2l0VHlwZVJlZihub2RlKQorICAg
IHsKKyAgICAgICAgdGhpcy5fY29uc2lkZXIobm9kZS50eXBlKTsKKyAgICB9CisgICAgCisgICAg
dmlzaXRWYXJpYWJsZVJlZihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29uc2lkZXIodGhp
cy52YXJpYWJsZSk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9WYWx1ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9WYWx1ZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVmFsdWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDUgKzI4LDE0IEBAIGNsYXNzIFZh
bHVlIGV4dGVuZHMgTm9kZSB7CiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBWYWx1ZTsgfQogICAg
IGdldCBpc0NvbnN0ZXhwcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzTFZhbHVlKCkg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICBiZWNvbWUob3RoZXJWYWx1ZSkKKyAgICB7Cisg
ICAgICAgIC8vIE5PVEU6IE1ha2Ugc3VyZSB0aGF0IElkZW50aXR5RXhwcmVzc2lvbiBpbXBsZW1l
bnRzIHVuaWZ5Tm9kZSBhbmQgYWxsIHRoYXQKKyAgICAgICAgbGV0IG9yaWdpbiA9IHRoaXMub3Jp
Z2luOworICAgICAgICB0aGlzLl9fcHJvdG9fXyA9IElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5
cGU7CisgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5fdGFyZ2V0
ID0gb3RoZXJWYWx1ZTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1ZhcmlhYmxlUmVmLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZVJlZi5qcwkod29ya2luZyBjb3B5KQpAQCAtNDEs
MTAgKzQxLDkgQEAgY2xhc3MgVmFyaWFibGVSZWYgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAgICAK
ICAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KICAgICBnZXQgaXNDb25zdGV4
cHIoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxlLmlzQ29uc3RleHByOyB9Ci0gICAgZ2V0IHVuaWZ5
Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFyaWFibGUudW5pZnlOb2RlOyB9CisgICAgZ2V0IHVuaWZ5
Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFyaWFibGUudW5pZnlOb2RlOyB9IC8vIFRoaXMgb25seSBt
YWtlcyBzZW5zZSB3aGVuIHRoaXMgaXMgYSBjb25zdGV4cHIuCiAgICAgZ2V0IGlzTFZhbHVlKCkg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiAidGhyZWFk
IjsgfQotICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxlOyB9CiAgICAg
CiAgICAgdG9TdHJpbmcoKQogICAgIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Zpc2l0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVmlzaXRvci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVmlzaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsMTIgKzI0LDcgQEAKICAq
LwogInVzZSBzdHJpY3QiOwogCi1jbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2Ugewot
ICAgIGNvbnN0cnVjdG9yKCkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgfQotICAgIAor
Y2xhc3MgVmlzaXRvciB7CiAgICAgdmlzaXRQcm9ncmFtKG5vZGUpCiAgICAgewogICAgICAgICBm
b3IgKGxldCBzdGF0ZW1lbnQgb2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCkBAIC02OCw4ICs2
Myw4IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlz
aXROYXRpdmVGdW5jSW5zdGFuY2Uobm9kZSkKICAgICB7Ci0gICAgICAgIG5vZGUuZnVuYy52aXNp
dCh0aGlzKTsKICAgICAgICAgdGhpcy52aXNpdEZ1bmMobm9kZSk7CisgICAgICAgIG5vZGUuZnVu
Yy52aXNpdEltcGxlbWVudGF0aW9uRGF0YShub2RlLmltcGxlbWVudGF0aW9uRGF0YSwgdGhpcyk7
CiAgICAgfQogICAgIAogICAgIHZpc2l0QmxvY2sobm9kZSkKQEAgLTEwMCw4ICs5NSw3IEBAIGNs
YXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgewogICAgICAgICBmb3IgKGxl
dCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBlQXJndW1lbnRzKQogICAgICAgICAgICAgdHlwZUFy
Z3VtZW50LnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS50eXBlKQotICAgICAgICAgICAg
bm9kZS50eXBlLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhp
cyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0TmF0aXZlVHlwZShub2RlKQpAQCAtMTM0LDggKzEy
OCw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlz
aXRUeXBlVmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLnByb3RvY29sKQot
ICAgICAgICAgICAgbm9kZS5wcm90b2NvbC52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNp
dChub2RlLnByb3RvY29sLCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRDb25zdGV4cHJU
eXBlUGFyYW1ldGVyKG5vZGUpCkBAIC0xNzcsMTQgKzE3MCwyMyBAQCBjbGFzcyBWaXNpdG9yIGV4
dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0VmFyaWFibGVEZWNsKG5vZGUpCiAgICAgewog
ICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLmluaXRpYWxp
emVyKQotICAgICAgICAgICAgbm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKTsKKyAgICAgICAg
Tm9kZS52aXNpdChub2RlLmluaXRpYWxpemVyLCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlz
aXRBc3NpZ25tZW50KG5vZGUpCiAgICAgewogICAgICAgICBub2RlLmxocy52aXNpdCh0aGlzKTsK
ICAgICAgICAgbm9kZS5yaHMudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50
eXBlLCB0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKKyAgICAg
ICAgbm9kZS5vbGRWYWx1ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5uZXdWYWx1ZVZh
ci52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAg
ICAgICAgbm9kZS5yZXN1bHRFeHAudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0
RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCkBAIC0xOTIsMTEgKzE5NCwyNyBAQCBjbGFzcyBW
aXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICBub2RlLnB0ci52aXNpdCh0aGlz
KTsKICAgICB9CiAgICAgCisgICAgX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2Rl
KQorICAgIHsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmJhc2VUeXBlLCB0aGlzKTsKKyAgICAg
ICAgTm9kZS52aXNpdChub2RlLmNhbGxGb3JHZXQsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0
KG5vZGUucmVzdWx0VHlwZUZvckdldCwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5j
YWxsRm9yQW5kLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JB
bmQsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvclNldCwgdGhpcyk7Cisg
ICAgfQorICAgIAogICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAg
bm9kZS5zdHJ1Y3QudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLnN0cnVjdFR5cGUpCi0g
ICAgICAgICAgICBub2RlLnN0cnVjdFR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIHRoaXMuX2hh
bmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlz
aXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUuYXJyYXkudmlzaXQo
dGhpcyk7CisgICAgICAgIG5vZGUuaW5kZXgudmlzaXQodGhpcyk7CisgICAgICAgIHRoaXMuX2hh
bmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlKTsKICAgICB9CiAgICAgCiAgICAgdmlz
aXRNYWtlUHRyRXhwcmVzc2lvbihub2RlKQpAQCAtMjA3LDggKzIyNSw3IEBAIGNsYXNzIFZpc2l0
b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9u
KG5vZGUpCiAgICAgewogICAgICAgICBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKLSAgICAgICAg
aWYgKG5vZGUubnVtRWxlbWVudHMpCi0gICAgICAgICAgICBub2RlLm51bUVsZW1lbnRzLnZpc2l0
KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUubnVtRWxlbWVudHMsIHRoaXMpOwogICAg
IH0KICAgICAKICAgICB2aXNpdENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihub2RlKQpA
QCAtMjI0LDggKzI0MSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAg
ICAgewogICAgICAgICBub2RlLmNvbmRpdGlvbmFsLnZpc2l0KHRoaXMpOwogICAgICAgICBub2Rl
LmJvZHkudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLmVsc2VCb2R5KQotICAgICAgICAg
ICAgbm9kZS5lbHNlQm9keS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmVs
c2VCb2R5LCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRXaGlsZUxvb3Aobm9kZSkKQEAg
LTI0MiwxOSArMjU4LDE1IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAg
ICAgCiAgICAgdmlzaXRGb3JMb29wKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5pbml0
aWFsaXphdGlvbikKLSAgICAgICAgICAgIG5vZGUuaW5pdGlhbGl6YXRpb24udmlzaXQodGhpcyk7
Ci0gICAgICAgIGlmIChub2RlLmNvbmRpdGlvbikKLSAgICAgICAgICAgIG5vZGUuY29uZGl0aW9u
LnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5pbmNyZW1lbnQpCi0gICAgICAgICAgICBu
b2RlLmluY3JlbWVudC52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRp
YWxpemF0aW9uLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmNvbmRpdGlvbiwgdGhp
cyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbmNyZW1lbnQsIHRoaXMpOwogICAgICAgICBu
b2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgfQogCiAgICAgdmlzaXRSZXR1cm4obm9kZSkKICAg
ICB7Ci0gICAgICAgIGlmIChub2RlLnZhbHVlKQotICAgICAgICAgICAgbm9kZS52YWx1ZS52aXNp
dCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnZhbHVlLCB0aGlzKTsKICAgICB9CiAK
ICAgICB2aXNpdENvbnRpbnVlKG5vZGUpCkBAIC0yNzIsOCArMjg0LDcgQEAgY2xhc3MgVmlzaXRv
ciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2aXNpdEdlbmVyaWNMaXRlcmFsVHlw
ZShub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUu
dHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwog
ICAgICAgICBub2RlLnByZWZlcnJlZFR5cGUudmlzaXQodGhpcyk7CiAgICAgfQogICAgIApAQCAt
Mjg4LDggKzI5OSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAg
CiAgICAgdmlzaXROdWxsVHlwZShub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUudHlwZSkK
LSAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChu
b2RlLnR5cGUsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5v
ZGUpCkBAIC0yOTcsMTYgKzMwNywxNSBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJh
c2UgewogICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBlQXJndW1lbnRz
KQogICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpOwogICAgICAgICBmb3IgKGxl
dCBhcmd1bWVudCBvZiBub2RlLmFyZ3VtZW50TGlzdCkKLSAgICAgICAgICAgIGFyZ3VtZW50LnZp
c2l0KHRoaXMpOworICAgICAgICAgICAgTm9kZS52aXNpdChhcmd1bWVudCwgdGhpcyk7CiAgICAg
ICAgIGxldCBhY3R1YWxUeXBlQXJndW1lbnRzID0gbm9kZS5hY3R1YWxUeXBlQXJndW1lbnRzOwog
ICAgICAgICBpZiAoYWN0dWFsVHlwZUFyZ3VtZW50cykgewogICAgICAgICAgICAgZm9yIChsZXQg
YXJndW1lbnQgb2YgYWN0dWFsVHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICBhcmd1bWVu
dC52aXNpdCh0aGlzKTsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQot
ICAgICAgICAgICAgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9k
ZS5yZXN1bHRUeXBlKQotICAgICAgICAgICAgbm9kZS5yZXN1bHRUeXBlLnZpc2l0KHRoaXMpOwor
ICAgICAgICBOb2RlLnZpc2l0KG5vZGUubmF0aXZlRnVuY0luc3RhbmNlLCB0aGlzKTsKKyAgICAg
ICAgTm9kZS52aXNpdChub2RlLnJldHVyblR5cGUsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0
KG5vZGUucmVzdWx0VHlwZSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0TG9naWNhbE5v
dChub2RlKQpAQCAtMzE2LDIxICszMjUsMjMgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0
b3JCYXNlIHsKICAgICAKICAgICB2aXNpdEZ1bmN0aW9uTGlrZUJsb2NrKG5vZGUpCiAgICAgewot
ICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQotICAgICAgICAgICAgbm9kZS5yZXR1cm5UeXBl
LnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmV0dXJuVHlwZSwgdGhpcyk7
CiAgICAgICAgIGZvciAobGV0IGFyZ3VtZW50IG9mIG5vZGUuYXJndW1lbnRMaXN0KQogICAgICAg
ICAgICAgYXJndW1lbnQudmlzaXQodGhpcyk7CiAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlciBv
ZiBub2RlLnBhcmFtZXRlcnMpCiAgICAgICAgICAgICBwYXJhbWV0ZXIudmlzaXQodGhpcyk7CiAg
ICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUucmVzdWx0VHlw
ZSkKLSAgICAgICAgICAgIG5vZGUucmVzdWx0VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9k
ZS52aXNpdChub2RlLnJlc3VsdFR5cGUsIHRoaXMpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExl
dEV4cHJlc3Npb24obm9kZSkKKyAgICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAg
ewotICAgICAgICBub2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMpOwotICAgICAgICBub2RlLmJvZHku
dmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKKyAgICB9
CisgICAgCisgICAgdmlzaXRJZGVudGl0eUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAg
IG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpOwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvckJhc2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvckJhc2UuanMJKHJldmlzaW9uIDIyMjEyMykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzCShub25leGlzdGVu
dCkKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBWaXNpdG9yQmFzZSB7Ci0gICAgY29uc3Ry
dWN0b3IoKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWVtb1RhYmxlID0gbmV3IE1hcCgpOwotICAg
IH0KLX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321053</attachid>
            <date>2017-09-17 14:02:17 -0700</date>
            <delta_ts>2017-09-17 16:09:37 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>168934</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjEzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5OCBAQAorMjAxNy0wOS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEZpZ3VyZSBvdXQgaG93IFdTTCB3aWxsIHN1cHBvcnQgZmllbGQgb3ZlcmxvYWRz
IGxpa2UgZmxvYXQ0Lnh6IGFuZCBmcmllbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdTTCBuZWVkcyB0byBzdXBwb3J0IGdldHRlcnMg
YW5kIHNldHRlcnMsIHNvIHRoYXQgd2UgY2FuIGRvIHRoaW5ncyBsaWtlOgorICAgICAgICAKKyAg
ICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAgICB2ZWMuenggPSBmbG9hdDIoMSwgMik7
CisgICAgICAgICAgICAvLyB6ID0gMSwgeCA9IDIKKyAgICAgICAgCisgICAgICAgIFRoZXJlJ3Mg
bm8gd2F5IHRvIGV4cHJlc3MgdGhpcyBmbG9hdDQuenggcmV0dXJuaW5nIGEgcG9pbnRlciB0byBz
b21ldGhpbmcsIHNpbmNlIGl0J3MgZG9pbmcgc3dpenpsaW5nLgorICAgICAgICBJdCBjb3VsZCBy
ZXR1cm4gYSBjcmF6eSBzbWFydCBwb2ludGVyLCBidXQgdGhhdCBzb3VuZHMgbGlrZSBhIGxvdCBv
ZiB3b3JrLiBTbywgSSBkZWNpZGVkIHRvIGdvIGZvcgorICAgICAgICBsdmFsdWUgZW11bGF0aW9u
IGluc3RlYWQuCisgICAgICAgIAorICAgICAgICBUaGUgaWRlYSBvZiBsdmFsdWUgZW11bGF0aW9u
IGlzIHRoYXQgd2hlbiB3ZSB0cnkgdG8gbWFrZSBhbiBsdmFsdWUgd29yayBmb3IgYW4gYXNzaWdu
bWVudCBvciBSTVcKKyAgICAgICAgb3BlcmF0aW9uIChsaWtlICs9IGFuZCBmcmllbmRzKSwgd2Ug
Y29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgd2UgaGF2ZSB0byBmaXJzdCBsb2FkIHRoZSB2
YWx1ZSB1c2luZworICAgICAgICBhIGdldHRlciBhbmQgdGhlbiBzdG9yZSBpdCB3aXRoIGEgc2V0
dGVyLiBUaGlzIHBhdGNoIG1ha2VzIHRoaXMgd29yayByZWN1cnNpdmVseSwgc28gdGhhdCB0aGlz
IHdpbGwKKyAgICAgICAgd29yazoKKyAgICAgICAgCisgICAgICAgICAgICBmbG9hdDQgdmVjOwor
ICAgICAgICAgICAgdmVjLnp3eC55ID0gNDI7CisgICAgICAgICAgICAvLyBub3cgdyBpcyA0Mgor
ICAgICAgICAKKyAgICAgICAgVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRlY29tcG9zZSBpdCBhdXRv
bWF0aWNhbGx5OgorICAgICAgICAKKyAgICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAg
ICBmbG9hdDMgdG1wID0gdmVjLnp3eDsKKyAgICAgICAgICAgIHRtcC55ID0gNDI7CisgICAgICAg
ICAgICB2ZWMuend4ID0gdG1wOworICAgICAgICAKKyAgICAgICAgVGhpcydsbCB3b3JrIHRvIGFu
eSBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIFRvIGNoZWNrIGlmIHRoaXMgd29ya3MsIHRoaXMg
cGF0Y2ggYWRkcyB0d28gc3Vic3RhbnRpYWwgbmV3IHRlc3RzIGNhbGxlZCBURVNUX2dlbmVyaWNB
Y2Nlc3NvcnMoKSBhbmQKKyAgICAgICAgVEVTVF9iaXRTdWJzY3JpcHRBY2Nlc3NvcigpLiBUaGlz
IHRlc3RzIHRoYXQgdGhpcyBzdHVmZiB3b3JrcyB3aXRoIGEgbG90IG9mIGdlbmVyaWMgdHlwZXMs
IGFuZCB0aGF0IGl0J3MKKyAgICAgICAgcG9zc2libGUgdG8gdHVybiBpbnRlZ2VycyBpbnRvIGJp
dHZlY3RvcnMgdXNpbmcgc3Vic2NyaXB0IG92ZXJsb2FkaW5nLiBUaGlzIHBhdGNoIGFsc28gYWRk
cyBzbWFsbGVyIHVuaXQKKyAgICAgICAgdGVzdHMgYWxzby4KKyAgICAgICAgCisgICAgICAgIE9o
LCBhbmQgaXQncyBub3cgcG9zc2libGUgdG8gZ2V0IGFuIGFycmF5J3MgbGVuZ3RoLgorCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzOgorICAgICAgICAo
bmVlZHNQcmltaXRpdmVQcm90b2NvbCk6CisgICAgICAgIChwcm90b2NvbFN1ZmZpeCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKEFu
b255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5n
ZXQgb3JpZ2luKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5nZXQgbmFt
ZSk6CisgICAgICAgIChBbm9ueW1vdXNWYXJpYWJsZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qczoKKyAgICAgICAg
KEFycmF5UmVmVHlwZS5wcm90b3R5cGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZCk6CisgICAgICAg
IChBcnJheVJlZlR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanM6CisgICAgICAgIChB
cnJheVR5cGUucHJvdG90eXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQpOgorICAgICAgICAoQXJy
YXlUeXBlLnByb3RvdHlwZS5hcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCk6CisgICAgICAgIChB
cnJheVR5cGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQu
anM6CisgICAgICAgIChBc3NpZ25tZW50KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DYWxsQXNzaWdubWVudC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9uLnJl
c29sdmUpOgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmUpOgorICAg
ICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmVUb092ZXJsb2FkKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzOgorICAgICAgICAoQ2hlY2tl
ci5wcm90b3R5cGUudmlzaXRQcm9ncmFtKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZp
c2l0RnVuY0RlZik6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmMp
OgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KENoZWNrZXIucHJvdG90eXBlLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0RG90RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVja2VyLnBy
b3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9uKToKKyAgICAgICAgKENoZWNrZXIpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxl
LnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOiBEZWxldGVkLgorICAgICAgICAoQ2hlY2tlci5wcm90
b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxlLnByb3RvdHlwZS52aXNp
dFZhcmlhYmxlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0
UHJvdG9jb2xEZWNsLk5vdGljZVR5cGVWYXJpYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdFByb3RvY29sRGVjbC5zZXQgdGhyb3cpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qczoKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzOgorICAgICAgICAo
RG90RXhwcmVzc2lvbik6CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc3Ry
dWN0KToKKyAgICAgICAgKERvdEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBnZXRGdW5jTmFtZSk6
CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoRG90RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHNldEZ1bmNOYW1lKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzOgorICAgICAgICAoRUJ1ZmZlckJ1aWxk
ZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAoRUJ1ZmZlckJ1
aWxkZXIucHJvdG90eXBlLnZpc2l0TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAgICAgICAoRXZhbHVhdG9y
LnByb3RvdHlwZS52aXNpdElkZW50aXR5RXhwcmVzc2lvbik6CisgICAgICAgIChFdmFsdWF0b3Iu
cHJvdG90eXBlLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoRXZhbHVhdG9yLnBy
b3RvdHlwZS52aXNpdEFub255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEV2YWx1YXRvci5wcm90
b3R5cGUudmlzaXREb3RFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEV2YWx1YXRvci5w
cm90b3R5cGUudmlzaXRMZXRFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzOgorICAgICAgICAoRXhwcmVzc2lv
bkZpbmRlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzOgorICAgICAgICAo
Rm9yTG9vcC5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoRm9yTG9vcCk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanM6CisgICAg
ICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1
YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRDYWxsRXhwcmVzc2lvbik6CisgICAgICAgIChGdW5j
SW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1YnN0aXR1dGlv
bik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9y
LnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGUucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVu
Yyk6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUpOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlKToK
KyAgICAgICAgKEZ1bmNJbnN0YW50aWF0b3IpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qczogQWRkZWQuCisgICAgICAgIChJZGVudGl0eUV4
cHJlc3Npb24pOgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgdGFy
Z2V0KToKKyAgICAgICAgKElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0NvbnN0ZXhw
cik6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1ZSk6
CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJv
dG90eXBlLmdldCBhcnJheSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdl
dCBpbmRleCk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1
ZSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgZ2V0RnVuY05hbWUpOgor
ICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc2V0RnVuY05hbWUpOgorICAgICAg
ICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanM6CisgICAgICAgIChpbmZlclR5
cGVzRm9yQ2FsbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpz
OgorICAgICAgICAoX2lubGluZUZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzOgorICAgICAgICAoSW5saW5lci5wcm90b3R5cGUudmlzaXRDYWxs
RXhwcmVzc2lvbik6CisgICAgICAgIChJbmxpbmVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Np
b24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNp
Y3MuanM6CisgICAgICAgIChJbnRyaW5zaWNzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanM6CisgICAgICAgIChNYWtlQXJy
YXlSZWZFeHByZXNzaW9uLnByb3RvdHlwZS5iZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJl
c3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVD
b250ZXh0LmpzOgorICAgICAgICAoTmFtZUNvbnRleHQpOgorICAgICAgICAoTmFtZUNvbnRleHQu
cHJvdG90eXBlLmFkZCk6CisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZG9TdGF0ZW1l
bnQpOgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmhhbmRsZURlZmluaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKE5hbWVDb250ZXh0LnByb3RvdHlwZS5pc0RlZmluZWQpOiBEZWxldGVk
LgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmRlZmluZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZGVmaW5lQWxsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanM6CisgICAgICAgIChOYW1l
UmVzb2x2ZXIucHJvdG90eXBlLmRvU3RhdGVtZW50KToKKyAgICAgICAgKE5hbWVSZXNvbHZlci5w
cm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAgICAoTmFtZVJlc29sdmVyLnByb3Rv
dHlwZS52aXNpdFByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL05hdGl2ZUZ1bmMuanM6CisgICAgICAgIChOYXRpdmVGdW5jKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanM6CisgICAgICAgIChO
YXRpdmVGdW5jSW5zdGFuY2UpOgorICAgICAgICAoTmF0aXZlRnVuY0luc3RhbmNlLnByb3RvdHlw
ZS5nZXQgaW1wbGVtZW50YXRpb25EYXRhKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob2RlLmpzOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUudmlzaXQpOgorICAgICAgICAo
Tm9kZS52aXNpdCk6CisgICAgICAgIChOb2RlLnVuaWZ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0RG90
RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLnByb3RvdHlw
ZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAg
ICAgKGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KToKKyAgICAgICAgKHBhcnNlUG9zc2libGVT
dWZmaXgpOgorICAgICAgICAoZmluaXNoUGFyc2luZ1ByZUluY3JlbWVudCk6CisgICAgICAgIChn
ZW5lcmljUGFyc2VDb21tYUV4cHJlc3Npb24pOgorICAgICAgICAocGFyc2VGdW5jTmFtZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qczoKKyAgICAgICAgKHBy
ZXBhcmUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanM6Cisg
ICAgICAgIChQcm9ncmFtKToKKyAgICAgICAgKFByb2dyYW0ucHJvdG90eXBlLmdldCBnbG9iYWxO
YW1lQ29udGV4dCk6CisgICAgICAgIChQcm9ncmFtLnByb3RvdHlwZS5hZGQpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qczogQWRk
ZWQuCisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgcmVzdWx0VHlwZSk6CisgICAgICAgIChQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90eXBlLnJld3JpdGVBZnRlckNsb25pbmcpOgor
ICAgICAgICAoUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS51cGRhdGVDYWxsc0Fm
dGVyQ2hhbmdpbmdCYXNlKToKKyAgICAgICAgKFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wcm90
b3R5cGUuZW1pdEdldCk6CisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90
eXBlLmVtaXRTZXQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5
UmVzb2x2ZXIuanM6IEFkZGVkLgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUu
X3Zpc2l0UHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5
cGUudmlzaXREb3RFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJvdG90
eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJv
dG90eXBlLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZl
ci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFBy
b3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0QXNzaWdubWVudCk6CisgICAgICAgIChQcm9w
ZXJ0eVJlc29sdmVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVydHlS
ZXNvbHZlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KFByb3BlcnR5UmVzb2x2ZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0
clR5cGUuanM6CisgICAgICAgIChQdHJUeXBlLnByb3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLnJldHVyblR5cGVGcm9tQW5kT3Zlcmxv
YWQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24uanM6IEFkZGVkLgorICAgICAgICAoUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbik6
CisgICAgICAgIChSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgbFZhbHVl
KToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm9sZFZhbHVl
UmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm5ld1Zh
bHVlUmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLnRv
U3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMu
anM6CisgICAgICAgIChjcmVhdGVOYW1lUmVzb2x2ZXIpOgorICAgICAgICAocmVzb2x2ZU5hbWVz
SW5UeXBlcyk6CisgICAgICAgIChyZXNvbHZlTmFtZXNJblByb3RvY29scyk6CisgICAgICAgIChy
ZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlTmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwu
anM6CisgICAgICAgIChyZXNvbHZlT3ZlcmxvYWRJbXBsKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qczogQWRkZWQuCisgICAgICAgIChyZXNv
bHZlUHJvcGVydGllcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2
ZVR5cGVEZWZzLmpzOgorICAgICAgICAocmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyk6CisgICAgICAg
IChyZXNvbHZlVHlwZURlZnNJblByb3RvY29scyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnNJ
bkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnMpOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanM6CisgICAgICAgIChS
ZXR1cm5DaGVja2VyLnByb3RvdHlwZS5faXNCb29sQ2FzdEZyb21MaXRlcmFsVHJ1ZSk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanM6CisgICAgICAgIChSZXdy
aXRlcik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgor
ICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJlZik6CisgICAgICAgIChSZXdy
aXRlci5wcm90b3R5cGUudmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVy
LnByb3RvdHlwZS5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKToKKyAgICAgICAgKFJl
d3JpdGVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJldHVybik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRHZW5l
cmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0TnVsbFR5
cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnByb2Nlc3NEZXJpdmVkQ2FsbERhdGEp
OgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgorICAg
ICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0RnVuY3Rpb25MaWtlQmxvY2spOgorICAgICAg
ICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0SWZTdGF0ZW1lbnQpOgorICAgICAgICAoUmV3cml0
ZXIucHJvdG90eXBlLnZpc2l0Rm9yTG9vcCk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUu
dmlzaXRBbm9ueW1vdXNWYXJpYWJsZSk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0
TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RhbmRhcmRMaWJyYXJ5LmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0cnVjdExheW91dEJ1aWxkZXIuanM6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRCdWlsZGVyLnBy
b3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmNJbnN0YW5jZSk6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRC
dWlsZGVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpz
OgorICAgICAgICAoU3RydWN0VHlwZS5wcm90b3R5cGUuaW5zdGFudGlhdGUpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qczoKKyAgICAgICAgKFN1YnN0
aXR1dGlvbi5wcm90b3R5cGUuZ2V0IG1hcCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanM6IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qczogQWRkZWQuCisg
ICAgICAgIChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmNyZWF0ZVR5cGVQYXJhbWV0ZXJzKToK
KyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuKToKKyAgICAgICAgKHN5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlRmllbGRUeXBlKToKKyAgICAgICAgKHN5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlVHlwZVJlZik6CisgICAgICAgIChzeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzLnNldHVwQW5kZXIpOgorICAgICAgICAoc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29y
cyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChjaGVja051bWJl
cik6CisgICAgICAgIChURVNUX3NpbXBsZVByb3RvY29sKToKKyAgICAgICAgKFRFU1RfYXNzaWdu
TGVuZ3RoKToKKyAgICAgICAgKFRFU1Rfc2ltcGxlU2V0dGVyKToKKyAgICAgICAgKFRFU1RfZ2Vu
ZXJpY0FjY2Vzc29ycyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5q
czoKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmdldCBpc1JlZik6CisgICAgICAgIChUeXBlLnBy
b3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBl
LmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLnJl
dHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQpOgorICAgICAgICAoVHlwZSk6CisgICAgICAgICogV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzOiBBZGRlZC4KKyAg
ICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlzaXRDb25zdGV4cHJUeXBl
UGFyYW1ldGVyKToKKyAgICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRUeXBlVmFyaWFibGUpOgorICAgICAgICAoVHlwZVBhcmFtZXRlclJld3JpdGVyKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFR5cGVWYXJpYWJsZVRyYWNrZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1ZhbHVlLmpzOgorICAgICAgICAoVmFsdWUucHJvdG90eXBlLmJlY29tZSk6
CisgICAgICAgIChWYWx1ZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFy
aWFibGVSZWYuanM6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IGFkZHJlc3NTcGFjZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZp
c2l0b3IucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKToKKyAgICAgICAgKFZpc2l0
b3IucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xEZWNsKToKKyAgICAgICAgKFZpc2l0b3IpOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzOiBS
ZW1vdmVkLgorCiAyMDE3LTA5LTE2ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCB0aGUgVG9vbHMgYnVpbGQgd2l0aCBDTWFrZSBvbiBtYWNPUwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5qcwko
cmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVz
c1NwYWNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxNiBAQCBmdW5jdGlvbiBpc0Fk
ZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCiAgICAgfQogfQogCitmdW5jdGlvbiBuZWVkc1ByaW1p
dGl2ZVByb3RvY29sKGFkZHJlc3NTcGFjZSkKK3sKKyAgICByZXR1cm4gYWRkcmVzc1NwYWNlICE9
ICJ0aHJlYWQiOworfQorCitmdW5jdGlvbiBwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpCit7
CisgICAgcmV0dXJuIG5lZWRzUHJpbWl0aXZlUHJvdG9jb2woYWRkcmVzc1NwYWNlKSA/ICI6cHJp
bWl0aXZlIiA6ICIiOworfQorCiBmdW5jdGlvbiB2YWxpZGF0ZUFkZHJlc3NTcGFjZShhZGRyZXNz
U3BhY2UpCiB7CiAgICAgaWYgKCFpc0FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpKQpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MyArMjksMTQgQEAgbG9hZCgiVHlwZS5qcyIpOwogbG9hZCgiUmVmZXJlbmNlVHlwZS5qcyIpOwog
bG9hZCgiVmFsdWUuanMiKTsKIGxvYWQoIkV4cHJlc3Npb24uanMiKTsKLWxvYWQoIlZpc2l0b3JC
YXNlLmpzIik7CiBsb2FkKCJSZXdyaXRlci5qcyIpOwogbG9hZCgiVmlzaXRvci5qcyIpOwogbG9h
ZCgiQ3JlYXRlTGl0ZXJhbC5qcyIpOwogbG9hZCgiQ3JlYXRlTGl0ZXJhbFR5cGUuanMiKTsKK2xv
YWQoIlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcyIpOwogCiBsb2FkKCJBZGRyZXNzU3BhY2Uu
anMiKTsKK2xvYWQoIkFub255bW91c1ZhcmlhYmxlLmpzIik7CiBsb2FkKCJBcnJheVJlZlR5cGUu
anMiKTsKIGxvYWQoIkFycmF5VHlwZS5qcyIpOwogbG9hZCgiQXNzaWdubWVudC5qcyIpOwpAQCAt
NDMsNyArNDQsNiBAQCBsb2FkKCJBdXRvV3JhcHBlci5qcyIpOwogbG9hZCgiQmxvY2suanMiKTsK
IGxvYWQoIkJvb2xMaXRlcmFsLmpzIik7CiBsb2FkKCJCcmVhay5qcyIpOwotbG9hZCgiQ2FsbEFz
c2lnbm1lbnQuanMiKTsKIGxvYWQoIkNhbGxFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJDYWxsRnVu
Y3Rpb24uanMiKTsKIGxvYWQoIkNoZWNrLmpzIik7CkBAIC02OSw2ICs2OSw3IEBAIGxvYWQoIkV2
YWx1YXRpb25Db21tb24uanMiKTsKIGxvYWQoIkV2YWx1YXRvci5qcyIpOwogbG9hZCgiRXhwcmVz
c2lvbkZpbmRlci5qcyIpOwogbG9hZCgiRmllbGQuanMiKTsKK2xvYWQoIkZpbmRIaWdoWm9tYmll
cy5qcyIpOwogbG9hZCgiRmxhdHRlblByb3RvY29sRXh0ZW5kcy5qcyIpOwogbG9hZCgiRm9yTG9v
cC5qcyIpOwogbG9hZCgiRnVuYy5qcyIpOwpAQCAtNzYsNyArNzcsMTAgQEAgbG9hZCgiRnVuY0Rl
Zi5qcyIpOwogbG9hZCgiRnVuY0luc3RhbnRpYXRvci5qcyIpOwogbG9hZCgiRnVuY1BhcmFtZXRl
ci5qcyIpOwogbG9hZCgiRnVuY3Rpb25MaWtlQmxvY2suanMiKTsKK2xvYWQoIkhpZ2hab21iaWVG
aW5kZXIuanMiKTsKK2xvYWQoIklkZW50aXR5RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiSWZTdGF0
ZW1lbnQuanMiKTsKK2xvYWQoIkluZGV4RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiSW5mZXJUeXBl
c0ZvckNhbGwuanMiKTsKIGxvYWQoIklubGluZS5qcyIpOwogbG9hZCgiSW5saW5lci5qcyIpOwpA
QCAtODQsNyArODgsNiBAQCBsb2FkKCJJbnN0YW50aWF0ZUltbWVkaWF0ZXMuanMiKTsKIGxvYWQo
IkludExpdGVyYWwuanMiKTsKIGxvYWQoIkludExpdGVyYWxUeXBlLmpzIik7CiBsb2FkKCJJbnRy
aW5zaWNzLmpzIik7Ci1sb2FkKCJMZXRFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJMZXhlci5qcyIp
OwogbG9hZCgiTGV4ZXJUb2tlbi5qcyIpOwogbG9hZCgiTGl0ZXJhbFR5cGVDaGVja2VyLmpzIik7
CkBAIC05OCwyMCArMTAxLDI0IEBAIGxvYWQoIk5hdGl2ZUZ1bmMuanMiKTsKIGxvYWQoIk5hdGl2
ZUZ1bmNJbnN0YW5jZS5qcyIpOwogbG9hZCgiTmF0aXZlVHlwZS5qcyIpOwogbG9hZCgiTmF0aXZl
VHlwZUluc3RhbmNlLmpzIik7Citsb2FkKCJOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzIik7
CiBsb2FkKCJOdWxsTGl0ZXJhbC5qcyIpOwogbG9hZCgiTnVsbFR5cGUuanMiKTsKIGxvYWQoIk92
ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiKTsKIGxvYWQoIlBhcnNlLmpzIik7CiBsb2FkKCJQ
cmVwYXJlLmpzIik7CiBsb2FkKCJQcm9ncmFtLmpzIik7Citsb2FkKCJQcm9wZXJ0eVJlc29sdmVy
LmpzIik7CiBsb2FkKCJQcm90b2NvbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xEZWNsLmpzIik7CiBs
b2FkKCJQcm90b2NvbEZ1bmNEZWNsLmpzIik7CiBsb2FkKCJQcm90b2NvbFJlZi5qcyIpOwogbG9h
ZCgiUHRyVHlwZS5qcyIpOworbG9hZCgiUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyIpOwog
bG9hZCgiUmVjdXJzaW9uQ2hlY2tlci5qcyIpOwogbG9hZCgiUmVzb2x2ZU5hbWVzLmpzIik7CiBs
b2FkKCJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIik7Citsb2FkKCJSZXNvbHZlUHJvcGVydGllcy5q
cyIpOwogbG9hZCgiUmVzb2x2ZVR5cGVEZWZzLmpzIik7CiBsb2FkKCJSZXR1cm4uanMiKTsKIGxv
YWQoIlJldHVybkNoZWNrZXIuanMiKTsKQEAgLTEyMCwxMiArMTI3LDE0IEBAIGxvYWQoIlN0YW5k
YXJkTGlicmFyeS5qcyIpOwogbG9hZCgiU3RydWN0TGF5b3V0QnVpbGRlci5qcyIpOwogbG9hZCgi
U3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vic3RpdHV0aW9uLmpzIik7Ci1sb2FkKCJTdWZmaXhD
YWxsQXNzaWdubWVudC5qcyIpOworbG9hZCgiU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyIp
OwogbG9hZCgiVHlwZURlZi5qcyIpOwogbG9hZCgiVHlwZURlZlJlc29sdmVyLmpzIik7CiBsb2Fk
KCJUeXBlT3JWYXJpYWJsZVJlZi5qcyIpOworbG9hZCgiVHlwZVBhcmFtZXRlclJld3JpdGVyLmpz
Iik7CiBsb2FkKCJUeXBlUmVmLmpzIik7CiBsb2FkKCJUeXBlVmFyaWFibGUuanMiKTsKK2xvYWQo
IlR5cGVWYXJpYWJsZVRyYWNrZXIuanMiKTsKIGxvYWQoIlR5cGVkVmFsdWUuanMiKTsKIGxvYWQo
IlVpbnRMaXRlcmFsLmpzIik7CiBsb2FkKCJVaW50TGl0ZXJhbFR5cGUuanMiKTsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpz
CShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91
c1ZhcmlhYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworbGV0IGFu
b255bW91c1ZhcmlhYmxlQ291bnQgPSAwOworCitjbGFzcyBBbm9ueW1vdXNWYXJpYWJsZSBleHRl
bmRzIFZhbHVlIHsKKyAgICAvLyBZb3UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSB2YXJpYWJsZSdz
IHZhbHVlIGJlZm9yZSB1c2UsIGJ1dCB0aGF0IGNvdWxkIGJlIHF1aXRlIGxhdGUuCisgICAgY29u
c3RydWN0b3Iob3JpZ2luLCB0eXBlID0gbnVsbCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7Cisg
ICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5pbmRleCA9IGFub255
bW91c1ZhcmlhYmxlQ291bnQrKzsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB9Cisg
ICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAgIGdldCBu
YW1lKCkgeyByZXR1cm4gImFub25WYXI8IiArIHRoaXMuaW5kZXggKyAiPiI7IH0KKyAgICAKKyAg
ICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5uYW1lOworICAgIH0KK30K
KwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5q
cwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJy
YXlSZWZUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxNSBAQCBjbGFzcyBBcnJh
eVJlZlR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlCiAgICAgCiAgICAgZ2V0IGlzQXJyYXlSZWYo
KSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2FkKG9yaWdpbiwg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICAgIGFyZ3VtZW50
VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1l
bnRUeXBlICsgIltdICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
NzMsNSArNzMsMTYgQEAgY2xhc3MgQXJyYXlUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQs
IG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CisKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2Fk
KG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE1ha2VBcnJh
eVJlZkV4cHJlc3Npb24ob3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5udW1FbGVtZW50
cyA9IHRoaXMubnVtRWxlbWVudHM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgQXJyYXlSZWZUeXBlKG9yaWdpbiwgInRocmVhZCIsIHRoaXMuZWxlbWVudFR5cGUpOwor
ICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVu
dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bc3NpZ25t
ZW50LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Bc3NpZ25tZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTIgQEAKICJ1c2Ug
c3RyaWN0IjsKIAogY2xhc3MgQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNv
bnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMpCisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBsaHMs
IHJocywgdHlwZSA9IG51bGwpCiAgICAgewogICAgICAgICBzdXBlcihvcmlnaW4pOwogICAgICAg
ICB0aGlzLl9saHMgPSBsaHM7CiAgICAgICAgIHRoaXMuX3JocyA9IHJoczsKKyAgICAgICAgdGhp
cy50eXBlID0gdHlwZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGxocygpIHsgcmV0dXJuIHRoaXMu
X2xoczsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFzc2lnbm1l
bnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFz
c2lnbm1lbnQuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVudCkKQEAgLTEsNDYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3Qi
OwotCi1jbGFzcyBDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNvbnN0
cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzLCByaHMpCi0gICAgewotICAgICAgICBzdXBlcihvcmln
aW4pOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fbGhzID0gbGhz
OwotICAgICAgICB0aGlzLl9yaHMgPSByaHM7Ci0gICAgICAgIHRoaXMuZnVuYyA9IG51bGw7Ci0g
ICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAgIGdl
dCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KLSAgICBnZXQgcmhzKCkgeyByZXR1cm4gdGhp
cy5fcmhzOyB9IC8vIFRoaXMgY2FuIGJlIG51bGwuCi0gICAgCi0gICAgdG9TdHJpbmcoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGhzICsgIiAiICsgdGhpcy5uYW1lICsgKHRoaXMucmhz
ID8gIj0gIiArIHRoaXMucmhzIDogIiIpOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsODIgQEAgY2xhc3MgQ2FsbEV4cHJlc3Npb24gZXh0
ZW5kcyBFeHByZXNzaW9uIAogICAgIGdldCBpc0Nhc3QoKSB7IHJldHVybiB0aGlzLl9pc0Nhc3Q7
IH0KICAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3JldHVyblR5cGU7IH0KICAg
ICAKLSAgICByZXNvbHZlKG92ZXJsb2FkKQorICAgIHN0YXRpYyByZXNvbHZlKG9yaWdpbiwgcG9z
c2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSwgbmFtZSwgdHlwZUFyZ3VtZW50
cywgYXJndW1lbnRMaXN0LCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQorICAgIHsKKyAgICAg
ICAgbGV0IGNhbGwgPSBuZXcgQ2FsbEV4cHJlc3Npb24ob3JpZ2luLCBuYW1lLCB0eXBlQXJndW1l
bnRzLCBhcmd1bWVudExpc3QpOworICAgICAgICBjYWxsLmFyZ3VtZW50VHlwZXMgPSBhcmd1bWVu
dFR5cGVzOworICAgICAgICBpZiAocmV0dXJuVHlwZSkKKyAgICAgICAgICAgIGNhbGwuc2V0Q2Fz
dERhdGEocmV0dXJuVHlwZSk7CisgICAgICAgIHJldHVybiB7Y2FsbCwgcmVzdWx0VHlwZTogY2Fs
bC5yZXNvbHZlKHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1ldGVyc0luU2NvcGUsIHR5cGVB
cmd1bWVudHMpfTsKKyAgICB9CisgICAgCisgICAgcmVzb2x2ZShwb3NzaWJsZU92ZXJsb2Fkcywg
dHlwZVBhcmFtZXRlcnNJblNjb3BlLCB0eXBlQXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaWYg
KCFwb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHRo
aXMub3JpZ2luLm9yaWdpblN0cmluZywgIkRpZCBub3QgZmluZCBhbnkgZnVuY3Rpb25zIG5hbWVk
ICIgKyB0aGlzLm5hbWUpOworICAgICAgICAKKyAgICAgICAgbGV0IG92ZXJsb2FkID0gbnVsbDsK
KyAgICAgICAgbGV0IGZhaWx1cmVzID0gW107CisgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0
ZXIgb2YgdHlwZVBhcmFtZXRlcnNJblNjb3BlKSB7CisgICAgICAgICAgICBpZiAoISh0eXBlUGFy
YW1ldGVyIGluc3RhbmNlb2YgVHlwZVZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5wcm90b2NvbCkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxldCBzaWduYXR1cmVzID0KKyAgICAgICAgICAg
ICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnByb3RvY29sRGVjbC5zaWduYXR1cmVzQnlOYW1l
V2l0aFR5cGVWYXJpYWJsZSh0aGlzLm5hbWUsIHR5cGVQYXJhbWV0ZXIpOworICAgICAgICAgICAg
aWYgKCFzaWduYXR1cmVzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
b3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMsIHRoaXMudHlwZUFyZ3Vt
ZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlzLnJldHVyblR5cGUpOworICAgICAgICAgICAg
aWYgKG92ZXJsb2FkLmZ1bmMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBm
YWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKKyAgICAgICAgICAgIG92ZXJsb2Fk
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW92ZXJsb2FkKSB7CisgICAgICAgICAg
ICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCisgICAgICAgICAgICAgICAgcG9zc2li
bGVPdmVybG9hZHMsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlz
LnJldHVyblR5cGUpOworICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7CisgICAgICAg
ICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7CisgICAgICAgICAg
ICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdpdGgg
IjsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlQXJndW1lbnRzLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyB0aGlzLnR5cGVB
cmd1bWVudHMgKyAiPiBhbmQgIjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1bWVu
dCB0eXBlcyAoIiArIHRoaXMuYXJndW1lbnRUeXBlcyArICIpIjsKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5yZXR1cm5UeXBlKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IiBhbmQg
cmV0dXJuIHR5cGUgIiArIHRoaXMucmV0dXJuVHlwZTsKKyAgICAgICAgICAgICAgICBpZiAoZmFp
bHVyZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIsIGJ1dCBjb25z
aWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1lc3NhZ2UpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZUFyZ3Vt
ZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGUgPSB0
eXBlQXJndW1lbnRzW2ldOworICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBvdmVybG9h
ZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOworICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRl
ciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxzV2l0aENv
bW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBlIGFyZ3Vt
ZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0eXBlQXJn
dW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7CisgICAg
ICAgIH0KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyZ3VtZW50VHlwZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBhcmd1bWVudFR5cGUgPSB0aGlzLmFyZ3VtZW50
VHlwZXNbaV07CisgICAgICAgICAgICBsZXQgcGFyYW1ldGVyVHlwZSA9IG92ZXJsb2FkLmZ1bmMu
cGFyYW1ldGVyc1tpXS50eXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAorICAgICAgICAgICAg
ICAgIG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0aW9uQ29u
dGV4dCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRUeXBlLmVxdWFsc1dpdGhD
b21taXQocGFyYW1ldGVyVHlwZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcg
KyAiIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsIGFmdGVyIHR5cGUgYXJn
dW1lbnQgc3Vic3RpdHV0aW9uOiBhcmd1bWVudCA9ICIgKyBhcmd1bWVudFR5cGUgKyAiLCBwYXJh
bWV0ZXIgPSAiICsgcGFyYW1ldGVyVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXMucmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQpOworICAgIH0KKyAgICAKKyAgICByZXNvbHZl
VG9PdmVybG9hZChvdmVybG9hZCkKICAgICB7CiAgICAgICAgIHRoaXMuZnVuYyA9IG92ZXJsb2Fk
LmZ1bmM7CiAgICAgICAgIHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA9IG92ZXJsb2FkLnR5cGVB
cmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQgaW5zdGFuY2VvZiBUeXBl
ID8gdHlwZUFyZ3VtZW50LnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKSA6IHR5cGVBcmd1bWVudCk7
CiAgICAgICAgIGxldCByZXN1bHQgPSBvdmVybG9hZC5mdW5jLnJldHVyblR5cGUuc3Vic3RpdHV0
ZVRvVW5pZmljYXRpb24oCiAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJz
LCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwotICAgICAgICB0aGlzLnJlc3VsdFR5cGUg
PSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOwogICAgICAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCByZXR1cm4gdHlwZSIpOworICAgICAg
ICByZXN1bHQgPSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOworICAgICAgICB0aGlz
LnJlc3VsdFR5cGUgPSByZXN1bHQ7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwzOSArMzQsNDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZp
c2l0b3IgewogICAgIAogICAgIHZpc2l0UHJvZ3JhbShub2RlKQogICAgIHsKLSAgICAgICAgZm9y
IChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKSB7CisgICAgICAgIGxl
dCBkb1N0YXRlbWVudCA9IHN0YXRlbWVudCA9PiB7CiAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
U3RhdGVtZW50ID0gc3RhdGVtZW50OwogICAgICAgICAgICAgc3RhdGVtZW50LnZpc2l0KHRoaXMp
OwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGxldCB0eXBlIG9mIG5vZGUudHlw
ZXMudmFsdWVzKCkpCisgICAgICAgICAgICBkb1N0YXRlbWVudCh0eXBlKTsKKyAgICAgICAgZm9y
IChsZXQgcHJvdG9jb2wgb2Ygbm9kZS5wcm90b2NvbHMudmFsdWVzKCkpCisgICAgICAgICAgICBk
b1N0YXRlbWVudChwcm90b2NvbCk7CisgICAgICAgIGZvciAobGV0IGZ1bmNzIG9mIG5vZGUuZnVu
Y3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmNzKSB7
CisgICAgICAgICAgICAgICAgdGhpcy52aXNpdEZ1bmMoZnVuYyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgZnVuY3Mgb2Ygbm9kZS5mdW5jdGlvbnMudmFsdWVz
KCkpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAgICAgICAgICAg
ICAgZG9TdGF0ZW1lbnQoZnVuYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIHZp
c2l0RnVuY0RlZihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwor
ICAgIH0KKyAgICAKKyAgICB2aXNpdE5hdGl2ZUZ1bmMobm9kZSkKKyAgICB7CiAgICAgfQogICAg
IAogICAgIHZpc2l0UHJvdG9jb2xEZWNsKG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxldCBz
aWduYXR1cmUgb2Ygbm9kZS5zaWduYXR1cmVzKSB7Ci0gICAgICAgICAgICBsZXQgc2V0ID0gbmV3
IFNldCgpOwotICAgICAgICAgICAgZnVuY3Rpb24gY29uc2lkZXIodGhpbmcpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaW5nLmlzVW5pZmlhYmxlKQotICAgICAgICAgICAg
ICAgICAgICBzZXQuYWRkKHRoaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNsYXNz
IE5vdGljZVR5cGVWYXJpYWJsZSBleHRlbmRzIFZpc2l0b3IgewotICAgICAgICAgICAgICAgIHZp
c2l0VHlwZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29uc2lkZXIobm9kZS50eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
dmlzaXRWYXJpYWJsZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc2lkZXIobm9kZS52YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbGV0IG5vdGljZVR5cGVWYXJpYWJsZSA9IG5ldyBOb3RpY2VU
eXBlVmFyaWFibGUoKTsKKyAgICAgICAgICAgIGxldCB0eXBlVmFyaWFibGVUcmFja2VyID0gbmV3
IFR5cGVWYXJpYWJsZVRyYWNrZXIoKTsKICAgICAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlclR5
cGUgb2Ygc2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRl
clR5cGUudmlzaXQobm90aWNlVHlwZVZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJUeXBlLnZpc2l0KHR5cGVWYXJpYWJsZVRyYWNrZXIpOworICAgICAgICAgICAgTm9kZS52aXNp
dChzaWduYXR1cmUucmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbiwgdHlwZVZhcmlhYmxl
VHJhY2tlcik7CiAgICAgICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHNpZ25hdHVy
ZS50eXBlUGFyYW1ldGVycykgewotICAgICAgICAgICAgICAgIGlmICghc2V0Lmhhcyh0eXBlUGFy
YW1ldGVyKSkKKyAgICAgICAgICAgICAgICBpZiAoIXR5cGVWYXJpYWJsZVRyYWNrZXIuc2V0Lmhh
cyh0eXBlUGFyYW1ldGVyKSkKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgV1R5cGVFcnJvcih0
eXBlUGFyYW1ldGVyLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBlIHBhcmFtZXRlciB0byBwcm90
b2NvbCBzaWduYXR1cmUgbm90IGluZmVycmFibGUgZnJvbSB2YWx1ZSBwYXJhbWV0ZXJzIik7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXNldC5oYXMobm9kZS50eXBlVmFyaWFibGUp
KQorICAgICAgICAgICAgaWYgKCF0eXBlVmFyaWFibGVUcmFja2VyLnNldC5oYXMobm9kZS50eXBl
VmFyaWFibGUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHNpZ25hdHVy
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUHJvdG9jb2wncyB0eXBlIHZhcmlhYmxlICgiICsgbm9k
ZS5uYW1lICsgIikgbm90IG1lbnRpb25lZCBpbiBzaWduYXR1cmU6ICIgKyBzaWduYXR1cmUpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTQxLDYgKzE0OSwzMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVu
ZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiBsaHNUeXBlOwogICAgIH0KICAgICAKKyAgICB2
aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUu
dGFyZ2V0LnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS5sVmFsdWUuaXNMVmFs
dWUpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsICJMSFMgb2YgcmVhZC1tb2RpZnktd3JpdGUgaXMgbm90IGFuIExWYWx1ZTogIiArIG5v
ZGUubFZhbGUpOworICAgICAgICBsZXQgbGhzVHlwZSA9IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMp
OworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAgICBub2Rl
Lm5ld1ZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnZp
c2l0KHRoaXMpOworICAgICAgICBub2RlLm5ld1ZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAg
ICBsZXQgbmV3VmFsdWVUeXBlID0gbm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAgICAg
ICAgaWYgKCFsaHNUeXBlLmVxdWFsc1dpdGhDb21taXQobmV3VmFsdWVUeXBlKSkKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBl
IG1pc21hdGNoIGluIHJlYWQtbW9kaWZ5LXdyaXRlOiAiICsgbGhzVHlwZSArICIgdmVyc3VzICIg
KyBuZXdWYWx1ZVR5cGUpOworICAgICAgICByZXR1cm4gbm9kZS5yZXN1bHRFeHAudmlzaXQodGhp
cyk7CisgICAgfQorICAgIAorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKKyAgICB7
CisgICAgICAgIGlmICghbm9kZS50eXBlKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJB
bm9ueW1vdXMgdmFyaWFibGUgbXVzdCBrbm93IHR5cGUgYmVmb3JlIGZpcnN0IGFwcGVhcmFuY2Ui
KTsKKyAgICB9CisgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKICAg
ICB7CiAgICAgICAgIGxldCB0eXBlID0gbm9kZS5wdHIudmlzaXQodGhpcykudW5pZnlOb2RlOwpA
QCAtMTQ4LDYgKzE4Miw4IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlR5
cGUgcGFzc2VkIHRvIGRlcmVmZXJlbmNlIGlzIG5vdCBhIHBvaW50ZXI6ICIgKyB0eXBlKTsKICAg
ICAgICAgbm9kZS50eXBlID0gdHlwZS5lbGVtZW50VHlwZTsKICAgICAgICAgbm9kZS5hZGRyZXNz
U3BhY2UgPSB0eXBlLmFkZHJlc3NTcGFjZTsKKyAgICAgICAgaWYgKCFub2RlLmFkZHJlc3NTcGFj
ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhZGRyZXNzIHNwYWNlIGluIHR5
cGU6ICIgKyB0eXBlKTsKICAgICAgICAgcmV0dXJuIG5vZGUudHlwZTsKICAgICB9CiAgICAgCkBA
IC0xNjUsNyArMjAxLDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHsK
ICAgICAgICAgbGV0IGVsZW1lbnRUeXBlID0gbm9kZS5sVmFsdWUudmlzaXQodGhpcykudW5pZnlO
b2RlOwogICAgICAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBQdHJUeXBlKSB7Ci0gICAg
ICAgICAgICBub2RlLmJlY29tZUNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihu
b2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlS
ZWZUeXBlKG5vZGUub3JpZ2luLCBlbGVtZW50VHlwZS5hZGRyZXNzU3BhY2UsIGVsZW1lbnRUeXBl
LmVsZW1lbnRUeXBlKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4OSwzNSArMjI1LDg3IEBA
IGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJTaG91bGQgbm90IGV4aXN0IHlldC4iKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RFeHBy
ZXNzaW9uKG5vZGUpCisgICAgX2ZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3Mobm9kZSwgYmFz
ZVR5cGUsIGV4dHJhQXJncywgZXh0cmFBcmdUeXBlcykKICAgICB7Ci0gICAgICAgIGxldCBzdHJ1
Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBiYXNl
VHlwZSA9IGJhc2VUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKQorICAgICAgICBub2RlLmJh
c2VUeXBlID0gYmFzZVR5cGU7CiAgICAgICAgIAotICAgICAgICBub2RlLnN0cnVjdFR5cGUgPSBz
dHJ1Y3RUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKLSAgICAgICAgCi0gICAgICAgIGxl
dCB1bmRlcmx5aW5nU3RydWN0ID0gc3RydWN0VHlwZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChz
dHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikKLSAgICAgICAgICAgIHVuZGVybHlpbmdTdHJ1
Y3QgPSB1bmRlcmx5aW5nU3RydWN0LnR5cGU7Ci0gICAgICAgIAotICAgICAgICBpZiAoISh1bmRl
cmx5aW5nU3RydWN0IGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJPcGVyYW5kIHRvIGRvdCBl
eHByZXNzaW9uIGlzIG5vdCBhIHN0cnVjdCB0eXBlOiAiICsgc3RydWN0VHlwZSk7CisgICAgICAg
IC8vIFN1Y2ggYSB0eXBlIG11c3QgZXhpc3QuIFRoaXMgbWF5IHRocm93IGlmIGl0IGRvZXNuJ3Qu
CisgICAgICAgIGxldCB0eXBlRm9yQW5kID0gYmFzZVR5cGUuYXJndW1lbnRUeXBlRm9yQW5kT3Zl
cmxvYWQobm9kZS5vcmlnaW4pOworICAgICAgICBpZiAoIXR5cGVGb3JBbmQpCisgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlwZUZvckFuZCIpOworICAgICAgICAKKyAg
ICAgICAgbGV0IGVycm9yRm9yR2V0OworICAgICAgICBsZXQgZXJyb3JGb3JBbmQ7CisgICAgICAg
IAorICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IENhbGxFeHByZXNzaW9u
LnJlc29sdmUoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUucG9zc2libGVHZXRP
dmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsCisgICAgICAg
ICAgICAgICAgbm9kZS5nZXRGdW5jTmFtZSwgW10sIFtub2RlLmJhc2UsIC4uLmV4dHJhQXJnc10s
IFtiYXNlVHlwZSwgLi4uZXh0cmFBcmdUeXBlc10sIG51bGwpOworICAgICAgICAgICAgbm9kZS5j
YWxsRm9yR2V0ID0gcmVzdWx0LmNhbGw7CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JH
ZXQgPSByZXN1bHQucmVzdWx0VHlwZTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgaWYgKCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93
IGU7CisgICAgICAgICAgICBlcnJvckZvckdldCA9IGU7CisgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikgCi0gICAgICAgICAgICB1
bmRlcmx5aW5nU3RydWN0ID0gdW5kZXJseWluZ1N0cnVjdC5pbnN0YW50aWF0ZShzdHJ1Y3RUeXBl
LnR5cGVBcmd1bWVudHMsICJzaGFsbG93Iik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBs
ZXQgYmFzZUZvckFuZCA9IGJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQobm9kZS5vcmln
aW4sIG5vZGUuYmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBD
YWxsRXhwcmVzc2lvbi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2Rl
LnBvc3NpYmxlQW5kT3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0
ZXJzLAorICAgICAgICAgICAgICAgIG5vZGUuYW5kRnVuY05hbWUsIFtdLCBbYmFzZUZvckFuZCwg
Li4uZXh0cmFBcmdzXSwgW3R5cGVGb3JBbmQsIC4uLmV4dHJhQXJnVHlwZXNdLAorICAgICAgICAg
ICAgICAgIG51bGwpOworICAgICAgICAgICAgbm9kZS5jYWxsRm9yQW5kID0gcmVzdWx0LmNhbGw7
CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JBbmQgPSByZXN1bHQucmVzdWx0VHlwZS51
bmlmeU5vZGUucmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChub2RlLm9yaWdpbik7CisgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBXVHlwZUVycm9y
KSkKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgZXJyb3JGb3JBbmQgPSBl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGUucmVzdWx0VHlwZUZvckdl
dCAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yQW5kKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcigKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsCisgICAg
ICAgICAgICAgICAgIkNhbm5vdCByZXNvbHZlIGFjY2VzczsgdHJpZWQgYnktdmFsdWU6XG4iICsK
KyAgICAgICAgICAgICAgICBlcnJvckZvckdldC5tZXNzYWdlICsgIlxuIiArCisgICAgICAgICAg
ICAgICAgImFuZCB0cmllZCBieS1wb2ludGVyOlxuIiArCisgICAgICAgICAgICAgICAgZXJyb3JG
b3JBbmQubWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLnJl
c3VsdFR5cGVGb3JHZXQgJiYgbm9kZS5yZXN1bHRUeXBlRm9yQW5kCisgICAgICAgICAgICAmJiAh
bm9kZS5yZXN1bHRUeXBlRm9yR2V0LmVxdWFscyhub2RlLnJlc3VsdFR5cGVGb3JBbmQpKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
UmVzdWx0IHR5cGUgcmVzb2x2ZWQgYnktdmFsdWUgKCIgKyBub2RlLnJlc3VsdFR5cGVGb3JHZXQg
KyAiKSBkb2VzIG5vdCBtYXRjaCByZXN1bHQgdHlwZSByZXNvbHZlZCBieS1wb2ludGVyICgiICsg
bm9kZS5yZXN1bHRUeXBlRm9yQW5kICsgIikiKTsKKyAgICAgICAgCisgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVzb2x2ZSgKKyAgICAgICAg
ICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkcywgdGhpcy5fY3Vy
cmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICBub2RlLnNldEZ1
bmNOYW1lLCBbXSwgW25vZGUuYmFzZSwgLi4uZXh0cmFBcmdzLCBudWxsXSwgW2Jhc2VUeXBlLCAu
Li5leHRyYUFyZ1R5cGVzLCBub2RlLnJlc3VsdFR5cGVdLCBudWxsKTsKKyAgICAgICAgICAgIG5v
ZGUuY2FsbEZvclNldCA9IHJlc3VsdC5jYWxsOworICAgICAgICAgICAgaWYgKCFyZXN1bHQucmVz
dWx0VHlwZS5lcXVhbHMoYmFzZVR5cGUpKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlJlc3VsdCB0eXBlIG9mIHNldHRlciAi
ICsgcmVzdWx0LmNhbGwuZnVuYyArICIgaXMgbm90IHRoZSBiYXNlIHR5cGUgIiArIGJhc2VUeXBl
KTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9m
IFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICBub2Rl
LmVycm9yRm9yU2V0ID0gZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbGV0IGZpZWxk
ID0gdW5kZXJseWluZ1N0cnVjdC5maWVsZEJ5TmFtZShub2RlLmZpZWxkTmFtZSk7Ci0gICAgICAg
IGlmICghZmllbGQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJGaWVsZCAiICsgbm9kZS5maWVsZE5hbWUgKyAiIG5vdCBmb3VuZCBp
biAiICsgc3RydWN0VHlwZSk7Ci0gICAgICAgIHJldHVybiBmaWVsZC50eXBlOworICAgICAgICBy
ZXR1cm4gbm9kZS5yZXN1bHRUeXBlOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Np
b24obm9kZSkKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIG5v
ZGUudHlwZSA9IG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmICghbm9kZS50
eXBlKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEaWQgbm90IGdldCB0eXBlIGZvciBu
b2RlOiAiICsgbm9kZS5hcmd1bWVudCk7Ci0gICAgICAgIHJldHVybiBub2RlLmJvZHkudmlzaXQo
dGhpcyk7CisgICAgICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyku
dW5pZnlOb2RlOworICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFj
Y2Vzcyhub2RlLCBzdHJ1Y3RUeXBlLCBbXSwgW10pOworICAgIH0KKyAgICAKKyAgICB2aXNpdElu
ZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGFycmF5VHlwZSA9IG5vZGUu
YXJyYXkudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBsZXQgaW5kZXhUeXBlID0gbm9k
ZS5pbmRleC52aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0aGlzLl9maW5p
c2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIGFycmF5VHlwZSwgW25vZGUuaW5kZXhdLCBb
aW5kZXhUeXBlXSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKQEAg
LTMyMiwxMCArNDEwLDEwIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgICAgIHJlc3VsdCA9IGV4cHJlc3Npb24udmlzaXQodGhpcyk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAg
IHsKLSAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGVzID0gbm9kZS50eXBlQXJndW1lbnRzLm1h
cCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgbGV0
IHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0
eXBlQXJndW1lbnQudmlzaXQodGhpcykpOwogICAgICAgICBsZXQgYXJndW1lbnRUeXBlcyA9IG5v
ZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiB7CiAgICAgICAgICAgICBsZXQgbmV3QXJn
dW1lbnQgPSBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgICAgIGlmICghbmV3QXJndW1l
bnQpCkBAIC0zMzMsNzcgKzQyMSwxMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7
CiAgICAgICAgICAgICByZXR1cm4gbmV3QXJndW1lbnQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkp
OwogICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBoYW5k
bGUgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yJltdIGlzIGNhbGxlZCB3aXRoIGEgdHlwZSB0aGF0
IGlzbid0IHN1ZmZpY2llbnRseQotICAgICAgICAvLyByZWZlcmVuY2V5LgotICAgICAgICBpZiAo
bm9kZS5uYW1lID09ICJvcGVyYXRvciZbXSIpIHsKLSAgICAgICAgICAgIGxldCBhcmdUeXBlID0g
YXJndW1lbnRUeXBlc1swXS51bmlmeU5vZGU7Ci0gICAgICAgICAgICBpZiAoYXJnVHlwZSBpbnN0
YW5jZW9mIFB0clR5cGUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMgbm90IHZhbGlkIik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcmdUeXBlIGluc3RhbmNlb2YgQXJyYXlU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcgTWFrZUFy
cmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5hcmd1bWVudExpc3RbMF0pOwotICAg
ICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdLm51bUVsZW1lbnRzID0gYXJnVHlwZS5u
dW1FbGVtZW50czsKLSAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IEFycmF5
UmVmVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ1R5cGUuZWxlbWVudFR5cGUpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmICghKGFyZ1R5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKSB7
Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcgTWFrZVB0ckV4cHJl
c3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0WzBdKTsKLSAgICAgICAgICAgICAg
ICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IFB0clR5cGUobm9kZS5vcmlnaW4sICJ0aHJlYWQiLCBh
cmd1bWVudFR5cGVzWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKICAg
ICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlczsKICAgICAgICAgaWYgKG5v
ZGUucmV0dXJuVHlwZSkKICAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsK
LSAgICAgICAgCi0gICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7Ci0gICAgICAgIGxldCBmYWls
dXJlcyA9IFtdOwotICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHRoaXMuX2N1cnJl
bnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGlmICghKHR5cGVQYXJh
bWV0ZXIgaW5zdGFuY2VvZiBUeXBlVmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnByb3RvY29sKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbGV0IHNpZ25hdHVyZXMgPQotICAgICAgICAgICAg
ICAgIHR5cGVQYXJhbWV0ZXIucHJvdG9jb2wucHJvdG9jb2xEZWNsLnNpZ25hdHVyZXNCeU5hbWVX
aXRoVHlwZVZhcmlhYmxlKG5vZGUubmFtZSwgdHlwZVBhcmFtZXRlcik7Ci0gICAgICAgICAgICBp
ZiAoIXNpZ25hdHVyZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBv
dmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgbm9kZS50eXBlQXJndW1l
bnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVyblR5cGUpOwotICAgICAgICAgICAgaWYgKG92
ZXJsb2FkLmZ1bmMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmYWlsdXJl
cy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKLSAgICAgICAgICAgIG92ZXJsb2FkID0gbnVs
bDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW92ZXJsb2FkKSB7Ci0gICAgICAgICAgICBvdmVy
bG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCi0gICAgICAgICAgICAgICAgbm9kZS5wb3NzaWJs
ZU92ZXJsb2Fkcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVy
blR5cGUpOwotICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7Ci0gICAgICAgICAgICAg
ICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Ci0gICAgICAgICAgICAgICAg
bGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdpdGggIjsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyBub2RlLnR5cGVBcmd1bWVu
dHMgKyAiPiBhbmQgIjsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1bWVudCB0eXBl
cyAoIiArIGFyZ3VtZW50VHlwZXMgKyAiKSI7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmV0
dXJuVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5kIHJldHVybiB0eXBl
ICIgKyBub2RlLnJldHVyblR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lkZXJlZDpcbiIg
KyBmYWlsdXJlcy5qb2luKCJcbiIpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudFR5cGVzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgdHlwZUFyZ3VtZW50VHlwZSA9IHR5cGVBcmd1
bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBvdmVybG9hZC5m
dW5jLnR5cGVQYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRlciBp
bnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxzV2l0aENvbW1p
dCh0eXBlQXJndW1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0
ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBlIGFyZ3VtZW50
IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0eXBlQXJndW1l
bnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlc1tpXTsKLSAg
ICAgICAgICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gb3ZlcmxvYWQuZnVuYy5wYXJhbWV0ZXJzW2ld
LnR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCi0gICAgICAgICAgICAgICAgb3ZlcmxvYWQu
ZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250ZXh0KTsKLSAgICAg
ICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVudFR5cGUuZXF1YWxzV2l0aENvbW1pdChwYXJhbWV0
ZXJUeXBlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyArICIgYXJndW1lbnQg
YW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0ZXIgdHlwZSBhcmd1bWVudCBzdWJzdGl0
dXRpb246IGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50VHlwZSArICIsIHBhcmFtZXRlciA9ICIgKyBw
YXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm9kZS5yZXNvbHZlKG92
ZXJsb2FkKTsKKworICAgICAgICBsZXQgcmVzdWx0ID0gbm9kZS5yZXNvbHZlKG5vZGUucG9zc2li
bGVPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsIHR5cGVB
cmd1bWVudHMpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIH0KIApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHByZXNzaW9uLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qcwkocmV2
aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHBy
ZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBAIGNsYXNzIENvbW1hRXhw
cmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24KICAgICAKICAgICBnZXQgbGlzdCgpIHsgcmV0dXJu
IHRoaXMuX2xpc3Q7IH0KICAgICAKKyAgICAvLyBOT1RFOiBJdCdzIHN1cGVyIHRlbXB0aW5nIHRv
IHNheSB0aGF0IENvbW1hRXhwcmVzc2lvbiBpcyBhbiBsVmFsdWUgaWYgaXRzIGxhc3QgZW50cnkg
aXMgYW4gbFZhbHVlLiBCdXQsCisgICAgLy8gUHJvcGVydHlSZXNvbHZlciByZWxpZXMgb24gdGhp
cyBub3QgYmVpbmcgdGhlIGNhc2UuCisgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuICIoIiArIHRoaXMubGlzdC50b1N0cmluZygpICsgIikiOwpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RlcmVmZXJlbmNlRXhwcmVzc2lv
bi5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIg
QEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgRGVyZWZlcmVuY2VFeHByZXNzaW9uIGV4dGVuZHMg
RXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBwdHIpCisgICAgY29uc3RydWN0
b3Iob3JpZ2luLCBwdHIsIHR5cGUgPSBudWxsLCBhZGRyZXNzU3BhY2UgPSBudWxsKQogICAgIHsK
ICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fcHRyID0gcHRyOworICAgICAg
ICB0aGlzLnR5cGUgPSB0eXBlOworICAgICAgICB0aGlzLmFkZHJlc3NTcGFjZSA9IGFkZHJlc3NT
cGFjZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IHB0cigpIHsgcmV0dXJuIHRoaXMuX3B0cjsgfQpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpz
CShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RF
eHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxOSArMjQsMjIgQEAKICAqLwogInVz
ZSBzdHJpY3QiOwogCi1jbGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7Citj
bGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIHsKICAg
ICBjb25zdHJ1Y3RvcihvcmlnaW4sIHN0cnVjdCwgZmllbGROYW1lKQogICAgIHsKLSAgICAgICAg
c3VwZXIob3JpZ2luKTsKLSAgICAgICAgdGhpcy5fc3RydWN0ID0gc3RydWN0OworICAgICAgICBz
dXBlcihvcmlnaW4sIHN0cnVjdCk7CiAgICAgICAgIHRoaXMuX2ZpZWxkTmFtZSA9IGZpZWxkTmFt
ZTsKICAgICB9CiAgICAgCi0gICAgZ2V0IHN0cnVjdCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdDsg
fQorICAgIGdldCBzdHJ1Y3QoKSB7IHJldHVybiB0aGlzLmJhc2U7IH0KICAgICBnZXQgZmllbGRO
YW1lKCkgeyByZXR1cm4gdGhpcy5fZmllbGROYW1lOyB9CiAgICAgZ2V0IGlzTFZhbHVlKCkgeyBy
ZXR1cm4gdGhpcy5zdHJ1Y3QuaXNMVmFsdWU7IH0KICAgICBnZXQgYWRkcmVzc1NwYWNlKCkgeyBy
ZXR1cm4gdGhpcy5zdHJ1Y3QuYWRkcmVzc1NwYWNlOyB9CiAgICAgCisgICAgZ2V0IGdldEZ1bmNO
YW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFtZTsgfQorICAgIGdldCBh
bmRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvciYuIiArIHRoaXMuZmllbGROYW1lOyB9Cisg
ICAgZ2V0IHNldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFt
ZSArICI9IjsgfQorICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiAi
KCIgKyB0aGlzLnN0cnVjdCArICIuIiArIHRoaXMuZmllbGROYW1lICsgIikiOwpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxMiArNjAsMTQgQEAgY2xhc3MgRUJ1ZmZlciB7CiAgICAgZ2V0KGluZGV4KQogICAg
IHsKICAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl9hcnJheS5sZW5ndGgp
Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm91dCBvZiBib3VuZHMgYnVmZmVyIGFjY2Vz
cyIpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJPdXQgb2YgYm91bmRzIGJ1ZmZlciBh
Y2Nlc3MgKGJ1ZmZlciA9ICIgKyB0aGlzICsgIiwgaW5kZXggPSAiICsgaW5kZXggKyAiKSIpOwog
ICAgICAgICByZXR1cm4gdGhpcy5fYXJyYXlbaW5kZXhdOwogICAgIH0KICAgICAKICAgICBzZXQo
aW5kZXgsIHZhbHVlKQogICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0
aGlzLl9hcnJheS5sZW5ndGgpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm91dCBvZiBi
b3VuZHMgYnVmZmVyIGFjY2VzcyAoYnVmZmVyID0gIiArIHRoaXMgKyAiLCBpbmRleCA9ICIgKyBp
bmRleCArICIpIik7CiAgICAgICAgIHRoaXMuX2FycmF5W2luZGV4XSA9IHZhbHVlOwogICAgIH0K
ICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJC
dWlsZGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9FQnVmZmVyQnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTA0LDExICsxMDQsOSBA
QCBjbGFzcyBFQnVmZmVyQnVpbGRlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBzdXBlci52
aXNpdExvZ2ljYWxOb3Qobm9kZSk7CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lv
bihub2RlKQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7CiAgICAgICAg
IHRoaXMuX2NyZWF0ZUVQdHJGb3JOb2RlKG5vZGUpOwotICAgICAgICBub2RlLmFyZ3VtZW50LnZp
c2l0KHRoaXMpOwotICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAog
ICAgIHZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNiArMTAyLDExIEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAg
ICAgICByZXR1cm4gdGFyZ2V0OwogICAgIH0KICAgICAKKyAgICB2aXNpdElkZW50aXR5RXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMp
OworICAgIH0KKyAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAg
IHsKICAgICAgICAgbGV0IHB0ciA9IG5vZGUucHRyLnZpc2l0KHRoaXMpLmxvYWRWYWx1ZSgpOwpA
QCAtMTEyLDcgKzExNyw4IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAg
IAogICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBub2RlLmVQdHIuYm94KG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpKTsKKyAgICAgICAgbGV0IHB0
ciA9IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpOworICAgICAgICByZXR1cm4gbm9kZS5lUHRyLmJv
eChwdHIpOwogICAgIH0KICAgICAKICAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9k
ZSkKQEAgLTEyNSwxMiArMTMxLDYgQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7
CiAgICAgICAgIHJldHVybiBub2RlLmVQdHIuYm94KG5ldyBFQXJyYXlSZWYobm9kZS5sVmFsdWUu
dmlzaXQodGhpcykubG9hZFZhbHVlKCksIDEpKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RF
eHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgc3RydWN0UHRyID0gbm9kZS5zdHJ1
Y3QudmlzaXQodGhpcyk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3RQdHIucGx1cyhub2RlLmZpZWxk
Lm9mZnNldCk7Ci0gICAgfQotICAgIAogICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCiAg
ICAgewogICAgICAgICBsZXQgcmVzdWx0OwpAQCAtMjMxLDEwICsyMzEsOSBAQCBjbGFzcyBFdmFs
dWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgQ29udGludWVFeGNlcHRpb247
CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0QW5v
bnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAgICAgIG5vZGUuZVB0ci5jb3B5RnJvbShu
b2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMpLCBub2RlLnR5cGUuc2l6ZSk7Ci0gICAgICAgIHJldHVy
biBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUudHlwZS5wb3B1bGF0ZURlZmF1
bHRWYWx1ZShub2RlLmVQdHIuYnVmZmVyLCBub2RlLmVQdHIub2Zmc2V0KTsKICAgICB9CiAgICAg
CiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQpAQCAtMjQ3LDYgKzI0Niw4IEBAIGNsYXNz
IEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgaWYgKCF0eXBlIHx8ICFh
cmd1bWVudCkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlw
ZSBvciBhcmd1bWVudDsgaSA9ICIgKyBpICsgIiwgYXJndW1lbnQgPSAiICsgYXJndW1lbnQgKyAi
LCB0eXBlID0gIiArIHR5cGUgKyAiOyBpbiAiICsgbm9kZSk7CiAgICAgICAgICAgICBsZXQgYXJn
dW1lbnRWYWx1ZSA9IGFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAgICAgICAgICAgaWYgKCFhcmd1
bWVudFZhbHVlKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhcmd1bWVu
dCB2YWx1ZSwgaSA9ICIgKyBpICsgIiwgbm9kZSA9ICIgKyBub2RlKTsKICAgICAgICAgICAgIGNh
bGxBcmd1bWVudHMucHVzaCgoKSA9PiB0aGlzLl9zbmFwc2hvdCh0eXBlLCBudWxsLCBhcmd1bWVu
dFZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDE2IEBAIGNsYXNzIEV4cHJlc3Npb25GaW5kZXIgZXh0
ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CiAgICAgfQogICAg
IAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SWRlbnRpdHlF
eHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9jYWxsYmFjayhub2RlKTsKKyAg
ICB9CisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAg
dGhpcy5fY2FsbGJhY2sobm9kZSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9GaW5kSGlnaFpvbWJpZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRmluZEhpZ2hab21iaWVzLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0ZpbmRIaWdoWm9tYmllcy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKQorewor
ICAgIHByb2dyYW0udmlzaXQobmV3IEhpZ2hab21iaWVGaW5kZXIoKSk7Cit9CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHJldmlzaW9uIDIyMjEyMykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgRm9yTG9vcCBleHRlbmRzIE5vZGUgewogCiAgICAgdG9T
dHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJmb3IgKCIgKyAodGhpcy5pbml0aWFsaXph
dGlvbiA/IHRoaXMuaW5pdGlhbGl6YXRpb24gOiAiICIpICsgIjsgIiArICh0aGlzLmNvbmRpdGlv
biA/IHRoaXMuY29uZGl0aW9uIDogIiIpICsgIjsgIiArICh0aGlzLmluY3JlbWVudCA/IHRoaXMu
aW5jcmVtZW50IDogIiIpICsgIikgIiArIGJvZHk7CisgICAgICAgIHJldHVybiAiZm9yICgiICsg
KHRoaXMuaW5pdGlhbGl6YXRpb24gPyB0aGlzLmluaXRpYWxpemF0aW9uIDogIiAiKSArICI7ICIg
KyAodGhpcy5jb25kaXRpb24gPyB0aGlzLmNvbmRpdGlvbiA6ICIiKSArICI7ICIgKyAodGhpcy5p
bmNyZW1lbnQgPyB0aGlzLmluY3JlbWVudCA6ICIiKSArICIpICIgKyB0aGlzLmJvZHk7CiAgICAg
fQogfTsKIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMiBAQCBjbGFzcyBGdW5jIGV4dGVuZHMgTm9kZSB7CiAg
ICAgewogICAgICAgICBpZiAoIShvcmlnaW4gaW5zdGFuY2VvZiBMZXhlclRva2VuKSkKICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIG9yaWdpbjogIiArIG9yaWdpbik7CisgICAgICAg
IGZvciAobGV0IHBhcmFtZXRlciBvZiBwYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICBpZiAoIXBh
cmFtZXRlcikKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcGFyYW1ldGVy
Iik7CisgICAgICAgICAgICBpZiAoIXBhcmFtZXRlci50eXBlKQorICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTnVsbCBwYXJhbWV0ZXIgdHlwZSIpOworICAgICAgICB9CiAgICAgICAg
IHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKICAgICAgICAgdGhpcy5f
bmFtZSA9IG5hbWU7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5z
dGFudGlhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0Z1bmNJbnN0YW50aWF0b3IuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTc1
LDMzICs3NSwzOCBAQCBjbGFzcyBGdW5jSW5zdGFudGlhdG9yIHsKICAgICAgICAgICAgICAgICAg
ICAgbGV0IG92ZXJsb2FkID0gcmVzb2x2ZU92ZXJsb2FkSW1wbChyZXN1bHQucG9zc2libGVPdmVy
bG9hZHMsIHJlc3VsdC50eXBlQXJndW1lbnRzLCByZXN1bHQuYXJndW1lbnRUeXBlcywgcmVzdWx0
LnJldHVyblR5cGVGb3JPdmVybG9hZFJlc29sdXRpb24pOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoIW92ZXJsb2FkLmZ1bmMpCiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkNvdWxkIG5vdCByZXNvbHZlIHByb3RvY29sIHNpZ25hdHVyZSBmdW5jdGlvbiBjYWxsIGR1
cmluZyBpbnN0YW50aWF0aW9uOiAiICsgcmVzdWx0LmZ1bmMgKyAob3ZlcmxvYWQuZmFpbHVyZXMu
bGVuZ3RoID8gIjsgdHJpZWQ6XG4iICsgb3ZlcmxvYWQuZmFpbHVyZXMuam9pbigiXG4iKSA6ICIi
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKG92ZXJsb2FkKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmVUb092ZXJsb2FkKG92ZXJsb2FkKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dC5mdW5jLmlzTmF0aXZlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQubmF0aXZlRnVuY0lu
c3RhbmNlID0gdGhpc0luc3RhbnRpYXRvci5nZXRVbmlxdWUocmVzdWx0LmZ1bmMsIHJlc3VsdC5h
Y3R1YWxUeXBlQXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBsZXQgc3Vic3RpdHV0aW9uID0gbmV3IEluc3RhbnRpYXRpb25TdWJzdGl0dXRpb24oZnVuYy50
eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7CisgICAgICAgIGxldCBpbnN0YW50aWF0ZUlt
bWVkaWF0ZXMgPSBuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCk7CiAgICAgICAgIAotICAgICAg
ICBjbGFzcyBJbnN0YW50aWF0ZSBleHRlbmRzIFZpc2l0b3JCYXNlIHsKKyAgICAgICAgY2xhc3Mg
SW5zdGFudGlhdGUgewogICAgICAgICAgICAgdmlzaXRGdW5jRGVmKGZ1bmMpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdW5jRGVmKAogICAgICAgICAgICAgICAg
ICAgICBmdW5jLm9yaWdpbiwgZnVuYy5uYW1lLAotICAgICAgICAgICAgICAgICAgICBmdW5jLnJl
dHVyblR5cGUudmlzaXQoc3Vic3RpdHV0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5y
ZXR1cm5UeXBlLnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlhdGVz
KSwKICAgICAgICAgICAgICAgICAgICAgW10sIC8vIFdlJ3JlIGluc3RhbnRpYXRlZCBzbyB3ZSBu
byBsb25nZXIgdGFrZSB0eXBlIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMu
cGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChzdWJzdGl0dXRpb24p
KSwKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5ib2R5LnZpc2l0KHN1YnN0aXR1dGlvbikpOwor
ICAgICAgICAgICAgICAgICAgICBmdW5jLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJh
bWV0ZXIudmlzaXQoc3Vic3RpdHV0aW9uKS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpKSwK
KyAgICAgICAgICAgICAgICAgICAgZnVuYy5ib2R5LnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQo
aW5zdGFudGlhdGVJbW1lZGlhdGVzKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHZpc2l0TmF0aXZlRnVuYyhmdW5jKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBuZXcgTmF0aXZlRnVuY0luc3RhbmNlKAogICAgICAgICAgICAgICAgICAg
ICBmdW5jLAotICAgICAgICAgICAgICAgICAgICBmdW5jLnJldHVyblR5cGUudmlzaXQoc3Vic3Rp
dHV0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0
ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHN1YnN0aXR1dGlvbikpLAotICAgICAgICAgICAgICAgICAg
ICBmdW5jLmlzQ2FzdCk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMucmV0dXJuVHlwZS52aXNp
dChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyksCisgICAgICAgICAg
ICAgICAgICAgIGZ1bmMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNp
dChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcykpLAorICAgICAgICAg
ICAgICAgICAgICBmdW5jLmlzQ2FzdCwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5pbnN0YW50
aWF0ZUltcGxlbWVudGF0aW9uKHN1YnN0aXR1dGlvbikpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGxldCByZXN1bHRpbmdGdW5jID0gZnVuYy52aXNpdChuZXcgSW5zdGFudGlh
dGUoKSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9IaWdoWm9tYmllRmlu
ZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0hpZ2ha
b21iaWVGaW5kZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSGlnaFpvbWJpZUZpbmRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmlj
dCI7CisKKy8vIElmIGEgaGlnaC1sZXZlbCBjb25zdHJ1Y3Qgc29tZWhvdyBtYW5hZ2VzIHRvIGxp
dmUgb24gd2hlbiB3ZSdyZSBsb3dlcmVkLCBpdCdzIGEgaGlnaCB6b21iaWUuCitjbGFzcyBIaWdo
Wm9tYmllRmluZGVyIGV4dGVuZHMgVmlzaXRvciB7CisgICAgX2ZvdW5kKG5vZGUpCisgICAgewor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIjogSGln
aCB6b21iaWU6ICIgKyBub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9u
KG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9mb3VuZChub2RlKTsKKyAgICB9CisgICAgCisg
ICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2ZvdW5k
KG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCisgICAg
eworICAgICAgICBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOworICAgIH0KK30KKwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSWRlbnRpdHlFeHByZXNzaW9uLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lkZW50aXR5RXhw
cmVzc2lvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JZGVudGl0eUV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3Qi
OworCitjbGFzcyBJZGVudGl0eUV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKKyAgICBj
b25zdHJ1Y3Rvcih0YXJnZXQpCisgICAgeworICAgICAgICBzdXBlcih0YXJnZXQub3JpZ2luKTsK
KyAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0OworICAgIH0KKyAgICAKKyAgICBnZXQgdGFy
Z2V0KCkgeyByZXR1cm4gdGhpcy5fdGFyZ2V0OyB9CisgICAgCisgICAgZ2V0IHVuaWZ5Tm9kZSgp
IHsgcmV0dXJuIHRoaXMudGFyZ2V0LnVuaWZ5Tm9kZTsgfQorICAgIGdldCBpc0NvbnN0ZXhwcigp
IHsgcmV0dXJuIHRoaXMudGFyZ2V0LmlzQ29uc3RleHByOyB9CisgICAgZ2V0IGlzTFZhbHVlKCkg
eyByZXR1cm4gdGhpcy50YXJnZXQuaXNMVmFsdWU7IH0KKyAgICBnZXQgYWRkcmVzc1NwYWNlKCkg
eyByZXR1cm4gdGhpcy50YXJnZXQuYWRkcmVzc1NwYWNlOyB9CisgICAgCisgICAgdG9TdHJpbmco
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICIoIiArIHRoaXMudGFyZ2V0ICsgIikiOworICAgIH0K
K30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9u
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZGV4RXhw
cmVzc2lvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JbmRleEV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOwor
CitjbGFzcyBJbmRleEV4cHJlc3Npb24gZXh0ZW5kcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24g
eworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgYXJyYXksIGluZGV4KQorICAgIHsKKyAgICAgICAg
c3VwZXIob3JpZ2luLCBhcnJheSk7CisgICAgICAgIHRoaXMuX2luZGV4ID0gaW5kZXg7CisgICAg
fQorICAgIAorICAgIGdldCBhcnJheSgpIHsgcmV0dXJuIHRoaXMuYmFzZTsgfQorICAgIGdldCBp
bmRleCgpIHsgcmV0dXJuIHRoaXMuX2luZGV4OyB9CisgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1
cm4gdGhpcy5hcnJheS5pc0xWYWx1ZTsgfQorICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVy
biB0aGlzLmFycmF5LmFkZHJlc3NTcGFjZTsgfQorICAgIAorICAgIGdldCBnZXRGdW5jTmFtZSgp
IHsgcmV0dXJuICJvcGVyYXRvcltdIjsgfQorICAgIGdldCBhbmRGdW5jTmFtZSgpIHsgcmV0dXJu
ICJvcGVyYXRvciZbXSI7IH0KKyAgICBnZXQgc2V0RnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0
b3JbXT0iOyB9CisKKyAgICB1cGRhdGVDYWxscygpCisgICAgeworICAgICAgICBpZiAodGhpcy5j
YWxsRm9yR2V0KQorICAgICAgICAgICAgdGhpcy5jYWxsRm9yR2V0LmFyZ3VtZW50TGlzdFsxXSA9
IHRoaXMuaW5kZXg7CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICB0
aGlzLmNhbGxGb3JBbmQuYXJndW1lbnRMaXN0WzFdID0gdGhpcy5pbmRleDsKKyAgICAgICAgaWYg
KHRoaXMuY2FsbEZvclNldCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvclNldC5hcmd1bWVudExp
c3RbMV0gPSB0aGlzLmluZGV4OworICAgICAgICBzdXBlci51cGRhdGVDYWxscygpOworICAgIH0K
KworICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiKCIgKyB0aGlzLmFycmF5
ICsgIlsiICsgdGhpcy5pbmRleCArICJdKSI7CisgICAgfQorfQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKHJldmlzaW9u
IDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JD
YWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGZ1bmN0aW9uIGluZmVyVHlw
ZXNGb3JDYWxsKGZ1bmMsIHR5cGVBcmcKICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldKQog
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIGFyZ3VtZW50IHR5cGUgYXQgaSA9ICIg
KyBpKTsKICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldLnVuaWZ5KHVuaWZpY2F0aW9uQ29u
dGV4dCwgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHtmYWls
dXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAo
aSArIDEpICsgIiAiICsgKGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIg
IiArIGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lIDogIiIpICsgIiBkb2VzIG5vdCBtYXRjaCAocGFz
c2VkICIgKyBhcmd1bWVudFR5cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJz
W2ldLnR5cGUgKyAiKSIpfTsKKyAgICAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92ZXJs
b2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIkFyZ3VtZW50ICMiICsgKGkgKyAxKSArICIgIiAr
IChmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSA/ICJmb3IgcGFyYW1ldGVyICIgKyBmdW5jLnBhcmFt
ZXRlcnNbaV0ubmFtZSArICIgIiA6ICIiKSArICJkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBh
cmd1bWVudFR5cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUg
KyAiKSIpfTsKICAgICB9CiAgICAgaWYgKHJldHVyblR5cGUgJiYgIXJldHVyblR5cGUudW5pZnko
dW5pZmljYXRpb25Db250ZXh0LCBmdW5jLnJldHVyblR5cGUpKQogICAgICAgICByZXR1cm4ge2Zh
aWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJSZXR1cm4gdHlwZSAi
ICsgZnVuYy5yZXR1cm5UeXBlICsgIiBkb2VzIG5vdCBtYXRjaCAiICsgcmV0dXJuVHlwZSl9OwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5qcwkocmV2aXNpb24gMjIy
MTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw4ICs0Myw2IEBAIGZ1bmN0aW9uIF9pbmxpbmVGdW5jdGlvbihwcm9ncmFt
LCBmdW5jLCAKICAgICBpZiAoZnVuYy5pbmxpbmVkIHx8IGZ1bmMuaXNOYXRpdmUpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBmdW5jLnJld3JpdGUobmV3IEluc3RhbnRpYXRlSW1tZWRpYXRl
cygpKTsKLSAgICAKICAgICAvLyBUaGlzIGlzIHRoZSBwcmVjaXNlIHRpbWUgd2hlbiB3ZSBjYW4g
YnVpbGQgRUJ1ZmZlcnMgaW4gb3JkZXIgdG8gZ2V0IHRoZW0gdG8gYmUgdW5pcXVlZCBieQogICAg
IC8vIHR5cGUgaW5zdGFudGlhdGlvbiBidXQgbm90aGluZyBlbHNlLgogICAgIGZ1bmMudmlzaXQo
bmV3IFN0cnVjdExheW91dEJ1aWxkZXIoKSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lubGluZXIuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0lubGluZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTMyLDI0ICszMiwxNSBA
QCBjbGFzcyBJbmxpbmVyIGV4dGVuZHMgUmV3cml0ZXIgewogICAgICAgICB0aGlzLl92aXNpdGlu
ZyA9IHZpc2l0aW5nOwogICAgIH0KICAgICAKLSAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkK
LSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBzdXBlci52aXNpdERvdEV4cHJlc3Npb24obm9k
ZSk7Ci0gICAgICAgIHJlc3VsdC5maWVsZCA9IHJlc3VsdC5zdHJ1Y3RUeXBlLnVuaWZ5Tm9kZS5m
aWVsZEJ5TmFtZShyZXN1bHQuZmllbGROYW1lKTsKLSAgICAgICAgaWYgKHJlc3VsdC5maWVsZC5v
ZmZzZXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW4tbGFpZC1vdXQg
ZmllbGQ6ICIgKyByZXN1bHQuZmllbGQgKyAiIChpbiAiICsgcmVzdWx0LnN0cnVjdFR5cGUgKyAi
KSIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKICAgICB2aXNpdENhbGxF
eHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlzaXRD
YWxsRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5uYXRpdmVGdW5jSW5zdGFu
Y2UpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gdGhpcy5fdmlz
aXRpbmcuZG9WaXNpdChub2RlLmZ1bmMsICgpID0+IHsKICAgICAgICAgICAgIGxldCBmdW5jID0g
dGhpcy5fcHJvZ3JhbS5mdW5jSW5zdGFudGlhdG9yLmdldFVuaXF1ZShyZXN1bHQuZnVuYywgcmVz
dWx0LmFjdHVhbFR5cGVBcmd1bWVudHMpOwotICAgICAgICAgICAgaWYgKGZ1bmMuaXNOYXRpdmUp
IHsKLSAgICAgICAgICAgICAgICByZXN1bHQubmF0aXZlRnVuY0luc3RhbmNlID0gZnVuYzsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGZ1bmMuaXNOYXRpdmUpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4
cGVjdGVkIG5hdGl2ZSBmdW5jOiAiICsgZnVuYyk7CiAgICAgICAgICAgICBfaW5saW5lRnVuY3Rp
b24odGhpcy5fcHJvZ3JhbSwgZnVuYywgdGhpcy5fdmlzaXRpbmcpOwogICAgICAgICAgICAgbGV0
IHJlc3VsdGluZ0Jsb2NrID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAogICAgICAgICAgICAgICAg
IHJlc3VsdC5vcmlnaW4sIGZ1bmMucmV0dXJuVHlwZSwgcmVzdWx0LmFyZ3VtZW50TGlzdCwgZnVu
Yy5wYXJhbWV0ZXJzLCBmdW5jLmJvZHkpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSW50cmluc2ljcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbnRyaW5zaWNzLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNiAr
MTcyLDg4IEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgfSk7CiAgICAgICAgIAog
ICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0b3Im
PD4oaW50LGludCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVu
Yy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAg
ICBFUHRyLmJveChsZWZ0LmxvYWRWYWx1ZSgpICYgcmlnaHQubG9hZFZhbHVlKCkpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAg
Im5hdGl2ZSB1aW50IG9wZXJhdG9yJjw+KHVpbnQsdWludCkiLAorICAgICAgICAgICAgZnVuYyA9
PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRd
KSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJveCgobGVmdC5sb2FkVmFsdWUoKSAmIHJp
Z2h0LmxvYWRWYWx1ZSgpKSA+Pj4gMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAg
ICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0aXZlIGludCBvcGVyYXRvcnw8Pihp
bnQsaW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmlt
cGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQ
dHIuYm94KGxlZnQubG9hZFZhbHVlKCkgfCByaWdodC5sb2FkVmFsdWUoKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0
aXZlIHVpbnQgb3BlcmF0b3J8PD4odWludCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsK
KyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+
CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KChsZWZ0LmxvYWRWYWx1ZSgpIHwgcmlnaHQu
bG9hZFZhbHVlKCkpID4+PiAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
dGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgaW50IG9wZXJhdG9yXjw+KGludCxp
bnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVt
ZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5i
b3gobGVmdC5sb2FkVmFsdWUoKSBeIHJpZ2h0LmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUg
dWludCBvcGVyYXRvcl48Pih1aW50LHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAg
ICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAg
ICAgICAgICAgICAgICAgICAgRVB0ci5ib3goKGxlZnQubG9hZFZhbHVlKCkgXiByaWdodC5sb2Fk
VmFsdWUoKSkgPj4+IDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlz
Ll9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0b3I8PDw+KGludCx1aW50
KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVu
dGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94
KGxlZnQubG9hZFZhbHVlKCkgPDwgcmlnaHQubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSB1
aW50IG9wZXJhdG9yPDw8Pih1aW50LHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAg
ICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAg
ICAgICAgICAgICAgICAgICAgRVB0ci5ib3goKGxlZnQubG9hZFZhbHVlKCkgPDwgcmlnaHQubG9h
ZFZhbHVlKCkpID4+PiAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhp
cy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgaW50IG9wZXJhdG9yPj48PihpbnQsdWlu
dCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1l
bnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJv
eChsZWZ0LmxvYWRWYWx1ZSgpID4+IHJpZ2h0LmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUg
dWludCBvcGVyYXRvcj4+PD4odWludCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAg
ICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+Cisg
ICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkgPj4+IHJpZ2h0Lmxv
YWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFw
LnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgaW50IG9wZXJhdG9yfjw+KGludCkiLAorICAgICAg
ICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChb
dmFsdWVdKSA9PiBFUHRyLmJveCh+dmFsdWUubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSB1
aW50IG9wZXJhdG9yfjw+KHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAg
ICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3ZhbHVlXSkgPT4gRVB0ci5ib3goKH52YWx1
ZS5sb2FkVmFsdWUoKSkgPj4+IDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAg
ICB0aGlzLl9tYXAuc2V0KAogICAgICAgICAgICAgIm5hdGl2ZSBib29sIG9wZXJhdG9yPT08Pihp
bnQsaW50KSIsCiAgICAgICAgICAgICBmdW5jID0+IHsKICAgICAgICAgICAgICAgICBmdW5jLmlt
cGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CkBAIC0yNDgsMzAgKzMzMCwzMiBAQCBj
bGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2Fk
VmFsdWUoKSA+PSByaWdodC5sb2FkVmFsdWUoKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
Ci0gICAgICAgIGxldCBhcnJheUVsZW1lbnRQdHIgPSBmdW5jID0+IHsKLSAgICAgICAgICAgIGZ1
bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZiwgaW5kZXhdLCBub2RlKSA9PiB7Ci0gICAgICAgICAg
ICAgICAgcmVmID0gcmVmLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICghcmVmKQot
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7Ci0gICAgICAgICAgICAgICAgaW5kZXggPSBp
bmRleC5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiByZWYubGVuZ3Ro
KQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5v
cmlnaW5TdHJpbmcsICJBcnJheSBpbmRleCAiICsgaW5kZXggKyAiIGlzIG91dCBvZiBib3VuZHMg
b2YgIiArIHJlZik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVQdHIuYm94KHJlZi5wdHIucGx1
cyhpbmRleCAqIG5vZGUuYWN0dWFsVHlwZUFyZ3VtZW50c1swXS5zaXplKSk7Ci0gICAgICAgICAg
ICB9OwotICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAg
ICAgICAgICJuYXRpdmUgVF4gdGhyZWFkIG9wZXJhdG9yJltdPFQ+KFRbXSB0aHJlYWQsdWludCki
LAotICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsKLSAgICAgICAgdGhpcy5fbWFwLnNldCgK
LSAgICAgICAgICAgICJuYXRpdmUgVF4gdGhyZWFkZ3JvdXAgb3BlcmF0b3ImW108VDpwcmltaXRp
dmU+KFRbXSB0aHJlYWRncm91cCx1aW50KSIsCi0gICAgICAgICAgICBhcnJheUVsZW1lbnRQdHIp
OwotICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAgIm5hdGl2ZSBUXiBkZXZpY2Ug
b3BlcmF0b3ImW108VDpwcmltaXRpdmU+KFRbXSBkZXZpY2UsdWludCkiLAotICAgICAgICAgICAg
YXJyYXlFbGVtZW50UHRyKTsKLSAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJu
YXRpdmUgVF4gY29uc3RhbnQgb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KFRbXSBjb25zdGFudCx1
aW50KSIsCi0gICAgICAgICAgICBhcnJheUVsZW1lbnRQdHIpOworICAgICAgICBmb3IgKGxldCBh
ZGRyZXNzU3BhY2Ugb2YgYWRkcmVzc1NwYWNlcykgeworICAgICAgICAgICAgdGhpcy5fbWFwLnNl
dCgKKyAgICAgICAgICAgICAgICBgbmF0aXZlIFReICR7YWRkcmVzc1NwYWNlfSBvcGVyYXRvciZb
XTxUJHtwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpfT4oVFtdICR7YWRkcmVzc1NwYWNlfSx1
aW50KWAsCisgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgICAgIGZ1
bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZiwgaW5kZXhdLCBub2RlKSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZWYgPSByZWYubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXJlZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1Ry
YXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4LmxvYWRWYWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gcmVmLmxlbmd0aCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJp
bmcsICJBcnJheSBpbmRleCAiICsgaW5kZXggKyAiIGlzIG91dCBvZiBib3VuZHMgb2YgIiArIHJl
Zik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVB0ci5ib3gocmVmLnB0ci5wbHVz
KGluZGV4ICogbm9kZS5hY3R1YWxUeXBlQXJndW1lbnRzWzBdLnNpemUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgdGhpcy5fbWFw
LnNldCgKKyAgICAgICAgICAgICAgICBgbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQke3By
b3RvY29sU3VmZml4KGFkZHJlc3NTcGFjZSl9PihUW10gJHthZGRyZXNzU3BhY2V9KWAsCisgICAg
ICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50
YXRpb24gPSAoW3JlZl0sIG5vZGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZiA9
IHJlZi5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVmKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveCgwKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveChyZWYubGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICBhZGQodGhpbmcpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXRFeHBy
ZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xl
dEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0xldEV4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmlj
dCI7Ci0KLWxldCBsZXRFeHByZXNzaW9uQ291bnQgPSAwOwotCi1jbGFzcyBMZXRFeHByZXNzaW9u
IGV4dGVuZHMgVmFsdWUgewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbikKLSAgICB7Ci0gICAgICAg
IHN1cGVyKCk7Ci0gICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKLSAgICAgICAgdGhpcy5p
bmRleCA9IGxldEV4cHJlc3Npb25Db3VudCsrOwotICAgICAgICB0aGlzLmFyZ3VtZW50ID0gbnVs
bDsKLSAgICAgICAgdGhpcy5ib2R5ID0gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdp
bigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gImxl
dDwiICsgdGhpcy5pbmRleCArICI+IjsgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAiKCIgKyB0aGlzLmFyZ3VtZW50ICsgIiwgIiArIHRo
aXMuYm9keSArICIpIjsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0xleGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0xleGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MZXhlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMywxMiBAQCBjbGFz
cyBMZXhlciB7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJpZGVudGlmaWVyIik7CiAgICAg
ICAgIH0KIAorICAgICAgICBpZiAoL14weFswLTlhLWZBLUZdK3UvLnRlc3QocmVsZXZhbnRUZXh0
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQoInVpbnRIZXhMaXRlcmFsIik7CisKKyAgICAg
ICAgaWYgKC9eMHhbMC05YS1mQS1GXSsvLnRlc3QocmVsZXZhbnRUZXh0KSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQoImludEhleExpdGVyYWwiKTsKKwogICAgICAgICBpZiAoL15bMC05XSt1
Ly50ZXN0KHJlbGV2YW50VGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJ1aW50TGl0
ZXJhbCIpOwogCkBAIC0xMjMsNyArMTI5LDcgQEAgY2xhc3MgTGV4ZXIgewogICAgICAgICBpZiAo
L14oWzAtOV0qXC5bMC05XSspfChbMC05XStcLlswLTldKikvLnRlc3QocmVsZXZhbnRUZXh0KSkK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQoImRvdWJsZUxpdGVyYWwiKTsKICAgICAgICAgCi0g
ICAgICAgIGlmICgvXi0+fD49fDw9fD09fCE9fFwrPXwtPXxcKj18XC89fCU9fF49fFx8PXwmPXxc
K1wrfC0tfChbe30oKVxbXF0/Oj0rKlwvLC4lIX5eJnw8PkA7LV0pLy50ZXN0KHJlbGV2YW50VGV4
dCkpCisgICAgICAgIGlmICgvXjw8fD4+fC0+fD49fDw9fD09fCE9fFwrPXwtPXxcKj18XC89fCU9
fFxePXxcfD18Jj18XCtcK3wtLXwoW3t9KClcW1xdPzo9KypcLywuJSF+XiZ8PD5AOy1dKS8udGVz
dChyZWxldmFudFRleHQpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgicHVuY3R1YXRpb24i
KTsKICAgICAgICAgCiAgICAgICAgIGxldCByZW1haW5pbmcgPSByZWxldmFudFRleHQuc3Vic3Ry
aW5nKDAsIDIwKS5zcGxpdCgvXHMvKVswXTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhw
cmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDYgQEAgY2xhc3MgTWFrZUFy
cmF5UmVmRXhwcmVzc2lvbiBleHRlbmRzIEV4cAogICAgIAogICAgIGdldCBsVmFsdWUoKSB7IHJl
dHVybiB0aGlzLl9sVmFsdWU7IH0KICAgICAKLSAgICBiZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJl
ZkV4cHJlc3Npb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fX3Byb3RvX18gPSBDb252ZXJ0UHRy
VG9BcnJheVJlZkV4cHJlc3Npb24ucHJvdG90eXBlOwotICAgIH0KLSAgICAKICAgICB0b1N0cmlu
ZygpCiAgICAgewogICAgICAgICByZXR1cm4gIkAiICsgKHRoaXMubnVtRWxlbWVudHMgPyAiPDwi
ICsgdGhpcy5udW1FbGVtZW50cyArICI+PiIgOiAiIikgKyAiKCIgKyB0aGlzLmxWYWx1ZSArICIp
IjsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0Lmpz
CShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1l
Q29udGV4dC5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQCBjbGFzcyBOYW1lQ29u
dGV4dCB7CiAgICAgewogICAgICAgICB0aGlzLl9tYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgIHRo
aXMuX3NldCA9IG5ldyBTZXQoKTsKLSAgICAgICAgdGhpcy5fZGVmaW5lZCA9IG51bGw7CiAgICAg
ICAgIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICB0aGlzLl9kZWxlZ2F0
ZSA9IGRlbGVnYXRlOwogICAgICAgICB0aGlzLl9pbnRyaW5zaWNzID0gbnVsbDsKQEAgLTYyLDcg
KzYxLDcgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogICAgICAgICBpZiAoIXRoaW5nLm5hbWUpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBpZiAodGhpbmcuaXNOYXRpdmUp
IHsKKyAgICAgICAgaWYgKHRoaW5nLmlzTmF0aXZlICYmICF0aGluZy5pbXBsZW1lbnRhdGlvbikg
ewogICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnRyaW5zaWNzKQogICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTmF0aXZlIGZ1bmN0aW9uIGluIGEgc2NvcGUgdGhhdCBkb2VzIG5vdCBy
ZWNvZ25pemUgaW50cmluc2ljcyIpOwogICAgICAgICAgICAgdGhpcy5faW50cmluc2ljcy5hZGQo
dGhpbmcpOwpAQCAtMTE1LDM2ICsxMTQsMTEgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogICAgICAg
ICByZXR1cm4gbnVsbDsKICAgICB9CiAgICAgCi0gICAgaGFuZGxlRGVmaW5pbmcoKQotICAgIHsK
LSAgICAgICAgdGhpcy5fZGVmaW5lZCA9IG5ldyBTZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgaXNE
ZWZpbmVkKHRoaW5nKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3NldC5oYXModGhpbmcpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gIXRoaXMuX2RlZmluZWQKLSAgICAgICAgICAgICAgICB8fCB0
aGlzLl9kZWZpbmVkLmhhcyh0aGluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMu
X2RlbGVnYXRlICYmIHRoaXMuX2RlbGVnYXRlLmlzRGVmaW5lZCh0aGluZyk7Ci0gICAgfQotICAg
IAotICAgIGRlZmluZSh0aGluZykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RlZmluZWQuYWRkKHRo
aW5nKTsKLSAgICB9Ci0gICAgCi0gICAgZGVmaW5lQWxsKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X2RlZmluZWQgPSBudWxsOwotICAgIH0KLSAgICAKICAgICBkb1N0YXRlbWVudChzdGF0ZW1lbnQs
IGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlbWVudCA9IHN0YXRl
bWVudDsKICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlbWVu
dCA9IG51bGw7Ci0gICAgICAgIHRoaXMuZGVmaW5lKHN0YXRlbWVudCk7CiAgICAgfQogICAgIAog
ICAgIHJlY29nbml6ZUludHJpbnNpY3MoKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTmFtZVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwyNyArMzAsMTUgQEAKIC8vIG1vcmUgY29udmVuaWVudCB0byBjaGVjayBoZXJlIHRoYW4gaW4g
dGhlIENoZWNrZXIuIFRoaXMgdXN1YWxseSBpbnZvbHZlcyB0aGluZ3MgdGhhdCBuZWVkIHRvIGJl
CiAvLyBjaGVja2VkIGJlZm9yZSBUeXBlUmVmVG9UeXBlRGVmU2tpcHBlci4KIGNsYXNzIE5hbWVS
ZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewotICAgIC8vIEl0J3MgdG90YWxseSBPSyB0byBpbnN0
YW50aWF0ZSB0aGlzIHdpdGggemVybyBhcmd1bWVudHMgKGkuZS4gcGFzc2luZyB1bmRlZmluZWQg
Zm9yIGJvdGggb2YKLSAgICAvLyB0aGVtKSBpZiB5b3UncmUgY3JlYXRpbmcgYSBOYW1lUmVzb2x2
ZXIgdG8gdmlzaXQgYSBQcm9ncmFtLgogICAgIGNvbnN0cnVjdG9yKG5hbWVDb250ZXh0KQogICAg
IHsKICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5fbmFtZUNvbnRleHQgPSBuYW1lQ29u
dGV4dDsKICAgICB9Ci0gICAgCi0gICAgdmlzaXRQcm9ncmFtKG5vZGUpCisKKyAgICBkb1N0YXRl
bWVudChzdGF0ZW1lbnQpCiAgICAgewotICAgICAgICBsZXQgbmFtZUNvbnRleHQgPSBuZXcgTmFt
ZUNvbnRleHQodGhpcy5fbmFtZUNvbnRleHQpOwotICAgICAgICBuYW1lQ29udGV4dC5wcm9ncmFt
ID0gbm9kZTsKLSAgICAgICAgbmFtZUNvbnRleHQucmVjb2duaXplSW50cmluc2ljcygpOwotICAg
ICAgICBuYW1lQ29udGV4dC5oYW5kbGVEZWZpbmluZygpOwotICAgICAgICBub2RlLmludHJpbnNp
Y3MgPSBuYW1lQ29udGV4dC5pbnRyaW5zaWNzOwotICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQg
b2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCi0gICAgICAgICAgICBuYW1lQ29udGV4dC5hZGQo
c3RhdGVtZW50KTsKLSAgICAgICAgbGV0IGNoZWNrZXIgPSBuZXcgTmFtZVJlc29sdmVyKG5hbWVD
b250ZXh0KTsKLSAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0
ZW1lbnRzKQotICAgICAgICAgICAgbmFtZUNvbnRleHQuZG9TdGF0ZW1lbnQoc3RhdGVtZW50LCAo
KSA9PiBzdGF0ZW1lbnQudmlzaXQoY2hlY2tlcikpOwotICAgICAgICBub2RlLmdsb2JhbE5hbWVD
b250ZXh0ID0gbmFtZUNvbnRleHQ7CisgICAgICAgIHRoaXMuX25hbWVDb250ZXh0LmRvU3RhdGVt
ZW50KHN0YXRlbWVudCwgKCkgPT4gc3RhdGVtZW50LnZpc2l0KHRoaXMpKTsKICAgICB9CiAgICAg
CiAgICAgX3Zpc2l0VHlwZVBhcmFtZXRlcnNBbmRCdWlsZE5hbWVDb250ZXh0KG5vZGUpCkBAIC0y
MDcsOCArMTk1LDYgQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAg
ICAgICAgICB0eXBlID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KFR5cGUsIG5vZGUubmFtZSk7CiAg
ICAgICAgICAgICBpZiAoIXR5cGUpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ291bGQgbm90IGZpbmQgdHlwZSBuYW1lZCAi
ICsgbm9kZS5uYW1lKTsKLSAgICAgICAgICAgIGlmICghdGhpcy5fbmFtZUNvbnRleHQuaXNEZWZp
bmVkKHR5cGUpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZywgIklsbGVnYWwgZm9yd2FyZCB1c2Ugb2YgdHlwZSBuYW1lZCAiICsg
bm9kZS5uYW1lKTsKICAgICAgICAgICAgIG5vZGUudHlwZSA9IHR5cGU7CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC0yMzAsNyArMjE2LDYgQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlz
aXRvciB7CiAgICAgdmlzaXRSZWZlcmVuY2VUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBsZXQg
bmFtZUNvbnRleHQgPSBuZXcgTmFtZUNvbnRleHQodGhpcy5fbmFtZUNvbnRleHQpOwotICAgICAg
ICBuYW1lQ29udGV4dC5kZWZpbmVBbGwoKTsKICAgICAgICAgbm9kZS5lbGVtZW50VHlwZS52aXNp
dChuZXcgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KSk7CiAgICAgfQogICAgIApAQCAtMjU4LDYg
KzI0MywyOCBAQCBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAg
c3VwZXIudmlzaXRSZXR1cm4obm9kZSk7CiAgICAgfQogICAgIAorICAgIF9oYW5kbGVQcm9wZXJ0
eUFjY2Vzcyhub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkcyA9
IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLmdldEZ1bmNOYW1lKTsKKyAgICAgICAg
bm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkcyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBu
b2RlLnNldEZ1bmNOYW1lKTsKKyAgICAgICAgbm9kZS5wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IHRo
aXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLmFuZEZ1bmNOYW1lKTsKKworICAgICAgICBp
ZiAoIW5vZGUucG9zc2libGVHZXRPdmVybG9hZHMgJiYgIW5vZGUucG9zc2libGVBbmRPdmVybG9h
ZHMpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsICJDYW5ub3QgZmluZCBlaXRoZXIgIiArIG5vZGUuZ2V0RnVuY05hbWUgKyAiIG9yICIg
KyBub2RlLmFuZEZ1bmNOYW1lKTsKKyAgICB9CisgICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9u
KG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzcyhub2RlKTsK
KyAgICAgICAgc3VwZXIudmlzaXREb3RFeHByZXNzaW9uKG5vZGUpOworICAgIH0KKyAgICAKKyAg
ICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5faGFuZGxl
UHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAgICAgIHN1cGVyLnZpc2l0SW5kZXhFeHByZXNzaW9u
KG5vZGUpOworICAgIH0KKyAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAg
ewogICAgICAgICB0aGlzLl9yZXNvbHZlVHlwZUFyZ3VtZW50cyhub2RlLnR5cGVBcmd1bWVudHMp
OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpzCShy
ZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVG
dW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMCBAQCBjbGFzcyBOYXRpdmVGdW5j
IGV4dGVuZHMgRnVuYyB7CiAgICAgewogICAgICAgICBzdXBlcihvcmlnaW4sIG5hbWUsIHJldHVy
blR5cGUsIHR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpOwogICAgICAgICB0aGlz
LmlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uID0gbnVs
bDsKKyAgICAgICAgdGhpcy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uID0gKHN1YnN0aXR1dGlv
bikgPT4ge307CisgICAgICAgIHRoaXMudmlzaXRJbXBsZW1lbnRhdGlvbkRhdGEgPSAoaW1wbGVt
ZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiBudWxsOworICAgICAgICB0aGlzLmRpZExheW91dFN0
cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVudGF0aW9uRGF0YSA9PiBudWxsOwog
ICAgIH0KICAgICAKICAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNl
LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9O
YXRpdmVGdW5jSW5zdGFuY2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNiBAQAog
InVzZSBzdHJpY3QiOwogCiBjbGFzcyBOYXRpdmVGdW5jSW5zdGFuY2UgZXh0ZW5kcyBGdW5jIHsK
LSAgICBjb25zdHJ1Y3RvcihmdW5jLCByZXR1cm5UeXBlLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpCisg
ICAgY29uc3RydWN0b3IoZnVuYywgcmV0dXJuVHlwZSwgcGFyYW1ldGVycywgaXNDYXN0LCBpbXBs
ZW1lbnRhdGlvbkRhdGEpCiAgICAgewogICAgICAgICBzdXBlcihmdW5jLm9yaWdpbiwgZnVuYy5u
YW1lLCByZXR1cm5UeXBlLCBbXSwgcGFyYW1ldGVycywgaXNDYXN0KTsKICAgICAgICAgdGhpcy5f
ZnVuYyA9IGZ1bmM7CisgICAgICAgIHRoaXMuX2ltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVu
dGF0aW9uRGF0YTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGZ1bmMoKSB7IHJldHVybiB0aGlzLl9m
dW5jOyB9CiAgICAgZ2V0IGlzTmF0aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGdldCBpbXBs
ZW1lbnRhdGlvbkRhdGEoKSB7IHJldHVybiB0aGlzLl9pbXBsZW1lbnRhdGlvbkRhdGE7IH0KIAog
ICAgIHRvRGVjbFN0cmluZygpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTm9kZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Ob2RlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob2RlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMywxNyBAQCBjbGFzcyBOb2Rl
IHsKICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gdmlzaXRGdW5jLmNhbGwodmlzaXRvciwgdGhp
cyk7CiAgICAgICAgIGlmICgicmV0dXJuVmFsdWUiIGluIHZpc2l0b3IpCiAgICAgICAgICAgICBy
ZXR1cm5WYWx1ZSA9IHZpc2l0b3IucmV0dXJuVmFsdWU7CisgICAgICAgIAogICAgICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyB2aXNpdChub2RlLCB2aXNp
dG9yKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBOb2RlKQorICAgICAgICAg
ICAgcmV0dXJuIG5vZGUudmlzaXQodmlzaXRvcik7CisgICAgICAgIHJldHVybiBub2RlOworICAg
IH0KKyAgICAKICAgICB1bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKQogICAgIHsKICAg
ICAgICAgaWYgKCFvdGhlcikKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05v
cm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcwkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgTm9ybWFs
VXNlUHJvcGVydHlSZXNvbHZlciBleHRlbmRzIFJld3JpdGVyIHsKKyAgICB2aXNpdERvdEV4cHJl
c3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdXBlci52aXNpdERvdEV4cHJlc3Np
b24obm9kZSkucmV3cml0ZUFmdGVyQ2xvbmluZygpOworICAgIH0KKyAgICAKKyAgICB2aXNpdElu
ZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0SW5k
ZXhFeHByZXNzaW9uKG5vZGUpLnJld3JpdGVBZnRlckNsb25pbmcoKTsKKyAgICB9Cit9CisKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCShyZXZpc2lvbiAyMjIxMjMp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTcyLDE3ICsxNzIsMzUgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBv
cmlnaW5LaQogICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lS2luZCgiaWRlbnRpZmllciIp
KQogICAgICAgICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZVJlZih0b2tlbiwgdG9rZW4udGV4dCk7
CiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWVLaW5kKCJpbnRMaXRlcmFsIikpIHsKLSAg
ICAgICAgICAgIGxldCBpbnRWZXJzaW9uID0gTWF0aC5mbG9vcigrdG9rZW4udGV4dCk7CisgICAg
ICAgICAgICBsZXQgaW50VmVyc2lvbiA9ICgrdG9rZW4udGV4dCkgfCAwOwogICAgICAgICAgICAg
aWYgKCIiICsgaW50VmVyc2lvbiAhPT0gdG9rZW4udGV4dCkKLSAgICAgICAgICAgICAgICBsZXhl
ci5mYWlsKCJJbnRlZ2VyIGxpdGVyYWwgaXMgbm90IGFuIGludGVnZXIiKTsKKyAgICAgICAgICAg
ICAgICBsZXhlci5mYWlsKCJJbnRlZ2VyIGxpdGVyYWwgaXMgbm90IGFuIGludGVnZXI6ICIgKyB0
b2tlbi50ZXh0KTsKICAgICAgICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbCh0b2tlbiwgaW50
VmVyc2lvbik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQo
InVpbnRMaXRlcmFsIikpIHsKICAgICAgICAgICAgIGxldCB1aW50VmVyc2lvbiA9IHRva2VuLnRl
eHQuc3Vic3RyKDAsIHRva2VuLnRleHQubGVuZ3RoIC0gMSkgPj4+IDA7CiAgICAgICAgICAgICBp
ZiAodWludFZlcnNpb24gKyAidSIgIT09IHRva2VuLnRleHQpCi0gICAgICAgICAgICAgICAgbGV4
ZXIuZmFpbCgiSW50ZWdlciBsaXRlcmFsIGlzIG5vdCAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciIp
OworICAgICAgICAgICAgICAgIGxleGVyLmZhaWwoIkludGVnZXIgbGl0ZXJhbCBpcyBub3QgMzIt
Yml0IHVuc2lnbmVkIGludGVnZXI6ICIgKyB0b2tlbi50ZXh0KTsKICAgICAgICAgICAgIHJldHVy
biBuZXcgVWludExpdGVyYWwodG9rZW4sIHVpbnRWZXJzaW9uKTsKICAgICAgICAgfQorICAgICAg
ICBpZiAoKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQoImludEhleExpdGVyYWwiKSkKKyAgICAgICAg
ICAgIHx8ICh0b2tlbiA9IHRyeUNvbnN1bWVLaW5kKCJ1aW50SGV4TGl0ZXJhbCIpKSkgeworICAg
ICAgICAgICAgbGV0IGhleFN0cmluZyA9IHRva2VuLnRleHQuc3Vic3RyKDIpOworICAgICAgICAg
ICAgaWYgKHRva2VuLmtpbmQgPT0gInVpbnRIZXhMaXRlcmFsIikKKyAgICAgICAgICAgICAgICBo
ZXhTdHJpbmcgPSBoZXhTdHJpbmcuc3Vic3RyKDAsIGhleFN0cmluZy5sZW5ndGggLSAxKTsKKyAg
ICAgICAgICAgIGlmICghaGV4U3RyaW5nLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkJhZCBoZXggbGl0ZXJhbDogIiArIHRva2VuKTsKKyAgICAgICAgICAgIGxldCBp
bnRWZXJzaW9uID0gcGFyc2VJbnQoaGV4U3RyaW5nLCAxNik7CisgICAgICAgICAgICBpZiAodG9r
ZW4ua2luZCA9PSAiaW50SGV4TGl0ZXJhbCIpCisgICAgICAgICAgICAgICAgaW50VmVyc2lvbiA9
IGludFZlcnNpb24gfCAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGludFZl
cnNpb24gPSBpbnRWZXJzaW9uID4+PiAwOworICAgICAgICAgICAgaWYgKGludFZlcnNpb24udG9T
dHJpbmcoMTYpICE9PSBoZXhTdHJpbmcpCisgICAgICAgICAgICAgICAgbGV4ZXIuZmFpbCgiSGV4
IGludGVnZXIgbGl0ZXJhbCBpcyBub3QgYW4gaW50ZWdlcjogIiArIHRva2VuLnRleHQpOworICAg
ICAgICAgICAgaWYgKHRva2VuLmtpbmQgPT0gImludEhleExpdGVyYWwiKQorICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbCh0b2tlbiwgaW50VmVyc2lvbik7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IFVpbnRMaXRlcmFsKHRva2VuLCBpbnRWZXJzaW9uID4+PiAwKTsKKyAgICAg
ICAgfQogICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lS2luZCgiZG91YmxlTGl0ZXJhbCIp
KQogICAgICAgICAgICAgcmV0dXJuIG5ldyBEb3VibGVMaXRlcmFsKHRva2VuLCArdG9rZW4udGV4
dCk7CiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWUoInRydWUiLCAiZmFsc2UiKSkKQEAg
LTMyMCwxMiArMzM4LDE0IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2lu
S2kKICAgICAgICAgY29uc3VtZSgiKCIpOwogICAgICAgICBsZXQgYXJndW1lbnRMaXN0ID0gW107
CiAgICAgICAgIHdoaWxlICghdGVzdCgiKSIpKSB7Ci0gICAgICAgICAgICBhcmd1bWVudExpc3Qu
cHVzaChwYXJzZUV4cHJlc3Npb24oKSk7CisgICAgICAgICAgICBsZXQgYXJndW1lbnQgPSBwYXJz
ZVBvc3NpYmxlQXNzaWdubWVudCgpOworICAgICAgICAgICAgYXJndW1lbnRMaXN0LnB1c2goYXJn
dW1lbnQpOwogICAgICAgICAgICAgaWYgKCF0cnlDb25zdW1lKCIsIikpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY29uc3VtZSgiKSIpOwotICAgICAgICByZXR1
cm4gbmV3IENhbGxFeHByZXNzaW9uKG5hbWUsIG5hbWUudGV4dCwgdHlwZUFyZ3VtZW50cywgYXJn
dW1lbnRMaXN0KTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBDYWxsRXhwcmVzc2lvbihuYW1l
LCBuYW1lLnRleHQsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50TGlzdCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIGlzQ2FsbEV4cHJlc3Npb24oKQpA
QCAtMzM3LDkgKzM1Nyw5IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2lu
S2kKICAgICAgICAgfSk7CiAgICAgfQogICAgIAotICAgIGZ1bmN0aW9uIGVtaXRJbmNyZW1lbnQo
dG9rZW4sIHB0ciwgZXh0cmFBcmcpCisgICAgZnVuY3Rpb24gZW1pdEluY3JlbWVudCh0b2tlbiwg
b2xkLCBleHRyYUFyZykKICAgICB7Ci0gICAgICAgIGxldCBhcmdzID0gW25ldyBEZXJlZmVyZW5j
ZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAocHRyKSldOworICAgICAgICBsZXQg
YXJncyA9IFtvbGRdOwogICAgICAgICBpZiAoZXh0cmFBcmcpCiAgICAgICAgICAgICBhcmdzLnB1
c2goZXh0cmFBcmcpOwogICAgICAgICAKQEAgLTM1MCwyNyArMzcwLDE1IEBAIGZ1bmN0aW9uIHBh
cnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgaWYgKG5hbWUgPT0gIm9wZXJh
dG9yIikKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBuYW1lOiAiICsgbmFt
ZSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnQoCi0gICAgICAgICAg
ICB0b2tlbiwKLSAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odG9rZW4sIFZh
cmlhYmxlUmVmLndyYXAocHRyKSksCi0gICAgICAgICAgICBuZXcgQ2FsbEV4cHJlc3Npb24odG9r
ZW4sIG5hbWUsIFtdLCBhcmdzKSk7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbEV4cHJlc3Npb24o
dG9rZW4sIG5hbWUsIFtdLCBhcmdzKTsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24gZmluaXNo
UGFyc2luZ1Bvc3RJbmNyZW1lbnQodG9rZW4sIGxlZnQpCiAgICAgewotICAgICAgICBsZXQgcHRy
ID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4pOwotICAgICAgICBwdHIuYXJndW1lbnQgPSBuZXcg
TWFrZVB0ckV4cHJlc3Npb24odG9rZW4sIGxlZnQpOwotICAgICAgICAKLSAgICAgICAgbGV0IG9s
ZFZhbHVlID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4pOwotICAgICAgICBvbGRWYWx1ZS5hcmd1
bWVudCA9IG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAo
cHRyKSk7Ci0gICAgICAgIAotICAgICAgICBwdHIuYm9keSA9IG9sZFZhbHVlOwotICAgICAgICAK
LSAgICAgICAgb2xkVmFsdWUuYm9keSA9IG5ldyBDb21tYUV4cHJlc3Npb24odG9rZW4sIFsKLSAg
ICAgICAgICAgIGVtaXRJbmNyZW1lbnQodG9rZW4sIHB0ciksCi0gICAgICAgICAgICBWYXJpYWJs
ZVJlZi53cmFwKG9sZFZhbHVlKQotICAgICAgICBdKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICAgICAgbGV0IHJlYWRNb2RpZnlXcml0ZSA9IG5ldyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
KHRva2VuLCBsZWZ0KTsKKyAgICAgICAgcmVhZE1vZGlmeVdyaXRlLm5ld1ZhbHVlRXhwID0gZW1p
dEluY3JlbWVudCh0b2tlbiwgcmVhZE1vZGlmeVdyaXRlLm9sZFZhbHVlUmVmKCkpOworICAgICAg
ICByZWFkTW9kaWZ5V3JpdGUucmVzdWx0RXhwID0gcmVhZE1vZGlmeVdyaXRlLm9sZFZhbHVlUmVm
KCk7CisgICAgICAgIHJldHVybiByZWFkTW9kaWZ5V3JpdGU7CiAgICAgfQogICAgIAogICAgIGZ1
bmN0aW9uIHBhcnNlUG9zc2libGVTdWZmaXgoKQpAQCAtMzk1LDkgKzQwMyw3IEBAIGZ1bmN0aW9u
IHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgICAgIGNhc2UgIlsiOiB7
CiAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAg
ICAgICAgICAgY29uc3VtZSgiXSIpOwotICAgICAgICAgICAgICAgIGxlZnQgPSBuZXcgRGVyZWZl
cmVuY2VFeHByZXNzaW9uKAotICAgICAgICAgICAgICAgICAgICB0b2tlbiwKLSAgICAgICAgICAg
ICAgICAgICAgbmV3IENhbGxFeHByZXNzaW9uKHRva2VuLCAib3BlcmF0b3ImW10iLCBbXSwgW2xl
ZnQsIGluZGV4XSkpOworICAgICAgICAgICAgICAgIGxlZnQgPSBuZXcgSW5kZXhFeHByZXNzaW9u
KHRva2VuLCBsZWZ0LCBpbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNDA5LDEzICs0MTUsMTAgQEAgZnVuY3Rpb24g
cGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgIAogICAgIGZ1bmN0aW9uIGZpbmlz
aFBhcnNpbmdQcmVJbmNyZW1lbnQodG9rZW4sIGxlZnQsIGV4dHJhQXJnKQogICAgIHsKLSAgICAg
ICAgbGV0IHB0ciA9IG5ldyBMZXRFeHByZXNzaW9uKHRva2VuKTsKLSAgICAgICAgcHRyLmFyZ3Vt
ZW50ID0gbmV3IE1ha2VQdHJFeHByZXNzaW9uKHRva2VuLCBsZWZ0KTsKLSAgICAgICAgcHRyLmJv
ZHkgPSBuZXcgQ29tbWFFeHByZXNzaW9uKHRva2VuLCBbCi0gICAgICAgICAgICBlbWl0SW5jcmVt
ZW50KHRva2VuLCBwdHIsIGV4dHJhQXJnKSwKLSAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5jZUV4
cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAocHRyKSkKLSAgICAgICAgXSk7Ci0gICAg
ICAgIHJldHVybiBwdHI7CisgICAgICAgIGxldCByZWFkTW9kaWZ5V3JpdGUgPSBuZXcgUmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7CisgICAgICAgIHJlYWRNb2RpZnlXcml0
ZS5uZXdWYWx1ZUV4cCA9IGVtaXRJbmNyZW1lbnQodG9rZW4sIHJlYWRNb2RpZnlXcml0ZS5vbGRW
YWx1ZVJlZigpLCBleHRyYUFyZyk7CisgICAgICAgIHJlYWRNb2RpZnlXcml0ZS5yZXN1bHRFeHAg
PSByZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVSZWYoKTsKKyAgICAgICAgcmV0dXJuIHJlYWRNb2Rp
ZnlXcml0ZTsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24gcGFyc2VQcmVJbmNyZW1lbnQoKQpA
QCAtNTc1LDYgKzU3OCwxMCBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdp
bktpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsaXN0LnB1c2goZWZmZWN0ZnVsRXhwcmVz
c2lvbik7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFsaXN0Lmxlbmd0aCkKKyAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiTGVuZ3RoIHNob3VsZCBuZXZlciBiZSB6ZXJvIik7CisgICAgICAg
IGlmIChsaXN0Lmxlbmd0aCA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIGxpc3RbMF07CiAgICAg
ICAgIHJldHVybiBuZXcgQ29tbWFFeHByZXNzaW9uKG9yaWdpbiwgbGlzdCk7CiAgICAgfQogICAg
IApAQCAtNzYxLDE1ICs3NjgsMzAgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBv
cmlnaW5LaQogICAgIGZ1bmN0aW9uIHBhcnNlRnVuY05hbWUoKQogICAgIHsKICAgICAgICAgaWYg
KHRyeUNvbnN1bWUoIm9wZXJhdG9yIikpIHsKLSAgICAgICAgICAgIGxldCB0b2tlbiA9IHRyeUNv
bnN1bWUoIisiLCAiLSIsICIqIiwgIi8iLCAiJSIsICJeIiwgIiYiLCAifCIsICI8IiwgIj4iLCAi
PD0iLCAiPj0iLCAiPT0iLCAiKysiLCAiLS0iLCAiJiIpOwotICAgICAgICAgICAgaWYgKHRva2Vu
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuLnRleHQgIT0gIiYiIHx8ICF0cnlDb25zdW1l
KCJbIikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3IiICsgdG9rZW4udGV4
dDsKKyAgICAgICAgICAgIGxldCB0b2tlbiA9IGNvbnN1bWUoIisiLCAiLSIsICIqIiwgIi8iLCAi
JSIsICJeIiwgIiYiLCAifCIsICI8IiwgIj4iLCAiPD0iLCAiPj0iLCAiPT0iLCAiKysiLCAiLS0i
LCAiJiIsICIuIiwgIn4iLCAiPDwiLCAiPj4iLCAiWyIpOworICAgICAgICAgICAgaWYgKHRva2Vu
LnRleHQgPT0gIiYiKSB7CisgICAgICAgICAgICAgICAgaWYgKHRyeUNvbnN1bWUoIlsiKSkgewor
ICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCJdIik7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAib3BlcmF0b3ImW10iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAodHJ5Q29uc3VtZSgiLiIpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9y
Ji4iICsgY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKS50ZXh0OworICAgICAgICAgICAgICAgIHJl
dHVybiAib3BlcmF0b3ImIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbi50
ZXh0ID09ICIuIikgeworICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAib3BlcmF0b3IuIiAr
IGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIikudGV4dDsKKyAgICAgICAgICAgICAgICBpZiAodHJ5
Q29uc3VtZSgiPSIpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIj0iOworICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dG9rZW4udGV4dCA9PSAiWyIpIHsKICAgICAgICAgICAgICAgICBjb25zdW1lKCJdIik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciZbXSI7CisgICAgICAgICAgICAgICAgbGV0IHJl
c3VsdCA9ICJvcGVyYXRvcltdIjsKKyAgICAgICAgICAgICAgICBpZiAodHJ5Q29uc3VtZSgiPSIp
KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIj0iOworICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZXQgbmFtZSA9IGNvbnN1
bWVLaW5kKCJpZGVudGlmaWVyIik7Ci0gICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9yICIgKyBu
YW1lOworICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciIgKyB0b2tlbi50ZXh0OwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBjb25zdW1lS2luZCgiaWRlbnRpZmllciIpLnRleHQ7CiAgICAg
fQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywyMCArMjcsMzYgQEAKIGZ1bmN0aW9uIHByZXBhcmUob3JpZ2lu
LCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KQogewogICAgIGxldCBwcm9ncmFtID0gbmV3IFByb2dy
YW0oKTsKKyAgICAKICAgICBwYXJzZShwcm9ncmFtLCAiL2ludGVybmFsL3N0ZGxpYiIsICJuYXRp
dmUiLCAyNywgc3RhbmRhcmRMaWJyYXJ5KTsKICAgICBwYXJzZShwcm9ncmFtLCBvcmlnaW4sICJ1
c2VyIiwgbGluZU51bWJlck9mZnNldCwgdGV4dCk7Ci0gICAgcmVzb2x2ZU5hbWVzKHByb2dyYW0p
OwotICAgIHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKTsKKyAgICAKKyAgICBsZXQgbmFtZVJlc29s
dmVyID0gY3JlYXRlTmFtZVJlc29sdmVyKHByb2dyYW0pOworICAgIHJlc29sdmVOYW1lc0luVHlw
ZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNvbHZlTmFtZXNJblByb3RvY29scyhw
cm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIHJlc29sdmVUeXBlRGVmc0luVHlwZXMocHJvZ3Jh
bSk7CisgICAgcmVzb2x2ZVR5cGVEZWZzSW5Qcm90b2NvbHMocHJvZ3JhbSk7CisgICAgLy8gRklY
TUU6IE5lZWQgdG8gdmVyaWZ5IHRoYXQgc3RydWN0cmUgYXJlIG5vdCBjeWNsaWMuCisgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzA0NAorICAgIHN5bnRo
ZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSk7CisgICAgcmVzb2x2ZU5hbWVzSW5GdW5jdGlv
bnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNvbHZlVHlwZURlZnNJbkZ1bmN0aW9u
cyhwcm9ncmFtKTsKKyAgICAKICAgICBmbGF0dGVuUHJvdG9jb2xFeHRlbmRzKHByb2dyYW0pOwog
ICAgIGNoZWNrKHByb2dyYW0pOwogICAgIGNoZWNrTGl0ZXJhbFR5cGVzKHByb2dyYW0pOworICAg
IHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pOworICAgIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFt
KTsKKyAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFtKTsKICAgICBjaGVja1Byb2dyYW1XcmFw
cGVkKHByb2dyYW0pOwogICAgIGNoZWNrUmV0dXJucyhwcm9ncmFtKTsKICAgICBjaGVja1VucmVh
Y2hhYmxlQ29kZShwcm9ncmFtKTsKICAgICBjaGVja0xvb3BzKHByb2dyYW0pOwogICAgIGNoZWNr
UmVjdXJzaW9uKHByb2dyYW0pOwogICAgIGNoZWNrUHJvZ3JhbVdyYXBwZWQocHJvZ3JhbSk7Cisg
ICAgZmluZEhpZ2hab21iaWVzKHByb2dyYW0pOwogICAgIGlubGluZShwcm9ncmFtKTsKKyAgICAK
ICAgICByZXR1cm4gcHJvZ3JhbTsKIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUHJvZ3JhbS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Qcm9ncmFtLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9Qcm9ncmFtLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxMCBAQCBj
bGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAgICAgICAgIHRoaXMuX3R5cGVzID0gbmV3IE1h
cCgpOwogICAgICAgICB0aGlzLl9wcm90b2NvbHMgPSBuZXcgTWFwKCk7CiAgICAgICAgIHRoaXMu
X2Z1bmNJbnN0YW50aWF0b3IgPSBuZXcgRnVuY0luc3RhbnRpYXRvcih0aGlzKTsKKyAgICAgICAg
dGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQgPSBuZXcgTmFtZUNvbnRleHQoKTsKKyAgICAgICAgdGhp
cy5fZ2xvYmFsTmFtZUNvbnRleHQucHJvZ3JhbSA9IHRoaXM7CisgICAgICAgIHRoaXMuX2dsb2Jh
bE5hbWVDb250ZXh0LnJlY29nbml6ZUludHJpbnNpY3MoKTsKKyAgICAgICAgdGhpcy5pbnRyaW5z
aWNzID0gdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQuaW50cmluc2ljczsKICAgICB9CiAgICAgCiAg
ICAgZ2V0IHRvcExldmVsU3RhdGVtZW50cygpIHsgcmV0dXJuIHRoaXMuX3RvcExldmVsU3RhdGVt
ZW50czsgfQpAQCAtNDAsNiArNDQsNyBAQCBjbGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAg
ICAgZ2V0IHR5cGVzKCkgeyByZXR1cm4gdGhpcy5fdHlwZXM7IH0KICAgICBnZXQgcHJvdG9jb2xz
KCkgeyByZXR1cm4gdGhpcy5fcHJvdG9jb2xzOyB9CiAgICAgZ2V0IGZ1bmNJbnN0YW50aWF0b3Io
KSB7IHJldHVybiB0aGlzLl9mdW5jSW5zdGFudGlhdG9yOyB9CisgICAgZ2V0IGdsb2JhbE5hbWVD
b250ZXh0KCkgeyByZXR1cm4gdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQ7IH0KICAgICAKICAgICBh
ZGQoc3RhdGVtZW50KQogICAgIHsKQEAgLTUyLDEwICs1NywxMSBAQCBjbGFzcyBQcm9ncmFtIGV4
dGVuZHMgTm9kZSB7CiAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50IGluc3RhbmNlb2YgVHlw
ZSkKICAgICAgICAgICAgIHRoaXMuX3R5cGVzLnNldChzdGF0ZW1lbnQubmFtZSwgc3RhdGVtZW50
KTsKICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50IGluc3RhbmNlb2YgUHJvdG9jb2wpCi0gICAg
ICAgICAgICB0aGlzLl9wcm90b2NvbHMuc2V0KHN0YXRlbWVudC5hZGQsIHN0YXRlbWVudCk7Cisg
ICAgICAgICAgICB0aGlzLl9wcm90b2NvbHMuc2V0KHN0YXRlbWVudC5uYW1lLCBzdGF0ZW1lbnQp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlN0YXRlbWVudCBp
cyBub3QgYSBmdW5jdGlvbiBvciB0eXBlOiAiICsgc3RhdGVtZW50KTsKICAgICAgICAgdGhpcy5f
dG9wTGV2ZWxTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTsKKyAgICAgICAgdGhpcy5fZ2xvYmFs
TmFtZUNvbnRleHQuYWRkKHN0YXRlbWVudCk7CiAgICAgfQogICAgIAogICAgIHRvU3RyaW5nKCkK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIGV4
dGVuZHMgRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBiYXNlKQorICAgIHsK
KyAgICAgICAgc3VwZXIob3JpZ2luKTsKKyAgICAgICAgdGhpcy5iYXNlID0gYmFzZTsKKyAgICB9
CisgICAgCisgICAgZ2V0IHJlc3VsdFR5cGUoKSB7IHJldHVybiB0aGlzLnJlc3VsdFR5cGVGb3JH
ZXQgPyB0aGlzLnJlc3VsdFR5cGVGb3JHZXQgOiB0aGlzLnJlc3VsdFR5cGVGb3JBbmQ7IH0KKyAg
ICAKKyAgICByZXdyaXRlQWZ0ZXJDbG9uaW5nKCkKKyAgICB7CisgICAgICAgIC8vIEF0IHRoaXMg
cG9pbnQsIG5vZGUuYmFzZS5pc0xWYWx1ZSB3aWxsIG9ubHkgcmV0dXJuIHRydWUgaWYgaXQncyBw
b3NzaWJsZSB0byBnZXQgYSBwb2ludGVyIHRvIGl0LAorICAgICAgICAvLyBzaW5jZSB3ZSB3aWxs
IG5vIGxvbmdlciBzZWUgYW55IERvdEV4cHJlc3Npb25zIG9yIEluZGV4RXhwcmVzc2lvbnMuIEFs
c28sIG5vZGUgaXMgYSBuZXdseSBjcmVhdGVkCisgICAgICAgIC8vIG5vZGUgYW5kIGV2ZXJ5dGhp
bmcgYmVuZWF0aCBpdCBpcyBuZXdseSBjcmVhdGVkLCBzbyB3ZSBjYW4gZWRpdCBpdCBpbi1wbGFj
ZS4KKyAgICAgICAgCisgICAgICAgIGlmICgodGhpcy5iYXNlLmlzTFZhbHVlIHx8IHRoaXMuYmFz
ZVR5cGUuaXNSZWYpICYmIHRoaXMuY2FsbEZvckFuZCkKKyAgICAgICAgICAgIHJldHVybiBuZXcg
RGVyZWZlcmVuY2VFeHByZXNzaW9uKHRoaXMub3JpZ2luLCB0aGlzLmNhbGxGb3JBbmQsIHRoaXMu
cmVzdWx0VHlwZSwgdGhpcy5jYWxsRm9yQW5kLnJlc3VsdFR5cGUuYWRkcmVzc1NwYWNlKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JHZXQpCisgICAgICAgICAgICByZXR1cm4g
dGhpcy5jYWxsRm9yR2V0OworICAgICAgICAKKyAgICAgICAgaWYgKCF0aGlzLmNhbGxGb3JBbmQp
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5vcmlnaW4ub3JpZ2luU3RyaW5nICsg
IjogUHJvcGVydHkgYWNjZXNzIHdpdGhvdXQgZ2V0dGVyIGFuZCBhbmRlcjogIiArIHRoaXMpOwor
ICAgICAgICAKKyAgICAgICAgbGV0IGFub25WYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUodGhp
cy5vcmlnaW4sIHRoaXMuYmFzZVR5cGUpOworICAgICAgICB0aGlzLmNhbGxGb3JBbmQuYXJndW1l
bnRMaXN0WzBdID0gdGhpcy5iYXNlVHlwZS51bmlmeU5vZGUuYXJndW1lbnRGb3JBbmRPdmVybG9h
ZCh0aGlzLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChhbm9uVmFyKSk7CisgICAgICAgIHJldHVy
biBuZXcgQ29tbWFFeHByZXNzaW9uKHRoaXMub3JpZ2luLCBbCisgICAgICAgICAgICBhbm9uVmFy
LAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQodGhpcy5vcmlnaW4sIFZhcmlhYmxlUmVmLndy
YXAoYW5vblZhciksIHRoaXMuYmFzZSwgdGhpcy5iYXNlVHlwZSksCisgICAgICAgICAgICBuZXcg
RGVyZWZlcmVuY2VFeHByZXNzaW9uKHRoaXMub3JpZ2luLCB0aGlzLmNhbGxGb3JBbmQsIHRoaXMu
cmVzdWx0VHlwZSwgdGhpcy5jYWxsRm9yQW5kLnJlc3VsdFR5cGUuYWRkcmVzc1NwYWNlKQorICAg
ICAgICBdKTsKKyAgICB9CisgICAgCisgICAgdXBkYXRlQ2FsbHMoKQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuY2FsbEZvckdldCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvckdldC5hcmd1bWVu
dExpc3RbMF0gPSB0aGlzLmJhc2U7CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JBbmQpCisgICAg
ICAgICAgICB0aGlzLmNhbGxGb3JBbmQuYXJndW1lbnRMaXN0WzBdID0gdGhpcy5iYXNlVHlwZS5h
cmd1bWVudEZvckFuZE92ZXJsb2FkKHRoaXMub3JpZ2luLCB0aGlzLmJhc2UpOworICAgICAgICBp
ZiAodGhpcy5jYWxsRm9yU2V0KQorICAgICAgICAgICAgdGhpcy5jYWxsRm9yU2V0LmFyZ3VtZW50
TGlzdFswXSA9IHRoaXMuYmFzZTsKKyAgICB9CisgICAgCisgICAgZW1pdEdldChiYXNlKQorICAg
IHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAg
ICAgICByZXN1bHQuYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC51cGRhdGVDYWxscygpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0LnJld3JpdGVBZnRlckNsb25pbmcoKTsKKyAgICB9CisgICAg
CisgICAgZW1pdFNldChiYXNlLCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSB0
aGlzLnZpc2l0KG5ldyBSZXdyaXRlcigpKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuY2FsbEZvclNl
dCkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHRoaXMub3JpZ2luLm9yaWdpblN0
cmluZywgIkNhbm5vdCBlbWl0IHNldCBiZWNhdXNlOiAiICsgdGhpcy5lcnJvckZvclNldC50eXBl
RXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcmVzdWx0LmJhc2UgPSBiYXNlOworICAgICAgICByZXN1
bHQudXBkYXRlQ2FsbHMoKTsKKyAgICAgICAgcmVzdWx0LmNhbGxGb3JTZXQuYXJndW1lbnRMaXN0
W3Jlc3VsdC5jYWxsRm9yU2V0LmFyZ3VtZW50TGlzdC5sZW5ndGggLSAxXSA9IHZhbHVlOworICAg
ICAgICByZXR1cm4gcmVzdWx0LmNhbGxGb3JTZXQ7CisgICAgfQorfQorCkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eVJlc29sdmVyLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5UmVzb2x2ZXIuanMJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlSZXNvbHZl
ci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBQcm9wZXJ0
eVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CisgICAgX3Zpc2l0UlZhbHVlc1dpdGhpbkxWYWx1
ZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHZpc2l0ID0gbm9kZSA9PiBub2RlLnZpc2l0KHRo
aXMpOworICAgICAgICAKKyAgICAgICAgY2xhc3MgUlZhbHVlRmluZGVyIHsKKyAgICAgICAgICAg
IHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG5vZGUuYXJyYXkudmlzaXQodGhpcyk7CisgICAgICAgICAgICAgICAgdmlz
aXQobm9kZS5pbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHZpc2l0VmFyaWFibGVSZWYobm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2aXNpdChub2RlLnB0cik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZpc2l0SWRlbnRpdHlFeHByZXNzaW9u
KG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9kZS50YXJnZXQudmlzaXQo
dGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG5vZGUu
dmlzaXQobmV3IFJWYWx1ZUZpbmRlcigpKTsKKyAgICB9CisgICAgCisgICAgX3Zpc2l0UHJvcGVy
dHlBY2Nlc3Mobm9kZSkKKyAgICB7CisgICAgICAgIGxldCBuZXdOb2RlID0gbm9kZS52aXNpdChu
ZXcgTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlcigpKTsKKyAgICAgICAgbmV3Tm9kZS52aXNpdCh0
aGlzKTsKKyAgICAgICAgbm9kZS5iZWNvbWUobmV3Tm9kZSk7CisgICAgfQorICAgIAorICAgIHZp
c2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fdmlzaXRQcm9wZXJ0
eUFjY2Vzcyhub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9k
ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Zpc2l0UHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAg
fQorICAgIAorICAgIF9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUobm9kZSkKKyAgICB7CisgICAgICAg
IGxldCB0eXBlID0gbm9kZS5vbGRWYWx1ZVZhci50eXBlOworICAgICAgICBpZiAoIXR5cGUpCisg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgdHlwZSIpOworICAgICAgICBsZXQgc2lt
cGxlTEhTID0gbm9kZS5sVmFsdWUudmlzaXQobmV3IE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIo
KSk7CisgICAgICAgIGlmIChzaW1wbGVMSFMuaXNMVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICgh
c2ltcGxlTEhTLmFkZHJlc3NTcGFjZSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
bm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIjogTEhTIHdpdGhvdXQgYWRkcmVzcyBzcGFjZTog
IiArIHNpbXBsZUxIUyk7CisgICAgICAgICAgICBsZXQgcHRyVHlwZSA9IG5ldyBQdHJUeXBlKG5v
ZGUub3JpZ2luLCBzaW1wbGVMSFMuYWRkcmVzc1NwYWNlLCB0eXBlKTsKKyAgICAgICAgICAgIGxl
dCBwdHJWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIHB0clR5cGUpOwor
ICAgICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbW1hRXhwcmVzc2lvbihub2RlLm9yaWdpbiwg
WworICAgICAgICAgICAgICAgIG5vZGUub2xkVmFsdWVWYXIsIG5vZGUubmV3VmFsdWVWYXIsIHB0
clZhciwKKyAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVudCgKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAocHRyVmFyKSwKKyAgICAgICAgICAgICAg
ICAgICAgbmV3IE1ha2VQdHJFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBzaW1wbGVMSFMpLCBwdHJU
eXBlKSwKKyAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVudCgKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS5vcmlnaW4sIG5vZGUub2xkVmFsdWVSZWYoKSwKKyAgICAgICAgICAgICAgICAgICAg
bmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUu
b3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHB0clZhciksIHR5cGUsIHNpbXBsZUxIUy5hZGRyZXNz
U3BhY2UpLAorICAgICAgICAgICAgICAgICAgICB0eXBlKSwKKyAgICAgICAgICAgICAgICBuZXcg
QXNzaWdubWVudChub2RlLm9yaWdpbiwgbm9kZS5uZXdWYWx1ZVJlZigpLCBub2RlLm5ld1ZhbHVl
RXhwLCB0eXBlKSwKKyAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVudCgKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5j
ZUV4cHJlc3Npb24oCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgVmFyaWFi
bGVSZWYud3JhcChwdHJWYXIpLCB0eXBlLCBzaW1wbGVMSFMuYWRkcmVzc1NwYWNlKSwKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS5uZXdWYWx1ZVJlZigpLCB0eXBlKSwKKyAgICAgICAgICAgICAg
ICBub2RlLnJlc3VsdEV4cAorICAgICAgICAgICAgXSkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubFZhbHVlLmJhc2UsIG5vZGUubFZhbHVl
LmJhc2VUeXBlKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlRXhwID0gbmV3IENvbW1hRXhwcmVz
c2lvbihub2RlLm9yaWdpbiwgWworICAgICAgICAgICAgbm9kZS5vbGRWYWx1ZVZhciwgbm9kZS5u
ZXdWYWx1ZVZhciwKKyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2Rl
Lm9sZFZhbHVlUmVmKCksIG5vZGUubFZhbHVlLmVtaXRHZXQocmVzdWx0Lm9sZFZhbHVlUmVmKCkp
LCB0eXBlKSwKKyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2RlLm5l
d1ZhbHVlUmVmKCksIG5vZGUubmV3VmFsdWVFeHAsIHR5cGUpLAorICAgICAgICAgICAgbm9kZS5s
VmFsdWUuZW1pdFNldChyZXN1bHQub2xkVmFsdWVSZWYoKSwgbm9kZS5uZXdWYWx1ZVJlZigpKQor
ICAgICAgICBdKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdEV4cCA9IG5vZGUubmV3VmFsdWVSZWYo
KTsKKyAgICAgICAgdGhpcy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKHJlc3VsdCk7CisgICAgICAg
IG5vZGUuYmVjb21lKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5uZXdWYWx1ZUV4cC52aXNp
dCh0aGlzKTsKKyAgICAgICAgbm9kZS5yZXN1bHRFeHAudmlzaXQodGhpcyk7CisgICAgICAgIHRo
aXMuX3Zpc2l0UlZhbHVlc1dpdGhpbkxWYWx1ZShub2RlLmxWYWx1ZSk7CisgICAgICAgIHRoaXMu
X2hhbmRsZVJlYWRNb2RpZnlXcml0ZShub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRBc3Np
Z25tZW50KG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl92aXNpdFJWYWx1ZXNXaXRoaW5MVmFs
dWUobm9kZS5saHMpOworICAgICAgICBub2RlLnJocy52aXNpdCh0aGlzKTsKKyAgICAgICAgCisg
ICAgICAgIGxldCBzaW1wbGVMSFMgPSBub2RlLmxocy52aXNpdChuZXcgTm9ybWFsVXNlUHJvcGVy
dHlSZXNvbHZlcigpKTsKKyAgICAgICAgaWYgKHNpbXBsZUxIUy5pc0xWYWx1ZSkgeworICAgICAg
ICAgICAgbm9kZS5saHMuYmVjb21lKHNpbXBsZUxIUyk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghKG5vZGUubGhzIGluc3RhbmNlb2YgUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5l
eHBlY3RlZCBsaHMgdHlwZTogIiArIG5vZGUubGhzLmNvbnN0cnVjdG9yLm5hbWUpOworICAgICAg
ICAKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5v
ZGUub3JpZ2luLCBub2RlLmxocy5iYXNlLCBub2RlLmxocy5iYXNlVHlwZSk7CisgICAgICAgIGxl
dCByZXN1bHRWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUudHlw
ZSk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1ZUV4cCA9IG5ldyBDb21tYUV4cHJlc3Npb24obm9k
ZS5vcmlnaW4sIFsKKyAgICAgICAgICAgIHJlc3VsdFZhciwKKyAgICAgICAgICAgIG5ldyBBc3Np
Z25tZW50KG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHJlc3VsdFZhciksIG5vZGUucmhz
LCBub2RlLnR5cGUpLAorICAgICAgICAgICAgbm9kZS5saHMuZW1pdFNldChyZXN1bHQub2xkVmFs
dWVSZWYoKSwgVmFyaWFibGVSZWYud3JhcChyZXN1bHRWYXIpKQorICAgICAgICBdKTsKKyAgICAg
ICAgcmVzdWx0LnJlc3VsdEV4cCA9IFZhcmlhYmxlUmVmLndyYXAocmVzdWx0VmFyKTsKKyAgICAg
ICAgdGhpcy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKHJlc3VsdCk7CisgICAgICAgIG5vZGUuYmVj
b21lKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9k
ZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSk7Cisg
ICAgICAgIGlmICghbm9kZS5sVmFsdWUuaXNMVmFsdWUpCisgICAgICAgICAgICB0aHJvdyBuZXcg
V1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOb3QgYW4gbHZhbHVlOiAiICsg
bm9kZS5sVmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Np
b24obm9kZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lv
bihub2RlKTsKKyAgICAgICAgaWYgKCFub2RlLmxWYWx1ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAg
IHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk5vdCBhbiBs
dmFsdWU6ICIgKyBub2RlLmxWYWx1ZSk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDE5IEBAIGNsYXNzIFB0clR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlIHsKICAgICAgICAg
cmV0dXJuIHRoaXMuZWxlbWVudFR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5l
bGVtZW50VHlwZSk7CiAgICAgfQogICAgIAorICAgIGFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQob3Jp
Z2luLCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5v
cmlnaW5TdHJpbmcsICJQb2ludGVyIHN1YnNjcmlwdCBpcyBub3QgdmFsaWQiKTsKKyAgICB9Cisg
ICAgYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQob3JpZ2luLCB0eXBlKQorICAgIHsKKyAgICAg
ICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIlBvaW50ZXIgc3Vi
c2NyaXB0IGlzIG5vdCB2YWxpZCIpOworICAgIH0KKyAgICByZXR1cm5UeXBlRnJvbUFuZE92ZXJs
b2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlOworICAg
IH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRU
eXBlICsgIl4gIiArIHRoaXMuYWRkcmVzc1NwYWNlOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpz
CShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOwor
CitjbGFzcyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7Cisg
ICAgY29uc3RydWN0b3Iob3JpZ2luLCBsVmFsdWUsIHR5cGUgPSBudWxsKQorICAgIHsKKyAgICAg
ICAgc3VwZXIob3JpZ2luKTsKKyAgICAgICAgdGhpcy5fbFZhbHVlID0gbFZhbHVlOworICAgICAg
ICB0aGlzLm9sZFZhbHVlVmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG9yaWdpbiwgdHlwZSk7
CisgICAgICAgIHRoaXMubmV3VmFsdWVWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUob3JpZ2lu
LCB0eXBlKTsKKyAgICAgICAgdGhpcy5uZXdWYWx1ZUV4cCA9IG51bGw7CisgICAgICAgIHRoaXMu
cmVzdWx0RXhwID0gbnVsbDsKKyAgICB9CisgICAgCisgICAgZ2V0IGxWYWx1ZSgpIHsgcmV0dXJu
IHRoaXMuX2xWYWx1ZTsgfQorICAgIAorICAgIG9sZFZhbHVlUmVmKCkgeyByZXR1cm4gVmFyaWFi
bGVSZWYud3JhcCh0aGlzLm9sZFZhbHVlVmFyKTsgfQorICAgIG5ld1ZhbHVlUmVmKCkgeyByZXR1
cm4gVmFyaWFibGVSZWYud3JhcCh0aGlzLm5ld1ZhbHVlVmFyKTsgfQorICAgIAorICAgIHRvU3Ry
aW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiUk1XKCIgKyB0aGlzLmxWYWx1ZSArICIsICIg
KyB0aGlzLm9sZFZhbHVlVmFyICsgIiwgIiArIHRoaXMubmV3VmFsdWVWYXIgKyAiLCAiICsgdGhp
cy5uZXdWYWx1ZUV4cCArICIsICIgKyB0aGlzLnJlc3VsdEV4cCArICIpIjsKKyAgICB9Cit9CisK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVOYW1lcy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMuanMJ
KHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29s
dmVOYW1lcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsMjggQEAKICAqLwogInVzZSBz
dHJpY3QiOwogCi1mdW5jdGlvbiByZXNvbHZlTmFtZXMocHJvZ3JhbSkKK2Z1bmN0aW9uIGNyZWF0
ZU5hbWVSZXNvbHZlcihwcm9ncmFtKQogewotICAgIHByb2dyYW0udmlzaXQobmV3IE5hbWVSZXNv
bHZlcigpKTsKKyAgICByZXR1cm4gbmV3IE5hbWVSZXNvbHZlcihwcm9ncmFtLmdsb2JhbE5hbWVD
b250ZXh0KTsKIH0KKworZnVuY3Rpb24gcmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1l
UmVzb2x2ZXIpCit7CisgICAgZm9yIChsZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygp
KQorICAgICAgICBuYW1lUmVzb2x2ZXIuZG9TdGF0ZW1lbnQodHlwZSk7Cit9CisKK2Z1bmN0aW9u
IHJlc29sdmVOYW1lc0luUHJvdG9jb2xzKHByb2dyYW0sIG5hbWVSZXNvbHZlcikKK3sKKyAgICBm
b3IgKGxldCBwcm90b2NvbCBvZiBwcm9ncmFtLnByb3RvY29scy52YWx1ZXMoKSkKKyAgICAgICAg
bmFtZVJlc29sdmVyLmRvU3RhdGVtZW50KHByb3RvY29sKTsKK30KKworZnVuY3Rpb24gcmVzb2x2
ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAobGV0
IGZ1bmNzIG9mIHByb2dyYW0uZnVuY3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAobGV0
IGZ1bmMgb2YgZnVuY3MpCisgICAgICAgICAgICBuYW1lUmVzb2x2ZXIuZG9TdGF0ZW1lbnQoZnVu
Yyk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNv
bHZlT3ZlcmxvYWRJbXBsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDkgQEAKIAogZnVuY3Rpb24gcmVzb2x2ZU92ZXJsb2FkSW1wbChm
dW5jdGlvbnMsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpCiB7Cisg
ICAgaWYgKCFmdW5jdGlvbnMpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBmdW5jdGlv
bnM7IHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYnkgdGhlIGNhbGxlci4iKTsKKyAgICAK
ICAgICBsZXQgZmFpbHVyZXMgPSBbXTsKICAgICBsZXQgc3VjY2Vzc2VzID0gW107CiAgICAgZm9y
IChsZXQgZnVuYyBvZiBmdW5jdGlvbnMpIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Jlc29sdmVQcm9wZXJ0aWVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVQcm9wZXJ0aWVzLmpzCShub25leGlzdGVudCkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVQcm9wZXJ0aWVzLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8gVGhpcyB0dXJucyBEb3RFeHByZXNzaW9u
IGFuZCBJbmRleEV4cHJlc3Npb24gaW50byBjYWxscyB0byBnZXR0ZXJzIChvcGVyYXRvci5maWVs
ZCBhbmQgb3BlcmF0b3JbXSksCisvLyBzZXR0ZXJzIChvcGVyYXRvci5maWVsZD0gYW5kIG9wZXJh
dG9yW109KSwgYW5kIGFuZGVycyAob3BlcmF0b3ImLmZpZWxkIGFuZCBvcGVyYXRvciZbXSkuIFRo
aXMgaW52b2x2ZXMKKy8vIHRyYW5zZm9ybWluZyBhc3NpZ25tZW50cyBhbmQgUk1XJ3MgdG8gZG8g
bHZhbHVlIGVtdWxhdGlvbi4KK2Z1bmN0aW9uIHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pCit7
CisgICAgcHJvZ3JhbS52aXNpdChuZXcgUHJvcGVydHlSZXNvbHZlcigpKTsKK30KSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVUeXBlRGVmcy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlVHlwZURlZnMuanMJKHJl
dmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVU
eXBlRGVmcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsMjYgQEAKICAqLwogInVzZSBz
dHJpY3QiOwogCi1mdW5jdGlvbiByZXNvbHZlVHlwZURlZnMocHJvZ3JhbSkKK2Z1bmN0aW9uIHJl
c29sdmVUeXBlRGVmc0luVHlwZXMocHJvZ3JhbSkKIHsKLSAgICBwcm9ncmFtLnZpc2l0KG5ldyBU
eXBlRGVmUmVzb2x2ZXIoKSk7CisgICAgbGV0IHJlc29sdmVyID0gbmV3IFR5cGVEZWZSZXNvbHZl
cigpOworICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkKKyAgICAg
ICAgdHlwZS52aXNpdChyZXNvbHZlcik7Cit9CisKK2Z1bmN0aW9uIHJlc29sdmVUeXBlRGVmc0lu
UHJvdG9jb2xzKHByb2dyYW0pCit7CisgICAgbGV0IHJlc29sdmVyID0gbmV3IFR5cGVEZWZSZXNv
bHZlcigpOworICAgIGZvciAobGV0IHByb3RvY29sIG9mIHByb2dyYW0ucHJvdG9jb2xzLnZhbHVl
cygpKQorICAgICAgICBwcm90b2NvbC52aXNpdChyZXNvbHZlcik7Cit9CisKK2Z1bmN0aW9uIHJl
c29sdmVUeXBlRGVmc0luRnVuY3Rpb25zKHByb2dyYW0pCit7CisgICAgbGV0IHJlc29sdmVyID0g
bmV3IFR5cGVEZWZSZXNvbHZlcigpOworICAgIGZvciAobGV0IGZ1bmNzIG9mIHByb2dyYW0uZnVu
Y3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAg
ICAgICAgICBmdW5jLnZpc2l0KHJlc29sdmVyKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwkocmV2aXNpb24gMjIy
MTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwko
d29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBjbGFzcyBSZXR1cm5DaGVja2VyIGV4dGVu
ZHMgVmlzaXRvciB7CiAKICAgICBfaXNCb29sQ2FzdEZyb21MaXRlcmFsVHJ1ZShub2RlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG5vZGUuaXNDYXN0ICYmIG5vZGUucmV0dXJuVHlwZSBpbnN0YW5j
ZW9mIFR5cGVSZWYgJiYgbm9kZS5yZXR1cm5UeXBlLmVxdWFscyh0aGlzLl9wcm9ncmFtLmludHJp
bnNpY3MuYm9vbCkgJiYgbm9kZS5hcmd1bWVudExpc3QubGVuZ3RoID09IDEgJiYgbm9kZS5hcmd1
bWVudExpc3RbMF0ubGlzdC5sZW5ndGggPT0gMSAmJiBub2RlLmFyZ3VtZW50TGlzdFswXS5saXN0
WzBdIGluc3RhbmNlb2YgQm9vbExpdGVyYWwgJiYgbm9kZS5hcmd1bWVudExpc3RbMF0ubGlzdFsw
XS52YWx1ZTsKKyAgICAgICAgcmV0dXJuIG5vZGUuaXNDYXN0ICYmIG5vZGUucmV0dXJuVHlwZSBp
bnN0YW5jZW9mIFR5cGVSZWYgJiYgbm9kZS5yZXR1cm5UeXBlLmVxdWFscyh0aGlzLl9wcm9ncmFt
LmludHJpbnNpY3MuYm9vbCkgJiYgbm9kZS5hcmd1bWVudExpc3QubGVuZ3RoID09IDEgJiYgbm9k
ZS5hcmd1bWVudExpc3RbMF0gaW5zdGFuY2VvZiBCb29sTGl0ZXJhbCAmJiBub2RlLmFyZ3VtZW50
TGlzdFswXS52YWx1ZTsKICAgICB9CiAKICAgICB2aXNpdFdoaWxlTG9vcChub2RlKQpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxMCArMjcsOSBAQAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIGhhdmUgc2Vu
c2libGUgYmVoYXZpb3Igd2hlbiBpdCBlbmNvdW50ZXJzIGRlZmluaXRpb25zIHRoYXQgaXQgY2Fu
bm90IGhhbmRsZS4gUmlnaHQKIC8vIG5vdyB3ZSBhcmUgaGFja2lzaGx5IHByZXZlbnRpbmcgdGhp
cyBieSB3cmFwcGluZyB0aGluZ3MgaW4gVHlwZVJlZi4gVGhhdCdzIHByb2JhYmx5IHdyb25nLgog
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjIwOAotY2xhc3Mg
UmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CitjbGFzcyBSZXdyaXRlciB7CiAgICAgY29u
c3RydWN0b3IoKQogICAgIHsKLSAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5fbWFwcGlu
ZyA9IG5ldyBNYXAoKTsKICAgICB9CiAgICAgCkBAIC05OSw3ICs5OCw3IEBAIGNsYXNzIFJld3Jp
dGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZhcmlh
YmxlRGVjbCgKICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm5hbWUsCiAgICAgICAgICAg
ICBub2RlLnR5cGUudmlzaXQodGhpcyksCi0gICAgICAgICAgICBub2RlLmluaXRpYWxpemVyID8g
bm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKSA6IG51bGwpOworICAgICAgICAgICAgTm9kZS52
aXNpdChub2RlLmluaXRpYWxpemVyLCB0aGlzKSk7CiAgICAgICAgIHRoaXMuX21hcE5vZGUobm9k
ZSwgcmVzdWx0KTsKICAgICAgICAgcmVzdWx0LmVQdHIgPSBub2RlLmVQdHI7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0xMzEsNyArMTMwLDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBW
aXNpdG9yQmFzZSB7CiAgICAgdmlzaXRUeXBlUmVmKG5vZGUpCiAgICAgewogICAgICAgICBsZXQg
cmVzdWx0ID0gbmV3IFR5cGVSZWYobm9kZS5vcmlnaW4sIG5vZGUubmFtZSwgbm9kZS50eXBlQXJn
dW1lbnRzLm1hcCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKSk7Ci0g
ICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDog
bnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMTYzLDI0ICsxNjIsNTQg
QEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXRBc3NpZ25t
ZW50KG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFzc2lnbm1lbnQobm9k
ZS5vcmlnaW4sIG5vZGUubGhzLnZpc2l0KHRoaXMpLCBub2RlLnJocy52aXNpdCh0aGlzKSk7Ci0g
ICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDog
bnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZpc2l0UmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmxWYWx1ZS52aXNpdCh0
aGlzKSk7CisgICAgICAgIHJlc3VsdC5vbGRWYWx1ZVZhciA9IG5vZGUub2xkVmFsdWVWYXIudmlz
aXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1ZVZhciA9IG5vZGUubmV3VmFsdWVWYXIu
dmlzaXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1ZUV4cCA9IG5vZGUubmV3VmFsdWVF
eHAudmlzaXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5yZXN1bHRFeHAgPSBub2RlLnJlc3VsdEV4
cC52aXNpdCh0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAg
dmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1
bHQgPSBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLnB0ci52aXNp
dCh0aGlzKSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZp
c2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUu
dHlwZSwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5hZGRyZXNzU3BhY2UgPSBub2RlLmFkZHJlc3NT
cGFjZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgX2hhbmRsZVBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQsIG5vZGUpCisgICAgeworICAgICAgICByZXN1
bHQucG9zc2libGVHZXRPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlR2V0T3ZlcmxvYWRzOworICAg
ICAgICByZXN1bHQucG9zc2libGVTZXRPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlU2V0T3Zlcmxv
YWRzOworICAgICAgICByZXN1bHQucG9zc2libGVBbmRPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxl
QW5kT3ZlcmxvYWRzOworICAgICAgICByZXN1bHQuYmFzZVR5cGUgPSBOb2RlLnZpc2l0KG5vZGUu
YmFzZVR5cGUsIHRoaXMpOworICAgICAgICByZXN1bHQuY2FsbEZvckdldCA9IE5vZGUudmlzaXQo
bm9kZS5jYWxsRm9yR2V0LCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGVGb3JHZXQg
PSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckdldCwgdGhpcyk7CisgICAgICAgIHJlc3Vs
dC5jYWxsRm9yQW5kID0gTm9kZS52aXNpdChub2RlLmNhbGxGb3JBbmQsIHRoaXMpOworICAgICAg
ICByZXN1bHQucmVzdWx0VHlwZUZvckFuZCA9IE5vZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlRm9y
QW5kLCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LmNhbGxGb3JTZXQgPSBOb2RlLnZpc2l0KG5vZGUu
Y2FsbEZvclNldCwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5lcnJvckZvclNldCA9IG5vZGUuZXJy
b3JGb3JTZXQ7CisgICAgICAgIHJlc3VsdC51cGRhdGVDYWxscygpOworICAgIH0KKyAgICAKICAg
ICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBu
ZXcgRG90RXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyksIG5v
ZGUuZmllbGROYW1lKTsKLSAgICAgICAgcmVzdWx0LnN0cnVjdFR5cGUgPSBub2RlLnN0cnVjdFR5
cGUgPyBub2RlLnN0cnVjdFR5cGUudmlzaXQodGhpcykgOiBudWxsOwotICAgICAgICAvLyBXZSBk
b24ndCB3YW50IHRvIHJld3JpdGUgZmllbGQsIHNpbmNlIHRoaXMgaXMgYSBkZWVwIHJlZmVyZW5j
ZSBnb2luZyBvdXQgb2YgdGhlIGZ1bmN0aW9uLgotICAgICAgICAvLyBBbHNvLCB0aGlzIGlzIHNl
dCB1cCBkdXJpbmcgaW5saW5pbmcsIHNvIHdlJ3JlIGFscmVhZHkgZnVsbHkgbW9ub21vcnBoaXNl
ZC4KLSAgICAgICAgcmVzdWx0LmZpZWxkID0gbm9kZS5maWVsZDsKKyAgICAgICAgdGhpcy5faGFu
ZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKHJlc3VsdCwgbm9kZSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisg
ICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEluZGV4RXhwcmVzc2lvbihub2RlLm9yaWdp
biwgbm9kZS5hcnJheS52aXNpdCh0aGlzKSwgbm9kZS5pbmRleC52aXNpdCh0aGlzKSk7CisgICAg
ICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQsIG5vZGUpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTIxNiw3ICsyNDUsNyBAQCBj
bGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2aXNpdFJldHVy
bihub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm4obm9kZS5vcmlnaW4sIG5v
ZGUudmFsdWUgPyBub2RlLnZhbHVlLnZpc2l0KHRoaXMpIDogbnVsbCk7CisgICAgICAgIHJldHVy
biBuZXcgUmV0dXJuKG5vZGUub3JpZ2luLCBOb2RlLnZpc2l0KG5vZGUudmFsdWUsIHRoaXMpKTsK
ICAgICB9CiAgICAgCiAgICAgdmlzaXRDb250aW51ZShub2RlKQpAQCAtMjQwLDcgKzI2OSw3IEBA
IGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0R2VuZXJpY0xp
dGVyYWxUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IG5vZGUuY29u
c3RydWN0b3Iobm9kZS5vcmlnaW4sIG5vZGUudmFsdWUpOwotICAgICAgICByZXN1bHQudHlwZSA9
IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3Vs
dC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgICAgICByZXN1bHQucHJl
ZmVycmVkVHlwZSA9IG5vZGUucHJlZmVycmVkVHlwZS52aXNpdCh0aGlzKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yNjEsNyArMjkwLDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0
ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXROdWxsVHlwZShub2RlKQogICAgIHsKICAgICAg
ICAgbGV0IHJlc3VsdCA9IG5ldyBOdWxsVHlwZShub2RlLm9yaWdpbik7Ci0gICAgICAgIHJlc3Vs
dC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKKyAgICAg
ICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0yODAsNyArMzA5LDcgQEAgY2xhc3MgUmV3cml0ZXIg
ZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgIHJlc3VsdC5wb3NzaWJsZU92ZXJsb2FkcyA9
IG5vZGUucG9zc2libGVPdmVybG9hZHM7CiAgICAgICAgIGlmIChub2RlLmlzQ2FzdCkKICAgICAg
ICAgICAgIHJlc3VsdC5zZXRDYXN0RGF0YShub2RlLnJldHVyblR5cGUudmlzaXQodGhpcykpOwot
ICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IG5vZGUucmVzdWx0VHlwZSA/IG5vZGUucmVzdWx0
VHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gTm9k
ZS52aXNpdChub2RlLnJlc3VsdFR5cGUsIHRoaXMpOwogICAgICAgICByZXN1bHQucmVzdWx0RVB0
ciA9IG5vZGUucmVzdWx0RVB0cjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0y
OTAsNyArMzE5LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAg
ICAgIGxldCByZXN1bHQgPSBuZXcgQ2FsbEV4cHJlc3Npb24oCiAgICAgICAgICAgICBub2RlLm9y
aWdpbiwgbm9kZS5uYW1lLAogICAgICAgICAgICAgbm9kZS50eXBlQXJndW1lbnRzLm1hcCh0eXBl
QXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKSwKLSAgICAgICAgICAgIG5vZGUu
YXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBhcmd1bWVudC52aXNpdCh0aGlzKSkpOworICAg
ICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFyZ3VtZW50ID0+IE5vZGUudmlzaXQoYXJn
dW1lbnQsIHRoaXMpKSk7CiAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEZXJpdmVkQ2FsbERh
dGEobm9kZSwgcmVzdWx0KTsKICAgICB9CiAgICAgCkBAIC0yOTgsNyArMzI3LDcgQEAgY2xhc3Mg
UmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgewogICAgICAgICBsZXQgcmVzdWx0
ID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAogICAgICAgICAgICAgbm9kZS5vcmlnaW4sCi0gICAg
ICAgICAgICBub2RlLnJldHVyblR5cGUgPyBub2RlLnJldHVyblR5cGUudmlzaXQodGhpcykgOiBu
dWxsLAorICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLnJldHVyblR5cGUsIHRoaXMpLAogICAg
ICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFyZ3VtZW50ID0+IGFyZ3VtZW50LnZpc2l0
KHRoaXMpKSwKICAgICAgICAgICAgIG5vZGUucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBh
cmFtZXRlci52aXNpdCh0aGlzKSksCiAgICAgICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcykp
OwpAQCAtMzE1LDcgKzM0NCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2Ug
ewogCiAgICAgdmlzaXRJZlN0YXRlbWVudChub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5l
dyBJZlN0YXRlbWVudChub2RlLm9yaWdpbiwgbm9kZS5jb25kaXRpb25hbC52aXNpdCh0aGlzKSwg
bm9kZS5ib2R5LnZpc2l0KHRoaXMpLCBub2RlLmVsc2VCb2R5ID8gbm9kZS5lbHNlQm9keS52aXNp
dCh0aGlzKSA6IHVuZGVmaW5lZCk7CisgICAgICAgIHJldHVybiBuZXcgSWZTdGF0ZW1lbnQobm9k
ZS5vcmlnaW4sIG5vZGUuY29uZGl0aW9uYWwudmlzaXQodGhpcyksIG5vZGUuYm9keS52aXNpdCh0
aGlzKSwgTm9kZS52aXNpdChub2RlLmVsc2VCb2R5LCB0aGlzKSk7CiAgICAgfQogCiAgICAgdmlz
aXRXaGlsZUxvb3Aobm9kZSkKQEAgLTMzMSwyMiArMzYwLDI0IEBAIGNsYXNzIFJld3JpdGVyIGV4
dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0Rm9yTG9vcChub2RlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG5ldyBGb3JMb29wKG5vZGUub3JpZ2luLAotICAgICAgICAgICAgbm9kZS5pbml0
aWFsaXphdGlvbiA/IG5vZGUuaW5pdGlhbGl6YXRpb24udmlzaXQodGhpcykgOiB1bmRlZmluZWQs
Ci0gICAgICAgICAgICBub2RlLmNvbmRpdGlvbiA/IG5vZGUuY29uZGl0aW9uLnZpc2l0KHRoaXMp
IDogdW5kZWZpbmVkLAotICAgICAgICAgICAgbm9kZS5pbmNyZW1lbnQgPyBub2RlLmluY3JlbWVu
dC52aXNpdCh0aGlzKSA6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5p
bml0aWFsaXphdGlvbiwgdGhpcyksCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUuY29uZGl0
aW9uLCB0aGlzKSwKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbmNyZW1lbnQsIHRoaXMp
LAogICAgICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsKICAgICB9CiAgICAgCi0gICAg
dmlzaXRMZXRFeHByZXNzaW9uKG5vZGUpCisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShub2Rl
KQogICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBMZXRFeHByZXNzaW9uKG5vZGUub3Jp
Z2luKTsKLSAgICAgICAgcmVzdWx0LmluZGV4ID0gbm9kZS5pbmRleDsKLSAgICAgICAgcmVzdWx0
LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQodGhpcykgOiBudWxsOwotICAgICAg
ICByZXN1bHQuYXJndW1lbnQgPSBub2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAgICAgICBs
ZXQgcmVzdWx0ID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG5vZGUub3JpZ2luLCBub2RlLnR5cGUu
dmlzaXQodGhpcykpOworICAgICAgICByZXN1bHQuX2luZGV4ID0gbm9kZS5faW5kZXg7CiAgICAg
ICAgIHRoaXMuX21hcE5vZGUobm9kZSwgcmVzdWx0KTsKLSAgICAgICAgcmVzdWx0LmJvZHkgPSBu
b2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgICAgIHJlc3VsdC5lUHRyID0gbm9kZS5lUHRyOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyAgICAKKyAgICB2aXNpdElkZW50aXR5RXhw
cmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBJZGVudGl0eUV4cHJlc3Np
b24obm9kZS50YXJnZXQudmlzaXQodGhpcykpOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxOCBAQCBuYXRpdmUgaW50IG9wZXJhdG9y
KihpbnQsIGludCk7CiBuYXRpdmUgdWludCBvcGVyYXRvcioodWludCwgdWludCk7CiBuYXRpdmUg
aW50IG9wZXJhdG9yLyhpbnQsIGludCk7CiBuYXRpdmUgdWludCBvcGVyYXRvci8odWludCwgdWlu
dCk7CituYXRpdmUgaW50IG9wZXJhdG9yJihpbnQsIGludCk7CituYXRpdmUgaW50IG9wZXJhdG9y
fChpbnQsIGludCk7CituYXRpdmUgaW50IG9wZXJhdG9yXihpbnQsIGludCk7CituYXRpdmUgaW50
IG9wZXJhdG9yfihpbnQpOworbmF0aXZlIGludCBvcGVyYXRvcjw8KGludCwgdWludCk7CituYXRp
dmUgaW50IG9wZXJhdG9yPj4oaW50LCB1aW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yJih1aW50
LCB1aW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yfCh1aW50LCB1aW50KTsKK25hdGl2ZSB1aW50
IG9wZXJhdG9yXih1aW50LCB1aW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yfih1aW50KTsKK25h
dGl2ZSB1aW50IG9wZXJhdG9yPDwodWludCwgdWludCk7CituYXRpdmUgdWludCBvcGVyYXRvcj4+
KHVpbnQsIHVpbnQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I9PShpbnQsIGludCk7CiBuYXRpdmUg
Ym9vbCBvcGVyYXRvcj09KHVpbnQsIHVpbnQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I9PShib29s
LCBib29sKTsKQEAgLTY4LDYgKzgwLDM1IEBAIG5hdGl2ZSBib29sIG9wZXJhdG9yPih1aW50LCB1
aW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPj0oaW50LCBpbnQpOwogbmF0aXZlIGJvb2wgb3Bl
cmF0b3I+PSh1aW50LCB1aW50KTsKIAorYm9vbCBvcGVyYXRvciYoYm9vbCBhLCBib29sIGIpCit7
CisgICAgaWYgKGEpCisgICAgICAgIHJldHVybiBiOworICAgIHJldHVybiBmYWxzZTsKK30KK2Jv
b2wgb3BlcmF0b3J8KGJvb2wgYSwgYm9vbCBiKQoreworICAgIGlmIChhKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQorYm9vbCBvcGVyYXRvcl4oYm9vbCBhLCBib29sIGIpCit7CisgICAgaWYgKGEpCisg
ICAgICAgIHJldHVybiAhYjsKKyAgICByZXR1cm4gYjsKK30KK2Jvb2wgb3BlcmF0b3J+KGJvb2wg
dmFsdWUpCit7CisgICAgcmV0dXJuICF2YWx1ZTsKK30KKworcHJvdG9jb2wgQWRkYWJsZSB7Cisg
ICAgQWRkYWJsZSBvcGVyYXRvcisoQWRkYWJsZSwgQWRkYWJsZSk7Cit9CisKIHByb3RvY29sIEVx
dWF0YWJsZSB7CiAgICAgYm9vbCBvcGVyYXRvcj09KEVxdWF0YWJsZSwgRXF1YXRhYmxlKTsKIH0K
QEAgLTkyLDQgKzEzMyw5IEBAIG5hdGl2ZSB0aHJlYWQgVF4gb3BlcmF0b3ImW108VD4odGhyZWFk
IFQKIG5hdGl2ZSB0aHJlYWRncm91cCBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4odGhyZWFk
Z3JvdXAgVFtdLCB1aW50KTsKIG5hdGl2ZSBkZXZpY2UgVF4gb3BlcmF0b3ImW108VDpwcmltaXRp
dmU+KGRldmljZSBUW10sIHVpbnQpOwogbmF0aXZlIGNvbnN0YW50IFReIG9wZXJhdG9yJltdPFQ6
cHJpbWl0aXZlPihjb25zdGFudCBUW10sIHVpbnQpOworCituYXRpdmUgdWludCBvcGVyYXRvci5s
ZW5ndGg8VD4odGhyZWFkIFRbXSk7CituYXRpdmUgdWludCBvcGVyYXRvci5sZW5ndGg8VDpwcmlt
aXRpdmU+KHRocmVhZGdyb3VwIFRbXSk7CituYXRpdmUgdWludCBvcGVyYXRvci5sZW5ndGg8VDpw
cmltaXRpdmU+KGRldmljZSBUW10pOworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6cHJp
bWl0aXZlPihjb25zdGFudCBUW10pOwogYDsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0TGF5b3V0QnVpbGRlci5qcwkocmV2aXNpb24gMjIyMTIz
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0TGF5b3V0QnVpbGRlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtNTksNSArNTksMTEgQEAgY2xhc3MgU3RydWN0TGF5b3V0QnVp
bGRlciBleHRlbmRzIFZpc2l0bwogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUeXBlIGRv
ZXMgbm90IGhhdmUgc2l6ZTogIiArIG5vZGUudHlwZSk7CiAgICAgICAgIHRoaXMuX29mZnNldCAr
PSBzaXplOwogICAgIH0KKyAgICAKKyAgICB2aXNpdE5hdGl2ZUZ1bmNJbnN0YW5jZShub2RlKQor
ICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXROYXRpdmVGdW5jSW5zdGFuY2Uobm9kZSk7CisgICAg
ICAgIG5vZGUuZnVuYy5kaWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEobm9kZS5p
bXBsZW1lbnRhdGlvbkRhdGEpOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01
NywyMSArNTcsMjkgQEAgY2xhc3MgU3RydWN0VHlwZSBleHRlbmRzIFR5cGUgewogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBpbnN0YW50aWF0ZSh0eXBlQXJndW1lbnRz
LCBtb2RlKQorICAgIGluc3RhbnRpYXRlKHR5cGVBcmd1bWVudHMgPSBudWxsKQogICAgIHsKLSAg
ICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoICE9IHRoaXMudHlwZVBhcmFtZXRlcnMubGVu
Z3RoKQotICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmlu
ZywgIldyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyB0byBpbnN0YW50aWF0aW9uIik7Cisg
ICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBudWxsOworICAgICAgICBsZXQgdHlwZVBhcmFtZXRl
cnMgPSB0aGlzLnR5cGVQYXJhbWV0ZXJzOwogICAgICAgICAKLSAgICAgICAgaWYgKCF0eXBlQXJn
dW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICBpZiAodHlw
ZUFyZ3VtZW50cykgeworICAgICAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoICE9IHRo
aXMudHlwZVBhcmFtZXRlcnMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJXcm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVu
dHMgdG8gaW5zdGFudGlhdGlvbiIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXR5
cGVBcmd1bWVudHMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBzdWJzdGl0dXRpb24gPSBuZXcgU3Vic3RpdHV0aW9uKHRoaXMu
dHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOworICAgICAgICAgICAgdHlwZVBhcmFtZXRl
cnMgPSBbXTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9
IG5ldyBTdWJzdGl0dXRpb24odGhpcy50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7Ci0g
ICAgICAgIGxldCBpbnN0YW50aWF0ZUltbWVkaWF0ZXMgPSBtb2RlID09ICJzaGFsbG93IiA/IG51
bGwgOiBuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCk7Ci0gICAgICAgIGxldCByZXN1bHQgPSBu
ZXcgU3RydWN0VHlwZSh0aGlzLm9yaWdpbiwgdGhpcy5uYW1lLCBbXSk7CisgICAgICAgIGxldCBp
bnN0YW50aWF0ZUltbWVkaWF0ZXMgPSBuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCk7CisgICAg
ICAgIGxldCByZXN1bHQgPSBuZXcgU3RydWN0VHlwZSh0aGlzLm9yaWdpbiwgdGhpcy5uYW1lLCB0
eXBlUGFyYW1ldGVycyk7CiAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7
Ci0gICAgICAgICAgICBsZXQgbmV3RmllbGQgPSBmaWVsZC52aXNpdChzdWJzdGl0dXRpb24pOwot
ICAgICAgICAgICAgaWYgKGluc3RhbnRpYXRlSW1tZWRpYXRlcykKLSAgICAgICAgICAgICAgICBu
ZXdGaWVsZCA9IG5ld0ZpZWxkLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyk7CisgICAgICAg
ICAgICBsZXQgbmV3RmllbGQgPSBmaWVsZDsKKyAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb24p
CisgICAgICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC52aXNpdChzdWJzdGl0dXRpb24p
OworICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC52aXNpdChpbnN0YW50aWF0ZUltbWVk
aWF0ZXMpOwogICAgICAgICAgICAgcmVzdWx0LmFkZChuZXdGaWVsZCk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N1YnN0aXR1dGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9TdWJzdGl0dXRpb24uanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsOCBAQCBjbGFzcyBTdWJzdGl0dXRpb24gZXh0ZW5kcyBSZXdyaXRlciB7CiAgICAgICAgICAg
ICB0aGlzLl9tYXAuc2V0KHBhcmFtZXRlcnNbaV0sIGFyZ3VtZW50TGlzdFtpXSk7CiAgICAgfQog
ICAgIAorICAgIGdldCBtYXAoKSB7IHJldHVybiB0aGlzLl9tYXA7IH0KKyAgICAKICAgICB2aXNp
dFR5cGVSZWYobm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXBsYWNlbWVudCA9IHRoaXMuX21h
cC5nZXQobm9kZS50eXBlKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1
ZmZpeENhbGxBc3NpZ25tZW50LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1N1ZmZpeENhbGxBc3NpZ25tZW50LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWZmaXhDYWxsQXNzaWdubWVudC5qcwkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgU3VmZml4Q2FsbEFzc2lnbm1l
bnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIGxo
cykKLSAgICB7Ci0gICAgICAgIHN1cGVyKG9yaWdpbik7Ci0gICAgICAgIHRoaXMuX25hbWUgPSBu
YW1lOwotICAgICAgICB0aGlzLl9saHMgPSBsaHM7Ci0gICAgICAgIHRoaXMuZnVuYyA9IG51bGw7
Ci0gICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAg
IGdldCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KLSAgICAKLSAgICB0b1N0cmluZygpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5saHMgKyAiIHN1ZmZpeCAiICsgdGhpcy5uYW1lOwot
ICAgIH0KLX0KLQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6
ZVN0cnVjdEFjY2Vzc29ycy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCShub25leGlzdGVudCkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gc3ludGhlc2l6
ZVN0cnVjdEFjY2Vzc29ycyhwcm9ncmFtKQoreworICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3Jh
bS50eXBlcy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgU3RydWN0
VHlwZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAobGV0
IGZpZWxkIG9mIHR5cGUuZmllbGRzKSB7CisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBl
UGFyYW1ldGVycygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUu
dHlwZVBhcmFtZXRlcnMubWFwKAorICAgICAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyID0+
IHR5cGVQYXJhbWV0ZXIudmlzaXQobmV3IFR5cGVQYXJhbWV0ZXJSZXdyaXRlcigpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVR5cGVB
cmd1bWVudHMoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0eXBlUGFy
YW1ldGVycy5tYXAodHlwZVBhcmFtZXRlciA9PiB0eXBlUGFyYW1ldGVyLnZpc2l0KG5ldyBBdXRv
V3JhcHBlcigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1
bmN0aW9uIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIGltcGxlbWVudGF0aW9u
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMuaW5zdGFudGlhdGVJ
bXBsZW1lbnRhdGlvbiA9IHN1YnN0aXR1dGlvbiA9PiB7CisgICAgICAgICAgICAgICAgICAgIGxl
dCBuZXdUeXBlID0gdHlwZS5pbnN0YW50aWF0ZShuYXRpdmVGdW5jLnR5cGVQYXJhbWV0ZXJzLm1h
cCh0eXBlUGFyYW1ldGVyID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdWJzdGl0
dXRlID0gc3Vic3RpdHV0aW9uLm1hcC5nZXQodHlwZVBhcmFtZXRlcik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXN1YnN0aXR1dGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJOdWxsIHN1YnN0aXR1dGUgZm9yIHR5cGUgcGFyYW1ldGVyICIgKyB0
eXBlUGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJzdGl0dXRl
OworICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7
dHlwZTogbmV3VHlwZSwgZmllbGROYW1lOiBmaWVsZC5uYW1lfTsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMudmlzaXRJbXBsZW1lbnRhdGlvbkRhdGEgPSAo
aW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFZpc2l0aW5nIHRoZSB0eXBlIGZpcnN0IGVuc3VyZXMgdGhhdCB0aGUgc3RydWN0IGxheW91dCBi
dWlsZGVyIGZpZ3VyZXMgb3V0IHRoZSBmaWVsZCdzCisgICAgICAgICAgICAgICAgICAgIC8vIG9m
ZnNldC4KKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLnR5cGUudmlzaXQo
dmlzaXRvcik7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5j
LmRpZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVudGF0aW9uRGF0
YSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGxldCBzdHJ1Y3RTaXplID0gaW1wbGVtZW50YXRp
b25EYXRhLnR5cGUuc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdFNpemUgPT0g
bnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gc3RydWN0
IHNpemUgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxk
ID0gaW1wbGVtZW50YXRpb25EYXRhLnR5cGUuZmllbGRCeU5hbWUoaW1wbGVtZW50YXRpb25EYXRh
LmZpZWxkTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghZmllbGQpCisgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpZWxkIik7Cisg
ICAgICAgICAgICAgICAgICAgIGxldCBvZmZzZXQgPSBmaWVsZC5vZmZzZXQ7CisgICAgICAgICAg
ICAgICAgICAgIGxldCBmaWVsZFNpemUgPSBmaWVsZC50eXBlLnNpemU7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChmaWVsZFNpemUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTm8gZmllbGQgc2l6ZSBmb3IgIiArIG5hdGl2ZUZ1bmMpOworICAgICAg
ICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIk5vIG9mZnNldCBmb3IgIiArIG5hdGl2ZUZ1bmMpOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLm9m
ZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLnN0
cnVjdFNpemUgPSBzdHJ1Y3RTaXplOworICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlv
bkRhdGEuZmllbGRTaXplID0gZmllbGRTaXplOworICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgbmF0aXZlRnVuYy5pbXBsZW1lbnRhdGlvbiA9IChhcmd1bWVudExpc3QsIG5vZGUp
ID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5hdGl2ZUZ1bmNJbnN0YW5jZSA9IG5vZGUu
bmF0aXZlRnVuY0luc3RhbmNlOworICAgICAgICAgICAgICAgICAgICBsZXQgaW1wbGVtZW50YXRp
b25EYXRhID0gbmF0aXZlRnVuY0luc3RhbmNlLmltcGxlbWVudGF0aW9uRGF0YTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uKAorICAgICAgICAgICAgICAgICAgICAg
ICAgYXJndW1lbnRMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25E
YXRhLm9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5z
dHJ1Y3RTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLmZp
ZWxkU2l6ZSk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlRmllbGRUeXBlKCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQudHlwZS52aXNpdChuZXcgU3Vic3RpdHV0aW9u
KHR5cGUudHlwZVBhcmFtZXRlcnMsIHR5cGVQYXJhbWV0ZXJzKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVR5cGVSZWYoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBUeXBlUmVmLmluc3RhbnRpYXRlKHR5cGUs
IGNyZWF0ZVR5cGVBcmd1bWVudHMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGxldCBpc0Nhc3QgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCB0eXBlUGFyYW1l
dGVyczsKKyAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jOworCisgICAgICAgICAgICAvLyBUaGUg
Z2V0dGVyOiBvcGVyYXRvci5maWVsZAorICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBjcmVh
dGVUeXBlUGFyYW1ldGVycygpOworICAgICAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVG
dW5jKAorICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9yLiIgKyBmaWVsZC5u
YW1lLCBjcmVhdGVGaWVsZFR5cGUoKSwgdHlwZVBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAg
W25ldyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgY3JlYXRlVHlwZVJlZigpKV0s
IGlzQ2FzdCk7CisgICAgICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5j
LCAoW2Jhc2VdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4geworICAgICAgICAg
ICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1ZmZlcihmaWVsZFNpemUpLCAwKTsK
KyAgICAgICAgICAgICAgICByZXN1bHQuY29weUZyb20oYmFzZS5wbHVzKG9mZnNldCksIGZpZWxk
U2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQorICAgICAgICAgICAgdHlwZVBh
cmFtZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOworICAgICAgICAgICAgbmF0aXZlRnVu
YyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9wZXJh
dG9yLiIgKyBmaWVsZC5uYW1lICsgIj0iLCBjcmVhdGVUeXBlUmVmKCksIHR5cGVQYXJhbWV0ZXJz
LAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgbmV3IEZ1bmNQYXJhbWV0
ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVUeXBlUmVmKCkpLAorICAgICAgICAgICAgICAg
ICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0ZUZpZWxkVHlw
ZSgpKQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgaXNDYXN0KTsKKyAgICAg
ICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZSwgdmFsdWVd
LCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4geworICAgICAgICAgICAgICAgIGxl
dCByZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1ZmZlcihzdHJ1Y3RTaXplKSwgMCk7CisgICAgICAg
ICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UsIHN0cnVjdFNpemUpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5wbHVzKG9mZnNldCkuY29weUZyb20odmFsdWUsIGZpZWxkU2l6ZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
cHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRo
ZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisgICAgICAgICAgICBmdW5jdGlvbiBzZXR1cEFuZGVy
KGFkZHJlc3NTcGFjZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0eXBlUGFyYW1l
dGVycyA9IGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCk7CisgICAgICAgICAgICAgICAgbmF0aXZlRnVu
YyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJv
cGVyYXRvciYuIiArIGZpZWxkLm5hbWUsIG5ldyBQdHJUeXBlKGZpZWxkLm9yaWdpbiwgYWRkcmVz
c1NwYWNlLCBjcmVhdGVGaWVsZFR5cGUoKSksCisgICAgICAgICAgICAgICAgICAgIHR5cGVQYXJh
bWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICBu
ZXcgRnVuY1BhcmFtZXRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5vcmln
aW4sIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFB0clR5cGUoZmllbGQu
b3JpZ2luLCBhZGRyZXNzU3BhY2UsIGNyZWF0ZVR5cGVSZWYoKSkpCisgICAgICAgICAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAgICAgICAgIGlzQ2FzdCk7CisgICAgICAgICAgICAgICAgc2V0
dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNlXSwgb2Zmc2V0LCBzdHJ1Y3RT
aXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGJhc2UubG9h
ZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghYmFzZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywg
Ik51bGwgZGVyZWZlcmVuY2UiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVQdHIuYm94
KGJhc2UucGx1cyhvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc2V0dXBBbmRlcigidGhyZWFkIik7CisgICAgICAgICAgICBpZiAodHlwZS5p
bnN0YW50aWF0ZSgpLmlzUHJpbWl0aXZlKSB7CisgICAgICAgICAgICAgICAgc2V0dXBBbmRlcigi
dGhyZWFkZ3JvdXAiKTsKKyAgICAgICAgICAgICAgICBzZXR1cEFuZGVyKCJkZXZpY2UiKTsKKyAg
ICAgICAgICAgICAgICBzZXR1cEFuZGVyKCJjb25zdGFudCIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVz
dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3Qu
aHRtbAkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02LDEzICs2LDE0IEBACiA8c2NyaXB0IHNyYz0i
UmVmZXJlbmNlVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmFsdWUuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IkV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
IlZpc2l0b3JCYXNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXdyaXRlci5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmlzaXRvci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
Q3JlYXRlTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ3JlYXRlTGl0ZXJhbFR5
cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5q
cyI+PC9zY3JpcHQ+CiAKIDxzY3JpcHQgc3JjPSJBZGRyZXNzU3BhY2UuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9IkFub255bW91c1ZhcmlhYmxlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJBcnJheVJlZlR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFycmF5VHlwZS5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQXNzaWdubWVudC5qcyI+PC9zY3JpcHQ+CkBAIC0yMCw3
ICsyMSw2IEBACiA8c2NyaXB0IHNyYz0iQmxvY2suanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IkJvb2xMaXRlcmFsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJCcmVhay5qcyI+PC9zY3Jp
cHQ+Ci08c2NyaXB0IHNyYz0iQ2FsbEFzc2lnbm1lbnQuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IkNhbGxFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDYWxsRnVuY3Rp
b24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNoZWNrLmpzIj48L3NjcmlwdD4KQEAgLTQ2
LDYgKzQ2LDcgQEAKIDxzY3JpcHQgc3JjPSJFdmFsdWF0b3IuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9IkV4cHJlc3Npb25GaW5kZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZpZWxk
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJGaW5kSGlnaFpvbWJpZXMuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IkZsYXR0ZW5Qcm90b2NvbEV4dGVuZHMuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IkZvckxvb3AuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZ1bmMuanMiPjwv
c2NyaXB0PgpAQCAtNTMsNyArNTQsMTAgQEAKIDxzY3JpcHQgc3JjPSJGdW5jSW5zdGFudGlhdG9y
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGdW5jUGFyYW1ldGVyLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJGdW5jdGlvbkxpa2VCbG9jay5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iSGlnaFpvbWJpZUZpbmRlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iSWRlbnRpdHlF
eHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJZlN0YXRlbWVudC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iSW5kZXhFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJJbmZlclR5cGVzRm9yQ2FsbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW5s
aW5lLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJbmxpbmVyLmpzIj48L3NjcmlwdD4KQEAg
LTc1LDIwICs3OSwyNCBAQAogPHNjcmlwdCBzcmM9Ik5hdGl2ZUZ1bmNJbnN0YW5jZS5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iTmF0aXZlVHlwZUluc3RhbmNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJOb3JtYWxV
c2VQcm9wZXJ0eVJlc29sdmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJOdWxsTGl0ZXJh
bC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTnVsbFR5cGUuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9Ik92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9IlBhcnNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcmVwYXJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJQcm9wZXJ0eVJlc29sdmVyLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJQcm9ncmFtLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm90b2NvbC5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvdG9jb2xEZWNsLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJQcm90b2NvbEZ1bmNEZWNsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm90
b2NvbFJlZi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHRyVHlwZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iUmVjdXJzaW9uQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
UmVzb2x2ZU5hbWVzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXNvbHZlT3ZlcmxvYWRJ
bXBsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJSZXNvbHZlUHJvcGVydGllcy5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVzb2x2ZVR5cGVEZWZzLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJSZXR1cm4uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJldHVybkNoZWNrZXIu
anMiPjwvc2NyaXB0PgpAQCAtOTcsMTIgKzEwNSwxNCBAQAogPHNjcmlwdCBzcmM9IlN0cnVjdExh
eW91dEJ1aWxkZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlN0cnVjdFR5cGUuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IlN1YnN0aXR1dGlvbi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0iU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlN5
bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5cGVE
ZWYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5cGVEZWZSZXNvbHZlci5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iVHlwZU9yVmFyaWFibGVSZWYuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9IlR5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
VHlwZVJlZi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZVZhcmlhYmxlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJUeXBlVmFyaWFibGVUcmFja2VyLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJUeXBlZFZhbHVlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJVaW50TGl0
ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVWludExpdGVyYWxUeXBlLmpzIj48L3Nj
cmlwdD4KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBmdW5jdGlvbiBjaGVja051bWJlcihwcm9ncmFtLCBy
ZXN1bHQsIGV4CiAgICAgaWYgKCFyZXN1bHQudHlwZS5pc051bWJlcikKICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJXcm9uZyByZXN1bHQgdHlwZTsgcmVzdWx0OiAiICsgcmVzdWx0KTsKICAgICBp
ZiAocmVzdWx0LnZhbHVlICE9IGV4cGVjdGVkKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldy
b25nIHJlc3VsdDogIiArIHJlc3VsdCArICIgKGV4cGVjdGVkICIgKyBleHBlY3RlZCArICIpIik7
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0OiAiICsgcmVzdWx0LnZhbHVl
ICsgIiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIikiKTsKIH0KIAogZnVuY3Rpb24gbWFrZVVp
bnQocHJvZ3JhbSwgdmFsdWUpCkBAIC00MjIsMTAgKzQyMiwxMCBAQCBmdW5jdGlvbiBURVNUX2Rl
dmljZUFycmF5U3RvcmVJbnRMaXRlcmFsCiBmdW5jdGlvbiBURVNUX3NpbXBsZVByb3RvY29sKCkK
IHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIHByb3RvY29sIEFkZGFibGUg
ewotICAgICAgICAgICAgQWRkYWJsZSBvcGVyYXRvcisoQWRkYWJsZSwgQWRkYWJsZSk7CisgICAg
ICAgIHByb3RvY29sIE15QWRkYWJsZSB7CisgICAgICAgICAgICBNeUFkZGFibGUgb3BlcmF0b3Ir
KE15QWRkYWJsZSwgTXlBZGRhYmxlKTsKICAgICAgICAgfQotICAgICAgICBUIGFkZDxUOkFkZGFi
bGU+KFQgYSwgVCBiKQorICAgICAgICBUIGFkZDxUOk15QWRkYWJsZT4oVCBhLCBUIGIpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBhICsgYjsKICAgICAgICAgfQpAQCAtNzQzLDcgKzc0
Myw3IEBAIGZ1bmN0aW9uIFRFU1Rfc3RvcmVOdWxsQXJyYXlSZWYoKQogICAgICAgICAoKSA9PiBk
b1ByZXAoYAogICAgICAgICAgICAgdm9pZCBmb28oKSB7IG51bGxbMHVdID0gNDI7IH0KICAgICAg
ICAgYCksCi0gICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3Nh
Z2UuaW5kZXhPZigiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIikgIT0gLTEpOworICAg
ICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2Yo
IkxIUyBvZiBhc3NpZ25tZW50IGlzIG5vdCBhbiBMVmFsdWUiKSAhPSAtMSk7CiB9CiAKIGZ1bmN0
aW9uIFRFU1RfcmV0dXJuTnVsbEFycmF5UmVmKCkKQEAgLTg1MSwxNCArODUxLDE0IEBAIGZ1bmN0
aW9uIFRFU1RfYmFkSW50TGl0ZXJhbEZvckludCgpCiB7CiAgICAgY2hlY2tGYWlsKAogICAgICAg
ICAoKSA9PiBkb1ByZXAoInZvaWQgZm9vKCkgeyBpbnQgeCA9IDMwMDAwMDAwMDA7IH0iKSwKLSAg
ICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKKyAgICAgICAgKGUpID0+IGUg
aW5zdGFuY2VvZiBXU3ludGF4RXJyb3IpOwogfQogCiBmdW5jdGlvbiBURVNUX2JhZEludExpdGVy
YWxGb3JVaW50KCkKIHsKICAgICBjaGVja0ZhaWwoCiAgICAgICAgICgpID0+IGRvUHJlcCgidm9p
ZCBmb28oKSB7IHVpbnQgeCA9IDUwMDAwMDAwMDA7IH0iKSwKLSAgICAgICAgKGUpID0+IGUgaW5z
dGFuY2VvZiBXVHlwZUVycm9yKTsKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXU3ludGF4
RXJyb3IpOwogfQogCiBmdW5jdGlvbiBURVNUX2JhZEludExpdGVyYWxGb3JEb3VibGUoKQpAQCAt
MTQ2NywxMCArMTQ2NywxMCBAQCBmdW5jdGlvbiBURVNUX2ludExpdGVyYWxHZW5lcmljKCkKIGZ1
bmN0aW9uIFRFU1RfaW50TGl0ZXJhbEdlbmVyaWNXaXRoUHJvdG9jb2xzKCkKIHsKICAgICBsZXQg
cHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIHByb3RvY29sIENvbnZlcnRpYmxlVG9JbnQgewot
ICAgICAgICAgICAgb3BlcmF0b3IgaW50KENvbnZlcnRpYmxlVG9JbnQpOworICAgICAgICBwcm90
b2NvbCBNeUNvbnZlcnRpYmxlVG9JbnQgeworICAgICAgICAgICAgb3BlcmF0b3IgaW50KE15Q29u
dmVydGlibGVUb0ludCk7CiAgICAgICAgIH0KLSAgICAgICAgaW50IGZvbzxUOkNvbnZlcnRpYmxl
VG9JbnQ+KFQgeCkgeyByZXR1cm4gaW50KHgpOyB9CisgICAgICAgIGludCBmb288VDpNeUNvbnZl
cnRpYmxlVG9JbnQ+KFQgeCkgeyByZXR1cm4gaW50KHgpOyB9CiAgICAgICAgIGludCBiYXIoKSB7
IHJldHVybiBmb28oNDIpOyB9CiAgICAgYCk7CiAgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSwgW10pLCA0Mik7CkBAIC0xNDg4LDEwICsxNDg4LDEw
IEBAIGZ1bmN0aW9uIFRFU1RfdWludExpdGVyYWxHZW5lcmljKCkKIGZ1bmN0aW9uIFRFU1RfdWlu
dExpdGVyYWxHZW5lcmljV2l0aFByb3RvY29scygpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1By
ZXAoYAotICAgICAgICBwcm90b2NvbCBDb252ZXJ0aWJsZVRvVWludCB7Ci0gICAgICAgICAgICBv
cGVyYXRvciB1aW50KENvbnZlcnRpYmxlVG9VaW50KTsKKyAgICAgICAgcHJvdG9jb2wgTXlDb252
ZXJ0aWJsZVRvVWludCB7CisgICAgICAgICAgICBvcGVyYXRvciB1aW50KE15Q29udmVydGlibGVU
b1VpbnQpOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vPFQ6Q29udmVydGlibGVUb1VpbnQ+
KFQgeCkgeyByZXR1cm4gdWludCh4KTsgfQorICAgICAgICB1aW50IGZvbzxUOk15Q29udmVydGli
bGVUb1VpbnQ+KFQgeCkgeyByZXR1cm4gdWludCh4KTsgfQogICAgICAgICB1aW50IGJhcigpIHsg
cmV0dXJuIGZvbyg0MnUpOyB9CiAgICAgYCk7CiAgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10sIFtdKSwgNDIpOwpAQCAtMjU2Niw2ICsyNTY2LDMy
MiBAQCBmdW5jdGlvbiBURVNUX21ha2VBcnJheVJlZkZyb21BcnJheVJlZigpCiAgICAgICAgIChl
KSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7CiB9CiAKK2Z1bmN0aW9uIFRFU1Rfc2ltcGxl
TGVuZ3RoKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHVpbnQgZm9v
KCkKKyAgICAgICAgeworICAgICAgICAgICAgZG91YmxlWzc1NF0gYXJyYXk7CisgICAgICAgICAg
ICByZXR1cm4gKEBhcnJheSkubGVuZ3RoOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tV
aW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNzU0KTsK
K30KKworZnVuY3Rpb24gVEVTVF9hc3NpZ25MZW5ndGgoKQoreworICAgIGNoZWNrRmFpbCgKKyAg
ICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgZm9vKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBkb3VibGVbNzU0XSBhcnJheTsKKyAgICAgICAgICAgICAgICAo
QGFycmF5KS5sZW5ndGggPSA0MjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAg
IChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiTEhT
IG9mIGFzc2lnbm1lbnQgaXMgbm90IGFuIExWYWx1ZSIpICE9IC0xKTsKK30KKworZnVuY3Rpb24g
VEVTVF9hc3NpZ25MZW5ndGhIZWxwZXIoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkg
PT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgYmFyKHRocmVhZCBkb3VibGVbXSBhcnJheSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhcnJheS5sZW5ndGggPSA0MjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQgZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBkb3VibGVbNzU0XSBhcnJheTsKKyAgICAgICAgICAgICAgICBiYXIoQGFycmF5KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2Yg
V1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiQ2Fubm90IGVtaXQgc2V0IGJlY2F1c2U6
IERpZCBub3QgZmluZCBhbnkgZnVuY3Rpb25zIG5hbWVkIG9wZXJhdG9yLmxlbmd0aD0iKSAhPSAt
MSk7Cit9CisKK2Z1bmN0aW9uIFRFU1Rfc2ltcGxlR2V0dGVyKCkKK3sKKyAgICBsZXQgcHJvZ3Jh
bSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7Cisg
ICAgICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9yLnkoRm9vIGZvbykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGZvby54OworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAg
ICAgICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgZm9vLnggPSA3ODA0Owor
ICAgICAgICAgICAgcmV0dXJuIGZvby55OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJ
bnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLCA3ODA0KTsK
K30KKworZnVuY3Rpb24gVEVTVF9zaW1wbGVTZXR0ZXIoKQoreworICAgIGxldCBwcm9ncmFtID0g
ZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAg
ICAgfQorICAgICAgICBpbnQgb3BlcmF0b3IueShGb28gZm9vKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZm9vLng7CisgICAgICAgIH0KKyAgICAgICAgRm9vIG9wZXJhdG9yLnk9KEZv
byBmb28sIGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9vLnggPSB2YWx1ZTsK
KyAgICAgICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICBmb28ueSA9IDc4MDQ7
CisgICAgICAgICAgICByZXR1cm4gZm9vLng7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDc4MDQp
OworfQorCitmdW5jdGlvbiBURVNUX2dlbmVyaWNBY2Nlc3NvcnMoKQoreworICAgIGxldCBwcm9n
cmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZvbzxUPiB7CisgICAgICAgICAgICBUIHg7
CisgICAgICAgICAgICBUWzNdIHk7CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJhcjxUPiB7
CisgICAgICAgICAgICBUIHg7CisgICAgICAgICAgICBUIHk7CisgICAgICAgIH0KKyAgICAgICAg
QmFyPFQ+IG9wZXJhdG9yLno8VD4oRm9vPFQ+IGZvbykKKyAgICAgICAgeworICAgICAgICAgICAg
QmFyPFQ+IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC54ID0gZm9vLng7CisgICAgICAgICAg
ICByZXN1bHQueSA9IGZvby55WzFdOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgICAgICBGb288VD4gb3BlcmF0b3Iuej08VD4oRm9vPFQ+IGZvbywgQmFyPFQ+IGJh
cikKKyAgICAgICAgeworICAgICAgICAgICAgZm9vLnggPSBiYXIueDsKKyAgICAgICAgICAgIGZv
by55WzFdID0gYmFyLnk7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAg
ICAgIFQgb3BlcmF0b3Iuc3VtPFQ6QWRkYWJsZT4oRm9vPFQ+IGZvbykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGZvby54ICsgZm9vLnlbMF0gKyBmb28ueVsxXSArIGZvby55WzJdOwor
ICAgICAgICB9CisgICAgICAgIFQgb3BlcmF0b3Iuc3VtPFQ6QWRkYWJsZT4oQmFyPFQ+IGJhcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhci54ICsgYmFyLnk7CisgICAgICAgIH0K
KyAgICAgICAgb3BlcmF0b3I8VD4gQmFyPFQ+KFQgeCwgVCB5KQorICAgICAgICB7CisgICAgICAg
ICAgICBCYXI8VD4gcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LnggPSB4OworICAgICAgICAg
ICAgcmVzdWx0LnkgPSB5OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgICAgICB2b2lkIHNldHVwKHRocmVhZCBGb288aW50Pl4gZm9vKQorICAgICAgICB7CisgICAg
ICAgICAgICBmb28tPnggPSAxOworICAgICAgICAgICAgZm9vLT55WzBdID0gMjsKKyAgICAgICAg
ICAgIGZvby0+eVsxXSA9IDM7CisgICAgICAgICAgICBmb28tPnlbMl0gPSA0OworICAgICAgICB9
CisgICAgICAgIGludCB0ZXN0U3VwZXJCYXNpYygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZv
bzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIHNldHVwKCZmb28pOworICAgICAgICAgICAgcmV0dXJu
IGZvby5zdW07CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RaU2V0dGVyRGlkU2V0WSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIGZvby56ID0g
QmFyPGludD4oNTMsIDkzMik7CisgICAgICAgICAgICByZXR1cm4gZm9vLnlbMV07CisgICAgICAg
IH0KKyAgICAgICAgaW50IHRlc3RaU2V0dGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9v
PGludD4gZm9vOworICAgICAgICAgICAgZm9vLnogPSBCYXI8aW50Pig1MywgOTMyKTsKKyAgICAg
ICAgICAgIHJldHVybiBmb28uc3VtOworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0WkdldHRl
cigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIC8v
IFRoaXMgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IGNhbGwgc2V0dXAoKSBqdXN0IHNvIHdlIHRlc3Qg
dGhpcyBzeW50YXguCisgICAgICAgICAgICBmb28ueCA9IDE7CisgICAgICAgICAgICBmb28ueVsw
XSA9IDI7CisgICAgICAgICAgICBmb28ueVsxXSA9IDM7CisgICAgICAgICAgICBmb28ueVsyXSA9
IDQ7CisgICAgICAgICAgICByZXR1cm4gZm9vLnouc3VtOworICAgICAgICB9CisgICAgICAgIGlu
dCB0ZXN0TFZhbHVlRW11bGF0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vPGludD4g
Zm9vOworICAgICAgICAgICAgc2V0dXAoJmZvbyk7CisgICAgICAgICAgICBmb28uei55ICo9IDU7
CisgICAgICAgICAgICByZXR1cm4gZm9vLnN1bTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNo
ZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFN1cGVyQmFzaWMiLCBb
XSwgW10pLCAxICsgMiArIDMgKyA0KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgInRlc3RaU2V0dGVyRGlkU2V0WSIsIFtdLCBbXSksIDkzMik7CisgICAgY2hl
Y2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0WlNldHRlciIsIFtdLCBb
XSksIDUzICsgOTMyKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgInRlc3RaR2V0dGVyIiwgW10sIFtdKSwgMSArIDMpOworICAgIGNoZWNrSW50KHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdExWYWx1ZUVtdWxhdGlvbiIsIFtdLCBbXSksIDEg
KyAyICsgMyAqIDUgKyA0KTsKK30KKworZnVuY3Rpb24gVEVTVF9iaXRTdWJzY3JpcHRBY2Nlc3Nv
cigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBwcm90b2NvbCBNeUJp
dG1hc2thYmxlIDogRXF1YXRhYmxlIHsKKyAgICAgICAgICAgIE15Qml0bWFza2FibGUgb3BlcmF0
b3ImKE15Qml0bWFza2FibGUsIE15Qml0bWFza2FibGUpOworICAgICAgICAgICAgTXlCaXRtYXNr
YWJsZSBvcGVyYXRvcnwoTXlCaXRtYXNrYWJsZSwgTXlCaXRtYXNrYWJsZSk7CisgICAgICAgICAg
ICBNeUJpdG1hc2thYmxlIG9wZXJhdG9yfihNeUJpdG1hc2thYmxlKTsKKyAgICAgICAgICAgIE15
Qml0bWFza2FibGUgb3BlcmF0b3I8PChNeUJpdG1hc2thYmxlLCB1aW50KTsKKyAgICAgICAgICAg
IE15Qml0bWFza2FibGUgb3BlcmF0b3I+PihNeUJpdG1hc2thYmxlLCB1aW50KTsKKyAgICAgICAg
ICAgIG9wZXJhdG9yIE15Qml0bWFza2FibGUoaW50KTsKKyAgICAgICAgfQorICAgICAgICBUIG1h
c2tGb3JCaXRJbmRleDxUOk15Qml0bWFza2FibGU+KHVpbnQgaW5kZXgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBUKDEpIDw8IGluZGV4OworICAgICAgICB9CisgICAgICAgIGJvb2wg
b3BlcmF0b3JbXTxUOk15Qml0bWFza2FibGU+KFQgdmFsdWUsIHVpbnQgaW5kZXgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBib29sKHZhbHVlICYgbWFza0ZvckJpdEluZGV4PFQ+KGlu
ZGV4KSk7CisgICAgICAgIH0KKyAgICAgICAgVCBvcGVyYXRvcltdPTxUOk15Qml0bWFza2FibGU+
KFQgdmFsdWUsIHVpbnQgaW5kZXgsIGJvb2wgYml0KQorICAgICAgICB7CisgICAgICAgICAgICBU
IG1hc2sgPSBtYXNrRm9yQml0SW5kZXg8VD4oaW5kZXgpOworICAgICAgICAgICAgaWYgKGJpdCkK
KyAgICAgICAgICAgICAgICB2YWx1ZSB8PSBtYXNrOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHZhbHVlICY9IH5tYXNrOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
ICAgICB9CisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoKGludCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIDMyOworICAgICAgICB9CisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVu
Z3RoKHVpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAzMjsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgdGVzdEludFNldEJpdDMoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQg
Zm9vOworICAgICAgICAgICAgZm9vWzNdID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmb287
CisgICAgICAgIH0KKyAgICAgICAgYm9vbCB0ZXN0SW50U2V0R2V0Qml0NSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGludCBmb287CisgICAgICAgICAgICBmb29bNV0gPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIGZvb1s1XTsKKyAgICAgICAgfQorICAgICAgICBib29sIHRlc3RJbnRHZXRC
aXQxKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGZvbzsKKyAgICAgICAgICAgIHJldHVy
biBmb29bMV07CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RVaW50U3VtQml0cygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBmb28gPSA0MjsKKyAgICAgICAgICAgIGludCByZXN1bHQ7
CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBmb28ubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZm9vW2ldKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQrKzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAg
ICAgICAgaW50IHRlc3RVaW50U3dhcEJpdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQg
Zm9vID0gNDI7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBmb28ubGVuZ3RoIC8g
MjsgKytpKSB7CisgICAgICAgICAgICAgICAgYm9vbCB0bXAgPSBmb29baV07CisgICAgICAgICAg
ICAgICAgZm9vW2ldID0gZm9vW2Zvby5sZW5ndGggLSBpIC0gMV07CisgICAgICAgICAgICAgICAg
Zm9vW2Zvby5sZW5ndGggLSBpIC0gMV0gPSB0bXA7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAg
ICAgdWludCBmOworICAgICAgICAgICAgdWludCBnOworICAgICAgICB9CisgICAgICAgIG9wZXJh
dG9yIEZvbyh1aW50IGYsIHVpbnQgZykKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIHJlc3Vs
dDsKKyAgICAgICAgICAgIHJlc3VsdC5mID0gZjsKKyAgICAgICAgICAgIHJlc3VsdC5nID0gZzsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9wZXJh
dG9yLmgoRm9vIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludCgoZm9vLmYg
JiAweGZmZmYpIHwgKChmb28uZyAmIDB4ZmZmZikgPDwgMTYpKTsKKyAgICAgICAgfQorICAgICAg
ICBGb28gb3BlcmF0b3IuaD0oRm9vIGZvbywgaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb28uZiAmPSB+MHhmZmZmdTsKKyAgICAgICAgICAgIGZvby5mIHw9IHVpbnQodmFsdWUp
ICYgMHhmZmZmOworICAgICAgICAgICAgZm9vLmcgJj0gfjB4ZmZmZnU7CisgICAgICAgICAgICBm
b28uZyB8PSAodWludCh2YWx1ZSkgPj4gMTYpICYgMHhmZmZmOworICAgICAgICAgICAgcmV0dXJu
IGZvbzsKKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdExWYWx1ZUVtdWxhdGlvbigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICBmb28uZiA9IDQyOworICAg
ICAgICAgICAgZm9vLmcgPSAzNzsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IGZv
by5oLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGZvby5oW2ldIF49IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gaW50KGZvby5mICsgZm9vLmcpOworICAgICAgICB9CisgICAgICAgIHN0
cnVjdCBCYXIgeworICAgICAgICAgICAgRm9vIGE7CisgICAgICAgICAgICBGb28gYjsKKyAgICAg
ICAgfQorICAgICAgICBGb28gb3BlcmF0b3IuYyhCYXIgYmFyKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gRm9vKHVpbnQoYmFyLmEuaCksIHVpbnQoYmFyLmIuaCkpOworICAgICAgICB9
CisgICAgICAgIEJhciBvcGVyYXRvci5jPShCYXIgYmFyLCBGb28gZm9vKQorICAgICAgICB7Cisg
ICAgICAgICAgICBiYXIuYS5oID0gaW50KGZvby5mKTsKKyAgICAgICAgICAgIGJhci5iLmggPSBp
bnQoZm9vLmcpOworICAgICAgICAgICAgcmV0dXJuIGJhcjsKKyAgICAgICAgfQorICAgICAgICBp
bnQgdGVzdENyYXp5TFZhbHVlRW11bGF0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgQmFy
IGJhcjsKKyAgICAgICAgICAgIGJhci5hLmYgPSAxOworICAgICAgICAgICAgYmFyLmEuZyA9IDI7
CisgICAgICAgICAgICBiYXIuYi5mID0gMzsKKyAgICAgICAgICAgIGJhci5iLmcgPSA0OworICAg
ICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYmFyLmMuaC5sZW5ndGg7IGkgKz0gMikKKyAg
ICAgICAgICAgICAgICBiYXIuYy5oW2ldIF49IHRydWU7CisgICAgICAgICAgICByZXR1cm4gaW50
KGJhci5hLmYgKyBiYXIuYS5nICsgYmFyLmIuZiArIGJhci5iLmcpOworICAgICAgICB9CisgICAg
YCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0SW50
U2V0Qml0MyIsIFtdLCBbXSksIDgpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgInRlc3RJbnRTZXRHZXRCaXQ1IiwgW10sIFtdKSwgdHJ1ZSk7CisgICAgY2hl
Y2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdEludEdldEJpdDEiLCBb
XSwgW10pLCBmYWxzZSk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJ0ZXN0VWludFN1bUJpdHMiLCBbXSwgW10pLCAzKTsKKyAgICBjaGVja0ludChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RVaW50U3dhcEJpdHMiLCBbXSwgW10pLCAxNDA5
Mjg2MTQ0KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRl
c3RMVmFsdWVFbXVsYXRpb24iLCBbXSwgW10pLCAxMzA5OTEpOworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdENyYXp5TFZhbHVlRW11bGF0aW9uIiwgW10s
IFtdKSwgNDM2OTYpOworfQorCiBsZXQgZmlsdGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcg
YnkgZGVmYXVsdAogaWYgKHRoaXNbImFyZ3VtZW50cyJdKSB7CiAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1R5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVHlwZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQCBjbGFzcyBU
eXBlIGV4dGVuZHMgTm9kZSB7CiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBUeXBlOyB9CiAgICAg
Z2V0IGlzUHRyKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNBcnJheVJlZigpIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgZ2V0IGlzUmVmKCkgeyByZXR1cm4gdGhpcy5pc1B0ciB8fCB0aGlz
LmlzQXJyYXlSZWY7IH0KICAgICBnZXQgaXNOdW1iZXIoKSB7IHJldHVybiBmYWxzZTsgfQogICAg
IGdldCBpc0ludCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzRmxvYXQoKSB7IHJldHVy
biBmYWxzZTsgfQpAQCAtNDEsNSArNDIsMTkgQEAgY2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewog
ICAgIH0KICAgICAKICAgICBnZXQgaW5zdGFudGlhdGVkVHlwZSgpIHsgcmV0dXJuIHRoaXMudmlz
aXQobmV3IEluc3RhbnRpYXRlSW1tZWRpYXRlcygpKTsgfQorICAgIAorICAgIC8vIEhhdmUgdG8g
Y2FsbCB0aGVzZSBvbiB0aGUgdW5pZnlOb2RlLgorICAgIGFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQo
b3JpZ2luLCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgTWFrZVB0ckV4cHJlc3Np
b24ob3JpZ2luLCB2YWx1ZSk7CisgICAgfQorICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2Fk
KG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUHRyVHlwZShvcmlnaW4sICJ0aHJl
YWQiLCB0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChvcmlnaW4p
CisgICAgeworICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5n
LCAiQnktcG9pbnRlciBvdmVybG9hZCByZXR1cm5lZCBub24tcG9pbnRlciB0eXBlOiAiICsgdGhp
cyk7CisgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBl
UGFyYW1ldGVyUmV3cml0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFR5cGVQYXJhbWV0ZXJSZXdyaXRl
ciB7CisgICAgdmlzaXRDb25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUpCisgICAgeworICAgICAg
ICByZXR1cm4gbmV3IENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIobm9kZS5vcmlnaW4sIG5vZGUubmFt
ZSwgbm9kZS50eXBlLnZpc2l0KG5ldyBSZXdyaXRlcigpKSk7CisgICAgfQorICAgIAorICAgIHZp
c2l0VHlwZVZhcmlhYmxlKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFR5cGVWYXJp
YWJsZShub2RlLm9yaWdpbiwgbm9kZS5uYW1lLCBub2RlLnByb3RvY29sKTsKKyAgICB9Cit9CisK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVWYXJpYWJsZVRyYWNrZXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlh
YmxlVHJhY2tlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3Ry
aWN0IjsKKworY2xhc3MgVHlwZVZhcmlhYmxlVHJhY2tlciBleHRlbmRzIFZpc2l0b3IgeworICAg
IGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuX3Nl
dCA9IG5ldyBTZXQoKTsKKyAgICB9CisgICAgCisgICAgZ2V0IHNldCgpIHsgcmV0dXJuIHRoaXMu
X3NldDsgfQorICAgIAorICAgIF9jb25zaWRlcih0aGluZykKKyAgICB7CisgICAgICAgIGlmICh0
aGluZy5pc1VuaWZpYWJsZSkKKyAgICAgICAgICAgIHRoaXMuX3NldC5hZGQodGhpbmcpOworICAg
IH0KKyAgICAKKyAgICB2aXNpdFR5cGVSZWYobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2Nv
bnNpZGVyKG5vZGUudHlwZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0VmFyaWFibGVSZWYobm9k
ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2NvbnNpZGVyKHRoaXMudmFyaWFibGUpOworICAgIH0K
K30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUuanMJKHJldmlzaW9u
IDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhbHVlLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw1ICsyOCwxNCBAQCBjbGFzcyBWYWx1ZSBleHRlbmRzIE5vZGUgewog
ICAgIGdldCBraW5kKCkgeyByZXR1cm4gVmFsdWU7IH0KICAgICBnZXQgaXNDb25zdGV4cHIoKSB7
IHJldHVybiBmYWxzZTsgfQogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgCisgICAgYmVjb21lKG90aGVyVmFsdWUpCisgICAgeworICAgICAgICAvLyBOT1RFOiBNYWtl
IHN1cmUgdGhhdCBJZGVudGl0eUV4cHJlc3Npb24gaW1wbGVtZW50cyB1bmlmeU5vZGUgYW5kIGFs
bCB0aGF0CisgICAgICAgIGxldCBvcmlnaW4gPSB0aGlzLm9yaWdpbjsKKyAgICAgICAgdGhpcy5f
X3Byb3RvX18gPSBJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlOworICAgICAgICB0aGlzLl9v
cmlnaW4gPSBvcmlnaW47CisgICAgICAgIHRoaXMuX3RhcmdldCA9IG90aGVyVmFsdWU7CisgICAg
fQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZVJlZi5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZVJl
Zi5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VmFyaWFibGVSZWYuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSw5IEBAIGNsYXNzIFZh
cmlhYmxlUmVmIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgICAgCiAgICAgZ2V0IG5hbWUoKSB7IHJl
dHVybiB0aGlzLl9uYW1lOyB9CiAgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdGhpcy52
YXJpYWJsZS5pc0NvbnN0ZXhwcjsgfQotICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlz
LnZhcmlhYmxlLnVuaWZ5Tm9kZTsgfQorICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlz
LnZhcmlhYmxlLnVuaWZ5Tm9kZTsgfSAvLyBUaGlzIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB0aGlz
IGlzIGEgY29uc3RleHByLgogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KICAg
ICBnZXQgYWRkcmVzc1NwYWNlKCkgeyByZXR1cm4gInRocmVhZCI7IH0KLSAgICBnZXQgdW5pZnlO
b2RlKCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZTsgfQogICAgIAogICAgIHRvU3RyaW5nKCkKICAg
ICB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJKHJldmlz
aW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDEyICsyNCw3IEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAot
Y2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKLSAgICBjb25zdHJ1Y3RvcigpCi0g
ICAgewotICAgICAgICBzdXBlcigpOwotICAgIH0KLSAgICAKK2NsYXNzIFZpc2l0b3IgewogICAg
IHZpc2l0UHJvZ3JhbShub2RlKQogICAgIHsKICAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9m
IG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKQpAQCAtNjgsOCArNjMsOCBAQCBjbGFzcyBWaXNpdG9y
IGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0TmF0aXZlRnVuY0luc3RhbmNl
KG5vZGUpCiAgICAgewotICAgICAgICBub2RlLmZ1bmMudmlzaXQodGhpcyk7CiAgICAgICAgIHRo
aXMudmlzaXRGdW5jKG5vZGUpOworICAgICAgICBub2RlLmZ1bmMudmlzaXRJbXBsZW1lbnRhdGlv
bkRhdGEobm9kZS5pbXBsZW1lbnRhdGlvbkRhdGEsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2
aXNpdEJsb2NrKG5vZGUpCkBAIC0xMDAsOCArOTUsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMg
VmlzaXRvckJhc2UgewogICAgIHsKICAgICAgICAgZm9yIChsZXQgdHlwZUFyZ3VtZW50IG9mIG5v
ZGUudHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgIHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKTsK
LSAgICAgICAgaWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlz
KTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgIH0KICAgICAKICAg
ICB2aXNpdE5hdGl2ZVR5cGUobm9kZSkKQEAgLTEzNCw4ICsxMjgsNyBAQCBjbGFzcyBWaXNpdG9y
IGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0VHlwZVZhcmlhYmxlKG5vZGUp
CiAgICAgewotICAgICAgICBpZiAobm9kZS5wcm90b2NvbCkKLSAgICAgICAgICAgIG5vZGUucHJv
dG9jb2wudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5wcm90b2NvbCwgdGhp
cyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0Q29uc3RleHByVHlwZVBhcmFtZXRlcihub2RlKQpA
QCAtMTc3LDE0ICsxNzAsMjMgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
ICAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQogICAgIHsKICAgICAgICAgbm9kZS50eXBlLnZp
c2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5pbml0aWFsaXplcikKLSAgICAgICAgICAgIG5v
ZGUuaW5pdGlhbGl6ZXIudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbml0
aWFsaXplciwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0QXNzaWdubWVudChub2RlKQog
ICAgIHsKICAgICAgICAgbm9kZS5saHMudmlzaXQodGhpcyk7CiAgICAgICAgIG5vZGUucmhzLnZp
c2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CisgICAgfQor
ICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAg
ICAgICAgbm9kZS5sVmFsdWUudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUub2xkVmFsdWVWYXIu
dmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUubmV3VmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAg
ICAgIG5vZGUubmV3VmFsdWVFeHAudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUucmVzdWx0RXhw
LnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lv
bihub2RlKQpAQCAtMTkyLDExICsxOTQsMjcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0
b3JCYXNlIHsKICAgICAgICAgbm9kZS5wdHIudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAorICAg
IF9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS5iYXNlVHlwZSwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5j
YWxsRm9yR2V0LCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JH
ZXQsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvckFuZCwgdGhpcyk7Cisg
ICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlRm9yQW5kLCB0aGlzKTsKKyAgICAgICAg
Tm9kZS52aXNpdChub2RlLmNhbGxGb3JTZXQsIHRoaXMpOworICAgIH0KKyAgICAKICAgICB2aXNp
dERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIG5vZGUuc3RydWN0LnZpc2l0KHRo
aXMpOwotICAgICAgICBpZiAobm9kZS5zdHJ1Y3RUeXBlKQotICAgICAgICAgICAgbm9kZS5zdHJ1
Y3RUeXBlLnZpc2l0KHRoaXMpOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24obm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5v
ZGUpCisgICAgeworICAgICAgICBub2RlLmFycmF5LnZpc2l0KHRoaXMpOworICAgICAgICBub2Rl
LmluZGV4LnZpc2l0KHRoaXMpOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24obm9kZSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24o
bm9kZSkKQEAgLTIwNyw4ICsyMjUsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJh
c2UgewogICAgIHZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAg
ICAgbm9kZS5sVmFsdWUudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLm51bUVsZW1lbnRz
KQotICAgICAgICAgICAgbm9kZS5udW1FbGVtZW50cy52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9k
ZS52aXNpdChub2RlLm51bUVsZW1lbnRzLCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRD
b252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24obm9kZSkKQEAgLTIyNCw4ICsyNDEsNyBAQCBj
bGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHsKICAgICAgICAgbm9kZS5j
b25kaXRpb25hbC52aXNpdCh0aGlzKTsKICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwot
ICAgICAgICBpZiAobm9kZS5lbHNlQm9keSkKLSAgICAgICAgICAgIG5vZGUuZWxzZUJvZHkudmlz
aXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5lbHNlQm9keSwgdGhpcyk7CiAgICAg
fQogICAgIAogICAgIHZpc2l0V2hpbGVMb29wKG5vZGUpCkBAIC0yNDIsMTkgKzI1OCwxNSBAQCBj
bGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0Rm9yTG9v
cChub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6YXRpb24pCi0gICAgICAg
ICAgICBub2RlLmluaXRpYWxpemF0aW9uLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5j
b25kaXRpb24pCi0gICAgICAgICAgICBub2RlLmNvbmRpdGlvbi52aXNpdCh0aGlzKTsKLSAgICAg
ICAgaWYgKG5vZGUuaW5jcmVtZW50KQotICAgICAgICAgICAgbm9kZS5pbmNyZW1lbnQudmlzaXQo
dGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbml0aWFsaXphdGlvbiwgdGhpcyk7Cisg
ICAgICAgIE5vZGUudmlzaXQobm9kZS5jb25kaXRpb24sIHRoaXMpOworICAgICAgICBOb2RlLnZp
c2l0KG5vZGUuaW5jcmVtZW50LCB0aGlzKTsKICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMp
OwogICAgIH0KIAogICAgIHZpc2l0UmV0dXJuKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9k
ZS52YWx1ZSkKLSAgICAgICAgICAgIG5vZGUudmFsdWUudmlzaXQodGhpcyk7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcyk7CiAgICAgfQogCiAgICAgdmlzaXRDb250aW51ZShu
b2RlKQpAQCAtMjcyLDggKzI4NCw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFz
ZSB7CiAgICAgCiAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9kZSkKICAgICB7Ci0gICAg
ICAgIGlmIChub2RlLnR5cGUpCi0gICAgICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7Cisg
ICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgbm9kZS5wcmVmZXJy
ZWRUeXBlLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKQEAgLTI4OCw4ICsyOTksNyBAQCBjbGFz
cyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0TnVsbFR5cGUo
bm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLnR5cGUpCi0gICAgICAgICAgICBub2RlLnR5
cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAg
ICB9CiAgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQpAQCAtMjk3LDE2ICszMDcs
MTUgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgZm9yIChs
ZXQgdHlwZUFyZ3VtZW50IG9mIG5vZGUudHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgIHR5cGVB
cmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgZm9yIChsZXQgYXJndW1lbnQgb2Ygbm9kZS5h
cmd1bWVudExpc3QpCi0gICAgICAgICAgICBhcmd1bWVudC52aXNpdCh0aGlzKTsKKyAgICAgICAg
ICAgIE5vZGUudmlzaXQoYXJndW1lbnQsIHRoaXMpOwogICAgICAgICBsZXQgYWN0dWFsVHlwZUFy
Z3VtZW50cyA9IG5vZGUuYWN0dWFsVHlwZUFyZ3VtZW50czsKICAgICAgICAgaWYgKGFjdHVhbFR5
cGVBcmd1bWVudHMpIHsKICAgICAgICAgICAgIGZvciAobGV0IGFyZ3VtZW50IG9mIGFjdHVhbFR5
cGVBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgYXJndW1lbnQudmlzaXQodGhpcyk7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKLSAgICAgICAgICAgIG5vZGUucmV0
dXJuVHlwZS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUucmVzdWx0VHlwZSkKLSAgICAg
ICAgICAgIG5vZGUucmVzdWx0VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChu
b2RlLm5hdGl2ZUZ1bmNJbnN0YW5jZSwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5y
ZXR1cm5UeXBlLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGUsIHRo
aXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdExvZ2ljYWxOb3Qobm9kZSkKQEAgLTMxNiwyMSAr
MzI1LDIzIEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAg
dmlzaXRGdW5jdGlvbkxpa2VCbG9jayhub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUucmV0
dXJuVHlwZSkKLSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsKKyAgICAg
ICAgTm9kZS52aXNpdChub2RlLnJldHVyblR5cGUsIHRoaXMpOwogICAgICAgICBmb3IgKGxldCBh
cmd1bWVudCBvZiBub2RlLmFyZ3VtZW50TGlzdCkKICAgICAgICAgICAgIGFyZ3VtZW50LnZpc2l0
KHRoaXMpOwogICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2Ygbm9kZS5wYXJhbWV0ZXJzKQog
ICAgICAgICAgICAgcGFyYW1ldGVyLnZpc2l0KHRoaXMpOwogICAgICAgICBub2RlLmJvZHkudmlz
aXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLnJlc3VsdFR5cGUpCi0gICAgICAgICAgICBub2Rl
LnJlc3VsdFR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXN1bHRU
eXBlLCB0aGlzKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXRMZXRFeHByZXNzaW9uKG5vZGUpCisg
ICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShub2RlKQogICAgIHsKLSAgICAgICAgbm9kZS5hcmd1
bWVudC52aXNpdCh0aGlzKTsKLSAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOworICAgICAg
ICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0SWRl
bnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnRhcmdldC52aXNpdCh0
aGlzKTsKICAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zp
c2l0b3JCYXNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Zpc2l0b3JCYXNlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9WaXNpdG9yQmFzZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDMyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0
IjsKLQotY2xhc3MgVmlzaXRvckJhc2UgewotICAgIGNvbnN0cnVjdG9yKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX21lbW9UYWJsZSA9IG5ldyBNYXAoKTsKLSAgICB9Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321057</attachid>
            <date>2017-09-17 16:09:37 -0700</date>
            <delta_ts>2017-09-17 16:26:59 -0700</delta_ts>
            <desc>wrote more tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>181413</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjEzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5OCBAQAorMjAxNy0wOS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEZpZ3VyZSBvdXQgaG93IFdTTCB3aWxsIHN1cHBvcnQgZmllbGQgb3ZlcmxvYWRz
IGxpa2UgZmxvYXQ0Lnh6IGFuZCBmcmllbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdTTCBuZWVkcyB0byBzdXBwb3J0IGdldHRlcnMg
YW5kIHNldHRlcnMsIHNvIHRoYXQgd2UgY2FuIGRvIHRoaW5ncyBsaWtlOgorICAgICAgICAKKyAg
ICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAgICB2ZWMuenggPSBmbG9hdDIoMSwgMik7
CisgICAgICAgICAgICAvLyB6ID0gMSwgeCA9IDIKKyAgICAgICAgCisgICAgICAgIFRoZXJlJ3Mg
bm8gd2F5IHRvIGV4cHJlc3MgdGhpcyBmbG9hdDQuenggcmV0dXJuaW5nIGEgcG9pbnRlciB0byBz
b21ldGhpbmcsIHNpbmNlIGl0J3MgZG9pbmcgc3dpenpsaW5nLgorICAgICAgICBJdCBjb3VsZCBy
ZXR1cm4gYSBjcmF6eSBzbWFydCBwb2ludGVyLCBidXQgdGhhdCBzb3VuZHMgbGlrZSBhIGxvdCBv
ZiB3b3JrLiBTbywgSSBkZWNpZGVkIHRvIGdvIGZvcgorICAgICAgICBsdmFsdWUgZW11bGF0aW9u
IGluc3RlYWQuCisgICAgICAgIAorICAgICAgICBUaGUgaWRlYSBvZiBsdmFsdWUgZW11bGF0aW9u
IGlzIHRoYXQgd2hlbiB3ZSB0cnkgdG8gbWFrZSBhbiBsdmFsdWUgd29yayBmb3IgYW4gYXNzaWdu
bWVudCBvciBSTVcKKyAgICAgICAgb3BlcmF0aW9uIChsaWtlICs9IGFuZCBmcmllbmRzKSwgd2Ug
Y29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgd2UgaGF2ZSB0byBmaXJzdCBsb2FkIHRoZSB2
YWx1ZSB1c2luZworICAgICAgICBhIGdldHRlciBhbmQgdGhlbiBzdG9yZSBpdCB3aXRoIGEgc2V0
dGVyLiBUaGlzIHBhdGNoIG1ha2VzIHRoaXMgd29yayByZWN1cnNpdmVseSwgc28gdGhhdCB0aGlz
IHdpbGwKKyAgICAgICAgd29yazoKKyAgICAgICAgCisgICAgICAgICAgICBmbG9hdDQgdmVjOwor
ICAgICAgICAgICAgdmVjLnp3eC55ID0gNDI7CisgICAgICAgICAgICAvLyBub3cgdyBpcyA0Mgor
ICAgICAgICAKKyAgICAgICAgVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRlY29tcG9zZSBpdCBhdXRv
bWF0aWNhbGx5OgorICAgICAgICAKKyAgICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAg
ICBmbG9hdDMgdG1wID0gdmVjLnp3eDsKKyAgICAgICAgICAgIHRtcC55ID0gNDI7CisgICAgICAg
ICAgICB2ZWMuend4ID0gdG1wOworICAgICAgICAKKyAgICAgICAgVGhpcydsbCB3b3JrIHRvIGFu
eSBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIFRvIGNoZWNrIGlmIHRoaXMgd29ya3MsIHRoaXMg
cGF0Y2ggYWRkcyB0d28gc3Vic3RhbnRpYWwgbmV3IHRlc3RzIGNhbGxlZCBURVNUX2dlbmVyaWNB
Y2Nlc3NvcnMoKSBhbmQKKyAgICAgICAgVEVTVF9iaXRTdWJzY3JpcHRBY2Nlc3NvcigpLiBUaGlz
IHRlc3RzIHRoYXQgdGhpcyBzdHVmZiB3b3JrcyB3aXRoIGEgbG90IG9mIGdlbmVyaWMgdHlwZXMs
IGFuZCB0aGF0IGl0J3MKKyAgICAgICAgcG9zc2libGUgdG8gdHVybiBpbnRlZ2VycyBpbnRvIGJp
dHZlY3RvcnMgdXNpbmcgc3Vic2NyaXB0IG92ZXJsb2FkaW5nLiBUaGlzIHBhdGNoIGFsc28gYWRk
cyBzbWFsbGVyIHVuaXQKKyAgICAgICAgdGVzdHMgYWxzby4KKyAgICAgICAgCisgICAgICAgIE9o
LCBhbmQgaXQncyBub3cgcG9zc2libGUgdG8gZ2V0IGFuIGFycmF5J3MgbGVuZ3RoLgorCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzOgorICAgICAgICAo
bmVlZHNQcmltaXRpdmVQcm90b2NvbCk6CisgICAgICAgIChwcm90b2NvbFN1ZmZpeCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKEFu
b255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5n
ZXQgb3JpZ2luKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5nZXQgbmFt
ZSk6CisgICAgICAgIChBbm9ueW1vdXNWYXJpYWJsZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qczoKKyAgICAgICAg
KEFycmF5UmVmVHlwZS5wcm90b3R5cGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZCk6CisgICAgICAg
IChBcnJheVJlZlR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanM6CisgICAgICAgIChB
cnJheVR5cGUucHJvdG90eXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQpOgorICAgICAgICAoQXJy
YXlUeXBlLnByb3RvdHlwZS5hcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCk6CisgICAgICAgIChB
cnJheVR5cGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQu
anM6CisgICAgICAgIChBc3NpZ25tZW50KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DYWxsQXNzaWdubWVudC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9uLnJl
c29sdmUpOgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmUpOgorICAg
ICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmVUb092ZXJsb2FkKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzOgorICAgICAgICAoQ2hlY2tl
ci5wcm90b3R5cGUudmlzaXRQcm9ncmFtKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZp
c2l0RnVuY0RlZik6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmMp
OgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KENoZWNrZXIucHJvdG90eXBlLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0RG90RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVja2VyLnBy
b3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9uKToKKyAgICAgICAgKENoZWNrZXIpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxl
LnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOiBEZWxldGVkLgorICAgICAgICAoQ2hlY2tlci5wcm90
b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxlLnByb3RvdHlwZS52aXNp
dFZhcmlhYmxlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0
UHJvdG9jb2xEZWNsLk5vdGljZVR5cGVWYXJpYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdFByb3RvY29sRGVjbC5zZXQgdGhyb3cpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qczoKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzOgorICAgICAgICAo
RG90RXhwcmVzc2lvbik6CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc3Ry
dWN0KToKKyAgICAgICAgKERvdEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBnZXRGdW5jTmFtZSk6
CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoRG90RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHNldEZ1bmNOYW1lKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzOgorICAgICAgICAoRUJ1ZmZlckJ1aWxk
ZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAoRUJ1ZmZlckJ1
aWxkZXIucHJvdG90eXBlLnZpc2l0TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAgICAgICAoRXZhbHVhdG9y
LnByb3RvdHlwZS52aXNpdElkZW50aXR5RXhwcmVzc2lvbik6CisgICAgICAgIChFdmFsdWF0b3Iu
cHJvdG90eXBlLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoRXZhbHVhdG9yLnBy
b3RvdHlwZS52aXNpdEFub255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEV2YWx1YXRvci5wcm90
b3R5cGUudmlzaXREb3RFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEV2YWx1YXRvci5w
cm90b3R5cGUudmlzaXRMZXRFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzOgorICAgICAgICAoRXhwcmVzc2lv
bkZpbmRlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzOgorICAgICAgICAo
Rm9yTG9vcC5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoRm9yTG9vcCk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanM6CisgICAg
ICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1
YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRDYWxsRXhwcmVzc2lvbik6CisgICAgICAgIChGdW5j
SW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1YnN0aXR1dGlv
bik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9y
LnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGUucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVu
Yyk6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUpOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlKToK
KyAgICAgICAgKEZ1bmNJbnN0YW50aWF0b3IpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qczogQWRkZWQuCisgICAgICAgIChJZGVudGl0eUV4
cHJlc3Npb24pOgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgdGFy
Z2V0KToKKyAgICAgICAgKElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0NvbnN0ZXhw
cik6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1ZSk6
CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJv
dG90eXBlLmdldCBhcnJheSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdl
dCBpbmRleCk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1
ZSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgZ2V0RnVuY05hbWUpOgor
ICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc2V0RnVuY05hbWUpOgorICAgICAg
ICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanM6CisgICAgICAgIChpbmZlclR5
cGVzRm9yQ2FsbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpz
OgorICAgICAgICAoX2lubGluZUZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzOgorICAgICAgICAoSW5saW5lci5wcm90b3R5cGUudmlzaXRDYWxs
RXhwcmVzc2lvbik6CisgICAgICAgIChJbmxpbmVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Np
b24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNp
Y3MuanM6CisgICAgICAgIChJbnRyaW5zaWNzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanM6CisgICAgICAgIChNYWtlQXJy
YXlSZWZFeHByZXNzaW9uLnByb3RvdHlwZS5iZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJl
c3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVD
b250ZXh0LmpzOgorICAgICAgICAoTmFtZUNvbnRleHQpOgorICAgICAgICAoTmFtZUNvbnRleHQu
cHJvdG90eXBlLmFkZCk6CisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZG9TdGF0ZW1l
bnQpOgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmhhbmRsZURlZmluaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKE5hbWVDb250ZXh0LnByb3RvdHlwZS5pc0RlZmluZWQpOiBEZWxldGVk
LgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmRlZmluZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZGVmaW5lQWxsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanM6CisgICAgICAgIChOYW1l
UmVzb2x2ZXIucHJvdG90eXBlLmRvU3RhdGVtZW50KToKKyAgICAgICAgKE5hbWVSZXNvbHZlci5w
cm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAgICAoTmFtZVJlc29sdmVyLnByb3Rv
dHlwZS52aXNpdFByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL05hdGl2ZUZ1bmMuanM6CisgICAgICAgIChOYXRpdmVGdW5jKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanM6CisgICAgICAgIChO
YXRpdmVGdW5jSW5zdGFuY2UpOgorICAgICAgICAoTmF0aXZlRnVuY0luc3RhbmNlLnByb3RvdHlw
ZS5nZXQgaW1wbGVtZW50YXRpb25EYXRhKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob2RlLmpzOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUudmlzaXQpOgorICAgICAgICAo
Tm9kZS52aXNpdCk6CisgICAgICAgIChOb2RlLnVuaWZ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0RG90
RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLnByb3RvdHlw
ZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAg
ICAgKGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KToKKyAgICAgICAgKHBhcnNlUG9zc2libGVT
dWZmaXgpOgorICAgICAgICAoZmluaXNoUGFyc2luZ1ByZUluY3JlbWVudCk6CisgICAgICAgIChn
ZW5lcmljUGFyc2VDb21tYUV4cHJlc3Npb24pOgorICAgICAgICAocGFyc2VGdW5jTmFtZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qczoKKyAgICAgICAgKHBy
ZXBhcmUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanM6Cisg
ICAgICAgIChQcm9ncmFtKToKKyAgICAgICAgKFByb2dyYW0ucHJvdG90eXBlLmdldCBnbG9iYWxO
YW1lQ29udGV4dCk6CisgICAgICAgIChQcm9ncmFtLnByb3RvdHlwZS5hZGQpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qczogQWRk
ZWQuCisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgcmVzdWx0VHlwZSk6CisgICAgICAgIChQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90eXBlLnJld3JpdGVBZnRlckNsb25pbmcpOgor
ICAgICAgICAoUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS51cGRhdGVDYWxsc0Fm
dGVyQ2hhbmdpbmdCYXNlKToKKyAgICAgICAgKFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wcm90
b3R5cGUuZW1pdEdldCk6CisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90
eXBlLmVtaXRTZXQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5
UmVzb2x2ZXIuanM6IEFkZGVkLgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUu
X3Zpc2l0UHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5
cGUudmlzaXREb3RFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJvdG90
eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJv
dG90eXBlLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZl
ci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFBy
b3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0QXNzaWdubWVudCk6CisgICAgICAgIChQcm9w
ZXJ0eVJlc29sdmVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVydHlS
ZXNvbHZlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KFByb3BlcnR5UmVzb2x2ZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0
clR5cGUuanM6CisgICAgICAgIChQdHJUeXBlLnByb3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLnJldHVyblR5cGVGcm9tQW5kT3Zlcmxv
YWQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24uanM6IEFkZGVkLgorICAgICAgICAoUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbik6
CisgICAgICAgIChSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgbFZhbHVl
KToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm9sZFZhbHVl
UmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm5ld1Zh
bHVlUmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLnRv
U3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMu
anM6CisgICAgICAgIChjcmVhdGVOYW1lUmVzb2x2ZXIpOgorICAgICAgICAocmVzb2x2ZU5hbWVz
SW5UeXBlcyk6CisgICAgICAgIChyZXNvbHZlTmFtZXNJblByb3RvY29scyk6CisgICAgICAgIChy
ZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlTmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwu
anM6CisgICAgICAgIChyZXNvbHZlT3ZlcmxvYWRJbXBsKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qczogQWRkZWQuCisgICAgICAgIChyZXNv
bHZlUHJvcGVydGllcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2
ZVR5cGVEZWZzLmpzOgorICAgICAgICAocmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyk6CisgICAgICAg
IChyZXNvbHZlVHlwZURlZnNJblByb3RvY29scyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnNJ
bkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnMpOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanM6CisgICAgICAgIChS
ZXR1cm5DaGVja2VyLnByb3RvdHlwZS5faXNCb29sQ2FzdEZyb21MaXRlcmFsVHJ1ZSk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanM6CisgICAgICAgIChSZXdy
aXRlcik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgor
ICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJlZik6CisgICAgICAgIChSZXdy
aXRlci5wcm90b3R5cGUudmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVy
LnByb3RvdHlwZS5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKToKKyAgICAgICAgKFJl
d3JpdGVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJldHVybik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRHZW5l
cmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0TnVsbFR5
cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnByb2Nlc3NEZXJpdmVkQ2FsbERhdGEp
OgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgorICAg
ICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0RnVuY3Rpb25MaWtlQmxvY2spOgorICAgICAg
ICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0SWZTdGF0ZW1lbnQpOgorICAgICAgICAoUmV3cml0
ZXIucHJvdG90eXBlLnZpc2l0Rm9yTG9vcCk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUu
dmlzaXRBbm9ueW1vdXNWYXJpYWJsZSk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0
TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RhbmRhcmRMaWJyYXJ5LmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0cnVjdExheW91dEJ1aWxkZXIuanM6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRCdWlsZGVyLnBy
b3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmNJbnN0YW5jZSk6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRC
dWlsZGVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpz
OgorICAgICAgICAoU3RydWN0VHlwZS5wcm90b3R5cGUuaW5zdGFudGlhdGUpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qczoKKyAgICAgICAgKFN1YnN0
aXR1dGlvbi5wcm90b3R5cGUuZ2V0IG1hcCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanM6IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qczogQWRkZWQuCisg
ICAgICAgIChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmNyZWF0ZVR5cGVQYXJhbWV0ZXJzKToK
KyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuKToKKyAgICAgICAgKHN5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlRmllbGRUeXBlKToKKyAgICAgICAgKHN5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlVHlwZVJlZik6CisgICAgICAgIChzeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzLnNldHVwQW5kZXIpOgorICAgICAgICAoc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29y
cyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChjaGVja051bWJl
cik6CisgICAgICAgIChURVNUX3NpbXBsZVByb3RvY29sKToKKyAgICAgICAgKFRFU1RfYXNzaWdu
TGVuZ3RoKToKKyAgICAgICAgKFRFU1Rfc2ltcGxlU2V0dGVyKToKKyAgICAgICAgKFRFU1RfZ2Vu
ZXJpY0FjY2Vzc29ycyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5q
czoKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmdldCBpc1JlZik6CisgICAgICAgIChUeXBlLnBy
b3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBl
LmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLnJl
dHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQpOgorICAgICAgICAoVHlwZSk6CisgICAgICAgICogV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzOiBBZGRlZC4KKyAg
ICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlzaXRDb25zdGV4cHJUeXBl
UGFyYW1ldGVyKToKKyAgICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRUeXBlVmFyaWFibGUpOgorICAgICAgICAoVHlwZVBhcmFtZXRlclJld3JpdGVyKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFR5cGVWYXJpYWJsZVRyYWNrZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1ZhbHVlLmpzOgorICAgICAgICAoVmFsdWUucHJvdG90eXBlLmJlY29tZSk6
CisgICAgICAgIChWYWx1ZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFy
aWFibGVSZWYuanM6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IGFkZHJlc3NTcGFjZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZp
c2l0b3IucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKToKKyAgICAgICAgKFZpc2l0
b3IucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xEZWNsKToKKyAgICAgICAgKFZpc2l0b3IpOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzOiBS
ZW1vdmVkLgorCiAyMDE3LTA5LTE2ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCB0aGUgVG9vbHMgYnVpbGQgd2l0aCBDTWFrZSBvbiBtYWNPUwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5qcwko
cmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVz
c1NwYWNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxNiBAQCBmdW5jdGlvbiBpc0Fk
ZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCiAgICAgfQogfQogCitmdW5jdGlvbiBuZWVkc1ByaW1p
dGl2ZVByb3RvY29sKGFkZHJlc3NTcGFjZSkKK3sKKyAgICByZXR1cm4gYWRkcmVzc1NwYWNlICE9
ICJ0aHJlYWQiOworfQorCitmdW5jdGlvbiBwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpCit7
CisgICAgcmV0dXJuIG5lZWRzUHJpbWl0aXZlUHJvdG9jb2woYWRkcmVzc1NwYWNlKSA/ICI6cHJp
bWl0aXZlIiA6ICIiOworfQorCiBmdW5jdGlvbiB2YWxpZGF0ZUFkZHJlc3NTcGFjZShhZGRyZXNz
U3BhY2UpCiB7CiAgICAgaWYgKCFpc0FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpKQpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MyArMjksMTQgQEAgbG9hZCgiVHlwZS5qcyIpOwogbG9hZCgiUmVmZXJlbmNlVHlwZS5qcyIpOwog
bG9hZCgiVmFsdWUuanMiKTsKIGxvYWQoIkV4cHJlc3Npb24uanMiKTsKLWxvYWQoIlZpc2l0b3JC
YXNlLmpzIik7CiBsb2FkKCJSZXdyaXRlci5qcyIpOwogbG9hZCgiVmlzaXRvci5qcyIpOwogbG9h
ZCgiQ3JlYXRlTGl0ZXJhbC5qcyIpOwogbG9hZCgiQ3JlYXRlTGl0ZXJhbFR5cGUuanMiKTsKK2xv
YWQoIlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcyIpOwogCiBsb2FkKCJBZGRyZXNzU3BhY2Uu
anMiKTsKK2xvYWQoIkFub255bW91c1ZhcmlhYmxlLmpzIik7CiBsb2FkKCJBcnJheVJlZlR5cGUu
anMiKTsKIGxvYWQoIkFycmF5VHlwZS5qcyIpOwogbG9hZCgiQXNzaWdubWVudC5qcyIpOwpAQCAt
NDMsNyArNDQsNiBAQCBsb2FkKCJBdXRvV3JhcHBlci5qcyIpOwogbG9hZCgiQmxvY2suanMiKTsK
IGxvYWQoIkJvb2xMaXRlcmFsLmpzIik7CiBsb2FkKCJCcmVhay5qcyIpOwotbG9hZCgiQ2FsbEFz
c2lnbm1lbnQuanMiKTsKIGxvYWQoIkNhbGxFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJDYWxsRnVu
Y3Rpb24uanMiKTsKIGxvYWQoIkNoZWNrLmpzIik7CkBAIC02OSw2ICs2OSw3IEBAIGxvYWQoIkV2
YWx1YXRpb25Db21tb24uanMiKTsKIGxvYWQoIkV2YWx1YXRvci5qcyIpOwogbG9hZCgiRXhwcmVz
c2lvbkZpbmRlci5qcyIpOwogbG9hZCgiRmllbGQuanMiKTsKK2xvYWQoIkZpbmRIaWdoWm9tYmll
cy5qcyIpOwogbG9hZCgiRmxhdHRlblByb3RvY29sRXh0ZW5kcy5qcyIpOwogbG9hZCgiRm9yTG9v
cC5qcyIpOwogbG9hZCgiRnVuYy5qcyIpOwpAQCAtNzYsNyArNzcsMTAgQEAgbG9hZCgiRnVuY0Rl
Zi5qcyIpOwogbG9hZCgiRnVuY0luc3RhbnRpYXRvci5qcyIpOwogbG9hZCgiRnVuY1BhcmFtZXRl
ci5qcyIpOwogbG9hZCgiRnVuY3Rpb25MaWtlQmxvY2suanMiKTsKK2xvYWQoIkhpZ2hab21iaWVG
aW5kZXIuanMiKTsKK2xvYWQoIklkZW50aXR5RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiSWZTdGF0
ZW1lbnQuanMiKTsKK2xvYWQoIkluZGV4RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiSW5mZXJUeXBl
c0ZvckNhbGwuanMiKTsKIGxvYWQoIklubGluZS5qcyIpOwogbG9hZCgiSW5saW5lci5qcyIpOwpA
QCAtODQsNyArODgsNiBAQCBsb2FkKCJJbnN0YW50aWF0ZUltbWVkaWF0ZXMuanMiKTsKIGxvYWQo
IkludExpdGVyYWwuanMiKTsKIGxvYWQoIkludExpdGVyYWxUeXBlLmpzIik7CiBsb2FkKCJJbnRy
aW5zaWNzLmpzIik7Ci1sb2FkKCJMZXRFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJMZXhlci5qcyIp
OwogbG9hZCgiTGV4ZXJUb2tlbi5qcyIpOwogbG9hZCgiTGl0ZXJhbFR5cGVDaGVja2VyLmpzIik7
CkBAIC05OCwyMCArMTAxLDI0IEBAIGxvYWQoIk5hdGl2ZUZ1bmMuanMiKTsKIGxvYWQoIk5hdGl2
ZUZ1bmNJbnN0YW5jZS5qcyIpOwogbG9hZCgiTmF0aXZlVHlwZS5qcyIpOwogbG9hZCgiTmF0aXZl
VHlwZUluc3RhbmNlLmpzIik7Citsb2FkKCJOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzIik7
CiBsb2FkKCJOdWxsTGl0ZXJhbC5qcyIpOwogbG9hZCgiTnVsbFR5cGUuanMiKTsKIGxvYWQoIk92
ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiKTsKIGxvYWQoIlBhcnNlLmpzIik7CiBsb2FkKCJQ
cmVwYXJlLmpzIik7CiBsb2FkKCJQcm9ncmFtLmpzIik7Citsb2FkKCJQcm9wZXJ0eVJlc29sdmVy
LmpzIik7CiBsb2FkKCJQcm90b2NvbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xEZWNsLmpzIik7CiBs
b2FkKCJQcm90b2NvbEZ1bmNEZWNsLmpzIik7CiBsb2FkKCJQcm90b2NvbFJlZi5qcyIpOwogbG9h
ZCgiUHRyVHlwZS5qcyIpOworbG9hZCgiUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyIpOwog
bG9hZCgiUmVjdXJzaW9uQ2hlY2tlci5qcyIpOwogbG9hZCgiUmVzb2x2ZU5hbWVzLmpzIik7CiBs
b2FkKCJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIik7Citsb2FkKCJSZXNvbHZlUHJvcGVydGllcy5q
cyIpOwogbG9hZCgiUmVzb2x2ZVR5cGVEZWZzLmpzIik7CiBsb2FkKCJSZXR1cm4uanMiKTsKIGxv
YWQoIlJldHVybkNoZWNrZXIuanMiKTsKQEAgLTEyMCwxMiArMTI3LDE0IEBAIGxvYWQoIlN0YW5k
YXJkTGlicmFyeS5qcyIpOwogbG9hZCgiU3RydWN0TGF5b3V0QnVpbGRlci5qcyIpOwogbG9hZCgi
U3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vic3RpdHV0aW9uLmpzIik7Ci1sb2FkKCJTdWZmaXhD
YWxsQXNzaWdubWVudC5qcyIpOworbG9hZCgiU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyIp
OwogbG9hZCgiVHlwZURlZi5qcyIpOwogbG9hZCgiVHlwZURlZlJlc29sdmVyLmpzIik7CiBsb2Fk
KCJUeXBlT3JWYXJpYWJsZVJlZi5qcyIpOworbG9hZCgiVHlwZVBhcmFtZXRlclJld3JpdGVyLmpz
Iik7CiBsb2FkKCJUeXBlUmVmLmpzIik7CiBsb2FkKCJUeXBlVmFyaWFibGUuanMiKTsKK2xvYWQo
IlR5cGVWYXJpYWJsZVRyYWNrZXIuanMiKTsKIGxvYWQoIlR5cGVkVmFsdWUuanMiKTsKIGxvYWQo
IlVpbnRMaXRlcmFsLmpzIik7CiBsb2FkKCJVaW50TGl0ZXJhbFR5cGUuanMiKTsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpz
CShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91
c1ZhcmlhYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworbGV0IGFu
b255bW91c1ZhcmlhYmxlQ291bnQgPSAwOworCitjbGFzcyBBbm9ueW1vdXNWYXJpYWJsZSBleHRl
bmRzIFZhbHVlIHsKKyAgICAvLyBZb3UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSB2YXJpYWJsZSdz
IHZhbHVlIGJlZm9yZSB1c2UsIGJ1dCB0aGF0IGNvdWxkIGJlIHF1aXRlIGxhdGUuCisgICAgY29u
c3RydWN0b3Iob3JpZ2luLCB0eXBlID0gbnVsbCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7Cisg
ICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5pbmRleCA9IGFub255
bW91c1ZhcmlhYmxlQ291bnQrKzsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB9Cisg
ICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAgIGdldCBu
YW1lKCkgeyByZXR1cm4gImFub25WYXI8IiArIHRoaXMuaW5kZXggKyAiPiI7IH0KKyAgICAKKyAg
ICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5uYW1lOworICAgIH0KK30K
KwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5q
cwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJy
YXlSZWZUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxNSBAQCBjbGFzcyBBcnJh
eVJlZlR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlCiAgICAgCiAgICAgZ2V0IGlzQXJyYXlSZWYo
KSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2FkKG9yaWdpbiwg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICAgIGFyZ3VtZW50
VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1l
bnRUeXBlICsgIltdICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
NzMsNSArNzMsMTYgQEAgY2xhc3MgQXJyYXlUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQs
IG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CisKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2Fk
KG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE1ha2VBcnJh
eVJlZkV4cHJlc3Npb24ob3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5udW1FbGVtZW50
cyA9IHRoaXMubnVtRWxlbWVudHM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgQXJyYXlSZWZUeXBlKG9yaWdpbiwgInRocmVhZCIsIHRoaXMuZWxlbWVudFR5cGUpOwor
ICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVu
dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bc3NpZ25t
ZW50LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Bc3NpZ25tZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTIgQEAKICJ1c2Ug
c3RyaWN0IjsKIAogY2xhc3MgQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNv
bnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMpCisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBsaHMs
IHJocywgdHlwZSA9IG51bGwpCiAgICAgewogICAgICAgICBzdXBlcihvcmlnaW4pOwogICAgICAg
ICB0aGlzLl9saHMgPSBsaHM7CiAgICAgICAgIHRoaXMuX3JocyA9IHJoczsKKyAgICAgICAgdGhp
cy50eXBlID0gdHlwZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGxocygpIHsgcmV0dXJuIHRoaXMu
X2xoczsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFzc2lnbm1l
bnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFz
c2lnbm1lbnQuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVudCkKQEAgLTEsNDYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3Qi
OwotCi1jbGFzcyBDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNvbnN0
cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzLCByaHMpCi0gICAgewotICAgICAgICBzdXBlcihvcmln
aW4pOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fbGhzID0gbGhz
OwotICAgICAgICB0aGlzLl9yaHMgPSByaHM7Ci0gICAgICAgIHRoaXMuZnVuYyA9IG51bGw7Ci0g
ICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAgIGdl
dCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KLSAgICBnZXQgcmhzKCkgeyByZXR1cm4gdGhp
cy5fcmhzOyB9IC8vIFRoaXMgY2FuIGJlIG51bGwuCi0gICAgCi0gICAgdG9TdHJpbmcoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGhzICsgIiAiICsgdGhpcy5uYW1lICsgKHRoaXMucmhz
ID8gIj0gIiArIHRoaXMucmhzIDogIiIpOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsODIgQEAgY2xhc3MgQ2FsbEV4cHJlc3Npb24gZXh0
ZW5kcyBFeHByZXNzaW9uIAogICAgIGdldCBpc0Nhc3QoKSB7IHJldHVybiB0aGlzLl9pc0Nhc3Q7
IH0KICAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3JldHVyblR5cGU7IH0KICAg
ICAKLSAgICByZXNvbHZlKG92ZXJsb2FkKQorICAgIHN0YXRpYyByZXNvbHZlKG9yaWdpbiwgcG9z
c2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSwgbmFtZSwgdHlwZUFyZ3VtZW50
cywgYXJndW1lbnRMaXN0LCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQorICAgIHsKKyAgICAg
ICAgbGV0IGNhbGwgPSBuZXcgQ2FsbEV4cHJlc3Npb24ob3JpZ2luLCBuYW1lLCB0eXBlQXJndW1l
bnRzLCBhcmd1bWVudExpc3QpOworICAgICAgICBjYWxsLmFyZ3VtZW50VHlwZXMgPSBhcmd1bWVu
dFR5cGVzOworICAgICAgICBpZiAocmV0dXJuVHlwZSkKKyAgICAgICAgICAgIGNhbGwuc2V0Q2Fz
dERhdGEocmV0dXJuVHlwZSk7CisgICAgICAgIHJldHVybiB7Y2FsbCwgcmVzdWx0VHlwZTogY2Fs
bC5yZXNvbHZlKHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1ldGVyc0luU2NvcGUsIHR5cGVB
cmd1bWVudHMpfTsKKyAgICB9CisgICAgCisgICAgcmVzb2x2ZShwb3NzaWJsZU92ZXJsb2Fkcywg
dHlwZVBhcmFtZXRlcnNJblNjb3BlLCB0eXBlQXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaWYg
KCFwb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHRo
aXMub3JpZ2luLm9yaWdpblN0cmluZywgIkRpZCBub3QgZmluZCBhbnkgZnVuY3Rpb25zIG5hbWVk
ICIgKyB0aGlzLm5hbWUpOworICAgICAgICAKKyAgICAgICAgbGV0IG92ZXJsb2FkID0gbnVsbDsK
KyAgICAgICAgbGV0IGZhaWx1cmVzID0gW107CisgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0
ZXIgb2YgdHlwZVBhcmFtZXRlcnNJblNjb3BlKSB7CisgICAgICAgICAgICBpZiAoISh0eXBlUGFy
YW1ldGVyIGluc3RhbmNlb2YgVHlwZVZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5wcm90b2NvbCkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxldCBzaWduYXR1cmVzID0KKyAgICAgICAgICAg
ICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnByb3RvY29sRGVjbC5zaWduYXR1cmVzQnlOYW1l
V2l0aFR5cGVWYXJpYWJsZSh0aGlzLm5hbWUsIHR5cGVQYXJhbWV0ZXIpOworICAgICAgICAgICAg
aWYgKCFzaWduYXR1cmVzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
b3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMsIHRoaXMudHlwZUFyZ3Vt
ZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlzLnJldHVyblR5cGUpOworICAgICAgICAgICAg
aWYgKG92ZXJsb2FkLmZ1bmMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBm
YWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKKyAgICAgICAgICAgIG92ZXJsb2Fk
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW92ZXJsb2FkKSB7CisgICAgICAgICAg
ICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCisgICAgICAgICAgICAgICAgcG9zc2li
bGVPdmVybG9hZHMsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlz
LnJldHVyblR5cGUpOworICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7CisgICAgICAg
ICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7CisgICAgICAgICAg
ICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdpdGgg
IjsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlQXJndW1lbnRzLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyB0aGlzLnR5cGVB
cmd1bWVudHMgKyAiPiBhbmQgIjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1bWVu
dCB0eXBlcyAoIiArIHRoaXMuYXJndW1lbnRUeXBlcyArICIpIjsKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5yZXR1cm5UeXBlKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IiBhbmQg
cmV0dXJuIHR5cGUgIiArIHRoaXMucmV0dXJuVHlwZTsKKyAgICAgICAgICAgICAgICBpZiAoZmFp
bHVyZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIsIGJ1dCBjb25z
aWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1lc3NhZ2UpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZUFyZ3Vt
ZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGUgPSB0
eXBlQXJndW1lbnRzW2ldOworICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBvdmVybG9h
ZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOworICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRl
ciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxzV2l0aENv
bW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBlIGFyZ3Vt
ZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0eXBlQXJn
dW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7CisgICAg
ICAgIH0KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyZ3VtZW50VHlwZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBhcmd1bWVudFR5cGUgPSB0aGlzLmFyZ3VtZW50
VHlwZXNbaV07CisgICAgICAgICAgICBsZXQgcGFyYW1ldGVyVHlwZSA9IG92ZXJsb2FkLmZ1bmMu
cGFyYW1ldGVyc1tpXS50eXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAorICAgICAgICAgICAg
ICAgIG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0aW9uQ29u
dGV4dCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRUeXBlLmVxdWFsc1dpdGhD
b21taXQocGFyYW1ldGVyVHlwZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcg
KyAiIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsIGFmdGVyIHR5cGUgYXJn
dW1lbnQgc3Vic3RpdHV0aW9uOiBhcmd1bWVudCA9ICIgKyBhcmd1bWVudFR5cGUgKyAiLCBwYXJh
bWV0ZXIgPSAiICsgcGFyYW1ldGVyVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXMucmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQpOworICAgIH0KKyAgICAKKyAgICByZXNvbHZl
VG9PdmVybG9hZChvdmVybG9hZCkKICAgICB7CiAgICAgICAgIHRoaXMuZnVuYyA9IG92ZXJsb2Fk
LmZ1bmM7CiAgICAgICAgIHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA9IG92ZXJsb2FkLnR5cGVB
cmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQgaW5zdGFuY2VvZiBUeXBl
ID8gdHlwZUFyZ3VtZW50LnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKSA6IHR5cGVBcmd1bWVudCk7
CiAgICAgICAgIGxldCByZXN1bHQgPSBvdmVybG9hZC5mdW5jLnJldHVyblR5cGUuc3Vic3RpdHV0
ZVRvVW5pZmljYXRpb24oCiAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJz
LCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwotICAgICAgICB0aGlzLnJlc3VsdFR5cGUg
PSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOwogICAgICAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCByZXR1cm4gdHlwZSIpOworICAgICAg
ICByZXN1bHQgPSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOworICAgICAgICB0aGlz
LnJlc3VsdFR5cGUgPSByZXN1bHQ7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwzOSArMzQsNDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZp
c2l0b3IgewogICAgIAogICAgIHZpc2l0UHJvZ3JhbShub2RlKQogICAgIHsKLSAgICAgICAgZm9y
IChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKSB7CisgICAgICAgIGxl
dCBkb1N0YXRlbWVudCA9IHN0YXRlbWVudCA9PiB7CiAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
U3RhdGVtZW50ID0gc3RhdGVtZW50OwogICAgICAgICAgICAgc3RhdGVtZW50LnZpc2l0KHRoaXMp
OwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGxldCB0eXBlIG9mIG5vZGUudHlw
ZXMudmFsdWVzKCkpCisgICAgICAgICAgICBkb1N0YXRlbWVudCh0eXBlKTsKKyAgICAgICAgZm9y
IChsZXQgcHJvdG9jb2wgb2Ygbm9kZS5wcm90b2NvbHMudmFsdWVzKCkpCisgICAgICAgICAgICBk
b1N0YXRlbWVudChwcm90b2NvbCk7CisgICAgICAgIGZvciAobGV0IGZ1bmNzIG9mIG5vZGUuZnVu
Y3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmNzKSB7
CisgICAgICAgICAgICAgICAgdGhpcy52aXNpdEZ1bmMoZnVuYyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgZnVuY3Mgb2Ygbm9kZS5mdW5jdGlvbnMudmFsdWVz
KCkpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAgICAgICAgICAg
ICAgZG9TdGF0ZW1lbnQoZnVuYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIHZp
c2l0RnVuY0RlZihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwor
ICAgIH0KKyAgICAKKyAgICB2aXNpdE5hdGl2ZUZ1bmMobm9kZSkKKyAgICB7CiAgICAgfQogICAg
IAogICAgIHZpc2l0UHJvdG9jb2xEZWNsKG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxldCBz
aWduYXR1cmUgb2Ygbm9kZS5zaWduYXR1cmVzKSB7Ci0gICAgICAgICAgICBsZXQgc2V0ID0gbmV3
IFNldCgpOwotICAgICAgICAgICAgZnVuY3Rpb24gY29uc2lkZXIodGhpbmcpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaW5nLmlzVW5pZmlhYmxlKQotICAgICAgICAgICAg
ICAgICAgICBzZXQuYWRkKHRoaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNsYXNz
IE5vdGljZVR5cGVWYXJpYWJsZSBleHRlbmRzIFZpc2l0b3IgewotICAgICAgICAgICAgICAgIHZp
c2l0VHlwZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29uc2lkZXIobm9kZS50eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
dmlzaXRWYXJpYWJsZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc2lkZXIobm9kZS52YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbGV0IG5vdGljZVR5cGVWYXJpYWJsZSA9IG5ldyBOb3RpY2VU
eXBlVmFyaWFibGUoKTsKKyAgICAgICAgICAgIGxldCB0eXBlVmFyaWFibGVUcmFja2VyID0gbmV3
IFR5cGVWYXJpYWJsZVRyYWNrZXIoKTsKICAgICAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlclR5
cGUgb2Ygc2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRl
clR5cGUudmlzaXQobm90aWNlVHlwZVZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJUeXBlLnZpc2l0KHR5cGVWYXJpYWJsZVRyYWNrZXIpOworICAgICAgICAgICAgTm9kZS52aXNp
dChzaWduYXR1cmUucmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbiwgdHlwZVZhcmlhYmxl
VHJhY2tlcik7CiAgICAgICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHNpZ25hdHVy
ZS50eXBlUGFyYW1ldGVycykgewotICAgICAgICAgICAgICAgIGlmICghc2V0Lmhhcyh0eXBlUGFy
YW1ldGVyKSkKKyAgICAgICAgICAgICAgICBpZiAoIXR5cGVWYXJpYWJsZVRyYWNrZXIuc2V0Lmhh
cyh0eXBlUGFyYW1ldGVyKSkKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgV1R5cGVFcnJvcih0
eXBlUGFyYW1ldGVyLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBlIHBhcmFtZXRlciB0byBwcm90
b2NvbCBzaWduYXR1cmUgbm90IGluZmVycmFibGUgZnJvbSB2YWx1ZSBwYXJhbWV0ZXJzIik7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXNldC5oYXMobm9kZS50eXBlVmFyaWFibGUp
KQorICAgICAgICAgICAgaWYgKCF0eXBlVmFyaWFibGVUcmFja2VyLnNldC5oYXMobm9kZS50eXBl
VmFyaWFibGUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHNpZ25hdHVy
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUHJvdG9jb2wncyB0eXBlIHZhcmlhYmxlICgiICsgbm9k
ZS5uYW1lICsgIikgbm90IG1lbnRpb25lZCBpbiBzaWduYXR1cmU6ICIgKyBzaWduYXR1cmUpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTQxLDYgKzE0OSwzMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVu
ZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiBsaHNUeXBlOwogICAgIH0KICAgICAKKyAgICB2
aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUu
dGFyZ2V0LnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS5sVmFsdWUuaXNMVmFs
dWUpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsICJMSFMgb2YgcmVhZC1tb2RpZnktd3JpdGUgaXMgbm90IGFuIExWYWx1ZTogIiArIG5v
ZGUubFZhbGUpOworICAgICAgICBsZXQgbGhzVHlwZSA9IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMp
OworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAgICBub2Rl
Lm5ld1ZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnZp
c2l0KHRoaXMpOworICAgICAgICBub2RlLm5ld1ZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAg
ICBsZXQgbmV3VmFsdWVUeXBlID0gbm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAgICAg
ICAgaWYgKCFsaHNUeXBlLmVxdWFsc1dpdGhDb21taXQobmV3VmFsdWVUeXBlKSkKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBl
IG1pc21hdGNoIGluIHJlYWQtbW9kaWZ5LXdyaXRlOiAiICsgbGhzVHlwZSArICIgdmVyc3VzICIg
KyBuZXdWYWx1ZVR5cGUpOworICAgICAgICByZXR1cm4gbm9kZS5yZXN1bHRFeHAudmlzaXQodGhp
cyk7CisgICAgfQorICAgIAorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKKyAgICB7
CisgICAgICAgIGlmICghbm9kZS50eXBlKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJB
bm9ueW1vdXMgdmFyaWFibGUgbXVzdCBrbm93IHR5cGUgYmVmb3JlIGZpcnN0IGFwcGVhcmFuY2Ui
KTsKKyAgICB9CisgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKICAg
ICB7CiAgICAgICAgIGxldCB0eXBlID0gbm9kZS5wdHIudmlzaXQodGhpcykudW5pZnlOb2RlOwpA
QCAtMTQ4LDYgKzE4Miw4IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlR5
cGUgcGFzc2VkIHRvIGRlcmVmZXJlbmNlIGlzIG5vdCBhIHBvaW50ZXI6ICIgKyB0eXBlKTsKICAg
ICAgICAgbm9kZS50eXBlID0gdHlwZS5lbGVtZW50VHlwZTsKICAgICAgICAgbm9kZS5hZGRyZXNz
U3BhY2UgPSB0eXBlLmFkZHJlc3NTcGFjZTsKKyAgICAgICAgaWYgKCFub2RlLmFkZHJlc3NTcGFj
ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhZGRyZXNzIHNwYWNlIGluIHR5
cGU6ICIgKyB0eXBlKTsKICAgICAgICAgcmV0dXJuIG5vZGUudHlwZTsKICAgICB9CiAgICAgCkBA
IC0xNjUsNyArMjAxLDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHsK
ICAgICAgICAgbGV0IGVsZW1lbnRUeXBlID0gbm9kZS5sVmFsdWUudmlzaXQodGhpcykudW5pZnlO
b2RlOwogICAgICAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBQdHJUeXBlKSB7Ci0gICAg
ICAgICAgICBub2RlLmJlY29tZUNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihu
b2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlS
ZWZUeXBlKG5vZGUub3JpZ2luLCBlbGVtZW50VHlwZS5hZGRyZXNzU3BhY2UsIGVsZW1lbnRUeXBl
LmVsZW1lbnRUeXBlKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4OSwzNSArMjI1LDg3IEBA
IGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJTaG91bGQgbm90IGV4aXN0IHlldC4iKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RFeHBy
ZXNzaW9uKG5vZGUpCisgICAgX2ZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3Mobm9kZSwgYmFz
ZVR5cGUsIGV4dHJhQXJncywgZXh0cmFBcmdUeXBlcykKICAgICB7Ci0gICAgICAgIGxldCBzdHJ1
Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBiYXNl
VHlwZSA9IGJhc2VUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKQorICAgICAgICBub2RlLmJh
c2VUeXBlID0gYmFzZVR5cGU7CiAgICAgICAgIAotICAgICAgICBub2RlLnN0cnVjdFR5cGUgPSBz
dHJ1Y3RUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKLSAgICAgICAgCi0gICAgICAgIGxl
dCB1bmRlcmx5aW5nU3RydWN0ID0gc3RydWN0VHlwZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChz
dHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikKLSAgICAgICAgICAgIHVuZGVybHlpbmdTdHJ1
Y3QgPSB1bmRlcmx5aW5nU3RydWN0LnR5cGU7Ci0gICAgICAgIAotICAgICAgICBpZiAoISh1bmRl
cmx5aW5nU3RydWN0IGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJPcGVyYW5kIHRvIGRvdCBl
eHByZXNzaW9uIGlzIG5vdCBhIHN0cnVjdCB0eXBlOiAiICsgc3RydWN0VHlwZSk7CisgICAgICAg
IC8vIFN1Y2ggYSB0eXBlIG11c3QgZXhpc3QuIFRoaXMgbWF5IHRocm93IGlmIGl0IGRvZXNuJ3Qu
CisgICAgICAgIGxldCB0eXBlRm9yQW5kID0gYmFzZVR5cGUuYXJndW1lbnRUeXBlRm9yQW5kT3Zl
cmxvYWQobm9kZS5vcmlnaW4pOworICAgICAgICBpZiAoIXR5cGVGb3JBbmQpCisgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlwZUZvckFuZCIpOworICAgICAgICAKKyAg
ICAgICAgbGV0IGVycm9yRm9yR2V0OworICAgICAgICBsZXQgZXJyb3JGb3JBbmQ7CisgICAgICAg
IAorICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IENhbGxFeHByZXNzaW9u
LnJlc29sdmUoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUucG9zc2libGVHZXRP
dmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsCisgICAgICAg
ICAgICAgICAgbm9kZS5nZXRGdW5jTmFtZSwgW10sIFtub2RlLmJhc2UsIC4uLmV4dHJhQXJnc10s
IFtiYXNlVHlwZSwgLi4uZXh0cmFBcmdUeXBlc10sIG51bGwpOworICAgICAgICAgICAgbm9kZS5j
YWxsRm9yR2V0ID0gcmVzdWx0LmNhbGw7CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JH
ZXQgPSByZXN1bHQucmVzdWx0VHlwZTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgaWYgKCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93
IGU7CisgICAgICAgICAgICBlcnJvckZvckdldCA9IGU7CisgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikgCi0gICAgICAgICAgICB1
bmRlcmx5aW5nU3RydWN0ID0gdW5kZXJseWluZ1N0cnVjdC5pbnN0YW50aWF0ZShzdHJ1Y3RUeXBl
LnR5cGVBcmd1bWVudHMsICJzaGFsbG93Iik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBs
ZXQgYmFzZUZvckFuZCA9IGJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQobm9kZS5vcmln
aW4sIG5vZGUuYmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBD
YWxsRXhwcmVzc2lvbi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2Rl
LnBvc3NpYmxlQW5kT3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0
ZXJzLAorICAgICAgICAgICAgICAgIG5vZGUuYW5kRnVuY05hbWUsIFtdLCBbYmFzZUZvckFuZCwg
Li4uZXh0cmFBcmdzXSwgW3R5cGVGb3JBbmQsIC4uLmV4dHJhQXJnVHlwZXNdLAorICAgICAgICAg
ICAgICAgIG51bGwpOworICAgICAgICAgICAgbm9kZS5jYWxsRm9yQW5kID0gcmVzdWx0LmNhbGw7
CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JBbmQgPSByZXN1bHQucmVzdWx0VHlwZS51
bmlmeU5vZGUucmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChub2RlLm9yaWdpbik7CisgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBXVHlwZUVycm9y
KSkKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgZXJyb3JGb3JBbmQgPSBl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGUucmVzdWx0VHlwZUZvckdl
dCAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yQW5kKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcigKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsCisgICAg
ICAgICAgICAgICAgIkNhbm5vdCByZXNvbHZlIGFjY2VzczsgdHJpZWQgYnktdmFsdWU6XG4iICsK
KyAgICAgICAgICAgICAgICBlcnJvckZvckdldC5tZXNzYWdlICsgIlxuIiArCisgICAgICAgICAg
ICAgICAgImFuZCB0cmllZCBieS1wb2ludGVyOlxuIiArCisgICAgICAgICAgICAgICAgZXJyb3JG
b3JBbmQubWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLnJl
c3VsdFR5cGVGb3JHZXQgJiYgbm9kZS5yZXN1bHRUeXBlRm9yQW5kCisgICAgICAgICAgICAmJiAh
bm9kZS5yZXN1bHRUeXBlRm9yR2V0LmVxdWFscyhub2RlLnJlc3VsdFR5cGVGb3JBbmQpKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
UmVzdWx0IHR5cGUgcmVzb2x2ZWQgYnktdmFsdWUgKCIgKyBub2RlLnJlc3VsdFR5cGVGb3JHZXQg
KyAiKSBkb2VzIG5vdCBtYXRjaCByZXN1bHQgdHlwZSByZXNvbHZlZCBieS1wb2ludGVyICgiICsg
bm9kZS5yZXN1bHRUeXBlRm9yQW5kICsgIikiKTsKKyAgICAgICAgCisgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVzb2x2ZSgKKyAgICAgICAg
ICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkcywgdGhpcy5fY3Vy
cmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICBub2RlLnNldEZ1
bmNOYW1lLCBbXSwgW25vZGUuYmFzZSwgLi4uZXh0cmFBcmdzLCBudWxsXSwgW2Jhc2VUeXBlLCAu
Li5leHRyYUFyZ1R5cGVzLCBub2RlLnJlc3VsdFR5cGVdLCBudWxsKTsKKyAgICAgICAgICAgIG5v
ZGUuY2FsbEZvclNldCA9IHJlc3VsdC5jYWxsOworICAgICAgICAgICAgaWYgKCFyZXN1bHQucmVz
dWx0VHlwZS5lcXVhbHMoYmFzZVR5cGUpKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlJlc3VsdCB0eXBlIG9mIHNldHRlciAi
ICsgcmVzdWx0LmNhbGwuZnVuYyArICIgaXMgbm90IHRoZSBiYXNlIHR5cGUgIiArIGJhc2VUeXBl
KTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9m
IFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICBub2Rl
LmVycm9yRm9yU2V0ID0gZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbGV0IGZpZWxk
ID0gdW5kZXJseWluZ1N0cnVjdC5maWVsZEJ5TmFtZShub2RlLmZpZWxkTmFtZSk7Ci0gICAgICAg
IGlmICghZmllbGQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJGaWVsZCAiICsgbm9kZS5maWVsZE5hbWUgKyAiIG5vdCBmb3VuZCBp
biAiICsgc3RydWN0VHlwZSk7Ci0gICAgICAgIHJldHVybiBmaWVsZC50eXBlOworICAgICAgICBy
ZXR1cm4gbm9kZS5yZXN1bHRUeXBlOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Np
b24obm9kZSkKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIG5v
ZGUudHlwZSA9IG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmICghbm9kZS50
eXBlKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEaWQgbm90IGdldCB0eXBlIGZvciBu
b2RlOiAiICsgbm9kZS5hcmd1bWVudCk7Ci0gICAgICAgIHJldHVybiBub2RlLmJvZHkudmlzaXQo
dGhpcyk7CisgICAgICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyku
dW5pZnlOb2RlOworICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFj
Y2Vzcyhub2RlLCBzdHJ1Y3RUeXBlLCBbXSwgW10pOworICAgIH0KKyAgICAKKyAgICB2aXNpdElu
ZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGFycmF5VHlwZSA9IG5vZGUu
YXJyYXkudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBsZXQgaW5kZXhUeXBlID0gbm9k
ZS5pbmRleC52aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0aGlzLl9maW5p
c2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIGFycmF5VHlwZSwgW25vZGUuaW5kZXhdLCBb
aW5kZXhUeXBlXSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKQEAg
LTMyMiwxMCArNDEwLDEwIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgICAgIHJlc3VsdCA9IGV4cHJlc3Npb24udmlzaXQodGhpcyk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAg
IHsKLSAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGVzID0gbm9kZS50eXBlQXJndW1lbnRzLm1h
cCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgbGV0
IHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0
eXBlQXJndW1lbnQudmlzaXQodGhpcykpOwogICAgICAgICBsZXQgYXJndW1lbnRUeXBlcyA9IG5v
ZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiB7CiAgICAgICAgICAgICBsZXQgbmV3QXJn
dW1lbnQgPSBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgICAgIGlmICghbmV3QXJndW1l
bnQpCkBAIC0zMzMsNzcgKzQyMSwxMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7
CiAgICAgICAgICAgICByZXR1cm4gbmV3QXJndW1lbnQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkp
OwogICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBoYW5k
bGUgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yJltdIGlzIGNhbGxlZCB3aXRoIGEgdHlwZSB0aGF0
IGlzbid0IHN1ZmZpY2llbnRseQotICAgICAgICAvLyByZWZlcmVuY2V5LgotICAgICAgICBpZiAo
bm9kZS5uYW1lID09ICJvcGVyYXRvciZbXSIpIHsKLSAgICAgICAgICAgIGxldCBhcmdUeXBlID0g
YXJndW1lbnRUeXBlc1swXS51bmlmeU5vZGU7Ci0gICAgICAgICAgICBpZiAoYXJnVHlwZSBpbnN0
YW5jZW9mIFB0clR5cGUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMgbm90IHZhbGlkIik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcmdUeXBlIGluc3RhbmNlb2YgQXJyYXlU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcgTWFrZUFy
cmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5hcmd1bWVudExpc3RbMF0pOwotICAg
ICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdLm51bUVsZW1lbnRzID0gYXJnVHlwZS5u
dW1FbGVtZW50czsKLSAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IEFycmF5
UmVmVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ1R5cGUuZWxlbWVudFR5cGUpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmICghKGFyZ1R5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKSB7
Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcgTWFrZVB0ckV4cHJl
c3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0WzBdKTsKLSAgICAgICAgICAgICAg
ICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IFB0clR5cGUobm9kZS5vcmlnaW4sICJ0aHJlYWQiLCBh
cmd1bWVudFR5cGVzWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKICAg
ICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlczsKICAgICAgICAgaWYgKG5v
ZGUucmV0dXJuVHlwZSkKICAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsK
LSAgICAgICAgCi0gICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7Ci0gICAgICAgIGxldCBmYWls
dXJlcyA9IFtdOwotICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHRoaXMuX2N1cnJl
bnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGlmICghKHR5cGVQYXJh
bWV0ZXIgaW5zdGFuY2VvZiBUeXBlVmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnByb3RvY29sKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbGV0IHNpZ25hdHVyZXMgPQotICAgICAgICAgICAg
ICAgIHR5cGVQYXJhbWV0ZXIucHJvdG9jb2wucHJvdG9jb2xEZWNsLnNpZ25hdHVyZXNCeU5hbWVX
aXRoVHlwZVZhcmlhYmxlKG5vZGUubmFtZSwgdHlwZVBhcmFtZXRlcik7Ci0gICAgICAgICAgICBp
ZiAoIXNpZ25hdHVyZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBv
dmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgbm9kZS50eXBlQXJndW1l
bnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVyblR5cGUpOwotICAgICAgICAgICAgaWYgKG92
ZXJsb2FkLmZ1bmMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmYWlsdXJl
cy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKLSAgICAgICAgICAgIG92ZXJsb2FkID0gbnVs
bDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW92ZXJsb2FkKSB7Ci0gICAgICAgICAgICBvdmVy
bG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCi0gICAgICAgICAgICAgICAgbm9kZS5wb3NzaWJs
ZU92ZXJsb2Fkcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVy
blR5cGUpOwotICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7Ci0gICAgICAgICAgICAg
ICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Ci0gICAgICAgICAgICAgICAg
bGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdpdGggIjsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyBub2RlLnR5cGVBcmd1bWVu
dHMgKyAiPiBhbmQgIjsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1bWVudCB0eXBl
cyAoIiArIGFyZ3VtZW50VHlwZXMgKyAiKSI7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmV0
dXJuVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5kIHJldHVybiB0eXBl
ICIgKyBub2RlLnJldHVyblR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lkZXJlZDpcbiIg
KyBmYWlsdXJlcy5qb2luKCJcbiIpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudFR5cGVzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgdHlwZUFyZ3VtZW50VHlwZSA9IHR5cGVBcmd1
bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBvdmVybG9hZC5m
dW5jLnR5cGVQYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRlciBp
bnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxzV2l0aENvbW1p
dCh0eXBlQXJndW1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0
ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBlIGFyZ3VtZW50
IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0eXBlQXJndW1l
bnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlc1tpXTsKLSAg
ICAgICAgICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gb3ZlcmxvYWQuZnVuYy5wYXJhbWV0ZXJzW2ld
LnR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCi0gICAgICAgICAgICAgICAgb3ZlcmxvYWQu
ZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250ZXh0KTsKLSAgICAg
ICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVudFR5cGUuZXF1YWxzV2l0aENvbW1pdChwYXJhbWV0
ZXJUeXBlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyArICIgYXJndW1lbnQg
YW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0ZXIgdHlwZSBhcmd1bWVudCBzdWJzdGl0
dXRpb246IGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50VHlwZSArICIsIHBhcmFtZXRlciA9ICIgKyBw
YXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm9kZS5yZXNvbHZlKG92
ZXJsb2FkKTsKKworICAgICAgICBsZXQgcmVzdWx0ID0gbm9kZS5yZXNvbHZlKG5vZGUucG9zc2li
bGVPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsIHR5cGVB
cmd1bWVudHMpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIH0KIApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHByZXNzaW9uLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qcwkocmV2
aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHBy
ZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBAIGNsYXNzIENvbW1hRXhw
cmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24KICAgICAKICAgICBnZXQgbGlzdCgpIHsgcmV0dXJu
IHRoaXMuX2xpc3Q7IH0KICAgICAKKyAgICAvLyBOT1RFOiBJdCdzIHN1cGVyIHRlbXB0aW5nIHRv
IHNheSB0aGF0IENvbW1hRXhwcmVzc2lvbiBpcyBhbiBsVmFsdWUgaWYgaXRzIGxhc3QgZW50cnkg
aXMgYW4gbFZhbHVlLiBCdXQsCisgICAgLy8gUHJvcGVydHlSZXNvbHZlciByZWxpZXMgb24gdGhp
cyBub3QgYmVpbmcgdGhlIGNhc2UuCisgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuICIoIiArIHRoaXMubGlzdC50b1N0cmluZygpICsgIikiOwpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RlcmVmZXJlbmNlRXhwcmVzc2lv
bi5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIg
QEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgRGVyZWZlcmVuY2VFeHByZXNzaW9uIGV4dGVuZHMg
RXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBwdHIpCisgICAgY29uc3RydWN0
b3Iob3JpZ2luLCBwdHIsIHR5cGUgPSBudWxsLCBhZGRyZXNzU3BhY2UgPSBudWxsKQogICAgIHsK
ICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fcHRyID0gcHRyOworICAgICAg
ICB0aGlzLnR5cGUgPSB0eXBlOworICAgICAgICB0aGlzLmFkZHJlc3NTcGFjZSA9IGFkZHJlc3NT
cGFjZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IHB0cigpIHsgcmV0dXJuIHRoaXMuX3B0cjsgfQpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpz
CShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RF
eHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxOSArMjQsMjIgQEAKICAqLwogInVz
ZSBzdHJpY3QiOwogCi1jbGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7Citj
bGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIHsKICAg
ICBjb25zdHJ1Y3RvcihvcmlnaW4sIHN0cnVjdCwgZmllbGROYW1lKQogICAgIHsKLSAgICAgICAg
c3VwZXIob3JpZ2luKTsKLSAgICAgICAgdGhpcy5fc3RydWN0ID0gc3RydWN0OworICAgICAgICBz
dXBlcihvcmlnaW4sIHN0cnVjdCk7CiAgICAgICAgIHRoaXMuX2ZpZWxkTmFtZSA9IGZpZWxkTmFt
ZTsKICAgICB9CiAgICAgCi0gICAgZ2V0IHN0cnVjdCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdDsg
fQorICAgIGdldCBzdHJ1Y3QoKSB7IHJldHVybiB0aGlzLmJhc2U7IH0KICAgICBnZXQgZmllbGRO
YW1lKCkgeyByZXR1cm4gdGhpcy5fZmllbGROYW1lOyB9CiAgICAgZ2V0IGlzTFZhbHVlKCkgeyBy
ZXR1cm4gdGhpcy5zdHJ1Y3QuaXNMVmFsdWU7IH0KICAgICBnZXQgYWRkcmVzc1NwYWNlKCkgeyBy
ZXR1cm4gdGhpcy5zdHJ1Y3QuYWRkcmVzc1NwYWNlOyB9CiAgICAgCisgICAgZ2V0IGdldEZ1bmNO
YW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFtZTsgfQorICAgIGdldCBh
bmRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvciYuIiArIHRoaXMuZmllbGROYW1lOyB9Cisg
ICAgZ2V0IHNldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFt
ZSArICI9IjsgfQorICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiAi
KCIgKyB0aGlzLnN0cnVjdCArICIuIiArIHRoaXMuZmllbGROYW1lICsgIikiOwpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxMiArNjAsMTQgQEAgY2xhc3MgRUJ1ZmZlciB7CiAgICAgZ2V0KGluZGV4KQogICAg
IHsKICAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl9hcnJheS5sZW5ndGgp
Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm91dCBvZiBib3VuZHMgYnVmZmVyIGFjY2Vz
cyIpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJPdXQgb2YgYm91bmRzIGJ1ZmZlciBh
Y2Nlc3MgKGJ1ZmZlciA9ICIgKyB0aGlzICsgIiwgaW5kZXggPSAiICsgaW5kZXggKyAiKSIpOwog
ICAgICAgICByZXR1cm4gdGhpcy5fYXJyYXlbaW5kZXhdOwogICAgIH0KICAgICAKICAgICBzZXQo
aW5kZXgsIHZhbHVlKQogICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0
aGlzLl9hcnJheS5sZW5ndGgpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm91dCBvZiBi
b3VuZHMgYnVmZmVyIGFjY2VzcyAoYnVmZmVyID0gIiArIHRoaXMgKyAiLCBpbmRleCA9ICIgKyBp
bmRleCArICIpIik7CiAgICAgICAgIHRoaXMuX2FycmF5W2luZGV4XSA9IHZhbHVlOwogICAgIH0K
ICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJC
dWlsZGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9FQnVmZmVyQnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTA0LDExICsxMDQsOSBA
QCBjbGFzcyBFQnVmZmVyQnVpbGRlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBzdXBlci52
aXNpdExvZ2ljYWxOb3Qobm9kZSk7CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lv
bihub2RlKQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7CiAgICAgICAg
IHRoaXMuX2NyZWF0ZUVQdHJGb3JOb2RlKG5vZGUpOwotICAgICAgICBub2RlLmFyZ3VtZW50LnZp
c2l0KHRoaXMpOwotICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAog
ICAgIHZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNiArMTAyLDExIEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAg
ICAgICByZXR1cm4gdGFyZ2V0OwogICAgIH0KICAgICAKKyAgICB2aXNpdElkZW50aXR5RXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMp
OworICAgIH0KKyAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAg
IHsKICAgICAgICAgbGV0IHB0ciA9IG5vZGUucHRyLnZpc2l0KHRoaXMpLmxvYWRWYWx1ZSgpOwpA
QCAtMTEyLDcgKzExNyw4IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAg
IAogICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBub2RlLmVQdHIuYm94KG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpKTsKKyAgICAgICAgbGV0IHB0
ciA9IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpOworICAgICAgICByZXR1cm4gbm9kZS5lUHRyLmJv
eChwdHIpOwogICAgIH0KICAgICAKICAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9k
ZSkKQEAgLTEyNSwxMiArMTMxLDYgQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7
CiAgICAgICAgIHJldHVybiBub2RlLmVQdHIuYm94KG5ldyBFQXJyYXlSZWYobm9kZS5sVmFsdWUu
dmlzaXQodGhpcykubG9hZFZhbHVlKCksIDEpKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RF
eHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgc3RydWN0UHRyID0gbm9kZS5zdHJ1
Y3QudmlzaXQodGhpcyk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3RQdHIucGx1cyhub2RlLmZpZWxk
Lm9mZnNldCk7Ci0gICAgfQotICAgIAogICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCiAg
ICAgewogICAgICAgICBsZXQgcmVzdWx0OwpAQCAtMjMxLDEwICsyMzEsOSBAQCBjbGFzcyBFdmFs
dWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgQ29udGludWVFeGNlcHRpb247
CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0QW5v
bnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAgICAgIG5vZGUuZVB0ci5jb3B5RnJvbShu
b2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMpLCBub2RlLnR5cGUuc2l6ZSk7Ci0gICAgICAgIHJldHVy
biBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUudHlwZS5wb3B1bGF0ZURlZmF1
bHRWYWx1ZShub2RlLmVQdHIuYnVmZmVyLCBub2RlLmVQdHIub2Zmc2V0KTsKICAgICB9CiAgICAg
CiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQpAQCAtMjQ3LDYgKzI0Niw4IEBAIGNsYXNz
IEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgaWYgKCF0eXBlIHx8ICFh
cmd1bWVudCkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlw
ZSBvciBhcmd1bWVudDsgaSA9ICIgKyBpICsgIiwgYXJndW1lbnQgPSAiICsgYXJndW1lbnQgKyAi
LCB0eXBlID0gIiArIHR5cGUgKyAiOyBpbiAiICsgbm9kZSk7CiAgICAgICAgICAgICBsZXQgYXJn
dW1lbnRWYWx1ZSA9IGFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAgICAgICAgICAgaWYgKCFhcmd1
bWVudFZhbHVlKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhcmd1bWVu
dCB2YWx1ZSwgaSA9ICIgKyBpICsgIiwgbm9kZSA9ICIgKyBub2RlKTsKICAgICAgICAgICAgIGNh
bGxBcmd1bWVudHMucHVzaCgoKSA9PiB0aGlzLl9zbmFwc2hvdCh0eXBlLCBudWxsLCBhcmd1bWVu
dFZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDE2IEBAIGNsYXNzIEV4cHJlc3Npb25GaW5kZXIgZXh0
ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CiAgICAgfQogICAg
IAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SWRlbnRpdHlF
eHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9jYWxsYmFjayhub2RlKTsKKyAg
ICB9CisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAg
dGhpcy5fY2FsbGJhY2sobm9kZSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9GaW5kSGlnaFpvbWJpZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRmluZEhpZ2hab21iaWVzLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0ZpbmRIaWdoWm9tYmllcy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKQorewor
ICAgIHByb2dyYW0udmlzaXQobmV3IEhpZ2hab21iaWVGaW5kZXIoKSk7Cit9CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHJldmlzaW9uIDIyMjEyMykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgRm9yTG9vcCBleHRlbmRzIE5vZGUgewogCiAgICAgdG9T
dHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJmb3IgKCIgKyAodGhpcy5pbml0aWFsaXph
dGlvbiA/IHRoaXMuaW5pdGlhbGl6YXRpb24gOiAiICIpICsgIjsgIiArICh0aGlzLmNvbmRpdGlv
biA/IHRoaXMuY29uZGl0aW9uIDogIiIpICsgIjsgIiArICh0aGlzLmluY3JlbWVudCA/IHRoaXMu
aW5jcmVtZW50IDogIiIpICsgIikgIiArIGJvZHk7CisgICAgICAgIHJldHVybiAiZm9yICgiICsg
KHRoaXMuaW5pdGlhbGl6YXRpb24gPyB0aGlzLmluaXRpYWxpemF0aW9uIDogIiAiKSArICI7ICIg
KyAodGhpcy5jb25kaXRpb24gPyB0aGlzLmNvbmRpdGlvbiA6ICIiKSArICI7ICIgKyAodGhpcy5p
bmNyZW1lbnQgPyB0aGlzLmluY3JlbWVudCA6ICIiKSArICIpICIgKyB0aGlzLmJvZHk7CiAgICAg
fQogfTsKIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMiBAQCBjbGFzcyBGdW5jIGV4dGVuZHMgTm9kZSB7CiAg
ICAgewogICAgICAgICBpZiAoIShvcmlnaW4gaW5zdGFuY2VvZiBMZXhlclRva2VuKSkKICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIG9yaWdpbjogIiArIG9yaWdpbik7CisgICAgICAg
IGZvciAobGV0IHBhcmFtZXRlciBvZiBwYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICBpZiAoIXBh
cmFtZXRlcikKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcGFyYW1ldGVy
Iik7CisgICAgICAgICAgICBpZiAoIXBhcmFtZXRlci50eXBlKQorICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTnVsbCBwYXJhbWV0ZXIgdHlwZSIpOworICAgICAgICB9CiAgICAgICAg
IHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKICAgICAgICAgdGhpcy5f
bmFtZSA9IG5hbWU7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5z
dGFudGlhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0Z1bmNJbnN0YW50aWF0b3IuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTc1
LDMzICs3NSwzOCBAQCBjbGFzcyBGdW5jSW5zdGFudGlhdG9yIHsKICAgICAgICAgICAgICAgICAg
ICAgbGV0IG92ZXJsb2FkID0gcmVzb2x2ZU92ZXJsb2FkSW1wbChyZXN1bHQucG9zc2libGVPdmVy
bG9hZHMsIHJlc3VsdC50eXBlQXJndW1lbnRzLCByZXN1bHQuYXJndW1lbnRUeXBlcywgcmVzdWx0
LnJldHVyblR5cGVGb3JPdmVybG9hZFJlc29sdXRpb24pOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoIW92ZXJsb2FkLmZ1bmMpCiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkNvdWxkIG5vdCByZXNvbHZlIHByb3RvY29sIHNpZ25hdHVyZSBmdW5jdGlvbiBjYWxsIGR1
cmluZyBpbnN0YW50aWF0aW9uOiAiICsgcmVzdWx0LmZ1bmMgKyAob3ZlcmxvYWQuZmFpbHVyZXMu
bGVuZ3RoID8gIjsgdHJpZWQ6XG4iICsgb3ZlcmxvYWQuZmFpbHVyZXMuam9pbigiXG4iKSA6ICIi
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKG92ZXJsb2FkKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmVUb092ZXJsb2FkKG92ZXJsb2FkKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dC5mdW5jLmlzTmF0aXZlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQubmF0aXZlRnVuY0lu
c3RhbmNlID0gdGhpc0luc3RhbnRpYXRvci5nZXRVbmlxdWUocmVzdWx0LmZ1bmMsIHJlc3VsdC5h
Y3R1YWxUeXBlQXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBsZXQgc3Vic3RpdHV0aW9uID0gbmV3IEluc3RhbnRpYXRpb25TdWJzdGl0dXRpb24oZnVuYy50
eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7CisgICAgICAgIGxldCBpbnN0YW50aWF0ZUlt
bWVkaWF0ZXMgPSBuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCk7CiAgICAgICAgIAotICAgICAg
ICBjbGFzcyBJbnN0YW50aWF0ZSBleHRlbmRzIFZpc2l0b3JCYXNlIHsKKyAgICAgICAgY2xhc3Mg
SW5zdGFudGlhdGUgewogICAgICAgICAgICAgdmlzaXRGdW5jRGVmKGZ1bmMpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdW5jRGVmKAogICAgICAgICAgICAgICAg
ICAgICBmdW5jLm9yaWdpbiwgZnVuYy5uYW1lLAotICAgICAgICAgICAgICAgICAgICBmdW5jLnJl
dHVyblR5cGUudmlzaXQoc3Vic3RpdHV0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5y
ZXR1cm5UeXBlLnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlhdGVz
KSwKICAgICAgICAgICAgICAgICAgICAgW10sIC8vIFdlJ3JlIGluc3RhbnRpYXRlZCBzbyB3ZSBu
byBsb25nZXIgdGFrZSB0eXBlIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMu
cGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChzdWJzdGl0dXRpb24p
KSwKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5ib2R5LnZpc2l0KHN1YnN0aXR1dGlvbikpOwor
ICAgICAgICAgICAgICAgICAgICBmdW5jLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJh
bWV0ZXIudmlzaXQoc3Vic3RpdHV0aW9uKS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpKSwK
KyAgICAgICAgICAgICAgICAgICAgZnVuYy5ib2R5LnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQo
aW5zdGFudGlhdGVJbW1lZGlhdGVzKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHZpc2l0TmF0aXZlRnVuYyhmdW5jKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBuZXcgTmF0aXZlRnVuY0luc3RhbmNlKAogICAgICAgICAgICAgICAgICAg
ICBmdW5jLAotICAgICAgICAgICAgICAgICAgICBmdW5jLnJldHVyblR5cGUudmlzaXQoc3Vic3Rp
dHV0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0
ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHN1YnN0aXR1dGlvbikpLAotICAgICAgICAgICAgICAgICAg
ICBmdW5jLmlzQ2FzdCk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMucmV0dXJuVHlwZS52aXNp
dChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyksCisgICAgICAgICAg
ICAgICAgICAgIGZ1bmMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNp
dChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcykpLAorICAgICAgICAg
ICAgICAgICAgICBmdW5jLmlzQ2FzdCwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5pbnN0YW50
aWF0ZUltcGxlbWVudGF0aW9uKHN1YnN0aXR1dGlvbikpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGxldCByZXN1bHRpbmdGdW5jID0gZnVuYy52aXNpdChuZXcgSW5zdGFudGlh
dGUoKSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9IaWdoWm9tYmllRmlu
ZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0hpZ2ha
b21iaWVGaW5kZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSGlnaFpvbWJpZUZpbmRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmlj
dCI7CisKKy8vIElmIGEgaGlnaC1sZXZlbCBjb25zdHJ1Y3Qgc29tZWhvdyBtYW5hZ2VzIHRvIGxp
dmUgb24gd2hlbiB3ZSdyZSBsb3dlcmVkLCBpdCdzIGEgaGlnaCB6b21iaWUuCitjbGFzcyBIaWdo
Wm9tYmllRmluZGVyIGV4dGVuZHMgVmlzaXRvciB7CisgICAgX2ZvdW5kKG5vZGUpCisgICAgewor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIjogSGln
aCB6b21iaWU6ICIgKyBub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9u
KG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9mb3VuZChub2RlKTsKKyAgICB9CisgICAgCisg
ICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2ZvdW5k
KG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCisgICAg
eworICAgICAgICBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOworICAgIH0KK30KKwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSWRlbnRpdHlFeHByZXNzaW9uLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lkZW50aXR5RXhw
cmVzc2lvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JZGVudGl0eUV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3Qi
OworCitjbGFzcyBJZGVudGl0eUV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKKyAgICBj
b25zdHJ1Y3Rvcih0YXJnZXQpCisgICAgeworICAgICAgICBzdXBlcih0YXJnZXQub3JpZ2luKTsK
KyAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0OworICAgIH0KKyAgICAKKyAgICBnZXQgdGFy
Z2V0KCkgeyByZXR1cm4gdGhpcy5fdGFyZ2V0OyB9CisgICAgCisgICAgZ2V0IHVuaWZ5Tm9kZSgp
IHsgcmV0dXJuIHRoaXMudGFyZ2V0LnVuaWZ5Tm9kZTsgfQorICAgIGdldCBpc0NvbnN0ZXhwcigp
IHsgcmV0dXJuIHRoaXMudGFyZ2V0LmlzQ29uc3RleHByOyB9CisgICAgZ2V0IGlzTFZhbHVlKCkg
eyByZXR1cm4gdGhpcy50YXJnZXQuaXNMVmFsdWU7IH0KKyAgICBnZXQgYWRkcmVzc1NwYWNlKCkg
eyByZXR1cm4gdGhpcy50YXJnZXQuYWRkcmVzc1NwYWNlOyB9CisgICAgCisgICAgdG9TdHJpbmco
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICIoIiArIHRoaXMudGFyZ2V0ICsgIikiOworICAgIH0K
K30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9u
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZGV4RXhw
cmVzc2lvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JbmRleEV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOwor
CitjbGFzcyBJbmRleEV4cHJlc3Npb24gZXh0ZW5kcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24g
eworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgYXJyYXksIGluZGV4KQorICAgIHsKKyAgICAgICAg
c3VwZXIob3JpZ2luLCBhcnJheSk7CisgICAgICAgIHRoaXMuX2luZGV4ID0gaW5kZXg7CisgICAg
fQorICAgIAorICAgIGdldCBhcnJheSgpIHsgcmV0dXJuIHRoaXMuYmFzZTsgfQorICAgIGdldCBp
bmRleCgpIHsgcmV0dXJuIHRoaXMuX2luZGV4OyB9CisgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1
cm4gdGhpcy5hcnJheS5pc0xWYWx1ZTsgfQorICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVy
biB0aGlzLmFycmF5LmFkZHJlc3NTcGFjZTsgfQorICAgIAorICAgIGdldCBnZXRGdW5jTmFtZSgp
IHsgcmV0dXJuICJvcGVyYXRvcltdIjsgfQorICAgIGdldCBhbmRGdW5jTmFtZSgpIHsgcmV0dXJu
ICJvcGVyYXRvciZbXSI7IH0KKyAgICBnZXQgc2V0RnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0
b3JbXT0iOyB9CisKKyAgICB1cGRhdGVDYWxscygpCisgICAgeworICAgICAgICBpZiAodGhpcy5j
YWxsRm9yR2V0KQorICAgICAgICAgICAgdGhpcy5jYWxsRm9yR2V0LmFyZ3VtZW50TGlzdFsxXSA9
IHRoaXMuaW5kZXg7CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICB0
aGlzLmNhbGxGb3JBbmQuYXJndW1lbnRMaXN0WzFdID0gdGhpcy5pbmRleDsKKyAgICAgICAgaWYg
KHRoaXMuY2FsbEZvclNldCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvclNldC5hcmd1bWVudExp
c3RbMV0gPSB0aGlzLmluZGV4OworICAgICAgICBzdXBlci51cGRhdGVDYWxscygpOworICAgIH0K
KworICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiKCIgKyB0aGlzLmFycmF5
ICsgIlsiICsgdGhpcy5pbmRleCArICJdKSI7CisgICAgfQorfQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKHJldmlzaW9u
IDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JD
YWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGZ1bmN0aW9uIGluZmVyVHlw
ZXNGb3JDYWxsKGZ1bmMsIHR5cGVBcmcKICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldKQog
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIGFyZ3VtZW50IHR5cGUgYXQgaSA9ICIg
KyBpKTsKICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldLnVuaWZ5KHVuaWZpY2F0aW9uQ29u
dGV4dCwgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHtmYWls
dXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAo
aSArIDEpICsgIiAiICsgKGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIg
IiArIGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lIDogIiIpICsgIiBkb2VzIG5vdCBtYXRjaCAocGFz
c2VkICIgKyBhcmd1bWVudFR5cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJz
W2ldLnR5cGUgKyAiKSIpfTsKKyAgICAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92ZXJs
b2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIkFyZ3VtZW50ICMiICsgKGkgKyAxKSArICIgIiAr
IChmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSA/ICJmb3IgcGFyYW1ldGVyICIgKyBmdW5jLnBhcmFt
ZXRlcnNbaV0ubmFtZSArICIgIiA6ICIiKSArICJkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBh
cmd1bWVudFR5cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUg
KyAiKSIpfTsKICAgICB9CiAgICAgaWYgKHJldHVyblR5cGUgJiYgIXJldHVyblR5cGUudW5pZnko
dW5pZmljYXRpb25Db250ZXh0LCBmdW5jLnJldHVyblR5cGUpKQogICAgICAgICByZXR1cm4ge2Zh
aWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJSZXR1cm4gdHlwZSAi
ICsgZnVuYy5yZXR1cm5UeXBlICsgIiBkb2VzIG5vdCBtYXRjaCAiICsgcmV0dXJuVHlwZSl9OwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5qcwkocmV2aXNpb24gMjIy
MTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw4ICs0Myw2IEBAIGZ1bmN0aW9uIF9pbmxpbmVGdW5jdGlvbihwcm9ncmFt
LCBmdW5jLCAKICAgICBpZiAoZnVuYy5pbmxpbmVkIHx8IGZ1bmMuaXNOYXRpdmUpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBmdW5jLnJld3JpdGUobmV3IEluc3RhbnRpYXRlSW1tZWRpYXRl
cygpKTsKLSAgICAKICAgICAvLyBUaGlzIGlzIHRoZSBwcmVjaXNlIHRpbWUgd2hlbiB3ZSBjYW4g
YnVpbGQgRUJ1ZmZlcnMgaW4gb3JkZXIgdG8gZ2V0IHRoZW0gdG8gYmUgdW5pcXVlZCBieQogICAg
IC8vIHR5cGUgaW5zdGFudGlhdGlvbiBidXQgbm90aGluZyBlbHNlLgogICAgIGZ1bmMudmlzaXQo
bmV3IFN0cnVjdExheW91dEJ1aWxkZXIoKSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lubGluZXIuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0lubGluZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTMyLDI0ICszMiwxNSBA
QCBjbGFzcyBJbmxpbmVyIGV4dGVuZHMgUmV3cml0ZXIgewogICAgICAgICB0aGlzLl92aXNpdGlu
ZyA9IHZpc2l0aW5nOwogICAgIH0KICAgICAKLSAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkK
LSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBzdXBlci52aXNpdERvdEV4cHJlc3Npb24obm9k
ZSk7Ci0gICAgICAgIHJlc3VsdC5maWVsZCA9IHJlc3VsdC5zdHJ1Y3RUeXBlLnVuaWZ5Tm9kZS5m
aWVsZEJ5TmFtZShyZXN1bHQuZmllbGROYW1lKTsKLSAgICAgICAgaWYgKHJlc3VsdC5maWVsZC5v
ZmZzZXQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW4tbGFpZC1vdXQg
ZmllbGQ6ICIgKyByZXN1bHQuZmllbGQgKyAiIChpbiAiICsgcmVzdWx0LnN0cnVjdFR5cGUgKyAi
KSIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKICAgICB2aXNpdENhbGxF
eHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlzaXRD
YWxsRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5uYXRpdmVGdW5jSW5zdGFu
Y2UpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gdGhpcy5fdmlz
aXRpbmcuZG9WaXNpdChub2RlLmZ1bmMsICgpID0+IHsKICAgICAgICAgICAgIGxldCBmdW5jID0g
dGhpcy5fcHJvZ3JhbS5mdW5jSW5zdGFudGlhdG9yLmdldFVuaXF1ZShyZXN1bHQuZnVuYywgcmVz
dWx0LmFjdHVhbFR5cGVBcmd1bWVudHMpOwotICAgICAgICAgICAgaWYgKGZ1bmMuaXNOYXRpdmUp
IHsKLSAgICAgICAgICAgICAgICByZXN1bHQubmF0aXZlRnVuY0luc3RhbmNlID0gZnVuYzsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGZ1bmMuaXNOYXRpdmUpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4
cGVjdGVkIG5hdGl2ZSBmdW5jOiAiICsgZnVuYyk7CiAgICAgICAgICAgICBfaW5saW5lRnVuY3Rp
b24odGhpcy5fcHJvZ3JhbSwgZnVuYywgdGhpcy5fdmlzaXRpbmcpOwogICAgICAgICAgICAgbGV0
IHJlc3VsdGluZ0Jsb2NrID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAogICAgICAgICAgICAgICAg
IHJlc3VsdC5vcmlnaW4sIGZ1bmMucmV0dXJuVHlwZSwgcmVzdWx0LmFyZ3VtZW50TGlzdCwgZnVu
Yy5wYXJhbWV0ZXJzLCBmdW5jLmJvZHkpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSW50cmluc2ljcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbnRyaW5zaWNzLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNiAr
MTcyLDg4IEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgfSk7CiAgICAgICAgIAog
ICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0b3Im
PD4oaW50LGludCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVu
Yy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAg
ICBFUHRyLmJveChsZWZ0LmxvYWRWYWx1ZSgpICYgcmlnaHQubG9hZFZhbHVlKCkpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAg
Im5hdGl2ZSB1aW50IG9wZXJhdG9yJjw+KHVpbnQsdWludCkiLAorICAgICAgICAgICAgZnVuYyA9
PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRd
KSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJveCgobGVmdC5sb2FkVmFsdWUoKSAmIHJp
Z2h0LmxvYWRWYWx1ZSgpKSA+Pj4gMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAg
ICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0aXZlIGludCBvcGVyYXRvcnw8Pihp
bnQsaW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmlt
cGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQ
dHIuYm94KGxlZnQubG9hZFZhbHVlKCkgfCByaWdodC5sb2FkVmFsdWUoKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0
aXZlIHVpbnQgb3BlcmF0b3J8PD4odWludCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsK
KyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+
CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KChsZWZ0LmxvYWRWYWx1ZSgpIHwgcmlnaHQu
bG9hZFZhbHVlKCkpID4+PiAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
dGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgaW50IG9wZXJhdG9yXjw+KGludCxp
bnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVt
ZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5i
b3gobGVmdC5sb2FkVmFsdWUoKSBeIHJpZ2h0LmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUg
dWludCBvcGVyYXRvcl48Pih1aW50LHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAg
ICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAg
ICAgICAgICAgICAgICAgICAgRVB0ci5ib3goKGxlZnQubG9hZFZhbHVlKCkgXiByaWdodC5sb2Fk
VmFsdWUoKSkgPj4+IDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlz
Ll9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0b3I8PDw+KGludCx1aW50
KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVu
dGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94
KGxlZnQubG9hZFZhbHVlKCkgPDwgcmlnaHQubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSB1
aW50IG9wZXJhdG9yPDw8Pih1aW50LHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAg
ICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAg
ICAgICAgICAgICAgICAgICAgRVB0ci5ib3goKGxlZnQubG9hZFZhbHVlKCkgPDwgcmlnaHQubG9h
ZFZhbHVlKCkpID4+PiAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhp
cy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgaW50IG9wZXJhdG9yPj48PihpbnQsdWlu
dCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1l
bnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJv
eChsZWZ0LmxvYWRWYWx1ZSgpID4+IHJpZ2h0LmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUg
dWludCBvcGVyYXRvcj4+PD4odWludCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAg
ICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+Cisg
ICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkgPj4+IHJpZ2h0Lmxv
YWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFw
LnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgaW50IG9wZXJhdG9yfjw+KGludCkiLAorICAgICAg
ICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChb
dmFsdWVdKSA9PiBFUHRyLmJveCh+dmFsdWUubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSB1
aW50IG9wZXJhdG9yfjw+KHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAg
ICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3ZhbHVlXSkgPT4gRVB0ci5ib3goKH52YWx1
ZS5sb2FkVmFsdWUoKSkgPj4+IDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAg
ICB0aGlzLl9tYXAuc2V0KAogICAgICAgICAgICAgIm5hdGl2ZSBib29sIG9wZXJhdG9yPT08Pihp
bnQsaW50KSIsCiAgICAgICAgICAgICBmdW5jID0+IHsKICAgICAgICAgICAgICAgICBmdW5jLmlt
cGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CkBAIC0yNDgsMzAgKzMzMCwzMiBAQCBj
bGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2Fk
VmFsdWUoKSA+PSByaWdodC5sb2FkVmFsdWUoKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
Ci0gICAgICAgIGxldCBhcnJheUVsZW1lbnRQdHIgPSBmdW5jID0+IHsKLSAgICAgICAgICAgIGZ1
bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZiwgaW5kZXhdLCBub2RlKSA9PiB7Ci0gICAgICAgICAg
ICAgICAgcmVmID0gcmVmLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICghcmVmKQot
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7Ci0gICAgICAgICAgICAgICAgaW5kZXggPSBp
bmRleC5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiByZWYubGVuZ3Ro
KQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5v
cmlnaW5TdHJpbmcsICJBcnJheSBpbmRleCAiICsgaW5kZXggKyAiIGlzIG91dCBvZiBib3VuZHMg
b2YgIiArIHJlZik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVQdHIuYm94KHJlZi5wdHIucGx1
cyhpbmRleCAqIG5vZGUuYWN0dWFsVHlwZUFyZ3VtZW50c1swXS5zaXplKSk7Ci0gICAgICAgICAg
ICB9OwotICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAg
ICAgICAgICJuYXRpdmUgVF4gdGhyZWFkIG9wZXJhdG9yJltdPFQ+KFRbXSB0aHJlYWQsdWludCki
LAotICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsKLSAgICAgICAgdGhpcy5fbWFwLnNldCgK
LSAgICAgICAgICAgICJuYXRpdmUgVF4gdGhyZWFkZ3JvdXAgb3BlcmF0b3ImW108VDpwcmltaXRp
dmU+KFRbXSB0aHJlYWRncm91cCx1aW50KSIsCi0gICAgICAgICAgICBhcnJheUVsZW1lbnRQdHIp
OwotICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAgIm5hdGl2ZSBUXiBkZXZpY2Ug
b3BlcmF0b3ImW108VDpwcmltaXRpdmU+KFRbXSBkZXZpY2UsdWludCkiLAotICAgICAgICAgICAg
YXJyYXlFbGVtZW50UHRyKTsKLSAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJu
YXRpdmUgVF4gY29uc3RhbnQgb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KFRbXSBjb25zdGFudCx1
aW50KSIsCi0gICAgICAgICAgICBhcnJheUVsZW1lbnRQdHIpOworICAgICAgICBmb3IgKGxldCBh
ZGRyZXNzU3BhY2Ugb2YgYWRkcmVzc1NwYWNlcykgeworICAgICAgICAgICAgdGhpcy5fbWFwLnNl
dCgKKyAgICAgICAgICAgICAgICBgbmF0aXZlIFReICR7YWRkcmVzc1NwYWNlfSBvcGVyYXRvciZb
XTxUJHtwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpfT4oVFtdICR7YWRkcmVzc1NwYWNlfSx1
aW50KWAsCisgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgICAgIGZ1
bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZiwgaW5kZXhdLCBub2RlKSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZWYgPSByZWYubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXJlZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1Ry
YXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4LmxvYWRWYWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gcmVmLmxlbmd0aCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJp
bmcsICJBcnJheSBpbmRleCAiICsgaW5kZXggKyAiIGlzIG91dCBvZiBib3VuZHMgb2YgIiArIHJl
Zik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVB0ci5ib3gocmVmLnB0ci5wbHVz
KGluZGV4ICogbm9kZS5hY3R1YWxUeXBlQXJndW1lbnRzWzBdLnNpemUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgdGhpcy5fbWFw
LnNldCgKKyAgICAgICAgICAgICAgICBgbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQke3By
b3RvY29sU3VmZml4KGFkZHJlc3NTcGFjZSl9PihUW10gJHthZGRyZXNzU3BhY2V9KWAsCisgICAg
ICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50
YXRpb24gPSAoW3JlZl0sIG5vZGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZiA9
IHJlZi5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVmKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveCgwKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveChyZWYubGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICBhZGQodGhpbmcpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXRFeHBy
ZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xl
dEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0xldEV4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmlj
dCI7Ci0KLWxldCBsZXRFeHByZXNzaW9uQ291bnQgPSAwOwotCi1jbGFzcyBMZXRFeHByZXNzaW9u
IGV4dGVuZHMgVmFsdWUgewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbikKLSAgICB7Ci0gICAgICAg
IHN1cGVyKCk7Ci0gICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKLSAgICAgICAgdGhpcy5p
bmRleCA9IGxldEV4cHJlc3Npb25Db3VudCsrOwotICAgICAgICB0aGlzLmFyZ3VtZW50ID0gbnVs
bDsKLSAgICAgICAgdGhpcy5ib2R5ID0gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdp
bigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gImxl
dDwiICsgdGhpcy5pbmRleCArICI+IjsgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAiKCIgKyB0aGlzLmFyZ3VtZW50ICsgIiwgIiArIHRo
aXMuYm9keSArICIpIjsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0xleGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0xleGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MZXhlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMywxMiBAQCBjbGFz
cyBMZXhlciB7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJpZGVudGlmaWVyIik7CiAgICAg
ICAgIH0KIAorICAgICAgICBpZiAoL14weFswLTlhLWZBLUZdK3UvLnRlc3QocmVsZXZhbnRUZXh0
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQoInVpbnRIZXhMaXRlcmFsIik7CisKKyAgICAg
ICAgaWYgKC9eMHhbMC05YS1mQS1GXSsvLnRlc3QocmVsZXZhbnRUZXh0KSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQoImludEhleExpdGVyYWwiKTsKKwogICAgICAgICBpZiAoL15bMC05XSt1
Ly50ZXN0KHJlbGV2YW50VGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJ1aW50TGl0
ZXJhbCIpOwogCkBAIC0xMjMsNyArMTI5LDcgQEAgY2xhc3MgTGV4ZXIgewogICAgICAgICBpZiAo
L14oWzAtOV0qXC5bMC05XSspfChbMC05XStcLlswLTldKikvLnRlc3QocmVsZXZhbnRUZXh0KSkK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQoImRvdWJsZUxpdGVyYWwiKTsKICAgICAgICAgCi0g
ICAgICAgIGlmICgvXi0+fD49fDw9fD09fCE9fFwrPXwtPXxcKj18XC89fCU9fF49fFx8PXwmPXxc
K1wrfC0tfChbe30oKVxbXF0/Oj0rKlwvLC4lIX5eJnw8PkA7LV0pLy50ZXN0KHJlbGV2YW50VGV4
dCkpCisgICAgICAgIGlmICgvXjw8fD4+fC0+fD49fDw9fD09fCE9fFwrPXwtPXxcKj18XC89fCU9
fFxePXxcfD18Jj18XCtcK3wtLXwoW3t9KClcW1xdPzo9KypcLywuJSF+XiZ8PD5AOy1dKS8udGVz
dChyZWxldmFudFRleHQpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgicHVuY3R1YXRpb24i
KTsKICAgICAgICAgCiAgICAgICAgIGxldCByZW1haW5pbmcgPSByZWxldmFudFRleHQuc3Vic3Ry
aW5nKDAsIDIwKS5zcGxpdCgvXHMvKVswXTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhw
cmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDYgQEAgY2xhc3MgTWFrZUFy
cmF5UmVmRXhwcmVzc2lvbiBleHRlbmRzIEV4cAogICAgIAogICAgIGdldCBsVmFsdWUoKSB7IHJl
dHVybiB0aGlzLl9sVmFsdWU7IH0KICAgICAKLSAgICBiZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJl
ZkV4cHJlc3Npb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fX3Byb3RvX18gPSBDb252ZXJ0UHRy
VG9BcnJheVJlZkV4cHJlc3Npb24ucHJvdG90eXBlOwotICAgIH0KLSAgICAKICAgICB0b1N0cmlu
ZygpCiAgICAgewogICAgICAgICByZXR1cm4gIkAiICsgKHRoaXMubnVtRWxlbWVudHMgPyAiPDwi
ICsgdGhpcy5udW1FbGVtZW50cyArICI+PiIgOiAiIikgKyAiKCIgKyB0aGlzLmxWYWx1ZSArICIp
IjsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0Lmpz
CShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1l
Q29udGV4dC5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQCBjbGFzcyBOYW1lQ29u
dGV4dCB7CiAgICAgewogICAgICAgICB0aGlzLl9tYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgIHRo
aXMuX3NldCA9IG5ldyBTZXQoKTsKLSAgICAgICAgdGhpcy5fZGVmaW5lZCA9IG51bGw7CiAgICAg
ICAgIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICB0aGlzLl9kZWxlZ2F0
ZSA9IGRlbGVnYXRlOwogICAgICAgICB0aGlzLl9pbnRyaW5zaWNzID0gbnVsbDsKQEAgLTYyLDcg
KzYxLDcgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogICAgICAgICBpZiAoIXRoaW5nLm5hbWUpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBpZiAodGhpbmcuaXNOYXRpdmUp
IHsKKyAgICAgICAgaWYgKHRoaW5nLmlzTmF0aXZlICYmICF0aGluZy5pbXBsZW1lbnRhdGlvbikg
ewogICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnRyaW5zaWNzKQogICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTmF0aXZlIGZ1bmN0aW9uIGluIGEgc2NvcGUgdGhhdCBkb2VzIG5vdCBy
ZWNvZ25pemUgaW50cmluc2ljcyIpOwogICAgICAgICAgICAgdGhpcy5faW50cmluc2ljcy5hZGQo
dGhpbmcpOwpAQCAtMTE1LDM2ICsxMTQsMTEgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogICAgICAg
ICByZXR1cm4gbnVsbDsKICAgICB9CiAgICAgCi0gICAgaGFuZGxlRGVmaW5pbmcoKQotICAgIHsK
LSAgICAgICAgdGhpcy5fZGVmaW5lZCA9IG5ldyBTZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgaXNE
ZWZpbmVkKHRoaW5nKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3NldC5oYXModGhpbmcpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gIXRoaXMuX2RlZmluZWQKLSAgICAgICAgICAgICAgICB8fCB0
aGlzLl9kZWZpbmVkLmhhcyh0aGluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMu
X2RlbGVnYXRlICYmIHRoaXMuX2RlbGVnYXRlLmlzRGVmaW5lZCh0aGluZyk7Ci0gICAgfQotICAg
IAotICAgIGRlZmluZSh0aGluZykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RlZmluZWQuYWRkKHRo
aW5nKTsKLSAgICB9Ci0gICAgCi0gICAgZGVmaW5lQWxsKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X2RlZmluZWQgPSBudWxsOwotICAgIH0KLSAgICAKICAgICBkb1N0YXRlbWVudChzdGF0ZW1lbnQs
IGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlbWVudCA9IHN0YXRl
bWVudDsKICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlbWVu
dCA9IG51bGw7Ci0gICAgICAgIHRoaXMuZGVmaW5lKHN0YXRlbWVudCk7CiAgICAgfQogICAgIAog
ICAgIHJlY29nbml6ZUludHJpbnNpY3MoKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTmFtZVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwyNyArMzAsMTUgQEAKIC8vIG1vcmUgY29udmVuaWVudCB0byBjaGVjayBoZXJlIHRoYW4gaW4g
dGhlIENoZWNrZXIuIFRoaXMgdXN1YWxseSBpbnZvbHZlcyB0aGluZ3MgdGhhdCBuZWVkIHRvIGJl
CiAvLyBjaGVja2VkIGJlZm9yZSBUeXBlUmVmVG9UeXBlRGVmU2tpcHBlci4KIGNsYXNzIE5hbWVS
ZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewotICAgIC8vIEl0J3MgdG90YWxseSBPSyB0byBpbnN0
YW50aWF0ZSB0aGlzIHdpdGggemVybyBhcmd1bWVudHMgKGkuZS4gcGFzc2luZyB1bmRlZmluZWQg
Zm9yIGJvdGggb2YKLSAgICAvLyB0aGVtKSBpZiB5b3UncmUgY3JlYXRpbmcgYSBOYW1lUmVzb2x2
ZXIgdG8gdmlzaXQgYSBQcm9ncmFtLgogICAgIGNvbnN0cnVjdG9yKG5hbWVDb250ZXh0KQogICAg
IHsKICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5fbmFtZUNvbnRleHQgPSBuYW1lQ29u
dGV4dDsKICAgICB9Ci0gICAgCi0gICAgdmlzaXRQcm9ncmFtKG5vZGUpCisKKyAgICBkb1N0YXRl
bWVudChzdGF0ZW1lbnQpCiAgICAgewotICAgICAgICBsZXQgbmFtZUNvbnRleHQgPSBuZXcgTmFt
ZUNvbnRleHQodGhpcy5fbmFtZUNvbnRleHQpOwotICAgICAgICBuYW1lQ29udGV4dC5wcm9ncmFt
ID0gbm9kZTsKLSAgICAgICAgbmFtZUNvbnRleHQucmVjb2duaXplSW50cmluc2ljcygpOwotICAg
ICAgICBuYW1lQ29udGV4dC5oYW5kbGVEZWZpbmluZygpOwotICAgICAgICBub2RlLmludHJpbnNp
Y3MgPSBuYW1lQ29udGV4dC5pbnRyaW5zaWNzOwotICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQg
b2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCi0gICAgICAgICAgICBuYW1lQ29udGV4dC5hZGQo
c3RhdGVtZW50KTsKLSAgICAgICAgbGV0IGNoZWNrZXIgPSBuZXcgTmFtZVJlc29sdmVyKG5hbWVD
b250ZXh0KTsKLSAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0
ZW1lbnRzKQotICAgICAgICAgICAgbmFtZUNvbnRleHQuZG9TdGF0ZW1lbnQoc3RhdGVtZW50LCAo
KSA9PiBzdGF0ZW1lbnQudmlzaXQoY2hlY2tlcikpOwotICAgICAgICBub2RlLmdsb2JhbE5hbWVD
b250ZXh0ID0gbmFtZUNvbnRleHQ7CisgICAgICAgIHRoaXMuX25hbWVDb250ZXh0LmRvU3RhdGVt
ZW50KHN0YXRlbWVudCwgKCkgPT4gc3RhdGVtZW50LnZpc2l0KHRoaXMpKTsKICAgICB9CiAgICAg
CiAgICAgX3Zpc2l0VHlwZVBhcmFtZXRlcnNBbmRCdWlsZE5hbWVDb250ZXh0KG5vZGUpCkBAIC0y
MDcsOCArMTk1LDYgQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAg
ICAgICAgICB0eXBlID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KFR5cGUsIG5vZGUubmFtZSk7CiAg
ICAgICAgICAgICBpZiAoIXR5cGUpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ291bGQgbm90IGZpbmQgdHlwZSBuYW1lZCAi
ICsgbm9kZS5uYW1lKTsKLSAgICAgICAgICAgIGlmICghdGhpcy5fbmFtZUNvbnRleHQuaXNEZWZp
bmVkKHR5cGUpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZywgIklsbGVnYWwgZm9yd2FyZCB1c2Ugb2YgdHlwZSBuYW1lZCAiICsg
bm9kZS5uYW1lKTsKICAgICAgICAgICAgIG5vZGUudHlwZSA9IHR5cGU7CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC0yMzAsNyArMjE2LDYgQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlz
aXRvciB7CiAgICAgdmlzaXRSZWZlcmVuY2VUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBsZXQg
bmFtZUNvbnRleHQgPSBuZXcgTmFtZUNvbnRleHQodGhpcy5fbmFtZUNvbnRleHQpOwotICAgICAg
ICBuYW1lQ29udGV4dC5kZWZpbmVBbGwoKTsKICAgICAgICAgbm9kZS5lbGVtZW50VHlwZS52aXNp
dChuZXcgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KSk7CiAgICAgfQogICAgIApAQCAtMjU4LDYg
KzI0MywyOCBAQCBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAg
c3VwZXIudmlzaXRSZXR1cm4obm9kZSk7CiAgICAgfQogICAgIAorICAgIF9oYW5kbGVQcm9wZXJ0
eUFjY2Vzcyhub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkcyA9
IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLmdldEZ1bmNOYW1lKTsKKyAgICAgICAg
bm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkcyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBu
b2RlLnNldEZ1bmNOYW1lKTsKKyAgICAgICAgbm9kZS5wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IHRo
aXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLmFuZEZ1bmNOYW1lKTsKKworICAgICAgICBp
ZiAoIW5vZGUucG9zc2libGVHZXRPdmVybG9hZHMgJiYgIW5vZGUucG9zc2libGVBbmRPdmVybG9h
ZHMpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsICJDYW5ub3QgZmluZCBlaXRoZXIgIiArIG5vZGUuZ2V0RnVuY05hbWUgKyAiIG9yICIg
KyBub2RlLmFuZEZ1bmNOYW1lKTsKKyAgICB9CisgICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9u
KG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzcyhub2RlKTsK
KyAgICAgICAgc3VwZXIudmlzaXREb3RFeHByZXNzaW9uKG5vZGUpOworICAgIH0KKyAgICAKKyAg
ICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5faGFuZGxl
UHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAgICAgIHN1cGVyLnZpc2l0SW5kZXhFeHByZXNzaW9u
KG5vZGUpOworICAgIH0KKyAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAg
ewogICAgICAgICB0aGlzLl9yZXNvbHZlVHlwZUFyZ3VtZW50cyhub2RlLnR5cGVBcmd1bWVudHMp
OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpzCShy
ZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVG
dW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMCBAQCBjbGFzcyBOYXRpdmVGdW5j
IGV4dGVuZHMgRnVuYyB7CiAgICAgewogICAgICAgICBzdXBlcihvcmlnaW4sIG5hbWUsIHJldHVy
blR5cGUsIHR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpOwogICAgICAgICB0aGlz
LmlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uID0gbnVs
bDsKKyAgICAgICAgdGhpcy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uID0gKHN1YnN0aXR1dGlv
bikgPT4ge307CisgICAgICAgIHRoaXMudmlzaXRJbXBsZW1lbnRhdGlvbkRhdGEgPSAoaW1wbGVt
ZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiBudWxsOworICAgICAgICB0aGlzLmRpZExheW91dFN0
cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVudGF0aW9uRGF0YSA9PiBudWxsOwog
ICAgIH0KICAgICAKICAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNl
LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9O
YXRpdmVGdW5jSW5zdGFuY2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNiBAQAog
InVzZSBzdHJpY3QiOwogCiBjbGFzcyBOYXRpdmVGdW5jSW5zdGFuY2UgZXh0ZW5kcyBGdW5jIHsK
LSAgICBjb25zdHJ1Y3RvcihmdW5jLCByZXR1cm5UeXBlLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpCisg
ICAgY29uc3RydWN0b3IoZnVuYywgcmV0dXJuVHlwZSwgcGFyYW1ldGVycywgaXNDYXN0LCBpbXBs
ZW1lbnRhdGlvbkRhdGEpCiAgICAgewogICAgICAgICBzdXBlcihmdW5jLm9yaWdpbiwgZnVuYy5u
YW1lLCByZXR1cm5UeXBlLCBbXSwgcGFyYW1ldGVycywgaXNDYXN0KTsKICAgICAgICAgdGhpcy5f
ZnVuYyA9IGZ1bmM7CisgICAgICAgIHRoaXMuX2ltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVu
dGF0aW9uRGF0YTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGZ1bmMoKSB7IHJldHVybiB0aGlzLl9m
dW5jOyB9CiAgICAgZ2V0IGlzTmF0aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGdldCBpbXBs
ZW1lbnRhdGlvbkRhdGEoKSB7IHJldHVybiB0aGlzLl9pbXBsZW1lbnRhdGlvbkRhdGE7IH0KIAog
ICAgIHRvRGVjbFN0cmluZygpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTm9kZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Ob2RlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob2RlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMywxNyBAQCBjbGFzcyBOb2Rl
IHsKICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gdmlzaXRGdW5jLmNhbGwodmlzaXRvciwgdGhp
cyk7CiAgICAgICAgIGlmICgicmV0dXJuVmFsdWUiIGluIHZpc2l0b3IpCiAgICAgICAgICAgICBy
ZXR1cm5WYWx1ZSA9IHZpc2l0b3IucmV0dXJuVmFsdWU7CisgICAgICAgIAogICAgICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyB2aXNpdChub2RlLCB2aXNp
dG9yKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBOb2RlKQorICAgICAgICAg
ICAgcmV0dXJuIG5vZGUudmlzaXQodmlzaXRvcik7CisgICAgICAgIHJldHVybiBub2RlOworICAg
IH0KKyAgICAKICAgICB1bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKQogICAgIHsKICAg
ICAgICAgaWYgKCFvdGhlcikKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05v
cm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcwkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgTm9ybWFs
VXNlUHJvcGVydHlSZXNvbHZlciBleHRlbmRzIFJld3JpdGVyIHsKKyAgICB2aXNpdERvdEV4cHJl
c3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdXBlci52aXNpdERvdEV4cHJlc3Np
b24obm9kZSkucmV3cml0ZUFmdGVyQ2xvbmluZygpOworICAgIH0KKyAgICAKKyAgICB2aXNpdElu
ZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0SW5k
ZXhFeHByZXNzaW9uKG5vZGUpLnJld3JpdGVBZnRlckNsb25pbmcoKTsKKyAgICB9Cit9CisKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCShyZXZpc2lvbiAyMjIxMjMp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTcyLDE3ICsxNzIsMzUgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBv
cmlnaW5LaQogICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lS2luZCgiaWRlbnRpZmllciIp
KQogICAgICAgICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZVJlZih0b2tlbiwgdG9rZW4udGV4dCk7
CiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWVLaW5kKCJpbnRMaXRlcmFsIikpIHsKLSAg
ICAgICAgICAgIGxldCBpbnRWZXJzaW9uID0gTWF0aC5mbG9vcigrdG9rZW4udGV4dCk7CisgICAg
ICAgICAgICBsZXQgaW50VmVyc2lvbiA9ICgrdG9rZW4udGV4dCkgfCAwOwogICAgICAgICAgICAg
aWYgKCIiICsgaW50VmVyc2lvbiAhPT0gdG9rZW4udGV4dCkKLSAgICAgICAgICAgICAgICBsZXhl
ci5mYWlsKCJJbnRlZ2VyIGxpdGVyYWwgaXMgbm90IGFuIGludGVnZXIiKTsKKyAgICAgICAgICAg
ICAgICBsZXhlci5mYWlsKCJJbnRlZ2VyIGxpdGVyYWwgaXMgbm90IGFuIGludGVnZXI6ICIgKyB0
b2tlbi50ZXh0KTsKICAgICAgICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbCh0b2tlbiwgaW50
VmVyc2lvbik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQo
InVpbnRMaXRlcmFsIikpIHsKICAgICAgICAgICAgIGxldCB1aW50VmVyc2lvbiA9IHRva2VuLnRl
eHQuc3Vic3RyKDAsIHRva2VuLnRleHQubGVuZ3RoIC0gMSkgPj4+IDA7CiAgICAgICAgICAgICBp
ZiAodWludFZlcnNpb24gKyAidSIgIT09IHRva2VuLnRleHQpCi0gICAgICAgICAgICAgICAgbGV4
ZXIuZmFpbCgiSW50ZWdlciBsaXRlcmFsIGlzIG5vdCAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciIp
OworICAgICAgICAgICAgICAgIGxleGVyLmZhaWwoIkludGVnZXIgbGl0ZXJhbCBpcyBub3QgMzIt
Yml0IHVuc2lnbmVkIGludGVnZXI6ICIgKyB0b2tlbi50ZXh0KTsKICAgICAgICAgICAgIHJldHVy
biBuZXcgVWludExpdGVyYWwodG9rZW4sIHVpbnRWZXJzaW9uKTsKICAgICAgICAgfQorICAgICAg
ICBpZiAoKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQoImludEhleExpdGVyYWwiKSkKKyAgICAgICAg
ICAgIHx8ICh0b2tlbiA9IHRyeUNvbnN1bWVLaW5kKCJ1aW50SGV4TGl0ZXJhbCIpKSkgeworICAg
ICAgICAgICAgbGV0IGhleFN0cmluZyA9IHRva2VuLnRleHQuc3Vic3RyKDIpOworICAgICAgICAg
ICAgaWYgKHRva2VuLmtpbmQgPT0gInVpbnRIZXhMaXRlcmFsIikKKyAgICAgICAgICAgICAgICBo
ZXhTdHJpbmcgPSBoZXhTdHJpbmcuc3Vic3RyKDAsIGhleFN0cmluZy5sZW5ndGggLSAxKTsKKyAg
ICAgICAgICAgIGlmICghaGV4U3RyaW5nLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkJhZCBoZXggbGl0ZXJhbDogIiArIHRva2VuKTsKKyAgICAgICAgICAgIGxldCBp
bnRWZXJzaW9uID0gcGFyc2VJbnQoaGV4U3RyaW5nLCAxNik7CisgICAgICAgICAgICBpZiAodG9r
ZW4ua2luZCA9PSAiaW50SGV4TGl0ZXJhbCIpCisgICAgICAgICAgICAgICAgaW50VmVyc2lvbiA9
IGludFZlcnNpb24gfCAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGludFZl
cnNpb24gPSBpbnRWZXJzaW9uID4+PiAwOworICAgICAgICAgICAgaWYgKGludFZlcnNpb24udG9T
dHJpbmcoMTYpICE9PSBoZXhTdHJpbmcpCisgICAgICAgICAgICAgICAgbGV4ZXIuZmFpbCgiSGV4
IGludGVnZXIgbGl0ZXJhbCBpcyBub3QgYW4gaW50ZWdlcjogIiArIHRva2VuLnRleHQpOworICAg
ICAgICAgICAgaWYgKHRva2VuLmtpbmQgPT0gImludEhleExpdGVyYWwiKQorICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbCh0b2tlbiwgaW50VmVyc2lvbik7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IFVpbnRMaXRlcmFsKHRva2VuLCBpbnRWZXJzaW9uID4+PiAwKTsKKyAgICAg
ICAgfQogICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lS2luZCgiZG91YmxlTGl0ZXJhbCIp
KQogICAgICAgICAgICAgcmV0dXJuIG5ldyBEb3VibGVMaXRlcmFsKHRva2VuLCArdG9rZW4udGV4
dCk7CiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWUoInRydWUiLCAiZmFsc2UiKSkKQEAg
LTMyMCwxMiArMzM4LDE0IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2lu
S2kKICAgICAgICAgY29uc3VtZSgiKCIpOwogICAgICAgICBsZXQgYXJndW1lbnRMaXN0ID0gW107
CiAgICAgICAgIHdoaWxlICghdGVzdCgiKSIpKSB7Ci0gICAgICAgICAgICBhcmd1bWVudExpc3Qu
cHVzaChwYXJzZUV4cHJlc3Npb24oKSk7CisgICAgICAgICAgICBsZXQgYXJndW1lbnQgPSBwYXJz
ZVBvc3NpYmxlQXNzaWdubWVudCgpOworICAgICAgICAgICAgYXJndW1lbnRMaXN0LnB1c2goYXJn
dW1lbnQpOwogICAgICAgICAgICAgaWYgKCF0cnlDb25zdW1lKCIsIikpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY29uc3VtZSgiKSIpOwotICAgICAgICByZXR1
cm4gbmV3IENhbGxFeHByZXNzaW9uKG5hbWUsIG5hbWUudGV4dCwgdHlwZUFyZ3VtZW50cywgYXJn
dW1lbnRMaXN0KTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBDYWxsRXhwcmVzc2lvbihuYW1l
LCBuYW1lLnRleHQsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50TGlzdCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIGlzQ2FsbEV4cHJlc3Npb24oKQpA
QCAtMzM3LDkgKzM1Nyw5IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2lu
S2kKICAgICAgICAgfSk7CiAgICAgfQogICAgIAotICAgIGZ1bmN0aW9uIGVtaXRJbmNyZW1lbnQo
dG9rZW4sIHB0ciwgZXh0cmFBcmcpCisgICAgZnVuY3Rpb24gZW1pdEluY3JlbWVudCh0b2tlbiwg
b2xkLCBleHRyYUFyZykKICAgICB7Ci0gICAgICAgIGxldCBhcmdzID0gW25ldyBEZXJlZmVyZW5j
ZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAocHRyKSldOworICAgICAgICBsZXQg
YXJncyA9IFtvbGRdOwogICAgICAgICBpZiAoZXh0cmFBcmcpCiAgICAgICAgICAgICBhcmdzLnB1
c2goZXh0cmFBcmcpOwogICAgICAgICAKQEAgLTM1MCwyNyArMzcwLDE1IEBAIGZ1bmN0aW9uIHBh
cnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgaWYgKG5hbWUgPT0gIm9wZXJh
dG9yIikKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBuYW1lOiAiICsgbmFt
ZSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnQoCi0gICAgICAgICAg
ICB0b2tlbiwKLSAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odG9rZW4sIFZh
cmlhYmxlUmVmLndyYXAocHRyKSksCi0gICAgICAgICAgICBuZXcgQ2FsbEV4cHJlc3Npb24odG9r
ZW4sIG5hbWUsIFtdLCBhcmdzKSk7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbEV4cHJlc3Npb24o
dG9rZW4sIG5hbWUsIFtdLCBhcmdzKTsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24gZmluaXNo
UGFyc2luZ1Bvc3RJbmNyZW1lbnQodG9rZW4sIGxlZnQpCiAgICAgewotICAgICAgICBsZXQgcHRy
ID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4pOwotICAgICAgICBwdHIuYXJndW1lbnQgPSBuZXcg
TWFrZVB0ckV4cHJlc3Npb24odG9rZW4sIGxlZnQpOwotICAgICAgICAKLSAgICAgICAgbGV0IG9s
ZFZhbHVlID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4pOwotICAgICAgICBvbGRWYWx1ZS5hcmd1
bWVudCA9IG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAo
cHRyKSk7Ci0gICAgICAgIAotICAgICAgICBwdHIuYm9keSA9IG9sZFZhbHVlOwotICAgICAgICAK
LSAgICAgICAgb2xkVmFsdWUuYm9keSA9IG5ldyBDb21tYUV4cHJlc3Npb24odG9rZW4sIFsKLSAg
ICAgICAgICAgIGVtaXRJbmNyZW1lbnQodG9rZW4sIHB0ciksCi0gICAgICAgICAgICBWYXJpYWJs
ZVJlZi53cmFwKG9sZFZhbHVlKQotICAgICAgICBdKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICAgICAgbGV0IHJlYWRNb2RpZnlXcml0ZSA9IG5ldyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
KHRva2VuLCBsZWZ0KTsKKyAgICAgICAgcmVhZE1vZGlmeVdyaXRlLm5ld1ZhbHVlRXhwID0gZW1p
dEluY3JlbWVudCh0b2tlbiwgcmVhZE1vZGlmeVdyaXRlLm9sZFZhbHVlUmVmKCkpOworICAgICAg
ICByZWFkTW9kaWZ5V3JpdGUucmVzdWx0RXhwID0gcmVhZE1vZGlmeVdyaXRlLm9sZFZhbHVlUmVm
KCk7CisgICAgICAgIHJldHVybiByZWFkTW9kaWZ5V3JpdGU7CiAgICAgfQogICAgIAogICAgIGZ1
bmN0aW9uIHBhcnNlUG9zc2libGVTdWZmaXgoKQpAQCAtMzk1LDkgKzQwMyw3IEBAIGZ1bmN0aW9u
IHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgICAgIGNhc2UgIlsiOiB7
CiAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAg
ICAgICAgICAgY29uc3VtZSgiXSIpOwotICAgICAgICAgICAgICAgIGxlZnQgPSBuZXcgRGVyZWZl
cmVuY2VFeHByZXNzaW9uKAotICAgICAgICAgICAgICAgICAgICB0b2tlbiwKLSAgICAgICAgICAg
ICAgICAgICAgbmV3IENhbGxFeHByZXNzaW9uKHRva2VuLCAib3BlcmF0b3ImW10iLCBbXSwgW2xl
ZnQsIGluZGV4XSkpOworICAgICAgICAgICAgICAgIGxlZnQgPSBuZXcgSW5kZXhFeHByZXNzaW9u
KHRva2VuLCBsZWZ0LCBpbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNDA5LDEzICs0MTUsMTAgQEAgZnVuY3Rpb24g
cGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgIAogICAgIGZ1bmN0aW9uIGZpbmlz
aFBhcnNpbmdQcmVJbmNyZW1lbnQodG9rZW4sIGxlZnQsIGV4dHJhQXJnKQogICAgIHsKLSAgICAg
ICAgbGV0IHB0ciA9IG5ldyBMZXRFeHByZXNzaW9uKHRva2VuKTsKLSAgICAgICAgcHRyLmFyZ3Vt
ZW50ID0gbmV3IE1ha2VQdHJFeHByZXNzaW9uKHRva2VuLCBsZWZ0KTsKLSAgICAgICAgcHRyLmJv
ZHkgPSBuZXcgQ29tbWFFeHByZXNzaW9uKHRva2VuLCBbCi0gICAgICAgICAgICBlbWl0SW5jcmVt
ZW50KHRva2VuLCBwdHIsIGV4dHJhQXJnKSwKLSAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5jZUV4
cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAocHRyKSkKLSAgICAgICAgXSk7Ci0gICAg
ICAgIHJldHVybiBwdHI7CisgICAgICAgIGxldCByZWFkTW9kaWZ5V3JpdGUgPSBuZXcgUmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7CisgICAgICAgIHJlYWRNb2RpZnlXcml0
ZS5uZXdWYWx1ZUV4cCA9IGVtaXRJbmNyZW1lbnQodG9rZW4sIHJlYWRNb2RpZnlXcml0ZS5vbGRW
YWx1ZVJlZigpLCBleHRyYUFyZyk7CisgICAgICAgIHJlYWRNb2RpZnlXcml0ZS5yZXN1bHRFeHAg
PSByZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVSZWYoKTsKKyAgICAgICAgcmV0dXJuIHJlYWRNb2Rp
ZnlXcml0ZTsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24gcGFyc2VQcmVJbmNyZW1lbnQoKQpA
QCAtNTc1LDYgKzU3OCwxMCBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdp
bktpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsaXN0LnB1c2goZWZmZWN0ZnVsRXhwcmVz
c2lvbik7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFsaXN0Lmxlbmd0aCkKKyAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiTGVuZ3RoIHNob3VsZCBuZXZlciBiZSB6ZXJvIik7CisgICAgICAg
IGlmIChsaXN0Lmxlbmd0aCA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIGxpc3RbMF07CiAgICAg
ICAgIHJldHVybiBuZXcgQ29tbWFFeHByZXNzaW9uKG9yaWdpbiwgbGlzdCk7CiAgICAgfQogICAg
IApAQCAtNzYxLDE1ICs3NjgsMzAgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBv
cmlnaW5LaQogICAgIGZ1bmN0aW9uIHBhcnNlRnVuY05hbWUoKQogICAgIHsKICAgICAgICAgaWYg
KHRyeUNvbnN1bWUoIm9wZXJhdG9yIikpIHsKLSAgICAgICAgICAgIGxldCB0b2tlbiA9IHRyeUNv
bnN1bWUoIisiLCAiLSIsICIqIiwgIi8iLCAiJSIsICJeIiwgIiYiLCAifCIsICI8IiwgIj4iLCAi
PD0iLCAiPj0iLCAiPT0iLCAiKysiLCAiLS0iLCAiJiIpOwotICAgICAgICAgICAgaWYgKHRva2Vu
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuLnRleHQgIT0gIiYiIHx8ICF0cnlDb25zdW1l
KCJbIikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3IiICsgdG9rZW4udGV4
dDsKKyAgICAgICAgICAgIGxldCB0b2tlbiA9IGNvbnN1bWUoIisiLCAiLSIsICIqIiwgIi8iLCAi
JSIsICJeIiwgIiYiLCAifCIsICI8IiwgIj4iLCAiPD0iLCAiPj0iLCAiPT0iLCAiKysiLCAiLS0i
LCAiJiIsICIuIiwgIn4iLCAiPDwiLCAiPj4iLCAiWyIpOworICAgICAgICAgICAgaWYgKHRva2Vu
LnRleHQgPT0gIiYiKSB7CisgICAgICAgICAgICAgICAgaWYgKHRyeUNvbnN1bWUoIlsiKSkgewor
ICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCJdIik7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAib3BlcmF0b3ImW10iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAodHJ5Q29uc3VtZSgiLiIpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9y
Ji4iICsgY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKS50ZXh0OworICAgICAgICAgICAgICAgIHJl
dHVybiAib3BlcmF0b3ImIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbi50
ZXh0ID09ICIuIikgeworICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAib3BlcmF0b3IuIiAr
IGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIikudGV4dDsKKyAgICAgICAgICAgICAgICBpZiAodHJ5
Q29uc3VtZSgiPSIpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIj0iOworICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dG9rZW4udGV4dCA9PSAiWyIpIHsKICAgICAgICAgICAgICAgICBjb25zdW1lKCJdIik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciZbXSI7CisgICAgICAgICAgICAgICAgbGV0IHJl
c3VsdCA9ICJvcGVyYXRvcltdIjsKKyAgICAgICAgICAgICAgICBpZiAodHJ5Q29uc3VtZSgiPSIp
KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIj0iOworICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZXQgbmFtZSA9IGNvbnN1
bWVLaW5kKCJpZGVudGlmaWVyIik7Ci0gICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9yICIgKyBu
YW1lOworICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciIgKyB0b2tlbi50ZXh0OwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBjb25zdW1lS2luZCgiaWRlbnRpZmllciIpLnRleHQ7CiAgICAg
fQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywyMCArMjcsMzYgQEAKIGZ1bmN0aW9uIHByZXBhcmUob3JpZ2lu
LCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KQogewogICAgIGxldCBwcm9ncmFtID0gbmV3IFByb2dy
YW0oKTsKKyAgICAKICAgICBwYXJzZShwcm9ncmFtLCAiL2ludGVybmFsL3N0ZGxpYiIsICJuYXRp
dmUiLCAyNywgc3RhbmRhcmRMaWJyYXJ5KTsKICAgICBwYXJzZShwcm9ncmFtLCBvcmlnaW4sICJ1
c2VyIiwgbGluZU51bWJlck9mZnNldCwgdGV4dCk7Ci0gICAgcmVzb2x2ZU5hbWVzKHByb2dyYW0p
OwotICAgIHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKTsKKyAgICAKKyAgICBsZXQgbmFtZVJlc29s
dmVyID0gY3JlYXRlTmFtZVJlc29sdmVyKHByb2dyYW0pOworICAgIHJlc29sdmVOYW1lc0luVHlw
ZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNvbHZlTmFtZXNJblByb3RvY29scyhw
cm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIHJlc29sdmVUeXBlRGVmc0luVHlwZXMocHJvZ3Jh
bSk7CisgICAgcmVzb2x2ZVR5cGVEZWZzSW5Qcm90b2NvbHMocHJvZ3JhbSk7CisgICAgLy8gRklY
TUU6IE5lZWQgdG8gdmVyaWZ5IHRoYXQgc3RydWN0cmUgYXJlIG5vdCBjeWNsaWMuCisgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzA0NAorICAgIHN5bnRo
ZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSk7CisgICAgcmVzb2x2ZU5hbWVzSW5GdW5jdGlv
bnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNvbHZlVHlwZURlZnNJbkZ1bmN0aW9u
cyhwcm9ncmFtKTsKKyAgICAKICAgICBmbGF0dGVuUHJvdG9jb2xFeHRlbmRzKHByb2dyYW0pOwog
ICAgIGNoZWNrKHByb2dyYW0pOwogICAgIGNoZWNrTGl0ZXJhbFR5cGVzKHByb2dyYW0pOworICAg
IHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pOworICAgIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFt
KTsKKyAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFtKTsKICAgICBjaGVja1Byb2dyYW1XcmFw
cGVkKHByb2dyYW0pOwogICAgIGNoZWNrUmV0dXJucyhwcm9ncmFtKTsKICAgICBjaGVja1VucmVh
Y2hhYmxlQ29kZShwcm9ncmFtKTsKICAgICBjaGVja0xvb3BzKHByb2dyYW0pOwogICAgIGNoZWNr
UmVjdXJzaW9uKHByb2dyYW0pOwogICAgIGNoZWNrUHJvZ3JhbVdyYXBwZWQocHJvZ3JhbSk7Cisg
ICAgZmluZEhpZ2hab21iaWVzKHByb2dyYW0pOwogICAgIGlubGluZShwcm9ncmFtKTsKKyAgICAK
ICAgICByZXR1cm4gcHJvZ3JhbTsKIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUHJvZ3JhbS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Qcm9ncmFtLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9Qcm9ncmFtLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxMCBAQCBj
bGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAgICAgICAgIHRoaXMuX3R5cGVzID0gbmV3IE1h
cCgpOwogICAgICAgICB0aGlzLl9wcm90b2NvbHMgPSBuZXcgTWFwKCk7CiAgICAgICAgIHRoaXMu
X2Z1bmNJbnN0YW50aWF0b3IgPSBuZXcgRnVuY0luc3RhbnRpYXRvcih0aGlzKTsKKyAgICAgICAg
dGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQgPSBuZXcgTmFtZUNvbnRleHQoKTsKKyAgICAgICAgdGhp
cy5fZ2xvYmFsTmFtZUNvbnRleHQucHJvZ3JhbSA9IHRoaXM7CisgICAgICAgIHRoaXMuX2dsb2Jh
bE5hbWVDb250ZXh0LnJlY29nbml6ZUludHJpbnNpY3MoKTsKKyAgICAgICAgdGhpcy5pbnRyaW5z
aWNzID0gdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQuaW50cmluc2ljczsKICAgICB9CiAgICAgCiAg
ICAgZ2V0IHRvcExldmVsU3RhdGVtZW50cygpIHsgcmV0dXJuIHRoaXMuX3RvcExldmVsU3RhdGVt
ZW50czsgfQpAQCAtNDAsNiArNDQsNyBAQCBjbGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAg
ICAgZ2V0IHR5cGVzKCkgeyByZXR1cm4gdGhpcy5fdHlwZXM7IH0KICAgICBnZXQgcHJvdG9jb2xz
KCkgeyByZXR1cm4gdGhpcy5fcHJvdG9jb2xzOyB9CiAgICAgZ2V0IGZ1bmNJbnN0YW50aWF0b3Io
KSB7IHJldHVybiB0aGlzLl9mdW5jSW5zdGFudGlhdG9yOyB9CisgICAgZ2V0IGdsb2JhbE5hbWVD
b250ZXh0KCkgeyByZXR1cm4gdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQ7IH0KICAgICAKICAgICBh
ZGQoc3RhdGVtZW50KQogICAgIHsKQEAgLTUyLDEwICs1NywxMSBAQCBjbGFzcyBQcm9ncmFtIGV4
dGVuZHMgTm9kZSB7CiAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50IGluc3RhbmNlb2YgVHlw
ZSkKICAgICAgICAgICAgIHRoaXMuX3R5cGVzLnNldChzdGF0ZW1lbnQubmFtZSwgc3RhdGVtZW50
KTsKICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50IGluc3RhbmNlb2YgUHJvdG9jb2wpCi0gICAg
ICAgICAgICB0aGlzLl9wcm90b2NvbHMuc2V0KHN0YXRlbWVudC5hZGQsIHN0YXRlbWVudCk7Cisg
ICAgICAgICAgICB0aGlzLl9wcm90b2NvbHMuc2V0KHN0YXRlbWVudC5uYW1lLCBzdGF0ZW1lbnQp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlN0YXRlbWVudCBp
cyBub3QgYSBmdW5jdGlvbiBvciB0eXBlOiAiICsgc3RhdGVtZW50KTsKICAgICAgICAgdGhpcy5f
dG9wTGV2ZWxTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTsKKyAgICAgICAgdGhpcy5fZ2xvYmFs
TmFtZUNvbnRleHQuYWRkKHN0YXRlbWVudCk7CiAgICAgfQogICAgIAogICAgIHRvU3RyaW5nKCkK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIGV4
dGVuZHMgRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBiYXNlKQorICAgIHsK
KyAgICAgICAgc3VwZXIob3JpZ2luKTsKKyAgICAgICAgdGhpcy5iYXNlID0gYmFzZTsKKyAgICB9
CisgICAgCisgICAgZ2V0IHJlc3VsdFR5cGUoKSB7IHJldHVybiB0aGlzLnJlc3VsdFR5cGVGb3JH
ZXQgPyB0aGlzLnJlc3VsdFR5cGVGb3JHZXQgOiB0aGlzLnJlc3VsdFR5cGVGb3JBbmQ7IH0KKyAg
ICAKKyAgICByZXdyaXRlQWZ0ZXJDbG9uaW5nKCkKKyAgICB7CisgICAgICAgIC8vIEF0IHRoaXMg
cG9pbnQsIG5vZGUuYmFzZS5pc0xWYWx1ZSB3aWxsIG9ubHkgcmV0dXJuIHRydWUgaWYgaXQncyBw
b3NzaWJsZSB0byBnZXQgYSBwb2ludGVyIHRvIGl0LAorICAgICAgICAvLyBzaW5jZSB3ZSB3aWxs
IG5vIGxvbmdlciBzZWUgYW55IERvdEV4cHJlc3Npb25zIG9yIEluZGV4RXhwcmVzc2lvbnMuIEFs
c28sIG5vZGUgaXMgYSBuZXdseSBjcmVhdGVkCisgICAgICAgIC8vIG5vZGUgYW5kIGV2ZXJ5dGhp
bmcgYmVuZWF0aCBpdCBpcyBuZXdseSBjcmVhdGVkLCBzbyB3ZSBjYW4gZWRpdCBpdCBpbi1wbGFj
ZS4KKyAgICAgICAgCisgICAgICAgIGlmICgodGhpcy5iYXNlLmlzTFZhbHVlIHx8IHRoaXMuYmFz
ZVR5cGUuaXNSZWYpICYmIHRoaXMuY2FsbEZvckFuZCkKKyAgICAgICAgICAgIHJldHVybiBuZXcg
RGVyZWZlcmVuY2VFeHByZXNzaW9uKHRoaXMub3JpZ2luLCB0aGlzLmNhbGxGb3JBbmQsIHRoaXMu
cmVzdWx0VHlwZSwgdGhpcy5jYWxsRm9yQW5kLnJlc3VsdFR5cGUuYWRkcmVzc1NwYWNlKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JHZXQpCisgICAgICAgICAgICByZXR1cm4g
dGhpcy5jYWxsRm9yR2V0OworICAgICAgICAKKyAgICAgICAgaWYgKCF0aGlzLmNhbGxGb3JBbmQp
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5vcmlnaW4ub3JpZ2luU3RyaW5nICsg
IjogUHJvcGVydHkgYWNjZXNzIHdpdGhvdXQgZ2V0dGVyIGFuZCBhbmRlcjogIiArIHRoaXMpOwor
ICAgICAgICAKKyAgICAgICAgbGV0IGFub25WYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUodGhp
cy5vcmlnaW4sIHRoaXMuYmFzZVR5cGUpOworICAgICAgICB0aGlzLmNhbGxGb3JBbmQuYXJndW1l
bnRMaXN0WzBdID0gdGhpcy5iYXNlVHlwZS51bmlmeU5vZGUuYXJndW1lbnRGb3JBbmRPdmVybG9h
ZCh0aGlzLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChhbm9uVmFyKSk7CisgICAgICAgIHJldHVy
biBuZXcgQ29tbWFFeHByZXNzaW9uKHRoaXMub3JpZ2luLCBbCisgICAgICAgICAgICBhbm9uVmFy
LAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQodGhpcy5vcmlnaW4sIFZhcmlhYmxlUmVmLndy
YXAoYW5vblZhciksIHRoaXMuYmFzZSwgdGhpcy5iYXNlVHlwZSksCisgICAgICAgICAgICBuZXcg
RGVyZWZlcmVuY2VFeHByZXNzaW9uKHRoaXMub3JpZ2luLCB0aGlzLmNhbGxGb3JBbmQsIHRoaXMu
cmVzdWx0VHlwZSwgdGhpcy5jYWxsRm9yQW5kLnJlc3VsdFR5cGUuYWRkcmVzc1NwYWNlKQorICAg
ICAgICBdKTsKKyAgICB9CisgICAgCisgICAgdXBkYXRlQ2FsbHMoKQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuY2FsbEZvckdldCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvckdldC5hcmd1bWVu
dExpc3RbMF0gPSB0aGlzLmJhc2U7CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JBbmQpCisgICAg
ICAgICAgICB0aGlzLmNhbGxGb3JBbmQuYXJndW1lbnRMaXN0WzBdID0gdGhpcy5iYXNlVHlwZS5h
cmd1bWVudEZvckFuZE92ZXJsb2FkKHRoaXMub3JpZ2luLCB0aGlzLmJhc2UpOworICAgICAgICBp
ZiAodGhpcy5jYWxsRm9yU2V0KQorICAgICAgICAgICAgdGhpcy5jYWxsRm9yU2V0LmFyZ3VtZW50
TGlzdFswXSA9IHRoaXMuYmFzZTsKKyAgICB9CisgICAgCisgICAgZW1pdEdldChiYXNlKQorICAg
IHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAg
ICAgICByZXN1bHQuYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC51cGRhdGVDYWxscygpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0LnJld3JpdGVBZnRlckNsb25pbmcoKTsKKyAgICB9CisgICAg
CisgICAgZW1pdFNldChiYXNlLCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSB0
aGlzLnZpc2l0KG5ldyBSZXdyaXRlcigpKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuY2FsbEZvclNl
dCkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHRoaXMub3JpZ2luLm9yaWdpblN0
cmluZywgIkNhbm5vdCBlbWl0IHNldCBiZWNhdXNlOiAiICsgdGhpcy5lcnJvckZvclNldC50eXBl
RXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcmVzdWx0LmJhc2UgPSBiYXNlOworICAgICAgICByZXN1
bHQudXBkYXRlQ2FsbHMoKTsKKyAgICAgICAgcmVzdWx0LmNhbGxGb3JTZXQuYXJndW1lbnRMaXN0
W3Jlc3VsdC5jYWxsRm9yU2V0LmFyZ3VtZW50TGlzdC5sZW5ndGggLSAxXSA9IHZhbHVlOworICAg
ICAgICByZXR1cm4gcmVzdWx0LmNhbGxGb3JTZXQ7CisgICAgfQorfQorCkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eVJlc29sdmVyLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5UmVzb2x2ZXIuanMJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlSZXNvbHZl
ci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBQcm9wZXJ0
eVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CisgICAgX3Zpc2l0UlZhbHVlc1dpdGhpbkxWYWx1
ZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHZpc2l0ID0gbm9kZSA9PiBub2RlLnZpc2l0KHRo
aXMpOworICAgICAgICAKKyAgICAgICAgY2xhc3MgUlZhbHVlRmluZGVyIHsKKyAgICAgICAgICAg
IHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG5vZGUuYXJyYXkudmlzaXQodGhpcyk7CisgICAgICAgICAgICAgICAgdmlz
aXQobm9kZS5pbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHZpc2l0VmFyaWFibGVSZWYobm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2aXNpdChub2RlLnB0cik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZpc2l0SWRlbnRpdHlFeHByZXNzaW9u
KG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9kZS50YXJnZXQudmlzaXQo
dGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG5vZGUu
dmlzaXQobmV3IFJWYWx1ZUZpbmRlcigpKTsKKyAgICB9CisgICAgCisgICAgX3Zpc2l0UHJvcGVy
dHlBY2Nlc3Mobm9kZSkKKyAgICB7CisgICAgICAgIGxldCBuZXdOb2RlID0gbm9kZS52aXNpdChu
ZXcgTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlcigpKTsKKyAgICAgICAgbmV3Tm9kZS52aXNpdCh0
aGlzKTsKKyAgICAgICAgbm9kZS5iZWNvbWUobmV3Tm9kZSk7CisgICAgfQorICAgIAorICAgIHZp
c2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fdmlzaXRQcm9wZXJ0
eUFjY2Vzcyhub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9k
ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Zpc2l0UHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAg
fQorICAgIAorICAgIF9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUobm9kZSkKKyAgICB7CisgICAgICAg
IGxldCB0eXBlID0gbm9kZS5vbGRWYWx1ZVZhci50eXBlOworICAgICAgICBpZiAoIXR5cGUpCisg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgdHlwZSIpOworICAgICAgICBsZXQgc2lt
cGxlTEhTID0gbm9kZS5sVmFsdWUudmlzaXQobmV3IE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIo
KSk7CisgICAgICAgIGlmIChzaW1wbGVMSFMuaXNMVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICgh
c2ltcGxlTEhTLmFkZHJlc3NTcGFjZSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
bm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIjogTEhTIHdpdGhvdXQgYWRkcmVzcyBzcGFjZTog
IiArIHNpbXBsZUxIUyk7CisgICAgICAgICAgICBsZXQgcHRyVHlwZSA9IG5ldyBQdHJUeXBlKG5v
ZGUub3JpZ2luLCBzaW1wbGVMSFMuYWRkcmVzc1NwYWNlLCB0eXBlKTsKKyAgICAgICAgICAgIGxl
dCBwdHJWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIHB0clR5cGUpOwor
ICAgICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbW1hRXhwcmVzc2lvbihub2RlLm9yaWdpbiwg
WworICAgICAgICAgICAgICAgIG5vZGUub2xkVmFsdWVWYXIsIG5vZGUubmV3VmFsdWVWYXIsIHB0
clZhciwKKyAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVudCgKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAocHRyVmFyKSwKKyAgICAgICAgICAgICAg
ICAgICAgbmV3IE1ha2VQdHJFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBzaW1wbGVMSFMpLCBwdHJU
eXBlKSwKKyAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVudCgKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS5vcmlnaW4sIG5vZGUub2xkVmFsdWVSZWYoKSwKKyAgICAgICAgICAgICAgICAgICAg
bmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUu
b3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHB0clZhciksIHR5cGUsIHNpbXBsZUxIUy5hZGRyZXNz
U3BhY2UpLAorICAgICAgICAgICAgICAgICAgICB0eXBlKSwKKyAgICAgICAgICAgICAgICBuZXcg
QXNzaWdubWVudChub2RlLm9yaWdpbiwgbm9kZS5uZXdWYWx1ZVJlZigpLCBub2RlLm5ld1ZhbHVl
RXhwLCB0eXBlKSwKKyAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVudCgKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5j
ZUV4cHJlc3Npb24oCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgVmFyaWFi
bGVSZWYud3JhcChwdHJWYXIpLCB0eXBlLCBzaW1wbGVMSFMuYWRkcmVzc1NwYWNlKSwKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS5uZXdWYWx1ZVJlZigpLCB0eXBlKSwKKyAgICAgICAgICAgICAg
ICBub2RlLnJlc3VsdEV4cAorICAgICAgICAgICAgXSkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubFZhbHVlLmJhc2UsIG5vZGUubFZhbHVl
LmJhc2VUeXBlKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlRXhwID0gbmV3IENvbW1hRXhwcmVz
c2lvbihub2RlLm9yaWdpbiwgWworICAgICAgICAgICAgbm9kZS5vbGRWYWx1ZVZhciwgbm9kZS5u
ZXdWYWx1ZVZhciwKKyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2Rl
Lm9sZFZhbHVlUmVmKCksIG5vZGUubFZhbHVlLmVtaXRHZXQocmVzdWx0Lm9sZFZhbHVlUmVmKCkp
LCB0eXBlKSwKKyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2RlLm5l
d1ZhbHVlUmVmKCksIG5vZGUubmV3VmFsdWVFeHAsIHR5cGUpLAorICAgICAgICAgICAgbm9kZS5s
VmFsdWUuZW1pdFNldChyZXN1bHQub2xkVmFsdWVSZWYoKSwgbm9kZS5uZXdWYWx1ZVJlZigpKQor
ICAgICAgICBdKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdEV4cCA9IG5vZGUubmV3VmFsdWVSZWYo
KTsKKyAgICAgICAgdGhpcy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKHJlc3VsdCk7CisgICAgICAg
IG5vZGUuYmVjb21lKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5uZXdWYWx1ZUV4cC52aXNp
dCh0aGlzKTsKKyAgICAgICAgbm9kZS5yZXN1bHRFeHAudmlzaXQodGhpcyk7CisgICAgICAgIHRo
aXMuX3Zpc2l0UlZhbHVlc1dpdGhpbkxWYWx1ZShub2RlLmxWYWx1ZSk7CisgICAgICAgIHRoaXMu
X2hhbmRsZVJlYWRNb2RpZnlXcml0ZShub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRBc3Np
Z25tZW50KG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl92aXNpdFJWYWx1ZXNXaXRoaW5MVmFs
dWUobm9kZS5saHMpOworICAgICAgICBub2RlLnJocy52aXNpdCh0aGlzKTsKKyAgICAgICAgCisg
ICAgICAgIGxldCBzaW1wbGVMSFMgPSBub2RlLmxocy52aXNpdChuZXcgTm9ybWFsVXNlUHJvcGVy
dHlSZXNvbHZlcigpKTsKKyAgICAgICAgaWYgKHNpbXBsZUxIUy5pc0xWYWx1ZSkgeworICAgICAg
ICAgICAgbm9kZS5saHMuYmVjb21lKHNpbXBsZUxIUyk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghKG5vZGUubGhzIGluc3RhbmNlb2YgUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5l
eHBlY3RlZCBsaHMgdHlwZTogIiArIG5vZGUubGhzLmNvbnN0cnVjdG9yLm5hbWUpOworICAgICAg
ICAKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5v
ZGUub3JpZ2luLCBub2RlLmxocy5iYXNlLCBub2RlLmxocy5iYXNlVHlwZSk7CisgICAgICAgIGxl
dCByZXN1bHRWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUudHlw
ZSk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1ZUV4cCA9IG5ldyBDb21tYUV4cHJlc3Npb24obm9k
ZS5vcmlnaW4sIFsKKyAgICAgICAgICAgIHJlc3VsdFZhciwKKyAgICAgICAgICAgIG5ldyBBc3Np
Z25tZW50KG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHJlc3VsdFZhciksIG5vZGUucmhz
LCBub2RlLnR5cGUpLAorICAgICAgICAgICAgbm9kZS5saHMuZW1pdFNldChyZXN1bHQub2xkVmFs
dWVSZWYoKSwgVmFyaWFibGVSZWYud3JhcChyZXN1bHRWYXIpKQorICAgICAgICBdKTsKKyAgICAg
ICAgcmVzdWx0LnJlc3VsdEV4cCA9IFZhcmlhYmxlUmVmLndyYXAocmVzdWx0VmFyKTsKKyAgICAg
ICAgdGhpcy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKHJlc3VsdCk7CisgICAgICAgIG5vZGUuYmVj
b21lKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9k
ZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSk7Cisg
ICAgICAgIGlmICghbm9kZS5sVmFsdWUuaXNMVmFsdWUpCisgICAgICAgICAgICB0aHJvdyBuZXcg
V1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOb3QgYW4gbHZhbHVlOiAiICsg
bm9kZS5sVmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Np
b24obm9kZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lv
bihub2RlKTsKKyAgICAgICAgaWYgKCFub2RlLmxWYWx1ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAg
IHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk5vdCBhbiBs
dmFsdWU6ICIgKyBub2RlLmxWYWx1ZSk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDE5IEBAIGNsYXNzIFB0clR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlIHsKICAgICAgICAg
cmV0dXJuIHRoaXMuZWxlbWVudFR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5l
bGVtZW50VHlwZSk7CiAgICAgfQogICAgIAorICAgIGFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQob3Jp
Z2luLCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5v
cmlnaW5TdHJpbmcsICJQb2ludGVyIHN1YnNjcmlwdCBpcyBub3QgdmFsaWQiKTsKKyAgICB9Cisg
ICAgYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQob3JpZ2luLCB0eXBlKQorICAgIHsKKyAgICAg
ICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIlBvaW50ZXIgc3Vi
c2NyaXB0IGlzIG5vdCB2YWxpZCIpOworICAgIH0KKyAgICByZXR1cm5UeXBlRnJvbUFuZE92ZXJs
b2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlOworICAg
IH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRU
eXBlICsgIl4gIiArIHRoaXMuYWRkcmVzc1NwYWNlOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpz
CShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOwor
CitjbGFzcyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7Cisg
ICAgY29uc3RydWN0b3Iob3JpZ2luLCBsVmFsdWUsIHR5cGUgPSBudWxsKQorICAgIHsKKyAgICAg
ICAgc3VwZXIob3JpZ2luKTsKKyAgICAgICAgdGhpcy5fbFZhbHVlID0gbFZhbHVlOworICAgICAg
ICB0aGlzLm9sZFZhbHVlVmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG9yaWdpbiwgdHlwZSk7
CisgICAgICAgIHRoaXMubmV3VmFsdWVWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUob3JpZ2lu
LCB0eXBlKTsKKyAgICAgICAgdGhpcy5uZXdWYWx1ZUV4cCA9IG51bGw7CisgICAgICAgIHRoaXMu
cmVzdWx0RXhwID0gbnVsbDsKKyAgICB9CisgICAgCisgICAgZ2V0IGxWYWx1ZSgpIHsgcmV0dXJu
IHRoaXMuX2xWYWx1ZTsgfQorICAgIAorICAgIG9sZFZhbHVlUmVmKCkgeyByZXR1cm4gVmFyaWFi
bGVSZWYud3JhcCh0aGlzLm9sZFZhbHVlVmFyKTsgfQorICAgIG5ld1ZhbHVlUmVmKCkgeyByZXR1
cm4gVmFyaWFibGVSZWYud3JhcCh0aGlzLm5ld1ZhbHVlVmFyKTsgfQorICAgIAorICAgIHRvU3Ry
aW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiUk1XKCIgKyB0aGlzLmxWYWx1ZSArICIsICIg
KyB0aGlzLm9sZFZhbHVlVmFyICsgIiwgIiArIHRoaXMubmV3VmFsdWVWYXIgKyAiLCAiICsgdGhp
cy5uZXdWYWx1ZUV4cCArICIsICIgKyB0aGlzLnJlc3VsdEV4cCArICIpIjsKKyAgICB9Cit9CisK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVOYW1lcy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMuanMJ
KHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29s
dmVOYW1lcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsMjggQEAKICAqLwogInVzZSBz
dHJpY3QiOwogCi1mdW5jdGlvbiByZXNvbHZlTmFtZXMocHJvZ3JhbSkKK2Z1bmN0aW9uIGNyZWF0
ZU5hbWVSZXNvbHZlcihwcm9ncmFtKQogewotICAgIHByb2dyYW0udmlzaXQobmV3IE5hbWVSZXNv
bHZlcigpKTsKKyAgICByZXR1cm4gbmV3IE5hbWVSZXNvbHZlcihwcm9ncmFtLmdsb2JhbE5hbWVD
b250ZXh0KTsKIH0KKworZnVuY3Rpb24gcmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1l
UmVzb2x2ZXIpCit7CisgICAgZm9yIChsZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygp
KQorICAgICAgICBuYW1lUmVzb2x2ZXIuZG9TdGF0ZW1lbnQodHlwZSk7Cit9CisKK2Z1bmN0aW9u
IHJlc29sdmVOYW1lc0luUHJvdG9jb2xzKHByb2dyYW0sIG5hbWVSZXNvbHZlcikKK3sKKyAgICBm
b3IgKGxldCBwcm90b2NvbCBvZiBwcm9ncmFtLnByb3RvY29scy52YWx1ZXMoKSkKKyAgICAgICAg
bmFtZVJlc29sdmVyLmRvU3RhdGVtZW50KHByb3RvY29sKTsKK30KKworZnVuY3Rpb24gcmVzb2x2
ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAobGV0
IGZ1bmNzIG9mIHByb2dyYW0uZnVuY3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAobGV0
IGZ1bmMgb2YgZnVuY3MpCisgICAgICAgICAgICBuYW1lUmVzb2x2ZXIuZG9TdGF0ZW1lbnQoZnVu
Yyk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNv
bHZlT3ZlcmxvYWRJbXBsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDkgQEAKIAogZnVuY3Rpb24gcmVzb2x2ZU92ZXJsb2FkSW1wbChm
dW5jdGlvbnMsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpCiB7Cisg
ICAgaWYgKCFmdW5jdGlvbnMpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBmdW5jdGlv
bnM7IHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYnkgdGhlIGNhbGxlci4iKTsKKyAgICAK
ICAgICBsZXQgZmFpbHVyZXMgPSBbXTsKICAgICBsZXQgc3VjY2Vzc2VzID0gW107CiAgICAgZm9y
IChsZXQgZnVuYyBvZiBmdW5jdGlvbnMpIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Jlc29sdmVQcm9wZXJ0aWVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVQcm9wZXJ0aWVzLmpzCShub25leGlzdGVudCkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVQcm9wZXJ0aWVzLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8gVGhpcyB0dXJucyBEb3RFeHByZXNzaW9u
IGFuZCBJbmRleEV4cHJlc3Npb24gaW50byBjYWxscyB0byBnZXR0ZXJzIChvcGVyYXRvci5maWVs
ZCBhbmQgb3BlcmF0b3JbXSksCisvLyBzZXR0ZXJzIChvcGVyYXRvci5maWVsZD0gYW5kIG9wZXJh
dG9yW109KSwgYW5kIGFuZGVycyAob3BlcmF0b3ImLmZpZWxkIGFuZCBvcGVyYXRvciZbXSkuIFRo
aXMgaW52b2x2ZXMKKy8vIHRyYW5zZm9ybWluZyBhc3NpZ25tZW50cyBhbmQgUk1XJ3MgdG8gZG8g
bHZhbHVlIGVtdWxhdGlvbi4KK2Z1bmN0aW9uIHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pCit7
CisgICAgcHJvZ3JhbS52aXNpdChuZXcgUHJvcGVydHlSZXNvbHZlcigpKTsKK30KSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVUeXBlRGVmcy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlVHlwZURlZnMuanMJKHJl
dmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVU
eXBlRGVmcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsMjYgQEAKICAqLwogInVzZSBz
dHJpY3QiOwogCi1mdW5jdGlvbiByZXNvbHZlVHlwZURlZnMocHJvZ3JhbSkKK2Z1bmN0aW9uIHJl
c29sdmVUeXBlRGVmc0luVHlwZXMocHJvZ3JhbSkKIHsKLSAgICBwcm9ncmFtLnZpc2l0KG5ldyBU
eXBlRGVmUmVzb2x2ZXIoKSk7CisgICAgbGV0IHJlc29sdmVyID0gbmV3IFR5cGVEZWZSZXNvbHZl
cigpOworICAgIGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkKKyAgICAg
ICAgdHlwZS52aXNpdChyZXNvbHZlcik7Cit9CisKK2Z1bmN0aW9uIHJlc29sdmVUeXBlRGVmc0lu
UHJvdG9jb2xzKHByb2dyYW0pCit7CisgICAgbGV0IHJlc29sdmVyID0gbmV3IFR5cGVEZWZSZXNv
bHZlcigpOworICAgIGZvciAobGV0IHByb3RvY29sIG9mIHByb2dyYW0ucHJvdG9jb2xzLnZhbHVl
cygpKQorICAgICAgICBwcm90b2NvbC52aXNpdChyZXNvbHZlcik7Cit9CisKK2Z1bmN0aW9uIHJl
c29sdmVUeXBlRGVmc0luRnVuY3Rpb25zKHByb2dyYW0pCit7CisgICAgbGV0IHJlc29sdmVyID0g
bmV3IFR5cGVEZWZSZXNvbHZlcigpOworICAgIGZvciAobGV0IGZ1bmNzIG9mIHByb2dyYW0uZnVu
Y3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAg
ICAgICAgICBmdW5jLnZpc2l0KHJlc29sdmVyKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwkocmV2aXNpb24gMjIy
MTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwko
d29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBjbGFzcyBSZXR1cm5DaGVja2VyIGV4dGVu
ZHMgVmlzaXRvciB7CiAKICAgICBfaXNCb29sQ2FzdEZyb21MaXRlcmFsVHJ1ZShub2RlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG5vZGUuaXNDYXN0ICYmIG5vZGUucmV0dXJuVHlwZSBpbnN0YW5j
ZW9mIFR5cGVSZWYgJiYgbm9kZS5yZXR1cm5UeXBlLmVxdWFscyh0aGlzLl9wcm9ncmFtLmludHJp
bnNpY3MuYm9vbCkgJiYgbm9kZS5hcmd1bWVudExpc3QubGVuZ3RoID09IDEgJiYgbm9kZS5hcmd1
bWVudExpc3RbMF0ubGlzdC5sZW5ndGggPT0gMSAmJiBub2RlLmFyZ3VtZW50TGlzdFswXS5saXN0
WzBdIGluc3RhbmNlb2YgQm9vbExpdGVyYWwgJiYgbm9kZS5hcmd1bWVudExpc3RbMF0ubGlzdFsw
XS52YWx1ZTsKKyAgICAgICAgcmV0dXJuIG5vZGUuaXNDYXN0ICYmIG5vZGUucmV0dXJuVHlwZSBp
bnN0YW5jZW9mIFR5cGVSZWYgJiYgbm9kZS5yZXR1cm5UeXBlLmVxdWFscyh0aGlzLl9wcm9ncmFt
LmludHJpbnNpY3MuYm9vbCkgJiYgbm9kZS5hcmd1bWVudExpc3QubGVuZ3RoID09IDEgJiYgbm9k
ZS5hcmd1bWVudExpc3RbMF0gaW5zdGFuY2VvZiBCb29sTGl0ZXJhbCAmJiBub2RlLmFyZ3VtZW50
TGlzdFswXS52YWx1ZTsKICAgICB9CiAKICAgICB2aXNpdFdoaWxlTG9vcChub2RlKQpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxMCArMjcsOSBAQAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIGhhdmUgc2Vu
c2libGUgYmVoYXZpb3Igd2hlbiBpdCBlbmNvdW50ZXJzIGRlZmluaXRpb25zIHRoYXQgaXQgY2Fu
bm90IGhhbmRsZS4gUmlnaHQKIC8vIG5vdyB3ZSBhcmUgaGFja2lzaGx5IHByZXZlbnRpbmcgdGhp
cyBieSB3cmFwcGluZyB0aGluZ3MgaW4gVHlwZVJlZi4gVGhhdCdzIHByb2JhYmx5IHdyb25nLgog
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjIwOAotY2xhc3Mg
UmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CitjbGFzcyBSZXdyaXRlciB7CiAgICAgY29u
c3RydWN0b3IoKQogICAgIHsKLSAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5fbWFwcGlu
ZyA9IG5ldyBNYXAoKTsKICAgICB9CiAgICAgCkBAIC05OSw3ICs5OCw3IEBAIGNsYXNzIFJld3Jp
dGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZhcmlh
YmxlRGVjbCgKICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm5hbWUsCiAgICAgICAgICAg
ICBub2RlLnR5cGUudmlzaXQodGhpcyksCi0gICAgICAgICAgICBub2RlLmluaXRpYWxpemVyID8g
bm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKSA6IG51bGwpOworICAgICAgICAgICAgTm9kZS52
aXNpdChub2RlLmluaXRpYWxpemVyLCB0aGlzKSk7CiAgICAgICAgIHRoaXMuX21hcE5vZGUobm9k
ZSwgcmVzdWx0KTsKICAgICAgICAgcmVzdWx0LmVQdHIgPSBub2RlLmVQdHI7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0xMzEsNyArMTMwLDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBW
aXNpdG9yQmFzZSB7CiAgICAgdmlzaXRUeXBlUmVmKG5vZGUpCiAgICAgewogICAgICAgICBsZXQg
cmVzdWx0ID0gbmV3IFR5cGVSZWYobm9kZS5vcmlnaW4sIG5vZGUubmFtZSwgbm9kZS50eXBlQXJn
dW1lbnRzLm1hcCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKSk7Ci0g
ICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDog
bnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMTYzLDI0ICsxNjIsNTQg
QEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXRBc3NpZ25t
ZW50KG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFzc2lnbm1lbnQobm9k
ZS5vcmlnaW4sIG5vZGUubGhzLnZpc2l0KHRoaXMpLCBub2RlLnJocy52aXNpdCh0aGlzKSk7Ci0g
ICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDog
bnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZpc2l0UmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmxWYWx1ZS52aXNpdCh0
aGlzKSk7CisgICAgICAgIHJlc3VsdC5vbGRWYWx1ZVZhciA9IG5vZGUub2xkVmFsdWVWYXIudmlz
aXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1ZVZhciA9IG5vZGUubmV3VmFsdWVWYXIu
dmlzaXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1ZUV4cCA9IG5vZGUubmV3VmFsdWVF
eHAudmlzaXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5yZXN1bHRFeHAgPSBub2RlLnJlc3VsdEV4
cC52aXNpdCh0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAg
dmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1
bHQgPSBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLnB0ci52aXNp
dCh0aGlzKSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZp
c2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUu
dHlwZSwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5hZGRyZXNzU3BhY2UgPSBub2RlLmFkZHJlc3NT
cGFjZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgX2hhbmRsZVBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQsIG5vZGUpCisgICAgeworICAgICAgICByZXN1
bHQucG9zc2libGVHZXRPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlR2V0T3ZlcmxvYWRzOworICAg
ICAgICByZXN1bHQucG9zc2libGVTZXRPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlU2V0T3Zlcmxv
YWRzOworICAgICAgICByZXN1bHQucG9zc2libGVBbmRPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxl
QW5kT3ZlcmxvYWRzOworICAgICAgICByZXN1bHQuYmFzZVR5cGUgPSBOb2RlLnZpc2l0KG5vZGUu
YmFzZVR5cGUsIHRoaXMpOworICAgICAgICByZXN1bHQuY2FsbEZvckdldCA9IE5vZGUudmlzaXQo
bm9kZS5jYWxsRm9yR2V0LCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGVGb3JHZXQg
PSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckdldCwgdGhpcyk7CisgICAgICAgIHJlc3Vs
dC5jYWxsRm9yQW5kID0gTm9kZS52aXNpdChub2RlLmNhbGxGb3JBbmQsIHRoaXMpOworICAgICAg
ICByZXN1bHQucmVzdWx0VHlwZUZvckFuZCA9IE5vZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlRm9y
QW5kLCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LmNhbGxGb3JTZXQgPSBOb2RlLnZpc2l0KG5vZGUu
Y2FsbEZvclNldCwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5lcnJvckZvclNldCA9IG5vZGUuZXJy
b3JGb3JTZXQ7CisgICAgICAgIHJlc3VsdC51cGRhdGVDYWxscygpOworICAgIH0KKyAgICAKICAg
ICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBu
ZXcgRG90RXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyksIG5v
ZGUuZmllbGROYW1lKTsKLSAgICAgICAgcmVzdWx0LnN0cnVjdFR5cGUgPSBub2RlLnN0cnVjdFR5
cGUgPyBub2RlLnN0cnVjdFR5cGUudmlzaXQodGhpcykgOiBudWxsOwotICAgICAgICAvLyBXZSBk
b24ndCB3YW50IHRvIHJld3JpdGUgZmllbGQsIHNpbmNlIHRoaXMgaXMgYSBkZWVwIHJlZmVyZW5j
ZSBnb2luZyBvdXQgb2YgdGhlIGZ1bmN0aW9uLgotICAgICAgICAvLyBBbHNvLCB0aGlzIGlzIHNl
dCB1cCBkdXJpbmcgaW5saW5pbmcsIHNvIHdlJ3JlIGFscmVhZHkgZnVsbHkgbW9ub21vcnBoaXNl
ZC4KLSAgICAgICAgcmVzdWx0LmZpZWxkID0gbm9kZS5maWVsZDsKKyAgICAgICAgdGhpcy5faGFu
ZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKHJlc3VsdCwgbm9kZSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisg
ICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEluZGV4RXhwcmVzc2lvbihub2RlLm9yaWdp
biwgbm9kZS5hcnJheS52aXNpdCh0aGlzKSwgbm9kZS5pbmRleC52aXNpdCh0aGlzKSk7CisgICAg
ICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQsIG5vZGUpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTIxNiw3ICsyNDUsNyBAQCBj
bGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2aXNpdFJldHVy
bihub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm4obm9kZS5vcmlnaW4sIG5v
ZGUudmFsdWUgPyBub2RlLnZhbHVlLnZpc2l0KHRoaXMpIDogbnVsbCk7CisgICAgICAgIHJldHVy
biBuZXcgUmV0dXJuKG5vZGUub3JpZ2luLCBOb2RlLnZpc2l0KG5vZGUudmFsdWUsIHRoaXMpKTsK
ICAgICB9CiAgICAgCiAgICAgdmlzaXRDb250aW51ZShub2RlKQpAQCAtMjQwLDcgKzI2OSw3IEBA
IGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0R2VuZXJpY0xp
dGVyYWxUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IG5vZGUuY29u
c3RydWN0b3Iobm9kZS5vcmlnaW4sIG5vZGUudmFsdWUpOwotICAgICAgICByZXN1bHQudHlwZSA9
IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3Vs
dC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgICAgICByZXN1bHQucHJl
ZmVycmVkVHlwZSA9IG5vZGUucHJlZmVycmVkVHlwZS52aXNpdCh0aGlzKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yNjEsNyArMjkwLDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0
ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXROdWxsVHlwZShub2RlKQogICAgIHsKICAgICAg
ICAgbGV0IHJlc3VsdCA9IG5ldyBOdWxsVHlwZShub2RlLm9yaWdpbik7Ci0gICAgICAgIHJlc3Vs
dC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKKyAgICAg
ICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0yODAsNyArMzA5LDcgQEAgY2xhc3MgUmV3cml0ZXIg
ZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgIHJlc3VsdC5wb3NzaWJsZU92ZXJsb2FkcyA9
IG5vZGUucG9zc2libGVPdmVybG9hZHM7CiAgICAgICAgIGlmIChub2RlLmlzQ2FzdCkKICAgICAg
ICAgICAgIHJlc3VsdC5zZXRDYXN0RGF0YShub2RlLnJldHVyblR5cGUudmlzaXQodGhpcykpOwot
ICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IG5vZGUucmVzdWx0VHlwZSA/IG5vZGUucmVzdWx0
VHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gTm9k
ZS52aXNpdChub2RlLnJlc3VsdFR5cGUsIHRoaXMpOwogICAgICAgICByZXN1bHQucmVzdWx0RVB0
ciA9IG5vZGUucmVzdWx0RVB0cjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0y
OTAsNyArMzE5LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAg
ICAgIGxldCByZXN1bHQgPSBuZXcgQ2FsbEV4cHJlc3Npb24oCiAgICAgICAgICAgICBub2RlLm9y
aWdpbiwgbm9kZS5uYW1lLAogICAgICAgICAgICAgbm9kZS50eXBlQXJndW1lbnRzLm1hcCh0eXBl
QXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKSwKLSAgICAgICAgICAgIG5vZGUu
YXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBhcmd1bWVudC52aXNpdCh0aGlzKSkpOworICAg
ICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFyZ3VtZW50ID0+IE5vZGUudmlzaXQoYXJn
dW1lbnQsIHRoaXMpKSk7CiAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEZXJpdmVkQ2FsbERh
dGEobm9kZSwgcmVzdWx0KTsKICAgICB9CiAgICAgCkBAIC0yOTgsNyArMzI3LDcgQEAgY2xhc3Mg
UmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgewogICAgICAgICBsZXQgcmVzdWx0
ID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAogICAgICAgICAgICAgbm9kZS5vcmlnaW4sCi0gICAg
ICAgICAgICBub2RlLnJldHVyblR5cGUgPyBub2RlLnJldHVyblR5cGUudmlzaXQodGhpcykgOiBu
dWxsLAorICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLnJldHVyblR5cGUsIHRoaXMpLAogICAg
ICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFyZ3VtZW50ID0+IGFyZ3VtZW50LnZpc2l0
KHRoaXMpKSwKICAgICAgICAgICAgIG5vZGUucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBh
cmFtZXRlci52aXNpdCh0aGlzKSksCiAgICAgICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcykp
OwpAQCAtMzE1LDcgKzM0NCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2Ug
ewogCiAgICAgdmlzaXRJZlN0YXRlbWVudChub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5l
dyBJZlN0YXRlbWVudChub2RlLm9yaWdpbiwgbm9kZS5jb25kaXRpb25hbC52aXNpdCh0aGlzKSwg
bm9kZS5ib2R5LnZpc2l0KHRoaXMpLCBub2RlLmVsc2VCb2R5ID8gbm9kZS5lbHNlQm9keS52aXNp
dCh0aGlzKSA6IHVuZGVmaW5lZCk7CisgICAgICAgIHJldHVybiBuZXcgSWZTdGF0ZW1lbnQobm9k
ZS5vcmlnaW4sIG5vZGUuY29uZGl0aW9uYWwudmlzaXQodGhpcyksIG5vZGUuYm9keS52aXNpdCh0
aGlzKSwgTm9kZS52aXNpdChub2RlLmVsc2VCb2R5LCB0aGlzKSk7CiAgICAgfQogCiAgICAgdmlz
aXRXaGlsZUxvb3Aobm9kZSkKQEAgLTMzMSwyMiArMzYwLDI0IEBAIGNsYXNzIFJld3JpdGVyIGV4
dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0Rm9yTG9vcChub2RlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG5ldyBGb3JMb29wKG5vZGUub3JpZ2luLAotICAgICAgICAgICAgbm9kZS5pbml0
aWFsaXphdGlvbiA/IG5vZGUuaW5pdGlhbGl6YXRpb24udmlzaXQodGhpcykgOiB1bmRlZmluZWQs
Ci0gICAgICAgICAgICBub2RlLmNvbmRpdGlvbiA/IG5vZGUuY29uZGl0aW9uLnZpc2l0KHRoaXMp
IDogdW5kZWZpbmVkLAotICAgICAgICAgICAgbm9kZS5pbmNyZW1lbnQgPyBub2RlLmluY3JlbWVu
dC52aXNpdCh0aGlzKSA6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5p
bml0aWFsaXphdGlvbiwgdGhpcyksCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUuY29uZGl0
aW9uLCB0aGlzKSwKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbmNyZW1lbnQsIHRoaXMp
LAogICAgICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsKICAgICB9CiAgICAgCi0gICAg
dmlzaXRMZXRFeHByZXNzaW9uKG5vZGUpCisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShub2Rl
KQogICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBMZXRFeHByZXNzaW9uKG5vZGUub3Jp
Z2luKTsKLSAgICAgICAgcmVzdWx0LmluZGV4ID0gbm9kZS5pbmRleDsKLSAgICAgICAgcmVzdWx0
LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQodGhpcykgOiBudWxsOwotICAgICAg
ICByZXN1bHQuYXJndW1lbnQgPSBub2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAgICAgICBs
ZXQgcmVzdWx0ID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG5vZGUub3JpZ2luLCBub2RlLnR5cGUu
dmlzaXQodGhpcykpOworICAgICAgICByZXN1bHQuX2luZGV4ID0gbm9kZS5faW5kZXg7CiAgICAg
ICAgIHRoaXMuX21hcE5vZGUobm9kZSwgcmVzdWx0KTsKLSAgICAgICAgcmVzdWx0LmJvZHkgPSBu
b2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgICAgIHJlc3VsdC5lUHRyID0gbm9kZS5lUHRyOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyAgICAKKyAgICB2aXNpdElkZW50aXR5RXhw
cmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBJZGVudGl0eUV4cHJlc3Np
b24obm9kZS50YXJnZXQudmlzaXQodGhpcykpOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxOCBAQCBuYXRpdmUgaW50IG9wZXJhdG9y
KihpbnQsIGludCk7CiBuYXRpdmUgdWludCBvcGVyYXRvcioodWludCwgdWludCk7CiBuYXRpdmUg
aW50IG9wZXJhdG9yLyhpbnQsIGludCk7CiBuYXRpdmUgdWludCBvcGVyYXRvci8odWludCwgdWlu
dCk7CituYXRpdmUgaW50IG9wZXJhdG9yJihpbnQsIGludCk7CituYXRpdmUgaW50IG9wZXJhdG9y
fChpbnQsIGludCk7CituYXRpdmUgaW50IG9wZXJhdG9yXihpbnQsIGludCk7CituYXRpdmUgaW50
IG9wZXJhdG9yfihpbnQpOworbmF0aXZlIGludCBvcGVyYXRvcjw8KGludCwgdWludCk7CituYXRp
dmUgaW50IG9wZXJhdG9yPj4oaW50LCB1aW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yJih1aW50
LCB1aW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yfCh1aW50LCB1aW50KTsKK25hdGl2ZSB1aW50
IG9wZXJhdG9yXih1aW50LCB1aW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yfih1aW50KTsKK25h
dGl2ZSB1aW50IG9wZXJhdG9yPDwodWludCwgdWludCk7CituYXRpdmUgdWludCBvcGVyYXRvcj4+
KHVpbnQsIHVpbnQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I9PShpbnQsIGludCk7CiBuYXRpdmUg
Ym9vbCBvcGVyYXRvcj09KHVpbnQsIHVpbnQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I9PShib29s
LCBib29sKTsKQEAgLTY4LDYgKzgwLDM1IEBAIG5hdGl2ZSBib29sIG9wZXJhdG9yPih1aW50LCB1
aW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPj0oaW50LCBpbnQpOwogbmF0aXZlIGJvb2wgb3Bl
cmF0b3I+PSh1aW50LCB1aW50KTsKIAorYm9vbCBvcGVyYXRvciYoYm9vbCBhLCBib29sIGIpCit7
CisgICAgaWYgKGEpCisgICAgICAgIHJldHVybiBiOworICAgIHJldHVybiBmYWxzZTsKK30KK2Jv
b2wgb3BlcmF0b3J8KGJvb2wgYSwgYm9vbCBiKQoreworICAgIGlmIChhKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQorYm9vbCBvcGVyYXRvcl4oYm9vbCBhLCBib29sIGIpCit7CisgICAgaWYgKGEpCisg
ICAgICAgIHJldHVybiAhYjsKKyAgICByZXR1cm4gYjsKK30KK2Jvb2wgb3BlcmF0b3J+KGJvb2wg
dmFsdWUpCit7CisgICAgcmV0dXJuICF2YWx1ZTsKK30KKworcHJvdG9jb2wgQWRkYWJsZSB7Cisg
ICAgQWRkYWJsZSBvcGVyYXRvcisoQWRkYWJsZSwgQWRkYWJsZSk7Cit9CisKIHByb3RvY29sIEVx
dWF0YWJsZSB7CiAgICAgYm9vbCBvcGVyYXRvcj09KEVxdWF0YWJsZSwgRXF1YXRhYmxlKTsKIH0K
QEAgLTkyLDQgKzEzMywxNCBAQCBuYXRpdmUgdGhyZWFkIFReIG9wZXJhdG9yJltdPFQ+KHRocmVh
ZCBUCiBuYXRpdmUgdGhyZWFkZ3JvdXAgVF4gb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KHRocmVh
ZGdyb3VwIFRbXSwgdWludCk7CiBuYXRpdmUgZGV2aWNlIFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0
aXZlPihkZXZpY2UgVFtdLCB1aW50KTsKIG5hdGl2ZSBjb25zdGFudCBUXiBvcGVyYXRvciZbXTxU
OnByaW1pdGl2ZT4oY29uc3RhbnQgVFtdLCB1aW50KTsKKworbmF0aXZlIHVpbnQgb3BlcmF0b3Iu
bGVuZ3RoPFQ+KHRocmVhZCBUW10pOworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6cHJp
bWl0aXZlPih0aHJlYWRncm91cCBUW10pOworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6
cHJpbWl0aXZlPihkZXZpY2UgVFtdKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOnBy
aW1pdGl2ZT4oY29uc3RhbnQgVFtdKTsKKwordWludCBvcGVyYXRvci5sZW5ndGg8VCwgdWludCBs
ZW5ndGg+KFRbbGVuZ3RoXSkKK3sKKyAgICByZXR1cm4gbGVuZ3RoOworfQogYDsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0TGF5b3V0QnVpbGRl
ci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3RydWN0TGF5b3V0QnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNTksNSArNTksMTEgQEAg
Y2xhc3MgU3RydWN0TGF5b3V0QnVpbGRlciBleHRlbmRzIFZpc2l0bwogICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJUeXBlIGRvZXMgbm90IGhhdmUgc2l6ZTogIiArIG5vZGUudHlwZSk7CiAg
ICAgICAgIHRoaXMuX29mZnNldCArPSBzaXplOwogICAgIH0KKyAgICAKKyAgICB2aXNpdE5hdGl2
ZUZ1bmNJbnN0YW5jZShub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXROYXRpdmVGdW5j
SW5zdGFuY2Uobm9kZSk7CisgICAgICAgIG5vZGUuZnVuYy5kaWRMYXlvdXRTdHJ1Y3RzSW5JbXBs
ZW1lbnRhdGlvbkRhdGEobm9kZS5pbXBsZW1lbnRhdGlvbkRhdGEpOworICAgIH0KIH0KIApJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC01NywyMSArNTcsMjkgQEAgY2xhc3MgU3RydWN0VHlwZSBleHRl
bmRzIFR5cGUgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBpbnN0
YW50aWF0ZSh0eXBlQXJndW1lbnRzLCBtb2RlKQorICAgIGluc3RhbnRpYXRlKHR5cGVBcmd1bWVu
dHMgPSBudWxsKQogICAgIHsKLSAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoICE9IHRo
aXMudHlwZVBhcmFtZXRlcnMubGVuZ3RoKQotICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iob3JpZ2luLm9yaWdpblN0cmluZywgIldyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyB0
byBpbnN0YW50aWF0aW9uIik7CisgICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBudWxsOworICAg
ICAgICBsZXQgdHlwZVBhcmFtZXRlcnMgPSB0aGlzLnR5cGVQYXJhbWV0ZXJzOwogICAgICAgICAK
LSAgICAgICAgaWYgKCF0eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICBpZiAodHlwZUFyZ3VtZW50cykgeworICAgICAgICAgICAgaWYgKHR5cGVB
cmd1bWVudHMubGVuZ3RoICE9IHRoaXMudHlwZVBhcmFtZXRlcnMubGVuZ3RoKQorICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJXcm9uZyBu
dW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgdG8gaW5zdGFudGlhdGlvbiIpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoIXR5cGVBcmd1bWVudHMubGVuZ3RoKQorICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdWJzdGl0dXRpb24gPSBu
ZXcgU3Vic3RpdHV0aW9uKHRoaXMudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOworICAg
ICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBbXTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgbGV0IHN1YnN0aXR1dGlvbiA9IG5ldyBTdWJzdGl0dXRpb24odGhpcy50eXBlUGFyYW1ldGVy
cywgdHlwZUFyZ3VtZW50cyk7Ci0gICAgICAgIGxldCBpbnN0YW50aWF0ZUltbWVkaWF0ZXMgPSBt
b2RlID09ICJzaGFsbG93IiA/IG51bGwgOiBuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCk7Ci0g
ICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3RydWN0VHlwZSh0aGlzLm9yaWdpbiwgdGhpcy5uYW1l
LCBbXSk7CisgICAgICAgIGxldCBpbnN0YW50aWF0ZUltbWVkaWF0ZXMgPSBuZXcgSW5zdGFudGlh
dGVJbW1lZGlhdGVzKCk7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3RydWN0VHlwZSh0aGlz
Lm9yaWdpbiwgdGhpcy5uYW1lLCB0eXBlUGFyYW1ldGVycyk7CiAgICAgICAgIGZvciAobGV0IGZp
ZWxkIG9mIHRoaXMuZmllbGRzKSB7Ci0gICAgICAgICAgICBsZXQgbmV3RmllbGQgPSBmaWVsZC52
aXNpdChzdWJzdGl0dXRpb24pOwotICAgICAgICAgICAgaWYgKGluc3RhbnRpYXRlSW1tZWRpYXRl
cykKLSAgICAgICAgICAgICAgICBuZXdGaWVsZCA9IG5ld0ZpZWxkLnZpc2l0KGluc3RhbnRpYXRl
SW1tZWRpYXRlcyk7CisgICAgICAgICAgICBsZXQgbmV3RmllbGQgPSBmaWVsZDsKKyAgICAgICAg
ICAgIGlmIChzdWJzdGl0dXRpb24pCisgICAgICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVs
ZC52aXNpdChzdWJzdGl0dXRpb24pOworICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC52
aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpOwogICAgICAgICAgICAgcmVzdWx0LmFkZChuZXdG
aWVsZCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWJzdGl0dXRpb24uanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qcwkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBjbGFzcyBTdWJzdGl0dXRpb24gZXh0ZW5kcyBS
ZXdyaXRlciB7CiAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KHBhcmFtZXRlcnNbaV0sIGFyZ3Vt
ZW50TGlzdFtpXSk7CiAgICAgfQogICAgIAorICAgIGdldCBtYXAoKSB7IHJldHVybiB0aGlzLl9t
YXA7IH0KKyAgICAKICAgICB2aXNpdFR5cGVSZWYobm9kZSkKICAgICB7CiAgICAgICAgIGxldCBy
ZXBsYWNlbWVudCA9IHRoaXMuX21hcC5nZXQobm9kZS50eXBlKTsKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1N1ZmZpeENhbGxBc3NpZ25tZW50LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1ZmZpeENhbGxBc3NpZ25tZW50LmpzCShy
ZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWZmaXhD
YWxsQXNzaWdubWVudC5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xh
c3MgU3VmZml4Q2FsbEFzc2lnbm1lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1
Y3RvcihvcmlnaW4sIG5hbWUsIGxocykKLSAgICB7Ci0gICAgICAgIHN1cGVyKG9yaWdpbik7Ci0g
ICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgICAgICB0aGlzLl9saHMgPSBsaHM7Ci0gICAg
ICAgIHRoaXMuZnVuYyA9IG51bGw7Ci0gICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1
cm4gdGhpcy5fbmFtZTsgfQotICAgIGdldCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KLSAg
ICAKLSAgICB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5saHMgKyAiIHN1
ZmZpeCAiICsgdGhpcy5uYW1lOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpz
CShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworZnVuY3Rpb24gc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycyhwcm9ncmFtKQoreworICAgIGZv
ciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoISh0
eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHR5cGUuZmllbGRzKSB7CisgICAgICAgICAg
ICBmdW5jdGlvbiBjcmVhdGVUeXBlUGFyYW1ldGVycygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHR5cGUudHlwZVBhcmFtZXRlcnMubWFwKAorICAgICAgICAgICAgICAg
ICAgICB0eXBlUGFyYW1ldGVyID0+IHR5cGVQYXJhbWV0ZXIudmlzaXQobmV3IFR5cGVQYXJhbWV0
ZXJSZXdyaXRlcigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZ1bmN0aW9uIGNyZWF0ZVR5cGVBcmd1bWVudHMoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiB0eXBlUGFyYW1ldGVycy5tYXAodHlwZVBhcmFtZXRlciA9PiB0eXBlUGFy
YW1ldGVyLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2
ZUZ1bmMsIGltcGxlbWVudGF0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5h
dGl2ZUZ1bmMuaW5zdGFudGlhdGVJbXBsZW1lbnRhdGlvbiA9IHN1YnN0aXR1dGlvbiA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgIGxldCBuZXdUeXBlID0gdHlwZS5pbnN0YW50aWF0ZShuYXRpdmVG
dW5jLnR5cGVQYXJhbWV0ZXJzLm1hcCh0eXBlUGFyYW1ldGVyID0+IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCBzdWJzdGl0dXRlID0gc3Vic3RpdHV0aW9uLm1hcC5nZXQodHlwZVBhcmFt
ZXRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YnN0aXR1dGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIHN1YnN0aXR1dGUgZm9y
IHR5cGUgcGFyYW1ldGVyICIgKyB0eXBlUGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdWJzdGl0dXRlOworICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7dHlwZTogbmV3VHlwZSwgZmllbGROYW1lOiBmaWVsZC5uYW1l
fTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMudmlzaXRJ
bXBsZW1lbnRhdGlvbkRhdGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFZpc2l0aW5nIHRoZSB0eXBlIGZpcnN0IGVuc3VyZXMgdGhh
dCB0aGUgc3RydWN0IGxheW91dCBidWlsZGVyIGZpZ3VyZXMgb3V0IHRoZSBmaWVsZCdzCisgICAg
ICAgICAgICAgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50
YXRpb25EYXRhLnR5cGUudmlzaXQodmlzaXRvcik7CisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICBuYXRpdmVGdW5jLmRpZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0
YSA9IGltcGxlbWVudGF0aW9uRGF0YSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGxldCBzdHJ1
Y3RTaXplID0gaW1wbGVtZW50YXRpb25EYXRhLnR5cGUuc2l6ZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0cnVjdFNpemUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiTm8gc3RydWN0IHNpemUgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGV0IGZpZWxkID0gaW1wbGVtZW50YXRpb25EYXRhLnR5cGUuZmllbGRCeU5h
bWUoaW1wbGVtZW50YXRpb25EYXRhLmZpZWxkTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghZmllbGQpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxk
IG5vdCBmaW5kIGZpZWxkIik7CisgICAgICAgICAgICAgICAgICAgIGxldCBvZmZzZXQgPSBmaWVs
ZC5vZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZFNpemUgPSBmaWVsZC50eXBl
LnNpemU7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZFNpemUgPT0gbnVsbCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gZmllbGQgc2l6ZSBmb3IgIiAr
IG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09IG51bGwpCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIG9mZnNldCBmb3IgIiAr
IG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aW1wbGVtZW50YXRpb25EYXRhLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAg
aW1wbGVtZW50YXRpb25EYXRhLnN0cnVjdFNpemUgPSBzdHJ1Y3RTaXplOworICAgICAgICAgICAg
ICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEuZmllbGRTaXplID0gZmllbGRTaXplOworICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgbmF0aXZlRnVuYy5pbXBsZW1lbnRhdGlvbiA9
IChhcmd1bWVudExpc3QsIG5vZGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5hdGl2
ZUZ1bmNJbnN0YW5jZSA9IG5vZGUubmF0aXZlRnVuY0luc3RhbmNlOworICAgICAgICAgICAgICAg
ICAgICBsZXQgaW1wbGVtZW50YXRpb25EYXRhID0gbmF0aXZlRnVuY0luc3RhbmNlLmltcGxlbWVu
dGF0aW9uRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uKAor
ICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRMaXN0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgaW1wbGVtZW50YXRpb25EYXRhLm9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGltcGxlbWVudGF0aW9uRGF0YS5zdHJ1Y3RTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg
aW1wbGVtZW50YXRpb25EYXRhLmZpZWxkU2l6ZSk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlRmllbGRU
eXBlKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQudHlwZS52
aXNpdChuZXcgU3Vic3RpdHV0aW9uKHR5cGUudHlwZVBhcmFtZXRlcnMsIHR5cGVQYXJhbWV0ZXJz
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNy
ZWF0ZVR5cGVSZWYoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBUeXBl
UmVmLmluc3RhbnRpYXRlKHR5cGUsIGNyZWF0ZVR5cGVBcmd1bWVudHMoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCBpc0Nhc3QgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGxldCB0eXBlUGFyYW1ldGVyczsKKyAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jOwor
CisgICAgICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAorICAgICAgICAgICAg
dHlwZVBhcmFtZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOworICAgICAgICAgICAgbmF0
aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwg
Im9wZXJhdG9yLiIgKyBmaWVsZC5uYW1lLCBjcmVhdGVGaWVsZFR5cGUoKSwgdHlwZVBhcmFtZXRl
cnMsCisgICAgICAgICAgICAgICAgW25ldyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVs
bCwgY3JlYXRlVHlwZVJlZigpKV0sIGlzQ2FzdCk7CisgICAgICAgICAgICBzZXR1cEltcGxlbWVu
dGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxk
U2l6ZSkgPT4geworICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1
ZmZlcihmaWVsZFNpemUpLCAwKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuY29weUZyb20oYmFz
ZS5wbHVzKG9mZnNldCksIGZpZWxkU2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxk
PQorICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOwor
ICAgICAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgICAg
IGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9yLiIgKyBmaWVsZC5uYW1lICsgIj0iLCBjcmVhdGVUeXBl
UmVmKCksIHR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAg
ICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVUeXBlUmVm
KCkpLAorICAgICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4s
IG51bGwsIGNyZWF0ZUZpZWxkVHlwZSgpKQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAg
ICAgICAgaXNDYXN0KTsKKyAgICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2
ZUZ1bmMsIChbYmFzZSwgdmFsdWVdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4g
eworICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1ZmZlcihzdHJ1
Y3RTaXplKSwgMCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UsIHN0cnVj
dFNpemUpOworICAgICAgICAgICAgICAgIHJlc3VsdC5wbHVzKG9mZnNldCkuY29weUZyb20odmFs
dWUsIGZpZWxkU2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisgICAgICAgICAg
ICBmdW5jdGlvbiBzZXR1cEFuZGVyKGFkZHJlc3NTcGFjZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB0eXBlUGFyYW1ldGVycyA9IGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCk7CisgICAg
ICAgICAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgICAg
ICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvciYuIiArIGZpZWxkLm5hbWUsIG5ldyBQdHJUeXBl
KGZpZWxkLm9yaWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVGaWVsZFR5cGUoKSksCisgICAgICAg
ICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICBbCisgICAg
ICAgICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcigKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaWVsZC5vcmlnaW4sIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3IFB0clR5cGUoZmllbGQub3JpZ2luLCBhZGRyZXNzU3BhY2UsIGNyZWF0ZVR5cGVSZWYo
KSkpCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgIGlzQ2FzdCk7
CisgICAgICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFti
YXNlXSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAgICAg
ICAgICAgYmFzZSA9IGJhc2UubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
YmFzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUu
b3JpZ2luLm9yaWdpblN0cmluZywgIk51bGwgZGVyZWZlcmVuY2UiKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEVQdHIuYm94KGJhc2UucGx1cyhvZmZzZXQpKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0dXBBbmRlcigidGhyZWFkIik7Cisg
ICAgICAgICAgICBpZiAodHlwZS5pbnN0YW50aWF0ZSgpLmlzUHJpbWl0aXZlKSB7CisgICAgICAg
ICAgICAgICAgc2V0dXBBbmRlcigidGhyZWFkZ3JvdXAiKTsKKyAgICAgICAgICAgICAgICBzZXR1
cEFuZGVyKCJkZXZpY2UiKTsKKyAgICAgICAgICAgICAgICBzZXR1cEFuZGVyKCJjb25zdGFudCIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02LDEzICs2
LDE0IEBACiA8c2NyaXB0IHNyYz0iUmVmZXJlbmNlVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iVmFsdWUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkV4cHJlc3Npb24uanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9IlZpc2l0b3JCYXNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJSZXdyaXRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmlzaXRvci5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ3JlYXRlTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iQ3JlYXRlTGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiAKIDxzY3JpcHQgc3JjPSJBZGRyZXNz
U3BhY2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkFub255bW91c1ZhcmlhYmxlLmpzIj48
L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVJlZlR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9IkFycmF5VHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQXNzaWdubWVudC5q
cyI+PC9zY3JpcHQ+CkBAIC0yMCw3ICsyMSw2IEBACiA8c2NyaXB0IHNyYz0iQmxvY2suanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IkJvb2xMaXRlcmFsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJCcmVhay5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iQ2FsbEFzc2lnbm1lbnQuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNhbGxFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJDYWxsRnVuY3Rpb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNoZWNr
LmpzIj48L3NjcmlwdD4KQEAgLTQ2LDYgKzQ2LDcgQEAKIDxzY3JpcHQgc3JjPSJFdmFsdWF0b3Iu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkV4cHJlc3Npb25GaW5kZXIuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IkZpZWxkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJGaW5kSGln
aFpvbWJpZXMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZsYXR0ZW5Qcm90b2NvbEV4dGVu
ZHMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZvckxvb3AuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IkZ1bmMuanMiPjwvc2NyaXB0PgpAQCAtNTMsNyArNTQsMTAgQEAKIDxzY3JpcHQg
c3JjPSJGdW5jSW5zdGFudGlhdG9yLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGdW5jUGFy
YW1ldGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGdW5jdGlvbkxpa2VCbG9jay5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iSGlnaFpvbWJpZUZpbmRlci5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iSWRlbnRpdHlFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJJZlN0YXRlbWVudC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iSW5kZXhFeHByZXNzaW9u
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJbmZlclR5cGVzRm9yQ2FsbC5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iSW5saW5lLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJbmxp
bmVyLmpzIj48L3NjcmlwdD4KQEAgLTc1LDIwICs3OSwyNCBAQAogPHNjcmlwdCBzcmM9Ik5hdGl2
ZUZ1bmNJbnN0YW5jZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZS5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZUluc3RhbmNlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJOdWxsTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTnVsbFR5
cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlBhcnNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJQcmVwYXJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJQcm9wZXJ0eVJlc29sdmVy
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm9ncmFtLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJQcm90b2NvbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvdG9jb2xEZWNs
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm90b2NvbEZ1bmNEZWNsLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJQcm90b2NvbFJlZi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
UHRyVHlwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVjdXJzaW9uQ2hlY2tlci5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVzb2x2ZU5hbWVzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJSZXNv
bHZlUHJvcGVydGllcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVzb2x2ZVR5cGVEZWZz
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXR1cm4uanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9IlJldHVybkNoZWNrZXIuanMiPjwvc2NyaXB0PgpAQCAtOTcsMTIgKzEwNSwxNCBAQAog
PHNjcmlwdCBzcmM9IlN0cnVjdExheW91dEJ1aWxkZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IlN0cnVjdFR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlN1YnN0aXR1dGlvbi5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9IlN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IlR5cGVEZWYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5cGVE
ZWZSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZU9yVmFyaWFibGVSZWYu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlR5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZVJlZi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
VHlwZVZhcmlhYmxlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJUeXBlVmFyaWFibGVUcmFj
a2VyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlZFZhbHVlLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJVaW50TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVWlu
dExpdGVyYWxUeXBlLmpzIj48L3NjcmlwdD4KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Rlc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVGVzdC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBmdW5jdGlvbiBj
aGVja051bWJlcihwcm9ncmFtLCByZXN1bHQsIGV4CiAgICAgaWYgKCFyZXN1bHQudHlwZS5pc051
bWJlcikKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQgdHlwZTsgcmVzdWx0
OiAiICsgcmVzdWx0KTsKICAgICBpZiAocmVzdWx0LnZhbHVlICE9IGV4cGVjdGVkKQotICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdDogIiArIHJlc3VsdCArICIgKGV4cGVjdGVk
ICIgKyBleHBlY3RlZCArICIpIik7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVz
dWx0OiAiICsgcmVzdWx0LnZhbHVlICsgIiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIikiKTsK
IH0KIAogZnVuY3Rpb24gbWFrZVVpbnQocHJvZ3JhbSwgdmFsdWUpCkBAIC00MjIsMTAgKzQyMiwx
MCBAQCBmdW5jdGlvbiBURVNUX2RldmljZUFycmF5U3RvcmVJbnRMaXRlcmFsCiBmdW5jdGlvbiBU
RVNUX3NpbXBsZVByb3RvY29sKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAg
ICAgIHByb3RvY29sIEFkZGFibGUgewotICAgICAgICAgICAgQWRkYWJsZSBvcGVyYXRvcisoQWRk
YWJsZSwgQWRkYWJsZSk7CisgICAgICAgIHByb3RvY29sIE15QWRkYWJsZSB7CisgICAgICAgICAg
ICBNeUFkZGFibGUgb3BlcmF0b3IrKE15QWRkYWJsZSwgTXlBZGRhYmxlKTsKICAgICAgICAgfQot
ICAgICAgICBUIGFkZDxUOkFkZGFibGU+KFQgYSwgVCBiKQorICAgICAgICBUIGFkZDxUOk15QWRk
YWJsZT4oVCBhLCBUIGIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhICsgYjsKICAg
ICAgICAgfQpAQCAtNzQzLDcgKzc0Myw3IEBAIGZ1bmN0aW9uIFRFU1Rfc3RvcmVOdWxsQXJyYXlS
ZWYoKQogICAgICAgICAoKSA9PiBkb1ByZXAoYAogICAgICAgICAgICAgdm9pZCBmb28oKSB7IG51
bGxbMHVdID0gNDI7IH0KICAgICAgICAgYCksCi0gICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2Yg
V1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZv
ciBjYWxsIikgIT0gLTEpOworICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3Ig
JiYgZS5tZXNzYWdlLmluZGV4T2YoIkxIUyBvZiBhc3NpZ25tZW50IGlzIG5vdCBhbiBMVmFsdWUi
KSAhPSAtMSk7CiB9CiAKIGZ1bmN0aW9uIFRFU1RfcmV0dXJuTnVsbEFycmF5UmVmKCkKQEAgLTg1
MSwxNCArODUxLDE0IEBAIGZ1bmN0aW9uIFRFU1RfYmFkSW50TGl0ZXJhbEZvckludCgpCiB7CiAg
ICAgY2hlY2tGYWlsKAogICAgICAgICAoKSA9PiBkb1ByZXAoInZvaWQgZm9vKCkgeyBpbnQgeCA9
IDMwMDAwMDAwMDA7IH0iKSwKLSAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9y
KTsKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXU3ludGF4RXJyb3IpOwogfQogCiBmdW5j
dGlvbiBURVNUX2JhZEludExpdGVyYWxGb3JVaW50KCkKIHsKICAgICBjaGVja0ZhaWwoCiAgICAg
ICAgICgpID0+IGRvUHJlcCgidm9pZCBmb28oKSB7IHVpbnQgeCA9IDUwMDAwMDAwMDA7IH0iKSwK
LSAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKKyAgICAgICAgKGUpID0+
IGUgaW5zdGFuY2VvZiBXU3ludGF4RXJyb3IpOwogfQogCiBmdW5jdGlvbiBURVNUX2JhZEludExp
dGVyYWxGb3JEb3VibGUoKQpAQCAtMTQ2NywxMCArMTQ2NywxMCBAQCBmdW5jdGlvbiBURVNUX2lu
dExpdGVyYWxHZW5lcmljKCkKIGZ1bmN0aW9uIFRFU1RfaW50TGl0ZXJhbEdlbmVyaWNXaXRoUHJv
dG9jb2xzKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIHByb3RvY29s
IENvbnZlcnRpYmxlVG9JbnQgewotICAgICAgICAgICAgb3BlcmF0b3IgaW50KENvbnZlcnRpYmxl
VG9JbnQpOworICAgICAgICBwcm90b2NvbCBNeUNvbnZlcnRpYmxlVG9JbnQgeworICAgICAgICAg
ICAgb3BlcmF0b3IgaW50KE15Q29udmVydGlibGVUb0ludCk7CiAgICAgICAgIH0KLSAgICAgICAg
aW50IGZvbzxUOkNvbnZlcnRpYmxlVG9JbnQ+KFQgeCkgeyByZXR1cm4gaW50KHgpOyB9CisgICAg
ICAgIGludCBmb288VDpNeUNvbnZlcnRpYmxlVG9JbnQ+KFQgeCkgeyByZXR1cm4gaW50KHgpOyB9
CiAgICAgICAgIGludCBiYXIoKSB7IHJldHVybiBmb28oNDIpOyB9CiAgICAgYCk7CiAgICAgY2hl
Y2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSwgW10pLCA0Mik7
CkBAIC0xNDg4LDEwICsxNDg4LDEwIEBAIGZ1bmN0aW9uIFRFU1RfdWludExpdGVyYWxHZW5lcmlj
KCkKIGZ1bmN0aW9uIFRFU1RfdWludExpdGVyYWxHZW5lcmljV2l0aFByb3RvY29scygpCiB7CiAg
ICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBwcm90b2NvbCBDb252ZXJ0aWJsZVRv
VWludCB7Ci0gICAgICAgICAgICBvcGVyYXRvciB1aW50KENvbnZlcnRpYmxlVG9VaW50KTsKKyAg
ICAgICAgcHJvdG9jb2wgTXlDb252ZXJ0aWJsZVRvVWludCB7CisgICAgICAgICAgICBvcGVyYXRv
ciB1aW50KE15Q29udmVydGlibGVUb1VpbnQpOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9v
PFQ6Q29udmVydGlibGVUb1VpbnQ+KFQgeCkgeyByZXR1cm4gdWludCh4KTsgfQorICAgICAgICB1
aW50IGZvbzxUOk15Q29udmVydGlibGVUb1VpbnQ+KFQgeCkgeyByZXR1cm4gdWludCh4KTsgfQog
ICAgICAgICB1aW50IGJhcigpIHsgcmV0dXJuIGZvbyg0MnUpOyB9CiAgICAgYCk7CiAgICAgY2hl
Y2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10sIFtdKSwgNDIp
OwpAQCAtMjU2Niw2ICsyNTY2LDY2MCBAQCBmdW5jdGlvbiBURVNUX21ha2VBcnJheVJlZkZyb21B
cnJheVJlZigpCiAgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7CiB9CiAK
K2Z1bmN0aW9uIFRFU1Rfc2ltcGxlTGVuZ3RoKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJl
cChgCisgICAgICAgIHVpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgZG91YmxlWzc1
NF0gYXJyYXk7CisgICAgICAgICAgICByZXR1cm4gKEBhcnJheSkubGVuZ3RoOworICAgICAgICB9
CisgICAgYCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10sIFtdKSwgNzU0KTsKK30KKworZnVuY3Rpb24gVEVTVF9ub25BcnJheVJlZkFycmF5
TGVuZ3RoKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHVpbnQgZm9v
KCkKKyAgICAgICAgeworICAgICAgICAgICAgZG91YmxlWzc1NF0gYXJyYXk7CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXkubGVuZ3RoOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tVaW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNzU0KTsKK30K
KworZnVuY3Rpb24gVEVTVF9hc3NpZ25MZW5ndGgoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAg
ICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgZm9vKCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBkb3VibGVbNzU0XSBhcnJheTsKKyAgICAgICAgICAgICAgICAoQGFy
cmF5KS5sZW5ndGggPSA0MjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChl
KSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiTEhTIG9m
IGFzc2lnbm1lbnQgaXMgbm90IGFuIExWYWx1ZSIpICE9IC0xKTsKK30KKworZnVuY3Rpb24gVEVT
VF9hc3NpZ25MZW5ndGhIZWxwZXIoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4g
ZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgYmFyKHRocmVhZCBkb3VibGVbXSBhcnJheSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhcnJheS5sZW5ndGggPSA0MjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZvaWQgZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBkb3VibGVbNzU0XSBhcnJheTsKKyAgICAgICAgICAgICAgICBiYXIoQGFycmF5KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5
cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiQ2Fubm90IGVtaXQgc2V0IGJlY2F1c2U6IERp
ZCBub3QgZmluZCBhbnkgZnVuY3Rpb25zIG5hbWVkIG9wZXJhdG9yLmxlbmd0aD0iKSAhPSAtMSk7
Cit9CisKK2Z1bmN0aW9uIFRFU1Rfc2ltcGxlR2V0dGVyKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9
IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAg
ICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9yLnkoRm9vIGZvbykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZvby54OworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAg
ICB7CisgICAgICAgICAgICBGb28gZm9vOworICAgICAgICAgICAgZm9vLnggPSA3ODA0OworICAg
ICAgICAgICAgcmV0dXJuIGZvby55OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLCA3ODA0KTsKK30K
KworZnVuY3Rpb24gVEVTVF9zaW1wbGVTZXR0ZXIoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9Q
cmVwKGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAg
fQorICAgICAgICBpbnQgb3BlcmF0b3IueShGb28gZm9vKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZm9vLng7CisgICAgICAgIH0KKyAgICAgICAgRm9vIG9wZXJhdG9yLnk9KEZvbyBm
b28sIGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9vLnggPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICBmb28ueSA9IDc4MDQ7Cisg
ICAgICAgICAgICByZXR1cm4gZm9vLng7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0lu
dChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDc4MDQpOwor
fQorCitmdW5jdGlvbiBURVNUX2dlbmVyaWNBY2Nlc3NvcnMoKQoreworICAgIGxldCBwcm9ncmFt
ID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZvbzxUPiB7CisgICAgICAgICAgICBUIHg7Cisg
ICAgICAgICAgICBUWzNdIHk7CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJhcjxUPiB7Cisg
ICAgICAgICAgICBUIHg7CisgICAgICAgICAgICBUIHk7CisgICAgICAgIH0KKyAgICAgICAgQmFy
PFQ+IG9wZXJhdG9yLno8VD4oRm9vPFQ+IGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgQmFy
PFQ+IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC54ID0gZm9vLng7CisgICAgICAgICAgICBy
ZXN1bHQueSA9IGZvby55WzFdOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorICAgICAgICBGb288VD4gb3BlcmF0b3Iuej08VD4oRm9vPFQ+IGZvbywgQmFyPFQ+IGJhcikK
KyAgICAgICAgeworICAgICAgICAgICAgZm9vLnggPSBiYXIueDsKKyAgICAgICAgICAgIGZvby55
WzFdID0gYmFyLnk7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgICAg
IFQgb3BlcmF0b3Iuc3VtPFQ6QWRkYWJsZT4oRm9vPFQ+IGZvbykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZvby54ICsgZm9vLnlbMF0gKyBmb28ueVsxXSArIGZvby55WzJdOworICAg
ICAgICB9CisgICAgICAgIFQgb3BlcmF0b3Iuc3VtPFQ6QWRkYWJsZT4oQmFyPFQ+IGJhcikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhci54ICsgYmFyLnk7CisgICAgICAgIH0KKyAg
ICAgICAgb3BlcmF0b3I8VD4gQmFyPFQ+KFQgeCwgVCB5KQorICAgICAgICB7CisgICAgICAgICAg
ICBCYXI8VD4gcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LnggPSB4OworICAgICAgICAgICAg
cmVzdWx0LnkgPSB5OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
ICAgICB2b2lkIHNldHVwKHRocmVhZCBGb288aW50Pl4gZm9vKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb28tPnggPSAxOworICAgICAgICAgICAgZm9vLT55WzBdID0gMjsKKyAgICAgICAgICAg
IGZvby0+eVsxXSA9IDM7CisgICAgICAgICAgICBmb28tPnlbMl0gPSA0OworICAgICAgICB9Cisg
ICAgICAgIGludCB0ZXN0U3VwZXJCYXNpYygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbzxp
bnQ+IGZvbzsKKyAgICAgICAgICAgIHNldHVwKCZmb28pOworICAgICAgICAgICAgcmV0dXJuIGZv
by5zdW07CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RaU2V0dGVyRGlkU2V0WSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIGZvby56ID0gQmFy
PGludD4oNTMsIDkzMik7CisgICAgICAgICAgICByZXR1cm4gZm9vLnlbMV07CisgICAgICAgIH0K
KyAgICAgICAgaW50IHRlc3RaU2V0dGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vPGlu
dD4gZm9vOworICAgICAgICAgICAgZm9vLnogPSBCYXI8aW50Pig1MywgOTMyKTsKKyAgICAgICAg
ICAgIHJldHVybiBmb28uc3VtOworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0WkdldHRlcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIC8vIFRo
aXMgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IGNhbGwgc2V0dXAoKSBqdXN0IHNvIHdlIHRlc3QgdGhp
cyBzeW50YXguCisgICAgICAgICAgICBmb28ueCA9IDE7CisgICAgICAgICAgICBmb28ueVswXSA9
IDI7CisgICAgICAgICAgICBmb28ueVsxXSA9IDM7CisgICAgICAgICAgICBmb28ueVsyXSA9IDQ7
CisgICAgICAgICAgICByZXR1cm4gZm9vLnouc3VtOworICAgICAgICB9CisgICAgICAgIGludCB0
ZXN0TFZhbHVlRW11bGF0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vPGludD4gZm9v
OworICAgICAgICAgICAgc2V0dXAoJmZvbyk7CisgICAgICAgICAgICBmb28uei55ICo9IDU7Cisg
ICAgICAgICAgICByZXR1cm4gZm9vLnN1bTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFN1cGVyQmFzaWMiLCBbXSwg
W10pLCAxICsgMiArIDMgKyA0KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgInRlc3RaU2V0dGVyRGlkU2V0WSIsIFtdLCBbXSksIDkzMik7CisgICAgY2hlY2tJ
bnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0WlNldHRlciIsIFtdLCBbXSks
IDUzICsgOTMyKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
InRlc3RaR2V0dGVyIiwgW10sIFtdKSwgMSArIDMpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdExWYWx1ZUVtdWxhdGlvbiIsIFtdLCBbXSksIDEgKyAy
ICsgMyAqIDUgKyA0KTsKK30KKworZnVuY3Rpb24gVEVTVF9iaXRTdWJzY3JpcHRBY2Nlc3Nvcigp
Cit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBwcm90b2NvbCBNeUJpdG1h
c2thYmxlIDogRXF1YXRhYmxlIHsKKyAgICAgICAgICAgIE15Qml0bWFza2FibGUgb3BlcmF0b3Im
KE15Qml0bWFza2FibGUsIE15Qml0bWFza2FibGUpOworICAgICAgICAgICAgTXlCaXRtYXNrYWJs
ZSBvcGVyYXRvcnwoTXlCaXRtYXNrYWJsZSwgTXlCaXRtYXNrYWJsZSk7CisgICAgICAgICAgICBN
eUJpdG1hc2thYmxlIG9wZXJhdG9yfihNeUJpdG1hc2thYmxlKTsKKyAgICAgICAgICAgIE15Qml0
bWFza2FibGUgb3BlcmF0b3I8PChNeUJpdG1hc2thYmxlLCB1aW50KTsKKyAgICAgICAgICAgIE15
Qml0bWFza2FibGUgb3BlcmF0b3I+PihNeUJpdG1hc2thYmxlLCB1aW50KTsKKyAgICAgICAgICAg
IG9wZXJhdG9yIE15Qml0bWFza2FibGUoaW50KTsKKyAgICAgICAgfQorICAgICAgICBUIG1hc2tG
b3JCaXRJbmRleDxUOk15Qml0bWFza2FibGU+KHVpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBUKDEpIDw8IGluZGV4OworICAgICAgICB9CisgICAgICAgIGJvb2wgb3Bl
cmF0b3JbXTxUOk15Qml0bWFza2FibGU+KFQgdmFsdWUsIHVpbnQgaW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBib29sKHZhbHVlICYgbWFza0ZvckJpdEluZGV4PFQ+KGluZGV4
KSk7CisgICAgICAgIH0KKyAgICAgICAgVCBvcGVyYXRvcltdPTxUOk15Qml0bWFza2FibGU+KFQg
dmFsdWUsIHVpbnQgaW5kZXgsIGJvb2wgYml0KQorICAgICAgICB7CisgICAgICAgICAgICBUIG1h
c2sgPSBtYXNrRm9yQml0SW5kZXg8VD4oaW5kZXgpOworICAgICAgICAgICAgaWYgKGJpdCkKKyAg
ICAgICAgICAgICAgICB2YWx1ZSB8PSBtYXNrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHZhbHVlICY9IH5tYXNrOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAg
ICB9CisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoKGludCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIDMyOworICAgICAgICB9CisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3Ro
KHVpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAzMjsKKyAgICAgICAgfQorICAg
ICAgICBpbnQgdGVzdEludFNldEJpdDMoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZm9v
OworICAgICAgICAgICAgZm9vWzNdID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmb287Cisg
ICAgICAgIH0KKyAgICAgICAgYm9vbCB0ZXN0SW50U2V0R2V0Qml0NSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGludCBmb287CisgICAgICAgICAgICBmb29bNV0gPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIGZvb1s1XTsKKyAgICAgICAgfQorICAgICAgICBib29sIHRlc3RJbnRHZXRCaXQx
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGZvbzsKKyAgICAgICAgICAgIHJldHVybiBm
b29bMV07CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RVaW50U3VtQml0cygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGludCBmb28gPSA0MjsKKyAgICAgICAgICAgIGludCByZXN1bHQ7Cisg
ICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBmb28ubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZm9vW2ldKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQrKzsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAg
ICAgaW50IHRlc3RVaW50U3dhcEJpdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZm9v
ID0gNDI7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBmb28ubGVuZ3RoIC8gMjsg
KytpKSB7CisgICAgICAgICAgICAgICAgYm9vbCB0bXAgPSBmb29baV07CisgICAgICAgICAgICAg
ICAgZm9vW2ldID0gZm9vW2Zvby5sZW5ndGggLSBpIC0gMV07CisgICAgICAgICAgICAgICAgZm9v
W2Zvby5sZW5ndGggLSBpIC0gMV0gPSB0bXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gZm9vOworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAg
dWludCBmOworICAgICAgICAgICAgdWludCBnOworICAgICAgICB9CisgICAgICAgIG9wZXJhdG9y
IEZvbyh1aW50IGYsIHVpbnQgZykKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIHJlc3VsdDsK
KyAgICAgICAgICAgIHJlc3VsdC5mID0gZjsKKyAgICAgICAgICAgIHJlc3VsdC5nID0gZzsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9y
LmgoRm9vIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludCgoZm9vLmYgJiAw
eGZmZmYpIHwgKChmb28uZyAmIDB4ZmZmZikgPDwgMTYpKTsKKyAgICAgICAgfQorICAgICAgICBG
b28gb3BlcmF0b3IuaD0oRm9vIGZvbywgaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBmb28uZiAmPSB+MHhmZmZmdTsKKyAgICAgICAgICAgIGZvby5mIHw9IHVpbnQodmFsdWUpICYg
MHhmZmZmOworICAgICAgICAgICAgZm9vLmcgJj0gfjB4ZmZmZnU7CisgICAgICAgICAgICBmb28u
ZyB8PSAodWludCh2YWx1ZSkgPj4gMTYpICYgMHhmZmZmOworICAgICAgICAgICAgcmV0dXJuIGZv
bzsKKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdExWYWx1ZUVtdWxhdGlvbigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICBmb28uZiA9IDQyOworICAgICAg
ICAgICAgZm9vLmcgPSAzNzsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IGZvby5o
Lmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGZvby5oW2ldIF49IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gaW50KGZvby5mICsgZm9vLmcpOworICAgICAgICB9CisgICAgICAgIHN0cnVj
dCBCYXIgeworICAgICAgICAgICAgRm9vIGE7CisgICAgICAgICAgICBGb28gYjsKKyAgICAgICAg
fQorICAgICAgICBGb28gb3BlcmF0b3IuYyhCYXIgYmFyKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gRm9vKHVpbnQoYmFyLmEuaCksIHVpbnQoYmFyLmIuaCkpOworICAgICAgICB9Cisg
ICAgICAgIEJhciBvcGVyYXRvci5jPShCYXIgYmFyLCBGb28gZm9vKQorICAgICAgICB7CisgICAg
ICAgICAgICBiYXIuYS5oID0gaW50KGZvby5mKTsKKyAgICAgICAgICAgIGJhci5iLmggPSBpbnQo
Zm9vLmcpOworICAgICAgICAgICAgcmV0dXJuIGJhcjsKKyAgICAgICAgfQorICAgICAgICBpbnQg
dGVzdENyYXp5TFZhbHVlRW11bGF0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgQmFyIGJh
cjsKKyAgICAgICAgICAgIGJhci5hLmYgPSAxOworICAgICAgICAgICAgYmFyLmEuZyA9IDI7Cisg
ICAgICAgICAgICBiYXIuYi5mID0gMzsKKyAgICAgICAgICAgIGJhci5iLmcgPSA0OworICAgICAg
ICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYmFyLmMuaC5sZW5ndGg7IGkgKz0gMikKKyAgICAg
ICAgICAgICAgICBiYXIuYy5oW2ldIF49IHRydWU7CisgICAgICAgICAgICByZXR1cm4gaW50KGJh
ci5hLmYgKyBiYXIuYS5nICsgYmFyLmIuZiArIGJhci5iLmcpOworICAgICAgICB9CisgICAgYCk7
CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0SW50U2V0
Qml0MyIsIFtdLCBbXSksIDgpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgInRlc3RJbnRTZXRHZXRCaXQ1IiwgW10sIFtdKSwgdHJ1ZSk7CisgICAgY2hlY2tC
b29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdEludEdldEJpdDEiLCBbXSwg
W10pLCBmYWxzZSk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJ0ZXN0VWludFN1bUJpdHMiLCBbXSwgW10pLCAzKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RVaW50U3dhcEJpdHMiLCBbXSwgW10pLCAxNDA5Mjg2
MTQ0KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RM
VmFsdWVFbXVsYXRpb24iLCBbXSwgW10pLCAxMzA5OTEpOworICAgIGNoZWNrSW50KHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdENyYXp5TFZhbHVlRW11bGF0aW9uIiwgW10sIFtd
KSwgNDM2OTYpOworfQorCitmdW5jdGlvbiBURVNUX25lc3RlZFN1YnNjcmlwdExWYWx1ZUVtdWxh
dGlvbigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBzdHJ1Y3QgRm9v
IHsKKyAgICAgICAgICAgIGludFs3XSBhcnJheTsKKyAgICAgICAgfQorICAgICAgICBpbnQgb3Bl
cmF0b3JbXShGb28gZm9vLCB1aW50IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZm9vLmFycmF5W2luZGV4XTsKKyAgICAgICAgfQorICAgICAgICBGb28gb3BlcmF0b3JbXT0o
Rm9vIGZvbywgdWludCBpbmRleCwgaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBm
b28uYXJyYXlbaW5kZXhdID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAg
ICB9CisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoKEZvbyBmb28pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBmb28uYXJyYXkubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGlu
dCBzdW0oRm9vIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHJlc3VsdCA9IDA7Cisg
ICAgICAgICAgICBmb3IgKHVpbnQgaSA9IGZvby5sZW5ndGg7IGktLTspCisgICAgICAgICAgICAg
ICAgcmVzdWx0ICs9IGZvb1tpXTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKyAgICAgICAgc3RydWN0IEJhciB7CisgICAgICAgICAgICBGb29bNl0gYXJyYXk7CisgICAg
ICAgIH0KKyAgICAgICAgdWludCBvcGVyYXRvci5sZW5ndGgoQmFyIGJhcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGJhci5hcnJheS5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAg
Rm9vIG9wZXJhdG9yW10oQmFyIGJhciwgdWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGJhci5hcnJheVtpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgQmFyIG9wZXJh
dG9yW109KEJhciBiYXIsIHVpbnQgaW5kZXgsIEZvbyB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgYmFyLmFycmF5W2luZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIGJhcjsK
KyAgICAgICAgfQorICAgICAgICBpbnQgc3VtKEJhciBiYXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludCByZXN1bHQgPSAwOworICAgICAgICAgICAgZm9yICh1aW50IGkgPSBiYXIubGVuZ3Ro
OyBpLS07KQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdW0oYmFyW2ldKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJheiB7CisgICAg
ICAgICAgICBCYXJbNV0gYXJyYXk7CisgICAgICAgIH0KKyAgICAgICAgQmFyIG9wZXJhdG9yW10o
QmF6IGJheiwgdWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhei5h
cnJheVtpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgQmF6IG9wZXJhdG9yW109KEJheiBiYXos
IHVpbnQgaW5kZXgsIEJhciB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYmF6LmFycmF5
W2luZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIGJhejsKKyAgICAgICAgfQorICAg
ICAgICB1aW50IG9wZXJhdG9yLmxlbmd0aChCYXogYmF6KQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYmF6LmFycmF5Lmxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3VtKEJh
eiBiYXopCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgICAg
ICAgZm9yICh1aW50IGkgPSBiYXoubGVuZ3RoOyBpLS07KQorICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSBzdW0oYmF6W2ldKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICAgICAgdm9pZCBzZXRWYWx1ZXModGhyZWFkIEJhel4gYmF6KQorICAgICAgICB7CisgICAg
ICAgICAgICBmb3IgKHVpbnQgaSA9IGJhei0+bGVuZ3RoOyBpLS07KSB7CisgICAgICAgICAgICAg
ICAgZm9yICh1aW50IGogPSAoXmJheilbaV0ubGVuZ3RoOyBqLS07KSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAodWludCBrID0gKF5iYXopW2ldW2pdLmxlbmd0aDsgay0tOykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICheYmF6KVtpXVtqXVtrXSA9IGludChpICsgaiArIGspOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdFNl
dFZhbHVlc0FuZFN1bSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJheiBiYXo7CisgICAgICAg
ICAgICBzZXRWYWx1ZXMoJmJheik7CisgICAgICAgICAgICByZXR1cm4gc3VtKGJheik7CisgICAg
ICAgIH0KKyAgICAgICAgaW50IHRlc3RTZXRWYWx1ZXNNdXRhdGVWYWx1ZXNBbmRTdW0oKQorICAg
ICAgICB7CisgICAgICAgICAgICBCYXogYmF6OworICAgICAgICAgICAgc2V0VmFsdWVzKCZiYXop
OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSBiYXoubGVuZ3RoOyBpLS07KSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1aW50IGogPSBiYXpbaV0ubGVuZ3RoOyBqLS07KSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodWludCBrID0gYmF6W2ldW2pdLmxlbmd0aDsgay0tOykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJheltpXVtqXVtrXSAqPSBpbnQoayk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1bShiYXopOworICAgICAgICB9
CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0
ZXN0U2V0VmFsdWVzQW5kU3VtIiwgW10sIFtdKSwgMTU3NSk7CisgICAgY2hlY2tJbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0U2V0VmFsdWVzTXV0YXRlVmFsdWVzQW5kU3Vt
IiwgW10sIFtdKSwgNTU2NSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfYm9vbEJpdEFuZCgpCit7Cisg
ICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBib29sIGZvbyhib29sIGEsIGJvb2wg
YikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgJiBiOworICAgICAgICB9CisgICAg
YCk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSksIG1ha2VCb29sKHByb2dyYW0sIGZhbHNlKV0p
LCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCB0cnVlKSwgbWFrZUJvb2wocHJvZ3JhbSwgZmFs
c2UpXSksIGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIGZhbHNlKSwgbWFrZUJvb2wocHJvZ3Jh
bSwgdHJ1ZSldKSwgZmFsc2UpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSksIG1ha2VCb29sKHBy
b2dyYW0sIHRydWUpXSksIHRydWUpOworfQorCitmdW5jdGlvbiBURVNUX2Jvb2xCaXRPcigpCit7
CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBib29sIGZvbyhib29sIGEsIGJv
b2wgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgfCBiOworICAgICAgICB9Cisg
ICAgYCk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSksIG1ha2VCb29sKHByb2dyYW0sIGZhbHNl
KV0pLCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCB0cnVlKSwgbWFrZUJvb2wocHJvZ3JhbSwg
ZmFsc2UpXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpLCBtYWtlQm9vbChwcm9n
cmFtLCB0cnVlKV0pLCB0cnVlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIHRydWUpLCBtYWtlQm9vbChw
cm9ncmFtLCB0cnVlKV0pLCB0cnVlKTsKK30KKworZnVuY3Rpb24gVEVTVF9ib29sQml0WG9yKCkK
K3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGJvb2wgZm9vKGJvb2wgYSwg
Ym9vbCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSBeIGI7CisgICAgICAgIH0K
KyAgICBgKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIGZhbHNlKSwgbWFrZUJvb2wocHJvZ3JhbSwgZmFs
c2UpXSksIGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIHRydWUpLCBtYWtlQm9vbChwcm9ncmFt
LCBmYWxzZSldKSwgdHJ1ZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSksIG1ha2VCb29sKHBy
b2dyYW0sIHRydWUpXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSksIG1ha2VCb29s
KHByb2dyYW0sIHRydWUpXSksIGZhbHNlKTsKK30KKworZnVuY3Rpb24gVEVTVF9ib29sQml0Tm90
KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGJvb2wgZm9vKGJvb2wg
YSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIH5hOworICAgICAgICB9CisgICAgYCk7
CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSldKSwgdHJ1ZSk7CisgICAgY2hlY2tCb29sKHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCB0
cnVlKV0pLCBmYWxzZSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfaW50Qml0QW5kKCkKK3sKKyAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oaW50IGEsIGludCBiKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAmIGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAg
ICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFr
ZUludChwcm9ncmFtLCAxKSwgbWFrZUludChwcm9ncmFtLCA3KV0pLCAxKTsKKyAgICBjaGVja0lu
dChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9n
cmFtLCA2NTUzNSksIG1ha2VJbnQocHJvZ3JhbSwgNDIpXSksIDQyKTsKKyAgICBjaGVja0ludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFt
LCAtMSksIG1ha2VJbnQocHJvZ3JhbSwgLTcpXSksIC03KTsKKyAgICBjaGVja0ludChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAwKSwg
bWFrZUludChwcm9ncmFtLCA4NTczMildKSwgMCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfaW50Qml0
T3IoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyhpbnQg
YSwgaW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhIHwgYjsKKyAgICAgICAg
fQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDEpLCBtYWtlSW50KHByb2dyYW0sIDcpXSksIDcp
OworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlSW50KHByb2dyYW0sIDY1NTM1KSwgbWFrZUludChwcm9ncmFtLCA0MildKSwgNjU1MzUp
OworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlSW50KHByb2dyYW0sIC0xKSwgbWFrZUludChwcm9ncmFtLCAtNyldKSwgLTEpOworICAg
IGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtl
SW50KHByb2dyYW0sIDApLCBtYWtlSW50KHByb2dyYW0sIDg1NzMyKV0pLCA4NTczMik7Cit9CisK
K2Z1bmN0aW9uIFRFU1RfaW50Qml0WG9yKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChg
CisgICAgICAgIGludCBmb28oaW50IGEsIGludCBiKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYSBeIGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAxKSwgbWFr
ZUludChwcm9ncmFtLCA3KV0pLCA2KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA2NTUzNSksIG1ha2VJbnQo
cHJvZ3JhbSwgNDIpXSksIDY1NDkzKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAtMSksIG1ha2VJbnQocHJv
Z3JhbSwgLTcpXSksIDYpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDApLCBtYWtlSW50KHByb2dyYW0sIDg1
NzMyKV0pLCA4NTczMik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfaW50Qml0Tm90KCkKK3sKKyAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oaW50IGEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiB+YTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dy
YW0sIDEpXSksIC0yKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA2NTUzNSldKSwgLTY1NTM2KTsKKyAgICBj
aGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUlu
dChwcm9ncmFtLCAtMSldKSwgMCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgMCldKSwgLTEpOworfQorCitm
dW5jdGlvbiBURVNUX2ludExTaGlmdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAor
ICAgICAgICBpbnQgZm9vKGludCBhLCB1aW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBhIDw8IGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAxKSwgbWFr
ZVVpbnQocHJvZ3JhbSwgNyldKSwgMTI4KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA2NTUzNSksIG1ha2VV
aW50KHByb2dyYW0sIDIpXSksIDI2MjE0MCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgLTEpLCBtYWtlVWlu
dChwcm9ncmFtLCA1KV0pLCAtMzIpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDApLCBtYWtlVWludChwcm9n
cmFtLCAzKV0pLCAwKTsKK30KKworZnVuY3Rpb24gVEVTVF9pbnRSU2hpZnQoKQoreworICAgIGxl
dCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyhpbnQgYSwgdWludCBiKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSA+PiBiOworICAgICAgICB9CisgICAgYCk7Cisg
ICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21h
a2VJbnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHByb2dyYW0sIDcpXSksIDApOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHBy
b2dyYW0sIDY1NTM1KSwgbWFrZVVpbnQocHJvZ3JhbSwgMildKSwgMTYzODMpOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHBy
b2dyYW0sIC0xKSwgbWFrZVVpbnQocHJvZ3JhbSwgNSldKSwgLTEpOworICAgIGNoZWNrSW50KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0s
IDApLCBtYWtlVWludChwcm9ncmFtLCAzKV0pLCAwKTsKK30KKworZnVuY3Rpb24gVEVTVF91aW50
Qml0QW5kKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHVpbnQgZm9v
KHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAmIGI7Cisg
ICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDEpLCBtYWtlVWludChwcm9ncmFt
LCA3KV0pLCAxKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDY1NTM1KSwgbWFrZVVpbnQocHJvZ3JhbSwg
NDIpXSksIDQyKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIC0xKSwgbWFrZVVpbnQocHJvZ3JhbSwgLTcp
XSksIDQyOTQ5NjcyODkpOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMCksIG1ha2VVaW50KHByb2dyYW0s
IDg1NzMyKV0pLCAwKTsKK30KKworZnVuY3Rpb24gVEVTVF91aW50Qml0T3IoKQoreworICAgIGxl
dCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhIHwgYjsKKyAgICAgICAgfQorICAgIGApOwor
ICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBb
bWFrZVVpbnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHByb2dyYW0sIDcpXSksIDcpOworICAgIGNo
ZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVp
bnQocHJvZ3JhbSwgNjU1MzUpLCBtYWtlVWludChwcm9ncmFtLCA0MildKSwgNjU1MzUpOworICAg
IGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFr
ZVVpbnQocHJvZ3JhbSwgLTEpLCBtYWtlVWludChwcm9ncmFtLCAtNyldKSwgNDI5NDk2NzI5NSk7
CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlVWludChwcm9ncmFtLCAwKSwgbWFrZVVpbnQocHJvZ3JhbSwgODU3MzIpXSksIDg1NzMy
KTsKK30KKworZnVuY3Rpb24gVEVTVF91aW50Qml0WG9yKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9
IGRvUHJlcChgCisgICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYSBeIGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja1Vp
bnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHBy
b2dyYW0sIDEpLCBtYWtlVWludChwcm9ncmFtLCA3KV0pLCA2KTsKKyAgICBjaGVja1VpbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0s
IDY1NTM1KSwgbWFrZVVpbnQocHJvZ3JhbSwgNDIpXSksIDY1NDkzKTsKKyAgICBjaGVja1VpbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dy
YW0sIC0xKSwgbWFrZVVpbnQocHJvZ3JhbSwgLTcpXSksIDYpOworICAgIGNoZWNrVWludChwcm9n
cmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwg
MCksIG1ha2VVaW50KHByb2dyYW0sIDg1NzMyKV0pLCA4NTczMik7Cit9CisKK2Z1bmN0aW9uIFRF
U1RfdWludEJpdE5vdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1
aW50IGZvbyh1aW50IGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB+YTsKKyAgICAg
ICAgfQorICAgIGApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMSldKSwgNDI5NDk2NzI5NCk7CisgICAg
Y2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtl
VWludChwcm9ncmFtLCA2NTUzNSldKSwgNDI5NDkwMTc2MCk7CisgICAgY2hlY2tVaW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAt
MSldKSwgMCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAwKV0pLCA0Mjk0OTY3Mjk1KTsKK30KKworZnVu
Y3Rpb24gVEVTVF91aW50TFNoaWZ0KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisg
ICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYSA8PCBiOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAxKSwg
bWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgMTI4KTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDY1NTM1KSwg
bWFrZVVpbnQocHJvZ3JhbSwgMildKSwgMjYyMTQwKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIC0xKSwg
bWFrZVVpbnQocHJvZ3JhbSwgNSldKSwgNDI5NDk2NzI2NCk7CisgICAgY2hlY2tVaW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAw
KSwgbWFrZVVpbnQocHJvZ3JhbSwgMyldKSwgMCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfdWludFJT
aGlmdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1aW50IGZvbyh1
aW50IGEsIHVpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPj4gYjsKKyAg
ICAgICAgfQorICAgIGApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHByb2dyYW0s
IDcpXSksIDApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgNjU1MzUpLCBtYWtlVWludChwcm9ncmFtLCAy
KV0pLCAxNjM4Myk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAtMSksIG1ha2VVaW50KHByb2dyYW0sIDUp
XSksIDEzNDIxNzcyNyk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAwKSwgbWFrZVVpbnQocHJvZ3JhbSwg
MyldKSwgMCk7Cit9CisKIGxldCBmaWx0ZXIgPSAvLiovOyAvLyBydW4gZXZlcnl0aGluZyBieSBk
ZWZhdWx0CiBpZiAodGhpc1siYXJndW1lbnRzIl0pIHsKICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9UeXBlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBAIGNsYXNzIFR5cGUg
ZXh0ZW5kcyBOb2RlIHsKICAgICBnZXQga2luZCgpIHsgcmV0dXJuIFR5cGU7IH0KICAgICBnZXQg
aXNQdHIoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGdldCBpc0FycmF5UmVmKCkgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBnZXQgaXNSZWYoKSB7IHJldHVybiB0aGlzLmlzUHRyIHx8IHRoaXMuaXNB
cnJheVJlZjsgfQogICAgIGdldCBpc051bWJlcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0
IGlzSW50KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNGbG9hdCgpIHsgcmV0dXJuIGZh
bHNlOyB9CkBAIC00MSw1ICs0MiwxOSBAQCBjbGFzcyBUeXBlIGV4dGVuZHMgTm9kZSB7CiAgICAg
fQogICAgIAogICAgIGdldCBpbnN0YW50aWF0ZWRUeXBlKCkgeyByZXR1cm4gdGhpcy52aXNpdChu
ZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCkpOyB9CisgICAgCisgICAgLy8gSGF2ZSB0byBjYWxs
IHRoZXNlIG9uIHRoZSB1bmlmeU5vZGUuCisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmln
aW4sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBNYWtlUHRyRXhwcmVzc2lvbihv
cmlnaW4sIHZhbHVlKTsKKyAgICB9CisgICAgYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQob3Jp
Z2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQdHJUeXBlKG9yaWdpbiwgInRocmVhZCIs
IHRoaXMpOworICAgIH0KKyAgICByZXR1cm5UeXBlRnJvbUFuZE92ZXJsb2FkKG9yaWdpbikKKyAg
ICB7CisgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJC
eS1wb2ludGVyIG92ZXJsb2FkIHJldHVybmVkIG5vbi1wb2ludGVyIHR5cGU6ICIgKyB0aGlzKTsK
KyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJh
bWV0ZXJSZXdyaXRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UeXBlUGFyYW1ldGVyUmV3cml0ZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgVHlwZVBhcmFtZXRlclJld3JpdGVyIHsK
KyAgICB2aXNpdENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIobm9kZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgQ29uc3RleHByVHlwZVBhcmFtZXRlcihub2RlLm9yaWdpbiwgbm9kZS5uYW1lLCBu
b2RlLnR5cGUudmlzaXQobmV3IFJld3JpdGVyKCkpKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRU
eXBlVmFyaWFibGUobm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVHlwZVZhcmlhYmxl
KG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUucHJvdG9jb2wpOworICAgIH0KK30KKwpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlVHJhY2tlci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVU
cmFja2VyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1R5cGVWYXJpYWJsZVRyYWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3Qi
OworCitjbGFzcyBUeXBlVmFyaWFibGVUcmFja2VyIGV4dGVuZHMgVmlzaXRvciB7CisgICAgY29u
c3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgdGhpcy5fc2V0ID0g
bmV3IFNldCgpOworICAgIH0KKyAgICAKKyAgICBnZXQgc2V0KCkgeyByZXR1cm4gdGhpcy5fc2V0
OyB9CisgICAgCisgICAgX2NvbnNpZGVyKHRoaW5nKQorICAgIHsKKyAgICAgICAgaWYgKHRoaW5n
LmlzVW5pZmlhYmxlKQorICAgICAgICAgICAgdGhpcy5fc2V0LmFkZCh0aGluZyk7CisgICAgfQor
ICAgIAorICAgIHZpc2l0VHlwZVJlZihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29uc2lk
ZXIobm9kZS50eXBlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fY29uc2lkZXIodGhpcy52YXJpYWJsZSk7CisgICAgfQorfQor
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYWx1ZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYWx1ZS5qcwkocmV2aXNpb24gMjIy
MTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDUgKzI4LDE0IEBAIGNsYXNzIFZhbHVlIGV4dGVuZHMgTm9kZSB7CiAgICAg
Z2V0IGtpbmQoKSB7IHJldHVybiBWYWx1ZTsgfQogICAgIGdldCBpc0NvbnN0ZXhwcigpIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAK
KyAgICBiZWNvbWUob3RoZXJWYWx1ZSkKKyAgICB7CisgICAgICAgIC8vIE5PVEU6IE1ha2Ugc3Vy
ZSB0aGF0IElkZW50aXR5RXhwcmVzc2lvbiBpbXBsZW1lbnRzIHVuaWZ5Tm9kZSBhbmQgYWxsIHRo
YXQKKyAgICAgICAgbGV0IG9yaWdpbiA9IHRoaXMub3JpZ2luOworICAgICAgICB0aGlzLl9fcHJv
dG9fXyA9IElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5cGU7CisgICAgICAgIHRoaXMuX29yaWdp
biA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5fdGFyZ2V0ID0gb3RoZXJWYWx1ZTsKKyAgICB9CiB9
CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpz
CShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJp
YWJsZVJlZi5qcwkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDkgQEAgY2xhc3MgVmFyaWFi
bGVSZWYgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAgICAKICAgICBnZXQgbmFtZSgpIHsgcmV0dXJu
IHRoaXMuX25hbWU7IH0KICAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJldHVybiB0aGlzLnZhcmlh
YmxlLmlzQ29uc3RleHByOyB9Ci0gICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFy
aWFibGUudW5pZnlOb2RlOyB9CisgICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFy
aWFibGUudW5pZnlOb2RlOyB9IC8vIFRoaXMgb25seSBtYWtlcyBzZW5zZSB3aGVuIHRoaXMgaXMg
YSBjb25zdGV4cHIuCiAgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGdl
dCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiAidGhyZWFkIjsgfQotICAgIGdldCB1bmlmeU5vZGUo
KSB7IHJldHVybiB0aGlzLnZhcmlhYmxlOyB9CiAgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkocmV2aXNpb24g
MjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkod29y
a2luZyBjb3B5KQpAQCAtMjQsMTIgKzI0LDcgQEAKICAqLwogInVzZSBzdHJpY3QiOwogCi1jbGFz
cyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewotICAgIGNvbnN0cnVjdG9yKCkKLSAgICB7
Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgfQotICAgIAorY2xhc3MgVmlzaXRvciB7CiAgICAgdmlz
aXRQcm9ncmFtKG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2Ygbm9k
ZS50b3BMZXZlbFN0YXRlbWVudHMpCkBAIC02OCw4ICs2Myw4IEBAIGNsYXNzIFZpc2l0b3IgZXh0
ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXROYXRpdmVGdW5jSW5zdGFuY2Uobm9k
ZSkKICAgICB7Ci0gICAgICAgIG5vZGUuZnVuYy52aXNpdCh0aGlzKTsKICAgICAgICAgdGhpcy52
aXNpdEZ1bmMobm9kZSk7CisgICAgICAgIG5vZGUuZnVuYy52aXNpdEltcGxlbWVudGF0aW9uRGF0
YShub2RlLmltcGxlbWVudGF0aW9uRGF0YSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0
QmxvY2sobm9kZSkKQEAgLTEwMCw4ICs5NSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNp
dG9yQmFzZSB7CiAgICAgewogICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50
eXBlQXJndW1lbnRzKQogICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpOwotICAg
ICAgICBpZiAobm9kZS50eXBlKQotICAgICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOwor
ICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZp
c2l0TmF0aXZlVHlwZShub2RlKQpAQCAtMTM0LDggKzEyOCw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0
ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRUeXBlVmFyaWFibGUobm9kZSkKICAg
ICB7Ci0gICAgICAgIGlmIChub2RlLnByb3RvY29sKQotICAgICAgICAgICAgbm9kZS5wcm90b2Nv
bC52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnByb3RvY29sLCB0aGlzKTsK
ICAgICB9CiAgICAgCiAgICAgdmlzaXRDb25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUpCkBAIC0x
NzcsMTQgKzE3MCwyMyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAg
IHZpc2l0VmFyaWFibGVEZWNsKG5vZGUpCiAgICAgewogICAgICAgICBub2RlLnR5cGUudmlzaXQo
dGhpcyk7Ci0gICAgICAgIGlmIChub2RlLmluaXRpYWxpemVyKQotICAgICAgICAgICAgbm9kZS5p
bml0aWFsaXplci52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRpYWxp
emVyLCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRBc3NpZ25tZW50KG5vZGUpCiAgICAg
ewogICAgICAgICBub2RlLmxocy52aXNpdCh0aGlzKTsKICAgICAgICAgbm9kZS5yaHMudmlzaXQo
dGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAg
ICBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5vbGRWYWx1ZVZhci52aXNp
dCh0aGlzKTsKKyAgICAgICAgbm9kZS5uZXdWYWx1ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAg
bm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5yZXN1bHRFeHAudmlz
aXQodGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5v
ZGUpCkBAIC0xOTIsMTEgKzE5NCwyNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJh
c2UgewogICAgICAgICBub2RlLnB0ci52aXNpdCh0aGlzKTsKICAgICB9CiAgICAgCisgICAgX2hh
bmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgTm9kZS52
aXNpdChub2RlLmJhc2VUeXBlLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmNhbGxG
b3JHZXQsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckdldCwg
dGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5jYWxsRm9yQW5kLCB0aGlzKTsKKyAgICAg
ICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JBbmQsIHRoaXMpOworICAgICAgICBOb2Rl
LnZpc2l0KG5vZGUuY2FsbEZvclNldCwgdGhpcyk7CisgICAgfQorICAgIAogICAgIHZpc2l0RG90
RXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyk7
Ci0gICAgICAgIGlmIChub2RlLnN0cnVjdFR5cGUpCi0gICAgICAgICAgICBub2RlLnN0cnVjdFR5
cGUudmlzaXQodGhpcyk7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbihub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkK
KyAgICB7CisgICAgICAgIG5vZGUuYXJyYXkudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUuaW5k
ZXgudmlzaXQodGhpcyk7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbihub2RlKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2Rl
KQpAQCAtMjA3LDggKzIyNSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7
CiAgICAgdmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBu
b2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUubnVtRWxlbWVudHMpCi0g
ICAgICAgICAgICBub2RlLm51bUVsZW1lbnRzLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZp
c2l0KG5vZGUubnVtRWxlbWVudHMsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdENvbnZl
cnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihub2RlKQpAQCAtMjI0LDggKzI0MSw3IEBAIGNsYXNz
IFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgewogICAgICAgICBub2RlLmNvbmRp
dGlvbmFsLnZpc2l0KHRoaXMpOwogICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7Ci0gICAg
ICAgIGlmIChub2RlLmVsc2VCb2R5KQotICAgICAgICAgICAgbm9kZS5lbHNlQm9keS52aXNpdCh0
aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmVsc2VCb2R5LCB0aGlzKTsKICAgICB9CiAg
ICAgCiAgICAgdmlzaXRXaGlsZUxvb3Aobm9kZSkKQEAgLTI0MiwxOSArMjU4LDE1IEBAIGNsYXNz
IFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRGb3JMb29wKG5v
ZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5pbml0aWFsaXphdGlvbikKLSAgICAgICAgICAg
IG5vZGUuaW5pdGlhbGl6YXRpb24udmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLmNvbmRp
dGlvbikKLSAgICAgICAgICAgIG5vZGUuY29uZGl0aW9uLnZpc2l0KHRoaXMpOwotICAgICAgICBp
ZiAobm9kZS5pbmNyZW1lbnQpCi0gICAgICAgICAgICBub2RlLmluY3JlbWVudC52aXNpdCh0aGlz
KTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRpYWxpemF0aW9uLCB0aGlzKTsKKyAgICAg
ICAgTm9kZS52aXNpdChub2RlLmNvbmRpdGlvbiwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQo
bm9kZS5pbmNyZW1lbnQsIHRoaXMpOwogICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAg
ICAgfQogCiAgICAgdmlzaXRSZXR1cm4obm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLnZh
bHVlKQotICAgICAgICAgICAgbm9kZS52YWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52
aXNpdChub2RlLnZhbHVlLCB0aGlzKTsKICAgICB9CiAKICAgICB2aXNpdENvbnRpbnVlKG5vZGUp
CkBAIC0yNzIsOCArMjg0LDcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
ICAgICAKICAgICB2aXNpdEdlbmVyaWNMaXRlcmFsVHlwZShub2RlKQogICAgIHsKLSAgICAgICAg
aWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKKyAgICAg
ICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgICAgICBub2RlLnByZWZlcnJlZFR5
cGUudmlzaXQodGhpcyk7CiAgICAgfQogICAgIApAQCAtMjg4LDggKzI5OSw3IEBAIGNsYXNzIFZp
c2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXROdWxsVHlwZShub2Rl
KQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUudHlwZS52
aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgIH0K
ICAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCkBAIC0yOTcsMTYgKzMwNywxNSBA
QCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICBmb3IgKGxldCB0
eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBlQXJndW1lbnRzKQogICAgICAgICAgICAgdHlwZUFyZ3Vt
ZW50LnZpc2l0KHRoaXMpOwogICAgICAgICBmb3IgKGxldCBhcmd1bWVudCBvZiBub2RlLmFyZ3Vt
ZW50TGlzdCkKLSAgICAgICAgICAgIGFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAgICAgICAgICAg
Tm9kZS52aXNpdChhcmd1bWVudCwgdGhpcyk7CiAgICAgICAgIGxldCBhY3R1YWxUeXBlQXJndW1l
bnRzID0gbm9kZS5hY3R1YWxUeXBlQXJndW1lbnRzOwogICAgICAgICBpZiAoYWN0dWFsVHlwZUFy
Z3VtZW50cykgewogICAgICAgICAgICAgZm9yIChsZXQgYXJndW1lbnQgb2YgYWN0dWFsVHlwZUFy
Z3VtZW50cykKICAgICAgICAgICAgICAgICBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAg
fQotICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQotICAgICAgICAgICAgbm9kZS5yZXR1cm5U
eXBlLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5yZXN1bHRUeXBlKQotICAgICAgICAg
ICAgbm9kZS5yZXN1bHRUeXBlLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUu
bmF0aXZlRnVuY0luc3RhbmNlLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJldHVy
blR5cGUsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZSwgdGhpcyk7
CiAgICAgfQogICAgIAogICAgIHZpc2l0TG9naWNhbE5vdChub2RlKQpAQCAtMzE2LDIxICszMjUs
MjMgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2aXNp
dEZ1bmN0aW9uTGlrZUJsb2NrKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5yZXR1cm5U
eXBlKQotICAgICAgICAgICAgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpOworICAgICAgICBO
b2RlLnZpc2l0KG5vZGUucmV0dXJuVHlwZSwgdGhpcyk7CiAgICAgICAgIGZvciAobGV0IGFyZ3Vt
ZW50IG9mIG5vZGUuYXJndW1lbnRMaXN0KQogICAgICAgICAgICAgYXJndW1lbnQudmlzaXQodGhp
cyk7CiAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlciBvZiBub2RlLnBhcmFtZXRlcnMpCiAgICAg
ICAgICAgICBwYXJhbWV0ZXIudmlzaXQodGhpcyk7CiAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0
aGlzKTsKLSAgICAgICAgaWYgKG5vZGUucmVzdWx0VHlwZSkKLSAgICAgICAgICAgIG5vZGUucmVz
dWx0VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGUs
IHRoaXMpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkKKyAgICB2
aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewotICAgICAgICBub2RlLmFyZ3VtZW50
LnZpc2l0KHRoaXMpOwotICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJZGVudGl0
eUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMp
OwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRv
ckJhc2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlz
aXRvckJhc2UuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Zpc2l0b3JCYXNlLmpzCShub25leGlzdGVudCkKQEAgLTEsMzIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwot
Ci1jbGFzcyBWaXNpdG9yQmFzZSB7Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAg
dGhpcy5fbWVtb1RhYmxlID0gbmV3IE1hcCgpOwotICAgIH0KLX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321058</attachid>
            <date>2017-09-17 16:26:59 -0700</date>
            <delta_ts>2017-09-17 17:46:48 -0700</delta_ts>
            <desc>more tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>188145</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjEzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5OCBAQAorMjAxNy0wOS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEZpZ3VyZSBvdXQgaG93IFdTTCB3aWxsIHN1cHBvcnQgZmllbGQgb3ZlcmxvYWRz
IGxpa2UgZmxvYXQ0Lnh6IGFuZCBmcmllbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdTTCBuZWVkcyB0byBzdXBwb3J0IGdldHRlcnMg
YW5kIHNldHRlcnMsIHNvIHRoYXQgd2UgY2FuIGRvIHRoaW5ncyBsaWtlOgorICAgICAgICAKKyAg
ICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAgICB2ZWMuenggPSBmbG9hdDIoMSwgMik7
CisgICAgICAgICAgICAvLyB6ID0gMSwgeCA9IDIKKyAgICAgICAgCisgICAgICAgIFRoZXJlJ3Mg
bm8gd2F5IHRvIGV4cHJlc3MgdGhpcyBmbG9hdDQuenggcmV0dXJuaW5nIGEgcG9pbnRlciB0byBz
b21ldGhpbmcsIHNpbmNlIGl0J3MgZG9pbmcgc3dpenpsaW5nLgorICAgICAgICBJdCBjb3VsZCBy
ZXR1cm4gYSBjcmF6eSBzbWFydCBwb2ludGVyLCBidXQgdGhhdCBzb3VuZHMgbGlrZSBhIGxvdCBv
ZiB3b3JrLiBTbywgSSBkZWNpZGVkIHRvIGdvIGZvcgorICAgICAgICBsdmFsdWUgZW11bGF0aW9u
IGluc3RlYWQuCisgICAgICAgIAorICAgICAgICBUaGUgaWRlYSBvZiBsdmFsdWUgZW11bGF0aW9u
IGlzIHRoYXQgd2hlbiB3ZSB0cnkgdG8gbWFrZSBhbiBsdmFsdWUgd29yayBmb3IgYW4gYXNzaWdu
bWVudCBvciBSTVcKKyAgICAgICAgb3BlcmF0aW9uIChsaWtlICs9IGFuZCBmcmllbmRzKSwgd2Ug
Y29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgd2UgaGF2ZSB0byBmaXJzdCBsb2FkIHRoZSB2
YWx1ZSB1c2luZworICAgICAgICBhIGdldHRlciBhbmQgdGhlbiBzdG9yZSBpdCB3aXRoIGEgc2V0
dGVyLiBUaGlzIHBhdGNoIG1ha2VzIHRoaXMgd29yayByZWN1cnNpdmVseSwgc28gdGhhdCB0aGlz
IHdpbGwKKyAgICAgICAgd29yazoKKyAgICAgICAgCisgICAgICAgICAgICBmbG9hdDQgdmVjOwor
ICAgICAgICAgICAgdmVjLnp3eC55ID0gNDI7CisgICAgICAgICAgICAvLyBub3cgdyBpcyA0Mgor
ICAgICAgICAKKyAgICAgICAgVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRlY29tcG9zZSBpdCBhdXRv
bWF0aWNhbGx5OgorICAgICAgICAKKyAgICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAg
ICBmbG9hdDMgdG1wID0gdmVjLnp3eDsKKyAgICAgICAgICAgIHRtcC55ID0gNDI7CisgICAgICAg
ICAgICB2ZWMuend4ID0gdG1wOworICAgICAgICAKKyAgICAgICAgVGhpcydsbCB3b3JrIHRvIGFu
eSBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIFRvIGNoZWNrIGlmIHRoaXMgd29ya3MsIHRoaXMg
cGF0Y2ggYWRkcyB0d28gc3Vic3RhbnRpYWwgbmV3IHRlc3RzIGNhbGxlZCBURVNUX2dlbmVyaWNB
Y2Nlc3NvcnMoKSBhbmQKKyAgICAgICAgVEVTVF9iaXRTdWJzY3JpcHRBY2Nlc3NvcigpLiBUaGlz
IHRlc3RzIHRoYXQgdGhpcyBzdHVmZiB3b3JrcyB3aXRoIGEgbG90IG9mIGdlbmVyaWMgdHlwZXMs
IGFuZCB0aGF0IGl0J3MKKyAgICAgICAgcG9zc2libGUgdG8gdHVybiBpbnRlZ2VycyBpbnRvIGJp
dHZlY3RvcnMgdXNpbmcgc3Vic2NyaXB0IG92ZXJsb2FkaW5nLiBUaGlzIHBhdGNoIGFsc28gYWRk
cyBzbWFsbGVyIHVuaXQKKyAgICAgICAgdGVzdHMgYWxzby4KKyAgICAgICAgCisgICAgICAgIE9o
LCBhbmQgaXQncyBub3cgcG9zc2libGUgdG8gZ2V0IGFuIGFycmF5J3MgbGVuZ3RoLgorCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzOgorICAgICAgICAo
bmVlZHNQcmltaXRpdmVQcm90b2NvbCk6CisgICAgICAgIChwcm90b2NvbFN1ZmZpeCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKEFu
b255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5n
ZXQgb3JpZ2luKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5nZXQgbmFt
ZSk6CisgICAgICAgIChBbm9ueW1vdXNWYXJpYWJsZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qczoKKyAgICAgICAg
KEFycmF5UmVmVHlwZS5wcm90b3R5cGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZCk6CisgICAgICAg
IChBcnJheVJlZlR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanM6CisgICAgICAgIChB
cnJheVR5cGUucHJvdG90eXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQpOgorICAgICAgICAoQXJy
YXlUeXBlLnByb3RvdHlwZS5hcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCk6CisgICAgICAgIChB
cnJheVR5cGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQu
anM6CisgICAgICAgIChBc3NpZ25tZW50KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DYWxsQXNzaWdubWVudC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9uLnJl
c29sdmUpOgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmUpOgorICAg
ICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmVUb092ZXJsb2FkKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzOgorICAgICAgICAoQ2hlY2tl
ci5wcm90b3R5cGUudmlzaXRQcm9ncmFtKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZp
c2l0RnVuY0RlZik6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmMp
OgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KENoZWNrZXIucHJvdG90eXBlLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0RG90RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVja2VyLnBy
b3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9uKToKKyAgICAgICAgKENoZWNrZXIpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxl
LnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOiBEZWxldGVkLgorICAgICAgICAoQ2hlY2tlci5wcm90
b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxlLnByb3RvdHlwZS52aXNp
dFZhcmlhYmxlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0
UHJvdG9jb2xEZWNsLk5vdGljZVR5cGVWYXJpYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdFByb3RvY29sRGVjbC5zZXQgdGhyb3cpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qczoKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzOgorICAgICAgICAo
RG90RXhwcmVzc2lvbik6CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc3Ry
dWN0KToKKyAgICAgICAgKERvdEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBnZXRGdW5jTmFtZSk6
CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoRG90RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHNldEZ1bmNOYW1lKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzOgorICAgICAgICAoRUJ1ZmZlckJ1aWxk
ZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAoRUJ1ZmZlckJ1
aWxkZXIucHJvdG90eXBlLnZpc2l0TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAgICAgICAoRXZhbHVhdG9y
LnByb3RvdHlwZS52aXNpdElkZW50aXR5RXhwcmVzc2lvbik6CisgICAgICAgIChFdmFsdWF0b3Iu
cHJvdG90eXBlLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoRXZhbHVhdG9yLnBy
b3RvdHlwZS52aXNpdEFub255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEV2YWx1YXRvci5wcm90
b3R5cGUudmlzaXREb3RFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEV2YWx1YXRvci5w
cm90b3R5cGUudmlzaXRMZXRFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzOgorICAgICAgICAoRXhwcmVzc2lv
bkZpbmRlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzOgorICAgICAgICAo
Rm9yTG9vcC5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoRm9yTG9vcCk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanM6CisgICAg
ICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1
YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRDYWxsRXhwcmVzc2lvbik6CisgICAgICAgIChGdW5j
SW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1YnN0aXR1dGlv
bik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9y
LnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGUucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVu
Yyk6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUpOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlKToK
KyAgICAgICAgKEZ1bmNJbnN0YW50aWF0b3IpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qczogQWRkZWQuCisgICAgICAgIChJZGVudGl0eUV4
cHJlc3Npb24pOgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgdGFy
Z2V0KToKKyAgICAgICAgKElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0NvbnN0ZXhw
cik6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1ZSk6
CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJv
dG90eXBlLmdldCBhcnJheSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdl
dCBpbmRleCk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1
ZSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgZ2V0RnVuY05hbWUpOgor
ICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc2V0RnVuY05hbWUpOgorICAgICAg
ICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanM6CisgICAgICAgIChpbmZlclR5
cGVzRm9yQ2FsbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpz
OgorICAgICAgICAoX2lubGluZUZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzOgorICAgICAgICAoSW5saW5lci5wcm90b3R5cGUudmlzaXRDYWxs
RXhwcmVzc2lvbik6CisgICAgICAgIChJbmxpbmVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Np
b24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNp
Y3MuanM6CisgICAgICAgIChJbnRyaW5zaWNzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanM6CisgICAgICAgIChNYWtlQXJy
YXlSZWZFeHByZXNzaW9uLnByb3RvdHlwZS5iZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJl
c3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVD
b250ZXh0LmpzOgorICAgICAgICAoTmFtZUNvbnRleHQpOgorICAgICAgICAoTmFtZUNvbnRleHQu
cHJvdG90eXBlLmFkZCk6CisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZG9TdGF0ZW1l
bnQpOgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmhhbmRsZURlZmluaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKE5hbWVDb250ZXh0LnByb3RvdHlwZS5pc0RlZmluZWQpOiBEZWxldGVk
LgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmRlZmluZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZGVmaW5lQWxsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanM6CisgICAgICAgIChOYW1l
UmVzb2x2ZXIucHJvdG90eXBlLmRvU3RhdGVtZW50KToKKyAgICAgICAgKE5hbWVSZXNvbHZlci5w
cm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAgICAoTmFtZVJlc29sdmVyLnByb3Rv
dHlwZS52aXNpdFByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL05hdGl2ZUZ1bmMuanM6CisgICAgICAgIChOYXRpdmVGdW5jKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanM6CisgICAgICAgIChO
YXRpdmVGdW5jSW5zdGFuY2UpOgorICAgICAgICAoTmF0aXZlRnVuY0luc3RhbmNlLnByb3RvdHlw
ZS5nZXQgaW1wbGVtZW50YXRpb25EYXRhKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob2RlLmpzOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUudmlzaXQpOgorICAgICAgICAo
Tm9kZS52aXNpdCk6CisgICAgICAgIChOb2RlLnVuaWZ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0RG90
RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLnByb3RvdHlw
ZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAg
ICAgKGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KToKKyAgICAgICAgKHBhcnNlUG9zc2libGVT
dWZmaXgpOgorICAgICAgICAoZmluaXNoUGFyc2luZ1ByZUluY3JlbWVudCk6CisgICAgICAgIChn
ZW5lcmljUGFyc2VDb21tYUV4cHJlc3Npb24pOgorICAgICAgICAocGFyc2VGdW5jTmFtZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qczoKKyAgICAgICAgKHBy
ZXBhcmUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanM6Cisg
ICAgICAgIChQcm9ncmFtKToKKyAgICAgICAgKFByb2dyYW0ucHJvdG90eXBlLmdldCBnbG9iYWxO
YW1lQ29udGV4dCk6CisgICAgICAgIChQcm9ncmFtLnByb3RvdHlwZS5hZGQpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qczogQWRk
ZWQuCisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgcmVzdWx0VHlwZSk6CisgICAgICAgIChQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90eXBlLnJld3JpdGVBZnRlckNsb25pbmcpOgor
ICAgICAgICAoUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS51cGRhdGVDYWxsc0Fm
dGVyQ2hhbmdpbmdCYXNlKToKKyAgICAgICAgKFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wcm90
b3R5cGUuZW1pdEdldCk6CisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90
eXBlLmVtaXRTZXQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5
UmVzb2x2ZXIuanM6IEFkZGVkLgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUu
X3Zpc2l0UHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5
cGUudmlzaXREb3RFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJvdG90
eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJv
dG90eXBlLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZl
ci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFBy
b3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0QXNzaWdubWVudCk6CisgICAgICAgIChQcm9w
ZXJ0eVJlc29sdmVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVydHlS
ZXNvbHZlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KFByb3BlcnR5UmVzb2x2ZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0
clR5cGUuanM6CisgICAgICAgIChQdHJUeXBlLnByb3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLnJldHVyblR5cGVGcm9tQW5kT3Zlcmxv
YWQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24uanM6IEFkZGVkLgorICAgICAgICAoUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbik6
CisgICAgICAgIChSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgbFZhbHVl
KToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm9sZFZhbHVl
UmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm5ld1Zh
bHVlUmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLnRv
U3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMu
anM6CisgICAgICAgIChjcmVhdGVOYW1lUmVzb2x2ZXIpOgorICAgICAgICAocmVzb2x2ZU5hbWVz
SW5UeXBlcyk6CisgICAgICAgIChyZXNvbHZlTmFtZXNJblByb3RvY29scyk6CisgICAgICAgIChy
ZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlTmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwu
anM6CisgICAgICAgIChyZXNvbHZlT3ZlcmxvYWRJbXBsKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qczogQWRkZWQuCisgICAgICAgIChyZXNv
bHZlUHJvcGVydGllcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2
ZVR5cGVEZWZzLmpzOgorICAgICAgICAocmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyk6CisgICAgICAg
IChyZXNvbHZlVHlwZURlZnNJblByb3RvY29scyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnNJ
bkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnMpOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanM6CisgICAgICAgIChS
ZXR1cm5DaGVja2VyLnByb3RvdHlwZS5faXNCb29sQ2FzdEZyb21MaXRlcmFsVHJ1ZSk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanM6CisgICAgICAgIChSZXdy
aXRlcik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgor
ICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJlZik6CisgICAgICAgIChSZXdy
aXRlci5wcm90b3R5cGUudmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVy
LnByb3RvdHlwZS5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKToKKyAgICAgICAgKFJl
d3JpdGVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJldHVybik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRHZW5l
cmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0TnVsbFR5
cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnByb2Nlc3NEZXJpdmVkQ2FsbERhdGEp
OgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgorICAg
ICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0RnVuY3Rpb25MaWtlQmxvY2spOgorICAgICAg
ICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0SWZTdGF0ZW1lbnQpOgorICAgICAgICAoUmV3cml0
ZXIucHJvdG90eXBlLnZpc2l0Rm9yTG9vcCk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUu
dmlzaXRBbm9ueW1vdXNWYXJpYWJsZSk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0
TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RhbmRhcmRMaWJyYXJ5LmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0cnVjdExheW91dEJ1aWxkZXIuanM6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRCdWlsZGVyLnBy
b3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmNJbnN0YW5jZSk6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRC
dWlsZGVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpz
OgorICAgICAgICAoU3RydWN0VHlwZS5wcm90b3R5cGUuaW5zdGFudGlhdGUpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qczoKKyAgICAgICAgKFN1YnN0
aXR1dGlvbi5wcm90b3R5cGUuZ2V0IG1hcCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanM6IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qczogQWRkZWQuCisg
ICAgICAgIChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmNyZWF0ZVR5cGVQYXJhbWV0ZXJzKToK
KyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuKToKKyAgICAgICAgKHN5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlRmllbGRUeXBlKToKKyAgICAgICAgKHN5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlVHlwZVJlZik6CisgICAgICAgIChzeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzLnNldHVwQW5kZXIpOgorICAgICAgICAoc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29y
cyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChjaGVja051bWJl
cik6CisgICAgICAgIChURVNUX3NpbXBsZVByb3RvY29sKToKKyAgICAgICAgKFRFU1RfYXNzaWdu
TGVuZ3RoKToKKyAgICAgICAgKFRFU1Rfc2ltcGxlU2V0dGVyKToKKyAgICAgICAgKFRFU1RfZ2Vu
ZXJpY0FjY2Vzc29ycyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5q
czoKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmdldCBpc1JlZik6CisgICAgICAgIChUeXBlLnBy
b3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBl
LmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLnJl
dHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQpOgorICAgICAgICAoVHlwZSk6CisgICAgICAgICogV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzOiBBZGRlZC4KKyAg
ICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlzaXRDb25zdGV4cHJUeXBl
UGFyYW1ldGVyKToKKyAgICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRUeXBlVmFyaWFibGUpOgorICAgICAgICAoVHlwZVBhcmFtZXRlclJld3JpdGVyKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFR5cGVWYXJpYWJsZVRyYWNrZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1ZhbHVlLmpzOgorICAgICAgICAoVmFsdWUucHJvdG90eXBlLmJlY29tZSk6
CisgICAgICAgIChWYWx1ZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFy
aWFibGVSZWYuanM6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IGFkZHJlc3NTcGFjZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZp
c2l0b3IucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKToKKyAgICAgICAgKFZpc2l0
b3IucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xEZWNsKToKKyAgICAgICAgKFZpc2l0b3IpOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzOiBS
ZW1vdmVkLgorCiAyMDE3LTA5LTE2ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCB0aGUgVG9vbHMgYnVpbGQgd2l0aCBDTWFrZSBvbiBtYWNPUwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5qcwko
cmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVz
c1NwYWNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxNiBAQCBmdW5jdGlvbiBpc0Fk
ZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCiAgICAgfQogfQogCitmdW5jdGlvbiBuZWVkc1ByaW1p
dGl2ZVByb3RvY29sKGFkZHJlc3NTcGFjZSkKK3sKKyAgICByZXR1cm4gYWRkcmVzc1NwYWNlICE9
ICJ0aHJlYWQiOworfQorCitmdW5jdGlvbiBwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpCit7
CisgICAgcmV0dXJuIG5lZWRzUHJpbWl0aXZlUHJvdG9jb2woYWRkcmVzc1NwYWNlKSA/ICI6cHJp
bWl0aXZlIiA6ICIiOworfQorCiBmdW5jdGlvbiB2YWxpZGF0ZUFkZHJlc3NTcGFjZShhZGRyZXNz
U3BhY2UpCiB7CiAgICAgaWYgKCFpc0FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpKQpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MyArMjksMTQgQEAgbG9hZCgiVHlwZS5qcyIpOwogbG9hZCgiUmVmZXJlbmNlVHlwZS5qcyIpOwog
bG9hZCgiVmFsdWUuanMiKTsKIGxvYWQoIkV4cHJlc3Npb24uanMiKTsKLWxvYWQoIlZpc2l0b3JC
YXNlLmpzIik7CiBsb2FkKCJSZXdyaXRlci5qcyIpOwogbG9hZCgiVmlzaXRvci5qcyIpOwogbG9h
ZCgiQ3JlYXRlTGl0ZXJhbC5qcyIpOwogbG9hZCgiQ3JlYXRlTGl0ZXJhbFR5cGUuanMiKTsKK2xv
YWQoIlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcyIpOwogCiBsb2FkKCJBZGRyZXNzU3BhY2Uu
anMiKTsKK2xvYWQoIkFub255bW91c1ZhcmlhYmxlLmpzIik7CiBsb2FkKCJBcnJheVJlZlR5cGUu
anMiKTsKIGxvYWQoIkFycmF5VHlwZS5qcyIpOwogbG9hZCgiQXNzaWdubWVudC5qcyIpOwpAQCAt
NDMsNyArNDQsNiBAQCBsb2FkKCJBdXRvV3JhcHBlci5qcyIpOwogbG9hZCgiQmxvY2suanMiKTsK
IGxvYWQoIkJvb2xMaXRlcmFsLmpzIik7CiBsb2FkKCJCcmVhay5qcyIpOwotbG9hZCgiQ2FsbEFz
c2lnbm1lbnQuanMiKTsKIGxvYWQoIkNhbGxFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJDYWxsRnVu
Y3Rpb24uanMiKTsKIGxvYWQoIkNoZWNrLmpzIik7CkBAIC02OSw2ICs2OSw3IEBAIGxvYWQoIkV2
YWx1YXRpb25Db21tb24uanMiKTsKIGxvYWQoIkV2YWx1YXRvci5qcyIpOwogbG9hZCgiRXhwcmVz
c2lvbkZpbmRlci5qcyIpOwogbG9hZCgiRmllbGQuanMiKTsKK2xvYWQoIkZpbmRIaWdoWm9tYmll
cy5qcyIpOwogbG9hZCgiRmxhdHRlblByb3RvY29sRXh0ZW5kcy5qcyIpOwogbG9hZCgiRm9yTG9v
cC5qcyIpOwogbG9hZCgiRnVuYy5qcyIpOwpAQCAtNzYsNyArNzcsMTAgQEAgbG9hZCgiRnVuY0Rl
Zi5qcyIpOwogbG9hZCgiRnVuY0luc3RhbnRpYXRvci5qcyIpOwogbG9hZCgiRnVuY1BhcmFtZXRl
ci5qcyIpOwogbG9hZCgiRnVuY3Rpb25MaWtlQmxvY2suanMiKTsKK2xvYWQoIkhpZ2hab21iaWVG
aW5kZXIuanMiKTsKK2xvYWQoIklkZW50aXR5RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiSWZTdGF0
ZW1lbnQuanMiKTsKK2xvYWQoIkluZGV4RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiSW5mZXJUeXBl
c0ZvckNhbGwuanMiKTsKIGxvYWQoIklubGluZS5qcyIpOwogbG9hZCgiSW5saW5lci5qcyIpOwpA
QCAtODQsNyArODgsNiBAQCBsb2FkKCJJbnN0YW50aWF0ZUltbWVkaWF0ZXMuanMiKTsKIGxvYWQo
IkludExpdGVyYWwuanMiKTsKIGxvYWQoIkludExpdGVyYWxUeXBlLmpzIik7CiBsb2FkKCJJbnRy
aW5zaWNzLmpzIik7Ci1sb2FkKCJMZXRFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJMZXhlci5qcyIp
OwogbG9hZCgiTGV4ZXJUb2tlbi5qcyIpOwogbG9hZCgiTGl0ZXJhbFR5cGVDaGVja2VyLmpzIik7
CkBAIC05OCwyMCArMTAxLDI0IEBAIGxvYWQoIk5hdGl2ZUZ1bmMuanMiKTsKIGxvYWQoIk5hdGl2
ZUZ1bmNJbnN0YW5jZS5qcyIpOwogbG9hZCgiTmF0aXZlVHlwZS5qcyIpOwogbG9hZCgiTmF0aXZl
VHlwZUluc3RhbmNlLmpzIik7Citsb2FkKCJOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzIik7
CiBsb2FkKCJOdWxsTGl0ZXJhbC5qcyIpOwogbG9hZCgiTnVsbFR5cGUuanMiKTsKIGxvYWQoIk92
ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiKTsKIGxvYWQoIlBhcnNlLmpzIik7CiBsb2FkKCJQ
cmVwYXJlLmpzIik7CiBsb2FkKCJQcm9ncmFtLmpzIik7Citsb2FkKCJQcm9wZXJ0eVJlc29sdmVy
LmpzIik7CiBsb2FkKCJQcm90b2NvbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xEZWNsLmpzIik7CiBs
b2FkKCJQcm90b2NvbEZ1bmNEZWNsLmpzIik7CiBsb2FkKCJQcm90b2NvbFJlZi5qcyIpOwogbG9h
ZCgiUHRyVHlwZS5qcyIpOworbG9hZCgiUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyIpOwog
bG9hZCgiUmVjdXJzaW9uQ2hlY2tlci5qcyIpOwogbG9hZCgiUmVzb2x2ZU5hbWVzLmpzIik7CiBs
b2FkKCJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIik7Citsb2FkKCJSZXNvbHZlUHJvcGVydGllcy5q
cyIpOwogbG9hZCgiUmVzb2x2ZVR5cGVEZWZzLmpzIik7CiBsb2FkKCJSZXR1cm4uanMiKTsKIGxv
YWQoIlJldHVybkNoZWNrZXIuanMiKTsKQEAgLTEyMCwxMiArMTI3LDE0IEBAIGxvYWQoIlN0YW5k
YXJkTGlicmFyeS5qcyIpOwogbG9hZCgiU3RydWN0TGF5b3V0QnVpbGRlci5qcyIpOwogbG9hZCgi
U3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vic3RpdHV0aW9uLmpzIik7Ci1sb2FkKCJTdWZmaXhD
YWxsQXNzaWdubWVudC5qcyIpOworbG9hZCgiU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyIp
OwogbG9hZCgiVHlwZURlZi5qcyIpOwogbG9hZCgiVHlwZURlZlJlc29sdmVyLmpzIik7CiBsb2Fk
KCJUeXBlT3JWYXJpYWJsZVJlZi5qcyIpOworbG9hZCgiVHlwZVBhcmFtZXRlclJld3JpdGVyLmpz
Iik7CiBsb2FkKCJUeXBlUmVmLmpzIik7CiBsb2FkKCJUeXBlVmFyaWFibGUuanMiKTsKK2xvYWQo
IlR5cGVWYXJpYWJsZVRyYWNrZXIuanMiKTsKIGxvYWQoIlR5cGVkVmFsdWUuanMiKTsKIGxvYWQo
IlVpbnRMaXRlcmFsLmpzIik7CiBsb2FkKCJVaW50TGl0ZXJhbFR5cGUuanMiKTsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpz
CShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91
c1ZhcmlhYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworbGV0IGFu
b255bW91c1ZhcmlhYmxlQ291bnQgPSAwOworCitjbGFzcyBBbm9ueW1vdXNWYXJpYWJsZSBleHRl
bmRzIFZhbHVlIHsKKyAgICAvLyBZb3UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSB2YXJpYWJsZSdz
IHZhbHVlIGJlZm9yZSB1c2UsIGJ1dCB0aGF0IGNvdWxkIGJlIHF1aXRlIGxhdGUuCisgICAgY29u
c3RydWN0b3Iob3JpZ2luLCB0eXBlID0gbnVsbCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7Cisg
ICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5pbmRleCA9IGFub255
bW91c1ZhcmlhYmxlQ291bnQrKzsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB9Cisg
ICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAgIGdldCBu
YW1lKCkgeyByZXR1cm4gImFub25WYXI8IiArIHRoaXMuaW5kZXggKyAiPiI7IH0KKyAgICAKKyAg
ICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5uYW1lOworICAgIH0KK30K
KwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5q
cwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJy
YXlSZWZUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxNSBAQCBjbGFzcyBBcnJh
eVJlZlR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlCiAgICAgCiAgICAgZ2V0IGlzQXJyYXlSZWYo
KSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2FkKG9yaWdpbiwg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICAgIGFyZ3VtZW50
VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1l
bnRUeXBlICsgIltdICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
NzMsNSArNzMsMTYgQEAgY2xhc3MgQXJyYXlUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQs
IG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CisKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2Fk
KG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE1ha2VBcnJh
eVJlZkV4cHJlc3Npb24ob3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5udW1FbGVtZW50
cyA9IHRoaXMubnVtRWxlbWVudHM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgQXJyYXlSZWZUeXBlKG9yaWdpbiwgInRocmVhZCIsIHRoaXMuZWxlbWVudFR5cGUpOwor
ICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNzaWdubWVu
dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bc3NpZ25t
ZW50LmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Bc3NpZ25tZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTIgQEAKICJ1c2Ug
c3RyaWN0IjsKIAogY2xhc3MgQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNv
bnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMpCisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBsaHMs
IHJocywgdHlwZSA9IG51bGwpCiAgICAgewogICAgICAgICBzdXBlcihvcmlnaW4pOwogICAgICAg
ICB0aGlzLl9saHMgPSBsaHM7CiAgICAgICAgIHRoaXMuX3JocyA9IHJoczsKKyAgICAgICAgdGhp
cy50eXBlID0gdHlwZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGxocygpIHsgcmV0dXJuIHRoaXMu
X2xoczsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFzc2lnbm1l
bnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFz
c2lnbm1lbnQuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVudCkKQEAgLTEsNDYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3Qi
OwotCi1jbGFzcyBDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNvbnN0
cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzLCByaHMpCi0gICAgewotICAgICAgICBzdXBlcihvcmln
aW4pOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fbGhzID0gbGhz
OwotICAgICAgICB0aGlzLl9yaHMgPSByaHM7Ci0gICAgICAgIHRoaXMuZnVuYyA9IG51bGw7Ci0g
ICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAgIGdl
dCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KLSAgICBnZXQgcmhzKCkgeyByZXR1cm4gdGhp
cy5fcmhzOyB9IC8vIFRoaXMgY2FuIGJlIG51bGwuCi0gICAgCi0gICAgdG9TdHJpbmcoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGhzICsgIiAiICsgdGhpcy5uYW1lICsgKHRoaXMucmhz
ID8gIj0gIiArIHRoaXMucmhzIDogIiIpOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsODIgQEAgY2xhc3MgQ2FsbEV4cHJlc3Npb24gZXh0
ZW5kcyBFeHByZXNzaW9uIAogICAgIGdldCBpc0Nhc3QoKSB7IHJldHVybiB0aGlzLl9pc0Nhc3Q7
IH0KICAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3JldHVyblR5cGU7IH0KICAg
ICAKLSAgICByZXNvbHZlKG92ZXJsb2FkKQorICAgIHN0YXRpYyByZXNvbHZlKG9yaWdpbiwgcG9z
c2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSwgbmFtZSwgdHlwZUFyZ3VtZW50
cywgYXJndW1lbnRMaXN0LCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQorICAgIHsKKyAgICAg
ICAgbGV0IGNhbGwgPSBuZXcgQ2FsbEV4cHJlc3Npb24ob3JpZ2luLCBuYW1lLCB0eXBlQXJndW1l
bnRzLCBhcmd1bWVudExpc3QpOworICAgICAgICBjYWxsLmFyZ3VtZW50VHlwZXMgPSBhcmd1bWVu
dFR5cGVzOworICAgICAgICBpZiAocmV0dXJuVHlwZSkKKyAgICAgICAgICAgIGNhbGwuc2V0Q2Fz
dERhdGEocmV0dXJuVHlwZSk7CisgICAgICAgIHJldHVybiB7Y2FsbCwgcmVzdWx0VHlwZTogY2Fs
bC5yZXNvbHZlKHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1ldGVyc0luU2NvcGUsIHR5cGVB
cmd1bWVudHMpfTsKKyAgICB9CisgICAgCisgICAgcmVzb2x2ZShwb3NzaWJsZU92ZXJsb2Fkcywg
dHlwZVBhcmFtZXRlcnNJblNjb3BlLCB0eXBlQXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaWYg
KCFwb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHRo
aXMub3JpZ2luLm9yaWdpblN0cmluZywgIkRpZCBub3QgZmluZCBhbnkgZnVuY3Rpb25zIG5hbWVk
ICIgKyB0aGlzLm5hbWUpOworICAgICAgICAKKyAgICAgICAgbGV0IG92ZXJsb2FkID0gbnVsbDsK
KyAgICAgICAgbGV0IGZhaWx1cmVzID0gW107CisgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0
ZXIgb2YgdHlwZVBhcmFtZXRlcnNJblNjb3BlKSB7CisgICAgICAgICAgICBpZiAoISh0eXBlUGFy
YW1ldGVyIGluc3RhbmNlb2YgVHlwZVZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5wcm90b2NvbCkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxldCBzaWduYXR1cmVzID0KKyAgICAgICAgICAg
ICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnByb3RvY29sRGVjbC5zaWduYXR1cmVzQnlOYW1l
V2l0aFR5cGVWYXJpYWJsZSh0aGlzLm5hbWUsIHR5cGVQYXJhbWV0ZXIpOworICAgICAgICAgICAg
aWYgKCFzaWduYXR1cmVzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
b3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMsIHRoaXMudHlwZUFyZ3Vt
ZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlzLnJldHVyblR5cGUpOworICAgICAgICAgICAg
aWYgKG92ZXJsb2FkLmZ1bmMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBm
YWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKKyAgICAgICAgICAgIG92ZXJsb2Fk
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW92ZXJsb2FkKSB7CisgICAgICAgICAg
ICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCisgICAgICAgICAgICAgICAgcG9zc2li
bGVPdmVybG9hZHMsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlz
LnJldHVyblR5cGUpOworICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7CisgICAgICAg
ICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7CisgICAgICAgICAg
ICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdpdGgg
IjsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlQXJndW1lbnRzLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyB0aGlzLnR5cGVB
cmd1bWVudHMgKyAiPiBhbmQgIjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1bWVu
dCB0eXBlcyAoIiArIHRoaXMuYXJndW1lbnRUeXBlcyArICIpIjsKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5yZXR1cm5UeXBlKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IiBhbmQg
cmV0dXJuIHR5cGUgIiArIHRoaXMucmV0dXJuVHlwZTsKKyAgICAgICAgICAgICAgICBpZiAoZmFp
bHVyZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIsIGJ1dCBjb25z
aWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1lc3NhZ2UpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZUFyZ3Vt
ZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGUgPSB0
eXBlQXJndW1lbnRzW2ldOworICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBvdmVybG9h
ZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOworICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRl
ciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxzV2l0aENv
bW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBlIGFyZ3Vt
ZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0eXBlQXJn
dW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7CisgICAg
ICAgIH0KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyZ3VtZW50VHlwZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBhcmd1bWVudFR5cGUgPSB0aGlzLmFyZ3VtZW50
VHlwZXNbaV07CisgICAgICAgICAgICBsZXQgcGFyYW1ldGVyVHlwZSA9IG92ZXJsb2FkLmZ1bmMu
cGFyYW1ldGVyc1tpXS50eXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAorICAgICAgICAgICAg
ICAgIG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0aW9uQ29u
dGV4dCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRUeXBlLmVxdWFsc1dpdGhD
b21taXQocGFyYW1ldGVyVHlwZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcg
KyAiIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsIGFmdGVyIHR5cGUgYXJn
dW1lbnQgc3Vic3RpdHV0aW9uOiBhcmd1bWVudCA9ICIgKyBhcmd1bWVudFR5cGUgKyAiLCBwYXJh
bWV0ZXIgPSAiICsgcGFyYW1ldGVyVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXMucmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQpOworICAgIH0KKyAgICAKKyAgICByZXNvbHZl
VG9PdmVybG9hZChvdmVybG9hZCkKICAgICB7CiAgICAgICAgIHRoaXMuZnVuYyA9IG92ZXJsb2Fk
LmZ1bmM7CiAgICAgICAgIHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA9IG92ZXJsb2FkLnR5cGVB
cmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQgaW5zdGFuY2VvZiBUeXBl
ID8gdHlwZUFyZ3VtZW50LnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKSA6IHR5cGVBcmd1bWVudCk7
CiAgICAgICAgIGxldCByZXN1bHQgPSBvdmVybG9hZC5mdW5jLnJldHVyblR5cGUuc3Vic3RpdHV0
ZVRvVW5pZmljYXRpb24oCiAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJz
LCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwotICAgICAgICB0aGlzLnJlc3VsdFR5cGUg
PSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOwogICAgICAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCByZXR1cm4gdHlwZSIpOworICAgICAg
ICByZXN1bHQgPSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOworICAgICAgICB0aGlz
LnJlc3VsdFR5cGUgPSByZXN1bHQ7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwzOSArMzQsNDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZp
c2l0b3IgewogICAgIAogICAgIHZpc2l0UHJvZ3JhbShub2RlKQogICAgIHsKLSAgICAgICAgZm9y
IChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKSB7CisgICAgICAgIGxl
dCBkb1N0YXRlbWVudCA9IHN0YXRlbWVudCA9PiB7CiAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
U3RhdGVtZW50ID0gc3RhdGVtZW50OwogICAgICAgICAgICAgc3RhdGVtZW50LnZpc2l0KHRoaXMp
OwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGxldCB0eXBlIG9mIG5vZGUudHlw
ZXMudmFsdWVzKCkpCisgICAgICAgICAgICBkb1N0YXRlbWVudCh0eXBlKTsKKyAgICAgICAgZm9y
IChsZXQgcHJvdG9jb2wgb2Ygbm9kZS5wcm90b2NvbHMudmFsdWVzKCkpCisgICAgICAgICAgICBk
b1N0YXRlbWVudChwcm90b2NvbCk7CisgICAgICAgIGZvciAobGV0IGZ1bmNzIG9mIG5vZGUuZnVu
Y3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmNzKSB7
CisgICAgICAgICAgICAgICAgdGhpcy52aXNpdEZ1bmMoZnVuYyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgZnVuY3Mgb2Ygbm9kZS5mdW5jdGlvbnMudmFsdWVz
KCkpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAgICAgICAgICAg
ICAgZG9TdGF0ZW1lbnQoZnVuYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIHZp
c2l0RnVuY0RlZihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwor
ICAgIH0KKyAgICAKKyAgICB2aXNpdE5hdGl2ZUZ1bmMobm9kZSkKKyAgICB7CiAgICAgfQogICAg
IAogICAgIHZpc2l0UHJvdG9jb2xEZWNsKG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxldCBz
aWduYXR1cmUgb2Ygbm9kZS5zaWduYXR1cmVzKSB7Ci0gICAgICAgICAgICBsZXQgc2V0ID0gbmV3
IFNldCgpOwotICAgICAgICAgICAgZnVuY3Rpb24gY29uc2lkZXIodGhpbmcpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaW5nLmlzVW5pZmlhYmxlKQotICAgICAgICAgICAg
ICAgICAgICBzZXQuYWRkKHRoaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNsYXNz
IE5vdGljZVR5cGVWYXJpYWJsZSBleHRlbmRzIFZpc2l0b3IgewotICAgICAgICAgICAgICAgIHZp
c2l0VHlwZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29uc2lkZXIobm9kZS50eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
dmlzaXRWYXJpYWJsZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc2lkZXIobm9kZS52YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbGV0IG5vdGljZVR5cGVWYXJpYWJsZSA9IG5ldyBOb3RpY2VU
eXBlVmFyaWFibGUoKTsKKyAgICAgICAgICAgIGxldCB0eXBlVmFyaWFibGVUcmFja2VyID0gbmV3
IFR5cGVWYXJpYWJsZVRyYWNrZXIoKTsKICAgICAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlclR5
cGUgb2Ygc2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRl
clR5cGUudmlzaXQobm90aWNlVHlwZVZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJUeXBlLnZpc2l0KHR5cGVWYXJpYWJsZVRyYWNrZXIpOworICAgICAgICAgICAgTm9kZS52aXNp
dChzaWduYXR1cmUucmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbiwgdHlwZVZhcmlhYmxl
VHJhY2tlcik7CiAgICAgICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHNpZ25hdHVy
ZS50eXBlUGFyYW1ldGVycykgewotICAgICAgICAgICAgICAgIGlmICghc2V0Lmhhcyh0eXBlUGFy
YW1ldGVyKSkKKyAgICAgICAgICAgICAgICBpZiAoIXR5cGVWYXJpYWJsZVRyYWNrZXIuc2V0Lmhh
cyh0eXBlUGFyYW1ldGVyKSkKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgV1R5cGVFcnJvcih0
eXBlUGFyYW1ldGVyLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBlIHBhcmFtZXRlciB0byBwcm90
b2NvbCBzaWduYXR1cmUgbm90IGluZmVycmFibGUgZnJvbSB2YWx1ZSBwYXJhbWV0ZXJzIik7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXNldC5oYXMobm9kZS50eXBlVmFyaWFibGUp
KQorICAgICAgICAgICAgaWYgKCF0eXBlVmFyaWFibGVUcmFja2VyLnNldC5oYXMobm9kZS50eXBl
VmFyaWFibGUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHNpZ25hdHVy
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUHJvdG9jb2wncyB0eXBlIHZhcmlhYmxlICgiICsgbm9k
ZS5uYW1lICsgIikgbm90IG1lbnRpb25lZCBpbiBzaWduYXR1cmU6ICIgKyBzaWduYXR1cmUpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTQxLDYgKzE0OSwzMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVu
ZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiBsaHNUeXBlOwogICAgIH0KICAgICAKKyAgICB2
aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUu
dGFyZ2V0LnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS5sVmFsdWUuaXNMVmFs
dWUpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsICJMSFMgb2YgcmVhZC1tb2RpZnktd3JpdGUgaXMgbm90IGFuIExWYWx1ZTogIiArIG5v
ZGUubFZhbGUpOworICAgICAgICBsZXQgbGhzVHlwZSA9IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMp
OworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAgICBub2Rl
Lm5ld1ZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnZp
c2l0KHRoaXMpOworICAgICAgICBub2RlLm5ld1ZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAg
ICBsZXQgbmV3VmFsdWVUeXBlID0gbm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAgICAg
ICAgaWYgKCFsaHNUeXBlLmVxdWFsc1dpdGhDb21taXQobmV3VmFsdWVUeXBlKSkKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBl
IG1pc21hdGNoIGluIHJlYWQtbW9kaWZ5LXdyaXRlOiAiICsgbGhzVHlwZSArICIgdmVyc3VzICIg
KyBuZXdWYWx1ZVR5cGUpOworICAgICAgICByZXR1cm4gbm9kZS5yZXN1bHRFeHAudmlzaXQodGhp
cyk7CisgICAgfQorICAgIAorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKKyAgICB7
CisgICAgICAgIGlmICghbm9kZS50eXBlKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJB
bm9ueW1vdXMgdmFyaWFibGUgbXVzdCBrbm93IHR5cGUgYmVmb3JlIGZpcnN0IGFwcGVhcmFuY2Ui
KTsKKyAgICB9CisgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkKICAg
ICB7CiAgICAgICAgIGxldCB0eXBlID0gbm9kZS5wdHIudmlzaXQodGhpcykudW5pZnlOb2RlOwpA
QCAtMTQ4LDYgKzE4Miw4IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlR5
cGUgcGFzc2VkIHRvIGRlcmVmZXJlbmNlIGlzIG5vdCBhIHBvaW50ZXI6ICIgKyB0eXBlKTsKICAg
ICAgICAgbm9kZS50eXBlID0gdHlwZS5lbGVtZW50VHlwZTsKICAgICAgICAgbm9kZS5hZGRyZXNz
U3BhY2UgPSB0eXBlLmFkZHJlc3NTcGFjZTsKKyAgICAgICAgaWYgKCFub2RlLmFkZHJlc3NTcGFj
ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhZGRyZXNzIHNwYWNlIGluIHR5
cGU6ICIgKyB0eXBlKTsKICAgICAgICAgcmV0dXJuIG5vZGUudHlwZTsKICAgICB9CiAgICAgCkBA
IC0xNjUsNyArMjAxLDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHsK
ICAgICAgICAgbGV0IGVsZW1lbnRUeXBlID0gbm9kZS5sVmFsdWUudmlzaXQodGhpcykudW5pZnlO
b2RlOwogICAgICAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBQdHJUeXBlKSB7Ci0gICAg
ICAgICAgICBub2RlLmJlY29tZUNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihu
b2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlS
ZWZUeXBlKG5vZGUub3JpZ2luLCBlbGVtZW50VHlwZS5hZGRyZXNzU3BhY2UsIGVsZW1lbnRUeXBl
LmVsZW1lbnRUeXBlKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4OSwzNSArMjI1LDg3IEBA
IGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJTaG91bGQgbm90IGV4aXN0IHlldC4iKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RFeHBy
ZXNzaW9uKG5vZGUpCisgICAgX2ZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3Mobm9kZSwgYmFz
ZVR5cGUsIGV4dHJhQXJncywgZXh0cmFBcmdUeXBlcykKICAgICB7Ci0gICAgICAgIGxldCBzdHJ1
Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBiYXNl
VHlwZSA9IGJhc2VUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKQorICAgICAgICBub2RlLmJh
c2VUeXBlID0gYmFzZVR5cGU7CiAgICAgICAgIAotICAgICAgICBub2RlLnN0cnVjdFR5cGUgPSBz
dHJ1Y3RUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKLSAgICAgICAgCi0gICAgICAgIGxl
dCB1bmRlcmx5aW5nU3RydWN0ID0gc3RydWN0VHlwZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChz
dHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikKLSAgICAgICAgICAgIHVuZGVybHlpbmdTdHJ1
Y3QgPSB1bmRlcmx5aW5nU3RydWN0LnR5cGU7Ci0gICAgICAgIAotICAgICAgICBpZiAoISh1bmRl
cmx5aW5nU3RydWN0IGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJPcGVyYW5kIHRvIGRvdCBl
eHByZXNzaW9uIGlzIG5vdCBhIHN0cnVjdCB0eXBlOiAiICsgc3RydWN0VHlwZSk7CisgICAgICAg
IC8vIFN1Y2ggYSB0eXBlIG11c3QgZXhpc3QuIFRoaXMgbWF5IHRocm93IGlmIGl0IGRvZXNuJ3Qu
CisgICAgICAgIGxldCB0eXBlRm9yQW5kID0gYmFzZVR5cGUuYXJndW1lbnRUeXBlRm9yQW5kT3Zl
cmxvYWQobm9kZS5vcmlnaW4pOworICAgICAgICBpZiAoIXR5cGVGb3JBbmQpCisgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlwZUZvckFuZCIpOworICAgICAgICAKKyAg
ICAgICAgbGV0IGVycm9yRm9yR2V0OworICAgICAgICBsZXQgZXJyb3JGb3JBbmQ7CisgICAgICAg
IAorICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IENhbGxFeHByZXNzaW9u
LnJlc29sdmUoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUucG9zc2libGVHZXRP
dmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsCisgICAgICAg
ICAgICAgICAgbm9kZS5nZXRGdW5jTmFtZSwgW10sIFtub2RlLmJhc2UsIC4uLmV4dHJhQXJnc10s
IFtiYXNlVHlwZSwgLi4uZXh0cmFBcmdUeXBlc10sIG51bGwpOworICAgICAgICAgICAgbm9kZS5j
YWxsRm9yR2V0ID0gcmVzdWx0LmNhbGw7CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JH
ZXQgPSByZXN1bHQucmVzdWx0VHlwZTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgaWYgKCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93
IGU7CisgICAgICAgICAgICBlcnJvckZvckdldCA9IGU7CisgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikgCi0gICAgICAgICAgICB1
bmRlcmx5aW5nU3RydWN0ID0gdW5kZXJseWluZ1N0cnVjdC5pbnN0YW50aWF0ZShzdHJ1Y3RUeXBl
LnR5cGVBcmd1bWVudHMsICJzaGFsbG93Iik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBs
ZXQgYmFzZUZvckFuZCA9IGJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQobm9kZS5vcmln
aW4sIG5vZGUuYmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBD
YWxsRXhwcmVzc2lvbi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2Rl
LnBvc3NpYmxlQW5kT3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0
ZXJzLAorICAgICAgICAgICAgICAgIG5vZGUuYW5kRnVuY05hbWUsIFtdLCBbYmFzZUZvckFuZCwg
Li4uZXh0cmFBcmdzXSwgW3R5cGVGb3JBbmQsIC4uLmV4dHJhQXJnVHlwZXNdLAorICAgICAgICAg
ICAgICAgIG51bGwpOworICAgICAgICAgICAgbm9kZS5jYWxsRm9yQW5kID0gcmVzdWx0LmNhbGw7
CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JBbmQgPSByZXN1bHQucmVzdWx0VHlwZS51
bmlmeU5vZGUucmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChub2RlLm9yaWdpbik7CisgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBXVHlwZUVycm9y
KSkKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgZXJyb3JGb3JBbmQgPSBl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGUucmVzdWx0VHlwZUZvckdl
dCAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yQW5kKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcigKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsCisgICAg
ICAgICAgICAgICAgIkNhbm5vdCByZXNvbHZlIGFjY2VzczsgdHJpZWQgYnktdmFsdWU6XG4iICsK
KyAgICAgICAgICAgICAgICBlcnJvckZvckdldC5tZXNzYWdlICsgIlxuIiArCisgICAgICAgICAg
ICAgICAgImFuZCB0cmllZCBieS1wb2ludGVyOlxuIiArCisgICAgICAgICAgICAgICAgZXJyb3JG
b3JBbmQubWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLnJl
c3VsdFR5cGVGb3JHZXQgJiYgbm9kZS5yZXN1bHRUeXBlRm9yQW5kCisgICAgICAgICAgICAmJiAh
bm9kZS5yZXN1bHRUeXBlRm9yR2V0LmVxdWFscyhub2RlLnJlc3VsdFR5cGVGb3JBbmQpKQorICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
UmVzdWx0IHR5cGUgcmVzb2x2ZWQgYnktdmFsdWUgKCIgKyBub2RlLnJlc3VsdFR5cGVGb3JHZXQg
KyAiKSBkb2VzIG5vdCBtYXRjaCByZXN1bHQgdHlwZSByZXNvbHZlZCBieS1wb2ludGVyICgiICsg
bm9kZS5yZXN1bHRUeXBlRm9yQW5kICsgIikiKTsKKyAgICAgICAgCisgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVzb2x2ZSgKKyAgICAgICAg
ICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkcywgdGhpcy5fY3Vy
cmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICBub2RlLnNldEZ1
bmNOYW1lLCBbXSwgW25vZGUuYmFzZSwgLi4uZXh0cmFBcmdzLCBudWxsXSwgW2Jhc2VUeXBlLCAu
Li5leHRyYUFyZ1R5cGVzLCBub2RlLnJlc3VsdFR5cGVdLCBudWxsKTsKKyAgICAgICAgICAgIG5v
ZGUuY2FsbEZvclNldCA9IHJlc3VsdC5jYWxsOworICAgICAgICAgICAgaWYgKCFyZXN1bHQucmVz
dWx0VHlwZS5lcXVhbHMoYmFzZVR5cGUpKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlJlc3VsdCB0eXBlIG9mIHNldHRlciAi
ICsgcmVzdWx0LmNhbGwuZnVuYyArICIgaXMgbm90IHRoZSBiYXNlIHR5cGUgIiArIGJhc2VUeXBl
KTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9m
IFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICBub2Rl
LmVycm9yRm9yU2V0ID0gZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbGV0IGZpZWxk
ID0gdW5kZXJseWluZ1N0cnVjdC5maWVsZEJ5TmFtZShub2RlLmZpZWxkTmFtZSk7Ci0gICAgICAg
IGlmICghZmllbGQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJGaWVsZCAiICsgbm9kZS5maWVsZE5hbWUgKyAiIG5vdCBmb3VuZCBp
biAiICsgc3RydWN0VHlwZSk7Ci0gICAgICAgIHJldHVybiBmaWVsZC50eXBlOworICAgICAgICBy
ZXR1cm4gbm9kZS5yZXN1bHRUeXBlOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Np
b24obm9kZSkKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIG5v
ZGUudHlwZSA9IG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmICghbm9kZS50
eXBlKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEaWQgbm90IGdldCB0eXBlIGZvciBu
b2RlOiAiICsgbm9kZS5hcmd1bWVudCk7Ci0gICAgICAgIHJldHVybiBub2RlLmJvZHkudmlzaXQo
dGhpcyk7CisgICAgICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyku
dW5pZnlOb2RlOworICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFj
Y2Vzcyhub2RlLCBzdHJ1Y3RUeXBlLCBbXSwgW10pOworICAgIH0KKyAgICAKKyAgICB2aXNpdElu
ZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGFycmF5VHlwZSA9IG5vZGUu
YXJyYXkudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBsZXQgaW5kZXhUeXBlID0gbm9k
ZS5pbmRleC52aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0aGlzLl9maW5p
c2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIGFycmF5VHlwZSwgW25vZGUuaW5kZXhdLCBb
aW5kZXhUeXBlXSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKQEAg
LTMyMiwxMCArNDEwLDEwIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgICAgIHJlc3VsdCA9IGV4cHJlc3Npb24udmlzaXQodGhpcyk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAg
IHsKLSAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGVzID0gbm9kZS50eXBlQXJndW1lbnRzLm1h
cCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgbGV0
IHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0
eXBlQXJndW1lbnQudmlzaXQodGhpcykpOwogICAgICAgICBsZXQgYXJndW1lbnRUeXBlcyA9IG5v
ZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiB7CiAgICAgICAgICAgICBsZXQgbmV3QXJn
dW1lbnQgPSBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgICAgIGlmICghbmV3QXJndW1l
bnQpCkBAIC0zMzMsNzcgKzQyMSwxMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7
CiAgICAgICAgICAgICByZXR1cm4gbmV3QXJndW1lbnQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkp
OwogICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBoYW5k
bGUgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yJltdIGlzIGNhbGxlZCB3aXRoIGEgdHlwZSB0aGF0
IGlzbid0IHN1ZmZpY2llbnRseQotICAgICAgICAvLyByZWZlcmVuY2V5LgotICAgICAgICBpZiAo
bm9kZS5uYW1lID09ICJvcGVyYXRvciZbXSIpIHsKLSAgICAgICAgICAgIGxldCBhcmdUeXBlID0g
YXJndW1lbnRUeXBlc1swXS51bmlmeU5vZGU7Ci0gICAgICAgICAgICBpZiAoYXJnVHlwZSBpbnN0
YW5jZW9mIFB0clR5cGUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMgbm90IHZhbGlkIik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcmdUeXBlIGluc3RhbmNlb2YgQXJyYXlU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcgTWFrZUFy
cmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5hcmd1bWVudExpc3RbMF0pOwotICAg
ICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdLm51bUVsZW1lbnRzID0gYXJnVHlwZS5u
dW1FbGVtZW50czsKLSAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IEFycmF5
UmVmVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ1R5cGUuZWxlbWVudFR5cGUpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmICghKGFyZ1R5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKSB7
Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcgTWFrZVB0ckV4cHJl
c3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0WzBdKTsKLSAgICAgICAgICAgICAg
ICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IFB0clR5cGUobm9kZS5vcmlnaW4sICJ0aHJlYWQiLCBh
cmd1bWVudFR5cGVzWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKICAg
ICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlczsKICAgICAgICAgaWYgKG5v
ZGUucmV0dXJuVHlwZSkKICAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsK
LSAgICAgICAgCi0gICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7Ci0gICAgICAgIGxldCBmYWls
dXJlcyA9IFtdOwotICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHRoaXMuX2N1cnJl
bnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGlmICghKHR5cGVQYXJh
bWV0ZXIgaW5zdGFuY2VvZiBUeXBlVmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnByb3RvY29sKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbGV0IHNpZ25hdHVyZXMgPQotICAgICAgICAgICAg
ICAgIHR5cGVQYXJhbWV0ZXIucHJvdG9jb2wucHJvdG9jb2xEZWNsLnNpZ25hdHVyZXNCeU5hbWVX
aXRoVHlwZVZhcmlhYmxlKG5vZGUubmFtZSwgdHlwZVBhcmFtZXRlcik7Ci0gICAgICAgICAgICBp
ZiAoIXNpZ25hdHVyZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBv
dmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgbm9kZS50eXBlQXJndW1l
bnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVyblR5cGUpOwotICAgICAgICAgICAgaWYgKG92
ZXJsb2FkLmZ1bmMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmYWlsdXJl
cy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKLSAgICAgICAgICAgIG92ZXJsb2FkID0gbnVs
bDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW92ZXJsb2FkKSB7Ci0gICAgICAgICAgICBvdmVy
bG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCi0gICAgICAgICAgICAgICAgbm9kZS5wb3NzaWJs
ZU92ZXJsb2Fkcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVy
blR5cGUpOwotICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7Ci0gICAgICAgICAgICAg
ICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Ci0gICAgICAgICAgICAgICAg
bGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdpdGggIjsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyBub2RlLnR5cGVBcmd1bWVu
dHMgKyAiPiBhbmQgIjsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1bWVudCB0eXBl
cyAoIiArIGFyZ3VtZW50VHlwZXMgKyAiKSI7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmV0
dXJuVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5kIHJldHVybiB0eXBl
ICIgKyBub2RlLnJldHVyblR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lkZXJlZDpcbiIg
KyBmYWlsdXJlcy5qb2luKCJcbiIpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudFR5cGVzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgdHlwZUFyZ3VtZW50VHlwZSA9IHR5cGVBcmd1
bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBvdmVybG9hZC5m
dW5jLnR5cGVQYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRlciBp
bnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxzV2l0aENvbW1p
dCh0eXBlQXJndW1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0
ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBlIGFyZ3VtZW50
IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0eXBlQXJndW1l
bnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlc1tpXTsKLSAg
ICAgICAgICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gb3ZlcmxvYWQuZnVuYy5wYXJhbWV0ZXJzW2ld
LnR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCi0gICAgICAgICAgICAgICAgb3ZlcmxvYWQu
ZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250ZXh0KTsKLSAgICAg
ICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVudFR5cGUuZXF1YWxzV2l0aENvbW1pdChwYXJhbWV0
ZXJUeXBlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyArICIgYXJndW1lbnQg
YW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0ZXIgdHlwZSBhcmd1bWVudCBzdWJzdGl0
dXRpb246IGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50VHlwZSArICIsIHBhcmFtZXRlciA9ICIgKyBw
YXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm9kZS5yZXNvbHZlKG92
ZXJsb2FkKTsKKworICAgICAgICBsZXQgcmVzdWx0ID0gbm9kZS5yZXNvbHZlKG5vZGUucG9zc2li
bGVPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsIHR5cGVB
cmd1bWVudHMpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIH0KIApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHByZXNzaW9uLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qcwkocmV2
aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHBy
ZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBAIGNsYXNzIENvbW1hRXhw
cmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24KICAgICAKICAgICBnZXQgbGlzdCgpIHsgcmV0dXJu
IHRoaXMuX2xpc3Q7IH0KICAgICAKKyAgICAvLyBOT1RFOiBJdCdzIHN1cGVyIHRlbXB0aW5nIHRv
IHNheSB0aGF0IENvbW1hRXhwcmVzc2lvbiBpcyBhbiBsVmFsdWUgaWYgaXRzIGxhc3QgZW50cnkg
aXMgYW4gbFZhbHVlLiBCdXQsCisgICAgLy8gUHJvcGVydHlSZXNvbHZlciByZWxpZXMgb24gdGhp
cyBub3QgYmVpbmcgdGhlIGNhc2UuCisgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuICIoIiArIHRoaXMubGlzdC50b1N0cmluZygpICsgIikiOwpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RlcmVmZXJlbmNlRXhwcmVzc2lv
bi5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIg
QEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgRGVyZWZlcmVuY2VFeHByZXNzaW9uIGV4dGVuZHMg
RXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBwdHIpCisgICAgY29uc3RydWN0
b3Iob3JpZ2luLCBwdHIsIHR5cGUgPSBudWxsLCBhZGRyZXNzU3BhY2UgPSBudWxsKQogICAgIHsK
ICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fcHRyID0gcHRyOworICAgICAg
ICB0aGlzLnR5cGUgPSB0eXBlOworICAgICAgICB0aGlzLmFkZHJlc3NTcGFjZSA9IGFkZHJlc3NT
cGFjZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IHB0cigpIHsgcmV0dXJuIHRoaXMuX3B0cjsgfQpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpz
CShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RF
eHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxOSArMjQsMjIgQEAKICAqLwogInVz
ZSBzdHJpY3QiOwogCi1jbGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7Citj
bGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIHsKICAg
ICBjb25zdHJ1Y3RvcihvcmlnaW4sIHN0cnVjdCwgZmllbGROYW1lKQogICAgIHsKLSAgICAgICAg
c3VwZXIob3JpZ2luKTsKLSAgICAgICAgdGhpcy5fc3RydWN0ID0gc3RydWN0OworICAgICAgICBz
dXBlcihvcmlnaW4sIHN0cnVjdCk7CiAgICAgICAgIHRoaXMuX2ZpZWxkTmFtZSA9IGZpZWxkTmFt
ZTsKICAgICB9CiAgICAgCi0gICAgZ2V0IHN0cnVjdCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdDsg
fQorICAgIGdldCBzdHJ1Y3QoKSB7IHJldHVybiB0aGlzLmJhc2U7IH0KICAgICBnZXQgZmllbGRO
YW1lKCkgeyByZXR1cm4gdGhpcy5fZmllbGROYW1lOyB9CiAgICAgZ2V0IGlzTFZhbHVlKCkgeyBy
ZXR1cm4gdGhpcy5zdHJ1Y3QuaXNMVmFsdWU7IH0KICAgICBnZXQgYWRkcmVzc1NwYWNlKCkgeyBy
ZXR1cm4gdGhpcy5zdHJ1Y3QuYWRkcmVzc1NwYWNlOyB9CiAgICAgCisgICAgZ2V0IGdldEZ1bmNO
YW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFtZTsgfQorICAgIGdldCBh
bmRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvciYuIiArIHRoaXMuZmllbGROYW1lOyB9Cisg
ICAgZ2V0IHNldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFt
ZSArICI9IjsgfQorICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiAi
KCIgKyB0aGlzLnN0cnVjdCArICIuIiArIHRoaXMuZmllbGROYW1lICsgIikiOwpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxMiArNjAsMTQgQEAgY2xhc3MgRUJ1ZmZlciB7CiAgICAgZ2V0KGluZGV4KQogICAg
IHsKICAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl9hcnJheS5sZW5ndGgp
Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm91dCBvZiBib3VuZHMgYnVmZmVyIGFjY2Vz
cyIpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJPdXQgb2YgYm91bmRzIGJ1ZmZlciBh
Y2Nlc3MgKGJ1ZmZlciA9ICIgKyB0aGlzICsgIiwgaW5kZXggPSAiICsgaW5kZXggKyAiKSIpOwog
ICAgICAgICByZXR1cm4gdGhpcy5fYXJyYXlbaW5kZXhdOwogICAgIH0KICAgICAKICAgICBzZXQo
aW5kZXgsIHZhbHVlKQogICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0
aGlzLl9hcnJheS5sZW5ndGgpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm91dCBvZiBi
b3VuZHMgYnVmZmVyIGFjY2VzcyAoYnVmZmVyID0gIiArIHRoaXMgKyAiLCBpbmRleCA9ICIgKyBp
bmRleCArICIpIik7CiAgICAgICAgIHRoaXMuX2FycmF5W2luZGV4XSA9IHZhbHVlOwogICAgIH0K
ICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJC
dWlsZGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9FQnVmZmVyQnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTA0LDExICsxMDQsOSBA
QCBjbGFzcyBFQnVmZmVyQnVpbGRlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBzdXBlci52
aXNpdExvZ2ljYWxOb3Qobm9kZSk7CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lv
bihub2RlKQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7CiAgICAgICAg
IHRoaXMuX2NyZWF0ZUVQdHJGb3JOb2RlKG5vZGUpOwotICAgICAgICBub2RlLmFyZ3VtZW50LnZp
c2l0KHRoaXMpOwotICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAog
ICAgIHZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNiArMTAyLDExIEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAg
ICAgICByZXR1cm4gdGFyZ2V0OwogICAgIH0KICAgICAKKyAgICB2aXNpdElkZW50aXR5RXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMp
OworICAgIH0KKyAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAg
IHsKICAgICAgICAgbGV0IHB0ciA9IG5vZGUucHRyLnZpc2l0KHRoaXMpLmxvYWRWYWx1ZSgpOwpA
QCAtMTEyLDcgKzExNyw4IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAg
IAogICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBub2RlLmVQdHIuYm94KG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpKTsKKyAgICAgICAgbGV0IHB0
ciA9IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpOworICAgICAgICByZXR1cm4gbm9kZS5lUHRyLmJv
eChwdHIpOwogICAgIH0KICAgICAKICAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9k
ZSkKQEAgLTEyNSwxMiArMTMxLDYgQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7
CiAgICAgICAgIHJldHVybiBub2RlLmVQdHIuYm94KG5ldyBFQXJyYXlSZWYobm9kZS5sVmFsdWUu
dmlzaXQodGhpcykubG9hZFZhbHVlKCksIDEpKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RF
eHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgc3RydWN0UHRyID0gbm9kZS5zdHJ1
Y3QudmlzaXQodGhpcyk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3RQdHIucGx1cyhub2RlLmZpZWxk
Lm9mZnNldCk7Ci0gICAgfQotICAgIAogICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCiAg
ICAgewogICAgICAgICBsZXQgcmVzdWx0OwpAQCAtMjMxLDEwICsyMzEsOSBAQCBjbGFzcyBFdmFs
dWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgQ29udGludWVFeGNlcHRpb247
CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0QW5v
bnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAgICAgIG5vZGUuZVB0ci5jb3B5RnJvbShu
b2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMpLCBub2RlLnR5cGUuc2l6ZSk7Ci0gICAgICAgIHJldHVy
biBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUudHlwZS5wb3B1bGF0ZURlZmF1
bHRWYWx1ZShub2RlLmVQdHIuYnVmZmVyLCBub2RlLmVQdHIub2Zmc2V0KTsKICAgICB9CiAgICAg
CiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQpAQCAtMjQ3LDYgKzI0Niw4IEBAIGNsYXNz
IEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgaWYgKCF0eXBlIHx8ICFh
cmd1bWVudCkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlw
ZSBvciBhcmd1bWVudDsgaSA9ICIgKyBpICsgIiwgYXJndW1lbnQgPSAiICsgYXJndW1lbnQgKyAi
LCB0eXBlID0gIiArIHR5cGUgKyAiOyBpbiAiICsgbm9kZSk7CiAgICAgICAgICAgICBsZXQgYXJn
dW1lbnRWYWx1ZSA9IGFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAgICAgICAgICAgaWYgKCFhcmd1
bWVudFZhbHVlKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhcmd1bWVu
dCB2YWx1ZSwgaSA9ICIgKyBpICsgIiwgbm9kZSA9ICIgKyBub2RlKTsKICAgICAgICAgICAgIGNh
bGxBcmd1bWVudHMucHVzaCgoKSA9PiB0aGlzLl9zbmFwc2hvdCh0eXBlLCBudWxsLCBhcmd1bWVu
dFZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJKHJldmlzaW9uIDIyMjEyMykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDE2IEBAIGNsYXNzIEV4cHJlc3Npb25GaW5kZXIgZXh0
ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CiAgICAgfQogICAg
IAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SWRlbnRpdHlF
eHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9jYWxsYmFjayhub2RlKTsKKyAg
ICB9CisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAg
dGhpcy5fY2FsbGJhY2sobm9kZSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9GaW5kSGlnaFpvbWJpZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRmluZEhpZ2hab21iaWVzLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0ZpbmRIaWdoWm9tYmllcy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKQorewor
ICAgIHByb2dyYW0udmlzaXQobmV3IEhpZ2hab21iaWVGaW5kZXIoKSk7Cit9CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHJldmlzaW9uIDIyMjEyMykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgRm9yTG9vcCBleHRlbmRzIE5vZGUgewogCiAgICAgdG9T
dHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJmb3IgKCIgKyAodGhpcy5pbml0aWFsaXph
dGlvbiA/IHRoaXMuaW5pdGlhbGl6YXRpb24gOiAiICIpICsgIjsgIiArICh0aGlzLmNvbmRpdGlv
biA/IHRoaXMuY29uZGl0aW9uIDogIiIpICsgIjsgIiArICh0aGlzLmluY3JlbWVudCA/IHRoaXMu
aW5jcmVtZW50IDogIiIpICsgIikgIiArIGJvZHk7CisgICAgICAgIHJldHVybiAiZm9yICgiICsg
KHRoaXMuaW5pdGlhbGl6YXRpb24gPyB0aGlzLmluaXRpYWxpemF0aW9uIDogIiAiKSArICI7ICIg
KyAodGhpcy5jb25kaXRpb24gPyB0aGlzLmNvbmRpdGlvbiA6ICIiKSArICI7ICIgKyAodGhpcy5p
bmNyZW1lbnQgPyB0aGlzLmluY3JlbWVudCA6ICIiKSArICIpICIgKyB0aGlzLmJvZHk7CiAgICAg
fQogfTsKIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCShyZXZpc2lv
biAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMiBAQCBjbGFzcyBGdW5jIGV4dGVuZHMgTm9kZSB7CiAg
ICAgewogICAgICAgICBpZiAoIShvcmlnaW4gaW5zdGFuY2VvZiBMZXhlclRva2VuKSkKICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIG9yaWdpbjogIiArIG9yaWdpbik7CisgICAgICAg
IGZvciAobGV0IHBhcmFtZXRlciBvZiBwYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICBpZiAoIXBh
cmFtZXRlcikKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcGFyYW1ldGVy
Iik7CisgICAgICAgICAgICBpZiAoIXBhcmFtZXRlci50eXBlKQorICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTnVsbCBwYXJhbWV0ZXIgdHlwZSIpOworICAgICAgICB9CiAgICAgICAg
IHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKICAgICAgICAgdGhpcy5f
bmFtZSA9IG5hbWU7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5z
dGFudGlhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0Z1bmNJbnN0YW50aWF0b3IuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDggKzM5LDE0IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAgIGdldFVuaXF1ZShmdW5j
LCB0eXBlQXJndW1lbnRzKQogICAgIHsKICAgICAgICAgY2xhc3MgRmluZFR5cGVWYXJpYWJsZSBl
eHRlbmRzIFZpc2l0b3IgeworICAgICAgICAgICAgdmlzaXRUeXBlUmVmKG5vZGUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgdHlwZUFyZ3VtZW50IG9mIG5vZGUudHlw
ZUFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICB2aXNpdFR5cGVWYXJp
YWJsZShub2RlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVk
IHR5cGUgdmFyaWFibGU6ICIgKyBub2RlKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIlVuZXhwZWN0ZWQgdHlwZSB2YXJpYWJsZTogIiArIG5vZGUgKyAiIHdoZW4gaW5zdGFudGlh
dGluZyAiICsgZnVuYyArICIgd2l0aCBhcmd1bWVudHMgIiArIHR5cGVBcmd1bWVudHMpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAobGV0IHR5cGVBcmd1bWVudCBvZiB0
eXBlQXJndW1lbnRzKQpAQCAtNzUsMzMgKzgxLDM4IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3Ig
ewogICAgICAgICAgICAgICAgICAgICBsZXQgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBs
KHJlc3VsdC5wb3NzaWJsZU92ZXJsb2FkcywgcmVzdWx0LnR5cGVBcmd1bWVudHMsIHJlc3VsdC5h
cmd1bWVudFR5cGVzLCByZXN1bHQucmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbik7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykKICAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHJlc29sdmUgcHJvdG9jb2wgc2lnbmF0
dXJlIGZ1bmN0aW9uIGNhbGwgZHVyaW5nIGluc3RhbnRpYXRpb246ICIgKyByZXN1bHQuZnVuYyAr
IChvdmVybG9hZC5mYWlsdXJlcy5sZW5ndGggPyAiOyB0cmllZDpcbiIgKyBvdmVybG9hZC5mYWls
dXJlcy5qb2luKCJcbiIpIDogIiIpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc29s
dmUob3ZlcmxvYWQpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzb2x2ZVRvT3Zlcmxv
YWQob3ZlcmxvYWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LmZ1bmMuaXNOYXRpdmUpCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5uYXRpdmVGdW5jSW5zdGFuY2UgPSB0aGlzSW5zdGFudGlhdG9yLmdldFVuaXF1ZShy
ZXN1bHQuZnVuYywgcmVzdWx0LmFjdHVhbFR5cGVBcmd1bWVudHMpOworICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBuZXcgSW5zdGFudGlhdGlv
blN1YnN0aXR1dGlvbihmdW5jLnR5cGVQYXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKTsKKyAgICAg
ICAgbGV0IGluc3RhbnRpYXRlSW1tZWRpYXRlcyA9IG5ldyBJbnN0YW50aWF0ZUltbWVkaWF0ZXMo
KTsKICAgICAgICAgCi0gICAgICAgIGNsYXNzIEluc3RhbnRpYXRlIGV4dGVuZHMgVmlzaXRvckJh
c2UgeworICAgICAgICBjbGFzcyBJbnN0YW50aWF0ZSB7CiAgICAgICAgICAgICB2aXNpdEZ1bmNE
ZWYoZnVuYykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZ1bmNE
ZWYoCiAgICAgICAgICAgICAgICAgICAgIGZ1bmMub3JpZ2luLCBmdW5jLm5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgIGZ1bmMucmV0dXJuVHlwZS52aXNpdChzdWJzdGl0dXRpb24pLAorICAgICAg
ICAgICAgICAgICAgICBmdW5jLnJldHVyblR5cGUudmlzaXQoc3Vic3RpdHV0aW9uKS52aXNpdChp
bnN0YW50aWF0ZUltbWVkaWF0ZXMpLAogICAgICAgICAgICAgICAgICAgICBbXSwgLy8gV2UncmUg
aW5zdGFudGlhdGVkIHNvIHdlIG5vIGxvbmdlciB0YWtlIHR5cGUgcGFyYW1ldGVycy4KLSAgICAg
ICAgICAgICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVy
LnZpc2l0KHN1YnN0aXR1dGlvbikpLAotICAgICAgICAgICAgICAgICAgICBmdW5jLmJvZHkudmlz
aXQoc3Vic3RpdHV0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMucGFyYW1ldGVycy5t
YXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3Rh
bnRpYXRlSW1tZWRpYXRlcykpLAorICAgICAgICAgICAgICAgICAgICBmdW5jLmJvZHkudmlzaXQo
c3Vic3RpdHV0aW9uKS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgdmlzaXROYXRpdmVGdW5jKGZ1bmMpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVGdW5jSW5zdGFuY2Uo
CiAgICAgICAgICAgICAgICAgICAgIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMucmV0
dXJuVHlwZS52aXNpdChzdWJzdGl0dXRpb24pLAotICAgICAgICAgICAgICAgICAgICBmdW5jLnBh
cmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQoc3Vic3RpdHV0aW9uKSks
Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmMuaXNDYXN0KTsKKyAgICAgICAgICAgICAgICAgICAg
ZnVuYy5yZXR1cm5UeXBlLnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5zdGFudGlhdGVJbW1l
ZGlhdGVzKSwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0
ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5zdGFudGlhdGVJbW1l
ZGlhdGVzKSksCisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaXNDYXN0LAorICAgICAgICAgICAg
ICAgICAgICBmdW5jLmluc3RhbnRpYXRlSW1wbGVtZW50YXRpb24oc3Vic3RpdHV0aW9uKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbGV0IHJlc3VsdGluZ0Z1bmMgPSBmdW5j
LnZpc2l0KG5ldyBJbnN0YW50aWF0ZSgpKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0hpZ2hab21iaWVGaW5kZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvSGlnaFpvbWJpZUZpbmRlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9IaWdoWm9tYmllRmluZGVyLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8gSWYgYSBoaWdoLWxldmVsIGNvbnN0cnVjdCBz
b21laG93IG1hbmFnZXMgdG8gbGl2ZSBvbiB3aGVuIHdlJ3JlIGxvd2VyZWQsIGl0J3MgYSBoaWdo
IHpvbWJpZS4KK2NsYXNzIEhpZ2hab21iaWVGaW5kZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBf
Zm91bmQobm9kZSkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcihub2RlLm9yaWdpbi5v
cmlnaW5TdHJpbmcgKyAiOiBIaWdoIHpvbWJpZTogIiArIG5vZGUpOworICAgIH0KKyAgICAKKyAg
ICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2ZvdW5kKG5v
ZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsK
KyAgICAgICAgdGhpcy5fZm91bmQobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0Q2FsbEV4
cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24o
bm9kZSk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9J
ZGVudGl0eUV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvSWRlbnRpdHlFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIElkZW50aXR5RXhwcmVzc2lvbiBleHRlbmRz
IEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKHRhcmdldCkKKyAgICB7CisgICAgICAgIHN1
cGVyKHRhcmdldC5vcmlnaW4pOworICAgICAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7CisgICAg
fQorICAgIAorICAgIGdldCB0YXJnZXQoKSB7IHJldHVybiB0aGlzLl90YXJnZXQ7IH0KKyAgICAK
KyAgICBnZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy50YXJnZXQudW5pZnlOb2RlOyB9Cisg
ICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdGhpcy50YXJnZXQuaXNDb25zdGV4cHI7IH0K
KyAgICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0aGlzLnRhcmdldC5pc0xWYWx1ZTsgfQorICAg
IGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiB0aGlzLnRhcmdldC5hZGRyZXNzU3BhY2U7IH0K
KyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIigiICsgdGhpcy50
YXJnZXQgKyAiKSI7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9JbmRleEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZGV4RXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIEluZGV4RXhwcmVzc2lvbiBleHRlbmRzIFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBhcnJheSwgaW5k
ZXgpCisgICAgeworICAgICAgICBzdXBlcihvcmlnaW4sIGFycmF5KTsKKyAgICAgICAgdGhpcy5f
aW5kZXggPSBpbmRleDsKKyAgICB9CisgICAgCisgICAgZ2V0IGFycmF5KCkgeyByZXR1cm4gdGhp
cy5iYXNlOyB9CisgICAgZ2V0IGluZGV4KCkgeyByZXR1cm4gdGhpcy5faW5kZXg7IH0KKyAgICBn
ZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0aGlzLmFycmF5LmlzTFZhbHVlOyB9CisgICAgZ2V0IGFk
ZHJlc3NTcGFjZSgpIHsgcmV0dXJuIHRoaXMuYXJyYXkuYWRkcmVzc1NwYWNlOyB9CisgICAgCisg
ICAgZ2V0IGdldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yW10iOyB9CisgICAgZ2V0IGFu
ZEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yJltdIjsgfQorICAgIGdldCBzZXRGdW5jTmFt
ZSgpIHsgcmV0dXJuICJvcGVyYXRvcltdPSI7IH0KKworICAgIHVwZGF0ZUNhbGxzKCkKKyAgICB7
CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JHZXQpCisgICAgICAgICAgICB0aGlzLmNhbGxGb3JH
ZXQuYXJndW1lbnRMaXN0WzFdID0gdGhpcy5pbmRleDsKKyAgICAgICAgaWYgKHRoaXMuY2FsbEZv
ckFuZCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvckFuZC5hcmd1bWVudExpc3RbMV0gPSB0aGlz
LmluZGV4OworICAgICAgICBpZiAodGhpcy5jYWxsRm9yU2V0KQorICAgICAgICAgICAgdGhpcy5j
YWxsRm9yU2V0LmFyZ3VtZW50TGlzdFsxXSA9IHRoaXMuaW5kZXg7CisgICAgICAgIHN1cGVyLnVw
ZGF0ZUNhbGxzKCk7CisgICAgfQorCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuICIoIiArIHRoaXMuYXJyYXkgKyAiWyIgKyB0aGlzLmluZGV4ICsgIl0pIjsKKyAgICB9Cit9
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVzRm9yQ2FsbC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVz
Rm9yQ2FsbC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAgZnVuY3Rpb24gaW5mZXJUeXBlc0ZvckNhbGwoZnVuYywgdHlwZUFyZwogICAgICAgICBpZiAo
IWFyZ3VtZW50VHlwZXNbaV0pCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgYXJn
dW1lbnQgdHlwZSBhdCBpID0gIiArIGkpOwogICAgICAgICBpZiAoIWFyZ3VtZW50VHlwZXNbaV0u
dW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSkpCi0gICAg
ICAgICAgICByZXR1cm4ge2ZhaWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1
bmMsICJBcmd1bWVudCAjIiArIChpICsgMSkgKyAiICIgKyAoZnVuYy5wYXJhbWV0ZXJzW2ldLm5h
bWUgPyAiZm9yIHBhcmFtZXRlciAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLm5hbWUgOiAiIikgKyAi
IGRvZXMgbm90IG1hdGNoIChwYXNzZWQgIiArIGFyZ3VtZW50VHlwZXNbaV0gKyAiLCByZXF1aXJl
ICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSArICIpIil9OworICAgICAgICAgICAgcmV0dXJu
IHtmYWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQg
IyIgKyAoaSArIDEpICsgIiAiICsgKGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJh
bWV0ZXIgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lICsgIiAiIDogIiIpICsgImRvZXMgbm90
IG1hdGNoIChwYXNzZWQgIiArIGFyZ3VtZW50VHlwZXNbaV0gKyAiLCByZXF1aXJlICIgKyBmdW5j
LnBhcmFtZXRlcnNbaV0udHlwZSArICIpIil9OwogICAgIH0KICAgICBpZiAocmV0dXJuVHlwZSAm
JiAhcmV0dXJuVHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIGZ1bmMucmV0dXJuVHlwZSkp
CiAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUo
ZnVuYywgIlJldHVybiB0eXBlICIgKyBmdW5jLnJldHVyblR5cGUgKyAiIGRvZXMgbm90IG1hdGNo
ICIgKyByZXR1cm5UeXBlKX07CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9J
bmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5s
aW5lLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JbmxpbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDYgQEAgZnVuY3Rpb24gX2lu
bGluZUZ1bmN0aW9uKHByb2dyYW0sIGZ1bmMsIAogICAgIGlmIChmdW5jLmlubGluZWQgfHwgZnVu
Yy5pc05hdGl2ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGZ1bmMucmV3cml0ZShuZXcg
SW5zdGFudGlhdGVJbW1lZGlhdGVzKCkpOwotICAgIAogICAgIC8vIFRoaXMgaXMgdGhlIHByZWNp
c2UgdGltZSB3aGVuIHdlIGNhbiBidWlsZCBFQnVmZmVycyBpbiBvcmRlciB0byBnZXQgdGhlbSB0
byBiZSB1bmlxdWVkIGJ5CiAgICAgLy8gdHlwZSBpbnN0YW50aWF0aW9uIGJ1dCBub3RoaW5nIGVs
c2UuCiAgICAgZnVuYy52aXNpdChuZXcgU3RydWN0TGF5b3V0QnVpbGRlcigpKTsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwkocmV2aXNpb24gMjIyMTIzKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwkod29ya2luZyBjb3B5
KQpAQCAtMzIsMjQgKzMyLDE1IEBAIGNsYXNzIElubGluZXIgZXh0ZW5kcyBSZXdyaXRlciB7CiAg
ICAgICAgIHRoaXMuX3Zpc2l0aW5nID0gdmlzaXRpbmc7CiAgICAgfQogICAgIAotICAgIHZpc2l0
RG90RXhwcmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZp
c2l0RG90RXhwcmVzc2lvbihub2RlKTsKLSAgICAgICAgcmVzdWx0LmZpZWxkID0gcmVzdWx0LnN0
cnVjdFR5cGUudW5pZnlOb2RlLmZpZWxkQnlOYW1lKHJlc3VsdC5maWVsZE5hbWUpOwotICAgICAg
ICBpZiAocmVzdWx0LmZpZWxkLm9mZnNldCA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJVbi1sYWlkLW91dCBmaWVsZDogIiArIHJlc3VsdC5maWVsZCArICIgKGluICIgKyBy
ZXN1bHQuc3RydWN0VHlwZSArICIpIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
ICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCBy
ZXN1bHQgPSBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOworICAgICAgICBpZiAocmVz
dWx0Lm5hdGl2ZUZ1bmNJbnN0YW5jZSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIHJldHVybiB0aGlzLl92aXNpdGluZy5kb1Zpc2l0KG5vZGUuZnVuYywgKCkgPT4gewogICAg
ICAgICAgICAgbGV0IGZ1bmMgPSB0aGlzLl9wcm9ncmFtLmZ1bmNJbnN0YW50aWF0b3IuZ2V0VW5p
cXVlKHJlc3VsdC5mdW5jLCByZXN1bHQuYWN0dWFsVHlwZUFyZ3VtZW50cyk7Ci0gICAgICAgICAg
ICBpZiAoZnVuYy5pc05hdGl2ZSkgewotICAgICAgICAgICAgICAgIHJlc3VsdC5uYXRpdmVGdW5j
SW5zdGFuY2UgPSBmdW5jOwotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoZnVuYy5pc05hdGl2ZSkKKyAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbmF0aXZlIGZ1bmM6ICIgKyBmdW5jKTsKICAgICAg
ICAgICAgIF9pbmxpbmVGdW5jdGlvbih0aGlzLl9wcm9ncmFtLCBmdW5jLCB0aGlzLl92aXNpdGlu
Zyk7CiAgICAgICAgICAgICBsZXQgcmVzdWx0aW5nQmxvY2sgPSBuZXcgRnVuY3Rpb25MaWtlQmxv
Y2soCiAgICAgICAgICAgICAgICAgcmVzdWx0Lm9yaWdpbiwgZnVuYy5yZXR1cm5UeXBlLCByZXN1
bHQuYXJndW1lbnRMaXN0LCBmdW5jLnBhcmFtZXRlcnMsIGZ1bmMuYm9keSk7CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMJKHdvcmtp
bmcgY29weSkKQEAgLTE3Miw2ICsxNzIsODggQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgCiAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAi
bmF0aXZlIGludCBvcGVyYXRvciY8PihpbnQsaW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsK
KyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+
CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkgJiByaWdodC5s
b2FkVmFsdWUoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21h
cC5zZXQoCisgICAgICAgICAgICAibmF0aXZlIHVpbnQgb3BlcmF0b3ImPD4odWludCx1aW50KSIs
CisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0
aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KChs
ZWZ0LmxvYWRWYWx1ZSgpICYgcmlnaHQubG9hZFZhbHVlKCkpID4+PiAwKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRp
dmUgaW50IG9wZXJhdG9yfDw+KGludCxpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAg
ICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAg
ICAgICAgICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2FkVmFsdWUoKSB8IHJpZ2h0LmxvYWRW
YWx1ZSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNl
dCgKKyAgICAgICAgICAgICJuYXRpdmUgdWludCBvcGVyYXRvcnw8Pih1aW50LHVpbnQpIiwKKyAg
ICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24g
PSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3goKGxlZnQu
bG9hZFZhbHVlKCkgfCByaWdodC5sb2FkVmFsdWUoKSkgPj4+IDApOworICAgICAgICAgICAgfSk7
CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBp
bnQgb3BlcmF0b3JePD4oaW50LGludCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAg
ICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAg
ICAgICAgICAgICAgICBFUHRyLmJveChsZWZ0LmxvYWRWYWx1ZSgpIF4gcmlnaHQubG9hZFZhbHVl
KCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAor
ICAgICAgICAgICAgIm5hdGl2ZSB1aW50IG9wZXJhdG9yXjw+KHVpbnQsdWludCkiLAorICAgICAg
ICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChb
bGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJveCgobGVmdC5sb2Fk
VmFsdWUoKSBeIHJpZ2h0LmxvYWRWYWx1ZSgpKSA+Pj4gMCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0aXZlIGludCBv
cGVyYXRvcjw8PD4oaW50LHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAg
ICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAg
ICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2FkVmFsdWUoKSA8PCByaWdodC5sb2FkVmFsdWUo
KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCisg
ICAgICAgICAgICAibmF0aXZlIHVpbnQgb3BlcmF0b3I8PDw+KHVpbnQsdWludCkiLAorICAgICAg
ICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChb
bGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJveCgobGVmdC5sb2Fk
VmFsdWUoKSA8PCByaWdodC5sb2FkVmFsdWUoKSkgPj4+IDApOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBpbnQg
b3BlcmF0b3I+Pjw+KGludCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAg
ICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAg
ICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkgPj4gcmlnaHQubG9hZFZhbHVl
KCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAor
ICAgICAgICAgICAgIm5hdGl2ZSB1aW50IG9wZXJhdG9yPj48Pih1aW50LHVpbnQpIiwKKyAgICAg
ICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAo
W2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2Fk
VmFsdWUoKSA+Pj4gcmlnaHQubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0
b3J+PD4oaW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5j
LmltcGxlbWVudGF0aW9uID0gKFt2YWx1ZV0pID0+IEVQdHIuYm94KH52YWx1ZS5sb2FkVmFsdWUo
KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCisg
ICAgICAgICAgICAibmF0aXZlIHVpbnQgb3BlcmF0b3J+PD4odWludCkiLAorICAgICAgICAgICAg
ZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbdmFsdWVd
KSA9PiBFUHRyLmJveCgofnZhbHVlLmxvYWRWYWx1ZSgpKSA+Pj4gMCk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCiAgICAgICAgICAgICAibmF0aXZl
IGJvb2wgb3BlcmF0b3I9PTw+KGludCxpbnQpIiwKICAgICAgICAgICAgIGZ1bmMgPT4gewogICAg
ICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KQEAg
LTI0OCwzMCArMzMwLDMyIEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgICAgICAg
ICBFUHRyLmJveChsZWZ0LmxvYWRWYWx1ZSgpID49IHJpZ2h0LmxvYWRWYWx1ZSgpKTsKICAgICAg
ICAgICAgIH0pOwogICAgICAgICAKLSAgICAgICAgbGV0IGFycmF5RWxlbWVudFB0ciA9IGZ1bmMg
PT4gewotICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbcmVmLCBpbmRleF0sIG5v
ZGUpID0+IHsKLSAgICAgICAgICAgICAgICByZWYgPSByZWYubG9hZFZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFyZWYpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVy
cm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk51bGwgZGVyZWZlcmVuY2UiKTsKLSAgICAg
ICAgICAgICAgICBpbmRleCA9IGluZGV4LmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlm
IChpbmRleCA+IHJlZi5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJh
cEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkFycmF5IGluZGV4ICIgKyBpbmRleCAr
ICIgaXMgb3V0IG9mIGJvdW5kcyBvZiAiICsgcmVmKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
RVB0ci5ib3gocmVmLnB0ci5wbHVzKGluZGV4ICogbm9kZS5hY3R1YWxUeXBlQXJndW1lbnRzWzBd
LnNpemUpKTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICB0
aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAgIm5hdGl2ZSBUXiB0aHJlYWQgb3BlcmF0b3ImW108
VD4oVFtdIHRocmVhZCx1aW50KSIsCi0gICAgICAgICAgICBhcnJheUVsZW1lbnRQdHIpOwotICAg
ICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAgIm5hdGl2ZSBUXiB0aHJlYWRncm91cCBv
cGVyYXRvciZbXTxUOnByaW1pdGl2ZT4oVFtdIHRocmVhZGdyb3VwLHVpbnQpIiwKLSAgICAgICAg
ICAgIGFycmF5RWxlbWVudFB0cik7Ci0gICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAg
ICAibmF0aXZlIFReIGRldmljZSBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4oVFtdIGRldmljZSx1
aW50KSIsCi0gICAgICAgICAgICBhcnJheUVsZW1lbnRQdHIpOwotICAgICAgICB0aGlzLl9tYXAu
c2V0KAotICAgICAgICAgICAgIm5hdGl2ZSBUXiBjb25zdGFudCBvcGVyYXRvciZbXTxUOnByaW1p
dGl2ZT4oVFtdIGNvbnN0YW50LHVpbnQpIiwKLSAgICAgICAgICAgIGFycmF5RWxlbWVudFB0cik7
CisgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZSBvZiBhZGRyZXNzU3BhY2VzKSB7CisgICAg
ICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgICAgIGBuYXRpdmUgVF4gJHthZGRy
ZXNzU3BhY2V9IG9wZXJhdG9yJltdPFQke3Byb3RvY29sU3VmZml4KGFkZHJlc3NTcGFjZSl9PihU
W10gJHthZGRyZXNzU3BhY2V9LHVpbnQpYCwKKyAgICAgICAgICAgICAgICBmdW5jID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbcmVmLCBpbmRleF0sIG5v
ZGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZiA9IHJlZi5sb2FkVmFsdWUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVmKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk51
bGwgZGVyZWZlcmVuY2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXgu
bG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiByZWYubGVu
Z3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5v
ZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkFycmF5IGluZGV4ICIgKyBpbmRleCArICIgaXMgb3V0
IG9mIGJvdW5kcyBvZiAiICsgcmVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBF
UHRyLmJveChyZWYucHRyLnBsdXMoaW5kZXggKiBub2RlLmFjdHVhbFR5cGVBcmd1bWVudHNbMF0u
c2l6ZSkpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgICAgIGBuYXRpdmUgdWludCBv
cGVyYXRvci5sZW5ndGg8VCR7cHJvdG9jb2xTdWZmaXgoYWRkcmVzc1NwYWNlKX0+KFRbXSAke2Fk
ZHJlc3NTcGFjZX0pYCwKKyAgICAgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAg
ICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbcmVmXSwgbm9kZSkgPT4geworICAgICAgICAg
ICAgICAgICAgICAgICAgcmVmID0gcmVmLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFyZWYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVQdHIu
Ym94KDApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVQdHIuYm94KHJlZi5sZW5n
dGgpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICB9CiAgICAgfQogICAgIAogICAgIGFkZCh0aGluZykKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0xldEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTGV0RXhwcmVzc2lvbi5qcwkocmV2aXNpb24gMjIyMTIzKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV0RXhwcmVzc2lvbi5qcwkobm9uZXhpc3Rl
bnQpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotbGV0IGxldEV4cHJlc3Npb25Db3VudCA9IDA7Ci0K
LWNsYXNzIExldEV4cHJlc3Npb24gZXh0ZW5kcyBWYWx1ZSB7Ci0gICAgY29uc3RydWN0b3Iob3Jp
Z2luKQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgdGhpcy5fb3JpZ2luID0gb3Jp
Z2luOwotICAgICAgICB0aGlzLmluZGV4ID0gbGV0RXhwcmVzc2lvbkNvdW50Kys7Ci0gICAgICAg
IHRoaXMuYXJndW1lbnQgPSBudWxsOwotICAgICAgICB0aGlzLmJvZHkgPSBudWxsOwotICAgIH0K
LSAgICAKLSAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9Ci0gICAgZ2V0
IG5hbWUoKSB7IHJldHVybiAibGV0PCIgKyB0aGlzLmluZGV4ICsgIj4iOyB9Ci0gICAgCi0gICAg
dG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubmFtZSArICIoIiArIHRoaXMu
YXJndW1lbnQgKyAiLCAiICsgdGhpcy5ib2R5ICsgIikiOwotICAgIH0KLX0KLQpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xleGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTMsNiArMTEzLDEyIEBAIGNsYXNzIExleGVyIHsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQo
ImlkZW50aWZpZXIiKTsKICAgICAgICAgfQogCisgICAgICAgIGlmICgvXjB4WzAtOWEtZkEtRl0r
dS8udGVzdChyZWxldmFudFRleHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgidWludEhl
eExpdGVyYWwiKTsKKworICAgICAgICBpZiAoL14weFswLTlhLWZBLUZdKy8udGVzdChyZWxldmFu
dFRleHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgiaW50SGV4TGl0ZXJhbCIpOworCiAg
ICAgICAgIGlmICgvXlswLTldK3UvLnRlc3QocmVsZXZhbnRUZXh0KSkKICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQoInVpbnRMaXRlcmFsIik7CiAKQEAgLTEyMyw3ICsxMjksNyBAQCBjbGFzcyBM
ZXhlciB7CiAgICAgICAgIGlmICgvXihbMC05XSpcLlswLTldKyl8KFswLTldK1wuWzAtOV0qKS8u
dGVzdChyZWxldmFudFRleHQpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgiZG91YmxlTGl0
ZXJhbCIpOwogICAgICAgICAKLSAgICAgICAgaWYgKC9eLT58Pj18PD18PT18IT18XCs9fC09fFwq
PXxcLz18JT18Xj18XHw9fCY9fFwrXCt8LS18KFt7fSgpXFtcXT86PSsqXC8sLiUhfl4mfDw+QDst
XSkvLnRlc3QocmVsZXZhbnRUZXh0KSkKKyAgICAgICAgaWYgKC9ePDx8Pj58LT58Pj18PD18PT18
IT18XCs9fC09fFwqPXxcLz18JT18XF49fFx8PXwmPXxcK1wrfC0tfChbe30oKVxbXF0/Oj0rKlwv
LC4lIX5eJnw8PkA7LV0pLy50ZXN0KHJlbGV2YW50VGV4dCkpCiAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0KCJwdW5jdHVhdGlvbiIpOwogICAgICAgICAKICAgICAgICAgbGV0IHJlbWFpbmluZyA9
IHJlbGV2YW50VGV4dC5zdWJzdHJpbmcoMCwgMjApLnNwbGl0KC9ccy8pWzBdOwpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtlQXJyYXlSZWZFeHBy
ZXNzaW9uLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9NYWtlQXJyYXlSZWZFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSAr
MzMsNiBAQCBjbGFzcyBNYWtlQXJyYXlSZWZFeHByZXNzaW9uIGV4dGVuZHMgRXhwCiAgICAgCiAg
ICAgZ2V0IGxWYWx1ZSgpIHsgcmV0dXJuIHRoaXMuX2xWYWx1ZTsgfQogICAgIAotICAgIGJlY29t
ZUNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbigpCi0gICAgewotICAgICAgICB0aGlzLl9f
cHJvdG9fXyA9IENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbi5wcm90b3R5cGU7Ci0gICAg
fQotICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiAiQCIgKyAodGhp
cy5udW1FbGVtZW50cyA/ICI8PCIgKyB0aGlzLm51bUVsZW1lbnRzICsgIj4+IiA6ICIiKSArICIo
IiArIHRoaXMubFZhbHVlICsgIikiOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTmFtZUNvbnRleHQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTmFtZUNvbnRleHQuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw2IEBAIGNsYXNzIE5hbWVDb250ZXh0IHsKICAgICB7CiAgICAgICAgIHRoaXMuX21hcCA9IG5l
dyBNYXAoKTsKICAgICAgICAgdGhpcy5fc2V0ID0gbmV3IFNldCgpOwotICAgICAgICB0aGlzLl9k
ZWZpbmVkID0gbnVsbDsKICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlbWVudCA9IG51bGw7CiAg
ICAgICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7CiAgICAgICAgIHRoaXMuX2ludHJpbnNp
Y3MgPSBudWxsOwpAQCAtNjIsNyArNjEsNyBAQCBjbGFzcyBOYW1lQ29udGV4dCB7CiAgICAgICAg
IGlmICghdGhpbmcubmFtZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAg
IGlmICh0aGluZy5pc05hdGl2ZSkgeworICAgICAgICBpZiAodGhpbmcuaXNOYXRpdmUgJiYgIXRo
aW5nLmltcGxlbWVudGF0aW9uKSB7CiAgICAgICAgICAgICBpZiAoIXRoaXMuX2ludHJpbnNpY3Mp
CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOYXRpdmUgZnVuY3Rpb24gaW4gYSBz
Y29wZSB0aGF0IGRvZXMgbm90IHJlY29nbml6ZSBpbnRyaW5zaWNzIik7CiAgICAgICAgICAgICB0
aGlzLl9pbnRyaW5zaWNzLmFkZCh0aGluZyk7CkBAIC0xMTUsMzYgKzExNCwxMSBAQCBjbGFzcyBO
YW1lQ29udGV4dCB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KICAgICAKLSAgICBoYW5k
bGVEZWZpbmluZygpCi0gICAgewotICAgICAgICB0aGlzLl9kZWZpbmVkID0gbmV3IFNldCgpOwot
ICAgIH0KLSAgICAKLSAgICBpc0RlZmluZWQodGhpbmcpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fc2V0Lmhhcyh0aGluZykpIHsKLSAgICAgICAgICAgIHJldHVybiAhdGhpcy5fZGVmaW5lZAot
ICAgICAgICAgICAgICAgIHx8IHRoaXMuX2RlZmluZWQuaGFzKHRoaW5nKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGUgJiYgdGhpcy5fZGVsZWdhdGUuaXNEZWZpbmVk
KHRoaW5nKTsKLSAgICB9Ci0gICAgCi0gICAgZGVmaW5lKHRoaW5nKQotICAgIHsKLSAgICAgICAg
dGhpcy5fZGVmaW5lZC5hZGQodGhpbmcpOwotICAgIH0KLSAgICAKLSAgICBkZWZpbmVBbGwoKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fZGVmaW5lZCA9IG51bGw7Ci0gICAgfQotICAgIAogICAgIGRv
U3RhdGVtZW50KHN0YXRlbWVudCwgY2FsbGJhY2spCiAgICAgewogICAgICAgICB0aGlzLl9jdXJy
ZW50U3RhdGVtZW50ID0gc3RhdGVtZW50OwogICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICB0
aGlzLl9jdXJyZW50U3RhdGVtZW50ID0gbnVsbDsKLSAgICAgICAgdGhpcy5kZWZpbmUoc3RhdGVt
ZW50KTsKICAgICB9CiAgICAgCiAgICAgcmVjb2duaXplSW50cmluc2ljcygpCkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCShyZXZpc2lvbiAy
MjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDI3ICszMCwxNSBAQAogLy8gbW9yZSBjb252ZW5pZW50IHRv
IGNoZWNrIGhlcmUgdGhhbiBpbiB0aGUgQ2hlY2tlci4gVGhpcyB1c3VhbGx5IGludm9sdmVzIHRo
aW5ncyB0aGF0IG5lZWQgdG8gYmUKIC8vIGNoZWNrZWQgYmVmb3JlIFR5cGVSZWZUb1R5cGVEZWZT
a2lwcGVyLgogY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7Ci0gICAgLy8gSXQn
cyB0b3RhbGx5IE9LIHRvIGluc3RhbnRpYXRlIHRoaXMgd2l0aCB6ZXJvIGFyZ3VtZW50cyAoaS5l
LiBwYXNzaW5nIHVuZGVmaW5lZCBmb3IgYm90aCBvZgotICAgIC8vIHRoZW0pIGlmIHlvdSdyZSBj
cmVhdGluZyBhIE5hbWVSZXNvbHZlciB0byB2aXNpdCBhIFByb2dyYW0uCiAgICAgY29uc3RydWN0
b3IobmFtZUNvbnRleHQpCiAgICAgewogICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlzLl9u
YW1lQ29udGV4dCA9IG5hbWVDb250ZXh0OwogICAgIH0KLSAgICAKLSAgICB2aXNpdFByb2dyYW0o
bm9kZSkKKworICAgIGRvU3RhdGVtZW50KHN0YXRlbWVudCkKICAgICB7Ci0gICAgICAgIGxldCBu
YW1lQ29udGV4dCA9IG5ldyBOYW1lQ29udGV4dCh0aGlzLl9uYW1lQ29udGV4dCk7Ci0gICAgICAg
IG5hbWVDb250ZXh0LnByb2dyYW0gPSBub2RlOwotICAgICAgICBuYW1lQ29udGV4dC5yZWNvZ25p
emVJbnRyaW5zaWNzKCk7Ci0gICAgICAgIG5hbWVDb250ZXh0LmhhbmRsZURlZmluaW5nKCk7Ci0g
ICAgICAgIG5vZGUuaW50cmluc2ljcyA9IG5hbWVDb250ZXh0LmludHJpbnNpY3M7Ci0gICAgICAg
IGZvciAobGV0IHN0YXRlbWVudCBvZiBub2RlLnRvcExldmVsU3RhdGVtZW50cykKLSAgICAgICAg
ICAgIG5hbWVDb250ZXh0LmFkZChzdGF0ZW1lbnQpOwotICAgICAgICBsZXQgY2hlY2tlciA9IG5l
dyBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwotICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQg
b2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCi0gICAgICAgICAgICBuYW1lQ29udGV4dC5kb1N0
YXRlbWVudChzdGF0ZW1lbnQsICgpID0+IHN0YXRlbWVudC52aXNpdChjaGVja2VyKSk7Ci0gICAg
ICAgIG5vZGUuZ2xvYmFsTmFtZUNvbnRleHQgPSBuYW1lQ29udGV4dDsKKyAgICAgICAgdGhpcy5f
bmFtZUNvbnRleHQuZG9TdGF0ZW1lbnQoc3RhdGVtZW50LCAoKSA9PiBzdGF0ZW1lbnQudmlzaXQo
dGhpcykpOwogICAgIH0KICAgICAKICAgICBfdmlzaXRUeXBlUGFyYW1ldGVyc0FuZEJ1aWxkTmFt
ZUNvbnRleHQobm9kZSkKQEAgLTIwNyw4ICsxOTUsNiBAQCBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0
ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgIHR5cGUgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQo
VHlwZSwgbm9kZS5uYW1lKTsKICAgICAgICAgICAgIGlmICghdHlwZSkKICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDb3VsZCBu
b3QgZmluZCB0eXBlIG5hbWVkICIgKyBub2RlLm5hbWUpOwotICAgICAgICAgICAgaWYgKCF0aGlz
Ll9uYW1lQ29udGV4dC5pc0RlZmluZWQodHlwZSkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiSWxsZWdhbCBmb3J3YXJkIHVz
ZSBvZiB0eXBlIG5hbWVkICIgKyBub2RlLm5hbWUpOwogICAgICAgICAgICAgbm9kZS50eXBlID0g
dHlwZTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIzMCw3ICsyMTYsNiBAQCBjbGFzcyBOYW1l
UmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICB2aXNpdFJlZmVyZW5jZVR5cGUobm9kZSkK
ICAgICB7CiAgICAgICAgIGxldCBuYW1lQ29udGV4dCA9IG5ldyBOYW1lQ29udGV4dCh0aGlzLl9u
YW1lQ29udGV4dCk7Ci0gICAgICAgIG5hbWVDb250ZXh0LmRlZmluZUFsbCgpOwogICAgICAgICBu
b2RlLmVsZW1lbnRUeXBlLnZpc2l0KG5ldyBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpKTsKICAg
ICB9CiAgICAgCkBAIC0yNTgsNiArMjQzLDI4IEBAIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRz
IFZpc2l0b3IgewogICAgICAgICBzdXBlci52aXNpdFJldHVybihub2RlKTsKICAgICB9CiAgICAg
CisgICAgX2hhbmRsZVByb3BlcnR5QWNjZXNzKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnBv
c3NpYmxlR2V0T3ZlcmxvYWRzID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KEZ1bmMsIG5vZGUuZ2V0
RnVuY05hbWUpOworICAgICAgICBub2RlLnBvc3NpYmxlU2V0T3ZlcmxvYWRzID0gdGhpcy5fbmFt
ZUNvbnRleHQuZ2V0KEZ1bmMsIG5vZGUuc2V0RnVuY05hbWUpOworICAgICAgICBub2RlLnBvc3Np
YmxlQW5kT3ZlcmxvYWRzID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KEZ1bmMsIG5vZGUuYW5kRnVu
Y05hbWUpOworCisgICAgICAgIGlmICghbm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkcyAmJiAhbm9k
ZS5wb3NzaWJsZUFuZE92ZXJsb2FkcykKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9y
KG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkNhbm5vdCBmaW5kIGVpdGhlciAiICsgbm9kZS5n
ZXRGdW5jTmFtZSArICIgb3IgIiArIG5vZGUuYW5kRnVuY05hbWUpOworICAgIH0KKyAgICAKKyAg
ICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2hhbmRsZVBy
b3BlcnR5QWNjZXNzKG5vZGUpOworICAgICAgICBzdXBlci52aXNpdERvdEV4cHJlc3Npb24obm9k
ZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAgewor
ICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzcyhub2RlKTsKKyAgICAgICAgc3VwZXIu
dmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSk7CisgICAgfQorICAgIAogICAgIHZpc2l0Q2FsbEV4
cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIHRoaXMuX3Jlc29sdmVUeXBlQXJndW1lbnRz
KG5vZGUudHlwZUFyZ3VtZW50cyk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9OYXRpdmVGdW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL05hdGl2ZUZ1bmMuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDEw
IEBAIGNsYXNzIE5hdGl2ZUZ1bmMgZXh0ZW5kcyBGdW5jIHsKICAgICB7CiAgICAgICAgIHN1cGVy
KG9yaWdpbiwgbmFtZSwgcmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnMsIHBhcmFtZXRlcnMsIGlz
Q2FzdCk7CiAgICAgICAgIHRoaXMuaXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMu
aW1wbGVtZW50YXRpb24gPSBudWxsOworICAgICAgICB0aGlzLmluc3RhbnRpYXRlSW1wbGVtZW50
YXRpb24gPSAoc3Vic3RpdHV0aW9uKSA9PiB7fTsKKyAgICAgICAgdGhpcy52aXNpdEltcGxlbWVu
dGF0aW9uRGF0YSA9IChpbXBsZW1lbnRhdGlvbkRhdGEsIHZpc2l0b3IpID0+IG51bGw7CisgICAg
ICAgIHRoaXMuZGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRhID0gaW1wbGVtZW50
YXRpb25EYXRhID0+IG51bGw7CiAgICAgfQogICAgIAogICAgIGdldCBpc05hdGl2ZSgpIHsgcmV0
dXJuIHRydWU7IH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1
bmNJbnN0YW5jZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9OYXRpdmVGdW5jSW5zdGFuY2UuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmNJbnN0YW5jZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjUsMTQgKzI1LDE2IEBACiAidXNlIHN0cmljdCI7CiAKIGNsYXNzIE5hdGl2ZUZ1bmNJbnN0
YW5jZSBleHRlbmRzIEZ1bmMgewotICAgIGNvbnN0cnVjdG9yKGZ1bmMsIHJldHVyblR5cGUsIHBh
cmFtZXRlcnMsIGlzQ2FzdCkKKyAgICBjb25zdHJ1Y3RvcihmdW5jLCByZXR1cm5UeXBlLCBwYXJh
bWV0ZXJzLCBpc0Nhc3QsIGltcGxlbWVudGF0aW9uRGF0YSkKICAgICB7CiAgICAgICAgIHN1cGVy
KGZ1bmMub3JpZ2luLCBmdW5jLm5hbWUsIHJldHVyblR5cGUsIFtdLCBwYXJhbWV0ZXJzLCBpc0Nh
c3QpOwogICAgICAgICB0aGlzLl9mdW5jID0gZnVuYzsKKyAgICAgICAgdGhpcy5faW1wbGVtZW50
YXRpb25EYXRhID0gaW1wbGVtZW50YXRpb25EYXRhOwogICAgIH0KICAgICAKICAgICBnZXQgZnVu
YygpIHsgcmV0dXJuIHRoaXMuX2Z1bmM7IH0KICAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiB0
cnVlOyB9CisgICAgZ2V0IGltcGxlbWVudGF0aW9uRGF0YSgpIHsgcmV0dXJuIHRoaXMuX2ltcGxl
bWVudGF0aW9uRGF0YTsgfQogCiAgICAgdG9EZWNsU3RyaW5nKCkKICAgICB7CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkg
KzMzLDE3IEBAIGNsYXNzIE5vZGUgewogICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSB2aXNpdEZ1
bmMuY2FsbCh2aXNpdG9yLCB0aGlzKTsKICAgICAgICAgaWYgKCJyZXR1cm5WYWx1ZSIgaW4gdmlz
aXRvcikKICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdmlzaXRvci5yZXR1cm5WYWx1ZTsKKyAg
ICAgICAgCiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9CiAgICAgCisgICAgc3Rh
dGljIHZpc2l0KG5vZGUsIHZpc2l0b3IpCisgICAgeworICAgICAgICBpZiAobm9kZSBpbnN0YW5j
ZW9mIE5vZGUpCisgICAgICAgICAgICByZXR1cm4gbm9kZS52aXNpdCh2aXNpdG9yKTsKKyAgICAg
ICAgcmV0dXJuIG5vZGU7CisgICAgfQorICAgIAogICAgIHVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4
dCwgb3RoZXIpCiAgICAgewogICAgICAgICBpZiAoIW90aGVyKQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05v
cm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJp
Y3QiOworCitjbGFzcyBOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyIGV4dGVuZHMgUmV3cml0ZXIg
eworICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1
cGVyLnZpc2l0RG90RXhwcmVzc2lvbihub2RlKS5yZXdyaXRlQWZ0ZXJDbG9uaW5nKCk7CisgICAg
fQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3VwZXIudmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkucmV3cml0ZUFmdGVyQ2xvbmlu
ZygpOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFy
c2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2Uu
anMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Bh
cnNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsMTcgKzE3MiwzNSBAQCBmdW5jdGlvbiBwYXJz
ZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1
bWVLaW5kKCJpZGVudGlmaWVyIikpCiAgICAgICAgICAgICByZXR1cm4gbmV3IFZhcmlhYmxlUmVm
KHRva2VuLCB0b2tlbi50ZXh0KTsKICAgICAgICAgaWYgKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQo
ImludExpdGVyYWwiKSkgewotICAgICAgICAgICAgbGV0IGludFZlcnNpb24gPSBNYXRoLmZsb29y
KCt0b2tlbi50ZXh0KTsKKyAgICAgICAgICAgIGxldCBpbnRWZXJzaW9uID0gKCt0b2tlbi50ZXh0
KSB8IDA7CiAgICAgICAgICAgICBpZiAoIiIgKyBpbnRWZXJzaW9uICE9PSB0b2tlbi50ZXh0KQot
ICAgICAgICAgICAgICAgIGxleGVyLmZhaWwoIkludGVnZXIgbGl0ZXJhbCBpcyBub3QgYW4gaW50
ZWdlciIpOworICAgICAgICAgICAgICAgIGxleGVyLmZhaWwoIkludGVnZXIgbGl0ZXJhbCBpcyBu
b3QgYW4gaW50ZWdlcjogIiArIHRva2VuLnRleHQpOwogICAgICAgICAgICAgcmV0dXJuIG5ldyBJ
bnRMaXRlcmFsKHRva2VuLCBpbnRWZXJzaW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAodG9r
ZW4gPSB0cnlDb25zdW1lS2luZCgidWludExpdGVyYWwiKSkgewogICAgICAgICAgICAgbGV0IHVp
bnRWZXJzaW9uID0gdG9rZW4udGV4dC5zdWJzdHIoMCwgdG9rZW4udGV4dC5sZW5ndGggLSAxKSA+
Pj4gMDsKICAgICAgICAgICAgIGlmICh1aW50VmVyc2lvbiArICJ1IiAhPT0gdG9rZW4udGV4dCkK
LSAgICAgICAgICAgICAgICBsZXhlci5mYWlsKCJJbnRlZ2VyIGxpdGVyYWwgaXMgbm90IDMyLWJp
dCB1bnNpZ25lZCBpbnRlZ2VyIik7CisgICAgICAgICAgICAgICAgbGV4ZXIuZmFpbCgiSW50ZWdl
ciBsaXRlcmFsIGlzIG5vdCAzMi1iaXQgdW5zaWduZWQgaW50ZWdlcjogIiArIHRva2VuLnRleHQp
OwogICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50TGl0ZXJhbCh0b2tlbiwgdWludFZlcnNpb24p
OwogICAgICAgICB9CisgICAgICAgIGlmICgodG9rZW4gPSB0cnlDb25zdW1lS2luZCgiaW50SGV4
TGl0ZXJhbCIpKQorICAgICAgICAgICAgfHwgKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQoInVpbnRI
ZXhMaXRlcmFsIikpKSB7CisgICAgICAgICAgICBsZXQgaGV4U3RyaW5nID0gdG9rZW4udGV4dC5z
dWJzdHIoMik7CisgICAgICAgICAgICBpZiAodG9rZW4ua2luZCA9PSAidWludEhleExpdGVyYWwi
KQorICAgICAgICAgICAgICAgIGhleFN0cmluZyA9IGhleFN0cmluZy5zdWJzdHIoMCwgaGV4U3Ry
aW5nLmxlbmd0aCAtIDEpOworICAgICAgICAgICAgaWYgKCFoZXhTdHJpbmcubGVuZ3RoKQorICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGhleCBsaXRlcmFsOiAiICsgdG9rZW4p
OworICAgICAgICAgICAgbGV0IGludFZlcnNpb24gPSBwYXJzZUludChoZXhTdHJpbmcsIDE2KTsK
KyAgICAgICAgICAgIGlmICh0b2tlbi5raW5kID09ICJpbnRIZXhMaXRlcmFsIikKKyAgICAgICAg
ICAgICAgICBpbnRWZXJzaW9uID0gaW50VmVyc2lvbiB8IDA7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgaW50VmVyc2lvbiA9IGludFZlcnNpb24gPj4+IDA7CisgICAgICAgICAg
ICBpZiAoaW50VmVyc2lvbi50b1N0cmluZygxNikgIT09IGhleFN0cmluZykKKyAgICAgICAgICAg
ICAgICBsZXhlci5mYWlsKCJIZXggaW50ZWdlciBsaXRlcmFsIGlzIG5vdCBhbiBpbnRlZ2VyOiAi
ICsgdG9rZW4udGV4dCk7CisgICAgICAgICAgICBpZiAodG9rZW4ua2luZCA9PSAiaW50SGV4TGl0
ZXJhbCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRMaXRlcmFsKHRva2VuLCBpbnRW
ZXJzaW9uKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgVWludExpdGVyYWwodG9rZW4sIGludFZl
cnNpb24gPj4+IDApOworICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWVL
aW5kKCJkb3VibGVMaXRlcmFsIikpCiAgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZUxpdGVy
YWwodG9rZW4sICt0b2tlbi50ZXh0KTsKICAgICAgICAgaWYgKHRva2VuID0gdHJ5Q29uc3VtZSgi
dHJ1ZSIsICJmYWxzZSIpKQpAQCAtMzIwLDEyICszMzgsMTQgQEAgZnVuY3Rpb24gcGFyc2UocHJv
Z3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAgICBjb25zdW1lKCIoIik7CiAgICAgICAgIGxl
dCBhcmd1bWVudExpc3QgPSBbXTsKICAgICAgICAgd2hpbGUgKCF0ZXN0KCIpIikpIHsKLSAgICAg
ICAgICAgIGFyZ3VtZW50TGlzdC5wdXNoKHBhcnNlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAg
IGxldCBhcmd1bWVudCA9IHBhcnNlUG9zc2libGVBc3NpZ25tZW50KCk7CisgICAgICAgICAgICBh
cmd1bWVudExpc3QucHVzaChhcmd1bWVudCk7CiAgICAgICAgICAgICBpZiAoIXRyeUNvbnN1bWUo
IiwiKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjb25zdW1l
KCIpIik7Ci0gICAgICAgIHJldHVybiBuZXcgQ2FsbEV4cHJlc3Npb24obmFtZSwgbmFtZS50ZXh0
LCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudExpc3QpOworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3
IENhbGxFeHByZXNzaW9uKG5hbWUsIG5hbWUudGV4dCwgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRM
aXN0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24g
aXNDYWxsRXhwcmVzc2lvbigpCkBAIC0zMzcsOSArMzU3LDkgQEAgZnVuY3Rpb24gcGFyc2UocHJv
Z3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAgICB9KTsKICAgICB9CiAgICAgCi0gICAgZnVu
Y3Rpb24gZW1pdEluY3JlbWVudCh0b2tlbiwgcHRyLCBleHRyYUFyZykKKyAgICBmdW5jdGlvbiBl
bWl0SW5jcmVtZW50KHRva2VuLCBvbGQsIGV4dHJhQXJnKQogICAgIHsKLSAgICAgICAgbGV0IGFy
Z3MgPSBbbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tlbiwgVmFyaWFibGVSZWYud3JhcChw
dHIpKV07CisgICAgICAgIGxldCBhcmdzID0gW29sZF07CiAgICAgICAgIGlmIChleHRyYUFyZykK
ICAgICAgICAgICAgIGFyZ3MucHVzaChleHRyYUFyZyk7CiAgICAgICAgIApAQCAtMzUwLDI3ICsz
NzAsMTUgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAg
ICBpZiAobmFtZSA9PSAib3BlcmF0b3IiKQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJ
bnZhbGlkIG5hbWU6ICIgKyBuYW1lKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBuZXcgQXNz
aWdubWVudCgKLSAgICAgICAgICAgIHRva2VuLAotICAgICAgICAgICAgbmV3IERlcmVmZXJlbmNl
RXhwcmVzc2lvbih0b2tlbiwgVmFyaWFibGVSZWYud3JhcChwdHIpKSwKLSAgICAgICAgICAgIG5l
dyBDYWxsRXhwcmVzc2lvbih0b2tlbiwgbmFtZSwgW10sIGFyZ3MpKTsKKyAgICAgICAgcmV0dXJu
IG5ldyBDYWxsRXhwcmVzc2lvbih0b2tlbiwgbmFtZSwgW10sIGFyZ3MpOwogICAgIH0KICAgICAK
ICAgICBmdW5jdGlvbiBmaW5pc2hQYXJzaW5nUG9zdEluY3JlbWVudCh0b2tlbiwgbGVmdCkKICAg
ICB7Ci0gICAgICAgIGxldCBwdHIgPSBuZXcgTGV0RXhwcmVzc2lvbih0b2tlbik7Ci0gICAgICAg
IHB0ci5hcmd1bWVudCA9IG5ldyBNYWtlUHRyRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7Ci0gICAg
ICAgIAotICAgICAgICBsZXQgb2xkVmFsdWUgPSBuZXcgTGV0RXhwcmVzc2lvbih0b2tlbik7Ci0g
ICAgICAgIG9sZFZhbHVlLmFyZ3VtZW50ID0gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tl
biwgVmFyaWFibGVSZWYud3JhcChwdHIpKTsKLSAgICAgICAgCi0gICAgICAgIHB0ci5ib2R5ID0g
b2xkVmFsdWU7Ci0gICAgICAgIAotICAgICAgICBvbGRWYWx1ZS5ib2R5ID0gbmV3IENvbW1hRXhw
cmVzc2lvbih0b2tlbiwgWwotICAgICAgICAgICAgZW1pdEluY3JlbWVudCh0b2tlbiwgcHRyKSwK
LSAgICAgICAgICAgIFZhcmlhYmxlUmVmLndyYXAob2xkVmFsdWUpCi0gICAgICAgIF0pOwotICAg
ICAgICByZXR1cm4gcHRyOworICAgICAgICBsZXQgcmVhZE1vZGlmeVdyaXRlID0gbmV3IFJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24odG9rZW4sIGxlZnQpOworICAgICAgICByZWFkTW9kaWZ5V3Jp
dGUubmV3VmFsdWVFeHAgPSBlbWl0SW5jcmVtZW50KHRva2VuLCByZWFkTW9kaWZ5V3JpdGUub2xk
VmFsdWVSZWYoKSk7CisgICAgICAgIHJlYWRNb2RpZnlXcml0ZS5yZXN1bHRFeHAgPSByZWFkTW9k
aWZ5V3JpdGUub2xkVmFsdWVSZWYoKTsKKyAgICAgICAgcmV0dXJuIHJlYWRNb2RpZnlXcml0ZTsK
ICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24gcGFyc2VQb3NzaWJsZVN1ZmZpeCgpCkBAIC0zOTUs
OSArNDAzLDcgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAg
ICAgICAgICAgY2FzZSAiWyI6IHsKICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBwYXJzZUV4
cHJlc3Npb24oKTsKICAgICAgICAgICAgICAgICBjb25zdW1lKCJdIik7Ci0gICAgICAgICAgICAg
ICAgbGVmdCA9IG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24oCi0gICAgICAgICAgICAgICAgICAg
IHRva2VuLAotICAgICAgICAgICAgICAgICAgICBuZXcgQ2FsbEV4cHJlc3Npb24odG9rZW4sICJv
cGVyYXRvciZbXSIsIFtdLCBbbGVmdCwgaW5kZXhdKSk7CisgICAgICAgICAgICAgICAgbGVmdCA9
IG5ldyBJbmRleEV4cHJlc3Npb24odG9rZW4sIGxlZnQsIGluZGV4KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC00MDksMTMg
KzQxNSwxMCBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAg
CiAgICAgZnVuY3Rpb24gZmluaXNoUGFyc2luZ1ByZUluY3JlbWVudCh0b2tlbiwgbGVmdCwgZXh0
cmFBcmcpCiAgICAgewotICAgICAgICBsZXQgcHRyID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4p
OwotICAgICAgICBwdHIuYXJndW1lbnQgPSBuZXcgTWFrZVB0ckV4cHJlc3Npb24odG9rZW4sIGxl
ZnQpOwotICAgICAgICBwdHIuYm9keSA9IG5ldyBDb21tYUV4cHJlc3Npb24odG9rZW4sIFsKLSAg
ICAgICAgICAgIGVtaXRJbmNyZW1lbnQodG9rZW4sIHB0ciwgZXh0cmFBcmcpLAotICAgICAgICAg
ICAgbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tlbiwgVmFyaWFibGVSZWYud3JhcChwdHIp
KQotICAgICAgICBdKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKKyAgICAgICAgbGV0IHJlYWRNb2Rp
ZnlXcml0ZSA9IG5ldyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKHRva2VuLCBsZWZ0KTsKKyAg
ICAgICAgcmVhZE1vZGlmeVdyaXRlLm5ld1ZhbHVlRXhwID0gZW1pdEluY3JlbWVudCh0b2tlbiwg
cmVhZE1vZGlmeVdyaXRlLm9sZFZhbHVlUmVmKCksIGV4dHJhQXJnKTsKKyAgICAgICAgcmVhZE1v
ZGlmeVdyaXRlLnJlc3VsdEV4cCA9IHJlYWRNb2RpZnlXcml0ZS5uZXdWYWx1ZVJlZigpOworICAg
ICAgICByZXR1cm4gcmVhZE1vZGlmeVdyaXRlOwogICAgIH0KICAgICAKICAgICBmdW5jdGlvbiBw
YXJzZVByZUluY3JlbWVudCgpCkBAIC01NzUsNiArNTc4LDEwIEBAIGZ1bmN0aW9uIHBhcnNlKHBy
b2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxpc3Qu
cHVzaChlZmZlY3RmdWxFeHByZXNzaW9uKTsKICAgICAgICAgfQorICAgICAgICBpZiAoIWxpc3Qu
bGVuZ3RoKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggc2hvdWxkIG5ldmVy
IGJlIHplcm8iKTsKKyAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09IDEpCisgICAgICAgICAgICBy
ZXR1cm4gbGlzdFswXTsKICAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Npb24ob3JpZ2lu
LCBsaXN0KTsKICAgICB9CiAgICAgCkBAIC03NjEsMTUgKzc2OCwzMCBAQCBmdW5jdGlvbiBwYXJz
ZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgZnVuY3Rpb24gcGFyc2VGdW5jTmFtZSgp
CiAgICAgewogICAgICAgICBpZiAodHJ5Q29uc3VtZSgib3BlcmF0b3IiKSkgewotICAgICAgICAg
ICAgbGV0IHRva2VuID0gdHJ5Q29uc3VtZSgiKyIsICItIiwgIioiLCAiLyIsICIlIiwgIl4iLCAi
JiIsICJ8IiwgIjwiLCAiPiIsICI8PSIsICI+PSIsICI9PSIsICIrKyIsICItLSIsICImIik7Ci0g
ICAgICAgICAgICBpZiAodG9rZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4udGV4dCAh
PSAiJiIgfHwgIXRyeUNvbnN1bWUoIlsiKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJv
cGVyYXRvciIgKyB0b2tlbi50ZXh0OworICAgICAgICAgICAgbGV0IHRva2VuID0gY29uc3VtZSgi
KyIsICItIiwgIioiLCAiLyIsICIlIiwgIl4iLCAiJiIsICJ8IiwgIjwiLCAiPiIsICI8PSIsICI+
PSIsICI9PSIsICIrKyIsICItLSIsICImIiwgIi4iLCAifiIsICI8PCIsICI+PiIsICJbIik7Cisg
ICAgICAgICAgICBpZiAodG9rZW4udGV4dCA9PSAiJiIpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dHJ5Q29uc3VtZSgiWyIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIl0iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciZbXSI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICh0cnlDb25zdW1lKCIuIikpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAib3BlcmF0b3ImLiIgKyBjb25zdW1lS2luZCgiaWRlbnRpZmllciIpLnRleHQ7
CisgICAgICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciYiOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHRva2VuLnRleHQgPT0gIi4iKSB7CisgICAgICAgICAgICAgICAgbGV0IHJl
c3VsdCA9ICJvcGVyYXRvci4iICsgY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKS50ZXh0OworICAg
ICAgICAgICAgICAgIGlmICh0cnlDb25zdW1lKCI9IikpCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCArPSAiPSI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh0b2tlbi50ZXh0ID09ICJbIikgewogICAgICAgICAgICAgICAg
IGNvbnN1bWUoIl0iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9yJltdIjsKKyAg
ICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gIm9wZXJhdG9yW10iOworICAgICAgICAgICAgICAg
IGlmICh0cnlDb25zdW1lKCI9IikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPSI7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGxldCBuYW1lID0gY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKTsKLSAgICAgICAgICAgIHJl
dHVybiAib3BlcmF0b3IgIiArIG5hbWU7CisgICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9yIiAr
IHRva2VuLnRleHQ7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvbnN1bWVLaW5kKCJpZGVu
dGlmaWVyIikudGV4dDsKICAgICB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9QcmVwYXJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1ByZXBhcmUuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1ByZXBhcmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIwICsyNywzNiBAQAogZnVu
Y3Rpb24gcHJlcGFyZShvcmlnaW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpCiB7CiAgICAgbGV0
IHByb2dyYW0gPSBuZXcgUHJvZ3JhbSgpOworICAgIAogICAgIHBhcnNlKHByb2dyYW0sICIvaW50
ZXJuYWwvc3RkbGliIiwgIm5hdGl2ZSIsIDI3LCBzdGFuZGFyZExpYnJhcnkpOwogICAgIHBhcnNl
KHByb2dyYW0sIG9yaWdpbiwgInVzZXIiLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KTsKLSAgICBy
ZXNvbHZlTmFtZXMocHJvZ3JhbSk7Ci0gICAgcmVzb2x2ZVR5cGVEZWZzKHByb2dyYW0pOworICAg
IAorICAgIGxldCBuYW1lUmVzb2x2ZXIgPSBjcmVhdGVOYW1lUmVzb2x2ZXIocHJvZ3JhbSk7Cisg
ICAgcmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIHJlc29s
dmVOYW1lc0luUHJvdG9jb2xzKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CisgICAgcmVzb2x2ZVR5
cGVEZWZzSW5UeXBlcyhwcm9ncmFtKTsKKyAgICByZXNvbHZlVHlwZURlZnNJblByb3RvY29scyhw
cm9ncmFtKTsKKyAgICAvLyBGSVhNRTogTmVlZCB0byB2ZXJpZnkgdGhhdCBzdHJ1Y3RyZSBhcmUg
bm90IGN5Y2xpYy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc3MDQ0CisgICAgc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycyhwcm9ncmFtKTsKKyAgICBy
ZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIHJlc29s
dmVUeXBlRGVmc0luRnVuY3Rpb25zKHByb2dyYW0pOworICAgIAogICAgIGZsYXR0ZW5Qcm90b2Nv
bEV4dGVuZHMocHJvZ3JhbSk7CiAgICAgY2hlY2socHJvZ3JhbSk7CiAgICAgY2hlY2tMaXRlcmFs
VHlwZXMocHJvZ3JhbSk7CisgICAgcmVzb2x2ZVByb3BlcnRpZXMocHJvZ3JhbSk7CisgICAgZmlu
ZEhpZ2hab21iaWVzKHByb2dyYW0pOworICAgIGNoZWNrTGl0ZXJhbFR5cGVzKHByb2dyYW0pOwog
ICAgIGNoZWNrUHJvZ3JhbVdyYXBwZWQocHJvZ3JhbSk7CiAgICAgY2hlY2tSZXR1cm5zKHByb2dy
YW0pOwogICAgIGNoZWNrVW5yZWFjaGFibGVDb2RlKHByb2dyYW0pOwogICAgIGNoZWNrTG9vcHMo
cHJvZ3JhbSk7CiAgICAgY2hlY2tSZWN1cnNpb24ocHJvZ3JhbSk7CiAgICAgY2hlY2tQcm9ncmFt
V3JhcHBlZChwcm9ncmFtKTsKKyAgICBmaW5kSGlnaFpvbWJpZXMocHJvZ3JhbSk7CiAgICAgaW5s
aW5lKHByb2dyYW0pOworICAgIAogICAgIHJldHVybiBwcm9ncmFtOwogfQogCkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9ncmFtLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanMJKHJldmlzaW9uIDIyMjEyMykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanMJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDEwIEBAIGNsYXNzIFByb2dyYW0gZXh0ZW5kcyBOb2RlIHsKICAgICAgICAg
dGhpcy5fdHlwZXMgPSBuZXcgTWFwKCk7CiAgICAgICAgIHRoaXMuX3Byb3RvY29scyA9IG5ldyBN
YXAoKTsKICAgICAgICAgdGhpcy5fZnVuY0luc3RhbnRpYXRvciA9IG5ldyBGdW5jSW5zdGFudGlh
dG9yKHRoaXMpOworICAgICAgICB0aGlzLl9nbG9iYWxOYW1lQ29udGV4dCA9IG5ldyBOYW1lQ29u
dGV4dCgpOworICAgICAgICB0aGlzLl9nbG9iYWxOYW1lQ29udGV4dC5wcm9ncmFtID0gdGhpczsK
KyAgICAgICAgdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQucmVjb2duaXplSW50cmluc2ljcygpOwor
ICAgICAgICB0aGlzLmludHJpbnNpY3MgPSB0aGlzLl9nbG9iYWxOYW1lQ29udGV4dC5pbnRyaW5z
aWNzOwogICAgIH0KICAgICAKICAgICBnZXQgdG9wTGV2ZWxTdGF0ZW1lbnRzKCkgeyByZXR1cm4g
dGhpcy5fdG9wTGV2ZWxTdGF0ZW1lbnRzOyB9CkBAIC00MCw2ICs0NCw3IEBAIGNsYXNzIFByb2dy
YW0gZXh0ZW5kcyBOb2RlIHsKICAgICBnZXQgdHlwZXMoKSB7IHJldHVybiB0aGlzLl90eXBlczsg
fQogICAgIGdldCBwcm90b2NvbHMoKSB7IHJldHVybiB0aGlzLl9wcm90b2NvbHM7IH0KICAgICBn
ZXQgZnVuY0luc3RhbnRpYXRvcigpIHsgcmV0dXJuIHRoaXMuX2Z1bmNJbnN0YW50aWF0b3I7IH0K
KyAgICBnZXQgZ2xvYmFsTmFtZUNvbnRleHQoKSB7IHJldHVybiB0aGlzLl9nbG9iYWxOYW1lQ29u
dGV4dDsgfQogICAgIAogICAgIGFkZChzdGF0ZW1lbnQpCiAgICAgewpAQCAtNTIsMTAgKzU3LDEx
IEBAIGNsYXNzIFByb2dyYW0gZXh0ZW5kcyBOb2RlIHsKICAgICAgICAgfSBlbHNlIGlmIChzdGF0
ZW1lbnQgaW5zdGFuY2VvZiBUeXBlKQogICAgICAgICAgICAgdGhpcy5fdHlwZXMuc2V0KHN0YXRl
bWVudC5uYW1lLCBzdGF0ZW1lbnQpOwogICAgICAgICBlbHNlIGlmIChzdGF0ZW1lbnQgaW5zdGFu
Y2VvZiBQcm90b2NvbCkKLSAgICAgICAgICAgIHRoaXMuX3Byb3RvY29scy5zZXQoc3RhdGVtZW50
LmFkZCwgc3RhdGVtZW50KTsKKyAgICAgICAgICAgIHRoaXMuX3Byb3RvY29scy5zZXQoc3RhdGVt
ZW50Lm5hbWUsIHN0YXRlbWVudCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiU3RhdGVtZW50IGlzIG5vdCBhIGZ1bmN0aW9uIG9yIHR5cGU6ICIgKyBzdGF0ZW1l
bnQpOwogICAgICAgICB0aGlzLl90b3BMZXZlbFN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpOwor
ICAgICAgICB0aGlzLl9nbG9iYWxOYW1lQ29udGV4dC5hZGQoc3RhdGVtZW50KTsKICAgICB9CiAg
ICAgCiAgICAgdG9TdHJpbmcoKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcwkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBQcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKKyAgICBjb25zdHJ1Y3Rvcihv
cmlnaW4sIGJhc2UpCisgICAgeworICAgICAgICBzdXBlcihvcmlnaW4pOworICAgICAgICB0aGlz
LmJhc2UgPSBiYXNlOworICAgIH0KKyAgICAKKyAgICBnZXQgcmVzdWx0VHlwZSgpIHsgcmV0dXJu
IHRoaXMucmVzdWx0VHlwZUZvckdldCA/IHRoaXMucmVzdWx0VHlwZUZvckdldCA6IHRoaXMucmVz
dWx0VHlwZUZvckFuZDsgfQorICAgIAorICAgIHJld3JpdGVBZnRlckNsb25pbmcoKQorICAgIHsK
KyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgbm9kZS5iYXNlLmlzTFZhbHVlIHdpbGwgb25seSBy
ZXR1cm4gdHJ1ZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGdldCBhIHBvaW50ZXIgdG8gaXQsCisgICAg
ICAgIC8vIHNpbmNlIHdlIHdpbGwgbm8gbG9uZ2VyIHNlZSBhbnkgRG90RXhwcmVzc2lvbnMgb3Ig
SW5kZXhFeHByZXNzaW9ucy4gQWxzbywgbm9kZSBpcyBhIG5ld2x5IGNyZWF0ZWQKKyAgICAgICAg
Ly8gbm9kZSBhbmQgZXZlcnl0aGluZyBiZW5lYXRoIGl0IGlzIG5ld2x5IGNyZWF0ZWQsIHNvIHdl
IGNhbiBlZGl0IGl0IGluLXBsYWNlLgorICAgICAgICAKKyAgICAgICAgaWYgKCh0aGlzLmJhc2Uu
aXNMVmFsdWUgfHwgdGhpcy5iYXNlVHlwZS5pc1JlZikgJiYgdGhpcy5jYWxsRm9yQW5kKQorICAg
ICAgICAgICAgcmV0dXJuIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odGhpcy5vcmlnaW4sIHRo
aXMuY2FsbEZvckFuZCwgdGhpcy5yZXN1bHRUeXBlLCB0aGlzLmNhbGxGb3JBbmQucmVzdWx0VHlw
ZS5hZGRyZXNzU3BhY2UpOworICAgICAgICAKKyAgICAgICAgaWYgKHRoaXMuY2FsbEZvckdldCkK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGxGb3JHZXQ7CisgICAgICAgIAorICAgICAgICBp
ZiAoIXRoaXMuY2FsbEZvckFuZCkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLm9y
aWdpbi5vcmlnaW5TdHJpbmcgKyAiOiBQcm9wZXJ0eSBhY2Nlc3Mgd2l0aG91dCBnZXR0ZXIgYW5k
IGFuZGVyOiAiICsgdGhpcyk7CisgICAgICAgIAorICAgICAgICBsZXQgYW5vblZhciA9IG5ldyBB
bm9ueW1vdXNWYXJpYWJsZSh0aGlzLm9yaWdpbiwgdGhpcy5iYXNlVHlwZSk7CisgICAgICAgIHRo
aXMuY2FsbEZvckFuZC5hcmd1bWVudExpc3RbMF0gPSB0aGlzLmJhc2VUeXBlLnVuaWZ5Tm9kZS5h
cmd1bWVudEZvckFuZE92ZXJsb2FkKHRoaXMub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKGFub25W
YXIpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Npb24odGhpcy5vcmlnaW4sIFsK
KyAgICAgICAgICAgIGFub25WYXIsCisgICAgICAgICAgICBuZXcgQXNzaWdubWVudCh0aGlzLm9y
aWdpbiwgVmFyaWFibGVSZWYud3JhcChhbm9uVmFyKSwgdGhpcy5iYXNlLCB0aGlzLmJhc2VUeXBl
KSwKKyAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odGhpcy5vcmlnaW4sIHRo
aXMuY2FsbEZvckFuZCwgdGhpcy5yZXN1bHRUeXBlLCB0aGlzLmNhbGxGb3JBbmQucmVzdWx0VHlw
ZS5hZGRyZXNzU3BhY2UpCisgICAgICAgIF0pOworICAgIH0KKyAgICAKKyAgICB1cGRhdGVDYWxs
cygpCisgICAgeworICAgICAgICBpZiAodGhpcy5jYWxsRm9yR2V0KQorICAgICAgICAgICAgdGhp
cy5jYWxsRm9yR2V0LmFyZ3VtZW50TGlzdFswXSA9IHRoaXMuYmFzZTsKKyAgICAgICAgaWYgKHRo
aXMuY2FsbEZvckFuZCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvckFuZC5hcmd1bWVudExpc3Rb
MF0gPSB0aGlzLmJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQodGhpcy5vcmlnaW4sIHRo
aXMuYmFzZSk7CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JTZXQpCisgICAgICAgICAgICB0aGlz
LmNhbGxGb3JTZXQuYXJndW1lbnRMaXN0WzBdID0gdGhpcy5iYXNlOworICAgIH0KKyAgICAKKyAg
ICBlbWl0R2V0KGJhc2UpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy52aXNpdChu
ZXcgUmV3cml0ZXIoKSk7CisgICAgICAgIHJlc3VsdC5iYXNlID0gYmFzZTsKKyAgICAgICAgcmVz
dWx0LnVwZGF0ZUNhbGxzKCk7CisgICAgICAgIHJldHVybiByZXN1bHQucmV3cml0ZUFmdGVyQ2xv
bmluZygpOworICAgIH0KKyAgICAKKyAgICBlbWl0U2V0KGJhc2UsIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbGV0IHJlc3VsdCA9IHRoaXMudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICBp
ZiAoIXJlc3VsdC5jYWxsRm9yU2V0KQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Io
dGhpcy5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGVtaXQgc2V0IGJlY2F1c2U6ICIgKyB0
aGlzLmVycm9yRm9yU2V0LnR5cGVFcnJvck1lc3NhZ2UpOworICAgICAgICByZXN1bHQuYmFzZSA9
IGJhc2U7CisgICAgICAgIHJlc3VsdC51cGRhdGVDYWxscygpOworICAgICAgICByZXN1bHQuY2Fs
bEZvclNldC5hcmd1bWVudExpc3RbcmVzdWx0LmNhbGxGb3JTZXQuYXJndW1lbnRMaXN0Lmxlbmd0
aCAtIDFdID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQuY2FsbEZvclNldDsKKyAgICB9
Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5UmVzb2x2
ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVy
dHlSZXNvbHZlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Qcm9wZXJ0eVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmlj
dCI7CisKK2NsYXNzIFByb3BlcnR5UmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBfdmlz
aXRSVmFsdWVzV2l0aGluTFZhbHVlKG5vZGUpCisgICAgeworICAgICAgICBsZXQgdmlzaXQgPSBu
b2RlID0+IG5vZGUudmlzaXQodGhpcyk7CisgICAgICAgIAorICAgICAgICBjbGFzcyBSVmFsdWVG
aW5kZXIgeworICAgICAgICAgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9kZS5hcnJheS52aXNpdCh0aGlzKTsK
KyAgICAgICAgICAgICAgICB2aXNpdChub2RlLmluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB2aXNpdERlcmVmZXJl
bmNlRXhwcmVzc2lvbihub2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZpc2l0
KG5vZGUucHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmlz
aXRJZGVudGl0eUV4cHJlc3Npb24obm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBub2RlLnRhcmdldC52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgbm9kZS52aXNpdChuZXcgUlZhbHVlRmluZGVyKCkpOworICAgIH0KKyAg
ICAKKyAgICBfdmlzaXRQcm9wZXJ0eUFjY2Vzcyhub2RlKQorICAgIHsKKyAgICAgICAgbGV0IG5l
d05vZGUgPSBub2RlLnZpc2l0KG5ldyBOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyKCkpOworICAg
ICAgICBuZXdOb2RlLnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLmJlY29tZShuZXdOb2RlKTsK
KyAgICB9CisgICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAg
ICB0aGlzLl92aXNpdFByb3BlcnR5QWNjZXNzKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNp
dEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fdmlzaXRQcm9wZXJ0
eUFjY2Vzcyhub2RlKTsKKyAgICB9CisgICAgCisgICAgX2hhbmRsZVJlYWRNb2RpZnlXcml0ZShu
b2RlKQorICAgIHsKKyAgICAgICAgbGV0IHR5cGUgPSBub2RlLm9sZFZhbHVlVmFyLnR5cGU7Cisg
ICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCB0eXBl
Iik7CisgICAgICAgIGxldCBzaW1wbGVMSFMgPSBub2RlLmxWYWx1ZS52aXNpdChuZXcgTm9ybWFs
VXNlUHJvcGVydHlSZXNvbHZlcigpKTsKKyAgICAgICAgaWYgKHNpbXBsZUxIUy5pc0xWYWx1ZSkg
eworICAgICAgICAgICAgaWYgKCFzaW1wbGVMSFMuYWRkcmVzc1NwYWNlKQorICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiOiBMSFMgd2l0
aG91dCBhZGRyZXNzIHNwYWNlOiAiICsgc2ltcGxlTEhTKTsKKyAgICAgICAgICAgIGxldCBwdHJU
eXBlID0gbmV3IFB0clR5cGUobm9kZS5vcmlnaW4sIHNpbXBsZUxIUy5hZGRyZXNzU3BhY2UsIHR5
cGUpOworICAgICAgICAgICAgbGV0IHB0clZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2Rl
Lm9yaWdpbiwgcHRyVHlwZSk7CisgICAgICAgICAgICBub2RlLmJlY29tZShuZXcgQ29tbWFFeHBy
ZXNzaW9uKG5vZGUub3JpZ2luLCBbCisgICAgICAgICAgICAgICAgbm9kZS5vbGRWYWx1ZVZhciwg
bm9kZS5uZXdWYWx1ZVZhciwgcHRyVmFyLAorICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50
KAorICAgICAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChwdHJW
YXIpLAorICAgICAgICAgICAgICAgICAgICBuZXcgTWFrZVB0ckV4cHJlc3Npb24obm9kZS5vcmln
aW4sIHNpbXBsZUxIUyksIHB0clR5cGUpLAorICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50
KAorICAgICAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5vbGRWYWx1ZVJlZigpLAor
ICAgICAgICAgICAgICAgICAgICBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKAorICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAocHRyVmFyKSwgdHlw
ZSwgc2ltcGxlTEhTLmFkZHJlc3NTcGFjZSksCisgICAgICAgICAgICAgICAgICAgIHR5cGUpLAor
ICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2RlLm5ld1ZhbHVl
UmVmKCksIG5vZGUubmV3VmFsdWVFeHAsIHR5cGUpLAorICAgICAgICAgICAgICAgIG5ldyBBc3Np
Z25tZW50KAorICAgICAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwKKyAgICAgICAgICAgICAg
ICAgICAgbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbigKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHB0clZhciksIHR5cGUsIHNpbXBsZUxIUy5h
ZGRyZXNzU3BhY2UpLAorICAgICAgICAgICAgICAgICAgICBub2RlLm5ld1ZhbHVlUmVmKCksIHR5
cGUpLAorICAgICAgICAgICAgICAgIG5vZGUucmVzdWx0RXhwCisgICAgICAgICAgICBdKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxldCByZXN1
bHQgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5sVmFs
dWUuYmFzZSwgbm9kZS5sVmFsdWUuYmFzZVR5cGUpOworICAgICAgICByZXN1bHQubmV3VmFsdWVF
eHAgPSBuZXcgQ29tbWFFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBbCisgICAgICAgICAgICBub2Rl
Lm9sZFZhbHVlVmFyLCBub2RlLm5ld1ZhbHVlVmFyLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1l
bnQobm9kZS5vcmlnaW4sIG5vZGUub2xkVmFsdWVSZWYoKSwgbm9kZS5sVmFsdWUuZW1pdEdldChy
ZXN1bHQub2xkVmFsdWVSZWYoKSksIHR5cGUpLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQo
bm9kZS5vcmlnaW4sIG5vZGUubmV3VmFsdWVSZWYoKSwgbm9kZS5uZXdWYWx1ZUV4cCwgdHlwZSks
CisgICAgICAgICAgICBub2RlLmxWYWx1ZS5lbWl0U2V0KHJlc3VsdC5vbGRWYWx1ZVJlZigpLCBu
b2RlLm5ld1ZhbHVlUmVmKCkpCisgICAgICAgIF0pOworICAgICAgICByZXN1bHQucmVzdWx0RXhw
ID0gbm9kZS5uZXdWYWx1ZVJlZigpOworICAgICAgICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3Jp
dGUocmVzdWx0KTsKKyAgICAgICAgbm9kZS5iZWNvbWUocmVzdWx0KTsKKyAgICB9CisgICAgCisg
ICAgdmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBu
b2RlLm5ld1ZhbHVlRXhwLnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLnJlc3VsdEV4cC52aXNp
dCh0aGlzKTsKKyAgICAgICAgdGhpcy5fdmlzaXRSVmFsdWVzV2l0aGluTFZhbHVlKG5vZGUubFZh
bHVlKTsKKyAgICAgICAgdGhpcy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKG5vZGUpOworICAgIH0K
KyAgICAKKyAgICB2aXNpdEFzc2lnbm1lbnQobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Zp
c2l0UlZhbHVlc1dpdGhpbkxWYWx1ZShub2RlLmxocyk7CisgICAgICAgIG5vZGUucmhzLnZpc2l0
KHRoaXMpOworICAgICAgICAKKyAgICAgICAgbGV0IHNpbXBsZUxIUyA9IG5vZGUubGhzLnZpc2l0
KG5ldyBOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyKCkpOworICAgICAgICBpZiAoc2ltcGxlTEhT
LmlzTFZhbHVlKSB7CisgICAgICAgICAgICBub2RlLmxocy5iZWNvbWUoc2ltcGxlTEhTKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCEobm9k
ZS5saHMgaW5zdGFuY2VvZiBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pKQorICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGxocyB0eXBlOiAiICsgbm9kZS5saHMuY29uc3Ry
dWN0b3IubmFtZSk7CisgICAgICAgIAorICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubGhzLmJhc2UsIG5vZGUubGhzLmJh
c2VUeXBlKTsKKyAgICAgICAgbGV0IHJlc3VsdFZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShu
b2RlLm9yaWdpbiwgbm9kZS50eXBlKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlRXhwID0gbmV3
IENvbW1hRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgWworICAgICAgICAgICAgcmVzdWx0VmFyLAor
ICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAo
cmVzdWx0VmFyKSwgbm9kZS5yaHMsIG5vZGUudHlwZSksCisgICAgICAgICAgICBub2RlLmxocy5l
bWl0U2V0KHJlc3VsdC5vbGRWYWx1ZVJlZigpLCBWYXJpYWJsZVJlZi53cmFwKHJlc3VsdFZhcikp
CisgICAgICAgIF0pOworICAgICAgICByZXN1bHQucmVzdWx0RXhwID0gVmFyaWFibGVSZWYud3Jh
cChyZXN1bHRWYXIpOworICAgICAgICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUocmVzdWx0
KTsKKyAgICAgICAgbm9kZS5iZWNvbWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdmlzaXRN
YWtlUHRyRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXRNYWtlUHRy
RXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgaWYgKCFub2RlLmxWYWx1ZS5pc0xWYWx1ZSkKKyAg
ICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywg
Ik5vdCBhbiBsdmFsdWU6ICIgKyBub2RlLmxWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0
TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXRN
YWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpOworICAgICAgICBpZiAoIW5vZGUubFZhbHVlLmlz
TFZhbHVlKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3Jp
Z2luU3RyaW5nLCAiTm90IGFuIGx2YWx1ZTogIiArIG5vZGUubFZhbHVlKTsKKyAgICB9Cit9CisK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3RvY29sRGVjbC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanMJ
KHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3Rv
Y29sRGVjbC5qcwkod29ya2luZyBjb3B5KQpAQCAtOTcsMTYgKzk3LDE2IEBAIGNsYXNzIFByb3Rv
Y29sRGVjbCBleHRlbmRzIFByb3RvY29sIHsKICAgICB7CiAgICAgICAgIGxldCBzdWJzdGl0dXRp
b24gPSBuZXcgU3Vic3RpdHV0aW9uKFt0aGlzLl90eXBlVmFyaWFibGVdLCBbdHlwZV0pOwogICAg
ICAgICBsZXQgc2lnbmF0dXJlcyA9IHRoaXMuc2lnbmF0dXJlczsKLSAgICAgICAgZm9yIChsZXQg
c2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIHsKLSAgICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25h
dHVyZS52aXNpdChzdWJzdGl0dXRpb24pOwotICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gcmVz
b2x2ZU92ZXJsb2FkSW1wbChzaWduYXR1cmUucG9zc2libGVPdmVybG9hZHMsIHNpZ25hdHVyZS50
eXBlUGFyYW1ldGVycywgc2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzLCBzaWduYXR1cmUucmV0dXJu
VHl1cGVGb3JPdmVybG9hZFJlc29sdXRpb24pOworICAgICAgICBmb3IgKGxldCBvcmlnaW5hbFNp
Z25hdHVyZSBvZiBzaWduYXR1cmVzKSB7CisgICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gb3Jp
Z2luYWxTaWduYXR1cmUudmlzaXQoc3Vic3RpdHV0aW9uKTsKKyAgICAgICAgICAgIGxldCBvdmVy
bG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlLnBvc3NpYmxlT3ZlcmxvYWRzLCBz
aWduYXR1cmUudHlwZVBhcmFtZXRlcnMsIHNpZ25hdHVyZS5wYXJhbWV0ZXJUeXBlcywgc2lnbmF0
dXJlLnJldHVyblR5cGVGb3JPdmVybG9hZFJlc29sdXRpb24pOwogICAgICAgICAgICAgaWYgKCFv
dmVybG9hZC5mdW5jKQotICAgICAgICAgICAgICAgIHJldHVybiB7cmVzdWx0OiBmYWxzZSwgcmVh
c29uOiAiRGlkIG5vdCBmaW5kIG1hdGNoaW5nIHNpZ25hdHVyZSBmb3IgIiArIHNpZ25hdHVyZSAr
ICIgd2l0aCB0eXBlICIgKyB0eXBlICsgKG92ZXJsb2FkLmZhaWx1cmVzLmxlbmd0aCA/ICIgKHRy
aWVkOiAiICsgb3ZlcmxvYWQuZmFpbHVyZXMuam9pbigiOyAiKSArICIpIiA6ICIiKX07CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHtyZXN1bHQ6IGZhbHNlLCByZWFzb246ICJEaWQgbm90IGZpbmQg
bWF0Y2hpbmcgc2lnbmF0dXJlIGZvciAiICsgb3JpZ2luYWxTaWduYXR1cmUgKyAiIChhdCAiICsg
b3JpZ2luYWxTaWduYXR1cmUub3JpZ2luLm9yaWdpblN0cmluZyArICIpIHdpdGggdHlwZSAiICsg
dHlwZSArIChvdmVybG9hZC5mYWlsdXJlcy5sZW5ndGggPyAiICh0cmllZDogIiArIG92ZXJsb2Fk
LmZhaWx1cmVzLmpvaW4oIjsgIikgKyAiKSIgOiAiIil9OwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBsZXQgc3Vic3RpdHV0ZWRSZXR1cm5UeXBlID0gb3ZlcmxvYWQuZnVuYy5yZXR1cm5UeXBl
LnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAogICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZ1bmMu
dHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0aW9uQ29udGV4dCk7CiAgICAgICAgICAg
ICBpZiAoIXN1YnN0aXR1dGVkUmV0dXJuVHlwZS5lcXVhbHMoc2lnbmF0dXJlLnJldHVyblR5cGUp
KQotICAgICAgICAgICAgICAgIHJldHVybiB7cmVzdWx0OiBmYWxzZSwgcmVhc29uOiAiUmV0dXJu
IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAiICsgc2lnbmF0dXJlLnJldHVyblR5cGUgKyAiIGFuZCAi
ICsgc3Vic3RpdHV0ZWRSZXR1cm5UeXBlfTsKKyAgICAgICAgICAgICAgICByZXR1cm4ge3Jlc3Vs
dDogZmFsc2UsIHJlYXNvbjogIkF0IHNpZ25hdHVyZSAiICsgb3JpZ2luYWxTaWduYXR1cmUgKyAi
IChhdCAiICsgb3JpZ2luYWxTaWduYXR1cmUub3JpZ2luLm9yaWdpblN0cmluZyArICIpOiByZXR1
cm4gdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICIgKyBzaWduYXR1cmUucmV0dXJuVHlwZSArICIgYW5k
ICIgKyBzdWJzdGl0dXRlZFJldHVyblR5cGUgKyAiIGluIGZvdW5kIGZ1bmN0aW9uICIgKyBvdmVy
bG9hZC5mdW5jLnRvRGVjbFN0cmluZygpfTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4ge3Jl
c3VsdDogdHJ1ZX07CiAgICAgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHRyVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Q
dHJUeXBlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9QdHJUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxOSBAQCBjbGFzcyBQ
dHJUeXBlIGV4dGVuZHMgUmVmZXJlbmNlVHlwZSB7CiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1l
bnRUeXBlLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIuZWxlbWVudFR5cGUpOwogICAg
IH0KICAgICAKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAg
eworICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9p
bnRlciBzdWJzY3JpcHQgaXMgbm90IHZhbGlkIik7CisgICAgfQorICAgIGFyZ3VtZW50VHlwZUZv
ckFuZE92ZXJsb2FkKG9yaWdpbiwgdHlwZSkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJQb2ludGVyIHN1YnNjcmlwdCBpcyBub3QgdmFs
aWQiKTsKKyAgICB9CisgICAgcmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChvcmlnaW4pCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZTsKKyAgICB9CisKICAgICB0b1N0cmlu
ZygpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZSArICJeICIgKyB0aGlz
LmFkZHJlc3NTcGFjZTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcwkobm9uZXhpc3RlbnQpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgUmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9y
aWdpbiwgbFZhbHVlLCB0eXBlID0gbnVsbCkKKyAgICB7CisgICAgICAgIHN1cGVyKG9yaWdpbik7
CisgICAgICAgIHRoaXMuX2xWYWx1ZSA9IGxWYWx1ZTsKKyAgICAgICAgdGhpcy5vbGRWYWx1ZVZh
ciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShvcmlnaW4sIHR5cGUpOworICAgICAgICB0aGlzLm5l
d1ZhbHVlVmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG9yaWdpbiwgdHlwZSk7CisgICAgICAg
IHRoaXMubmV3VmFsdWVFeHAgPSBudWxsOworICAgICAgICB0aGlzLnJlc3VsdEV4cCA9IG51bGw7
CisgICAgfQorICAgIAorICAgIGdldCBsVmFsdWUoKSB7IHJldHVybiB0aGlzLl9sVmFsdWU7IH0K
KyAgICAKKyAgICBvbGRWYWx1ZVJlZigpIHsgcmV0dXJuIFZhcmlhYmxlUmVmLndyYXAodGhpcy5v
bGRWYWx1ZVZhcik7IH0KKyAgICBuZXdWYWx1ZVJlZigpIHsgcmV0dXJuIFZhcmlhYmxlUmVmLndy
YXAodGhpcy5uZXdWYWx1ZVZhcik7IH0KKyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAg
ICAgICByZXR1cm4gIlJNVygiICsgdGhpcy5sVmFsdWUgKyAiLCAiICsgdGhpcy5vbGRWYWx1ZVZh
ciArICIsICIgKyB0aGlzLm5ld1ZhbHVlVmFyICsgIiwgIiArIHRoaXMubmV3VmFsdWVFeHAgKyAi
LCAiICsgdGhpcy5yZXN1bHRFeHAgKyAiKSI7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU5hbWVzLmpzCShyZXZpc2lvbiAyMjIxMjMp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMuanMJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDcgKzI0LDI4IEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotZnVuY3Rp
b24gcmVzb2x2ZU5hbWVzKHByb2dyYW0pCitmdW5jdGlvbiBjcmVhdGVOYW1lUmVzb2x2ZXIocHJv
Z3JhbSkKIHsKLSAgICBwcm9ncmFtLnZpc2l0KG5ldyBOYW1lUmVzb2x2ZXIoKSk7CisgICAgcmV0
dXJuIG5ldyBOYW1lUmVzb2x2ZXIocHJvZ3JhbS5nbG9iYWxOYW1lQ29udGV4dCk7CiB9CisKK2Z1
bmN0aW9uIHJlc29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKQoreworICAg
IGZvciAobGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkKKyAgICAgICAgbmFtZVJl
c29sdmVyLmRvU3RhdGVtZW50KHR5cGUpOworfQorCitmdW5jdGlvbiByZXNvbHZlTmFtZXNJblBy
b3RvY29scyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChsZXQgcHJvdG9jb2wg
b2YgcHJvZ3JhbS5wcm90b2NvbHMudmFsdWVzKCkpCisgICAgICAgIG5hbWVSZXNvbHZlci5kb1N0
YXRlbWVudChwcm90b2NvbCk7Cit9CisKK2Z1bmN0aW9uIHJlc29sdmVOYW1lc0luRnVuY3Rpb25z
KHByb2dyYW0sIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGxldCBmdW5jcyBvZiBwcm9ncmFt
LmZ1bmN0aW9ucy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmNzKQor
ICAgICAgICAgICAgbmFtZVJlc29sdmVyLmRvU3RhdGVtZW50KGZ1bmMpOworICAgIH0KK30KKwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlT3Zl
cmxvYWRJbXBsLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9SZXNvbHZlT3ZlcmxvYWRJbXBsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw5IEBACiAKIGZ1bmN0aW9uIHJlc29sdmVPdmVybG9hZEltcGwoZnVuY3Rpb25zLCB0eXBlQXJn
dW1lbnRzLCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQogeworICAgIGlmICghZnVuY3Rpb25z
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgZnVuY3Rpb25zOyB0aGF0IHNob3VsZCBo
YXZlIGJlZW4gY2F1Z2h0IGJ5IHRoZSBjYWxsZXIuIik7CisgICAgCiAgICAgbGV0IGZhaWx1cmVz
ID0gW107CiAgICAgbGV0IHN1Y2Nlc3NlcyA9IFtdOwogICAgIGZvciAobGV0IGZ1bmMgb2YgZnVu
Y3Rpb25zKSB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJv
cGVydGllcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9S
ZXNvbHZlUHJvcGVydGllcy5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNl
IHN0cmljdCI7CisKKy8vIFRoaXMgdHVybnMgRG90RXhwcmVzc2lvbiBhbmQgSW5kZXhFeHByZXNz
aW9uIGludG8gY2FsbHMgdG8gZ2V0dGVycyAob3BlcmF0b3IuZmllbGQgYW5kIG9wZXJhdG9yW10p
LAorLy8gc2V0dGVycyAob3BlcmF0b3IuZmllbGQ9IGFuZCBvcGVyYXRvcltdPSksIGFuZCBhbmRl
cnMgKG9wZXJhdG9yJi5maWVsZCBhbmQgb3BlcmF0b3ImW10pLiBUaGlzIGludm9sdmVzCisvLyB0
cmFuc2Zvcm1pbmcgYXNzaWdubWVudHMgYW5kIFJNVydzIHRvIGRvIGx2YWx1ZSBlbXVsYXRpb24u
CitmdW5jdGlvbiByZXNvbHZlUHJvcGVydGllcyhwcm9ncmFtKQoreworICAgIHByb2dyYW0udmlz
aXQobmV3IFByb3BlcnR5UmVzb2x2ZXIoKSk7Cit9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9SZXNvbHZlVHlwZURlZnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVR5cGVEZWZzLmpzCShyZXZpc2lvbiAyMjIxMjMpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlVHlwZURlZnMuanMJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDggKzI0LDI2IEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotZnVuY3Rp
b24gcmVzb2x2ZVR5cGVEZWZzKHByb2dyYW0pCitmdW5jdGlvbiByZXNvbHZlVHlwZURlZnNJblR5
cGVzKHByb2dyYW0pCiB7Ci0gICAgcHJvZ3JhbS52aXNpdChuZXcgVHlwZURlZlJlc29sdmVyKCkp
OworICAgIGxldCByZXNvbHZlciA9IG5ldyBUeXBlRGVmUmVzb2x2ZXIoKTsKKyAgICBmb3IgKGxl
dCB0eXBlIG9mIHByb2dyYW0udHlwZXMudmFsdWVzKCkpCisgICAgICAgIHR5cGUudmlzaXQocmVz
b2x2ZXIpOworfQorCitmdW5jdGlvbiByZXNvbHZlVHlwZURlZnNJblByb3RvY29scyhwcm9ncmFt
KQoreworICAgIGxldCByZXNvbHZlciA9IG5ldyBUeXBlRGVmUmVzb2x2ZXIoKTsKKyAgICBmb3Ig
KGxldCBwcm90b2NvbCBvZiBwcm9ncmFtLnByb3RvY29scy52YWx1ZXMoKSkKKyAgICAgICAgcHJv
dG9jb2wudmlzaXQocmVzb2x2ZXIpOworfQorCitmdW5jdGlvbiByZXNvbHZlVHlwZURlZnNJbkZ1
bmN0aW9ucyhwcm9ncmFtKQoreworICAgIGxldCByZXNvbHZlciA9IG5ldyBUeXBlRGVmUmVzb2x2
ZXIoKTsKKyAgICBmb3IgKGxldCBmdW5jcyBvZiBwcm9ncmFtLmZ1bmN0aW9ucy52YWx1ZXMoKSkg
eworICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmNzKQorICAgICAgICAgICAgZnVuYy52aXNp
dChyZXNvbHZlcik7CisgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9SZXR1cm5DaGVja2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDcgKzc2LDcgQEAgY2xhc3MgUmV0dXJuQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogCiAg
ICAgX2lzQm9vbENhc3RGcm9tTGl0ZXJhbFRydWUobm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBub2RlLmlzQ2FzdCAmJiBub2RlLnJldHVyblR5cGUgaW5zdGFuY2VvZiBUeXBlUmVmICYmIG5v
ZGUucmV0dXJuVHlwZS5lcXVhbHModGhpcy5fcHJvZ3JhbS5pbnRyaW5zaWNzLmJvb2wpICYmIG5v
ZGUuYXJndW1lbnRMaXN0Lmxlbmd0aCA9PSAxICYmIG5vZGUuYXJndW1lbnRMaXN0WzBdLmxpc3Qu
bGVuZ3RoID09IDEgJiYgbm9kZS5hcmd1bWVudExpc3RbMF0ubGlzdFswXSBpbnN0YW5jZW9mIEJv
b2xMaXRlcmFsICYmIG5vZGUuYXJndW1lbnRMaXN0WzBdLmxpc3RbMF0udmFsdWU7CisgICAgICAg
IHJldHVybiBub2RlLmlzQ2FzdCAmJiBub2RlLnJldHVyblR5cGUgaW5zdGFuY2VvZiBUeXBlUmVm
ICYmIG5vZGUucmV0dXJuVHlwZS5lcXVhbHModGhpcy5fcHJvZ3JhbS5pbnRyaW5zaWNzLmJvb2wp
ICYmIG5vZGUuYXJndW1lbnRMaXN0Lmxlbmd0aCA9PSAxICYmIG5vZGUuYXJndW1lbnRMaXN0WzBd
IGluc3RhbmNlb2YgQm9vbExpdGVyYWwgJiYgbm9kZS5hcmd1bWVudExpc3RbMF0udmFsdWU7CiAg
ICAgfQogCiAgICAgdmlzaXRXaGlsZUxvb3Aobm9kZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAg
KzI3LDkgQEAKIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoYXZlIHNlbnNpYmxlIGJlaGF2aW9yIHdo
ZW4gaXQgZW5jb3VudGVycyBkZWZpbml0aW9ucyB0aGF0IGl0IGNhbm5vdCBoYW5kbGUuIFJpZ2h0
CiAvLyBub3cgd2UgYXJlIGhhY2tpc2hseSBwcmV2ZW50aW5nIHRoaXMgYnkgd3JhcHBpbmcgdGhp
bmdzIGluIFR5cGVSZWYuIFRoYXQncyBwcm9iYWJseSB3cm9uZy4KIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYyMDgKLWNsYXNzIFJld3JpdGVyIGV4dGVuZHMg
VmlzaXRvckJhc2UgeworY2xhc3MgUmV3cml0ZXIgewogICAgIGNvbnN0cnVjdG9yKCkKICAgICB7
Ci0gICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX21hcHBpbmcgPSBuZXcgTWFwKCk7CiAg
ICAgfQogICAgIApAQCAtNzMsNyArNzIsOCBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0
b3JCYXNlIHsKICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm5hbWUsCiAgICAgICAgICAg
ICBub2RlLnJldHVyblR5cGUudmlzaXQodGhpcyksCiAgICAgICAgICAgICBub2RlLnR5cGVQYXJh
bWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMpKSwKLSAgICAgICAg
ICAgIG5vZGUucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdCh0aGlz
KSkpOworICAgICAgICAgICAgbm9kZS5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1l
dGVyLnZpc2l0KHRoaXMpKSwKKyAgICAgICAgICAgIG5vZGUuaXNDYXN0KTsKICAgICAgICAgcmVz
dWx0LnByb3RvY29sRGVjbCA9IG5vZGUucHJvdG9jb2xEZWNsOwogICAgICAgICByZXN1bHQucG9z
c2libGVPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtOTksNyArOTksNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JC
YXNlIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYXJpYWJsZURlY2woCiAgICAgICAgICAg
ICBub2RlLm9yaWdpbiwgbm9kZS5uYW1lLAogICAgICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRo
aXMpLAotICAgICAgICAgICAgbm9kZS5pbml0aWFsaXplciA/IG5vZGUuaW5pdGlhbGl6ZXIudmlz
aXQodGhpcykgOiBudWxsKTsKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbml0aWFsaXpl
ciwgdGhpcykpOwogICAgICAgICB0aGlzLl9tYXBOb2RlKG5vZGUsIHJlc3VsdCk7CiAgICAgICAg
IHJlc3VsdC5lUHRyID0gbm9kZS5lUHRyOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTMx
LDcgKzEzMSw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZp
c2l0VHlwZVJlZihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUeXBlUmVm
KG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3Vt
ZW50ID0+IHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKSkpOwotICAgICAgICByZXN1bHQudHlwZSA9
IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3Vs
dC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KICAgICAKQEAgLTE2MywyNCArMTYzLDU0IEBAIGNsYXNzIFJld3JpdGVyIGV4
dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0QXNzaWdubWVudChub2RlKQogICAgIHsKICAg
ICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2RlLmxocy52
aXNpdCh0aGlzKSwgbm9kZS5yaHMudmlzaXQodGhpcykpOwotICAgICAgICByZXN1bHQudHlwZSA9
IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3Vs
dC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9k
ZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbihub2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUudmlzaXQodGhpcykpOworICAgICAgICByZXN1
bHQub2xkVmFsdWVWYXIgPSBub2RlLm9sZFZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAgICBy
ZXN1bHQubmV3VmFsdWVWYXIgPSBub2RlLm5ld1ZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAg
ICByZXN1bHQubmV3VmFsdWVFeHAgPSBub2RlLm5ld1ZhbHVlRXhwLnZpc2l0KHRoaXMpOworICAg
ICAgICByZXN1bHQucmVzdWx0RXhwID0gbm9kZS5yZXN1bHRFeHAudmlzaXQodGhpcyk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIHZpc2l0RGVyZWZlcmVuY2VFeHBy
ZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IERlcmVmZXJlbmNl
RXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5wdHIudmlzaXQodGhpcykpOwotICAgICAgICBy
ZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7Cisg
ICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOworICAgICAg
ICByZXN1bHQuYWRkcmVzc1NwYWNlID0gbm9kZS5hZGRyZXNzU3BhY2U7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIF9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24ocmVzdWx0LCBub2RlKQorICAgIHsKKyAgICAgICAgcmVzdWx0LnBvc3NpYmxlR2V0T3Zlcmxv
YWRzID0gbm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkczsKKyAgICAgICAgcmVzdWx0LnBvc3NpYmxl
U2V0T3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkczsKKyAgICAgICAgcmVzdWx0
LnBvc3NpYmxlQW5kT3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZUFuZE92ZXJsb2FkczsKKyAgICAg
ICAgcmVzdWx0LmJhc2VUeXBlID0gTm9kZS52aXNpdChub2RlLmJhc2VUeXBlLCB0aGlzKTsKKyAg
ICAgICAgcmVzdWx0LmNhbGxGb3JHZXQgPSBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvckdldCwgdGhp
cyk7CisgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlRm9yR2V0ID0gTm9kZS52aXNpdChub2RlLnJl
c3VsdFR5cGVGb3JHZXQsIHRoaXMpOworICAgICAgICByZXN1bHQuY2FsbEZvckFuZCA9IE5vZGUu
dmlzaXQobm9kZS5jYWxsRm9yQW5kLCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGVG
b3JBbmQgPSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckFuZCwgdGhpcyk7CisgICAgICAg
IHJlc3VsdC5jYWxsRm9yU2V0ID0gTm9kZS52aXNpdChub2RlLmNhbGxGb3JTZXQsIHRoaXMpOwor
ICAgICAgICByZXN1bHQuZXJyb3JGb3JTZXQgPSBub2RlLmVycm9yRm9yU2V0OworICAgICAgICBy
ZXN1bHQudXBkYXRlQ2FsbHMoKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXREb3RFeHByZXNzaW9u
KG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IERvdEV4cHJlc3Npb24obm9k
ZS5vcmlnaW4sIG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpLCBub2RlLmZpZWxkTmFtZSk7Ci0gICAg
ICAgIHJlc3VsdC5zdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3RUeXBlID8gbm9kZS5zdHJ1Y3RUeXBl
LnZpc2l0KHRoaXMpIDogbnVsbDsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXdyaXRl
IGZpZWxkLCBzaW5jZSB0aGlzIGlzIGEgZGVlcCByZWZlcmVuY2UgZ29pbmcgb3V0IG9mIHRoZSBm
dW5jdGlvbi4KLSAgICAgICAgLy8gQWxzbywgdGhpcyBpcyBzZXQgdXAgZHVyaW5nIGlubGluaW5n
LCBzbyB3ZSdyZSBhbHJlYWR5IGZ1bGx5IG1vbm9tb3JwaGlzZWQuCi0gICAgICAgIHJlc3VsdC5m
aWVsZCA9IG5vZGUuZmllbGQ7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbihyZXN1bHQsIG5vZGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJl
c3VsdCA9IG5ldyBJbmRleEV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJyYXkudmlzaXQo
dGhpcyksIG5vZGUuaW5kZXgudmlzaXQodGhpcykpOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24ocmVzdWx0LCBub2RlKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgCkBAIC0yMTYsNyArMjQ2LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5k
cyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRSZXR1cm4obm9kZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBuZXcgUmV0dXJuKG5vZGUub3JpZ2luLCBub2RlLnZhbHVlID8gbm9kZS52YWx1
ZS52aXNpdCh0aGlzKSA6IG51bGwpOworICAgICAgICByZXR1cm4gbmV3IFJldHVybihub2RlLm9y
aWdpbiwgTm9kZS52aXNpdChub2RlLnZhbHVlLCB0aGlzKSk7CiAgICAgfQogICAgIAogICAgIHZp
c2l0Q29udGludWUobm9kZSkKQEAgLTI0MCw3ICsyNzAsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRl
bmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdEdlbmVyaWNMaXRlcmFsVHlwZShub2RlKQogICAg
IHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBub2RlLmNvbnN0cnVjdG9yKG5vZGUub3JpZ2lu
LCBub2RlLnZhbHVlKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5
cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlzaXQo
bm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgcmVzdWx0LnByZWZlcnJlZFR5cGUgPSBub2RlLnBy
ZWZlcnJlZFR5cGUudmlzaXQodGhpcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpA
QCAtMjYxLDcgKzI5MSw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2Ugewog
ICAgIHZpc2l0TnVsbFR5cGUobm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcg
TnVsbFR5cGUobm9kZS5vcmlnaW4pOwotICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/
IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3VsdC50eXBlID0gTm9k
ZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IApAQCAtMjgwLDcgKzMxMCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2Ug
ewogICAgICAgICByZXN1bHQucG9zc2libGVPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlT3Zlcmxv
YWRzOwogICAgICAgICBpZiAobm9kZS5pc0Nhc3QpCiAgICAgICAgICAgICByZXN1bHQuc2V0Q2Fz
dERhdGEobm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpKTsKLSAgICAgICAgcmVzdWx0LnJlc3Vs
dFR5cGUgPSBub2RlLnJlc3VsdFR5cGUgPyBub2RlLnJlc3VsdFR5cGUudmlzaXQodGhpcykgOiBu
dWxsOworICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IE5vZGUudmlzaXQobm9kZS5yZXN1bHRU
eXBlLCB0aGlzKTsKICAgICAgICAgcmVzdWx0LnJlc3VsdEVQdHIgPSBub2RlLnJlc3VsdEVQdHI7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjkwLDcgKzMyMCw3IEBAIGNsYXNz
IFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3
IENhbGxFeHByZXNzaW9uKAogICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUubmFtZSwKICAg
ICAgICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3VtZW50ID0+IHR5cGVBcmd1
bWVudC52aXNpdCh0aGlzKSksCi0gICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdC5tYXAoYXJn
dW1lbnQgPT4gYXJndW1lbnQudmlzaXQodGhpcykpKTsKKyAgICAgICAgICAgIG5vZGUuYXJndW1l
bnRMaXN0Lm1hcChhcmd1bWVudCA9PiBOb2RlLnZpc2l0KGFyZ3VtZW50LCB0aGlzKSkpOwogICAg
ICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGVyaXZlZENhbGxEYXRhKG5vZGUsIHJlc3VsdCk7CiAg
ICAgfQogICAgIApAQCAtMjk4LDcgKzMyOCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlz
aXRvckJhc2UgewogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBGdW5jdGlvbkxpa2VC
bG9jaygKICAgICAgICAgICAgIG5vZGUub3JpZ2luLAotICAgICAgICAgICAgbm9kZS5yZXR1cm5U
eXBlID8gbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpIDogbnVsbCwKKyAgICAgICAgICAgIE5v
ZGUudmlzaXQobm9kZS5yZXR1cm5UeXBlLCB0aGlzKSwKICAgICAgICAgICAgIG5vZGUuYXJndW1l
bnRMaXN0Lm1hcChhcmd1bWVudCA9PiBhcmd1bWVudC52aXNpdCh0aGlzKSksCiAgICAgICAgICAg
ICBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQodGhpcykp
LAogICAgICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsKQEAgLTMxNSw3ICszNDUsNyBA
QCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKIAogICAgIHZpc2l0SWZTdGF0
ZW1lbnQobm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgSWZTdGF0ZW1lbnQobm9kZS5v
cmlnaW4sIG5vZGUuY29uZGl0aW9uYWwudmlzaXQodGhpcyksIG5vZGUuYm9keS52aXNpdCh0aGlz
KSwgbm9kZS5lbHNlQm9keSA/IG5vZGUuZWxzZUJvZHkudmlzaXQodGhpcykgOiB1bmRlZmluZWQp
OworICAgICAgICByZXR1cm4gbmV3IElmU3RhdGVtZW50KG5vZGUub3JpZ2luLCBub2RlLmNvbmRp
dGlvbmFsLnZpc2l0KHRoaXMpLCBub2RlLmJvZHkudmlzaXQodGhpcyksIE5vZGUudmlzaXQobm9k
ZS5lbHNlQm9keSwgdGhpcykpOwogICAgIH0KIAogICAgIHZpc2l0V2hpbGVMb29wKG5vZGUpCkBA
IC0zMzEsMjIgKzM2MSwyNCBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
ICAgICB2aXNpdEZvckxvb3Aobm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgRm9yTG9v
cChub2RlLm9yaWdpbiwKLSAgICAgICAgICAgIG5vZGUuaW5pdGlhbGl6YXRpb24gPyBub2RlLmlu
aXRpYWxpemF0aW9uLnZpc2l0KHRoaXMpIDogdW5kZWZpbmVkLAotICAgICAgICAgICAgbm9kZS5j
b25kaXRpb24gPyBub2RlLmNvbmRpdGlvbi52aXNpdCh0aGlzKSA6IHVuZGVmaW5lZCwKLSAgICAg
ICAgICAgIG5vZGUuaW5jcmVtZW50ID8gbm9kZS5pbmNyZW1lbnQudmlzaXQodGhpcykgOiB1bmRl
ZmluZWQsCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5pdGlhbGl6YXRpb24sIHRoaXMp
LAorICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLmNvbmRpdGlvbiwgdGhpcyksCisgICAgICAg
ICAgICBOb2RlLnZpc2l0KG5vZGUuaW5jcmVtZW50LCB0aGlzKSwKICAgICAgICAgICAgIG5vZGUu
Ym9keS52aXNpdCh0aGlzKSk7CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihu
b2RlKQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAgICAgIGxl
dCByZXN1bHQgPSBuZXcgTGV0RXhwcmVzc2lvbihub2RlLm9yaWdpbik7Ci0gICAgICAgIHJlc3Vs
dC5pbmRleCA9IG5vZGUuaW5kZXg7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8g
bm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKLSAgICAgICAgcmVzdWx0LmFyZ3VtZW50ID0g
bm9kZS5hcmd1bWVudC52aXNpdCh0aGlzKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBbm9u
eW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwgbm9kZS50eXBlLnZpc2l0KHRoaXMpKTsKKyAgICAg
ICAgcmVzdWx0Ll9pbmRleCA9IG5vZGUuX2luZGV4OwogICAgICAgICB0aGlzLl9tYXBOb2RlKG5v
ZGUsIHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdC5ib2R5ID0gbm9kZS5ib2R5LnZpc2l0KHRoaXMp
OwogICAgICAgICByZXN1bHQuZVB0ciA9IG5vZGUuZVB0cjsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CisgICAgCisgICAgdmlzaXRJZGVudGl0eUV4cHJlc3Npb24obm9kZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgSWRlbnRpdHlFeHByZXNzaW9uKG5vZGUudGFyZ2V0LnZpc2l0
KHRoaXMpKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0YW5kYXJkTGlicmFyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwkod29ya2luZyBjb3B5KQpA
QCAtNTYsNiArNTYsMTggQEAgbmF0aXZlIGludCBvcGVyYXRvciooaW50LCBpbnQpOwogbmF0aXZl
IHVpbnQgb3BlcmF0b3IqKHVpbnQsIHVpbnQpOwogbmF0aXZlIGludCBvcGVyYXRvci8oaW50LCBp
bnQpOwogbmF0aXZlIHVpbnQgb3BlcmF0b3IvKHVpbnQsIHVpbnQpOworbmF0aXZlIGludCBvcGVy
YXRvciYoaW50LCBpbnQpOworbmF0aXZlIGludCBvcGVyYXRvcnwoaW50LCBpbnQpOworbmF0aXZl
IGludCBvcGVyYXRvcl4oaW50LCBpbnQpOworbmF0aXZlIGludCBvcGVyYXRvcn4oaW50KTsKK25h
dGl2ZSBpbnQgb3BlcmF0b3I8PChpbnQsIHVpbnQpOworbmF0aXZlIGludCBvcGVyYXRvcj4+KGlu
dCwgdWludCk7CituYXRpdmUgdWludCBvcGVyYXRvciYodWludCwgdWludCk7CituYXRpdmUgdWlu
dCBvcGVyYXRvcnwodWludCwgdWludCk7CituYXRpdmUgdWludCBvcGVyYXRvcl4odWludCwgdWlu
dCk7CituYXRpdmUgdWludCBvcGVyYXRvcn4odWludCk7CituYXRpdmUgdWludCBvcGVyYXRvcjw8
KHVpbnQsIHVpbnQpOworbmF0aXZlIHVpbnQgb3BlcmF0b3I+Pih1aW50LCB1aW50KTsKIG5hdGl2
ZSBib29sIG9wZXJhdG9yPT0oaW50LCBpbnQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I9PSh1aW50
LCB1aW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPT0oYm9vbCwgYm9vbCk7CkBAIC02OCw2ICs4
MCwzNSBAQCBuYXRpdmUgYm9vbCBvcGVyYXRvcj4odWludCwgdWludCk7CiBuYXRpdmUgYm9vbCBv
cGVyYXRvcj49KGludCwgaW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPj0odWludCwgdWludCk7
CiAKK2Jvb2wgb3BlcmF0b3ImKGJvb2wgYSwgYm9vbCBiKQoreworICAgIGlmIChhKQorICAgICAg
ICByZXR1cm4gYjsKKyAgICByZXR1cm4gZmFsc2U7Cit9Citib29sIG9wZXJhdG9yfChib29sIGEs
IGJvb2wgYikKK3sKKyAgICBpZiAoYSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGIp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KK2Jvb2wgb3BlcmF0
b3JeKGJvb2wgYSwgYm9vbCBiKQoreworICAgIGlmIChhKQorICAgICAgICByZXR1cm4gIWI7Cisg
ICAgcmV0dXJuIGI7Cit9Citib29sIG9wZXJhdG9yfihib29sIHZhbHVlKQoreworICAgIHJldHVy
biAhdmFsdWU7Cit9CisKK3Byb3RvY29sIEFkZGFibGUgeworICAgIEFkZGFibGUgb3BlcmF0b3Ir
KEFkZGFibGUsIEFkZGFibGUpOworfQorCiBwcm90b2NvbCBFcXVhdGFibGUgewogICAgIGJvb2wg
b3BlcmF0b3I9PShFcXVhdGFibGUsIEVxdWF0YWJsZSk7CiB9CkBAIC05Miw0ICsxMzMsMTQgQEAg
bmF0aXZlIHRocmVhZCBUXiBvcGVyYXRvciZbXTxUPih0aHJlYWQgVAogbmF0aXZlIHRocmVhZGdy
b3VwIFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPih0aHJlYWRncm91cCBUW10sIHVpbnQpOwog
bmF0aXZlIGRldmljZSBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4oZGV2aWNlIFRbXSwgdWlu
dCk7CiBuYXRpdmUgY29uc3RhbnQgVF4gb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KGNvbnN0YW50
IFRbXSwgdWludCk7CisKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUPih0aHJlYWQgVFtd
KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOnByaW1pdGl2ZT4odGhyZWFkZ3JvdXAg
VFtdKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOnByaW1pdGl2ZT4oZGV2aWNlIFRb
XSk7CituYXRpdmUgdWludCBvcGVyYXRvci5sZW5ndGg8VDpwcmltaXRpdmU+KGNvbnN0YW50IFRb
XSk7CisKK3VpbnQgb3BlcmF0b3IubGVuZ3RoPFQsIHVpbnQgbGVuZ3RoPihUW2xlbmd0aF0pCit7
CisgICAgcmV0dXJuIGxlbmd0aDsKK30KIGA7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIuanMJKHJldmlzaW9uIDIyMjEy
MykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIu
anMJKHdvcmtpbmcgY29weSkKQEAgLTU5LDUgKzU5LDExIEBAIGNsYXNzIFN0cnVjdExheW91dEJ1
aWxkZXIgZXh0ZW5kcyBWaXNpdG8KICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVHlwZSBk
b2VzIG5vdCBoYXZlIHNpemU6ICIgKyBub2RlLnR5cGUpOwogICAgICAgICB0aGlzLl9vZmZzZXQg
Kz0gc2l6ZTsKICAgICB9CisgICAgCisgICAgdmlzaXROYXRpdmVGdW5jSW5zdGFuY2Uobm9kZSkK
KyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKG5vZGUpOworICAg
ICAgICBub2RlLmZ1bmMuZGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRpb25EYXRhKG5vZGUu
aW1wbGVtZW50YXRpb25EYXRhKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkocmV2aXNpb24gMjIyMTIzKQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
NTcsMjEgKzU3LDI5IEBAIGNsYXNzIFN0cnVjdFR5cGUgZXh0ZW5kcyBUeXBlIHsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgaW5zdGFudGlhdGUodHlwZUFyZ3VtZW50
cywgbW9kZSkKKyAgICBpbnN0YW50aWF0ZSh0eXBlQXJndW1lbnRzID0gbnVsbCkKICAgICB7Ci0g
ICAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSB0aGlzLnR5cGVQYXJhbWV0ZXJzLmxl
bmd0aCkKLSAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJp
bmcsICJXcm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgdG8gaW5zdGFudGlhdGlvbiIpOwor
ICAgICAgICBsZXQgc3Vic3RpdHV0aW9uID0gbnVsbDsKKyAgICAgICAgbGV0IHR5cGVQYXJhbWV0
ZXJzID0gdGhpcy50eXBlUGFyYW1ldGVyczsKICAgICAgICAgCi0gICAgICAgIGlmICghdHlwZUFy
Z3VtZW50cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgaWYgKHR5
cGVBcmd1bWVudHMpIHsKKyAgICAgICAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSB0
aGlzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1l
bnRzIHRvIGluc3RhbnRpYXRpb24iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCF0
eXBlQXJndW1lbnRzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3Vic3RpdHV0aW9uID0gbmV3IFN1YnN0aXR1dGlvbih0aGlz
LnR5cGVQYXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKTsKKyAgICAgICAgICAgIHR5cGVQYXJhbWV0
ZXJzID0gW107CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGxldCBzdWJzdGl0dXRpb24g
PSBuZXcgU3Vic3RpdHV0aW9uKHRoaXMudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOwot
ICAgICAgICBsZXQgaW5zdGFudGlhdGVJbW1lZGlhdGVzID0gbW9kZSA9PSAic2hhbGxvdyIgPyBu
dWxsIDogbmV3IEluc3RhbnRpYXRlSW1tZWRpYXRlcygpOwotICAgICAgICBsZXQgcmVzdWx0ID0g
bmV3IFN0cnVjdFR5cGUodGhpcy5vcmlnaW4sIHRoaXMubmFtZSwgW10pOworICAgICAgICBsZXQg
aW5zdGFudGlhdGVJbW1lZGlhdGVzID0gbmV3IEluc3RhbnRpYXRlSW1tZWRpYXRlcygpOworICAg
ICAgICBsZXQgcmVzdWx0ID0gbmV3IFN0cnVjdFR5cGUodGhpcy5vcmlnaW4sIHRoaXMubmFtZSwg
dHlwZVBhcmFtZXRlcnMpOwogICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkcykg
ewotICAgICAgICAgICAgbGV0IG5ld0ZpZWxkID0gZmllbGQudmlzaXQoc3Vic3RpdHV0aW9uKTsK
LSAgICAgICAgICAgIGlmIChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpCi0gICAgICAgICAgICAgICAg
bmV3RmllbGQgPSBuZXdGaWVsZC52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpOworICAgICAg
ICAgICAgbGV0IG5ld0ZpZWxkID0gZmllbGQ7CisgICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9u
KQorICAgICAgICAgICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQudmlzaXQoc3Vic3RpdHV0aW9u
KTsKKyAgICAgICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQudmlzaXQoaW5zdGFudGlhdGVJbW1l
ZGlhdGVzKTsKICAgICAgICAgICAgIHJlc3VsdC5hZGQobmV3RmllbGQpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TdWJzdGl0dXRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3Vic3RpdHV0aW9uLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9TdWJzdGl0dXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYg
KzM1LDggQEAgY2xhc3MgU3Vic3RpdHV0aW9uIGV4dGVuZHMgUmV3cml0ZXIgewogICAgICAgICAg
ICAgdGhpcy5fbWFwLnNldChwYXJhbWV0ZXJzW2ldLCBhcmd1bWVudExpc3RbaV0pOwogICAgIH0K
ICAgICAKKyAgICBnZXQgbWFwKCkgeyByZXR1cm4gdGhpcy5fbWFwOyB9CisgICAgCiAgICAgdmlz
aXRUeXBlUmVmKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVwbGFjZW1lbnQgPSB0aGlzLl9t
YXAuZ2V0KG5vZGUudHlwZSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9T
dWZmaXhDYWxsQXNzaWdubWVudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TdWZmaXhDYWxsQXNzaWdubWVudC5qcwkocmV2aXNpb24gMjIyMTIzKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMJKG5v
bmV4aXN0ZW50KQpAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIFN1ZmZpeENhbGxBc3NpZ25t
ZW50IGV4dGVuZHMgRXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBuYW1lLCBs
aHMpCi0gICAgewotICAgICAgICBzdXBlcihvcmlnaW4pOwotICAgICAgICB0aGlzLl9uYW1lID0g
bmFtZTsKLSAgICAgICAgdGhpcy5fbGhzID0gbGhzOwotICAgICAgICB0aGlzLmZ1bmMgPSBudWxs
OwotICAgIH0KLSAgICAKLSAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KLSAg
ICBnZXQgbGhzKCkgeyByZXR1cm4gdGhpcy5fbGhzOyB9Ci0gICAgCi0gICAgdG9TdHJpbmcoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGhzICsgIiBzdWZmaXggIiArIHRoaXMubmFtZTsK
LSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwkobm9uZXhpc3RlbnQpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIHN5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSkKK3sKKyAgICBmb3IgKGxldCB0eXBlIG9mIHByb2dy
YW0udHlwZXMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCEodHlwZSBpbnN0YW5jZW9mIFN0cnVj
dFR5cGUpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBmb3IgKGxl
dCBmaWVsZCBvZiB0eXBlLmZpZWxkcykgeworICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlw
ZVBhcmFtZXRlcnMoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0eXBl
LnR5cGVQYXJhbWV0ZXJzLm1hcCgKKyAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlciA9
PiB0eXBlUGFyYW1ldGVyLnZpc2l0KG5ldyBUeXBlUGFyYW1ldGVyUmV3cml0ZXIoKSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBl
QXJndW1lbnRzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVBh
cmFtZXRlcnMubWFwKHR5cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFtZXRlci52aXNpdChuZXcgQXV0
b1dyYXBwZXIoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBm
dW5jdGlvbiBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCBpbXBsZW1lbnRhdGlv
bikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLmluc3RhbnRpYXRl
SW1wbGVtZW50YXRpb24gPSBzdWJzdGl0dXRpb24gPT4geworICAgICAgICAgICAgICAgICAgICBs
ZXQgbmV3VHlwZSA9IHR5cGUuaW5zdGFudGlhdGUobmF0aXZlRnVuYy50eXBlUGFyYW1ldGVycy5t
YXAodHlwZVBhcmFtZXRlciA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3Vic3Rp
dHV0ZSA9IHN1YnN0aXR1dGlvbi5tYXAuZ2V0KHR5cGVQYXJhbWV0ZXIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzdWJzdGl0dXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiTnVsbCBzdWJzdGl0dXRlIGZvciB0eXBlIHBhcmFtZXRlciAiICsg
dHlwZVBhcmFtZXRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0
ZTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
e3R5cGU6IG5ld1R5cGUsIGZpZWxkTmFtZTogZmllbGQubmFtZX07CisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLnZpc2l0SW1wbGVtZW50YXRpb25EYXRhID0g
KGltcGxlbWVudGF0aW9uRGF0YSwgdmlzaXRvcikgPT4geworICAgICAgICAgICAgICAgICAgICAv
LyBWaXNpdGluZyB0aGUgdHlwZSBmaXJzdCBlbnN1cmVzIHRoYXQgdGhlIHN0cnVjdCBsYXlvdXQg
YnVpbGRlciBmaWd1cmVzIG91dCB0aGUgZmllbGQncworICAgICAgICAgICAgICAgICAgICAvLyBv
ZmZzZXQuCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS50eXBlLnZpc2l0
KHZpc2l0b3IpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgbmF0aXZlRnVu
Yy5kaWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEgPSBpbXBsZW1lbnRhdGlvbkRh
dGEgPT4geworICAgICAgICAgICAgICAgICAgICBsZXQgc3RydWN0U2l6ZSA9IGltcGxlbWVudGF0
aW9uRGF0YS50eXBlLnNpemU7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3RTaXplID09
IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIHN0cnVj
dCBzaXplIGZvciAiICsgbmF0aXZlRnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGxldCBmaWVs
ZCA9IGltcGxlbWVudGF0aW9uRGF0YS50eXBlLmZpZWxkQnlOYW1lKGltcGxlbWVudGF0aW9uRGF0
YS5maWVsZE5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkKQorICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBmaWVsZCIpOwor
ICAgICAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gZmllbGQub2Zmc2V0OworICAgICAgICAg
ICAgICAgICAgICBsZXQgZmllbGRTaXplID0gZmllbGQudHlwZS5zaXplOworICAgICAgICAgICAg
ICAgICAgICBpZiAoZmllbGRTaXplID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIk5vIGZpZWxkIHNpemUgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJObyBvZmZzZXQgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5z
dHJ1Y3RTaXplID0gc3RydWN0U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRp
b25EYXRhLmZpZWxkU2l6ZSA9IGZpZWxkU2l6ZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIG5hdGl2ZUZ1bmMuaW1wbGVtZW50YXRpb24gPSAoYXJndW1lbnRMaXN0LCBub2Rl
KSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jSW5zdGFuY2UgPSBub2Rl
Lm5hdGl2ZUZ1bmNJbnN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGltcGxlbWVudGF0
aW9uRGF0YSA9IG5hdGl2ZUZ1bmNJbnN0YW5jZS5pbXBsZW1lbnRhdGlvbkRhdGE7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbigKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3VtZW50TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9u
RGF0YS5vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEu
c3RydWN0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5m
aWVsZFNpemUpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUZpZWxkVHlwZSgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGUudmlzaXQobmV3IFN1YnN0aXR1dGlv
bih0eXBlLnR5cGVQYXJhbWV0ZXJzLCB0eXBlUGFyYW1ldGVycykpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBlUmVmKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVHlwZVJlZi5pbnN0YW50aWF0ZSh0eXBl
LCBjcmVhdGVUeXBlQXJndW1lbnRzKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBsZXQgaXNDYXN0ID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgdHlwZVBhcmFt
ZXRlcnM7CisgICAgICAgICAgICBsZXQgbmF0aXZlRnVuYzsKKworICAgICAgICAgICAgLy8gVGhl
IGdldHRlcjogb3BlcmF0b3IuZmllbGQKKyAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzID0gY3Jl
YXRlVHlwZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZl
RnVuYygKKyAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQu
bmFtZSwgY3JlYXRlRmllbGRUeXBlKCksIHR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAg
IFtuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0ZVR5cGVSZWYoKSld
LCBpc0Nhc3QpOworICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVu
YywgKFtiYXNlXSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAg
ICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoZmllbGRTaXplKSwgMCk7
CisgICAgICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UucGx1cyhvZmZzZXQpLCBmaWVs
ZFNpemUpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBUaGUgc2V0dGVyOiBvcGVyYXRvci5maWVsZD0KKyAgICAgICAgICAgIHR5cGVQ
YXJhbWV0ZXJzID0gY3JlYXRlVHlwZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIG5hdGl2ZUZ1
bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVy
YXRvci4iICsgZmllbGQubmFtZSArICI9IiwgY3JlYXRlVHlwZVJlZigpLCB0eXBlUGFyYW1ldGVy
cywKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1l
dGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgY3JlYXRlVHlwZVJlZigpKSwKKyAgICAgICAgICAgICAg
ICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVGaWVsZFR5
cGUoKSkKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGlzQ2FzdCk7CisgICAg
ICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2UsIHZhbHVl
XSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAgICAgICBs
ZXQgcmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoc3RydWN0U2l6ZSksIDApOworICAgICAg
ICAgICAgICAgIHJlc3VsdC5jb3B5RnJvbShiYXNlLCBzdHJ1Y3RTaXplKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQucGx1cyhvZmZzZXQpLmNvcHlGcm9tKHZhbHVlLCBmaWVsZFNpemUpOworICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBU
aGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAorICAgICAgICAgICAgZnVuY3Rpb24gc2V0dXBBbmRl
cihhZGRyZXNzU3BhY2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHlwZVBhcmFt
ZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOworICAgICAgICAgICAgICAgIG5hdGl2ZUZ1
bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgICAgICAgICAgZmllbGQub3JpZ2luLCAi
b3BlcmF0b3ImLiIgKyBmaWVsZC5uYW1lLCBuZXcgUHRyVHlwZShmaWVsZC5vcmlnaW4sIGFkZHJl
c3NTcGFjZSwgY3JlYXRlRmllbGRUeXBlKCkpLAorICAgICAgICAgICAgICAgICAgICB0eXBlUGFy
YW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAg
bmV3IEZ1bmNQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQub3Jp
Z2luLCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQdHJUeXBlKGZpZWxk
Lm9yaWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVUeXBlUmVmKCkpKQorICAgICAgICAgICAgICAg
ICAgICBdLAorICAgICAgICAgICAgICAgICAgICBpc0Nhc3QpOworICAgICAgICAgICAgICAgIHNl
dHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0
U2l6ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlLmxv
YWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2UpCisgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcs
ICJOdWxsIGRlcmVmZXJlbmNlIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJv
eChiYXNlLnBsdXMob2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHNldHVwQW5kZXIoInRocmVhZCIpOworICAgICAgICAgICAgaWYgKHR5cGUu
aW5zdGFudGlhdGUoKS5pc1ByaW1pdGl2ZSkgeworICAgICAgICAgICAgICAgIHNldHVwQW5kZXIo
InRocmVhZGdyb3VwIik7CisgICAgICAgICAgICAgICAgc2V0dXBBbmRlcigiZGV2aWNlIik7Cisg
ICAgICAgICAgICAgICAgc2V0dXBBbmRlcigiY29uc3RhbnQiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rl
c3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0
Lmh0bWwJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Rlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiwxMyArNiwxNCBAQAogPHNjcmlwdCBzcmM9
IlJlZmVyZW5jZVR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlZhbHVlLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3Jj
PSJWaXNpdG9yQmFzZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmV3cml0ZXIuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IlZpc2l0b3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IkNyZWF0ZUxpdGVyYWwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWxU
eXBlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
anMiPjwvc2NyaXB0PgogCiA8c2NyaXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJBbm9ueW1vdXNWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iQXJyYXlSZWZUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVR5cGUuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFzc2lnbm1lbnQuanMiPjwvc2NyaXB0PgpAQCAtMjAs
NyArMjEsNiBAQAogPHNjcmlwdCBzcmM9IkJsb2NrLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJCb29sTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQnJlYWsuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9IkNhbGxBc3NpZ25tZW50LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJDYWxsRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ2FsbEZ1bmN0
aW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDaGVjay5qcyI+PC9zY3JpcHQ+CkBAIC00
Niw2ICs0Niw3IEBACiA8c2NyaXB0IHNyYz0iRXZhbHVhdG9yLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJFeHByZXNzaW9uRmluZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGaWVs
ZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iRmluZEhpZ2hab21iaWVzLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJGbGF0dGVuUHJvdG9jb2xFeHRlbmRzLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJGb3JMb29wLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGdW5jLmpzIj48
L3NjcmlwdD4KQEAgLTUzLDcgKzU0LDEwIEBACiA8c2NyaXB0IHNyYz0iRnVuY0luc3RhbnRpYXRv
ci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRnVuY1BhcmFtZXRlci5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iRnVuY3Rpb25MaWtlQmxvY2suanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9IkhpZ2hab21iaWVGaW5kZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IklkZW50aXR5
RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSWZTdGF0ZW1lbnQuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9IkluZGV4RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iSW5mZXJUeXBlc0ZvckNhbGwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Iklu
bGluZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW5saW5lci5qcyI+PC9zY3JpcHQ+CkBA
IC03NSwyMCArNzksMjQgQEAKIDxzY3JpcHQgc3JjPSJOYXRpdmVGdW5jSW5zdGFuY2UuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9Ik5hdGl2ZVR5cGVJbnN0YW5jZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTm9ybWFs
VXNlUHJvcGVydHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTnVsbExpdGVy
YWwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik51bGxUeXBlLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJQYXJzZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJlcGFyZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iUHJvcGVydHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iUHJvZ3JhbS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvdG9jb2wuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3RvY29sRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iUHJvdG9jb2xGdW5jRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJv
dG9jb2xSZWYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlB0clR5cGUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9IlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IlJlY3Vyc2lvbkNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IlJlc29sdmVOYW1lcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVzb2x2ZU92ZXJsb2Fk
SW1wbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUmVzb2x2ZVByb3BlcnRpZXMuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IlJlc29sdmVUeXBlRGVmcy5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iUmV0dXJuLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXR1cm5DaGVja2Vy
LmpzIj48L3NjcmlwdD4KQEAgLTk3LDEyICsxMDUsMTQgQEAKIDxzY3JpcHQgc3JjPSJTdHJ1Y3RM
YXlvdXRCdWlsZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJTdHJ1Y3RUeXBlLmpzIj48
L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJTdWJzdGl0dXRpb24uanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9IlN1ZmZpeENhbGxBc3NpZ25tZW50LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJT
eW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBl
RGVmLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlRGVmUmVzb2x2ZXIuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IlR5cGVPclZhcmlhYmxlUmVmLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJUeXBlUGFyYW1ldGVyUmV3cml0ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IlR5cGVSZWYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5cGVWYXJpYWJsZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iVHlwZVZhcmlhYmxlVHJhY2tlci5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iVHlwZWRWYWx1ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVWludExp
dGVyYWwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlVpbnRMaXRlcmFsVHlwZS5qcyI+PC9z
Y3JpcHQ+CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHJldmlzaW9u
IDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgZnVuY3Rpb24gY2hlY2tOdW1iZXIocHJvZ3JhbSwg
cmVzdWx0LCBleAogICAgIGlmICghcmVzdWx0LnR5cGUuaXNOdW1iZXIpCiAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0IHR5cGU7IHJlc3VsdDogIiArIHJlc3VsdCk7CiAgICAg
aWYgKHJlc3VsdC52YWx1ZSAhPSBleHBlY3RlZCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJX
cm9uZyByZXN1bHQ6ICIgKyByZXN1bHQgKyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiKSIp
OworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdDogIiArIHJlc3VsdC52YWx1
ZSArICIgKGV4cGVjdGVkICIgKyBleHBlY3RlZCArICIpIik7CiB9CiAKIGZ1bmN0aW9uIG1ha2VV
aW50KHByb2dyYW0sIHZhbHVlKQpAQCAtNDIyLDEwICs0MjIsMTAgQEAgZnVuY3Rpb24gVEVTVF9k
ZXZpY2VBcnJheVN0b3JlSW50TGl0ZXJhbAogZnVuY3Rpb24gVEVTVF9zaW1wbGVQcm90b2NvbCgp
CiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBwcm90b2NvbCBBZGRhYmxl
IHsKLSAgICAgICAgICAgIEFkZGFibGUgb3BlcmF0b3IrKEFkZGFibGUsIEFkZGFibGUpOworICAg
ICAgICBwcm90b2NvbCBNeUFkZGFibGUgeworICAgICAgICAgICAgTXlBZGRhYmxlIG9wZXJhdG9y
KyhNeUFkZGFibGUsIE15QWRkYWJsZSk7CiAgICAgICAgIH0KLSAgICAgICAgVCBhZGQ8VDpBZGRh
YmxlPihUIGEsIFQgYikKKyAgICAgICAgVCBhZGQ8VDpNeUFkZGFibGU+KFQgYSwgVCBiKQogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYSArIGI7CiAgICAgICAgIH0KQEAgLTc0Myw3ICs3
NDMsNyBAQCBmdW5jdGlvbiBURVNUX3N0b3JlTnVsbEFycmF5UmVmKCkKICAgICAgICAgKCkgPT4g
ZG9QcmVwKGAKICAgICAgICAgICAgIHZvaWQgZm9vKCkgeyBudWxsWzB1XSA9IDQyOyB9CiAgICAg
ICAgIGApLAotICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNz
YWdlLmluZGV4T2YoIkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCIpICE9IC0xKTsKKyAg
ICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9m
KCJMSFMgb2YgYXNzaWdubWVudCBpcyBub3QgYW4gTFZhbHVlIikgIT0gLTEpOwogfQogCiBmdW5j
dGlvbiBURVNUX3JldHVybk51bGxBcnJheVJlZigpCkBAIC04NTEsMTQgKzg1MSwxNCBAQCBmdW5j
dGlvbiBURVNUX2JhZEludExpdGVyYWxGb3JJbnQoKQogewogICAgIGNoZWNrRmFpbCgKICAgICAg
ICAgKCkgPT4gZG9QcmVwKCJ2b2lkIGZvbygpIHsgaW50IHggPSAzMDAwMDAwMDAwOyB9IiksCi0g
ICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7CisgICAgICAgIChlKSA9PiBl
IGluc3RhbmNlb2YgV1N5bnRheEVycm9yKTsKIH0KIAogZnVuY3Rpb24gVEVTVF9iYWRJbnRMaXRl
cmFsRm9yVWludCgpCiB7CiAgICAgY2hlY2tGYWlsKAogICAgICAgICAoKSA9PiBkb1ByZXAoInZv
aWQgZm9vKCkgeyB1aW50IHggPSA1MDAwMDAwMDAwOyB9IiksCi0gICAgICAgIChlKSA9PiBlIGlu
c3RhbmNlb2YgV1R5cGVFcnJvcik7CisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1N5bnRh
eEVycm9yKTsKIH0KIAogZnVuY3Rpb24gVEVTVF9iYWRJbnRMaXRlcmFsRm9yRG91YmxlKCkKQEAg
LTE0NjcsMTAgKzE0NjcsMTAgQEAgZnVuY3Rpb24gVEVTVF9pbnRMaXRlcmFsR2VuZXJpYygpCiBm
dW5jdGlvbiBURVNUX2ludExpdGVyYWxHZW5lcmljV2l0aFByb3RvY29scygpCiB7CiAgICAgbGV0
IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBwcm90b2NvbCBDb252ZXJ0aWJsZVRvSW50IHsK
LSAgICAgICAgICAgIG9wZXJhdG9yIGludChDb252ZXJ0aWJsZVRvSW50KTsKKyAgICAgICAgcHJv
dG9jb2wgTXlDb252ZXJ0aWJsZVRvSW50IHsKKyAgICAgICAgICAgIG9wZXJhdG9yIGludChNeUNv
bnZlcnRpYmxlVG9JbnQpOwogICAgICAgICB9Ci0gICAgICAgIGludCBmb288VDpDb252ZXJ0aWJs
ZVRvSW50PihUIHgpIHsgcmV0dXJuIGludCh4KTsgfQorICAgICAgICBpbnQgZm9vPFQ6TXlDb252
ZXJ0aWJsZVRvSW50PihUIHgpIHsgcmV0dXJuIGludCh4KTsgfQogICAgICAgICBpbnQgYmFyKCkg
eyByZXR1cm4gZm9vKDQyKTsgfQogICAgIGApOwogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10sIFtdKSwgNDIpOwpAQCAtMTQ4OCwxMCArMTQ4OCwx
MCBAQCBmdW5jdGlvbiBURVNUX3VpbnRMaXRlcmFsR2VuZXJpYygpCiBmdW5jdGlvbiBURVNUX3Vp
bnRMaXRlcmFsR2VuZXJpY1dpdGhQcm90b2NvbHMoKQogewogICAgIGxldCBwcm9ncmFtID0gZG9Q
cmVwKGAKLSAgICAgICAgcHJvdG9jb2wgQ29udmVydGlibGVUb1VpbnQgewotICAgICAgICAgICAg
b3BlcmF0b3IgdWludChDb252ZXJ0aWJsZVRvVWludCk7CisgICAgICAgIHByb3RvY29sIE15Q29u
dmVydGlibGVUb1VpbnQgeworICAgICAgICAgICAgb3BlcmF0b3IgdWludChNeUNvbnZlcnRpYmxl
VG9VaW50KTsKICAgICAgICAgfQotICAgICAgICB1aW50IGZvbzxUOkNvbnZlcnRpYmxlVG9VaW50
PihUIHgpIHsgcmV0dXJuIHVpbnQoeCk7IH0KKyAgICAgICAgdWludCBmb288VDpNeUNvbnZlcnRp
YmxlVG9VaW50PihUIHgpIHsgcmV0dXJuIHVpbnQoeCk7IH0KICAgICAgICAgdWludCBiYXIoKSB7
IHJldHVybiBmb28oNDJ1KTsgfQogICAgIGApOwogICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdLCBbXSksIDQyKTsKQEAgLTI1NjYsNiArMjU2Niw3
NzEgQEAgZnVuY3Rpb24gVEVTVF9tYWtlQXJyYXlSZWZGcm9tQXJyYXlSZWYoKQogICAgICAgICAo
ZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOwogfQogCitmdW5jdGlvbiBURVNUX3NpbXBs
ZUxlbmd0aCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1aW50IGZv
bygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvdWJsZVs3NTRdIGFycmF5OworICAgICAgICAg
ICAgcmV0dXJuIChAYXJyYXkpLmxlbmd0aDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNr
VWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDc1NCk7
Cit9CisKK2Z1bmN0aW9uIFRFU1Rfbm9uQXJyYXlSZWZBcnJheUxlbmd0aCgpCit7CisgICAgbGV0
IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1aW50IGZvbygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRvdWJsZVs3NTRdIGFycmF5OworICAgICAgICAgICAgcmV0dXJuIGFycmF5Lmxlbmd0
aDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDc1NCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfYXNz
aWduTGVuZ3RoKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisg
ICAgICAgICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG91
YmxlWzc1NF0gYXJyYXk7CisgICAgICAgICAgICAgICAgKEBhcnJheSkubGVuZ3RoID0gNDI7Cisg
ICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdU
eXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoIkxIUyBvZiBhc3NpZ25tZW50IGlzIG5vdCBh
biBMVmFsdWUiKSAhPSAtMSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfYXNzaWduTGVuZ3RoSGVscGVy
KCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAg
ICB2b2lkIGJhcih0aHJlYWQgZG91YmxlW10gYXJyYXkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYXJyYXkubGVuZ3RoID0gNDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2
b2lkIGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG91YmxlWzc1NF0gYXJy
YXk7CisgICAgICAgICAgICAgICAgYmFyKEBhcnJheSk7CisgICAgICAgICAgICB9CisgICAgICAg
IGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdl
LmluZGV4T2YoIkNhbm5vdCBlbWl0IHNldCBiZWNhdXNlOiBEaWQgbm90IGZpbmQgYW55IGZ1bmN0
aW9ucyBuYW1lZCBvcGVyYXRvci5sZW5ndGg9IikgIT0gLTEpOworfQorCitmdW5jdGlvbiBURVNU
X3NpbXBsZUdldHRlcigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBz
dHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICB9CisgICAgICAgIGludCBv
cGVyYXRvci55KEZvbyBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb28ueDsK
KyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9v
IGZvbzsKKyAgICAgICAgICAgIGZvby54ID0gNzgwNDsKKyAgICAgICAgICAgIHJldHVybiBmb28u
eTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNzgwNCk7Cit9CisKK2Z1bmN0aW9uIFRFU1Rfc2lt
cGxlU2V0dGVyKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVj
dCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9wZXJh
dG9yLnkoRm9vIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby54OworICAg
ICAgICB9CisgICAgICAgIEZvbyBvcGVyYXRvci55PShGb28gZm9vLCBpbnQgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvby54ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gZm9v
OworICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBG
b28gZm9vOworICAgICAgICAgICAgZm9vLnkgPSA3ODA0OworICAgICAgICAgICAgcmV0dXJuIGZv
by54OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLCA3ODA0KTsKK30KKworZnVuY3Rpb24gVEVTVF9n
ZW5lcmljQWNjZXNzb3JzKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAg
IHN0cnVjdCBGb288VD4geworICAgICAgICAgICAgVCB4OworICAgICAgICAgICAgVFszXSB5Owor
ICAgICAgICB9CisgICAgICAgIHN0cnVjdCBCYXI8VD4geworICAgICAgICAgICAgVCB4OworICAg
ICAgICAgICAgVCB5OworICAgICAgICB9CisgICAgICAgIEJhcjxUPiBvcGVyYXRvci56PFQ+KEZv
bzxUPiBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhcjxUPiByZXN1bHQ7CisgICAgICAg
ICAgICByZXN1bHQueCA9IGZvby54OworICAgICAgICAgICAgcmVzdWx0LnkgPSBmb28ueVsxXTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgRm9vPFQ+IG9w
ZXJhdG9yLno9PFQ+KEZvbzxUPiBmb28sIEJhcjxUPiBiYXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvby54ID0gYmFyLng7CisgICAgICAgICAgICBmb28ueVsxXSA9IGJhci55OworICAgICAg
ICAgICAgcmV0dXJuIGZvbzsKKyAgICAgICAgfQorICAgICAgICBUIG9wZXJhdG9yLnN1bTxUOkFk
ZGFibGU+KEZvbzxUPiBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb28ueCAr
IGZvby55WzBdICsgZm9vLnlbMV0gKyBmb28ueVsyXTsKKyAgICAgICAgfQorICAgICAgICBUIG9w
ZXJhdG9yLnN1bTxUOkFkZGFibGU+KEJhcjxUPiBiYXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBiYXIueCArIGJhci55OworICAgICAgICB9CisgICAgICAgIG9wZXJhdG9yPFQ+IEJh
cjxUPihUIHgsIFQgeSkKKyAgICAgICAgeworICAgICAgICAgICAgQmFyPFQ+IHJlc3VsdDsKKyAg
ICAgICAgICAgIHJlc3VsdC54ID0geDsKKyAgICAgICAgICAgIHJlc3VsdC55ID0geTsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXR1cCh0aHJl
YWQgRm9vPGludD5eIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgZm9vLT54ID0gMTsKKyAg
ICAgICAgICAgIGZvby0+eVswXSA9IDI7CisgICAgICAgICAgICBmb28tPnlbMV0gPSAzOworICAg
ICAgICAgICAgZm9vLT55WzJdID0gNDsKKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdFN1cGVy
QmFzaWMoKQorICAgICAgICB7CisgICAgICAgICAgICBGb288aW50PiBmb287CisgICAgICAgICAg
ICBzZXR1cCgmZm9vKTsKKyAgICAgICAgICAgIHJldHVybiBmb28uc3VtOworICAgICAgICB9Cisg
ICAgICAgIGludCB0ZXN0WlNldHRlckRpZFNldFkoKQorICAgICAgICB7CisgICAgICAgICAgICBG
b288aW50PiBmb287CisgICAgICAgICAgICBmb28ueiA9IEJhcjxpbnQ+KDUzLCA5MzIpOworICAg
ICAgICAgICAgcmV0dXJuIGZvby55WzFdOworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0WlNl
dHRlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAg
IGZvby56ID0gQmFyPGludD4oNTMsIDkzMik7CisgICAgICAgICAgICByZXR1cm4gZm9vLnN1bTsK
KyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdFpHZXR0ZXIoKQorICAgICAgICB7CisgICAgICAg
ICAgICBGb288aW50PiBmb287CisgICAgICAgICAgICAvLyBUaGlzIGRlbGliZXJhdGVseSBkb2Vz
IG5vdCBjYWxsIHNldHVwKCkganVzdCBzbyB3ZSB0ZXN0IHRoaXMgc3ludGF4LgorICAgICAgICAg
ICAgZm9vLnggPSAxOworICAgICAgICAgICAgZm9vLnlbMF0gPSAyOworICAgICAgICAgICAgZm9v
LnlbMV0gPSAzOworICAgICAgICAgICAgZm9vLnlbMl0gPSA0OworICAgICAgICAgICAgcmV0dXJu
IGZvby56LnN1bTsKKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdExWYWx1ZUVtdWxhdGlvbigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIHNldHVw
KCZmb28pOworICAgICAgICAgICAgZm9vLnoueSAqPSA1OworICAgICAgICAgICAgcmV0dXJuIGZv
by5zdW07CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgInRlc3RTdXBlckJhc2ljIiwgW10sIFtdKSwgMSArIDIgKyAzICsgNCk7
CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0WlNldHRl
ckRpZFNldFkiLCBbXSwgW10pLCA5MzIpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAidGVzdFpTZXR0ZXIiLCBbXSwgW10pLCA1MyArIDkzMik7CisgICAgY2hl
Y2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0WkdldHRlciIsIFtdLCBb
XSksIDEgKyAzKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
InRlc3RMVmFsdWVFbXVsYXRpb24iLCBbXSwgW10pLCAxICsgMiArIDMgKiA1ICsgNCk7Cit9CisK
K2Z1bmN0aW9uIFRFU1RfYml0U3Vic2NyaXB0QWNjZXNzb3IoKQoreworICAgIGxldCBwcm9ncmFt
ID0gZG9QcmVwKGAKKyAgICAgICAgcHJvdG9jb2wgTXlCaXRtYXNrYWJsZSA6IEVxdWF0YWJsZSB7
CisgICAgICAgICAgICBNeUJpdG1hc2thYmxlIG9wZXJhdG9yJihNeUJpdG1hc2thYmxlLCBNeUJp
dG1hc2thYmxlKTsKKyAgICAgICAgICAgIE15Qml0bWFza2FibGUgb3BlcmF0b3J8KE15Qml0bWFz
a2FibGUsIE15Qml0bWFza2FibGUpOworICAgICAgICAgICAgTXlCaXRtYXNrYWJsZSBvcGVyYXRv
cn4oTXlCaXRtYXNrYWJsZSk7CisgICAgICAgICAgICBNeUJpdG1hc2thYmxlIG9wZXJhdG9yPDwo
TXlCaXRtYXNrYWJsZSwgdWludCk7CisgICAgICAgICAgICBNeUJpdG1hc2thYmxlIG9wZXJhdG9y
Pj4oTXlCaXRtYXNrYWJsZSwgdWludCk7CisgICAgICAgICAgICBvcGVyYXRvciBNeUJpdG1hc2th
YmxlKGludCk7CisgICAgICAgIH0KKyAgICAgICAgVCBtYXNrRm9yQml0SW5kZXg8VDpNeUJpdG1h
c2thYmxlPih1aW50IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gVCgxKSA8
PCBpbmRleDsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJhdG9yW108VDpNeUJpdG1hc2th
YmxlPihUIHZhbHVlLCB1aW50IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Ym9vbCh2YWx1ZSAmIG1hc2tGb3JCaXRJbmRleDxUPihpbmRleCkpOworICAgICAgICB9CisgICAg
ICAgIFQgb3BlcmF0b3JbXT08VDpNeUJpdG1hc2thYmxlPihUIHZhbHVlLCB1aW50IGluZGV4LCBi
b29sIGJpdCkKKyAgICAgICAgeworICAgICAgICAgICAgVCBtYXNrID0gbWFza0ZvckJpdEluZGV4
PFQ+KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChiaXQpCisgICAgICAgICAgICAgICAgdmFsdWUg
fD0gbWFzazsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2YWx1ZSAmPSB+bWFz
azsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICB1aW50IG9w
ZXJhdG9yLmxlbmd0aChpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAzMjsKKyAg
ICAgICAgfQorICAgICAgICB1aW50IG9wZXJhdG9yLmxlbmd0aCh1aW50KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gMzI7CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RJbnRTZXRC
aXQzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGZvbzsKKyAgICAgICAgICAgIGZvb1sz
XSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgICAgIGJv
b2wgdGVzdEludFNldEdldEJpdDUoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZm9vOwor
ICAgICAgICAgICAgZm9vWzVdID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmb29bNV07Cisg
ICAgICAgIH0KKyAgICAgICAgYm9vbCB0ZXN0SW50R2V0Qml0MSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGludCBmb287CisgICAgICAgICAgICByZXR1cm4gZm9vWzFdOworICAgICAgICB9Cisg
ICAgICAgIGludCB0ZXN0VWludFN1bUJpdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQg
Zm9vID0gNDI7CisgICAgICAgICAgICBpbnQgcmVzdWx0OworICAgICAgICAgICAgZm9yICh1aW50
IGkgPSAwOyBpIDwgZm9vLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZvb1tp
XSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0VWludFN3YXBC
aXRzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGZvbyA9IDQyOworICAgICAgICAgICAg
Zm9yICh1aW50IGkgPSAwOyBpIDwgZm9vLmxlbmd0aCAvIDI7ICsraSkgeworICAgICAgICAgICAg
ICAgIGJvb2wgdG1wID0gZm9vW2ldOworICAgICAgICAgICAgICAgIGZvb1tpXSA9IGZvb1tmb28u
bGVuZ3RoIC0gaSAtIDFdOworICAgICAgICAgICAgICAgIGZvb1tmb28ubGVuZ3RoIC0gaSAtIDFd
ID0gdG1wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZvbzsKKyAgICAgICAg
fQorICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIHVpbnQgZjsKKyAgICAgICAgICAg
IHVpbnQgZzsKKyAgICAgICAgfQorICAgICAgICBvcGVyYXRvciBGb28odWludCBmLCB1aW50IGcp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbyByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQu
ZiA9IGY7CisgICAgICAgICAgICByZXN1bHQuZyA9IGc7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisgICAgICAgIGludCBvcGVyYXRvci5oKEZvbyBmb28pCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpbnQoKGZvby5mICYgMHhmZmZmKSB8ICgoZm9vLmcgJiAw
eGZmZmYpIDw8IDE2KSk7CisgICAgICAgIH0KKyAgICAgICAgRm9vIG9wZXJhdG9yLmg9KEZvbyBm
b28sIGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9vLmYgJj0gfjB4ZmZmZnU7
CisgICAgICAgICAgICBmb28uZiB8PSB1aW50KHZhbHVlKSAmIDB4ZmZmZjsKKyAgICAgICAgICAg
IGZvby5nICY9IH4weGZmZmZ1OworICAgICAgICAgICAgZm9vLmcgfD0gKHVpbnQodmFsdWUpID4+
IDE2KSAmIDB4ZmZmZjsKKyAgICAgICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAgICAg
ICAgaW50IHRlc3RMVmFsdWVFbXVsYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28g
Zm9vOworICAgICAgICAgICAgZm9vLmYgPSA0MjsKKyAgICAgICAgICAgIGZvby5nID0gMzc7Cisg
ICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBmb28uaC5sZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgICAgICBmb28uaFtpXSBePSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGludChmb28u
ZiArIGZvby5nKTsKKyAgICAgICAgfQorICAgICAgICBzdHJ1Y3QgQmFyIHsKKyAgICAgICAgICAg
IEZvbyBhOworICAgICAgICAgICAgRm9vIGI7CisgICAgICAgIH0KKyAgICAgICAgRm9vIG9wZXJh
dG9yLmMoQmFyIGJhcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvbyh1aW50KGJh
ci5hLmgpLCB1aW50KGJhci5iLmgpKTsKKyAgICAgICAgfQorICAgICAgICBCYXIgb3BlcmF0b3Iu
Yz0oQmFyIGJhciwgRm9vIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgYmFyLmEuaCA9IGlu
dChmb28uZik7CisgICAgICAgICAgICBiYXIuYi5oID0gaW50KGZvby5nKTsKKyAgICAgICAgICAg
IHJldHVybiBiYXI7CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RDcmF6eUxWYWx1ZUVtdWxh
dGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhciBiYXI7CisgICAgICAgICAgICBiYXIu
YS5mID0gMTsKKyAgICAgICAgICAgIGJhci5hLmcgPSAyOworICAgICAgICAgICAgYmFyLmIuZiA9
IDM7CisgICAgICAgICAgICBiYXIuYi5nID0gNDsKKyAgICAgICAgICAgIGZvciAodWludCBpID0g
MDsgaSA8IGJhci5jLmgubGVuZ3RoOyBpICs9IDIpCisgICAgICAgICAgICAgICAgYmFyLmMuaFtp
XSBePSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGludChiYXIuYS5mICsgYmFyLmEuZyArIGJh
ci5iLmYgKyBiYXIuYi5nKTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdEludFNldEJpdDMiLCBbXSwgW10pLCA4KTsK
KyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0SW50U2V0
R2V0Qml0NSIsIFtdLCBbXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgInRlc3RJbnRHZXRCaXQxIiwgW10sIFtdKSwgZmFsc2UpOworICAgIGNo
ZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFVpbnRTdW1CaXRzIiwg
W10sIFtdKSwgMyk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJ0ZXN0VWludFN3YXBCaXRzIiwgW10sIFtdKSwgMTQwOTI4NjE0NCk7CisgICAgY2hlY2tJbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0TFZhbHVlRW11bGF0aW9uIiwgW10s
IFtdKSwgMTMwOTkxKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgInRlc3RDcmF6eUxWYWx1ZUVtdWxhdGlvbiIsIFtdLCBbXSksIDQzNjk2KTsKK30KKworZnVu
Y3Rpb24gVEVTVF9uZXN0ZWRTdWJzY3JpcHRMVmFsdWVFbXVsYXRpb25TaW1wbGUoKQoreworICAg
IGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAg
ICBpbnRbN10gYXJyYXk7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9yW10oRm9vIGZv
bywgdWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby5hcnJheVtp
bmRleF07CisgICAgICAgIH0KKyAgICAgICAgRm9vIG9wZXJhdG9yW109KEZvbyBmb28sIHVpbnQg
aW5kZXgsIGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9vLmFycmF5W2luZGV4
XSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIGZvbzsKKyAgICAgICAgfQorICAgICAgICB1
aW50IG9wZXJhdG9yLmxlbmd0aChGb28gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZm9vLmFycmF5Lmxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3VtKEZvbyBmb28p
CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgICAgICAgZm9y
ICh1aW50IGkgPSBmb28ubGVuZ3RoOyBpLS07KQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBm
b29baV07CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHN0
cnVjdCBCYXIgeworICAgICAgICAgICAgRm9vWzZdIGFycmF5OworICAgICAgICB9CisgICAgICAg
IHVpbnQgb3BlcmF0b3IubGVuZ3RoKEJhciBiYXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBiYXIuYXJyYXkubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIEZvbyBvcGVyYXRvcltd
KEJhciBiYXIsIHVpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXIu
YXJyYXlbaW5kZXhdOworICAgICAgICB9CisgICAgICAgIEJhciBvcGVyYXRvcltdPShCYXIgYmFy
LCB1aW50IGluZGV4LCBGb28gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhci5hcnJh
eVtpbmRleF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBiYXI7CisgICAgICAgIH0KKyAg
ICAgICAgaW50IHN1bShCYXIgYmFyKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcmVzdWx0
ID0gMDsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gYmFyLmxlbmd0aDsgaS0tOykKKyAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gc3VtKGJhcltpXSk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBCYXogeworICAgICAgICAgICAgQmFyWzVd
IGFycmF5OworICAgICAgICB9CisgICAgICAgIEJhciBvcGVyYXRvcltdKEJheiBiYXosIHVpbnQg
aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXouYXJyYXlbaW5kZXhdOwor
ICAgICAgICB9CisgICAgICAgIEJheiBvcGVyYXRvcltdPShCYXogYmF6LCB1aW50IGluZGV4LCBC
YXIgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhei5hcnJheVtpbmRleF0gPSB2YWx1
ZTsKKyAgICAgICAgICAgIHJldHVybiBiYXo7CisgICAgICAgIH0KKyAgICAgICAgdWludCBvcGVy
YXRvci5sZW5ndGgoQmF6IGJheikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhei5h
cnJheS5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgaW50IHN1bShCYXogYmF6KQorICAgICAg
ICB7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIGZvciAodWludCBp
ID0gYmF6Lmxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3VtKGJheltp
XSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHZvaWQg
c2V0VmFsdWVzKHRocmVhZCBCYXpeIGJheikKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1
aW50IGkgPSBiYXotPmxlbmd0aDsgaS0tOykgeworICAgICAgICAgICAgICAgIGZvciAodWludCBq
ID0gKF5iYXopW2ldLmxlbmd0aDsgai0tOykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVp
bnQgayA9ICheYmF6KVtpXVtqXS5sZW5ndGg7IGstLTspCisgICAgICAgICAgICAgICAgICAgICAg
ICAoXmJheilbaV1bal1ba10gPSBpbnQoaSArIGogKyBrKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RTZXRWYWx1ZXNBbmRTdW0o
KQorICAgICAgICB7CisgICAgICAgICAgICBCYXogYmF6OworICAgICAgICAgICAgc2V0VmFsdWVz
KCZiYXopOworICAgICAgICAgICAgcmV0dXJuIHN1bShiYXopOworICAgICAgICB9CisgICAgICAg
IGludCB0ZXN0U2V0VmFsdWVzTXV0YXRlVmFsdWVzQW5kU3VtKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQmF6IGJhejsKKyAgICAgICAgICAgIHNldFZhbHVlcygmYmF6KTsKKyAgICAgICAgICAg
IGZvciAodWludCBpID0gYmF6Lmxlbmd0aDsgaS0tOykgeworICAgICAgICAgICAgICAgIGZvciAo
dWludCBqID0gYmF6W2ldLmxlbmd0aDsgai0tOykgeworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVpbnQgayA9IGJheltpXVtqXS5sZW5ndGg7IGstLTspCisgICAgICAgICAgICAgICAgICAgICAg
ICBiYXpbaV1bal1ba10gKj0gaW50KGspOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBzdW0oYmF6KTsKKyAgICAgICAgfQorICAgIGApOworICAg
IGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFNldFZhbHVlc0Fu
ZFN1bSIsIFtdLCBbXSksIDE1NzUpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAidGVzdFNldFZhbHVlc011dGF0ZVZhbHVlc0FuZFN1bSIsIFtdLCBbXSksIDU1
NjUpOworfQorCitmdW5jdGlvbiBURVNUX25lc3RlZFN1YnNjcmlwdExWYWx1ZUVtdWxhdGlvbkdl
bmVyaWMoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZv
bzxUPiB7CisgICAgICAgICAgICBUWzddIGFycmF5OworICAgICAgICB9CisgICAgICAgIFQgb3Bl
cmF0b3JbXTxUPihGb288VD4gZm9vLCB1aW50IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZm9vLmFycmF5W2luZGV4XTsKKyAgICAgICAgfQorICAgICAgICBGb288VD4gb3Bl
cmF0b3JbXT08VD4oRm9vPFQ+IGZvbywgdWludCBpbmRleCwgVCB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9vLmFycmF5W2luZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJu
IGZvbzsKKyAgICAgICAgfQorICAgICAgICB1aW50IG9wZXJhdG9yLmxlbmd0aDxUPihGb288VD4g
Zm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vLmFycmF5Lmxlbmd0aDsKKyAg
ICAgICAgfQorICAgICAgICBwcm90b2NvbCBNeUFkZGFibGUgeworICAgICAgICAgICAgTXlBZGRh
YmxlIG9wZXJhdG9yKyhNeUFkZGFibGUsIE15QWRkYWJsZSk7CisgICAgICAgIH0KKyAgICAgICAg
VCBzdW08VDpNeUFkZGFibGU+KEZvbzxUPiBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIFQg
cmVzdWx0OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSBmb28ubGVuZ3RoOyBpLS07KQorICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSBmb29baV07CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBCYXI8VD4geworICAgICAgICAgICAgRm9vPFQ+
WzZdIGFycmF5OworICAgICAgICB9CisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ+KEJh
cjxUPiBiYXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXIuYXJyYXkubGVuZ3Ro
OworICAgICAgICB9CisgICAgICAgIEZvbzxUPiBvcGVyYXRvcltdPFQ+KEJhcjxUPiBiYXIsIHVp
bnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXIuYXJyYXlbaW5kZXhd
OworICAgICAgICB9CisgICAgICAgIEJhcjxUPiBvcGVyYXRvcltdPTxUPihCYXI8VD4gYmFyLCB1
aW50IGluZGV4LCBGb288VD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhci5hcnJh
eVtpbmRleF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBiYXI7CisgICAgICAgIH0KKyAg
ICAgICAgVCBzdW08VDpNeUFkZGFibGU+KEJhcjxUPiBiYXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFQgcmVzdWx0OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSBiYXIubGVuZ3RoOyBpLS07
KQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdW0oYmFyW2ldKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJhejxUPiB7CisgICAgICAg
ICAgICBCYXI8VD5bNV0gYXJyYXk7CisgICAgICAgIH0KKyAgICAgICAgQmFyPFQ+IG9wZXJhdG9y
W108VD4oQmF6PFQ+IGJheiwgdWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGJhei5hcnJheVtpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgQmF6PFQ+IG9wZXJhdG9y
W109PFQ+KEJhejxUPiBiYXosIHVpbnQgaW5kZXgsIEJhcjxUPiB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgYmF6LmFycmF5W2luZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJu
IGJhejsKKyAgICAgICAgfQorICAgICAgICB1aW50IG9wZXJhdG9yLmxlbmd0aDxUPihCYXo8VD4g
YmF6KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmF6LmFycmF5Lmxlbmd0aDsKKyAg
ICAgICAgfQorICAgICAgICBUIHN1bTxUOk15QWRkYWJsZT4oQmF6PFQ+IGJheikKKyAgICAgICAg
eworICAgICAgICAgICAgVCByZXN1bHQ7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IGJhei5s
ZW5ndGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN1bShiYXpbaV0pOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBwcm90b2NvbCBNeUNv
bnZlcnRpYmxlRnJvbVVpbnQgeworICAgICAgICAgICAgb3BlcmF0b3IgTXlDb252ZXJ0aWJsZUZy
b21VaW50KHVpbnQpOworICAgICAgICB9CisgICAgICAgIHByb3RvY29sIFNldFZhbHVhYmxlIDog
TXlBZGRhYmxlLCBNeUNvbnZlcnRpYmxlRnJvbVVpbnQgeyB9CisgICAgICAgIHZvaWQgc2V0VmFs
dWVzPFQ6U2V0VmFsdWFibGU+KHRocmVhZCBCYXo8VD5eIGJheikKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yICh1aW50IGkgPSBiYXotPmxlbmd0aDsgaS0tOykgeworICAgICAgICAgICAgICAg
IGZvciAodWludCBqID0gKF5iYXopW2ldLmxlbmd0aDsgai0tOykgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVpbnQgayA9ICheYmF6KVtpXVtqXS5sZW5ndGg7IGstLTspCisgICAgICAgICAg
ICAgICAgICAgICAgICAoXmJheilbaV1bal1ba10gPSBUKGkgKyBqICsgayk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGludCB0ZXN0U2V0VmFs
dWVzQW5kU3VtKCkKKyAgICAgICAgeworICAgICAgICAgICAgQmF6PGludD4gYmF6OworICAgICAg
ICAgICAgc2V0VmFsdWVzKCZiYXopOworICAgICAgICAgICAgcmV0dXJuIHN1bShiYXopOworICAg
ICAgICB9CisgICAgICAgIGludCB0ZXN0U2V0VmFsdWVzTXV0YXRlVmFsdWVzQW5kU3VtKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgQmF6PGludD4gYmF6OworICAgICAgICAgICAgc2V0VmFsdWVz
KCZiYXopOworICAgICAgICAgICAgZm9yICh1aW50IGkgPSBiYXoubGVuZ3RoOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1aW50IGogPSBiYXpbaV0ubGVuZ3RoOyBqLS07KSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodWludCBrID0gYmF6W2ldW2pdLmxlbmd0aDsgay0tOykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJheltpXVtqXVtrXSAqPSBpbnQoayk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1bShiYXopOworICAg
ICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJ0ZXN0U2V0VmFsdWVzQW5kU3VtIiwgW10sIFtdKSwgMTU3NSk7CisgICAgY2hlY2tJbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0U2V0VmFsdWVzTXV0YXRlVmFsdWVz
QW5kU3VtIiwgW10sIFtdKSwgNTU2NSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfYm9vbEJpdEFuZCgp
Cit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBib29sIGZvbyhib29sIGEs
IGJvb2wgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgJiBiOworICAgICAgICB9
CisgICAgYCk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSksIG1ha2VCb29sKHByb2dyYW0sIGZh
bHNlKV0pLCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCB0cnVlKSwgbWFrZUJvb2wocHJvZ3Jh
bSwgZmFsc2UpXSksIGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIGZhbHNlKSwgbWFrZUJvb2wo
cHJvZ3JhbSwgdHJ1ZSldKSwgZmFsc2UpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSksIG1ha2VC
b29sKHByb2dyYW0sIHRydWUpXSksIHRydWUpOworfQorCitmdW5jdGlvbiBURVNUX2Jvb2xCaXRP
cigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBib29sIGZvbyhib29s
IGEsIGJvb2wgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgfCBiOworICAgICAg
ICB9CisgICAgYCk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSksIG1ha2VCb29sKHByb2dyYW0s
IGZhbHNlKV0pLCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCB0cnVlKSwgbWFrZUJvb2wocHJv
Z3JhbSwgZmFsc2UpXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpLCBtYWtlQm9v
bChwcm9ncmFtLCB0cnVlKV0pLCB0cnVlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIHRydWUpLCBtYWtl
Qm9vbChwcm9ncmFtLCB0cnVlKV0pLCB0cnVlKTsKK30KKworZnVuY3Rpb24gVEVTVF9ib29sQml0
WG9yKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGJvb2wgZm9vKGJv
b2wgYSwgYm9vbCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSBeIGI7CisgICAg
ICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIGZhbHNlKSwgbWFrZUJvb2wocHJvZ3Jh
bSwgZmFsc2UpXSksIGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIHRydWUpLCBtYWtlQm9vbChw
cm9ncmFtLCBmYWxzZSldKSwgdHJ1ZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSksIG1ha2VC
b29sKHByb2dyYW0sIHRydWUpXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSksIG1h
a2VCb29sKHByb2dyYW0sIHRydWUpXSksIGZhbHNlKTsKK30KKworZnVuY3Rpb24gVEVTVF9ib29s
Qml0Tm90KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGJvb2wgZm9v
KGJvb2wgYSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIH5hOworICAgICAgICB9Cisg
ICAgYCk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSldKSwgdHJ1ZSk7CisgICAgY2hlY2tCb29s
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9n
cmFtLCB0cnVlKV0pLCBmYWxzZSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfaW50Qml0QW5kKCkKK3sK
KyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oaW50IGEsIGludCBi
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAmIGI7CisgICAgICAgIH0KKyAgICBg
KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtd
LCBbbWFrZUludChwcm9ncmFtLCAxKSwgbWFrZUludChwcm9ncmFtLCA3KV0pLCAxKTsKKyAgICBj
aGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUlu
dChwcm9ncmFtLCA2NTUzNSksIG1ha2VJbnQocHJvZ3JhbSwgNDIpXSksIDQyKTsKKyAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChw
cm9ncmFtLCAtMSksIG1ha2VJbnQocHJvZ3JhbSwgLTcpXSksIC03KTsKKyAgICBjaGVja0ludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFt
LCAwKSwgbWFrZUludChwcm9ncmFtLCA4NTczMildKSwgMCk7Cit9CisKK2Z1bmN0aW9uIFRFU1Rf
aW50Qml0T3IoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZv
byhpbnQgYSwgaW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhIHwgYjsKKyAg
ICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDEpLCBtYWtlSW50KHByb2dyYW0sIDcp
XSksIDcpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10sIFttYWtlSW50KHByb2dyYW0sIDY1NTM1KSwgbWFrZUludChwcm9ncmFtLCA0MildKSwg
NjU1MzUpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10sIFttYWtlSW50KHByb2dyYW0sIC0xKSwgbWFrZUludChwcm9ncmFtLCAtNyldKSwgLTEp
OworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlSW50KHByb2dyYW0sIDApLCBtYWtlSW50KHByb2dyYW0sIDg1NzMyKV0pLCA4NTczMik7
Cit9CisKK2Z1bmN0aW9uIFRFU1RfaW50Qml0WG9yKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRv
UHJlcChgCisgICAgICAgIGludCBmb28oaW50IGEsIGludCBiKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYSBeIGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9n
cmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAx
KSwgbWFrZUludChwcm9ncmFtLCA3KV0pLCA2KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA2NTUzNSksIG1h
a2VJbnQocHJvZ3JhbSwgNDIpXSksIDY1NDkzKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAtMSksIG1ha2VJ
bnQocHJvZ3JhbSwgLTcpXSksIDYpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDApLCBtYWtlSW50KHByb2dy
YW0sIDg1NzMyKV0pLCA4NTczMik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfaW50Qml0Tm90KCkKK3sK
KyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oaW50IGEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiB+YTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNo
ZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50
KHByb2dyYW0sIDEpXSksIC0yKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA2NTUzNSldKSwgLTY1NTM2KTsK
KyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBb
bWFrZUludChwcm9ncmFtLCAtMSldKSwgMCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgMCldKSwgLTEpOwor
fQorCitmdW5jdGlvbiBURVNUX2ludExTaGlmdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1By
ZXAoYAorICAgICAgICBpbnQgZm9vKGludCBhLCB1aW50IGIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBhIDw8IGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9n
cmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAx
KSwgbWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgMTI4KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA2NTUzNSks
IG1ha2VVaW50KHByb2dyYW0sIDIpXSksIDI2MjE0MCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgLTEpLCBt
YWtlVWludChwcm9ncmFtLCA1KV0pLCAtMzIpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDApLCBtYWtlVWlu
dChwcm9ncmFtLCAzKV0pLCAwKTsKK30KKworZnVuY3Rpb24gVEVTVF9pbnRSU2hpZnQoKQorewor
ICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyhpbnQgYSwgdWludCBi
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSA+PiBiOworICAgICAgICB9CisgICAg
YCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSwgW21ha2VJbnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHByb2dyYW0sIDcpXSksIDApOworICAg
IGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtl
SW50KHByb2dyYW0sIDY1NTM1KSwgbWFrZVVpbnQocHJvZ3JhbSwgMildKSwgMTYzODMpOworICAg
IGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtl
SW50KHByb2dyYW0sIC0xKSwgbWFrZVVpbnQocHJvZ3JhbSwgNSldKSwgLTEpOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHBy
b2dyYW0sIDApLCBtYWtlVWludChwcm9ncmFtLCAzKV0pLCAwKTsKK30KKworZnVuY3Rpb24gVEVT
VF91aW50Qml0QW5kKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHVp
bnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAm
IGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDEpLCBtYWtlVWludChw
cm9ncmFtLCA3KV0pLCAxKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDY1NTM1KSwgbWFrZVVpbnQocHJv
Z3JhbSwgNDIpXSksIDQyKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIC0xKSwgbWFrZVVpbnQocHJvZ3Jh
bSwgLTcpXSksIDQyOTQ5NjcyODkpOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMCksIG1ha2VVaW50KHBy
b2dyYW0sIDg1NzMyKV0pLCAwKTsKK30KKworZnVuY3Rpb24gVEVTVF91aW50Qml0T3IoKQorewor
ICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdWludCBmb28odWludCBhLCB1aW50
IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhIHwgYjsKKyAgICAgICAgfQorICAg
IGApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHByb2dyYW0sIDcpXSksIDcpOwor
ICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBb
bWFrZVVpbnQocHJvZ3JhbSwgNjU1MzUpLCBtYWtlVWludChwcm9ncmFtLCA0MildKSwgNjU1MzUp
OworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtd
LCBbbWFrZVVpbnQocHJvZ3JhbSwgLTEpLCBtYWtlVWludChwcm9ncmFtLCAtNyldKSwgNDI5NDk2
NzI5NSk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10sIFttYWtlVWludChwcm9ncmFtLCAwKSwgbWFrZVVpbnQocHJvZ3JhbSwgODU3MzIpXSks
IDg1NzMyKTsKK30KKworZnVuY3Rpb24gVEVTVF91aW50Qml0WG9yKCkKK3sKKyAgICBsZXQgcHJv
Z3JhbSA9IGRvUHJlcChgCisgICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYSBeIGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBj
aGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VV
aW50KHByb2dyYW0sIDEpLCBtYWtlVWludChwcm9ncmFtLCA3KV0pLCA2KTsKKyAgICBjaGVja1Vp
bnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHBy
b2dyYW0sIDY1NTM1KSwgbWFrZVVpbnQocHJvZ3JhbSwgNDIpXSksIDY1NDkzKTsKKyAgICBjaGVj
a1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50
KHByb2dyYW0sIC0xKSwgbWFrZVVpbnQocHJvZ3JhbSwgLTcpXSksIDYpOworICAgIGNoZWNrVWlu
dChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJv
Z3JhbSwgMCksIG1ha2VVaW50KHByb2dyYW0sIDg1NzMyKV0pLCA4NTczMik7Cit9CisKK2Z1bmN0
aW9uIFRFU1RfdWludEJpdE5vdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAg
ICAgICB1aW50IGZvbyh1aW50IGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB+YTsK
KyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMSldKSwgNDI5NDk2NzI5NCk7
CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlVWludChwcm9ncmFtLCA2NTUzNSldKSwgNDI5NDkwMTc2MCk7CisgICAgY2hlY2tVaW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9n
cmFtLCAtMSldKSwgMCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAwKV0pLCA0Mjk0OTY3Mjk1KTsKK30K
KworZnVuY3Rpb24gVEVTVF91aW50TFNoaWZ0KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJl
cChgCisgICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYSA8PCBiOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tVaW50KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFt
LCAxKSwgbWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgMTI4KTsKKyAgICBjaGVja1VpbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDY1
NTM1KSwgbWFrZVVpbnQocHJvZ3JhbSwgMildKSwgMjYyMTQwKTsKKyAgICBjaGVja1VpbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0s
IC0xKSwgbWFrZVVpbnQocHJvZ3JhbSwgNSldKSwgNDI5NDk2NzI2NCk7CisgICAgY2hlY2tVaW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9n
cmFtLCAwKSwgbWFrZVVpbnQocHJvZ3JhbSwgMyldKSwgMCk7Cit9CisKK2Z1bmN0aW9uIFRFU1Rf
dWludFJTaGlmdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1aW50
IGZvbyh1aW50IGEsIHVpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPj4g
YjsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHBy
b2dyYW0sIDcpXSksIDApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgNjU1MzUpLCBtYWtlVWludChwcm9n
cmFtLCAyKV0pLCAxNjM4Myk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAtMSksIG1ha2VVaW50KHByb2dy
YW0sIDUpXSksIDEzNDIxNzcyNyk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAwKSwgbWFrZVVpbnQocHJv
Z3JhbSwgMyldKSwgMCk7Cit9CisKIGxldCBmaWx0ZXIgPSAvLiovOyAvLyBydW4gZXZlcnl0aGlu
ZyBieSBkZWZhdWx0CiBpZiAodGhpc1siYXJndW1lbnRzIl0pIHsKICAgICBmb3IgKGxldCBpID0g
MDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UeXBlLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9UeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBAIGNsYXNz
IFR5cGUgZXh0ZW5kcyBOb2RlIHsKICAgICBnZXQga2luZCgpIHsgcmV0dXJuIFR5cGU7IH0KICAg
ICBnZXQgaXNQdHIoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGdldCBpc0FycmF5UmVmKCkgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBnZXQgaXNSZWYoKSB7IHJldHVybiB0aGlzLmlzUHRyIHx8IHRo
aXMuaXNBcnJheVJlZjsgfQogICAgIGdldCBpc051bWJlcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgZ2V0IGlzSW50KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNGbG9hdCgpIHsgcmV0
dXJuIGZhbHNlOyB9CkBAIC00MSw1ICs0MiwxOSBAQCBjbGFzcyBUeXBlIGV4dGVuZHMgTm9kZSB7
CiAgICAgfQogICAgIAogICAgIGdldCBpbnN0YW50aWF0ZWRUeXBlKCkgeyByZXR1cm4gdGhpcy52
aXNpdChuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCkpOyB9CisgICAgCisgICAgLy8gSGF2ZSB0
byBjYWxsIHRoZXNlIG9uIHRoZSB1bmlmeU5vZGUuCisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9h
ZChvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBNYWtlUHRyRXhwcmVz
c2lvbihvcmlnaW4sIHZhbHVlKTsKKyAgICB9CisgICAgYXJndW1lbnRUeXBlRm9yQW5kT3Zlcmxv
YWQob3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQdHJUeXBlKG9yaWdpbiwgInRo
cmVhZCIsIHRoaXMpOworICAgIH0KKyAgICByZXR1cm5UeXBlRnJvbUFuZE92ZXJsb2FkKG9yaWdp
bikKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJp
bmcsICJCeS1wb2ludGVyIG92ZXJsb2FkIHJldHVybmVkIG5vbi1wb2ludGVyIHR5cGU6ICIgKyB0
aGlzKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5
cGVQYXJhbWV0ZXJSZXdyaXRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9UeXBlUGFyYW1ldGVyUmV3cml0ZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgVHlwZVBhcmFtZXRlclJld3Jp
dGVyIHsKKyAgICB2aXNpdENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIobm9kZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgQ29uc3RleHByVHlwZVBhcmFtZXRlcihub2RlLm9yaWdpbiwgbm9kZS5u
YW1lLCBub2RlLnR5cGUudmlzaXQobmV3IFJld3JpdGVyKCkpKTsKKyAgICB9CisgICAgCisgICAg
dmlzaXRUeXBlVmFyaWFibGUobm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVHlwZVZh
cmlhYmxlKG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUucHJvdG9jb2wpOworICAgIH0KK30K
KwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlVHJhY2tl
ci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFy
aWFibGVUcmFja2VyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1R5cGVWYXJpYWJsZVRyYWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBz
dHJpY3QiOworCitjbGFzcyBUeXBlVmFyaWFibGVUcmFja2VyIGV4dGVuZHMgVmlzaXRvciB7Cisg
ICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgdGhpcy5f
c2V0ID0gbmV3IFNldCgpOworICAgIH0KKyAgICAKKyAgICBnZXQgc2V0KCkgeyByZXR1cm4gdGhp
cy5fc2V0OyB9CisgICAgCisgICAgX2NvbnNpZGVyKHRoaW5nKQorICAgIHsKKyAgICAgICAgaWYg
KHRoaW5nLmlzVW5pZmlhYmxlKQorICAgICAgICAgICAgdGhpcy5fc2V0LmFkZCh0aGluZyk7Cisg
ICAgfQorICAgIAorICAgIHZpc2l0VHlwZVJlZihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5f
Y29uc2lkZXIobm9kZS50eXBlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRWYXJpYWJsZVJlZihu
b2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29uc2lkZXIodGhpcy52YXJpYWJsZSk7CisgICAg
fQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYWx1ZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYWx1ZS5qcwkocmV2aXNp
b24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUuanMJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDUgKzI4LDE0IEBAIGNsYXNzIFZhbHVlIGV4dGVuZHMgTm9kZSB7
CiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBWYWx1ZTsgfQogICAgIGdldCBpc0NvbnN0ZXhwcigp
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICAKKyAgICBiZWNvbWUob3RoZXJWYWx1ZSkKKyAgICB7CisgICAgICAgIC8vIE5PVEU6IE1h
a2Ugc3VyZSB0aGF0IElkZW50aXR5RXhwcmVzc2lvbiBpbXBsZW1lbnRzIHVuaWZ5Tm9kZSBhbmQg
YWxsIHRoYXQKKyAgICAgICAgbGV0IG9yaWdpbiA9IHRoaXMub3JpZ2luOworICAgICAgICB0aGlz
Ll9fcHJvdG9fXyA9IElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5cGU7CisgICAgICAgIHRoaXMu
X29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5fdGFyZ2V0ID0gb3RoZXJWYWx1ZTsKKyAg
ICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVm
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxl
UmVmLmpzCShyZXZpc2lvbiAyMjIxMjMpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9WYXJpYWJsZVJlZi5qcwkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDkgQEAgY2xhc3Mg
VmFyaWFibGVSZWYgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAgICAKICAgICBnZXQgbmFtZSgpIHsg
cmV0dXJuIHRoaXMuX25hbWU7IH0KICAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJldHVybiB0aGlz
LnZhcmlhYmxlLmlzQ29uc3RleHByOyB9Ci0gICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRo
aXMudmFyaWFibGUudW5pZnlOb2RlOyB9CisgICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRo
aXMudmFyaWFibGUudW5pZnlOb2RlOyB9IC8vIFRoaXMgb25seSBtYWtlcyBzZW5zZSB3aGVuIHRo
aXMgaXMgYSBjb25zdGV4cHIuCiAgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiAidGhyZWFkIjsgfQotICAgIGdldCB1bmlm
eU5vZGUoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxlOyB9CiAgICAgCiAgICAgdG9TdHJpbmcoKQog
ICAgIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkocmV2
aXNpb24gMjIyMTIzKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjQsMTIgKzI0LDcgQEAKICAqLwogInVzZSBzdHJpY3QiOwog
Ci1jbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewotICAgIGNvbnN0cnVjdG9yKCkK
LSAgICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgfQotICAgIAorY2xhc3MgVmlzaXRvciB7CiAg
ICAgdmlzaXRQcm9ncmFtKG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQg
b2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCkBAIC02OCw4ICs2Myw4IEBAIGNsYXNzIFZpc2l0
b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXROYXRpdmVGdW5jSW5zdGFu
Y2Uobm9kZSkKICAgICB7Ci0gICAgICAgIG5vZGUuZnVuYy52aXNpdCh0aGlzKTsKICAgICAgICAg
dGhpcy52aXNpdEZ1bmMobm9kZSk7CisgICAgICAgIG5vZGUuZnVuYy52aXNpdEltcGxlbWVudGF0
aW9uRGF0YShub2RlLmltcGxlbWVudGF0aW9uRGF0YSwgdGhpcyk7CiAgICAgfQogICAgIAogICAg
IHZpc2l0QmxvY2sobm9kZSkKQEAgLTEwMCw4ICs5NSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5k
cyBWaXNpdG9yQmFzZSB7CiAgICAgewogICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2Yg
bm9kZS50eXBlQXJndW1lbnRzKQogICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMp
OwotICAgICAgICBpZiAobm9kZS50eXBlKQotICAgICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRo
aXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgfQogICAgIAog
ICAgIHZpc2l0TmF0aXZlVHlwZShub2RlKQpAQCAtMTM0LDggKzEyOCw3IEBAIGNsYXNzIFZpc2l0
b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRUeXBlVmFyaWFibGUobm9k
ZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLnByb3RvY29sKQotICAgICAgICAgICAgbm9kZS5w
cm90b2NvbC52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnByb3RvY29sLCB0
aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRDb25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUp
CkBAIC0xNzcsMTQgKzE3MCwyMyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2Ug
ewogICAgIHZpc2l0VmFyaWFibGVEZWNsKG5vZGUpCiAgICAgewogICAgICAgICBub2RlLnR5cGUu
dmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLmluaXRpYWxpemVyKQotICAgICAgICAgICAg
bm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmlu
aXRpYWxpemVyLCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRBc3NpZ25tZW50KG5vZGUp
CiAgICAgewogICAgICAgICBub2RlLmxocy52aXNpdCh0aGlzKTsKICAgICAgICAgbm9kZS5yaHMu
dmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKKyAgICB9
CisgICAgCisgICAgdmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUpCisgICAgewor
ICAgICAgICBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5vbGRWYWx1ZVZh
ci52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5uZXdWYWx1ZVZhci52aXNpdCh0aGlzKTsKKyAg
ICAgICAgbm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5yZXN1bHRF
eHAudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNz
aW9uKG5vZGUpCkBAIC0xOTIsMTEgKzE5NCwyNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlz
aXRvckJhc2UgewogICAgICAgICBub2RlLnB0ci52aXNpdCh0aGlzKTsKICAgICB9CiAgICAgCisg
ICAgX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAg
Tm9kZS52aXNpdChub2RlLmJhc2VUeXBlLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2Rl
LmNhbGxGb3JHZXQsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZv
ckdldCwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5jYWxsRm9yQW5kLCB0aGlzKTsK
KyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JBbmQsIHRoaXMpOworICAgICAg
ICBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvclNldCwgdGhpcyk7CisgICAgfQorICAgIAogICAgIHZp
c2l0RG90RXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbm9kZS5zdHJ1Y3QudmlzaXQo
dGhpcyk7Ci0gICAgICAgIGlmIChub2RlLnN0cnVjdFR5cGUpCi0gICAgICAgICAgICBub2RlLnN0
cnVjdFR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbihub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24o
bm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUuYXJyYXkudmlzaXQodGhpcyk7CisgICAgICAgIG5v
ZGUuaW5kZXgudmlzaXQodGhpcyk7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbihub2RlKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRNYWtlUHRyRXhwcmVzc2lv
bihub2RlKQpAQCAtMjA3LDggKzIyNSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9y
QmFzZSB7CiAgICAgdmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAg
ICAgICBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUubnVtRWxlbWVu
dHMpCi0gICAgICAgICAgICBub2RlLm51bUVsZW1lbnRzLnZpc2l0KHRoaXMpOworICAgICAgICBO
b2RlLnZpc2l0KG5vZGUubnVtRWxlbWVudHMsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNp
dENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbihub2RlKQpAQCAtMjI0LDggKzI0MSw3IEBA
IGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgewogICAgICAgICBub2Rl
LmNvbmRpdGlvbmFsLnZpc2l0KHRoaXMpOwogICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7
Ci0gICAgICAgIGlmIChub2RlLmVsc2VCb2R5KQotICAgICAgICAgICAgbm9kZS5lbHNlQm9keS52
aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmVsc2VCb2R5LCB0aGlzKTsKICAg
ICB9CiAgICAgCiAgICAgdmlzaXRXaGlsZUxvb3Aobm9kZSkKQEAgLTI0MiwxOSArMjU4LDE1IEBA
IGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRGb3JM
b29wKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5pbml0aWFsaXphdGlvbikKLSAgICAg
ICAgICAgIG5vZGUuaW5pdGlhbGl6YXRpb24udmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2Rl
LmNvbmRpdGlvbikKLSAgICAgICAgICAgIG5vZGUuY29uZGl0aW9uLnZpc2l0KHRoaXMpOwotICAg
ICAgICBpZiAobm9kZS5pbmNyZW1lbnQpCi0gICAgICAgICAgICBub2RlLmluY3JlbWVudC52aXNp
dCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRpYWxpemF0aW9uLCB0aGlzKTsK
KyAgICAgICAgTm9kZS52aXNpdChub2RlLmNvbmRpdGlvbiwgdGhpcyk7CisgICAgICAgIE5vZGUu
dmlzaXQobm9kZS5pbmNyZW1lbnQsIHRoaXMpOwogICAgICAgICBub2RlLmJvZHkudmlzaXQodGhp
cyk7CiAgICAgfQogCiAgICAgdmlzaXRSZXR1cm4obm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChu
b2RlLnZhbHVlKQotICAgICAgICAgICAgbm9kZS52YWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAg
Tm9kZS52aXNpdChub2RlLnZhbHVlLCB0aGlzKTsKICAgICB9CiAKICAgICB2aXNpdENvbnRpbnVl
KG5vZGUpCkBAIC0yNzIsOCArMjg0LDcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JC
YXNlIHsKICAgICAKICAgICB2aXNpdEdlbmVyaWNMaXRlcmFsVHlwZShub2RlKQogICAgIHsKLSAg
ICAgICAgaWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsK
KyAgICAgICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgICAgICBub2RlLnByZWZl
cnJlZFR5cGUudmlzaXQodGhpcyk7CiAgICAgfQogICAgIApAQCAtMjg4LDggKzI5OSw3IEBAIGNs
YXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXROdWxsVHlw
ZShub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUu
dHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwog
ICAgIH0KICAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCkBAIC0yOTcsMTYgKzMw
NywxNSBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICBmb3Ig
KGxldCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBlQXJndW1lbnRzKQogICAgICAgICAgICAgdHlw
ZUFyZ3VtZW50LnZpc2l0KHRoaXMpOwogICAgICAgICBmb3IgKGxldCBhcmd1bWVudCBvZiBub2Rl
LmFyZ3VtZW50TGlzdCkKLSAgICAgICAgICAgIGFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAgICAg
ICAgICAgTm9kZS52aXNpdChhcmd1bWVudCwgdGhpcyk7CiAgICAgICAgIGxldCBhY3R1YWxUeXBl
QXJndW1lbnRzID0gbm9kZS5hY3R1YWxUeXBlQXJndW1lbnRzOwogICAgICAgICBpZiAoYWN0dWFs
VHlwZUFyZ3VtZW50cykgewogICAgICAgICAgICAgZm9yIChsZXQgYXJndW1lbnQgb2YgYWN0dWFs
VHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAg
ICAgICAgfQotICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQotICAgICAgICAgICAgbm9kZS5y
ZXR1cm5UeXBlLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5yZXN1bHRUeXBlKQotICAg
ICAgICAgICAgbm9kZS5yZXN1bHRUeXBlLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0
KG5vZGUubmF0aXZlRnVuY0luc3RhbmNlLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2Rl
LnJldHVyblR5cGUsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZSwg
dGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0TG9naWNhbE5vdChub2RlKQpAQCAtMzE2LDIx
ICszMjUsMjMgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAg
ICB2aXNpdEZ1bmN0aW9uTGlrZUJsb2NrKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5y
ZXR1cm5UeXBlKQotICAgICAgICAgICAgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpOworICAg
ICAgICBOb2RlLnZpc2l0KG5vZGUucmV0dXJuVHlwZSwgdGhpcyk7CiAgICAgICAgIGZvciAobGV0
IGFyZ3VtZW50IG9mIG5vZGUuYXJndW1lbnRMaXN0KQogICAgICAgICAgICAgYXJndW1lbnQudmlz
aXQodGhpcyk7CiAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlciBvZiBub2RlLnBhcmFtZXRlcnMp
CiAgICAgICAgICAgICBwYXJhbWV0ZXIudmlzaXQodGhpcyk7CiAgICAgICAgIG5vZGUuYm9keS52
aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUucmVzdWx0VHlwZSkKLSAgICAgICAgICAgIG5v
ZGUucmVzdWx0VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3Vs
dFR5cGUsIHRoaXMpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkK
KyAgICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewotICAgICAgICBub2RlLmFy
Z3VtZW50LnZpc2l0KHRoaXMpOwotICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAg
ICAgIE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJ
ZGVudGl0eUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUudGFyZ2V0LnZpc2l0
KHRoaXMpOwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VmlzaXRvckJhc2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVmlzaXRvckJhc2UuanMJKHJldmlzaW9uIDIyMjEyMykKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzCShub25leGlzdGVudCkKQEAgLTEsMzIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJp
Y3QiOwotCi1jbGFzcyBWaXNpdG9yQmFzZSB7Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fbWVtb1RhYmxlID0gbmV3IE1hcCgpOwotICAgIH0KLX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321059</attachid>
            <date>2017-09-17 17:46:48 -0700</date>
            <delta_ts>2017-09-17 22:11:35 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>189922</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5OCBAQAorMjAxNy0wOS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEZpZ3VyZSBvdXQgaG93IFdTTCB3aWxsIHN1cHBvcnQgZmllbGQgb3ZlcmxvYWRz
IGxpa2UgZmxvYXQ0Lnh6IGFuZCBmcmllbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdTTCBuZWVkcyB0byBzdXBwb3J0IGdldHRlcnMg
YW5kIHNldHRlcnMsIHNvIHRoYXQgd2UgY2FuIGRvIHRoaW5ncyBsaWtlOgorICAgICAgICAKKyAg
ICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAgICB2ZWMuenggPSBmbG9hdDIoMSwgMik7
CisgICAgICAgICAgICAvLyB6ID0gMSwgeCA9IDIKKyAgICAgICAgCisgICAgICAgIFRoZXJlJ3Mg
bm8gd2F5IHRvIGV4cHJlc3MgdGhpcyBmbG9hdDQuenggcmV0dXJuaW5nIGEgcG9pbnRlciB0byBz
b21ldGhpbmcsIHNpbmNlIGl0J3MgZG9pbmcgc3dpenpsaW5nLgorICAgICAgICBJdCBjb3VsZCBy
ZXR1cm4gYSBjcmF6eSBzbWFydCBwb2ludGVyLCBidXQgdGhhdCBzb3VuZHMgbGlrZSBhIGxvdCBv
ZiB3b3JrLiBTbywgSSBkZWNpZGVkIHRvIGdvIGZvcgorICAgICAgICBsdmFsdWUgZW11bGF0aW9u
IGluc3RlYWQuCisgICAgICAgIAorICAgICAgICBUaGUgaWRlYSBvZiBsdmFsdWUgZW11bGF0aW9u
IGlzIHRoYXQgd2hlbiB3ZSB0cnkgdG8gbWFrZSBhbiBsdmFsdWUgd29yayBmb3IgYW4gYXNzaWdu
bWVudCBvciBSTVcKKyAgICAgICAgb3BlcmF0aW9uIChsaWtlICs9IGFuZCBmcmllbmRzKSwgd2Ug
Y29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgd2UgaGF2ZSB0byBmaXJzdCBsb2FkIHRoZSB2
YWx1ZSB1c2luZworICAgICAgICBhIGdldHRlciBhbmQgdGhlbiBzdG9yZSBpdCB3aXRoIGEgc2V0
dGVyLiBUaGlzIHBhdGNoIG1ha2VzIHRoaXMgd29yayByZWN1cnNpdmVseSwgc28gdGhhdCB0aGlz
IHdpbGwKKyAgICAgICAgd29yazoKKyAgICAgICAgCisgICAgICAgICAgICBmbG9hdDQgdmVjOwor
ICAgICAgICAgICAgdmVjLnp3eC55ID0gNDI7CisgICAgICAgICAgICAvLyBub3cgdyBpcyA0Mgor
ICAgICAgICAKKyAgICAgICAgVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRlY29tcG9zZSBpdCBhdXRv
bWF0aWNhbGx5OgorICAgICAgICAKKyAgICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAg
ICBmbG9hdDMgdG1wID0gdmVjLnp3eDsKKyAgICAgICAgICAgIHRtcC55ID0gNDI7CisgICAgICAg
ICAgICB2ZWMuend4ID0gdG1wOworICAgICAgICAKKyAgICAgICAgVGhpcydsbCB3b3JrIHRvIGFu
eSBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIFRvIGNoZWNrIGlmIHRoaXMgd29ya3MsIHRoaXMg
cGF0Y2ggYWRkcyB0d28gc3Vic3RhbnRpYWwgbmV3IHRlc3RzIGNhbGxlZCBURVNUX2dlbmVyaWNB
Y2Nlc3NvcnMoKSBhbmQKKyAgICAgICAgVEVTVF9iaXRTdWJzY3JpcHRBY2Nlc3NvcigpLiBUaGlz
IHRlc3RzIHRoYXQgdGhpcyBzdHVmZiB3b3JrcyB3aXRoIGEgbG90IG9mIGdlbmVyaWMgdHlwZXMs
IGFuZCB0aGF0IGl0J3MKKyAgICAgICAgcG9zc2libGUgdG8gdHVybiBpbnRlZ2VycyBpbnRvIGJp
dHZlY3RvcnMgdXNpbmcgc3Vic2NyaXB0IG92ZXJsb2FkaW5nLiBUaGlzIHBhdGNoIGFsc28gYWRk
cyBzbWFsbGVyIHVuaXQKKyAgICAgICAgdGVzdHMgYWxzby4KKyAgICAgICAgCisgICAgICAgIE9o
LCBhbmQgaXQncyBub3cgcG9zc2libGUgdG8gZ2V0IGFuIGFycmF5J3MgbGVuZ3RoLgorCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzOgorICAgICAgICAo
bmVlZHNQcmltaXRpdmVQcm90b2NvbCk6CisgICAgICAgIChwcm90b2NvbFN1ZmZpeCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKEFu
b255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5n
ZXQgb3JpZ2luKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5nZXQgbmFt
ZSk6CisgICAgICAgIChBbm9ueW1vdXNWYXJpYWJsZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qczoKKyAgICAgICAg
KEFycmF5UmVmVHlwZS5wcm90b3R5cGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZCk6CisgICAgICAg
IChBcnJheVJlZlR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanM6CisgICAgICAgIChB
cnJheVR5cGUucHJvdG90eXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQpOgorICAgICAgICAoQXJy
YXlUeXBlLnByb3RvdHlwZS5hcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCk6CisgICAgICAgIChB
cnJheVR5cGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQu
anM6CisgICAgICAgIChBc3NpZ25tZW50KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DYWxsQXNzaWdubWVudC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9uLnJl
c29sdmUpOgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmUpOgorICAg
ICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmVUb092ZXJsb2FkKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzOgorICAgICAgICAoQ2hlY2tl
ci5wcm90b3R5cGUudmlzaXRQcm9ncmFtKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZp
c2l0RnVuY0RlZik6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmMp
OgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KENoZWNrZXIucHJvdG90eXBlLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0RG90RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVja2VyLnBy
b3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9uKToKKyAgICAgICAgKENoZWNrZXIpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxl
LnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOiBEZWxldGVkLgorICAgICAgICAoQ2hlY2tlci5wcm90
b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxlLnByb3RvdHlwZS52aXNp
dFZhcmlhYmxlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0
UHJvdG9jb2xEZWNsLk5vdGljZVR5cGVWYXJpYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdFByb3RvY29sRGVjbC5zZXQgdGhyb3cpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qczoKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzOgorICAgICAgICAo
RG90RXhwcmVzc2lvbik6CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc3Ry
dWN0KToKKyAgICAgICAgKERvdEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBnZXRGdW5jTmFtZSk6
CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoRG90RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHNldEZ1bmNOYW1lKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzOgorICAgICAgICAoRUJ1ZmZlckJ1aWxk
ZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAoRUJ1ZmZlckJ1
aWxkZXIucHJvdG90eXBlLnZpc2l0TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAgICAgICAoRXZhbHVhdG9y
LnByb3RvdHlwZS52aXNpdElkZW50aXR5RXhwcmVzc2lvbik6CisgICAgICAgIChFdmFsdWF0b3Iu
cHJvdG90eXBlLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoRXZhbHVhdG9yLnBy
b3RvdHlwZS52aXNpdEFub255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEV2YWx1YXRvci5wcm90
b3R5cGUudmlzaXREb3RFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEV2YWx1YXRvci5w
cm90b3R5cGUudmlzaXRMZXRFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzOgorICAgICAgICAoRXhwcmVzc2lv
bkZpbmRlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzOgorICAgICAgICAo
Rm9yTG9vcC5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoRm9yTG9vcCk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanM6CisgICAg
ICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1
YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRDYWxsRXhwcmVzc2lvbik6CisgICAgICAgIChGdW5j
SW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1YnN0aXR1dGlv
bik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9y
LnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGUucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVu
Yyk6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUpOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlKToK
KyAgICAgICAgKEZ1bmNJbnN0YW50aWF0b3IpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qczogQWRkZWQuCisgICAgICAgIChJZGVudGl0eUV4
cHJlc3Npb24pOgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgdGFy
Z2V0KToKKyAgICAgICAgKElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0NvbnN0ZXhw
cik6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1ZSk6
CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJv
dG90eXBlLmdldCBhcnJheSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdl
dCBpbmRleCk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1
ZSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgZ2V0RnVuY05hbWUpOgor
ICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc2V0RnVuY05hbWUpOgorICAgICAg
ICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanM6CisgICAgICAgIChpbmZlclR5
cGVzRm9yQ2FsbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpz
OgorICAgICAgICAoX2lubGluZUZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzOgorICAgICAgICAoSW5saW5lci5wcm90b3R5cGUudmlzaXRDYWxs
RXhwcmVzc2lvbik6CisgICAgICAgIChJbmxpbmVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Np
b24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNp
Y3MuanM6CisgICAgICAgIChJbnRyaW5zaWNzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanM6CisgICAgICAgIChNYWtlQXJy
YXlSZWZFeHByZXNzaW9uLnByb3RvdHlwZS5iZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJl
c3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVD
b250ZXh0LmpzOgorICAgICAgICAoTmFtZUNvbnRleHQpOgorICAgICAgICAoTmFtZUNvbnRleHQu
cHJvdG90eXBlLmFkZCk6CisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZG9TdGF0ZW1l
bnQpOgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmhhbmRsZURlZmluaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKE5hbWVDb250ZXh0LnByb3RvdHlwZS5pc0RlZmluZWQpOiBEZWxldGVk
LgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmRlZmluZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZGVmaW5lQWxsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanM6CisgICAgICAgIChOYW1l
UmVzb2x2ZXIucHJvdG90eXBlLmRvU3RhdGVtZW50KToKKyAgICAgICAgKE5hbWVSZXNvbHZlci5w
cm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAgICAoTmFtZVJlc29sdmVyLnByb3Rv
dHlwZS52aXNpdFByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL05hdGl2ZUZ1bmMuanM6CisgICAgICAgIChOYXRpdmVGdW5jKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanM6CisgICAgICAgIChO
YXRpdmVGdW5jSW5zdGFuY2UpOgorICAgICAgICAoTmF0aXZlRnVuY0luc3RhbmNlLnByb3RvdHlw
ZS5nZXQgaW1wbGVtZW50YXRpb25EYXRhKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob2RlLmpzOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUudmlzaXQpOgorICAgICAgICAo
Tm9kZS52aXNpdCk6CisgICAgICAgIChOb2RlLnVuaWZ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0RG90
RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLnByb3RvdHlw
ZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAg
ICAgKGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KToKKyAgICAgICAgKHBhcnNlUG9zc2libGVT
dWZmaXgpOgorICAgICAgICAoZmluaXNoUGFyc2luZ1ByZUluY3JlbWVudCk6CisgICAgICAgIChn
ZW5lcmljUGFyc2VDb21tYUV4cHJlc3Npb24pOgorICAgICAgICAocGFyc2VGdW5jTmFtZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qczoKKyAgICAgICAgKHBy
ZXBhcmUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanM6Cisg
ICAgICAgIChQcm9ncmFtKToKKyAgICAgICAgKFByb2dyYW0ucHJvdG90eXBlLmdldCBnbG9iYWxO
YW1lQ29udGV4dCk6CisgICAgICAgIChQcm9ncmFtLnByb3RvdHlwZS5hZGQpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qczogQWRk
ZWQuCisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgcmVzdWx0VHlwZSk6CisgICAgICAgIChQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90eXBlLnJld3JpdGVBZnRlckNsb25pbmcpOgor
ICAgICAgICAoUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS51cGRhdGVDYWxsc0Fm
dGVyQ2hhbmdpbmdCYXNlKToKKyAgICAgICAgKFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wcm90
b3R5cGUuZW1pdEdldCk6CisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90
eXBlLmVtaXRTZXQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5
UmVzb2x2ZXIuanM6IEFkZGVkLgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUu
X3Zpc2l0UHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5
cGUudmlzaXREb3RFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJvdG90
eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJv
dG90eXBlLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZl
ci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFBy
b3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0QXNzaWdubWVudCk6CisgICAgICAgIChQcm9w
ZXJ0eVJlc29sdmVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVydHlS
ZXNvbHZlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KFByb3BlcnR5UmVzb2x2ZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0
clR5cGUuanM6CisgICAgICAgIChQdHJUeXBlLnByb3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLnJldHVyblR5cGVGcm9tQW5kT3Zlcmxv
YWQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24uanM6IEFkZGVkLgorICAgICAgICAoUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbik6
CisgICAgICAgIChSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgbFZhbHVl
KToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm9sZFZhbHVl
UmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm5ld1Zh
bHVlUmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLnRv
U3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMu
anM6CisgICAgICAgIChjcmVhdGVOYW1lUmVzb2x2ZXIpOgorICAgICAgICAocmVzb2x2ZU5hbWVz
SW5UeXBlcyk6CisgICAgICAgIChyZXNvbHZlTmFtZXNJblByb3RvY29scyk6CisgICAgICAgIChy
ZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlTmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwu
anM6CisgICAgICAgIChyZXNvbHZlT3ZlcmxvYWRJbXBsKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qczogQWRkZWQuCisgICAgICAgIChyZXNv
bHZlUHJvcGVydGllcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2
ZVR5cGVEZWZzLmpzOgorICAgICAgICAocmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyk6CisgICAgICAg
IChyZXNvbHZlVHlwZURlZnNJblByb3RvY29scyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnNJ
bkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnMpOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanM6CisgICAgICAgIChS
ZXR1cm5DaGVja2VyLnByb3RvdHlwZS5faXNCb29sQ2FzdEZyb21MaXRlcmFsVHJ1ZSk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanM6CisgICAgICAgIChSZXdy
aXRlcik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgor
ICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJlZik6CisgICAgICAgIChSZXdy
aXRlci5wcm90b3R5cGUudmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVy
LnByb3RvdHlwZS5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKToKKyAgICAgICAgKFJl
d3JpdGVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJldHVybik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRHZW5l
cmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0TnVsbFR5
cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnByb2Nlc3NEZXJpdmVkQ2FsbERhdGEp
OgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgorICAg
ICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0RnVuY3Rpb25MaWtlQmxvY2spOgorICAgICAg
ICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0SWZTdGF0ZW1lbnQpOgorICAgICAgICAoUmV3cml0
ZXIucHJvdG90eXBlLnZpc2l0Rm9yTG9vcCk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUu
dmlzaXRBbm9ueW1vdXNWYXJpYWJsZSk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0
TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RhbmRhcmRMaWJyYXJ5LmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0cnVjdExheW91dEJ1aWxkZXIuanM6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRCdWlsZGVyLnBy
b3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmNJbnN0YW5jZSk6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRC
dWlsZGVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpz
OgorICAgICAgICAoU3RydWN0VHlwZS5wcm90b3R5cGUuaW5zdGFudGlhdGUpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qczoKKyAgICAgICAgKFN1YnN0
aXR1dGlvbi5wcm90b3R5cGUuZ2V0IG1hcCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanM6IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qczogQWRkZWQuCisg
ICAgICAgIChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmNyZWF0ZVR5cGVQYXJhbWV0ZXJzKToK
KyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuKToKKyAgICAgICAgKHN5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlRmllbGRUeXBlKToKKyAgICAgICAgKHN5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlVHlwZVJlZik6CisgICAgICAgIChzeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzLnNldHVwQW5kZXIpOgorICAgICAgICAoc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29y
cyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChjaGVja051bWJl
cik6CisgICAgICAgIChURVNUX3NpbXBsZVByb3RvY29sKToKKyAgICAgICAgKFRFU1RfYXNzaWdu
TGVuZ3RoKToKKyAgICAgICAgKFRFU1Rfc2ltcGxlU2V0dGVyKToKKyAgICAgICAgKFRFU1RfZ2Vu
ZXJpY0FjY2Vzc29ycyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5q
czoKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmdldCBpc1JlZik6CisgICAgICAgIChUeXBlLnBy
b3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBl
LmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLnJl
dHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQpOgorICAgICAgICAoVHlwZSk6CisgICAgICAgICogV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzOiBBZGRlZC4KKyAg
ICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlzaXRDb25zdGV4cHJUeXBl
UGFyYW1ldGVyKToKKyAgICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRUeXBlVmFyaWFibGUpOgorICAgICAgICAoVHlwZVBhcmFtZXRlclJld3JpdGVyKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFR5cGVWYXJpYWJsZVRyYWNrZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1ZhbHVlLmpzOgorICAgICAgICAoVmFsdWUucHJvdG90eXBlLmJlY29tZSk6
CisgICAgICAgIChWYWx1ZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFy
aWFibGVSZWYuanM6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IGFkZHJlc3NTcGFjZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZp
c2l0b3IucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKToKKyAgICAgICAgKFZpc2l0
b3IucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xEZWNsKToKKyAgICAgICAgKFZpc2l0b3IpOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzOiBS
ZW1vdmVkLgorCiAyMDE3LTA5LTE3ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBs
ZS5jb20+CiAKICAgICAgICAgV1NMIG5lZWRzIGZsb2F0IGFuZCBkb3VibGUgc3VwcG9ydApJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5qcwkocmV2
aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1Nw
YWNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxNiBAQCBmdW5jdGlvbiBpc0FkZHJl
c3NTcGFjZShhZGRyZXNzU3BhY2UpCiAgICAgfQogfQogCitmdW5jdGlvbiBuZWVkc1ByaW1pdGl2
ZVByb3RvY29sKGFkZHJlc3NTcGFjZSkKK3sKKyAgICByZXR1cm4gYWRkcmVzc1NwYWNlICE9ICJ0
aHJlYWQiOworfQorCitmdW5jdGlvbiBwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpCit7Cisg
ICAgcmV0dXJuIG5lZWRzUHJpbWl0aXZlUHJvdG9jb2woYWRkcmVzc1NwYWNlKSA/ICI6cHJpbWl0
aXZlIiA6ICIiOworfQorCiBmdW5jdGlvbiB2YWxpZGF0ZUFkZHJlc3NTcGFjZShhZGRyZXNzU3Bh
Y2UpCiB7CiAgICAgaWYgKCFpc0FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpKQpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyAr
MjksMTQgQEAgbG9hZCgiVHlwZS5qcyIpOwogbG9hZCgiUmVmZXJlbmNlVHlwZS5qcyIpOwogbG9h
ZCgiVmFsdWUuanMiKTsKIGxvYWQoIkV4cHJlc3Npb24uanMiKTsKLWxvYWQoIlZpc2l0b3JCYXNl
LmpzIik7CiBsb2FkKCJSZXdyaXRlci5qcyIpOwogbG9hZCgiVmlzaXRvci5qcyIpOwogbG9hZCgi
Q3JlYXRlTGl0ZXJhbC5qcyIpOwogbG9hZCgiQ3JlYXRlTGl0ZXJhbFR5cGUuanMiKTsKK2xvYWQo
IlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcyIpOwogCiBsb2FkKCJBZGRyZXNzU3BhY2UuanMi
KTsKK2xvYWQoIkFub255bW91c1ZhcmlhYmxlLmpzIik7CiBsb2FkKCJBcnJheVJlZlR5cGUuanMi
KTsKIGxvYWQoIkFycmF5VHlwZS5qcyIpOwogbG9hZCgiQXNzaWdubWVudC5qcyIpOwpAQCAtNDMs
NyArNDQsNiBAQCBsb2FkKCJBdXRvV3JhcHBlci5qcyIpOwogbG9hZCgiQmxvY2suanMiKTsKIGxv
YWQoIkJvb2xMaXRlcmFsLmpzIik7CiBsb2FkKCJCcmVhay5qcyIpOwotbG9hZCgiQ2FsbEFzc2ln
bm1lbnQuanMiKTsKIGxvYWQoIkNhbGxFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJDYWxsRnVuY3Rp
b24uanMiKTsKIGxvYWQoIkNoZWNrLmpzIik7CkBAIC03MSw2ICs3MSw3IEBAIGxvYWQoIkV2YWx1
YXRpb25Db21tb24uanMiKTsKIGxvYWQoIkV2YWx1YXRvci5qcyIpOwogbG9hZCgiRXhwcmVzc2lv
bkZpbmRlci5qcyIpOwogbG9hZCgiRmllbGQuanMiKTsKK2xvYWQoIkZpbmRIaWdoWm9tYmllcy5q
cyIpOwogbG9hZCgiRmxhdHRlblByb3RvY29sRXh0ZW5kcy5qcyIpOwogbG9hZCgiRmxvYXRMaXRl
cmFsLmpzIik7CiBsb2FkKCJGbG9hdExpdGVyYWxUeXBlLmpzIik7CkBAIC04MCw3ICs4MSwxMCBA
QCBsb2FkKCJGdW5jRGVmLmpzIik7CiBsb2FkKCJGdW5jSW5zdGFudGlhdG9yLmpzIik7CiBsb2Fk
KCJGdW5jUGFyYW1ldGVyLmpzIik7CiBsb2FkKCJGdW5jdGlvbkxpa2VCbG9jay5qcyIpOworbG9h
ZCgiSGlnaFpvbWJpZUZpbmRlci5qcyIpOworbG9hZCgiSWRlbnRpdHlFeHByZXNzaW9uLmpzIik7
CiBsb2FkKCJJZlN0YXRlbWVudC5qcyIpOworbG9hZCgiSW5kZXhFeHByZXNzaW9uLmpzIik7CiBs
b2FkKCJJbmZlclR5cGVzRm9yQ2FsbC5qcyIpOwogbG9hZCgiSW5saW5lLmpzIik7CiBsb2FkKCJJ
bmxpbmVyLmpzIik7CkBAIC04OCw3ICs5Miw2IEBAIGxvYWQoIkluc3RhbnRpYXRlSW1tZWRpYXRl
cy5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbC5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbFR5cGUuanMi
KTsKIGxvYWQoIkludHJpbnNpY3MuanMiKTsKLWxvYWQoIkxldEV4cHJlc3Npb24uanMiKTsKIGxv
YWQoIkxleGVyLmpzIik7CiBsb2FkKCJMZXhlclRva2VuLmpzIik7CiBsb2FkKCJMaXRlcmFsVHlw
ZUNoZWNrZXIuanMiKTsKQEAgLTEwMiwyMCArMTA1LDI0IEBAIGxvYWQoIk5hdGl2ZUZ1bmMuanMi
KTsKIGxvYWQoIk5hdGl2ZUZ1bmNJbnN0YW5jZS5qcyIpOwogbG9hZCgiTmF0aXZlVHlwZS5qcyIp
OwogbG9hZCgiTmF0aXZlVHlwZUluc3RhbmNlLmpzIik7Citsb2FkKCJOb3JtYWxVc2VQcm9wZXJ0
eVJlc29sdmVyLmpzIik7CiBsb2FkKCJOdWxsTGl0ZXJhbC5qcyIpOwogbG9hZCgiTnVsbFR5cGUu
anMiKTsKIGxvYWQoIk92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiKTsKIGxvYWQoIlBhcnNl
LmpzIik7CiBsb2FkKCJQcmVwYXJlLmpzIik7CiBsb2FkKCJQcm9ncmFtLmpzIik7Citsb2FkKCJQ
cm9wZXJ0eVJlc29sdmVyLmpzIik7CiBsb2FkKCJQcm90b2NvbC5qcyIpOwogbG9hZCgiUHJvdG9j
b2xEZWNsLmpzIik7CiBsb2FkKCJQcm90b2NvbEZ1bmNEZWNsLmpzIik7CiBsb2FkKCJQcm90b2Nv
bFJlZi5qcyIpOwogbG9hZCgiUHRyVHlwZS5qcyIpOworbG9hZCgiUmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5qcyIpOwogbG9hZCgiUmVjdXJzaW9uQ2hlY2tlci5qcyIpOwogbG9hZCgiUmVzb2x2
ZU5hbWVzLmpzIik7CiBsb2FkKCJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIik7Citsb2FkKCJSZXNv
bHZlUHJvcGVydGllcy5qcyIpOwogbG9hZCgiUmVzb2x2ZVR5cGVEZWZzLmpzIik7CiBsb2FkKCJS
ZXR1cm4uanMiKTsKIGxvYWQoIlJldHVybkNoZWNrZXIuanMiKTsKQEAgLTEyNCwxMiArMTMxLDE0
IEBAIGxvYWQoIlN0YW5kYXJkTGlicmFyeS5qcyIpOwogbG9hZCgiU3RydWN0TGF5b3V0QnVpbGRl
ci5qcyIpOwogbG9hZCgiU3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vic3RpdHV0aW9uLmpzIik7
Ci1sb2FkKCJTdWZmaXhDYWxsQXNzaWdubWVudC5qcyIpOworbG9hZCgiU3ludGhlc2l6ZVN0cnVj
dEFjY2Vzc29ycy5qcyIpOwogbG9hZCgiVHlwZURlZi5qcyIpOwogbG9hZCgiVHlwZURlZlJlc29s
dmVyLmpzIik7CiBsb2FkKCJUeXBlT3JWYXJpYWJsZVJlZi5qcyIpOworbG9hZCgiVHlwZVBhcmFt
ZXRlclJld3JpdGVyLmpzIik7CiBsb2FkKCJUeXBlUmVmLmpzIik7CiBsb2FkKCJUeXBlVmFyaWFi
bGUuanMiKTsKK2xvYWQoIlR5cGVWYXJpYWJsZVRyYWNrZXIuanMiKTsKIGxvYWQoIlR5cGVkVmFs
dWUuanMiKTsKIGxvYWQoIlVpbnRMaXRlcmFsLmpzIik7CiBsb2FkKCJVaW50TGl0ZXJhbFR5cGUu
anMiKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1Zhcmlh
YmxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255
bW91c1ZhcmlhYmxlLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3Ry
aWN0IjsKKworbGV0IGFub255bW91c1ZhcmlhYmxlQ291bnQgPSAwOworCitjbGFzcyBBbm9ueW1v
dXNWYXJpYWJsZSBleHRlbmRzIFZhbHVlIHsKKyAgICAvLyBZb3UgaGF2ZSB0byBpbml0aWFsaXpl
IHRoZSB2YXJpYWJsZSdzIHZhbHVlIGJlZm9yZSB1c2UsIGJ1dCB0aGF0IGNvdWxkIGJlIHF1aXRl
IGxhdGUuCisgICAgY29uc3RydWN0b3Iob3JpZ2luLCB0eXBlID0gbnVsbCkKKyAgICB7CisgICAg
ICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhp
cy5pbmRleCA9IGFub255bW91c1ZhcmlhYmxlQ291bnQrKzsKKyAgICAgICAgdGhpcy50eXBlID0g
dHlwZTsKKyAgICB9CisgICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdp
bjsgfQorICAgIGdldCBuYW1lKCkgeyByZXR1cm4gImFub25WYXI8IiArIHRoaXMuaW5kZXggKyAi
PiI7IH0KKyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5u
YW1lOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJy
YXlSZWZUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0FycmF5UmVmVHlwZS5qcwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwx
NSBAQCBjbGFzcyBBcnJheVJlZlR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlCiAgICAgCiAgICAg
Z2V0IGlzQXJyYXlSZWYoKSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBhcmd1bWVudEZvckFuZE92
ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAg
fQorICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzOworICAgIH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiB0aGlzLmVsZW1lbnRUeXBlICsgIltdICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanMJKHJldmlzaW9uIDIy
MjEzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtNzMsNSArNzMsMTYgQEAgY2xhc3MgQXJyYXlUeXBlIGV4dGVuZHMgVHlw
ZSB7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlm
aWNhdGlvbkNvbnRleHQsIG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CisKKyAgICBhcmd1bWVu
dEZvckFuZE92ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0
ID0gbmV3IE1ha2VBcnJheVJlZkV4cHJlc3Npb24ob3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIHJl
c3VsdC5udW1FbGVtZW50cyA9IHRoaXMubnVtRWxlbWVudHM7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgQXJyYXlSZWZUeXBlKG9yaWdpbiwgInRocmVhZCIsIHRoaXMu
ZWxlbWVudFR5cGUpOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQXNzaWdubWVudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9Bc3NpZ25tZW50LmpzCShyZXZpc2lvbiAyMjIxMzgpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Bc3NpZ25tZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSAr
MjUsMTIgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgQXNzaWdubWVudCBleHRlbmRzIEV4cHJl
c3Npb24gewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMpCisgICAgY29uc3RydWN0
b3Iob3JpZ2luLCBsaHMsIHJocywgdHlwZSA9IG51bGwpCiAgICAgewogICAgICAgICBzdXBlcihv
cmlnaW4pOwogICAgICAgICB0aGlzLl9saHMgPSBsaHM7CiAgICAgICAgIHRoaXMuX3JocyA9IHJo
czsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGxocygp
IHsgcmV0dXJuIHRoaXMuX2xoczsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQ2FsbEFzc2lnbm1lbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQ2FsbEFzc2lnbm1lbnQuanMJKHJldmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVudCkKQEAg
LTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Np
b24gewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzLCByaHMpCi0gICAgewotICAg
ICAgICBzdXBlcihvcmlnaW4pOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAg
dGhpcy5fbGhzID0gbGhzOwotICAgICAgICB0aGlzLl9yaHMgPSByaHM7Ci0gICAgICAgIHRoaXMu
ZnVuYyA9IG51bGw7Ci0gICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5f
bmFtZTsgfQotICAgIGdldCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KLSAgICBnZXQgcmhz
KCkgeyByZXR1cm4gdGhpcy5fcmhzOyB9IC8vIFRoaXMgY2FuIGJlIG51bGwuCi0gICAgCi0gICAg
dG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGhzICsgIiAiICsgdGhpcy5u
YW1lICsgKHRoaXMucmhzID8gIj0gIiArIHRoaXMucmhzIDogIiIpOwotICAgIH0KLX0KLQpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMJ
KHJldmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxF
eHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsODIgQEAgY2xhc3MgQ2Fs
bEV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIAogICAgIGdldCBpc0Nhc3QoKSB7IHJldHVy
biB0aGlzLl9pc0Nhc3Q7IH0KICAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3Jl
dHVyblR5cGU7IH0KICAgICAKLSAgICByZXNvbHZlKG92ZXJsb2FkKQorICAgIHN0YXRpYyByZXNv
bHZlKG9yaWdpbiwgcG9zc2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSwgbmFt
ZSwgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRMaXN0LCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBl
KQorICAgIHsKKyAgICAgICAgbGV0IGNhbGwgPSBuZXcgQ2FsbEV4cHJlc3Npb24ob3JpZ2luLCBu
YW1lLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudExpc3QpOworICAgICAgICBjYWxsLmFyZ3VtZW50
VHlwZXMgPSBhcmd1bWVudFR5cGVzOworICAgICAgICBpZiAocmV0dXJuVHlwZSkKKyAgICAgICAg
ICAgIGNhbGwuc2V0Q2FzdERhdGEocmV0dXJuVHlwZSk7CisgICAgICAgIHJldHVybiB7Y2FsbCwg
cmVzdWx0VHlwZTogY2FsbC5yZXNvbHZlKHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1ldGVy
c0luU2NvcGUsIHR5cGVBcmd1bWVudHMpfTsKKyAgICB9CisgICAgCisgICAgcmVzb2x2ZShwb3Nz
aWJsZU92ZXJsb2FkcywgdHlwZVBhcmFtZXRlcnNJblNjb3BlLCB0eXBlQXJndW1lbnRzKQorICAg
IHsKKyAgICAgICAgaWYgKCFwb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKHRoaXMub3JpZ2luLm9yaWdpblN0cmluZywgIkRpZCBub3QgZmluZCBhbnkg
ZnVuY3Rpb25zIG5hbWVkICIgKyB0aGlzLm5hbWUpOworICAgICAgICAKKyAgICAgICAgbGV0IG92
ZXJsb2FkID0gbnVsbDsKKyAgICAgICAgbGV0IGZhaWx1cmVzID0gW107CisgICAgICAgIGZvciAo
bGV0IHR5cGVQYXJhbWV0ZXIgb2YgdHlwZVBhcmFtZXRlcnNJblNjb3BlKSB7CisgICAgICAgICAg
ICBpZiAoISh0eXBlUGFyYW1ldGVyIGluc3RhbmNlb2YgVHlwZVZhcmlhYmxlKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5wcm90b2Nv
bCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxldCBzaWduYXR1cmVz
ID0KKyAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnByb3RvY29sRGVjbC5z
aWduYXR1cmVzQnlOYW1lV2l0aFR5cGVWYXJpYWJsZSh0aGlzLm5hbWUsIHR5cGVQYXJhbWV0ZXIp
OworICAgICAgICAgICAgaWYgKCFzaWduYXR1cmVzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMs
IHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlzLnJldHVyblR5cGUp
OworICAgICAgICAgICAgaWYgKG92ZXJsb2FkLmZ1bmMpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKKyAgICAg
ICAgICAgIG92ZXJsb2FkID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW92ZXJsb2Fk
KSB7CisgICAgICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCisgICAgICAg
ICAgICAgICAgcG9zc2libGVPdmVybG9hZHMsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5hcmd1
bWVudFR5cGVzLCB0aGlzLnJldHVyblR5cGUpOworICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5m
dW5jKSB7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJl
cyk7CisgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9u
IGZvciBjYWxsIHdpdGggIjsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlQXJndW1lbnRz
Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMg
PCIgKyB0aGlzLnR5cGVBcmd1bWVudHMgKyAiPiBhbmQgIjsKKyAgICAgICAgICAgICAgICBtZXNz
YWdlICs9ICJhcmd1bWVudCB0eXBlcyAoIiArIHRoaXMuYXJndW1lbnRUeXBlcyArICIpIjsKKyAg
ICAgICAgICAgICAgICBpZiAodGhpcy5yZXR1cm5UeXBlKQorICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlICs9IiBhbmQgcmV0dXJuIHR5cGUgIiArIHRoaXMucmV0dXJuVHlwZTsKKyAgICAgICAg
ICAgICAgICBpZiAoZmFpbHVyZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdl
ICs9ICIsIGJ1dCBjb25zaWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1l
c3NhZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IHR5cGVB
cmd1bWVudFR5cGUgPSB0eXBlQXJndW1lbnRzW2ldOworICAgICAgICAgICAgbGV0IHR5cGVQYXJh
bWV0ZXIgPSBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOworICAgICAgICAgICAgaWYg
KCEodHlwZVBhcmFtZXRlciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5
cGUuZXF1YWxzV2l0aENvbW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKKyAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0
ZXhwciB0eXBlIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVu
dCA9ICIgKyB0eXBlQXJndW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0
ZXIudHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFy
Z3VtZW50VHlwZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBhcmd1bWVudFR5cGUg
PSB0aGlzLmFyZ3VtZW50VHlwZXNbaV07CisgICAgICAgICAgICBsZXQgcGFyYW1ldGVyVHlwZSA9
IG92ZXJsb2FkLmZ1bmMucGFyYW1ldGVyc1tpXS50eXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9u
KAorICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2Fk
LnVuaWZpY2F0aW9uQ29udGV4dCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRU
eXBlLmVxdWFsc1dpdGhDb21taXQocGFyYW1ldGVyVHlwZSk7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0ICIgKyB0aGlzLm9yaWdp
bi5vcmlnaW5TdHJpbmcgKyAiIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFs
IGFmdGVyIHR5cGUgYXJndW1lbnQgc3Vic3RpdHV0aW9uOiBhcmd1bWVudCA9ICIgKyBhcmd1bWVu
dFR5cGUgKyAiLCBwYXJhbWV0ZXIgPSAiICsgcGFyYW1ldGVyVHlwZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQpOworICAgIH0KKyAg
ICAKKyAgICByZXNvbHZlVG9PdmVybG9hZChvdmVybG9hZCkKICAgICB7CiAgICAgICAgIHRoaXMu
ZnVuYyA9IG92ZXJsb2FkLmZ1bmM7CiAgICAgICAgIHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA9
IG92ZXJsb2FkLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQg
aW5zdGFuY2VvZiBUeXBlID8gdHlwZUFyZ3VtZW50LnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKSA6
IHR5cGVBcmd1bWVudCk7CiAgICAgICAgIGxldCByZXN1bHQgPSBvdmVybG9hZC5mdW5jLnJldHVy
blR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCiAgICAgICAgICAgICBvdmVybG9hZC5mdW5j
LnR5cGVQYXJhbWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwotICAgICAgICB0
aGlzLnJlc3VsdFR5cGUgPSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOwogICAgICAg
ICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCByZXR1cm4g
dHlwZSIpOworICAgICAgICByZXN1bHQgPSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkp
OworICAgICAgICB0aGlzLnJlc3VsdFR5cGUgPSByZXN1bHQ7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hl
Y2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVj
a2VyLmpzCShyZXZpc2lvbiAyMjIxMzgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9DaGVja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwzOSArMzQsNDcgQEAgY2xhc3MgQ2hl
Y2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgIAogICAgIHZpc2l0UHJvZ3JhbShub2RlKQogICAg
IHsKLSAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRz
KSB7CisgICAgICAgIGxldCBkb1N0YXRlbWVudCA9IHN0YXRlbWVudCA9PiB7CiAgICAgICAgICAg
ICB0aGlzLl9jdXJyZW50U3RhdGVtZW50ID0gc3RhdGVtZW50OwogICAgICAgICAgICAgc3RhdGVt
ZW50LnZpc2l0KHRoaXMpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGxldCB0
eXBlIG9mIG5vZGUudHlwZXMudmFsdWVzKCkpCisgICAgICAgICAgICBkb1N0YXRlbWVudCh0eXBl
KTsKKyAgICAgICAgZm9yIChsZXQgcHJvdG9jb2wgb2Ygbm9kZS5wcm90b2NvbHMudmFsdWVzKCkp
CisgICAgICAgICAgICBkb1N0YXRlbWVudChwcm90b2NvbCk7CisgICAgICAgIGZvciAobGV0IGZ1
bmNzIG9mIG5vZGUuZnVuY3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGxldCBm
dW5jIG9mIGZ1bmNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy52aXNpdEZ1bmMoZnVuYyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgZnVuY3Mgb2Ygbm9kZS5m
dW5jdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3Mp
CisgICAgICAgICAgICAgICAgZG9TdGF0ZW1lbnQoZnVuYyk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgICAgIAorICAgIHZpc2l0RnVuY0RlZihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5ib2R5
LnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdE5hdGl2ZUZ1bmMobm9kZSkKKyAg
ICB7CiAgICAgfQogICAgIAogICAgIHZpc2l0UHJvdG9jb2xEZWNsKG5vZGUpCiAgICAgewogICAg
ICAgICBmb3IgKGxldCBzaWduYXR1cmUgb2Ygbm9kZS5zaWduYXR1cmVzKSB7Ci0gICAgICAgICAg
ICBsZXQgc2V0ID0gbmV3IFNldCgpOwotICAgICAgICAgICAgZnVuY3Rpb24gY29uc2lkZXIodGhp
bmcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaW5nLmlzVW5pZmlhYmxl
KQotICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKHRoaW5nKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNsYXNzIE5vdGljZVR5cGVWYXJpYWJsZSBleHRlbmRzIFZpc2l0b3IgewotICAg
ICAgICAgICAgICAgIHZpc2l0VHlwZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29uc2lkZXIobm9kZS50eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgY29uc2lkZXIobm9kZS52YXJpYWJsZSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGV0IG5vdGljZVR5cGVWYXJpYWJs
ZSA9IG5ldyBOb3RpY2VUeXBlVmFyaWFibGUoKTsKKyAgICAgICAgICAgIGxldCB0eXBlVmFyaWFi
bGVUcmFja2VyID0gbmV3IFR5cGVWYXJpYWJsZVRyYWNrZXIoKTsKICAgICAgICAgICAgIGZvciAo
bGV0IHBhcmFtZXRlclR5cGUgb2Ygc2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzKQotICAgICAgICAg
ICAgICAgIHBhcmFtZXRlclR5cGUudmlzaXQobm90aWNlVHlwZVZhcmlhYmxlKTsKKyAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJUeXBlLnZpc2l0KHR5cGVWYXJpYWJsZVRyYWNrZXIpOworICAgICAg
ICAgICAgTm9kZS52aXNpdChzaWduYXR1cmUucmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlv
biwgdHlwZVZhcmlhYmxlVHJhY2tlcik7CiAgICAgICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1l
dGVyIG9mIHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycykgewotICAgICAgICAgICAgICAgIGlmICgh
c2V0Lmhhcyh0eXBlUGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICBpZiAoIXR5cGVWYXJpYWJs
ZVRyYWNrZXIuc2V0Lmhhcyh0eXBlUGFyYW1ldGVyKSkKICAgICAgICAgICAgICAgICAgICAgdGhy
b3cgV1R5cGVFcnJvcih0eXBlUGFyYW1ldGVyLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBlIHBh
cmFtZXRlciB0byBwcm90b2NvbCBzaWduYXR1cmUgbm90IGluZmVycmFibGUgZnJvbSB2YWx1ZSBw
YXJhbWV0ZXJzIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXNldC5oYXMobm9k
ZS50eXBlVmFyaWFibGUpKQorICAgICAgICAgICAgaWYgKCF0eXBlVmFyaWFibGVUcmFja2VyLnNl
dC5oYXMobm9kZS50eXBlVmFyaWFibGUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKHNpZ25hdHVyZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUHJvdG9jb2wncyB0eXBlIHZh
cmlhYmxlICgiICsgbm9kZS5uYW1lICsgIikgbm90IG1lbnRpb25lZCBpbiBzaWduYXR1cmU6ICIg
KyBzaWduYXR1cmUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQxLDYgKzE0OSwzMiBAQCBjbGFz
cyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiBsaHNUeXBlOwogICAg
IH0KICAgICAKKyAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNp
dFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9k
ZS5sVmFsdWUuaXNMVmFsdWUpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2Rl
Lm9yaWdpbi5vcmlnaW5TdHJpbmcsICJMSFMgb2YgcmVhZC1tb2RpZnktd3JpdGUgaXMgbm90IGFu
IExWYWx1ZTogIiArIG5vZGUubFZhbGUpOworICAgICAgICBsZXQgbGhzVHlwZSA9IG5vZGUubFZh
bHVlLnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnR5cGUgPSBsaHNUeXBl
OworICAgICAgICBub2RlLm5ld1ZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAgICBub2Rl
Lm9sZFZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLm5ld1ZhbHVlVmFyLnZpc2l0
KHRoaXMpOworICAgICAgICBsZXQgbmV3VmFsdWVUeXBlID0gbm9kZS5uZXdWYWx1ZUV4cC52aXNp
dCh0aGlzKTsKKyAgICAgICAgaWYgKCFsaHNUeXBlLmVxdWFsc1dpdGhDb21taXQobmV3VmFsdWVU
eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJUeXBlIG1pc21hdGNoIGluIHJlYWQtbW9kaWZ5LXdyaXRlOiAiICsgbGhzVHlw
ZSArICIgdmVyc3VzICIgKyBuZXdWYWx1ZVR5cGUpOworICAgICAgICByZXR1cm4gbm9kZS5yZXN1
bHRFeHAudmlzaXQodGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFi
bGUobm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS50eXBlKQorICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJBbm9ueW1vdXMgdmFyaWFibGUgbXVzdCBrbm93IHR5cGUgYmVmb3JlIGZp
cnN0IGFwcGVhcmFuY2UiKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJl
c3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCB0eXBlID0gbm9kZS5wdHIudmlzaXQodGhp
cykudW5pZnlOb2RlOwpAQCAtMTQ4LDYgKzE4Miw4IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBW
aXNpdG9yIHsKICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9y
aWdpblN0cmluZywgIlR5cGUgcGFzc2VkIHRvIGRlcmVmZXJlbmNlIGlzIG5vdCBhIHBvaW50ZXI6
ICIgKyB0eXBlKTsKICAgICAgICAgbm9kZS50eXBlID0gdHlwZS5lbGVtZW50VHlwZTsKICAgICAg
ICAgbm9kZS5hZGRyZXNzU3BhY2UgPSB0eXBlLmFkZHJlc3NTcGFjZTsKKyAgICAgICAgaWYgKCFu
b2RlLmFkZHJlc3NTcGFjZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhZGRy
ZXNzIHNwYWNlIGluIHR5cGU6ICIgKyB0eXBlKTsKICAgICAgICAgcmV0dXJuIG5vZGUudHlwZTsK
ICAgICB9CiAgICAgCkBAIC0xNjUsNyArMjAxLDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZp
c2l0b3IgewogICAgIHsKICAgICAgICAgbGV0IGVsZW1lbnRUeXBlID0gbm9kZS5sVmFsdWUudmlz
aXQodGhpcykudW5pZnlOb2RlOwogICAgICAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBQ
dHJUeXBlKSB7Ci0gICAgICAgICAgICBub2RlLmJlY29tZUNvbnZlcnRQdHJUb0FycmF5UmVmRXhw
cmVzc2lvbigpOworICAgICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbnZlcnRQdHJUb0FycmF5
UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUpKTsKICAgICAgICAgICAgIHJl
dHVybiBuZXcgQXJyYXlSZWZUeXBlKG5vZGUub3JpZ2luLCBlbGVtZW50VHlwZS5hZGRyZXNzU3Bh
Y2UsIGVsZW1lbnRUeXBlLmVsZW1lbnRUeXBlKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4
OSwzNSArMjI1LDg3IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJTaG91bGQgbm90IGV4aXN0IHlldC4iKTsKICAgICB9CiAgICAgCi0g
ICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgX2ZpbmlzaFZpc2l0aW5nUHJvcGVydHlB
Y2Nlc3Mobm9kZSwgYmFzZVR5cGUsIGV4dHJhQXJncywgZXh0cmFBcmdUeXBlcykKICAgICB7Ci0g
ICAgICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcykudW5pZnlOb2Rl
OworICAgICAgICBiYXNlVHlwZSA9IGJhc2VUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKQor
ICAgICAgICBub2RlLmJhc2VUeXBlID0gYmFzZVR5cGU7CiAgICAgICAgIAotICAgICAgICBub2Rl
LnN0cnVjdFR5cGUgPSBzdHJ1Y3RUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKLSAgICAg
ICAgCi0gICAgICAgIGxldCB1bmRlcmx5aW5nU3RydWN0ID0gc3RydWN0VHlwZTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikKLSAgICAgICAgICAg
IHVuZGVybHlpbmdTdHJ1Y3QgPSB1bmRlcmx5aW5nU3RydWN0LnR5cGU7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoISh1bmRlcmx5aW5nU3RydWN0IGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAg
ICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJP
cGVyYW5kIHRvIGRvdCBleHByZXNzaW9uIGlzIG5vdCBhIHN0cnVjdCB0eXBlOiAiICsgc3RydWN0
VHlwZSk7CisgICAgICAgIC8vIFN1Y2ggYSB0eXBlIG11c3QgZXhpc3QuIFRoaXMgbWF5IHRocm93
IGlmIGl0IGRvZXNuJ3QuCisgICAgICAgIGxldCB0eXBlRm9yQW5kID0gYmFzZVR5cGUuYXJndW1l
bnRUeXBlRm9yQW5kT3ZlcmxvYWQobm9kZS5vcmlnaW4pOworICAgICAgICBpZiAoIXR5cGVGb3JB
bmQpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlwZUZvckFuZCIp
OworICAgICAgICAKKyAgICAgICAgbGV0IGVycm9yRm9yR2V0OworICAgICAgICBsZXQgZXJyb3JG
b3JBbmQ7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9
IENhbGxFeHByZXNzaW9uLnJlc29sdmUoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5v
ZGUucG9zc2libGVHZXRPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFt
ZXRlcnMsCisgICAgICAgICAgICAgICAgbm9kZS5nZXRGdW5jTmFtZSwgW10sIFtub2RlLmJhc2Us
IC4uLmV4dHJhQXJnc10sIFtiYXNlVHlwZSwgLi4uZXh0cmFBcmdUeXBlc10sIG51bGwpOworICAg
ICAgICAgICAgbm9kZS5jYWxsRm9yR2V0ID0gcmVzdWx0LmNhbGw7CisgICAgICAgICAgICBub2Rl
LnJlc3VsdFR5cGVGb3JHZXQgPSByZXN1bHQucmVzdWx0VHlwZTsKKyAgICAgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAg
ICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICBlcnJvckZvckdldCA9IGU7CisgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikg
Ci0gICAgICAgICAgICB1bmRlcmx5aW5nU3RydWN0ID0gdW5kZXJseWluZ1N0cnVjdC5pbnN0YW50
aWF0ZShzdHJ1Y3RUeXBlLnR5cGVBcmd1bWVudHMsICJzaGFsbG93Iik7CisgICAgICAgIHRyeSB7
CisgICAgICAgICAgICBsZXQgYmFzZUZvckFuZCA9IGJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3Zl
cmxvYWQobm9kZS5vcmlnaW4sIG5vZGUuYmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGxldCByZXN1bHQgPSBDYWxsRXhwcmVzc2lvbi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5v
ZGUub3JpZ2luLCBub2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVt
ZW50LnR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgIG5vZGUuYW5kRnVuY05hbWUsIFtd
LCBbYmFzZUZvckFuZCwgLi4uZXh0cmFBcmdzXSwgW3R5cGVGb3JBbmQsIC4uLmV4dHJhQXJnVHlw
ZXNdLAorICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAgICAgbm9kZS5jYWxsRm9yQW5k
ID0gcmVzdWx0LmNhbGw7CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JBbmQgPSByZXN1
bHQucmVzdWx0VHlwZS51bmlmeU5vZGUucmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChub2RlLm9y
aWdpbik7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmICghKGUgaW5zdGFu
Y2VvZiBXVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAg
ZXJyb3JGb3JBbmQgPSBlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGUu
cmVzdWx0VHlwZUZvckdldCAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yQW5kKSB7CisgICAgICAgICAg
ICB0aHJvdyBuZXcgV1R5cGVFcnJvcigKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsCisgICAgICAgICAgICAgICAgIkNhbm5vdCByZXNvbHZlIGFjY2VzczsgdHJpZWQg
YnktdmFsdWU6XG4iICsKKyAgICAgICAgICAgICAgICBlcnJvckZvckdldC5tZXNzYWdlICsgIlxu
IiArCisgICAgICAgICAgICAgICAgImFuZCB0cmllZCBieS1wb2ludGVyOlxuIiArCisgICAgICAg
ICAgICAgICAgZXJyb3JGb3JBbmQubWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmIChub2RlLnJlc3VsdFR5cGVGb3JHZXQgJiYgbm9kZS5yZXN1bHRUeXBlRm9yQW5kCisg
ICAgICAgICAgICAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yR2V0LmVxdWFscyhub2RlLnJlc3VsdFR5
cGVGb3JBbmQpKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4u
b3JpZ2luU3RyaW5nLCAiUmVzdWx0IHR5cGUgcmVzb2x2ZWQgYnktdmFsdWUgKCIgKyBub2RlLnJl
c3VsdFR5cGVGb3JHZXQgKyAiKSBkb2VzIG5vdCBtYXRjaCByZXN1bHQgdHlwZSByZXNvbHZlZCBi
eS1wb2ludGVyICgiICsgbm9kZS5yZXN1bHRUeXBlRm9yQW5kICsgIikiKTsKKyAgICAgICAgCisg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVz
b2x2ZSgKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZVNldE92ZXJs
b2FkcywgdGhpcy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAg
ICAgICBub2RlLnNldEZ1bmNOYW1lLCBbXSwgW25vZGUuYmFzZSwgLi4uZXh0cmFBcmdzLCBudWxs
XSwgW2Jhc2VUeXBlLCAuLi5leHRyYUFyZ1R5cGVzLCBub2RlLnJlc3VsdFR5cGVdLCBudWxsKTsK
KyAgICAgICAgICAgIG5vZGUuY2FsbEZvclNldCA9IHJlc3VsdC5jYWxsOworICAgICAgICAgICAg
aWYgKCFyZXN1bHQucmVzdWx0VHlwZS5lcXVhbHMoYmFzZVR5cGUpKQorICAgICAgICAgICAgICAg
IHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlJlc3VsdCB0
eXBlIG9mIHNldHRlciAiICsgcmVzdWx0LmNhbGwuZnVuYyArICIgaXMgbm90IHRoZSBiYXNlIHR5
cGUgIiArIGJhc2VUeXBlKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYg
KCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93IGU7Cisg
ICAgICAgICAgICBub2RlLmVycm9yRm9yU2V0ID0gZTsKKyAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgbGV0IGZpZWxkID0gdW5kZXJseWluZ1N0cnVjdC5maWVsZEJ5TmFtZShub2RlLmZpZWxk
TmFtZSk7Ci0gICAgICAgIGlmICghZmllbGQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVF
cnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJGaWVsZCAiICsgbm9kZS5maWVsZE5hbWUg
KyAiIG5vdCBmb3VuZCBpbiAiICsgc3RydWN0VHlwZSk7Ci0gICAgICAgIHJldHVybiBmaWVsZC50
eXBlOworICAgICAgICByZXR1cm4gbm9kZS5yZXN1bHRUeXBlOwogICAgIH0KICAgICAKLSAgICB2
aXNpdExldEV4cHJlc3Npb24obm9kZSkKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAg
ICB7Ci0gICAgICAgIG5vZGUudHlwZSA9IG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAg
ICAgIGlmICghbm9kZS50eXBlKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEaWQgbm90
IGdldCB0eXBlIGZvciBub2RlOiAiICsgbm9kZS5hcmd1bWVudCk7Ci0gICAgICAgIHJldHVybiBu
b2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1
Y3QudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoVmlz
aXRpbmdQcm9wZXJ0eUFjY2Vzcyhub2RlLCBzdHJ1Y3RUeXBlLCBbXSwgW10pOworICAgIH0KKyAg
ICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGFy
cmF5VHlwZSA9IG5vZGUuYXJyYXkudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBsZXQg
aW5kZXhUeXBlID0gbm9kZS5pbmRleC52aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiB0aGlzLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIGFycmF5VHlwZSwg
W25vZGUuaW5kZXhdLCBbaW5kZXhUeXBlXSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0VmFyaWFi
bGVSZWYobm9kZSkKQEAgLTMyMiwxMCArNDEwLDEwIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBW
aXNpdG9yIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGV4cHJlc3Npb24udmlzaXQodGhpcyk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVz
c2lvbihub2RlKQogICAgIHsKLSAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGVzID0gbm9kZS50
eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMp
KTsKKyAgICAgICAgbGV0IHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5
cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhpcykpOwogICAgICAgICBsZXQgYXJn
dW1lbnRUeXBlcyA9IG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiB7CiAgICAgICAg
ICAgICBsZXQgbmV3QXJndW1lbnQgPSBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgICAg
IGlmICghbmV3QXJndW1lbnQpCkBAIC0zMzMsNzcgKzQyMSwxMiBAQCBjbGFzcyBDaGVja2VyIGV4
dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICByZXR1cm4gbmV3QXJndW1lbnQudmlzaXQobmV3
IEF1dG9XcmFwcGVyKCkpOwogICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIC8vIEhlcmUg
d2UgbmVlZCB0byBoYW5kbGUgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yJltdIGlzIGNhbGxlZCB3
aXRoIGEgdHlwZSB0aGF0IGlzbid0IHN1ZmZpY2llbnRseQotICAgICAgICAvLyByZWZlcmVuY2V5
LgotICAgICAgICBpZiAobm9kZS5uYW1lID09ICJvcGVyYXRvciZbXSIpIHsKLSAgICAgICAgICAg
IGxldCBhcmdUeXBlID0gYXJndW1lbnRUeXBlc1swXS51bmlmeU5vZGU7Ci0gICAgICAgICAgICBp
ZiAoYXJnVHlwZSBpbnN0YW5jZW9mIFB0clR5cGUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQg
aXMgbm90IHZhbGlkIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcmdUeXBlIGlu
c3RhbmNlb2YgQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3Rb
MF0gPSBuZXcgTWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5hcmd1bWVu
dExpc3RbMF0pOwotICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdLm51bUVsZW1l
bnRzID0gYXJnVHlwZS5udW1FbGVtZW50czsKLSAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVz
WzBdID0gbmV3IEFycmF5UmVmVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ1R5cGUuZWxl
bWVudFR5cGUpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghKGFyZ1R5cGUgaW5zdGFuY2VvZiBB
cnJheVJlZlR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBu
ZXcgTWFrZVB0ckV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0WzBdKTsK
LSAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IFB0clR5cGUobm9kZS5vcmln
aW4sICJ0aHJlYWQiLCBhcmd1bWVudFR5cGVzWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICAKICAgICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlczsK
ICAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKICAgICAgICAgICAgIG5vZGUucmV0dXJuVHlw
ZS52aXNpdCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7Ci0g
ICAgICAgIGxldCBmYWlsdXJlcyA9IFtdOwotICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVy
IG9mIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAg
IGlmICghKHR5cGVQYXJhbWV0ZXIgaW5zdGFuY2VvZiBUeXBlVmFyaWFibGUpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnByb3RvY29s
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbGV0IHNpZ25hdHVyZXMg
PQotICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIucHJvdG9jb2wucHJvdG9jb2xEZWNsLnNp
Z25hdHVyZXNCeU5hbWVXaXRoVHlwZVZhcmlhYmxlKG5vZGUubmFtZSwgdHlwZVBhcmFtZXRlcik7
Ci0gICAgICAgICAgICBpZiAoIXNpZ25hdHVyZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywg
bm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVyblR5cGUpOwotICAg
ICAgICAgICAgaWYgKG92ZXJsb2FkLmZ1bmMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBmYWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKLSAgICAgICAgICAg
IG92ZXJsb2FkID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW92ZXJsb2FkKSB7Ci0g
ICAgICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCi0gICAgICAgICAgICAg
ICAgbm9kZS5wb3NzaWJsZU92ZXJsb2Fkcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5
cGVzLCBub2RlLnJldHVyblR5cGUpOwotICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7
Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Ci0g
ICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBj
YWxsIHdpdGggIjsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyBu
b2RlLnR5cGVBcmd1bWVudHMgKyAiPiBhbmQgIjsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9
ICJhcmd1bWVudCB0eXBlcyAoIiArIGFyZ3VtZW50VHlwZXMgKyAiKSI7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIg
YW5kIHJldHVybiB0eXBlICIgKyBub2RlLnJldHVyblR5cGU7Ci0gICAgICAgICAgICAgICAgaWYg
KGZhaWx1cmVzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQg
Y29uc2lkZXJlZDpcbiIgKyBmYWlsdXJlcy5qb2luKCJcbiIpCi0gICAgICAgICAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVB
cmd1bWVudFR5cGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgdHlwZUFyZ3VtZW50
VHlwZSA9IHR5cGVBcmd1bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0
ZXIgPSBvdmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKCEo
dHlwZVBhcmFtZXRlciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUu
ZXF1YWxzV2l0aENvbW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkF0ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhw
ciB0eXBlIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9
ICIgKyB0eXBlQXJndW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIu
dHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5
cGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnRUeXBlID0gYXJndW1l
bnRUeXBlc1tpXTsKLSAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gb3ZlcmxvYWQuZnVu
Yy5wYXJhbWV0ZXJzW2ldLnR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCi0gICAgICAgICAg
ICAgICAgb3ZlcmxvYWQuZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25D
b250ZXh0KTsKLSAgICAgICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVudFR5cGUuZXF1YWxzV2l0
aENvbW1pdChwYXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0cmlu
ZyArICIgYXJndW1lbnQgYW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0ZXIgdHlwZSBh
cmd1bWVudCBzdWJzdGl0dXRpb246IGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50VHlwZSArICIsIHBh
cmFtZXRlciA9ICIgKyBwYXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
bm9kZS5yZXNvbHZlKG92ZXJsb2FkKTsKKworICAgICAgICBsZXQgcmVzdWx0ID0gbm9kZS5yZXNv
bHZlKG5vZGUucG9zc2libGVPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBh
cmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHByZXNzaW9u
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhw
cmVzc2lvbi5qcwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQ29tbWFFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBA
IGNsYXNzIENvbW1hRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24KICAgICAKICAgICBnZXQg
bGlzdCgpIHsgcmV0dXJuIHRoaXMuX2xpc3Q7IH0KICAgICAKKyAgICAvLyBOT1RFOiBJdCdzIHN1
cGVyIHRlbXB0aW5nIHRvIHNheSB0aGF0IENvbW1hRXhwcmVzc2lvbiBpcyBhbiBsVmFsdWUgaWYg
aXRzIGxhc3QgZW50cnkgaXMgYW4gbFZhbHVlLiBCdXQsCisgICAgLy8gUHJvcGVydHlSZXNvbHZl
ciByZWxpZXMgb24gdGhpcyBub3QgYmVpbmcgdGhlIGNhc2UuCisgICAgCiAgICAgdG9TdHJpbmco
KQogICAgIHsKICAgICAgICAgcmV0dXJuICIoIiArIHRoaXMubGlzdC50b1N0cmluZygpICsgIiki
OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRGVyZWZlcmVuY2VFeHByZXNz
aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RlcmVm
ZXJlbmNlRXhwcmVzc2lvbi5qcwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwxMCArMjUsMTIgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgRGVyZWZlcmVuY2VFeHBy
ZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBwdHIp
CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBwdHIsIHR5cGUgPSBudWxsLCBhZGRyZXNzU3BhY2Ug
PSBudWxsKQogICAgIHsKICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fcHRy
ID0gcHRyOworICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgICAgICB0aGlzLmFkZHJlc3NT
cGFjZSA9IGFkZHJlc3NTcGFjZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IHB0cigpIHsgcmV0dXJu
IHRoaXMuX3B0cjsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhw
cmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9E
b3RFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAyMjIxMzgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxOSArMjQs
MjIgQEAKICAqLwogInVzZSBzdHJpY3QiOwogCi1jbGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMg
RXhwcmVzc2lvbiB7CitjbGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgUHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uIHsKICAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIHN0cnVjdCwgZmllbGROYW1lKQog
ICAgIHsKLSAgICAgICAgc3VwZXIob3JpZ2luKTsKLSAgICAgICAgdGhpcy5fc3RydWN0ID0gc3Ry
dWN0OworICAgICAgICBzdXBlcihvcmlnaW4sIHN0cnVjdCk7CiAgICAgICAgIHRoaXMuX2ZpZWxk
TmFtZSA9IGZpZWxkTmFtZTsKICAgICB9CiAgICAgCi0gICAgZ2V0IHN0cnVjdCgpIHsgcmV0dXJu
IHRoaXMuX3N0cnVjdDsgfQorICAgIGdldCBzdHJ1Y3QoKSB7IHJldHVybiB0aGlzLmJhc2U7IH0K
ICAgICBnZXQgZmllbGROYW1lKCkgeyByZXR1cm4gdGhpcy5fZmllbGROYW1lOyB9CiAgICAgZ2V0
IGlzTFZhbHVlKCkgeyByZXR1cm4gdGhpcy5zdHJ1Y3QuaXNMVmFsdWU7IH0KICAgICBnZXQgYWRk
cmVzc1NwYWNlKCkgeyByZXR1cm4gdGhpcy5zdHJ1Y3QuYWRkcmVzc1NwYWNlOyB9CiAgICAgCisg
ICAgZ2V0IGdldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFt
ZTsgfQorICAgIGdldCBhbmRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvciYuIiArIHRoaXMu
ZmllbGROYW1lOyB9CisgICAgZ2V0IHNldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIg
KyB0aGlzLmZpZWxkTmFtZSArICI9IjsgfQorICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiAiKCIgKyB0aGlzLnN0cnVjdCArICIuIiArIHRoaXMuZmllbGROYW1lICsg
IikiOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCShyZXZp
c2lvbiAyMjIxMzgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMiArNjAsMTQgQEAgY2xhc3MgRUJ1ZmZlciB7CiAgICAg
Z2V0KGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlz
Ll9hcnJheS5sZW5ndGgpCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm91dCBvZiBib3Vu
ZHMgYnVmZmVyIGFjY2VzcyIpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJPdXQgb2Yg
Ym91bmRzIGJ1ZmZlciBhY2Nlc3MgKGJ1ZmZlciA9ICIgKyB0aGlzICsgIiwgaW5kZXggPSAiICsg
aW5kZXggKyAiKSIpOwogICAgICAgICByZXR1cm4gdGhpcy5fYXJyYXlbaW5kZXhdOwogICAgIH0K
ICAgICAKICAgICBzZXQoaW5kZXgsIHZhbHVlKQogICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwg
MCB8fCBpbmRleCA+PSB0aGlzLl9hcnJheS5sZW5ndGgpCisgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIm91dCBvZiBib3VuZHMgYnVmZmVyIGFjY2VzcyAoYnVmZmVyID0gIiArIHRoaXMgKyAi
LCBpbmRleCA9ICIgKyBpbmRleCArICIpIik7CiAgICAgICAgIHRoaXMuX2FycmF5W2luZGV4XSA9
IHZhbHVlOwogICAgIH0KICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0VCdWZmZXJCdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCShyZXZpc2lvbiAyMjIxMzgpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAt
MTA0LDExICsxMDQsOSBAQCBjbGFzcyBFQnVmZmVyQnVpbGRlciBleHRlbmRzIFZpc2l0b3Igewog
ICAgICAgICBzdXBlci52aXNpdExvZ2ljYWxOb3Qobm9kZSk7CiAgICAgfQogICAgIAotICAgIHZp
c2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkK
ICAgICB7CiAgICAgICAgIHRoaXMuX2NyZWF0ZUVQdHJGb3JOb2RlKG5vZGUpOwotICAgICAgICBu
b2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMpOwotICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7
CiAgICAgfQogICAgIAogICAgIHZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNpb24g
MjIyMTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDExIEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRz
IFZpc2l0b3IgewogICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgIH0KICAgICAKKyAgICB2aXNp
dElkZW50aXR5RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUudGFy
Z2V0LnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVz
c2lvbihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHB0ciA9IG5vZGUucHRyLnZpc2l0KHRoaXMp
LmxvYWRWYWx1ZSgpOwpAQCAtMTEyLDcgKzExNyw4IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRz
IFZpc2l0b3IgewogICAgIAogICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBub2RlLmVQdHIuYm94KG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpKTsK
KyAgICAgICAgbGV0IHB0ciA9IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpOworICAgICAgICByZXR1
cm4gbm9kZS5lUHRyLmJveChwdHIpOwogICAgIH0KICAgICAKICAgICB2aXNpdE1ha2VBcnJheVJl
ZkV4cHJlc3Npb24obm9kZSkKQEAgLTEyNSwxMiArMTMxLDYgQEAgY2xhc3MgRXZhbHVhdG9yIGV4
dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiBub2RlLmVQdHIuYm94KG5ldyBFQXJyYXlS
ZWYobm9kZS5sVmFsdWUudmlzaXQodGhpcykubG9hZFZhbHVlKCksIDEpKTsKICAgICB9CiAgICAg
Ci0gICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgc3RydWN0
UHRyID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3RQdHIu
cGx1cyhub2RlLmZpZWxkLm9mZnNldCk7Ci0gICAgfQotICAgIAogICAgIHZpc2l0Q29tbWFFeHBy
ZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0OwpAQCAtMjMxLDEwICsyMzEs
OSBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgQ29u
dGludWVFeGNlcHRpb247CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2Rl
KQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAgICAgIG5vZGUu
ZVB0ci5jb3B5RnJvbShub2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMpLCBub2RlLnR5cGUuc2l6ZSk7
Ci0gICAgICAgIHJldHVybiBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUudHlw
ZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZShub2RlLmVQdHIuYnVmZmVyLCBub2RlLmVQdHIub2Zmc2V0
KTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQpAQCAtMjQ3LDYg
KzI0Niw4IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAg
aWYgKCF0eXBlIHx8ICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkNhbm5vdCBnZXQgdHlwZSBvciBhcmd1bWVudDsgaSA9ICIgKyBpICsgIiwgYXJndW1lbnQgPSAi
ICsgYXJndW1lbnQgKyAiLCB0eXBlID0gIiArIHR5cGUgKyAiOyBpbiAiICsgbm9kZSk7CiAgICAg
ICAgICAgICBsZXQgYXJndW1lbnRWYWx1ZSA9IGFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAgICAg
ICAgICAgaWYgKCFhcmd1bWVudFZhbHVlKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiTnVsbCBhcmd1bWVudCB2YWx1ZSwgaSA9ICIgKyBpICsgIiwgbm9kZSA9ICIgKyBub2RlKTsK
ICAgICAgICAgICAgIGNhbGxBcmd1bWVudHMucHVzaCgoKSA9PiB0aGlzLl9zbmFwc2hvdCh0eXBl
LCBudWxsLCBhcmd1bWVudFZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJKHJl
dmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Np
b25GaW5kZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDE2IEBAIGNsYXNzIEV4cHJl
c3Npb25GaW5kZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9k
ZSk7CiAgICAgfQogICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2Rl
KQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CisgICAgfQorICAgIAorICAg
IHZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9jYWxs
YmFjayhub2RlKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQog
ICAgIHsKICAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9GaW5kSGlnaFpvbWJpZXMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRmluZEhpZ2hab21iaWVzLmpzCShub25leGlzdGVudCkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ZpbmRIaWdoWm9tYmllcy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGZpbmRIaWdoWm9tYmll
cyhwcm9ncmFtKQoreworICAgIHByb2dyYW0udmlzaXQobmV3IEhpZ2hab21iaWVGaW5kZXIoKSk7
Cit9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHJldmlz
aW9uIDIyMjEzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgRm9yTG9vcCBleHRlbmRzIE5v
ZGUgewogCiAgICAgdG9TdHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJmb3IgKCIgKyAo
dGhpcy5pbml0aWFsaXphdGlvbiA/IHRoaXMuaW5pdGlhbGl6YXRpb24gOiAiICIpICsgIjsgIiAr
ICh0aGlzLmNvbmRpdGlvbiA/IHRoaXMuY29uZGl0aW9uIDogIiIpICsgIjsgIiArICh0aGlzLmlu
Y3JlbWVudCA/IHRoaXMuaW5jcmVtZW50IDogIiIpICsgIikgIiArIGJvZHk7CisgICAgICAgIHJl
dHVybiAiZm9yICgiICsgKHRoaXMuaW5pdGlhbGl6YXRpb24gPyB0aGlzLmluaXRpYWxpemF0aW9u
IDogIiAiKSArICI7ICIgKyAodGhpcy5jb25kaXRpb24gPyB0aGlzLmNvbmRpdGlvbiA6ICIiKSAr
ICI7ICIgKyAodGhpcy5pbmNyZW1lbnQgPyB0aGlzLmluY3JlbWVudCA6ICIiKSArICIpICIgKyB0
aGlzLmJvZHk7CiAgICAgfQogfTsKIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRnVuYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9G
dW5jLmpzCShyZXZpc2lvbiAyMjIxMzgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9GdW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMiBAQCBjbGFzcyBGdW5jIGV4
dGVuZHMgTm9kZSB7CiAgICAgewogICAgICAgICBpZiAoIShvcmlnaW4gaW5zdGFuY2VvZiBMZXhl
clRva2VuKSkKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIG9yaWdpbjogIiArIG9y
aWdpbik7CisgICAgICAgIGZvciAobGV0IHBhcmFtZXRlciBvZiBwYXJhbWV0ZXJzKSB7CisgICAg
ICAgICAgICBpZiAoIXBhcmFtZXRlcikKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
Ik51bGwgcGFyYW1ldGVyIik7CisgICAgICAgICAgICBpZiAoIXBhcmFtZXRlci50eXBlKQorICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBwYXJhbWV0ZXIgdHlwZSIpOworICAg
ICAgICB9CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsK
ICAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHJldmlzaW9uIDIyMjEzOCkKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDggKzM5LDE0IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAg
IGdldFVuaXF1ZShmdW5jLCB0eXBlQXJndW1lbnRzKQogICAgIHsKICAgICAgICAgY2xhc3MgRmlu
ZFR5cGVWYXJpYWJsZSBleHRlbmRzIFZpc2l0b3IgeworICAgICAgICAgICAgdmlzaXRUeXBlUmVm
KG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgdHlwZUFyZ3Vt
ZW50IG9mIG5vZGUudHlwZUFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgdHlwZUFyZ3Vt
ZW50LnZpc2l0KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICB2aXNpdFR5cGVWYXJpYWJsZShub2RlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJVbmV4cGVjdGVkIHR5cGUgdmFyaWFibGU6ICIgKyBub2RlKTsKKyAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdHlwZSB2YXJpYWJsZTogIiArIG5vZGUgKyAi
IHdoZW4gaW5zdGFudGlhdGluZyAiICsgZnVuYyArICIgd2l0aCBhcmd1bWVudHMgIiArIHR5cGVB
cmd1bWVudHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAobGV0IHR5
cGVBcmd1bWVudCBvZiB0eXBlQXJndW1lbnRzKQpAQCAtNzUsMzMgKzgxLDM4IEBAIGNsYXNzIEZ1
bmNJbnN0YW50aWF0b3IgewogICAgICAgICAgICAgICAgICAgICBsZXQgb3ZlcmxvYWQgPSByZXNv
bHZlT3ZlcmxvYWRJbXBsKHJlc3VsdC5wb3NzaWJsZU92ZXJsb2FkcywgcmVzdWx0LnR5cGVBcmd1
bWVudHMsIHJlc3VsdC5hcmd1bWVudFR5cGVzLCByZXN1bHQucmV0dXJuVHlwZUZvck92ZXJsb2Fk
UmVzb2x1dGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykKICAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHJlc29sdmUg
cHJvdG9jb2wgc2lnbmF0dXJlIGZ1bmN0aW9uIGNhbGwgZHVyaW5nIGluc3RhbnRpYXRpb246ICIg
KyByZXN1bHQuZnVuYyArIChvdmVybG9hZC5mYWlsdXJlcy5sZW5ndGggPyAiOyB0cmllZDpcbiIg
KyBvdmVybG9hZC5mYWlsdXJlcy5qb2luKCJcbiIpIDogIiIpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnJlc29sdmUob3ZlcmxvYWQpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQu
cmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmZ1bmMuaXNOYXRpdmUpCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5uYXRpdmVGdW5jSW5zdGFuY2UgPSB0aGlzSW5zdGFudGlh
dG9yLmdldFVuaXF1ZShyZXN1bHQuZnVuYywgcmVzdWx0LmFjdHVhbFR5cGVBcmd1bWVudHMpOwor
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBu
ZXcgSW5zdGFudGlhdGlvblN1YnN0aXR1dGlvbihmdW5jLnR5cGVQYXJhbWV0ZXJzLCB0eXBlQXJn
dW1lbnRzKTsKKyAgICAgICAgbGV0IGluc3RhbnRpYXRlSW1tZWRpYXRlcyA9IG5ldyBJbnN0YW50
aWF0ZUltbWVkaWF0ZXMoKTsKICAgICAgICAgCi0gICAgICAgIGNsYXNzIEluc3RhbnRpYXRlIGV4
dGVuZHMgVmlzaXRvckJhc2UgeworICAgICAgICBjbGFzcyBJbnN0YW50aWF0ZSB7CiAgICAgICAg
ICAgICB2aXNpdEZ1bmNEZWYoZnVuYykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbmV3IEZ1bmNEZWYoCiAgICAgICAgICAgICAgICAgICAgIGZ1bmMub3JpZ2luLCBmdW5j
Lm5hbWUsCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMucmV0dXJuVHlwZS52aXNpdChzdWJzdGl0
dXRpb24pLAorICAgICAgICAgICAgICAgICAgICBmdW5jLnJldHVyblR5cGUudmlzaXQoc3Vic3Rp
dHV0aW9uKS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpLAogICAgICAgICAgICAgICAgICAg
ICBbXSwgLy8gV2UncmUgaW5zdGFudGlhdGVkIHNvIHdlIG5vIGxvbmdlciB0YWtlIHR5cGUgcGFy
YW1ldGVycy4KLSAgICAgICAgICAgICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0
ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHN1YnN0aXR1dGlvbikpLAotICAgICAgICAgICAgICAgICAg
ICBmdW5jLmJvZHkudmlzaXQoc3Vic3RpdHV0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIGZ1
bmMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChzdWJzdGl0dXRp
b24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcykpLAorICAgICAgICAgICAgICAgICAgICBm
dW5jLmJvZHkudmlzaXQoc3Vic3RpdHV0aW9uKS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgdmlzaXROYXRpdmVG
dW5jKGZ1bmMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRp
dmVGdW5jSW5zdGFuY2UoCiAgICAgICAgICAgICAgICAgICAgIGZ1bmMsCi0gICAgICAgICAgICAg
ICAgICAgIGZ1bmMucmV0dXJuVHlwZS52aXNpdChzdWJzdGl0dXRpb24pLAotICAgICAgICAgICAg
ICAgICAgICBmdW5jLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQo
c3Vic3RpdHV0aW9uKSksCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMuaXNDYXN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgZnVuYy5yZXR1cm5UeXBlLnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQo
aW5zdGFudGlhdGVJbW1lZGlhdGVzKSwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5wYXJhbWV0
ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQo
aW5zdGFudGlhdGVJbW1lZGlhdGVzKSksCisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaXNDYXN0
LAorICAgICAgICAgICAgICAgICAgICBmdW5jLmluc3RhbnRpYXRlSW1wbGVtZW50YXRpb24oc3Vi
c3RpdHV0aW9uKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbGV0IHJlc3Vs
dGluZ0Z1bmMgPSBmdW5jLnZpc2l0KG5ldyBJbnN0YW50aWF0ZSgpKTsKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0hpZ2hab21iaWVGaW5kZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSGlnaFpvbWJpZUZpbmRlci5qcwkobm9uZXhp
c3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9IaWdoWm9tYmllRmluZGVy
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8gSWYgYSBoaWdoLWxl
dmVsIGNvbnN0cnVjdCBzb21laG93IG1hbmFnZXMgdG8gbGl2ZSBvbiB3aGVuIHdlJ3JlIGxvd2Vy
ZWQsIGl0J3MgYSBoaWdoIHpvbWJpZS4KK2NsYXNzIEhpZ2hab21iaWVGaW5kZXIgZXh0ZW5kcyBW
aXNpdG9yIHsKKyAgICBfZm91bmQobm9kZSkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBFcnJv
cihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiOiBIaWdoIHpvbWJpZTogIiArIG5vZGUpOwor
ICAgIH0KKyAgICAKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAg
IHRoaXMuX2ZvdW5kKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lv
bihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fZm91bmQobm9kZSk7CisgICAgfQorICAgIAor
ICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0
Q2FsbEV4cHJlc3Npb24obm9kZSk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9JZGVudGl0eUV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSWRlbnRpdHlFeHByZXNzaW9uLmpzCShub25leGlzdGVu
dCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIElkZW50aXR5RXhw
cmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKHRhcmdldCkKKyAg
ICB7CisgICAgICAgIHN1cGVyKHRhcmdldC5vcmlnaW4pOworICAgICAgICB0aGlzLl90YXJnZXQg
PSB0YXJnZXQ7CisgICAgfQorICAgIAorICAgIGdldCB0YXJnZXQoKSB7IHJldHVybiB0aGlzLl90
YXJnZXQ7IH0KKyAgICAKKyAgICBnZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy50YXJnZXQu
dW5pZnlOb2RlOyB9CisgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdGhpcy50YXJnZXQu
aXNDb25zdGV4cHI7IH0KKyAgICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0aGlzLnRhcmdldC5p
c0xWYWx1ZTsgfQorICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiB0aGlzLnRhcmdldC5h
ZGRyZXNzU3BhY2U7IH0KKyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1
cm4gIigiICsgdGhpcy50YXJnZXQgKyAiKSI7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmRleEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzCShub25leGlzdGVu
dCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZGV4RXhwcmVzc2lvbi5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIEluZGV4RXhwcmVzc2lv
biBleHRlbmRzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Iob3Jp
Z2luLCBhcnJheSwgaW5kZXgpCisgICAgeworICAgICAgICBzdXBlcihvcmlnaW4sIGFycmF5KTsK
KyAgICAgICAgdGhpcy5faW5kZXggPSBpbmRleDsKKyAgICB9CisgICAgCisgICAgZ2V0IGFycmF5
KCkgeyByZXR1cm4gdGhpcy5iYXNlOyB9CisgICAgZ2V0IGluZGV4KCkgeyByZXR1cm4gdGhpcy5f
aW5kZXg7IH0KKyAgICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0aGlzLmFycmF5LmlzTFZhbHVl
OyB9CisgICAgZ2V0IGFkZHJlc3NTcGFjZSgpIHsgcmV0dXJuIHRoaXMuYXJyYXkuYWRkcmVzc1Nw
YWNlOyB9CisgICAgCisgICAgZ2V0IGdldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yW10i
OyB9CisgICAgZ2V0IGFuZEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yJltdIjsgfQorICAg
IGdldCBzZXRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvcltdPSI7IH0KKworICAgIHVwZGF0
ZUNhbGxzKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JHZXQpCisgICAgICAgICAg
ICB0aGlzLmNhbGxGb3JHZXQuYXJndW1lbnRMaXN0WzFdID0gdGhpcy5pbmRleDsKKyAgICAgICAg
aWYgKHRoaXMuY2FsbEZvckFuZCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvckFuZC5hcmd1bWVu
dExpc3RbMV0gPSB0aGlzLmluZGV4OworICAgICAgICBpZiAodGhpcy5jYWxsRm9yU2V0KQorICAg
ICAgICAgICAgdGhpcy5jYWxsRm9yU2V0LmFyZ3VtZW50TGlzdFsxXSA9IHRoaXMuaW5kZXg7Cisg
ICAgICAgIHN1cGVyLnVwZGF0ZUNhbGxzKCk7CisgICAgfQorCisgICAgdG9TdHJpbmcoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICIoIiArIHRoaXMuYXJyYXkgKyAiWyIgKyB0aGlzLmluZGV4ICsg
Il0pIjsKKyAgICB9Cit9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZl
clR5cGVzRm9yQ2FsbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9JbmZlclR5cGVzRm9yQ2FsbC5qcwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDcgKzQxLDcgQEAgZnVuY3Rpb24gaW5mZXJUeXBlc0ZvckNhbGwoZnVuYywgdHlwZUFy
ZwogICAgICAgICBpZiAoIWFyZ3VtZW50VHlwZXNbaV0pCiAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIk51bGwgYXJndW1lbnQgdHlwZSBhdCBpID0gIiArIGkpOwogICAgICAgICBpZiAoIWFy
Z3VtZW50VHlwZXNbaV0udW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBmdW5jLnBhcmFtZXRlcnNb
aV0udHlwZSkpCi0gICAgICAgICAgICByZXR1cm4ge2ZhaWx1cmU6IG5ldyBPdmVybG9hZFJlc29s
dXRpb25GYWlsdXJlKGZ1bmMsICJBcmd1bWVudCAjIiArIChpICsgMSkgKyAiICIgKyAoZnVuYy5w
YXJhbWV0ZXJzW2ldLm5hbWUgPyAiZm9yIHBhcmFtZXRlciAiICsgZnVuYy5wYXJhbWV0ZXJzW2ld
Lm5hbWUgOiAiIikgKyAiIGRvZXMgbm90IG1hdGNoIChwYXNzZWQgIiArIGFyZ3VtZW50VHlwZXNb
aV0gKyAiLCByZXF1aXJlICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSArICIpIil9OworICAg
ICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShm
dW5jLCAiQXJndW1lbnQgIyIgKyAoaSArIDEpICsgIiAiICsgKGZ1bmMucGFyYW1ldGVyc1tpXS5u
YW1lID8gImZvciBwYXJhbWV0ZXIgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lICsgIiAiIDog
IiIpICsgImRvZXMgbm90IG1hdGNoIChwYXNzZWQgIiArIGFyZ3VtZW50VHlwZXNbaV0gKyAiLCBy
ZXF1aXJlICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSArICIpIil9OwogICAgIH0KICAgICBp
ZiAocmV0dXJuVHlwZSAmJiAhcmV0dXJuVHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIGZ1
bmMucmV0dXJuVHlwZSkpCiAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92ZXJsb2FkUmVz
b2x1dGlvbkZhaWx1cmUoZnVuYywgIlJldHVybiB0eXBlICIgKyBmdW5jLnJldHVyblR5cGUgKyAi
IGRvZXMgbm90IG1hdGNoICIgKyByZXR1cm5UeXBlKX07CkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9JbmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvSW5saW5lLmpzCShyZXZpc2lvbiAyMjIxMzgpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDYg
QEAgZnVuY3Rpb24gX2lubGluZUZ1bmN0aW9uKHByb2dyYW0sIGZ1bmMsIAogICAgIGlmIChmdW5j
LmlubGluZWQgfHwgZnVuYy5pc05hdGl2ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGZ1
bmMucmV3cml0ZShuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCkpOwotICAgIAogICAgIC8vIFRo
aXMgaXMgdGhlIHByZWNpc2UgdGltZSB3aGVuIHdlIGNhbiBidWlsZCBFQnVmZmVycyBpbiBvcmRl
ciB0byBnZXQgdGhlbSB0byBiZSB1bmlxdWVkIGJ5CiAgICAgLy8gdHlwZSBpbnN0YW50aWF0aW9u
IGJ1dCBub3RoaW5nIGVsc2UuCiAgICAgZnVuYy52aXNpdChuZXcgU3RydWN0TGF5b3V0QnVpbGRl
cigpKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwkocmV2
aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMzIsMjQgKzMyLDE1IEBAIGNsYXNzIElubGluZXIgZXh0ZW5k
cyBSZXdyaXRlciB7CiAgICAgICAgIHRoaXMuX3Zpc2l0aW5nID0gdmlzaXRpbmc7CiAgICAgfQog
ICAgIAotICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgbGV0IHJl
c3VsdCA9IHN1cGVyLnZpc2l0RG90RXhwcmVzc2lvbihub2RlKTsKLSAgICAgICAgcmVzdWx0LmZp
ZWxkID0gcmVzdWx0LnN0cnVjdFR5cGUudW5pZnlOb2RlLmZpZWxkQnlOYW1lKHJlc3VsdC5maWVs
ZE5hbWUpOwotICAgICAgICBpZiAocmVzdWx0LmZpZWxkLm9mZnNldCA9PSBudWxsKQotICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbi1sYWlkLW91dCBmaWVsZDogIiArIHJlc3VsdC5maWVs
ZCArICIgKGluICIgKyByZXN1bHQuc3RydWN0VHlwZSArICIpIik7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7
CiAgICAgICAgIGxldCByZXN1bHQgPSBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOwor
ICAgICAgICBpZiAocmVzdWx0Lm5hdGl2ZUZ1bmNJbnN0YW5jZSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgIHJldHVybiB0aGlzLl92aXNpdGluZy5kb1Zpc2l0KG5vZGUuZnVu
YywgKCkgPT4gewogICAgICAgICAgICAgbGV0IGZ1bmMgPSB0aGlzLl9wcm9ncmFtLmZ1bmNJbnN0
YW50aWF0b3IuZ2V0VW5pcXVlKHJlc3VsdC5mdW5jLCByZXN1bHQuYWN0dWFsVHlwZUFyZ3VtZW50
cyk7Ci0gICAgICAgICAgICBpZiAoZnVuYy5pc05hdGl2ZSkgewotICAgICAgICAgICAgICAgIHJl
c3VsdC5uYXRpdmVGdW5jSW5zdGFuY2UgPSBmdW5jOwotICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZnVuYy5pc05hdGl2ZSkKKyAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbmF0aXZlIGZ1bmM6ICIg
KyBmdW5jKTsKICAgICAgICAgICAgIF9pbmxpbmVGdW5jdGlvbih0aGlzLl9wcm9ncmFtLCBmdW5j
LCB0aGlzLl92aXNpdGluZyk7CiAgICAgICAgICAgICBsZXQgcmVzdWx0aW5nQmxvY2sgPSBuZXcg
RnVuY3Rpb25MaWtlQmxvY2soCiAgICAgICAgICAgICAgICAgcmVzdWx0Lm9yaWdpbiwgZnVuYy5y
ZXR1cm5UeXBlLCByZXN1bHQuYXJndW1lbnRMaXN0LCBmdW5jLnBhcmFtZXRlcnMsIGZ1bmMuYm9k
eSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMJ
KHJldmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJp
bnNpY3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw2ICsyMzcsODggQEAgY2xhc3MgSW50cmlu
c2ljcyB7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCiAgICAgICAgIHRoaXMuX21hcC5zZXQo
CisgICAgICAgICAgICAibmF0aXZlIGludCBvcGVyYXRvciY8PihpbnQsaW50KSIsCisgICAgICAg
ICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFts
ZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZh
bHVlKCkgJiByaWdodC5sb2FkVmFsdWUoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisg
ICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0aXZlIHVpbnQgb3BlcmF0b3Im
PD4odWludCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBm
dW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAg
ICAgIEVQdHIuYm94KChsZWZ0LmxvYWRWYWx1ZSgpICYgcmlnaHQubG9hZFZhbHVlKCkpID4+PiAw
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAg
ICAgICAgICAgICJuYXRpdmUgaW50IG9wZXJhdG9yfDw+KGludCxpbnQpIiwKKyAgICAgICAgICAg
IGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQs
IHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2FkVmFsdWUo
KSB8IHJpZ2h0LmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAg
ICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgdWludCBvcGVyYXRvcnw8Pih1
aW50LHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMu
aW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAg
RVB0ci5ib3goKGxlZnQubG9hZFZhbHVlKCkgfCByaWdodC5sb2FkVmFsdWUoKSkgPj4+IDApOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAg
ICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0b3JePD4oaW50LGludCkiLAorICAgICAgICAgICAgZnVu
YyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmln
aHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJveChsZWZ0LmxvYWRWYWx1ZSgpIF4g
cmlnaHQubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0
aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSB1aW50IG9wZXJhdG9yXjw+KHVpbnQs
dWludCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBs
ZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRy
LmJveCgobGVmdC5sb2FkVmFsdWUoKSBeIHJpZ2h0LmxvYWRWYWx1ZSgpKSA+Pj4gMCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAg
ICAibmF0aXZlIGludCBvcGVyYXRvcjw8PD4oaW50LHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMg
PT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0
XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2FkVmFsdWUoKSA8PCBy
aWdodC5sb2FkVmFsdWUoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRo
aXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0aXZlIHVpbnQgb3BlcmF0b3I8PDw+KHVpbnQs
dWludCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBs
ZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRy
LmJveCgobGVmdC5sb2FkVmFsdWUoKSA8PCByaWdodC5sb2FkVmFsdWUoKSkgPj4+IDApOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAg
ICAgIm5hdGl2ZSBpbnQgb3BlcmF0b3I+Pjw+KGludCx1aW50KSIsCisgICAgICAgICAgICBmdW5j
ID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdo
dF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkgPj4g
cmlnaHQubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0
aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSB1aW50IG9wZXJhdG9yPj48Pih1aW50
LHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1w
bGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0
ci5ib3gobGVmdC5sb2FkVmFsdWUoKSA+Pj4gcmlnaHQubG9hZFZhbHVlKCkpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5h
dGl2ZSBpbnQgb3BlcmF0b3J+PD4oaW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAg
ICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFt2YWx1ZV0pID0+IEVQdHIuYm94KH52
YWx1ZS5sb2FkVmFsdWUoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRo
aXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0aXZlIHVpbnQgb3BlcmF0b3J+PD4odWludCki
LAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRh
dGlvbiA9IChbdmFsdWVdKSA9PiBFUHRyLmJveCgofnZhbHVlLmxvYWRWYWx1ZSgpKSA+Pj4gMCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCiAgICAg
ICAgICAgICAibmF0aXZlIGZsb2F0IG9wZXJhdG9yLzw+KGZsb2F0LGZsb2F0KSIsCiAgICAgICAg
ICAgICBmdW5jID0+IHsKICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFts
ZWZ0LCByaWdodF0pID0+CkBAIC0zOTcsMzAgKzQ3OSwzMiBAQCBjbGFzcyBJbnRyaW5zaWNzIHsK
ICAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2FkVmFsdWUoKSA+PSByaWdodC5s
b2FkVmFsdWUoKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIGxldCBhcnJh
eUVsZW1lbnRQdHIgPSBmdW5jID0+IHsKLSAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24g
PSAoW3JlZiwgaW5kZXhdLCBub2RlKSA9PiB7Ci0gICAgICAgICAgICAgICAgcmVmID0gcmVmLmxv
YWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICghcmVmKQotICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGRl
cmVmZXJlbmNlIik7Ci0gICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleC5sb2FkVmFsdWUoKTsK
LSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiByZWYubGVuZ3RoKQotICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJBcnJh
eSBpbmRleCAiICsgaW5kZXggKyAiIGlzIG91dCBvZiBib3VuZHMgb2YgIiArIHJlZik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIEVQdHIuYm94KHJlZi5wdHIucGx1cyhpbmRleCAqIG5vZGUuYWN0
dWFsVHlwZUFyZ3VtZW50c1swXS5zaXplKSk7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Owot
ICAgICAgICAKLSAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgVF4g
dGhyZWFkIG9wZXJhdG9yJltdPFQ+KFRbXSB0aHJlYWQsdWludCkiLAotICAgICAgICAgICAgYXJy
YXlFbGVtZW50UHRyKTsKLSAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRp
dmUgVF4gdGhyZWFkZ3JvdXAgb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KFRbXSB0aHJlYWRncm91
cCx1aW50KSIsCi0gICAgICAgICAgICBhcnJheUVsZW1lbnRQdHIpOwotICAgICAgICB0aGlzLl9t
YXAuc2V0KAotICAgICAgICAgICAgIm5hdGl2ZSBUXiBkZXZpY2Ugb3BlcmF0b3ImW108VDpwcmlt
aXRpdmU+KFRbXSBkZXZpY2UsdWludCkiLAotICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsK
LSAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgVF4gY29uc3RhbnQg
b3BlcmF0b3ImW108VDpwcmltaXRpdmU+KFRbXSBjb25zdGFudCx1aW50KSIsCi0gICAgICAgICAg
ICBhcnJheUVsZW1lbnRQdHIpOworICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2Ugb2YgYWRk
cmVzc1NwYWNlcykgeworICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICAg
ICBgbmF0aXZlIFReICR7YWRkcmVzc1NwYWNlfSBvcGVyYXRvciZbXTxUJHtwcm90b2NvbFN1ZmZp
eChhZGRyZXNzU3BhY2UpfT4oVFtdICR7YWRkcmVzc1NwYWNlfSx1aW50KWAsCisgICAgICAgICAg
ICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24g
PSAoW3JlZiwgaW5kZXhdLCBub2RlKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWYg
PSByZWYubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleCA9IGluZGV4LmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGluZGV4ID4gcmVmLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJBcnJheSBpbmRleCAi
ICsgaW5kZXggKyAiIGlzIG91dCBvZiBib3VuZHMgb2YgIiArIHJlZik7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gRVB0ci5ib3gocmVmLnB0ci5wbHVzKGluZGV4ICogbm9kZS5hY3R1
YWxUeXBlQXJndW1lbnRzWzBdLnNpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAg
ICAgICBgbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQke3Byb3RvY29sU3VmZml4KGFkZHJl
c3NTcGFjZSl9PihUW10gJHthZGRyZXNzU3BhY2V9KWAsCisgICAgICAgICAgICAgICAgZnVuYyA9
PiB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZl0sIG5v
ZGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZiA9IHJlZi5sb2FkVmFsdWUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVmKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBFUHRyLmJveCgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBFUHRyLmJveChyZWYubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBhZGQodGhpbmcpCkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xldEV4cHJlc3Npb24uanMJKHJl
dmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xldEV4cHJl
c3Npb24uanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWxldCBsZXRFeHBy
ZXNzaW9uQ291bnQgPSAwOwotCi1jbGFzcyBMZXRFeHByZXNzaW9uIGV4dGVuZHMgVmFsdWUgewot
ICAgIGNvbnN0cnVjdG9yKG9yaWdpbikKLSAgICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgICAg
IHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKLSAgICAgICAgdGhpcy5pbmRleCA9IGxldEV4cHJlc3Np
b25Db3VudCsrOwotICAgICAgICB0aGlzLmFyZ3VtZW50ID0gbnVsbDsKLSAgICAgICAgdGhpcy5i
b2R5ID0gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMu
X29yaWdpbjsgfQotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gImxldDwiICsgdGhpcy5pbmRleCAr
ICI+IjsgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Lm5hbWUgKyAiKCIgKyB0aGlzLmFyZ3VtZW50ICsgIiwgIiArIHRoaXMuYm9keSArICIpIjsKLSAg
ICB9Ci19Ci0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xleGVyLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xleGVyLmpzCShyZXZp
c2lvbiAyMjIxMzgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlci5qcwko
d29ya2luZyBjb3B5KQpAQCAtMTE3LDEzICsxMTcsMTkgQEAgY2xhc3MgTGV4ZXIgewogICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdCgiaWRlbnRpZmllciIpOwogICAgICAgICB9CiAKKyAgICAgICAg
aWYgKC9eMHhbMC05YS1mQS1GXSt1Ly50ZXN0KHJlbGV2YW50VGV4dCkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0KCJ1aW50SGV4TGl0ZXJhbCIpOworCisgICAgICAgIGlmICgvXjB4WzAtOWEt
ZkEtRl0rLy50ZXN0KHJlbGV2YW50VGV4dCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJp
bnRIZXhMaXRlcmFsIik7CisKICAgICAgICAgaWYgKC9eWzAtOV0rdS8udGVzdChyZWxldmFudFRl
eHQpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgidWludExpdGVyYWwiKTsKIAogICAgICAg
ICBpZiAoL15bMC05XSsvLnRlc3QocmVsZXZhbnRUZXh0KSkKICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQoImludExpdGVyYWwiKTsKICAgICAgICAgCi0gICAgICAgIGlmICgvXi0+fD49fDw9fD09
fCE9fFwrPXwtPXxcKj18XC89fCU9fF49fFx8PXwmPXxcK1wrfC0tfChbe30oKVxbXF0/Oj0rKlwv
LC4lIX5eJnw8PkA7LV0pLy50ZXN0KHJlbGV2YW50VGV4dCkpCisgICAgICAgIGlmICgvXjw8fD4+
fC0+fD49fDw9fD09fCE9fFwrPXwtPXxcKj18XC89fCU9fFxePXxcfD18Jj18XCtcK3wtLXwoW3t9
KClcW1xdPzo9KypcLywuJSF+XiZ8PD5AOy1dKS8udGVzdChyZWxldmFudFRleHQpKQogICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdCgicHVuY3R1YXRpb24iKTsKICAgICAgICAgCiAgICAgICAgIGxl
dCByZW1haW5pbmcgPSByZWxldmFudFRleHQuc3Vic3RyaW5nKDAsIDIwKS5zcGxpdCgvXHMvKVsw
XTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJl
c3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFr
ZUFycmF5UmVmRXhwcmVzc2lvbi5qcwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5
KQpAQCAtMzMsMTEgKzMzLDYgQEAgY2xhc3MgTWFrZUFycmF5UmVmRXhwcmVzc2lvbiBleHRlbmRz
IEV4cAogICAgIAogICAgIGdldCBsVmFsdWUoKSB7IHJldHVybiB0aGlzLl9sVmFsdWU7IH0KICAg
ICAKLSAgICBiZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fX3Byb3RvX18gPSBDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24ucHJv
dG90eXBlOwotICAgIH0KLSAgICAKICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1
cm4gIkAiICsgKHRoaXMubnVtRWxlbWVudHMgPyAiPDwiICsgdGhpcy5udW1FbGVtZW50cyArICI+
PiIgOiAiIikgKyAiKCIgKyB0aGlzLmxWYWx1ZSArICIpIjsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCShyZXZpc2lvbiAyMjIxMzgpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lQ29udGV4dC5qcwkod29ya2luZyBjb3B5
KQpAQCAtMzYsNyArMzYsNiBAQCBjbGFzcyBOYW1lQ29udGV4dCB7CiAgICAgewogICAgICAgICB0
aGlzLl9tYXAgPSBuZXcgTWFwKCk7CiAgICAgICAgIHRoaXMuX3NldCA9IG5ldyBTZXQoKTsKLSAg
ICAgICAgdGhpcy5fZGVmaW5lZCA9IG51bGw7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZW1l
bnQgPSBudWxsOwogICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwogICAgICAgICB0
aGlzLl9pbnRyaW5zaWNzID0gbnVsbDsKQEAgLTYyLDcgKzYxLDcgQEAgY2xhc3MgTmFtZUNvbnRl
eHQgewogICAgICAgICBpZiAoIXRoaW5nLm5hbWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIAotICAgICAgICBpZiAodGhpbmcuaXNOYXRpdmUpIHsKKyAgICAgICAgaWYgKHRoaW5nLmlz
TmF0aXZlICYmICF0aGluZy5pbXBsZW1lbnRhdGlvbikgewogICAgICAgICAgICAgaWYgKCF0aGlz
Ll9pbnRyaW5zaWNzKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTmF0aXZlIGZ1
bmN0aW9uIGluIGEgc2NvcGUgdGhhdCBkb2VzIG5vdCByZWNvZ25pemUgaW50cmluc2ljcyIpOwog
ICAgICAgICAgICAgdGhpcy5faW50cmluc2ljcy5hZGQodGhpbmcpOwpAQCAtMTE1LDM2ICsxMTQs
MTEgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAg
ICAgCi0gICAgaGFuZGxlRGVmaW5pbmcoKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVmaW5lZCA9
IG5ldyBTZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgaXNEZWZpbmVkKHRoaW5nKQotICAgIHsKLSAg
ICAgICAgaWYgKHRoaXMuX3NldC5oYXModGhpbmcpKSB7Ci0gICAgICAgICAgICByZXR1cm4gIXRo
aXMuX2RlZmluZWQKLSAgICAgICAgICAgICAgICB8fCB0aGlzLl9kZWZpbmVkLmhhcyh0aGluZyk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlICYmIHRoaXMuX2RlbGVn
YXRlLmlzRGVmaW5lZCh0aGluZyk7Ci0gICAgfQotICAgIAotICAgIGRlZmluZSh0aGluZykKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX2RlZmluZWQuYWRkKHRoaW5nKTsKLSAgICB9Ci0gICAgCi0gICAg
ZGVmaW5lQWxsKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RlZmluZWQgPSBudWxsOwotICAgIH0K
LSAgICAKICAgICBkb1N0YXRlbWVudChzdGF0ZW1lbnQsIGNhbGxiYWNrKQogICAgIHsKICAgICAg
ICAgdGhpcy5fY3VycmVudFN0YXRlbWVudCA9IHN0YXRlbWVudDsKICAgICAgICAgY2FsbGJhY2so
KTsKICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlbWVudCA9IG51bGw7Ci0gICAgICAgIHRoaXMu
ZGVmaW5lKHN0YXRlbWVudCk7CiAgICAgfQogICAgIAogICAgIHJlY29nbml6ZUludHJpbnNpY3Mo
KQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVSZXNvbHZlci5q
cwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFt
ZVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNyArMzAsMTUgQEAKIC8vIG1vcmUg
Y29udmVuaWVudCB0byBjaGVjayBoZXJlIHRoYW4gaW4gdGhlIENoZWNrZXIuIFRoaXMgdXN1YWxs
eSBpbnZvbHZlcyB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlCiAvLyBjaGVja2VkIGJlZm9yZSBUeXBl
UmVmVG9UeXBlRGVmU2tpcHBlci4KIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3Ig
ewotICAgIC8vIEl0J3MgdG90YWxseSBPSyB0byBpbnN0YW50aWF0ZSB0aGlzIHdpdGggemVybyBh
cmd1bWVudHMgKGkuZS4gcGFzc2luZyB1bmRlZmluZWQgZm9yIGJvdGggb2YKLSAgICAvLyB0aGVt
KSBpZiB5b3UncmUgY3JlYXRpbmcgYSBOYW1lUmVzb2x2ZXIgdG8gdmlzaXQgYSBQcm9ncmFtLgog
ICAgIGNvbnN0cnVjdG9yKG5hbWVDb250ZXh0KQogICAgIHsKICAgICAgICAgc3VwZXIoKTsKICAg
ICAgICAgdGhpcy5fbmFtZUNvbnRleHQgPSBuYW1lQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAg
dmlzaXRQcm9ncmFtKG5vZGUpCisKKyAgICBkb1N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAgewot
ICAgICAgICBsZXQgbmFtZUNvbnRleHQgPSBuZXcgTmFtZUNvbnRleHQodGhpcy5fbmFtZUNvbnRl
eHQpOwotICAgICAgICBuYW1lQ29udGV4dC5wcm9ncmFtID0gbm9kZTsKLSAgICAgICAgbmFtZUNv
bnRleHQucmVjb2duaXplSW50cmluc2ljcygpOwotICAgICAgICBuYW1lQ29udGV4dC5oYW5kbGVE
ZWZpbmluZygpOwotICAgICAgICBub2RlLmludHJpbnNpY3MgPSBuYW1lQ29udGV4dC5pbnRyaW5z
aWNzOwotICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVu
dHMpCi0gICAgICAgICAgICBuYW1lQ29udGV4dC5hZGQoc3RhdGVtZW50KTsKLSAgICAgICAgbGV0
IGNoZWNrZXIgPSBuZXcgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KTsKLSAgICAgICAgZm9yIChs
ZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKQotICAgICAgICAgICAgbmFt
ZUNvbnRleHQuZG9TdGF0ZW1lbnQoc3RhdGVtZW50LCAoKSA9PiBzdGF0ZW1lbnQudmlzaXQoY2hl
Y2tlcikpOwotICAgICAgICBub2RlLmdsb2JhbE5hbWVDb250ZXh0ID0gbmFtZUNvbnRleHQ7Cisg
ICAgICAgIHRoaXMuX25hbWVDb250ZXh0LmRvU3RhdGVtZW50KHN0YXRlbWVudCwgKCkgPT4gc3Rh
dGVtZW50LnZpc2l0KHRoaXMpKTsKICAgICB9CiAgICAgCiAgICAgX3Zpc2l0VHlwZVBhcmFtZXRl
cnNBbmRCdWlsZE5hbWVDb250ZXh0KG5vZGUpCkBAIC0yMDcsOCArMTk1LDYgQEAgY2xhc3MgTmFt
ZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICB0eXBlID0gdGhpcy5fbmFt
ZUNvbnRleHQuZ2V0KFR5cGUsIG5vZGUubmFtZSk7CiAgICAgICAgICAgICBpZiAoIXR5cGUpCiAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3Ry
aW5nLCAiQ291bGQgbm90IGZpbmQgdHlwZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKLSAgICAgICAg
ICAgIGlmICghdGhpcy5fbmFtZUNvbnRleHQuaXNEZWZpbmVkKHR5cGUpKQotICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIklsbGVn
YWwgZm9yd2FyZCB1c2Ugb2YgdHlwZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKICAgICAgICAgICAg
IG5vZGUudHlwZSA9IHR5cGU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMzAsNyArMjE2LDYg
QEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgdmlzaXRSZWZlcmVu
Y2VUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgbmFtZUNvbnRleHQgPSBuZXcgTmFtZUNv
bnRleHQodGhpcy5fbmFtZUNvbnRleHQpOwotICAgICAgICBuYW1lQ29udGV4dC5kZWZpbmVBbGwo
KTsKICAgICAgICAgbm9kZS5lbGVtZW50VHlwZS52aXNpdChuZXcgTmFtZVJlc29sdmVyKG5hbWVD
b250ZXh0KSk7CiAgICAgfQogICAgIApAQCAtMjU4LDYgKzI0MywyOCBAQCBjbGFzcyBOYW1lUmVz
b2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgc3VwZXIudmlzaXRSZXR1cm4obm9kZSk7
CiAgICAgfQogICAgIAorICAgIF9oYW5kbGVQcm9wZXJ0eUFjY2Vzcyhub2RlKQorICAgIHsKKyAg
ICAgICAgbm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkcyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChG
dW5jLCBub2RlLmdldEZ1bmNOYW1lKTsKKyAgICAgICAgbm9kZS5wb3NzaWJsZVNldE92ZXJsb2Fk
cyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLnNldEZ1bmNOYW1lKTsKKyAgICAg
ICAgbm9kZS5wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5j
LCBub2RlLmFuZEZ1bmNOYW1lKTsKKworICAgICAgICBpZiAoIW5vZGUucG9zc2libGVHZXRPdmVy
bG9hZHMgJiYgIW5vZGUucG9zc2libGVBbmRPdmVybG9hZHMpCisgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmluZCBlaXRo
ZXIgIiArIG5vZGUuZ2V0RnVuY05hbWUgKyAiIG9yICIgKyBub2RlLmFuZEZ1bmNOYW1lKTsKKyAg
ICB9CisgICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0
aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzcyhub2RlKTsKKyAgICAgICAgc3VwZXIudmlzaXREb3RF
eHByZXNzaW9uKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihu
b2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVydHlBY2Nlc3Mobm9kZSk7Cisg
ICAgICAgIHN1cGVyLnZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpOworICAgIH0KKyAgICAKICAg
ICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICB0aGlzLl9yZXNvbHZl
VHlwZUFyZ3VtZW50cyhub2RlLnR5cGVBcmd1bWVudHMpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpzCShyZXZpc2lvbiAyMjIxMzgpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSwxMCBAQCBjbGFzcyBOYXRpdmVGdW5jIGV4dGVuZHMgRnVuYyB7CiAgICAgewog
ICAgICAgICBzdXBlcihvcmlnaW4sIG5hbWUsIHJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzLCBw
YXJhbWV0ZXJzLCBpc0Nhc3QpOwogICAgICAgICB0aGlzLmlzUmVzdHJpY3RlZCA9IGZhbHNlOwor
ICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uID0gbnVsbDsKKyAgICAgICAgdGhpcy5pbnN0YW50
aWF0ZUltcGxlbWVudGF0aW9uID0gKHN1YnN0aXR1dGlvbikgPT4ge307CisgICAgICAgIHRoaXMu
dmlzaXRJbXBsZW1lbnRhdGlvbkRhdGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9
PiBudWxsOworICAgICAgICB0aGlzLmRpZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0
YSA9IGltcGxlbWVudGF0aW9uRGF0YSA9PiBudWxsOwogICAgIH0KICAgICAKICAgICBnZXQgaXNO
YXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCShyZXZpc2lvbiAyMjIxMzgpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanMJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNiBAQAogInVzZSBzdHJpY3QiOwogCiBjbGFzcyBO
YXRpdmVGdW5jSW5zdGFuY2UgZXh0ZW5kcyBGdW5jIHsKLSAgICBjb25zdHJ1Y3RvcihmdW5jLCBy
ZXR1cm5UeXBlLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpCisgICAgY29uc3RydWN0b3IoZnVuYywgcmV0
dXJuVHlwZSwgcGFyYW1ldGVycywgaXNDYXN0LCBpbXBsZW1lbnRhdGlvbkRhdGEpCiAgICAgewog
ICAgICAgICBzdXBlcihmdW5jLm9yaWdpbiwgZnVuYy5uYW1lLCByZXR1cm5UeXBlLCBbXSwgcGFy
YW1ldGVycywgaXNDYXN0KTsKICAgICAgICAgdGhpcy5fZnVuYyA9IGZ1bmM7CisgICAgICAgIHRo
aXMuX2ltcGxlbWVudGF0aW9uRGF0YSA9IGltcGxlbWVudGF0aW9uRGF0YTsKICAgICB9CiAgICAg
CiAgICAgZ2V0IGZ1bmMoKSB7IHJldHVybiB0aGlzLl9mdW5jOyB9CiAgICAgZ2V0IGlzTmF0aXZl
KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGdldCBpbXBsZW1lbnRhdGlvbkRhdGEoKSB7IHJldHVy
biB0aGlzLl9pbXBsZW1lbnRhdGlvbkRhdGE7IH0KIAogICAgIHRvRGVjbFN0cmluZygpCiAgICAg
ewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCShyZXZpc2lvbiAyMjIx
MzgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw5ICszMywxNyBAQCBjbGFzcyBOb2RlIHsKICAgICAgICAgbGV0IHJldHVyblZh
bHVlID0gdmlzaXRGdW5jLmNhbGwodmlzaXRvciwgdGhpcyk7CiAgICAgICAgIGlmICgicmV0dXJu
VmFsdWUiIGluIHZpc2l0b3IpCiAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHZpc2l0b3IucmV0
dXJuVmFsdWU7CisgICAgICAgIAogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQog
ICAgIAorICAgIHN0YXRpYyB2aXNpdChub2RlLCB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgaWYg
KG5vZGUgaW5zdGFuY2VvZiBOb2RlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUudmlzaXQodmlz
aXRvcik7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKyAgICAKICAgICB1bmlmeSh1bmlm
aWNhdGlvbkNvbnRleHQsIG90aGVyKQogICAgIHsKICAgICAgICAgaWYgKCFvdGhlcikKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9ybWFsVXNl
UHJvcGVydHlSZXNvbHZlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlciBleHRl
bmRzIFJld3JpdGVyIHsKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdXBlci52aXNpdERvdEV4cHJlc3Npb24obm9kZSkucmV3cml0ZUFmdGVyQ2xv
bmluZygpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpLnJld3Jp
dGVBZnRlckNsb25pbmcoKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1BhcnNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1BhcnNlLmpzCShyZXZpc2lvbiAyMjIxMzgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9QYXJzZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMTcyLDE3ICsxNzIsMzcgQEAg
ZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAgICBpZiAodG9r
ZW4gPSB0cnlDb25zdW1lS2luZCgiaWRlbnRpZmllciIpKQogICAgICAgICAgICAgcmV0dXJuIG5l
dyBWYXJpYWJsZVJlZih0b2tlbiwgdG9rZW4udGV4dCk7CiAgICAgICAgIGlmICh0b2tlbiA9IHRy
eUNvbnN1bWVLaW5kKCJpbnRMaXRlcmFsIikpIHsKLSAgICAgICAgICAgIGxldCBpbnRWZXJzaW9u
ID0gTWF0aC5mbG9vcigrdG9rZW4udGV4dCk7CisgICAgICAgICAgICBsZXQgaW50VmVyc2lvbiA9
ICgrdG9rZW4udGV4dCkgfCAwOwogICAgICAgICAgICAgaWYgKCIiICsgaW50VmVyc2lvbiAhPT0g
dG9rZW4udGV4dCkKLSAgICAgICAgICAgICAgICBsZXhlci5mYWlsKCJJbnRlZ2VyIGxpdGVyYWwg
aXMgbm90IGFuIGludGVnZXIiKTsKKyAgICAgICAgICAgICAgICBsZXhlci5mYWlsKCJJbnRlZ2Vy
IGxpdGVyYWwgaXMgbm90IGFuIGludGVnZXI6ICIgKyB0b2tlbi50ZXh0KTsKICAgICAgICAgICAg
IHJldHVybiBuZXcgSW50TGl0ZXJhbCh0b2tlbiwgaW50VmVyc2lvbik7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQoInVpbnRMaXRlcmFsIikpIHsKICAgICAg
ICAgICAgIGxldCB1aW50VmVyc2lvbiA9IHRva2VuLnRleHQuc3Vic3RyKDAsIHRva2VuLnRleHQu
bGVuZ3RoIC0gMSkgPj4+IDA7CiAgICAgICAgICAgICBpZiAodWludFZlcnNpb24gKyAidSIgIT09
IHRva2VuLnRleHQpCi0gICAgICAgICAgICAgICAgbGV4ZXIuZmFpbCgiSW50ZWdlciBsaXRlcmFs
IGlzIG5vdCAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciIpOworICAgICAgICAgICAgICAgIGxleGVy
LmZhaWwoIkludGVnZXIgbGl0ZXJhbCBpcyBub3QgMzItYml0IHVuc2lnbmVkIGludGVnZXI6ICIg
KyB0b2tlbi50ZXh0KTsKICAgICAgICAgICAgIHJldHVybiBuZXcgVWludExpdGVyYWwodG9rZW4s
IHVpbnRWZXJzaW9uKTsKICAgICAgICAgfQorICAgICAgICBpZiAoKHRva2VuID0gdHJ5Q29uc3Vt
ZUtpbmQoImludEhleExpdGVyYWwiKSkKKyAgICAgICAgICAgIHx8ICh0b2tlbiA9IHRyeUNvbnN1
bWVLaW5kKCJ1aW50SGV4TGl0ZXJhbCIpKSkgeworICAgICAgICAgICAgbGV0IGhleFN0cmluZyA9
IHRva2VuLnRleHQuc3Vic3RyKDIpOworICAgICAgICAgICAgaWYgKHRva2VuLmtpbmQgPT0gInVp
bnRIZXhMaXRlcmFsIikKKyAgICAgICAgICAgICAgICBoZXhTdHJpbmcgPSBoZXhTdHJpbmcuc3Vi
c3RyKDAsIGhleFN0cmluZy5sZW5ndGggLSAxKTsKKyAgICAgICAgICAgIGlmICghaGV4U3RyaW5n
Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBoZXggbGl0ZXJh
bDogIiArIHRva2VuKTsKKyAgICAgICAgICAgIGxldCBpbnRWZXJzaW9uID0gcGFyc2VJbnQoaGV4
U3RyaW5nLCAxNik7CisgICAgICAgICAgICBpZiAodG9rZW4ua2luZCA9PSAiaW50SGV4TGl0ZXJh
bCIpCisgICAgICAgICAgICAgICAgaW50VmVyc2lvbiA9IGludFZlcnNpb24gfCAwOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGludFZlcnNpb24gPSBpbnRWZXJzaW9uID4+PiAw
OworICAgICAgICAgICAgaWYgKGludFZlcnNpb24udG9TdHJpbmcoMTYpICE9PSBoZXhTdHJpbmcp
CisgICAgICAgICAgICAgICAgbGV4ZXIuZmFpbCgiSGV4IGludGVnZXIgbGl0ZXJhbCBpcyBub3Qg
YW4gaW50ZWdlcjogIiArIHRva2VuLnRleHQpOworICAgICAgICAgICAgaWYgKHRva2VuLmtpbmQg
PT0gImludEhleExpdGVyYWwiKQorICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJh
bCh0b2tlbiwgaW50VmVyc2lvbik7CisgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnRMaXRlcmFs
KHRva2VuLCBpbnRWZXJzaW9uID4+PiAwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodG9rZW4g
PSB0cnlDb25zdW1lS2luZCgiZG91YmxlTGl0ZXJhbCIpKQorICAgICAgICAgICAgcmV0dXJuIG5l
dyBEb3VibGVMaXRlcmFsKHRva2VuLCArdG9rZW4udGV4dCk7CiAgICAgICAgIGlmICh0b2tlbiA9
IHRyeUNvbnN1bWVLaW5kKCJmbG9hdExpdGVyYWwiKSkgewogICAgICAgICAgICAgbGV0IHRleHQg
PSB0b2tlbi50ZXh0OwogICAgICAgICAgICAgbGV0IGQgPSB0b2tlbi50ZXh0LmVuZHNXaXRoKCJk
Iik7CkBAIC0zMzEsMTIgKzM1MSwxNCBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4s
IG9yaWdpbktpCiAgICAgICAgIGNvbnN1bWUoIigiKTsKICAgICAgICAgbGV0IGFyZ3VtZW50TGlz
dCA9IFtdOwogICAgICAgICB3aGlsZSAoIXRlc3QoIikiKSkgewotICAgICAgICAgICAgYXJndW1l
bnRMaXN0LnB1c2gocGFyc2VFeHByZXNzaW9uKCkpOworICAgICAgICAgICAgbGV0IGFyZ3VtZW50
ID0gcGFyc2VQb3NzaWJsZUFzc2lnbm1lbnQoKTsKKyAgICAgICAgICAgIGFyZ3VtZW50TGlzdC5w
dXNoKGFyZ3VtZW50KTsKICAgICAgICAgICAgIGlmICghdHJ5Q29uc3VtZSgiLCIpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNvbnN1bWUoIikiKTsKLSAgICAg
ICAgcmV0dXJuIG5ldyBDYWxsRXhwcmVzc2lvbihuYW1lLCBuYW1lLnRleHQsIHR5cGVBcmd1bWVu
dHMsIGFyZ3VtZW50TGlzdCk7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgQ2FsbEV4cHJlc3Np
b24obmFtZSwgbmFtZS50ZXh0LCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudExpc3QpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBmdW5jdGlvbiBpc0NhbGxFeHByZXNz
aW9uKCkKQEAgLTM0OCw5ICszNzAsOSBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4s
IG9yaWdpbktpCiAgICAgICAgIH0pOwogICAgIH0KICAgICAKLSAgICBmdW5jdGlvbiBlbWl0SW5j
cmVtZW50KHRva2VuLCBwdHIsIGV4dHJhQXJnKQorICAgIGZ1bmN0aW9uIGVtaXRJbmNyZW1lbnQo
dG9rZW4sIG9sZCwgZXh0cmFBcmcpCiAgICAgewotICAgICAgICBsZXQgYXJncyA9IFtuZXcgRGVy
ZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpXTsKKyAgICAg
ICAgbGV0IGFyZ3MgPSBbb2xkXTsKICAgICAgICAgaWYgKGV4dHJhQXJnKQogICAgICAgICAgICAg
YXJncy5wdXNoKGV4dHJhQXJnKTsKICAgICAgICAgCkBAIC0zNjEsMjcgKzM4MywxNSBAQCBmdW5j
dGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgIGlmIChuYW1lID09
ICJvcGVyYXRvciIpCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbmFtZTog
IiArIG5hbWUpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50KAotICAg
ICAgICAgICAgdG9rZW4sCi0gICAgICAgICAgICBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRv
a2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpLAotICAgICAgICAgICAgbmV3IENhbGxFeHByZXNz
aW9uKHRva2VuLCBuYW1lLCBbXSwgYXJncykpOworICAgICAgICByZXR1cm4gbmV3IENhbGxFeHBy
ZXNzaW9uKHRva2VuLCBuYW1lLCBbXSwgYXJncyk7CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9u
IGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KHRva2VuLCBsZWZ0KQogICAgIHsKLSAgICAgICAg
bGV0IHB0ciA9IG5ldyBMZXRFeHByZXNzaW9uKHRva2VuKTsKLSAgICAgICAgcHRyLmFyZ3VtZW50
ID0gbmV3IE1ha2VQdHJFeHByZXNzaW9uKHRva2VuLCBsZWZ0KTsKLSAgICAgICAgCi0gICAgICAg
IGxldCBvbGRWYWx1ZSA9IG5ldyBMZXRFeHByZXNzaW9uKHRva2VuKTsKLSAgICAgICAgb2xkVmFs
dWUuYXJndW1lbnQgPSBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJl
Zi53cmFwKHB0cikpOwotICAgICAgICAKLSAgICAgICAgcHRyLmJvZHkgPSBvbGRWYWx1ZTsKLSAg
ICAgICAgCi0gICAgICAgIG9sZFZhbHVlLmJvZHkgPSBuZXcgQ29tbWFFeHByZXNzaW9uKHRva2Vu
LCBbCi0gICAgICAgICAgICBlbWl0SW5jcmVtZW50KHRva2VuLCBwdHIpLAotICAgICAgICAgICAg
VmFyaWFibGVSZWYud3JhcChvbGRWYWx1ZSkKLSAgICAgICAgXSk7Ci0gICAgICAgIHJldHVybiBw
dHI7CisgICAgICAgIGxldCByZWFkTW9kaWZ5V3JpdGUgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbih0b2tlbiwgbGVmdCk7CisgICAgICAgIHJlYWRNb2RpZnlXcml0ZS5uZXdWYWx1ZUV4
cCA9IGVtaXRJbmNyZW1lbnQodG9rZW4sIHJlYWRNb2RpZnlXcml0ZS5vbGRWYWx1ZVJlZigpKTsK
KyAgICAgICAgcmVhZE1vZGlmeVdyaXRlLnJlc3VsdEV4cCA9IHJlYWRNb2RpZnlXcml0ZS5vbGRW
YWx1ZVJlZigpOworICAgICAgICByZXR1cm4gcmVhZE1vZGlmeVdyaXRlOwogICAgIH0KICAgICAK
ICAgICBmdW5jdGlvbiBwYXJzZVBvc3NpYmxlU3VmZml4KCkKQEAgLTQwNiw5ICs0MTYsNyBAQCBm
dW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgICAgICBjYXNl
ICJbIjogewogICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHBhcnNlRXhwcmVzc2lvbigpOwog
ICAgICAgICAgICAgICAgIGNvbnN1bWUoIl0iKTsKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbmV3
IERlcmVmZXJlbmNlRXhwcmVzc2lvbigKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4sCi0gICAg
ICAgICAgICAgICAgICAgIG5ldyBDYWxsRXhwcmVzc2lvbih0b2tlbiwgIm9wZXJhdG9yJltdIiwg
W10sIFtsZWZ0LCBpbmRleF0pKTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbmV3IEluZGV4RXhw
cmVzc2lvbih0b2tlbiwgbGVmdCwgaW5kZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTQyMCwxMyArNDI4LDEwIEBAIGZ1
bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAKICAgICBmdW5jdGlv
biBmaW5pc2hQYXJzaW5nUHJlSW5jcmVtZW50KHRva2VuLCBsZWZ0LCBleHRyYUFyZykKICAgICB7
Ci0gICAgICAgIGxldCBwdHIgPSBuZXcgTGV0RXhwcmVzc2lvbih0b2tlbik7Ci0gICAgICAgIHB0
ci5hcmd1bWVudCA9IG5ldyBNYWtlUHRyRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7Ci0gICAgICAg
IHB0ci5ib2R5ID0gbmV3IENvbW1hRXhwcmVzc2lvbih0b2tlbiwgWwotICAgICAgICAgICAgZW1p
dEluY3JlbWVudCh0b2tlbiwgcHRyLCBleHRyYUFyZyksCi0gICAgICAgICAgICBuZXcgRGVyZWZl
cmVuY2VFeHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpCi0gICAgICAgIF0p
OwotICAgICAgICByZXR1cm4gcHRyOworICAgICAgICBsZXQgcmVhZE1vZGlmeVdyaXRlID0gbmV3
IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24odG9rZW4sIGxlZnQpOworICAgICAgICByZWFkTW9k
aWZ5V3JpdGUubmV3VmFsdWVFeHAgPSBlbWl0SW5jcmVtZW50KHRva2VuLCByZWFkTW9kaWZ5V3Jp
dGUub2xkVmFsdWVSZWYoKSwgZXh0cmFBcmcpOworICAgICAgICByZWFkTW9kaWZ5V3JpdGUucmVz
dWx0RXhwID0gcmVhZE1vZGlmeVdyaXRlLm5ld1ZhbHVlUmVmKCk7CisgICAgICAgIHJldHVybiBy
ZWFkTW9kaWZ5V3JpdGU7CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIHBhcnNlUHJlSW5jcmVt
ZW50KCkKQEAgLTU4Niw2ICs1OTEsMTAgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2lu
LCBvcmlnaW5LaQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGlzdC5wdXNoKGVmZmVjdGZ1
bEV4cHJlc3Npb24pOwogICAgICAgICB9CisgICAgICAgIGlmICghbGlzdC5sZW5ndGgpCisgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBzaG91bGQgbmV2ZXIgYmUgemVybyIpOwor
ICAgICAgICBpZiAobGlzdC5sZW5ndGggPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBsaXN0WzBd
OwogICAgICAgICByZXR1cm4gbmV3IENvbW1hRXhwcmVzc2lvbihvcmlnaW4sIGxpc3QpOwogICAg
IH0KICAgICAKQEAgLTc3MiwxNSArNzgxLDMwIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9y
aWdpbiwgb3JpZ2luS2kKICAgICBmdW5jdGlvbiBwYXJzZUZ1bmNOYW1lKCkKICAgICB7CiAgICAg
ICAgIGlmICh0cnlDb25zdW1lKCJvcGVyYXRvciIpKSB7Ci0gICAgICAgICAgICBsZXQgdG9rZW4g
PSB0cnlDb25zdW1lKCIrIiwgIi0iLCAiKiIsICIvIiwgIiUiLCAiXiIsICImIiwgInwiLCAiPCIs
ICI+IiwgIjw9IiwgIj49IiwgIj09IiwgIisrIiwgIi0tIiwgIiYiKTsKLSAgICAgICAgICAgIGlm
ICh0b2tlbikgewotICAgICAgICAgICAgICAgIGlmICh0b2tlbi50ZXh0ICE9ICImIiB8fCAhdHJ5
Q29uc3VtZSgiWyIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9yIiArIHRv
a2VuLnRleHQ7CisgICAgICAgICAgICBsZXQgdG9rZW4gPSBjb25zdW1lKCIrIiwgIi0iLCAiKiIs
ICIvIiwgIiUiLCAiXiIsICImIiwgInwiLCAiPCIsICI+IiwgIjw9IiwgIj49IiwgIj09IiwgIisr
IiwgIi0tIiwgIiYiLCAiLiIsICJ+IiwgIjw8IiwgIj4+IiwgIlsiKTsKKyAgICAgICAgICAgIGlm
ICh0b2tlbi50ZXh0ID09ICImIikgeworICAgICAgICAgICAgICAgIGlmICh0cnlDb25zdW1lKCJb
IikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiXSIpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gIm9wZXJhdG9yJltdIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKHRyeUNvbnN1bWUoIi4iKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJv
cGVyYXRvciYuIiArIGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIikudGV4dDsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIm9wZXJhdG9yJiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dG9rZW4udGV4dCA9PSAiLiIpIHsKKyAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gIm9wZXJh
dG9yLiIgKyBjb25zdW1lS2luZCgiaWRlbnRpZmllciIpLnRleHQ7CisgICAgICAgICAgICAgICAg
aWYgKHRyeUNvbnN1bWUoIj0iKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI9IjsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHRva2VuLnRleHQgPT0gIlsiKSB7CiAgICAgICAgICAgICAgICAgY29uc3VtZSgiXSIp
OwotICAgICAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3ImW10iOworICAgICAgICAgICAgICAg
IGxldCByZXN1bHQgPSAib3BlcmF0b3JbXSI7CisgICAgICAgICAgICAgICAgaWYgKHRyeUNvbnN1
bWUoIj0iKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI9IjsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGV0IG5hbWUg
PSBjb25zdW1lS2luZCgiaWRlbnRpZmllciIpOwotICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRv
ciAiICsgbmFtZTsKKyAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3IiICsgdG9rZW4udGV4dDsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKS50ZXh0
OwogICAgIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwko
cmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFy
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjcsMjAgKzI3LDM2IEBACiBmdW5jdGlvbiBwcmVwYXJl
KG9yaWdpbiwgbGluZU51bWJlck9mZnNldCwgdGV4dCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IG5l
dyBQcm9ncmFtKCk7CisgICAgCiAgICAgcGFyc2UocHJvZ3JhbSwgIi9pbnRlcm5hbC9zdGRsaWIi
LCAibmF0aXZlIiwgMjcsIHN0YW5kYXJkTGlicmFyeSk7CiAgICAgcGFyc2UocHJvZ3JhbSwgb3Jp
Z2luLCAidXNlciIsIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpOwotICAgIHJlc29sdmVOYW1lcyhw
cm9ncmFtKTsKLSAgICByZXNvbHZlVHlwZURlZnMocHJvZ3JhbSk7CisgICAgCisgICAgbGV0IG5h
bWVSZXNvbHZlciA9IGNyZWF0ZU5hbWVSZXNvbHZlcihwcm9ncmFtKTsKKyAgICByZXNvbHZlTmFt
ZXNJblR5cGVzKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CisgICAgcmVzb2x2ZU5hbWVzSW5Qcm90
b2NvbHMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNvbHZlVHlwZURlZnNJblR5cGVz
KHByb2dyYW0pOworICAgIHJlc29sdmVUeXBlRGVmc0luUHJvdG9jb2xzKHByb2dyYW0pOworICAg
IC8vIEZJWE1FOiBOZWVkIHRvIHZlcmlmeSB0aGF0IHN0cnVjdHJlIGFyZSBub3QgY3ljbGljLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwNDQKKyAg
ICBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pOworICAgIHJlc29sdmVOYW1lc0lu
RnVuY3Rpb25zKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CisgICAgcmVzb2x2ZVR5cGVEZWZzSW5G
dW5jdGlvbnMocHJvZ3JhbSk7CisgICAgCiAgICAgZmxhdHRlblByb3RvY29sRXh0ZW5kcyhwcm9n
cmFtKTsKICAgICBjaGVjayhwcm9ncmFtKTsKICAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFt
KTsKKyAgICByZXNvbHZlUHJvcGVydGllcyhwcm9ncmFtKTsKKyAgICBmaW5kSGlnaFpvbWJpZXMo
cHJvZ3JhbSk7CisgICAgY2hlY2tMaXRlcmFsVHlwZXMocHJvZ3JhbSk7CiAgICAgY2hlY2tQcm9n
cmFtV3JhcHBlZChwcm9ncmFtKTsKICAgICBjaGVja1JldHVybnMocHJvZ3JhbSk7CiAgICAgY2hl
Y2tVbnJlYWNoYWJsZUNvZGUocHJvZ3JhbSk7CiAgICAgY2hlY2tMb29wcyhwcm9ncmFtKTsKICAg
ICBjaGVja1JlY3Vyc2lvbihwcm9ncmFtKTsKICAgICBjaGVja1Byb2dyYW1XcmFwcGVkKHByb2dy
YW0pOworICAgIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKICAgICBpbmxpbmUocHJvZ3JhbSk7
CisgICAgCiAgICAgcmV0dXJuIHByb2dyYW07CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Byb2dyYW0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
MTAgQEAgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIE5vZGUgewogICAgICAgICB0aGlzLl90eXBlcyA9
IG5ldyBNYXAoKTsKICAgICAgICAgdGhpcy5fcHJvdG9jb2xzID0gbmV3IE1hcCgpOwogICAgICAg
ICB0aGlzLl9mdW5jSW5zdGFudGlhdG9yID0gbmV3IEZ1bmNJbnN0YW50aWF0b3IodGhpcyk7Cisg
ICAgICAgIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0ID0gbmV3IE5hbWVDb250ZXh0KCk7CisgICAg
ICAgIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0LnByb2dyYW0gPSB0aGlzOworICAgICAgICB0aGlz
Ll9nbG9iYWxOYW1lQ29udGV4dC5yZWNvZ25pemVJbnRyaW5zaWNzKCk7CisgICAgICAgIHRoaXMu
aW50cmluc2ljcyA9IHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0LmludHJpbnNpY3M7CiAgICAgfQog
ICAgIAogICAgIGdldCB0b3BMZXZlbFN0YXRlbWVudHMoKSB7IHJldHVybiB0aGlzLl90b3BMZXZl
bFN0YXRlbWVudHM7IH0KQEAgLTQwLDYgKzQ0LDcgQEAgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIE5v
ZGUgewogICAgIGdldCB0eXBlcygpIHsgcmV0dXJuIHRoaXMuX3R5cGVzOyB9CiAgICAgZ2V0IHBy
b3RvY29scygpIHsgcmV0dXJuIHRoaXMuX3Byb3RvY29sczsgfQogICAgIGdldCBmdW5jSW5zdGFu
dGlhdG9yKCkgeyByZXR1cm4gdGhpcy5fZnVuY0luc3RhbnRpYXRvcjsgfQorICAgIGdldCBnbG9i
YWxOYW1lQ29udGV4dCgpIHsgcmV0dXJuIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0OyB9CiAgICAg
CiAgICAgYWRkKHN0YXRlbWVudCkKICAgICB7CkBAIC01MiwxMCArNTcsMTEgQEAgY2xhc3MgUHJv
Z3JhbSBleHRlbmRzIE5vZGUgewogICAgICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudCBpbnN0YW5j
ZW9mIFR5cGUpCiAgICAgICAgICAgICB0aGlzLl90eXBlcy5zZXQoc3RhdGVtZW50Lm5hbWUsIHN0
YXRlbWVudCk7CiAgICAgICAgIGVsc2UgaWYgKHN0YXRlbWVudCBpbnN0YW5jZW9mIFByb3RvY29s
KQotICAgICAgICAgICAgdGhpcy5fcHJvdG9jb2xzLnNldChzdGF0ZW1lbnQuYWRkLCBzdGF0ZW1l
bnQpOworICAgICAgICAgICAgdGhpcy5fcHJvdG9jb2xzLnNldChzdGF0ZW1lbnQubmFtZSwgc3Rh
dGVtZW50KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTdGF0
ZW1lbnQgaXMgbm90IGEgZnVuY3Rpb24gb3IgdHlwZTogIiArIHN0YXRlbWVudCk7CiAgICAgICAg
IHRoaXMuX3RvcExldmVsU3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7CisgICAgICAgIHRoaXMu
X2dsb2JhbE5hbWVDb250ZXh0LmFkZChzdGF0ZW1lbnQpOwogICAgIH0KICAgICAKICAgICB0b1N0
cmluZygpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbiBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgYmFzZSkK
KyAgICB7CisgICAgICAgIHN1cGVyKG9yaWdpbik7CisgICAgICAgIHRoaXMuYmFzZSA9IGJhc2U7
CisgICAgfQorICAgIAorICAgIGdldCByZXN1bHRUeXBlKCkgeyByZXR1cm4gdGhpcy5yZXN1bHRU
eXBlRm9yR2V0ID8gdGhpcy5yZXN1bHRUeXBlRm9yR2V0IDogdGhpcy5yZXN1bHRUeXBlRm9yQW5k
OyB9CisgICAgCisgICAgcmV3cml0ZUFmdGVyQ2xvbmluZygpCisgICAgeworICAgICAgICAvLyBB
dCB0aGlzIHBvaW50LCBub2RlLmJhc2UuaXNMVmFsdWUgd2lsbCBvbmx5IHJldHVybiB0cnVlIGlm
IGl0J3MgcG9zc2libGUgdG8gZ2V0IGEgcG9pbnRlciB0byBpdCwKKyAgICAgICAgLy8gc2luY2Ug
d2Ugd2lsbCBubyBsb25nZXIgc2VlIGFueSBEb3RFeHByZXNzaW9ucyBvciBJbmRleEV4cHJlc3Np
b25zLiBBbHNvLCBub2RlIGlzIGEgbmV3bHkgY3JlYXRlZAorICAgICAgICAvLyBub2RlIGFuZCBl
dmVyeXRoaW5nIGJlbmVhdGggaXQgaXMgbmV3bHkgY3JlYXRlZCwgc28gd2UgY2FuIGVkaXQgaXQg
aW4tcGxhY2UuCisgICAgICAgIAorICAgICAgICBpZiAoKHRoaXMuYmFzZS5pc0xWYWx1ZSB8fCB0
aGlzLmJhc2VUeXBlLmlzUmVmKSAmJiB0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICByZXR1
cm4gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0aGlzLm9yaWdpbiwgdGhpcy5jYWxsRm9yQW5k
LCB0aGlzLnJlc3VsdFR5cGUsIHRoaXMuY2FsbEZvckFuZC5yZXN1bHRUeXBlLmFkZHJlc3NTcGFj
ZSk7CisgICAgICAgIAorICAgICAgICBpZiAodGhpcy5jYWxsRm9yR2V0KQorICAgICAgICAgICAg
cmV0dXJuIHRoaXMuY2FsbEZvckdldDsKKyAgICAgICAgCisgICAgICAgIGlmICghdGhpcy5jYWxs
Rm9yQW5kKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMub3JpZ2luLm9yaWdpblN0
cmluZyArICI6IFByb3BlcnR5IGFjY2VzcyB3aXRob3V0IGdldHRlciBhbmQgYW5kZXI6ICIgKyB0
aGlzKTsKKyAgICAgICAgCisgICAgICAgIGxldCBhbm9uVmFyID0gbmV3IEFub255bW91c1Zhcmlh
YmxlKHRoaXMub3JpZ2luLCB0aGlzLmJhc2VUeXBlKTsKKyAgICAgICAgdGhpcy5jYWxsRm9yQW5k
LmFyZ3VtZW50TGlzdFswXSA9IHRoaXMuYmFzZVR5cGUudW5pZnlOb2RlLmFyZ3VtZW50Rm9yQW5k
T3ZlcmxvYWQodGhpcy5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAoYW5vblZhcikpOworICAgICAg
ICByZXR1cm4gbmV3IENvbW1hRXhwcmVzc2lvbih0aGlzLm9yaWdpbiwgWworICAgICAgICAgICAg
YW5vblZhciwKKyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KHRoaXMub3JpZ2luLCBWYXJpYWJs
ZVJlZi53cmFwKGFub25WYXIpLCB0aGlzLmJhc2UsIHRoaXMuYmFzZVR5cGUpLAorICAgICAgICAg
ICAgbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0aGlzLm9yaWdpbiwgdGhpcy5jYWxsRm9yQW5k
LCB0aGlzLnJlc3VsdFR5cGUsIHRoaXMuY2FsbEZvckFuZC5yZXN1bHRUeXBlLmFkZHJlc3NTcGFj
ZSkKKyAgICAgICAgXSk7CisgICAgfQorICAgIAorICAgIHVwZGF0ZUNhbGxzKCkKKyAgICB7Cisg
ICAgICAgIGlmICh0aGlzLmNhbGxGb3JHZXQpCisgICAgICAgICAgICB0aGlzLmNhbGxGb3JHZXQu
YXJndW1lbnRMaXN0WzBdID0gdGhpcy5iYXNlOworICAgICAgICBpZiAodGhpcy5jYWxsRm9yQW5k
KQorICAgICAgICAgICAgdGhpcy5jYWxsRm9yQW5kLmFyZ3VtZW50TGlzdFswXSA9IHRoaXMuYmFz
ZVR5cGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZCh0aGlzLm9yaWdpbiwgdGhpcy5iYXNlKTsKKyAg
ICAgICAgaWYgKHRoaXMuY2FsbEZvclNldCkKKyAgICAgICAgICAgIHRoaXMuY2FsbEZvclNldC5h
cmd1bWVudExpc3RbMF0gPSB0aGlzLmJhc2U7CisgICAgfQorICAgIAorICAgIGVtaXRHZXQoYmFz
ZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnZpc2l0KG5ldyBSZXdyaXRlcigp
KTsKKyAgICAgICAgcmVzdWx0LmJhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQudXBkYXRlQ2Fs
bHMoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXdyaXRlQWZ0ZXJDbG9uaW5nKCk7CisgICAg
fQorICAgIAorICAgIGVtaXRTZXQoYmFzZSwgdmFsdWUpCisgICAgeworICAgICAgICBsZXQgcmVz
dWx0ID0gdGhpcy52aXNpdChuZXcgUmV3cml0ZXIoKSk7CisgICAgICAgIGlmICghcmVzdWx0LmNh
bGxGb3JTZXQpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5v
cmlnaW5TdHJpbmcsICJDYW5ub3QgZW1pdCBzZXQgYmVjYXVzZTogIiArIHRoaXMuZXJyb3JGb3JT
ZXQudHlwZUVycm9yTWVzc2FnZSk7CisgICAgICAgIHJlc3VsdC5iYXNlID0gYmFzZTsKKyAgICAg
ICAgcmVzdWx0LnVwZGF0ZUNhbGxzKCk7CisgICAgICAgIHJlc3VsdC5jYWxsRm9yU2V0LmFyZ3Vt
ZW50TGlzdFtyZXN1bHQuY2FsbEZvclNldC5hcmd1bWVudExpc3QubGVuZ3RoIC0gMV0gPSB2YWx1
ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5jYWxsRm9yU2V0OworICAgIH0KK30KKwpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlSZXNvbHZlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eVJlc29sdmVyLmpz
CShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5
UmVzb2x2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3Mg
UHJvcGVydHlSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgeworICAgIF92aXNpdFJWYWx1ZXNXaXRo
aW5MVmFsdWUobm9kZSkKKyAgICB7CisgICAgICAgIGxldCB2aXNpdCA9IG5vZGUgPT4gbm9kZS52
aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGNsYXNzIFJWYWx1ZUZpbmRlciB7CisgICAg
ICAgICAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBub2RlLnN0cnVjdC52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBub2RlLmFycmF5LnZpc2l0KHRoaXMpOworICAgICAgICAgICAg
ICAgIHZpc2l0KG5vZGUuaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICB2aXNpdFZhcmlhYmxlUmVmKG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9u
KG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmlzaXQobm9kZS5wdHIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB2aXNpdElkZW50aXR5RXhw
cmVzc2lvbihub2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0
LnZpc2l0KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBub2RlLnZpc2l0KG5ldyBSVmFsdWVGaW5kZXIoKSk7CisgICAgfQorICAgIAorICAgIF92aXNp
dFByb3BlcnR5QWNjZXNzKG5vZGUpCisgICAgeworICAgICAgICBsZXQgbmV3Tm9kZSA9IG5vZGUu
dmlzaXQobmV3IE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIoKSk7CisgICAgICAgIG5ld05vZGUu
dmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUuYmVjb21lKG5ld05vZGUpOworICAgIH0KKyAgICAK
KyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Zpc2l0
UHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNz
aW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl92aXNpdFByb3BlcnR5QWNjZXNzKG5vZGUp
OworICAgIH0KKyAgICAKKyAgICBfaGFuZGxlUmVhZE1vZGlmeVdyaXRlKG5vZGUpCisgICAgewor
ICAgICAgICBsZXQgdHlwZSA9IG5vZGUub2xkVmFsdWVWYXIudHlwZTsKKyAgICAgICAgaWYgKCF0
eXBlKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIHR5cGUiKTsKKyAgICAgICAg
bGV0IHNpbXBsZUxIUyA9IG5vZGUubFZhbHVlLnZpc2l0KG5ldyBOb3JtYWxVc2VQcm9wZXJ0eVJl
c29sdmVyKCkpOworICAgICAgICBpZiAoc2ltcGxlTEhTLmlzTFZhbHVlKSB7CisgICAgICAgICAg
ICBpZiAoIXNpbXBsZUxIUy5hZGRyZXNzU3BhY2UpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyArICI6IExIUyB3aXRob3V0IGFkZHJlc3Mg
c3BhY2U6ICIgKyBzaW1wbGVMSFMpOworICAgICAgICAgICAgbGV0IHB0clR5cGUgPSBuZXcgUHRy
VHlwZShub2RlLm9yaWdpbiwgc2ltcGxlTEhTLmFkZHJlc3NTcGFjZSwgdHlwZSk7CisgICAgICAg
ICAgICBsZXQgcHRyVmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG5vZGUub3JpZ2luLCBwdHJU
eXBlKTsKKyAgICAgICAgICAgIG5vZGUuYmVjb21lKG5ldyBDb21tYUV4cHJlc3Npb24obm9kZS5v
cmlnaW4sIFsKKyAgICAgICAgICAgICAgICBub2RlLm9sZFZhbHVlVmFyLCBub2RlLm5ld1ZhbHVl
VmFyLCBwdHJWYXIsCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQoCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHB0clZhciksCisgICAgICAg
ICAgICAgICAgICAgIG5ldyBNYWtlUHRyRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgc2ltcGxlTEhT
KSwgcHRyVHlwZSksCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQoCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm9sZFZhbHVlUmVmKCksCisgICAgICAgICAgICAg
ICAgICAgIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24oCisgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChwdHJWYXIpLCB0eXBlLCBzaW1wbGVMSFMu
YWRkcmVzc1NwYWNlKSwKKyAgICAgICAgICAgICAgICAgICAgdHlwZSksCisgICAgICAgICAgICAg
ICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIG5vZGUubmV3VmFsdWVSZWYoKSwgbm9kZS5u
ZXdWYWx1ZUV4cCwgdHlwZSksCisgICAgICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQoCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBuZXcgRGVy
ZWZlcmVuY2VFeHByZXNzaW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4s
IFZhcmlhYmxlUmVmLndyYXAocHRyVmFyKSwgdHlwZSwgc2ltcGxlTEhTLmFkZHJlc3NTcGFjZSks
CisgICAgICAgICAgICAgICAgICAgIG5vZGUubmV3VmFsdWVSZWYoKSwgdHlwZSksCisgICAgICAg
ICAgICAgICAgbm9kZS5yZXN1bHRFeHAKKyAgICAgICAgICAgIF0pKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmxWYWx1ZS5iYXNlLCBub2Rl
LmxWYWx1ZS5iYXNlVHlwZSk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1ZUV4cCA9IG5ldyBDb21t
YUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIFsKKyAgICAgICAgICAgIG5vZGUub2xkVmFsdWVWYXIs
IG5vZGUubmV3VmFsdWVWYXIsCisgICAgICAgICAgICBuZXcgQXNzaWdubWVudChub2RlLm9yaWdp
biwgbm9kZS5vbGRWYWx1ZVJlZigpLCBub2RlLmxWYWx1ZS5lbWl0R2V0KHJlc3VsdC5vbGRWYWx1
ZVJlZigpKSwgdHlwZSksCisgICAgICAgICAgICBuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwg
bm9kZS5uZXdWYWx1ZVJlZigpLCBub2RlLm5ld1ZhbHVlRXhwLCB0eXBlKSwKKyAgICAgICAgICAg
IG5vZGUubFZhbHVlLmVtaXRTZXQocmVzdWx0Lm9sZFZhbHVlUmVmKCksIG5vZGUubmV3VmFsdWVS
ZWYoKSkKKyAgICAgICAgXSk7CisgICAgICAgIHJlc3VsdC5yZXN1bHRFeHAgPSBub2RlLm5ld1Zh
bHVlUmVmKCk7CisgICAgICAgIHRoaXMuX2hhbmRsZVJlYWRNb2RpZnlXcml0ZShyZXN1bHQpOwor
ICAgICAgICBub2RlLmJlY29tZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUubmV3VmFsdWVF
eHAudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUucmVzdWx0RXhwLnZpc2l0KHRoaXMpOworICAg
ICAgICB0aGlzLl92aXNpdFJWYWx1ZXNXaXRoaW5MVmFsdWUobm9kZS5sVmFsdWUpOworICAgICAg
ICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUobm9kZSk7CisgICAgfQorICAgIAorICAgIHZp
c2l0QXNzaWdubWVudChub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fdmlzaXRSVmFsdWVzV2l0
aGluTFZhbHVlKG5vZGUubGhzKTsKKyAgICAgICAgbm9kZS5yaHMudmlzaXQodGhpcyk7CisgICAg
ICAgIAorICAgICAgICBsZXQgc2ltcGxlTEhTID0gbm9kZS5saHMudmlzaXQobmV3IE5vcm1hbFVz
ZVByb3BlcnR5UmVzb2x2ZXIoKSk7CisgICAgICAgIGlmIChzaW1wbGVMSFMuaXNMVmFsdWUpIHsK
KyAgICAgICAgICAgIG5vZGUubGhzLmJlY29tZShzaW1wbGVMSFMpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIShub2RlLmxocyBpbnN0YW5j
ZW9mIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIlVuZXhwZWN0ZWQgbGhzIHR5cGU6ICIgKyBub2RlLmxocy5jb25zdHJ1Y3Rvci5uYW1lKTsK
KyAgICAgICAgCisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbihub2RlLm9yaWdpbiwgbm9kZS5saHMuYmFzZSwgbm9kZS5saHMuYmFzZVR5cGUpOworICAg
ICAgICBsZXQgcmVzdWx0VmFyID0gbmV3IEFub255bW91c1ZhcmlhYmxlKG5vZGUub3JpZ2luLCBu
b2RlLnR5cGUpOworICAgICAgICByZXN1bHQubmV3VmFsdWVFeHAgPSBuZXcgQ29tbWFFeHByZXNz
aW9uKG5vZGUub3JpZ2luLCBbCisgICAgICAgICAgICByZXN1bHRWYXIsCisgICAgICAgICAgICBu
ZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChyZXN1bHRWYXIpLCBu
b2RlLnJocywgbm9kZS50eXBlKSwKKyAgICAgICAgICAgIG5vZGUubGhzLmVtaXRTZXQocmVzdWx0
Lm9sZFZhbHVlUmVmKCksIFZhcmlhYmxlUmVmLndyYXAocmVzdWx0VmFyKSkKKyAgICAgICAgXSk7
CisgICAgICAgIHJlc3VsdC5yZXN1bHRFeHAgPSBWYXJpYWJsZVJlZi53cmFwKHJlc3VsdFZhcik7
CisgICAgICAgIHRoaXMuX2hhbmRsZVJlYWRNb2RpZnlXcml0ZShyZXN1bHQpOworICAgICAgICBu
b2RlLmJlY29tZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2aXNpdE1ha2VQdHJFeHByZXNz
aW9uKG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5v
ZGUpOworICAgICAgICBpZiAoIW5vZGUubFZhbHVlLmlzTFZhbHVlKQorICAgICAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTm90IGFuIGx2YWx1
ZTogIiArIG5vZGUubFZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRNYWtlQXJyYXlSZWZF
eHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNpdE1ha2VBcnJheVJlZkV4
cHJlc3Npb24obm9kZSk7CisgICAgICAgIGlmICghbm9kZS5sVmFsdWUuaXNMVmFsdWUpCisgICAg
ICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJO
b3QgYW4gbHZhbHVlOiAiICsgbm9kZS5sVmFsdWUpOworICAgIH0KK30KKwpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvdG9jb2xEZWNsLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3RvY29sRGVjbC5qcwkocmV2aXNpb24gMjIy
MTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvdG9jb2xEZWNsLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC05NywxNiArOTcsMTYgQEAgY2xhc3MgUHJvdG9jb2xEZWNsIGV4dGVu
ZHMgUHJvdG9jb2wgewogICAgIHsKICAgICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9IG5ldyBTdWJz
dGl0dXRpb24oW3RoaXMuX3R5cGVWYXJpYWJsZV0sIFt0eXBlXSk7CiAgICAgICAgIGxldCBzaWdu
YXR1cmVzID0gdGhpcy5zaWduYXR1cmVzOwotICAgICAgICBmb3IgKGxldCBzaWduYXR1cmUgb2Yg
c2lnbmF0dXJlcykgewotICAgICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlLnZpc2l0KHN1
YnN0aXR1dGlvbik7Ci0gICAgICAgICAgICBsZXQgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJ
bXBsKHNpZ25hdHVyZS5wb3NzaWJsZU92ZXJsb2Fkcywgc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJz
LCBzaWduYXR1cmUucGFyYW1ldGVyVHlwZXMsIHNpZ25hdHVyZS5yZXR1cm5UeXVwZUZvck92ZXJs
b2FkUmVzb2x1dGlvbik7CisgICAgICAgIGZvciAobGV0IG9yaWdpbmFsU2lnbmF0dXJlIG9mIHNp
Z25hdHVyZXMpIHsKKyAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSBvcmlnaW5hbFNpZ25hdHVy
ZS52aXNpdChzdWJzdGl0dXRpb24pOworICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gcmVzb2x2
ZU92ZXJsb2FkSW1wbChzaWduYXR1cmUucG9zc2libGVPdmVybG9hZHMsIHNpZ25hdHVyZS50eXBl
UGFyYW1ldGVycywgc2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzLCBzaWduYXR1cmUucmV0dXJuVHlw
ZUZvck92ZXJsb2FkUmVzb2x1dGlvbik7CiAgICAgICAgICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHtyZXN1bHQ6IGZhbHNlLCByZWFzb246ICJEaWQgbm90
IGZpbmQgbWF0Y2hpbmcgc2lnbmF0dXJlIGZvciAiICsgc2lnbmF0dXJlICsgIiB3aXRoIHR5cGUg
IiArIHR5cGUgKyAob3ZlcmxvYWQuZmFpbHVyZXMubGVuZ3RoID8gIiAodHJpZWQ6ICIgKyBvdmVy
bG9hZC5mYWlsdXJlcy5qb2luKCI7ICIpICsgIikiIDogIiIpfTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4ge3Jlc3VsdDogZmFsc2UsIHJlYXNvbjogIkRpZCBub3QgZmluZCBtYXRjaGluZyBzaWdu
YXR1cmUgZm9yICIgKyBvcmlnaW5hbFNpZ25hdHVyZSArICIgKGF0ICIgKyBvcmlnaW5hbFNpZ25h
dHVyZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIikgd2l0aCB0eXBlICIgKyB0eXBlICsgKG92ZXJs
b2FkLmZhaWx1cmVzLmxlbmd0aCA/ICIgKHRyaWVkOiAiICsgb3ZlcmxvYWQuZmFpbHVyZXMuam9p
bigiOyAiKSArICIpIiA6ICIiKX07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGxldCBzdWJz
dGl0dXRlZFJldHVyblR5cGUgPSBvdmVybG9hZC5mdW5jLnJldHVyblR5cGUuc3Vic3RpdHV0ZVRv
VW5pZmljYXRpb24oCiAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZnVuYy50eXBlUGFyYW1ldGVy
cywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250ZXh0KTsKICAgICAgICAgICAgIGlmICghc3Vic3Rp
dHV0ZWRSZXR1cm5UeXBlLmVxdWFscyhzaWduYXR1cmUucmV0dXJuVHlwZSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHtyZXN1bHQ6IGZhbHNlLCByZWFzb246ICJSZXR1cm4gdHlwZSBtaXNtYXRj
aCBiZXR3ZWVuICIgKyBzaWduYXR1cmUucmV0dXJuVHlwZSArICIgYW5kICIgKyBzdWJzdGl0dXRl
ZFJldHVyblR5cGV9OworICAgICAgICAgICAgICAgIHJldHVybiB7cmVzdWx0OiBmYWxzZSwgcmVh
c29uOiAiQXQgc2lnbmF0dXJlICIgKyBvcmlnaW5hbFNpZ25hdHVyZSArICIgKGF0ICIgKyBvcmln
aW5hbFNpZ25hdHVyZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIik6IHJldHVybiB0eXBlIG1pc21h
dGNoIGJldHdlZW4gIiArIHNpZ25hdHVyZS5yZXR1cm5UeXBlICsgIiBhbmQgIiArIHN1YnN0aXR1
dGVkUmV0dXJuVHlwZSArICIgaW4gZm91bmQgZnVuY3Rpb24gIiArIG92ZXJsb2FkLmZ1bmMudG9E
ZWNsU3RyaW5nKCl9OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB7cmVzdWx0OiB0cnVlfTsK
ICAgICB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHJl
dmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUu
anMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDE5IEBAIGNsYXNzIFB0clR5cGUgZXh0ZW5k
cyBSZWZlcmVuY2VUeXBlIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUudW5pZnko
dW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5lbGVtZW50VHlwZSk7CiAgICAgfQogICAgIAorICAg
IGFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQob3JpZ2luLCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRo
cm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJQb2ludGVyIHN1YnNjcmlw
dCBpcyBub3QgdmFsaWQiKTsKKyAgICB9CisgICAgYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQo
b3JpZ2luLCB0eXBlKQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2lu
Lm9yaWdpblN0cmluZywgIlBvaW50ZXIgc3Vic2NyaXB0IGlzIG5vdCB2YWxpZCIpOworICAgIH0K
KyAgICByZXR1cm5UeXBlRnJvbUFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLmVsZW1lbnRUeXBlOworICAgIH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlICsgIl4gIiArIHRoaXMuYWRkcmVzc1NwYWNl
OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9S
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBsVmFsdWUs
IHR5cGUgPSBudWxsKQorICAgIHsKKyAgICAgICAgc3VwZXIob3JpZ2luKTsKKyAgICAgICAgdGhp
cy5fbFZhbHVlID0gbFZhbHVlOworICAgICAgICB0aGlzLm9sZFZhbHVlVmFyID0gbmV3IEFub255
bW91c1ZhcmlhYmxlKG9yaWdpbiwgdHlwZSk7CisgICAgICAgIHRoaXMubmV3VmFsdWVWYXIgPSBu
ZXcgQW5vbnltb3VzVmFyaWFibGUob3JpZ2luLCB0eXBlKTsKKyAgICAgICAgdGhpcy5uZXdWYWx1
ZUV4cCA9IG51bGw7CisgICAgICAgIHRoaXMucmVzdWx0RXhwID0gbnVsbDsKKyAgICB9CisgICAg
CisgICAgZ2V0IGxWYWx1ZSgpIHsgcmV0dXJuIHRoaXMuX2xWYWx1ZTsgfQorICAgIAorICAgIG9s
ZFZhbHVlUmVmKCkgeyByZXR1cm4gVmFyaWFibGVSZWYud3JhcCh0aGlzLm9sZFZhbHVlVmFyKTsg
fQorICAgIG5ld1ZhbHVlUmVmKCkgeyByZXR1cm4gVmFyaWFibGVSZWYud3JhcCh0aGlzLm5ld1Zh
bHVlVmFyKTsgfQorICAgIAorICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAi
Uk1XKCIgKyB0aGlzLmxWYWx1ZSArICIsICIgKyB0aGlzLm9sZFZhbHVlVmFyICsgIiwgIiArIHRo
aXMubmV3VmFsdWVWYXIgKyAiLCAiICsgdGhpcy5uZXdWYWx1ZUV4cCArICIsICIgKyB0aGlzLnJl
c3VsdEV4cCArICIpIjsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Jlc29sdmVOYW1lcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMuanMJKHJldmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVOYW1lcy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MjQsNyArMjQsMjggQEAKICAqLwogInVzZSBzdHJpY3QiOwogCi1mdW5jdGlvbiByZXNvbHZlTmFt
ZXMocHJvZ3JhbSkKK2Z1bmN0aW9uIGNyZWF0ZU5hbWVSZXNvbHZlcihwcm9ncmFtKQogewotICAg
IHByb2dyYW0udmlzaXQobmV3IE5hbWVSZXNvbHZlcigpKTsKKyAgICByZXR1cm4gbmV3IE5hbWVS
ZXNvbHZlcihwcm9ncmFtLmdsb2JhbE5hbWVDb250ZXh0KTsKIH0KKworZnVuY3Rpb24gcmVzb2x2
ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChsZXQgdHlw
ZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygpKQorICAgICAgICBuYW1lUmVzb2x2ZXIuZG9TdGF0
ZW1lbnQodHlwZSk7Cit9CisKK2Z1bmN0aW9uIHJlc29sdmVOYW1lc0luUHJvdG9jb2xzKHByb2dy
YW0sIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGxldCBwcm90b2NvbCBvZiBwcm9ncmFtLnBy
b3RvY29scy52YWx1ZXMoKSkKKyAgICAgICAgbmFtZVJlc29sdmVyLmRvU3RhdGVtZW50KHByb3Rv
Y29sKTsKK30KKworZnVuY3Rpb24gcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFt
ZVJlc29sdmVyKQoreworICAgIGZvciAobGV0IGZ1bmNzIG9mIHByb2dyYW0uZnVuY3Rpb25zLnZh
bHVlcygpKSB7CisgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAgICAgICAgICBu
YW1lUmVzb2x2ZXIuZG9TdGF0ZW1lbnQoZnVuYyk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlT3ZlcmxvYWRJbXBsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMJ
KHJldmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29s
dmVPdmVybG9hZEltcGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDkgQEAKIAogZnVu
Y3Rpb24gcmVzb2x2ZU92ZXJsb2FkSW1wbChmdW5jdGlvbnMsIHR5cGVBcmd1bWVudHMsIGFyZ3Vt
ZW50VHlwZXMsIHJldHVyblR5cGUpCiB7CisgICAgaWYgKCFmdW5jdGlvbnMpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTnVsbCBmdW5jdGlvbnM7IHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjYXVn
aHQgYnkgdGhlIGNhbGxlci4iKTsKKyAgICAKICAgICBsZXQgZmFpbHVyZXMgPSBbXTsKICAgICBs
ZXQgc3VjY2Vzc2VzID0gW107CiAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jdGlvbnMpIHsKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVQcm9wZXJ0aWVzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVQcm9wZXJ0
aWVzLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jl
c29sdmVQcm9wZXJ0aWVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Ly8gVGhpcyB0dXJucyBEb3RFeHByZXNzaW9uIGFuZCBJbmRleEV4cHJlc3Npb24gaW50byBjYWxs
cyB0byBnZXR0ZXJzIChvcGVyYXRvci5maWVsZCBhbmQgb3BlcmF0b3JbXSksCisvLyBzZXR0ZXJz
IChvcGVyYXRvci5maWVsZD0gYW5kIG9wZXJhdG9yW109KSwgYW5kIGFuZGVycyAob3BlcmF0b3Im
LmZpZWxkIGFuZCBvcGVyYXRvciZbXSkuIFRoaXMgaW52b2x2ZXMKKy8vIHRyYW5zZm9ybWluZyBh
c3NpZ25tZW50cyBhbmQgUk1XJ3MgdG8gZG8gbHZhbHVlIGVtdWxhdGlvbi4KK2Z1bmN0aW9uIHJl
c29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pCit7CisgICAgcHJvZ3JhbS52aXNpdChuZXcgUHJvcGVy
dHlSZXNvbHZlcigpKTsKK30KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jl
c29sdmVUeXBlRGVmcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9SZXNvbHZlVHlwZURlZnMuanMJKHJldmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVUeXBlRGVmcy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MjQsOCArMjQsMjYgQEAKICAqLwogInVzZSBzdHJpY3QiOwogCi1mdW5jdGlvbiByZXNvbHZlVHlw
ZURlZnMocHJvZ3JhbSkKK2Z1bmN0aW9uIHJlc29sdmVUeXBlRGVmc0luVHlwZXMocHJvZ3JhbSkK
IHsKLSAgICBwcm9ncmFtLnZpc2l0KG5ldyBUeXBlRGVmUmVzb2x2ZXIoKSk7CisgICAgbGV0IHJl
c29sdmVyID0gbmV3IFR5cGVEZWZSZXNvbHZlcigpOworICAgIGZvciAobGV0IHR5cGUgb2YgcHJv
Z3JhbS50eXBlcy52YWx1ZXMoKSkKKyAgICAgICAgdHlwZS52aXNpdChyZXNvbHZlcik7Cit9CisK
K2Z1bmN0aW9uIHJlc29sdmVUeXBlRGVmc0luUHJvdG9jb2xzKHByb2dyYW0pCit7CisgICAgbGV0
IHJlc29sdmVyID0gbmV3IFR5cGVEZWZSZXNvbHZlcigpOworICAgIGZvciAobGV0IHByb3RvY29s
IG9mIHByb2dyYW0ucHJvdG9jb2xzLnZhbHVlcygpKQorICAgICAgICBwcm90b2NvbC52aXNpdChy
ZXNvbHZlcik7Cit9CisKK2Z1bmN0aW9uIHJlc29sdmVUeXBlRGVmc0luRnVuY3Rpb25zKHByb2dy
YW0pCit7CisgICAgbGV0IHJlc29sdmVyID0gbmV3IFR5cGVEZWZSZXNvbHZlcigpOworICAgIGZv
ciAobGV0IGZ1bmNzIG9mIHByb2dyYW0uZnVuY3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgIGZv
ciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAgICAgICAgICBmdW5jLnZpc2l0KHJlc29sdmVyKTsK
KyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNo
ZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0
dXJuQ2hlY2tlci5qcwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBA
QCBjbGFzcyBSZXR1cm5DaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAKICAgICBfaXNCb29sQ2Fz
dEZyb21MaXRlcmFsVHJ1ZShub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGUuaXNDYXN0
ICYmIG5vZGUucmV0dXJuVHlwZSBpbnN0YW5jZW9mIFR5cGVSZWYgJiYgbm9kZS5yZXR1cm5UeXBl
LmVxdWFscyh0aGlzLl9wcm9ncmFtLmludHJpbnNpY3MuYm9vbCkgJiYgbm9kZS5hcmd1bWVudExp
c3QubGVuZ3RoID09IDEgJiYgbm9kZS5hcmd1bWVudExpc3RbMF0ubGlzdC5sZW5ndGggPT0gMSAm
JiBub2RlLmFyZ3VtZW50TGlzdFswXS5saXN0WzBdIGluc3RhbmNlb2YgQm9vbExpdGVyYWwgJiYg
bm9kZS5hcmd1bWVudExpc3RbMF0ubGlzdFswXS52YWx1ZTsKKyAgICAgICAgcmV0dXJuIG5vZGUu
aXNDYXN0ICYmIG5vZGUucmV0dXJuVHlwZSBpbnN0YW5jZW9mIFR5cGVSZWYgJiYgbm9kZS5yZXR1
cm5UeXBlLmVxdWFscyh0aGlzLl9wcm9ncmFtLmludHJpbnNpY3MuYm9vbCkgJiYgbm9kZS5hcmd1
bWVudExpc3QubGVuZ3RoID09IDEgJiYgbm9kZS5hcmd1bWVudExpc3RbMF0gaW5zdGFuY2VvZiBC
b29sTGl0ZXJhbCAmJiBub2RlLmFyZ3VtZW50TGlzdFswXS52YWx1ZTsKICAgICB9CiAKICAgICB2
aXNpdFdoaWxlTG9vcChub2RlKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmV3cml0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmV3cml0ZXIuanMJKHJldmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Jld3JpdGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsOSBAQAogLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGhhdmUgc2Vuc2libGUgYmVoYXZpb3Igd2hlbiBpdCBlbmNvdW50
ZXJzIGRlZmluaXRpb25zIHRoYXQgaXQgY2Fubm90IGhhbmRsZS4gUmlnaHQKIC8vIG5vdyB3ZSBh
cmUgaGFja2lzaGx5IHByZXZlbnRpbmcgdGhpcyBieSB3cmFwcGluZyB0aGluZ3MgaW4gVHlwZVJl
Zi4gVGhhdCdzIHByb2JhYmx5IHdyb25nLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NjIwOAotY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7
CitjbGFzcyBSZXdyaXRlciB7CiAgICAgY29uc3RydWN0b3IoKQogICAgIHsKLSAgICAgICAgc3Vw
ZXIoKTsKICAgICAgICAgdGhpcy5fbWFwcGluZyA9IG5ldyBNYXAoKTsKICAgICB9CiAgICAgCkBA
IC03Myw3ICs3Miw4IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAg
ICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUubmFtZSwKICAgICAgICAgICAgIG5vZGUucmV0dXJu
VHlwZS52aXNpdCh0aGlzKSwKICAgICAgICAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMubWFwKHBh
cmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQodGhpcykpLAotICAgICAgICAgICAgbm9kZS5wYXJh
bWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMpKSk7CisgICAgICAg
ICAgICBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQodGhp
cykpLAorICAgICAgICAgICAgbm9kZS5pc0Nhc3QpOwogICAgICAgICByZXN1bHQucHJvdG9jb2xE
ZWNsID0gbm9kZS5wcm90b2NvbERlY2w7CiAgICAgICAgIHJlc3VsdC5wb3NzaWJsZU92ZXJsb2Fk
cyA9IG5vZGUucG9zc2libGVPdmVybG9hZHM7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC05
OSw3ICs5OSw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAg
ICBsZXQgcmVzdWx0ID0gbmV3IFZhcmlhYmxlRGVjbCgKICAgICAgICAgICAgIG5vZGUub3JpZ2lu
LCBub2RlLm5hbWUsCiAgICAgICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyksCi0gICAgICAg
ICAgICBub2RlLmluaXRpYWxpemVyID8gbm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKSA6IG51
bGwpOworICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRpYWxpemVyLCB0aGlzKSk7CiAg
ICAgICAgIHRoaXMuX21hcE5vZGUobm9kZSwgcmVzdWx0KTsKICAgICAgICAgcmVzdWx0LmVQdHIg
PSBub2RlLmVQdHI7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzEsNyArMTMxLDcgQEAg
Y2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXRUeXBlUmVmKG5v
ZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFR5cGVSZWYobm9kZS5vcmlnaW4s
IG5vZGUubmFtZSwgbm9kZS50eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJndW1lbnQgPT4gdHlwZUFy
Z3VtZW50LnZpc2l0KHRoaXMpKSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8g
bm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2Rl
LnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ICAgIApAQCAtMTYzLDI0ICsxNjMsNTQgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9y
QmFzZSB7CiAgICAgdmlzaXRBc3NpZ25tZW50KG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVz
dWx0ID0gbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIG5vZGUubGhzLnZpc2l0KHRoaXMpLCBu
b2RlLnJocy52aXNpdCh0aGlzKSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8g
bm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2Rl
LnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAg
ICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUub3Jp
Z2luLCBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKSk7CisgICAgICAgIHJlc3VsdC5vbGRWYWx1ZVZh
ciA9IG5vZGUub2xkVmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1
ZVZhciA9IG5vZGUubmV3VmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5uZXdW
YWx1ZUV4cCA9IG5vZGUubmV3VmFsdWVFeHAudmlzaXQodGhpcyk7CisgICAgICAgIHJlc3VsdC5y
ZXN1bHRFeHAgPSBub2RlLnJlc3VsdEV4cC52aXNpdCh0aGlzKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9kZSkK
ICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKG5v
ZGUub3JpZ2luLCBub2RlLnB0ci52aXNpdCh0aGlzKSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0g
bm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0
LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5hZGRy
ZXNzU3BhY2UgPSBub2RlLmFkZHJlc3NTcGFjZTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAgICAgCisgICAgX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQsIG5v
ZGUpCisgICAgeworICAgICAgICByZXN1bHQucG9zc2libGVHZXRPdmVybG9hZHMgPSBub2RlLnBv
c3NpYmxlR2V0T3ZlcmxvYWRzOworICAgICAgICByZXN1bHQucG9zc2libGVTZXRPdmVybG9hZHMg
PSBub2RlLnBvc3NpYmxlU2V0T3ZlcmxvYWRzOworICAgICAgICByZXN1bHQucG9zc2libGVBbmRP
dmVybG9hZHMgPSBub2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzOworICAgICAgICByZXN1bHQuYmFz
ZVR5cGUgPSBOb2RlLnZpc2l0KG5vZGUuYmFzZVR5cGUsIHRoaXMpOworICAgICAgICByZXN1bHQu
Y2FsbEZvckdldCA9IE5vZGUudmlzaXQobm9kZS5jYWxsRm9yR2V0LCB0aGlzKTsKKyAgICAgICAg
cmVzdWx0LnJlc3VsdFR5cGVGb3JHZXQgPSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckdl
dCwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5jYWxsRm9yQW5kID0gTm9kZS52aXNpdChub2RlLmNh
bGxGb3JBbmQsIHRoaXMpOworICAgICAgICByZXN1bHQucmVzdWx0VHlwZUZvckFuZCA9IE5vZGUu
dmlzaXQobm9kZS5yZXN1bHRUeXBlRm9yQW5kLCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LmNhbGxG
b3JTZXQgPSBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvclNldCwgdGhpcyk7CisgICAgICAgIHJlc3Vs
dC5lcnJvckZvclNldCA9IG5vZGUuZXJyb3JGb3JTZXQ7CisgICAgICAgIHJlc3VsdC51cGRhdGVD
YWxscygpOworICAgIH0KKyAgICAKICAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7
CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRG90RXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9k
ZS5zdHJ1Y3QudmlzaXQodGhpcyksIG5vZGUuZmllbGROYW1lKTsKLSAgICAgICAgcmVzdWx0LnN0
cnVjdFR5cGUgPSBub2RlLnN0cnVjdFR5cGUgPyBub2RlLnN0cnVjdFR5cGUudmlzaXQodGhpcykg
OiBudWxsOwotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJld3JpdGUgZmllbGQsIHNpbmNl
IHRoaXMgaXMgYSBkZWVwIHJlZmVyZW5jZSBnb2luZyBvdXQgb2YgdGhlIGZ1bmN0aW9uLgotICAg
ICAgICAvLyBBbHNvLCB0aGlzIGlzIHNldCB1cCBkdXJpbmcgaW5saW5pbmcsIHNvIHdlJ3JlIGFs
cmVhZHkgZnVsbHkgbW9ub21vcnBoaXNlZC4KLSAgICAgICAgcmVzdWx0LmZpZWxkID0gbm9kZS5m
aWVsZDsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKHJlc3Vs
dCwgbm9kZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZpc2l0
SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IElu
ZGV4RXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5hcnJheS52aXNpdCh0aGlzKSwgbm9kZS5p
bmRleC52aXNpdCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbihyZXN1bHQsIG5vZGUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICAKQEAgLTIxNiw3ICsyNDYsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNl
IHsKICAgICAKICAgICB2aXNpdFJldHVybihub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5l
dyBSZXR1cm4obm9kZS5vcmlnaW4sIG5vZGUudmFsdWUgPyBub2RlLnZhbHVlLnZpc2l0KHRoaXMp
IDogbnVsbCk7CisgICAgICAgIHJldHVybiBuZXcgUmV0dXJuKG5vZGUub3JpZ2luLCBOb2RlLnZp
c2l0KG5vZGUudmFsdWUsIHRoaXMpKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRDb250aW51ZShu
b2RlKQpAQCAtMjQxLDcgKzI3MSw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJh
c2UgewogICAgIHZpc2l0R2VuZXJpY0xpdGVyYWxUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBs
ZXQgcmVzdWx0ID0gbmV3IG5vZGUuY29uc3RydWN0b3Iobm9kZS5vcmlnaW4sIG5vZGUudmFsdWUp
OwotICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlz
KSA6IG51bGw7CisgICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRo
aXMpOwogICAgICAgICByZXN1bHQucHJlZmVycmVkVHlwZSA9IG5vZGUucHJlZmVycmVkVHlwZS52
aXNpdCh0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yNjIsNyArMjky
LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXROdWxs
VHlwZShub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBOdWxsVHlwZShub2Rl
Lm9yaWdpbik7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZp
c2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0KG5vZGUu
dHlwZSwgdGhpcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0yODEsNyAr
MzExLDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgIHJl
c3VsdC5wb3NzaWJsZU92ZXJsb2FkcyA9IG5vZGUucG9zc2libGVPdmVybG9hZHM7CiAgICAgICAg
IGlmIChub2RlLmlzQ2FzdCkKICAgICAgICAgICAgIHJlc3VsdC5zZXRDYXN0RGF0YShub2RlLnJl
dHVyblR5cGUudmlzaXQodGhpcykpOwotICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IG5vZGUu
cmVzdWx0VHlwZSA/IG5vZGUucmVzdWx0VHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAg
IHJlc3VsdC5yZXN1bHRUeXBlID0gTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGUsIHRoaXMpOwog
ICAgICAgICByZXN1bHQucmVzdWx0RVB0ciA9IG5vZGUucmVzdWx0RVB0cjsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yOTEsNyArMzIxLDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0
ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgQ2FsbEV4cHJlc3Np
b24oCiAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5uYW1lLAogICAgICAgICAgICAgbm9k
ZS50eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRo
aXMpKSwKLSAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBhcmd1
bWVudC52aXNpdCh0aGlzKSkpOworICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFy
Z3VtZW50ID0+IE5vZGUudmlzaXQoYXJndW1lbnQsIHRoaXMpKSk7CiAgICAgICAgIHJldHVybiB0
aGlzLnByb2Nlc3NEZXJpdmVkQ2FsbERhdGEobm9kZSwgcmVzdWx0KTsKICAgICB9CiAgICAgCkBA
IC0yOTksNyArMzI5LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAg
ICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAogICAgICAg
ICAgICAgbm9kZS5vcmlnaW4sCi0gICAgICAgICAgICBub2RlLnJldHVyblR5cGUgPyBub2RlLnJl
dHVyblR5cGUudmlzaXQodGhpcykgOiBudWxsLAorICAgICAgICAgICAgTm9kZS52aXNpdChub2Rl
LnJldHVyblR5cGUsIHRoaXMpLAogICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFy
Z3VtZW50ID0+IGFyZ3VtZW50LnZpc2l0KHRoaXMpKSwKICAgICAgICAgICAgIG5vZGUucGFyYW1l
dGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdCh0aGlzKSksCiAgICAgICAgICAg
ICBub2RlLmJvZHkudmlzaXQodGhpcykpOwpAQCAtMzE2LDcgKzM0Niw3IEBAIGNsYXNzIFJld3Jp
dGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogCiAgICAgdmlzaXRJZlN0YXRlbWVudChub2RlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBJZlN0YXRlbWVudChub2RlLm9yaWdpbiwgbm9kZS5j
b25kaXRpb25hbC52aXNpdCh0aGlzKSwgbm9kZS5ib2R5LnZpc2l0KHRoaXMpLCBub2RlLmVsc2VC
b2R5ID8gbm9kZS5lbHNlQm9keS52aXNpdCh0aGlzKSA6IHVuZGVmaW5lZCk7CisgICAgICAgIHJl
dHVybiBuZXcgSWZTdGF0ZW1lbnQobm9kZS5vcmlnaW4sIG5vZGUuY29uZGl0aW9uYWwudmlzaXQo
dGhpcyksIG5vZGUuYm9keS52aXNpdCh0aGlzKSwgTm9kZS52aXNpdChub2RlLmVsc2VCb2R5LCB0
aGlzKSk7CiAgICAgfQogCiAgICAgdmlzaXRXaGlsZUxvb3Aobm9kZSkKQEAgLTMzMiwyMiArMzYy
LDI0IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0Rm9y
TG9vcChub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBGb3JMb29wKG5vZGUub3JpZ2lu
LAotICAgICAgICAgICAgbm9kZS5pbml0aWFsaXphdGlvbiA/IG5vZGUuaW5pdGlhbGl6YXRpb24u
dmlzaXQodGhpcykgOiB1bmRlZmluZWQsCi0gICAgICAgICAgICBub2RlLmNvbmRpdGlvbiA/IG5v
ZGUuY29uZGl0aW9uLnZpc2l0KHRoaXMpIDogdW5kZWZpbmVkLAotICAgICAgICAgICAgbm9kZS5p
bmNyZW1lbnQgPyBub2RlLmluY3JlbWVudC52aXNpdCh0aGlzKSA6IHVuZGVmaW5lZCwKKyAgICAg
ICAgICAgIE5vZGUudmlzaXQobm9kZS5pbml0aWFsaXphdGlvbiwgdGhpcyksCisgICAgICAgICAg
ICBOb2RlLnZpc2l0KG5vZGUuY29uZGl0aW9uLCB0aGlzKSwKKyAgICAgICAgICAgIE5vZGUudmlz
aXQobm9kZS5pbmNyZW1lbnQsIHRoaXMpLAogICAgICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRo
aXMpKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXRMZXRFeHByZXNzaW9uKG5vZGUpCisgICAgdmlz
aXRBbm9ueW1vdXNWYXJpYWJsZShub2RlKQogICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IG5l
dyBMZXRFeHByZXNzaW9uKG5vZGUub3JpZ2luKTsKLSAgICAgICAgcmVzdWx0LmluZGV4ID0gbm9k
ZS5pbmRleDsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlz
aXQodGhpcykgOiBudWxsOwotICAgICAgICByZXN1bHQuYXJndW1lbnQgPSBub2RlLmFyZ3VtZW50
LnZpc2l0KHRoaXMpOworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFub255bW91c1ZhcmlhYmxl
KG5vZGUub3JpZ2luLCBub2RlLnR5cGUudmlzaXQodGhpcykpOworICAgICAgICByZXN1bHQuX2lu
ZGV4ID0gbm9kZS5faW5kZXg7CiAgICAgICAgIHRoaXMuX21hcE5vZGUobm9kZSwgcmVzdWx0KTsK
LSAgICAgICAgcmVzdWx0LmJvZHkgPSBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgICAgIHJl
c3VsdC5lUHRyID0gbm9kZS5lUHRyOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyAg
ICAKKyAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBJZGVudGl0eUV4cHJlc3Npb24obm9kZS50YXJnZXQudmlzaXQodGhpcykpOworICAg
IH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJy
YXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5k
YXJkTGlicmFyeS5qcwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSwx
OCBAQCBuYXRpdmUgZmxvYXQgb3BlcmF0b3IqKGZsb2F0LCBmbG9hdCk7CiBuYXRpdmUgZG91Ymxl
IG9wZXJhdG9yKihkb3VibGUsIGRvdWJsZSk7CiBuYXRpdmUgaW50IG9wZXJhdG9yLyhpbnQsIGlu
dCk7CiBuYXRpdmUgdWludCBvcGVyYXRvci8odWludCwgdWludCk7CituYXRpdmUgaW50IG9wZXJh
dG9yJihpbnQsIGludCk7CituYXRpdmUgaW50IG9wZXJhdG9yfChpbnQsIGludCk7CituYXRpdmUg
aW50IG9wZXJhdG9yXihpbnQsIGludCk7CituYXRpdmUgaW50IG9wZXJhdG9yfihpbnQpOworbmF0
aXZlIGludCBvcGVyYXRvcjw8KGludCwgdWludCk7CituYXRpdmUgaW50IG9wZXJhdG9yPj4oaW50
LCB1aW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yJih1aW50LCB1aW50KTsKK25hdGl2ZSB1aW50
IG9wZXJhdG9yfCh1aW50LCB1aW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yXih1aW50LCB1aW50
KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yfih1aW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yPDwo
dWludCwgdWludCk7CituYXRpdmUgdWludCBvcGVyYXRvcj4+KHVpbnQsIHVpbnQpOwogbmF0aXZl
IGZsb2F0IG9wZXJhdG9yLyhmbG9hdCwgZmxvYXQpOwogbmF0aXZlIGRvdWJsZSBvcGVyYXRvci8o
ZG91YmxlLCBkb3VibGUpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I9PShpbnQsIGludCk7CkBAIC04
OSw2ICsxMDEsMzUgQEAgbmF0aXZlIGJvb2wgb3BlcmF0b3I+PSh1aW50LCB1aW50KTsKIG5hdGl2
ZSBib29sIG9wZXJhdG9yPj0oZmxvYXQsIGZsb2F0KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPj0o
ZG91YmxlLCBkb3VibGUpOwogCitib29sIG9wZXJhdG9yJihib29sIGEsIGJvb2wgYikKK3sKKyAg
ICBpZiAoYSkKKyAgICAgICAgcmV0dXJuIGI7CisgICAgcmV0dXJuIGZhbHNlOworfQorYm9vbCBv
cGVyYXRvcnwoYm9vbCBhLCBib29sIGIpCit7CisgICAgaWYgKGEpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9Citib29sIG9wZXJhdG9yXihib29sIGEsIGJvb2wgYikKK3sKKyAgICBpZiAoYSkKKyAgICAg
ICAgcmV0dXJuICFiOworICAgIHJldHVybiBiOworfQorYm9vbCBvcGVyYXRvcn4oYm9vbCB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gIXZhbHVlOworfQorCitwcm90b2NvbCBBZGRhYmxlIHsKKyAgICBB
ZGRhYmxlIG9wZXJhdG9yKyhBZGRhYmxlLCBBZGRhYmxlKTsKK30KKwogcHJvdG9jb2wgRXF1YXRh
YmxlIHsKICAgICBib29sIG9wZXJhdG9yPT0oRXF1YXRhYmxlLCBFcXVhdGFibGUpOwogfQpAQCAt
MTEzLDQgKzE1NCwxNCBAQCBuYXRpdmUgdGhyZWFkIFReIG9wZXJhdG9yJltdPFQ+KHRocmVhZCBU
CiBuYXRpdmUgdGhyZWFkZ3JvdXAgVF4gb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KHRocmVhZGdy
b3VwIFRbXSwgdWludCk7CiBuYXRpdmUgZGV2aWNlIFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZl
PihkZXZpY2UgVFtdLCB1aW50KTsKIG5hdGl2ZSBjb25zdGFudCBUXiBvcGVyYXRvciZbXTxUOnBy
aW1pdGl2ZT4oY29uc3RhbnQgVFtdLCB1aW50KTsKKworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVu
Z3RoPFQ+KHRocmVhZCBUW10pOworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6cHJpbWl0
aXZlPih0aHJlYWRncm91cCBUW10pOworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6cHJp
bWl0aXZlPihkZXZpY2UgVFtdKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOnByaW1p
dGl2ZT4oY29uc3RhbnQgVFtdKTsKKwordWludCBvcGVyYXRvci5sZW5ndGg8VCwgdWludCBsZW5n
dGg+KFRbbGVuZ3RoXSkKK3sKKyAgICByZXR1cm4gbGVuZ3RoOworfQogYDsKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0TGF5b3V0QnVpbGRlci5q
cwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Ry
dWN0TGF5b3V0QnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNTksNSArNTksMTEgQEAgY2xh
c3MgU3RydWN0TGF5b3V0QnVpbGRlciBleHRlbmRzIFZpc2l0bwogICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJUeXBlIGRvZXMgbm90IGhhdmUgc2l6ZTogIiArIG5vZGUudHlwZSk7CiAgICAg
ICAgIHRoaXMuX29mZnNldCArPSBzaXplOwogICAgIH0KKyAgICAKKyAgICB2aXNpdE5hdGl2ZUZ1
bmNJbnN0YW5jZShub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXROYXRpdmVGdW5jSW5z
dGFuY2Uobm9kZSk7CisgICAgICAgIG5vZGUuZnVuYy5kaWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1l
bnRhdGlvbkRhdGEobm9kZS5pbXBsZW1lbnRhdGlvbkRhdGEpOworICAgIH0KIH0KIApJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpzCShyZXZpc2lvbiAy
MjIxMzgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC01NywyMSArNTcsMjkgQEAgY2xhc3MgU3RydWN0VHlwZSBleHRlbmRz
IFR5cGUgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBpbnN0YW50
aWF0ZSh0eXBlQXJndW1lbnRzLCBtb2RlKQorICAgIGluc3RhbnRpYXRlKHR5cGVBcmd1bWVudHMg
PSBudWxsKQogICAgIHsKLSAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoICE9IHRoaXMu
dHlwZVBhcmFtZXRlcnMubGVuZ3RoKQotICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Io
b3JpZ2luLm9yaWdpblN0cmluZywgIldyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyB0byBp
bnN0YW50aWF0aW9uIik7CisgICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBudWxsOworICAgICAg
ICBsZXQgdHlwZVBhcmFtZXRlcnMgPSB0aGlzLnR5cGVQYXJhbWV0ZXJzOwogICAgICAgICAKLSAg
ICAgICAgaWYgKCF0eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICBpZiAodHlwZUFyZ3VtZW50cykgeworICAgICAgICAgICAgaWYgKHR5cGVBcmd1
bWVudHMubGVuZ3RoICE9IHRoaXMudHlwZVBhcmFtZXRlcnMubGVuZ3RoKQorICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJXcm9uZyBudW1i
ZXIgb2YgdHlwZSBhcmd1bWVudHMgdG8gaW5zdGFudGlhdGlvbiIpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoIXR5cGVBcmd1bWVudHMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdWJzdGl0dXRpb24gPSBuZXcg
U3Vic3RpdHV0aW9uKHRoaXMudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOworICAgICAg
ICAgICAgdHlwZVBhcmFtZXRlcnMgPSBbXTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
bGV0IHN1YnN0aXR1dGlvbiA9IG5ldyBTdWJzdGl0dXRpb24odGhpcy50eXBlUGFyYW1ldGVycywg
dHlwZUFyZ3VtZW50cyk7Ci0gICAgICAgIGxldCBpbnN0YW50aWF0ZUltbWVkaWF0ZXMgPSBtb2Rl
ID09ICJzaGFsbG93IiA/IG51bGwgOiBuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCk7Ci0gICAg
ICAgIGxldCByZXN1bHQgPSBuZXcgU3RydWN0VHlwZSh0aGlzLm9yaWdpbiwgdGhpcy5uYW1lLCBb
XSk7CisgICAgICAgIGxldCBpbnN0YW50aWF0ZUltbWVkaWF0ZXMgPSBuZXcgSW5zdGFudGlhdGVJ
bW1lZGlhdGVzKCk7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3RydWN0VHlwZSh0aGlzLm9y
aWdpbiwgdGhpcy5uYW1lLCB0eXBlUGFyYW1ldGVycyk7CiAgICAgICAgIGZvciAobGV0IGZpZWxk
IG9mIHRoaXMuZmllbGRzKSB7Ci0gICAgICAgICAgICBsZXQgbmV3RmllbGQgPSBmaWVsZC52aXNp
dChzdWJzdGl0dXRpb24pOwotICAgICAgICAgICAgaWYgKGluc3RhbnRpYXRlSW1tZWRpYXRlcykK
LSAgICAgICAgICAgICAgICBuZXdGaWVsZCA9IG5ld0ZpZWxkLnZpc2l0KGluc3RhbnRpYXRlSW1t
ZWRpYXRlcyk7CisgICAgICAgICAgICBsZXQgbmV3RmllbGQgPSBmaWVsZDsKKyAgICAgICAgICAg
IGlmIChzdWJzdGl0dXRpb24pCisgICAgICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC52
aXNpdChzdWJzdGl0dXRpb24pOworICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC52aXNp
dChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpOwogICAgICAgICAgICAgcmVzdWx0LmFkZChuZXdGaWVs
ZCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWJzdGl0dXRpb24uanMJKHJldmlzaW9uIDIyMjEzOCkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBjbGFzcyBTdWJzdGl0dXRpb24gZXh0ZW5kcyBSZXdy
aXRlciB7CiAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KHBhcmFtZXRlcnNbaV0sIGFyZ3VtZW50
TGlzdFtpXSk7CiAgICAgfQogICAgIAorICAgIGdldCBtYXAoKSB7IHJldHVybiB0aGlzLl9tYXA7
IH0KKyAgICAKICAgICB2aXNpdFR5cGVSZWYobm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXBs
YWNlbWVudCA9IHRoaXMuX21hcC5nZXQobm9kZS50eXBlKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1N1ZmZpeENhbGxBc3NpZ25tZW50LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1ZmZpeENhbGxBc3NpZ25tZW50LmpzCShyZXZp
c2lvbiAyMjIxMzgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWZmaXhDYWxs
QXNzaWdubWVudC5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3Mg
U3VmZml4Q2FsbEFzc2lnbm1lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3Rv
cihvcmlnaW4sIG5hbWUsIGxocykKLSAgICB7Ci0gICAgICAgIHN1cGVyKG9yaWdpbik7Ci0gICAg
ICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgICAgICB0aGlzLl9saHMgPSBsaHM7Ci0gICAgICAg
IHRoaXMuZnVuYyA9IG51bGw7Ci0gICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1cm4g
dGhpcy5fbmFtZTsgfQotICAgIGdldCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KLSAgICAK
LSAgICB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5saHMgKyAiIHN1ZmZp
eCAiICsgdGhpcy5uYW1lOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCShu
b25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
ZnVuY3Rpb24gc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycyhwcm9ncmFtKQoreworICAgIGZvciAo
bGV0IHR5cGUgb2YgcHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoISh0eXBl
IGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
CisgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHR5cGUuZmllbGRzKSB7CisgICAgICAgICAgICBm
dW5jdGlvbiBjcmVhdGVUeXBlUGFyYW1ldGVycygpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHR5cGUudHlwZVBhcmFtZXRlcnMubWFwKAorICAgICAgICAgICAgICAgICAg
ICB0eXBlUGFyYW1ldGVyID0+IHR5cGVQYXJhbWV0ZXIudmlzaXQobmV3IFR5cGVQYXJhbWV0ZXJS
ZXdyaXRlcigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1
bmN0aW9uIGNyZWF0ZVR5cGVBcmd1bWVudHMoKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiB0eXBlUGFyYW1ldGVycy5tYXAodHlwZVBhcmFtZXRlciA9PiB0eXBlUGFyYW1l
dGVyLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1
bmMsIGltcGxlbWVudGF0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5hdGl2
ZUZ1bmMuaW5zdGFudGlhdGVJbXBsZW1lbnRhdGlvbiA9IHN1YnN0aXR1dGlvbiA9PiB7CisgICAg
ICAgICAgICAgICAgICAgIGxldCBuZXdUeXBlID0gdHlwZS5pbnN0YW50aWF0ZShuYXRpdmVGdW5j
LnR5cGVQYXJhbWV0ZXJzLm1hcCh0eXBlUGFyYW1ldGVyID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxldCBzdWJzdGl0dXRlID0gc3Vic3RpdHV0aW9uLm1hcC5nZXQodHlwZVBhcmFtZXRl
cik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YnN0aXR1dGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIHN1YnN0aXR1dGUgZm9yIHR5
cGUgcGFyYW1ldGVyICIgKyB0eXBlUGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdWJzdGl0dXRlOworICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7dHlwZTogbmV3VHlwZSwgZmllbGROYW1lOiBmaWVsZC5uYW1lfTsK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMudmlzaXRJbXBs
ZW1lbnRhdGlvbkRhdGEgPSAoaW1wbGVtZW50YXRpb25EYXRhLCB2aXNpdG9yKSA9PiB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFZpc2l0aW5nIHRoZSB0eXBlIGZpcnN0IGVuc3VyZXMgdGhhdCB0
aGUgc3RydWN0IGxheW91dCBidWlsZGVyIGZpZ3VyZXMgb3V0IHRoZSBmaWVsZCdzCisgICAgICAg
ICAgICAgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRp
b25EYXRhLnR5cGUudmlzaXQodmlzaXRvcik7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICBuYXRpdmVGdW5jLmRpZExheW91dFN0cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YSA9
IGltcGxlbWVudGF0aW9uRGF0YSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGxldCBzdHJ1Y3RT
aXplID0gaW1wbGVtZW50YXRpb25EYXRhLnR5cGUuc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHN0cnVjdFNpemUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiTm8gc3RydWN0IHNpemUgZm9yICIgKyBuYXRpdmVGdW5jKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGV0IGZpZWxkID0gaW1wbGVtZW50YXRpb25EYXRhLnR5cGUuZmllbGRCeU5hbWUo
aW1wbGVtZW50YXRpb25EYXRhLmZpZWxkTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
ZmllbGQpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5v
dCBmaW5kIGZpZWxkIik7CisgICAgICAgICAgICAgICAgICAgIGxldCBvZmZzZXQgPSBmaWVsZC5v
ZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZFNpemUgPSBmaWVsZC50eXBlLnNp
emU7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZFNpemUgPT0gbnVsbCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gZmllbGQgc2l6ZSBmb3IgIiArIG5h
dGl2ZUZ1bmMpOworICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09IG51bGwpCisgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIG9mZnNldCBmb3IgIiArIG5h
dGl2ZUZ1bmMpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW1w
bGVtZW50YXRpb25EYXRhLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgaW1w
bGVtZW50YXRpb25EYXRhLnN0cnVjdFNpemUgPSBzdHJ1Y3RTaXplOworICAgICAgICAgICAgICAg
ICAgICBpbXBsZW1lbnRhdGlvbkRhdGEuZmllbGRTaXplID0gZmllbGRTaXplOworICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgbmF0aXZlRnVuYy5pbXBsZW1lbnRhdGlvbiA9IChh
cmd1bWVudExpc3QsIG5vZGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5hdGl2ZUZ1
bmNJbnN0YW5jZSA9IG5vZGUubmF0aXZlRnVuY0luc3RhbmNlOworICAgICAgICAgICAgICAgICAg
ICBsZXQgaW1wbGVtZW50YXRpb25EYXRhID0gbmF0aXZlRnVuY0luc3RhbmNlLmltcGxlbWVudGF0
aW9uRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uKAorICAg
ICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRMaXN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgaW1wbGVtZW50YXRpb25EYXRhLm9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlt
cGxlbWVudGF0aW9uRGF0YS5zdHJ1Y3RTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgaW1w
bGVtZW50YXRpb25EYXRhLmZpZWxkU2l6ZSk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlRmllbGRUeXBl
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQudHlwZS52aXNp
dChuZXcgU3Vic3RpdHV0aW9uKHR5cGUudHlwZVBhcmFtZXRlcnMsIHR5cGVQYXJhbWV0ZXJzKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0
ZVR5cGVSZWYoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBUeXBlUmVm
Lmluc3RhbnRpYXRlKHR5cGUsIGNyZWF0ZVR5cGVBcmd1bWVudHMoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCBpc0Nhc3QgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGxldCB0eXBlUGFyYW1ldGVyczsKKyAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jOworCisg
ICAgICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAorICAgICAgICAgICAgdHlw
ZVBhcmFtZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOworICAgICAgICAgICAgbmF0aXZl
RnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9w
ZXJhdG9yLiIgKyBmaWVsZC5uYW1lLCBjcmVhdGVGaWVsZFR5cGUoKSwgdHlwZVBhcmFtZXRlcnMs
CisgICAgICAgICAgICAgICAgW25ldyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwg
Y3JlYXRlVHlwZVJlZigpKV0sIGlzQ2FzdCk7CisgICAgICAgICAgICBzZXR1cEltcGxlbWVudGF0
aW9uRGF0YShuYXRpdmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6
ZSkgPT4geworICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1ZmZl
cihmaWVsZFNpemUpLCAwKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuY29weUZyb20oYmFzZS5w
bHVzKG9mZnNldCksIGZpZWxkU2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQor
ICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOworICAg
ICAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgICAgIGZp
ZWxkLm9yaWdpbiwgIm9wZXJhdG9yLiIgKyBmaWVsZC5uYW1lICsgIj0iLCBjcmVhdGVUeXBlUmVm
KCksIHR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAg
ICAgbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBjcmVhdGVUeXBlUmVmKCkp
LAorICAgICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51
bGwsIGNyZWF0ZUZpZWxkVHlwZSgpKQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAg
ICAgaXNDYXN0KTsKKyAgICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1
bmMsIChbYmFzZSwgdmFsdWVdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4gewor
ICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRVB0cihuZXcgRUJ1ZmZlcihzdHJ1Y3RT
aXplKSwgMCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UsIHN0cnVjdFNp
emUpOworICAgICAgICAgICAgICAgIHJlc3VsdC5wbHVzKG9mZnNldCkuY29weUZyb20odmFsdWUs
IGZpZWxkU2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisgICAgICAgICAgICBm
dW5jdGlvbiBzZXR1cEFuZGVyKGFkZHJlc3NTcGFjZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB0eXBlUGFyYW1ldGVycyA9IGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCk7CisgICAgICAg
ICAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgICAgICAg
ICBmaWVsZC5vcmlnaW4sICJvcGVyYXRvciYuIiArIGZpZWxkLm5hbWUsIG5ldyBQdHJUeXBlKGZp
ZWxkLm9yaWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVGaWVsZFR5cGUoKSksCisgICAgICAgICAg
ICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICBbCisgICAgICAg
ICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaWVsZC5vcmlnaW4sIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmV3IFB0clR5cGUoZmllbGQub3JpZ2luLCBhZGRyZXNzU3BhY2UsIGNyZWF0ZVR5cGVSZWYoKSkp
CisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgIGlzQ2FzdCk7Cisg
ICAgICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRhdGEobmF0aXZlRnVuYywgKFtiYXNl
XSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgYmFzZSA9IGJhc2UubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghYmFz
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZywgIk51bGwgZGVyZWZlcmVuY2UiKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEVQdHIuYm94KGJhc2UucGx1cyhvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0dXBBbmRlcigidGhyZWFkIik7CisgICAg
ICAgICAgICBpZiAodHlwZS5pbnN0YW50aWF0ZSgpLmlzUHJpbWl0aXZlKSB7CisgICAgICAgICAg
ICAgICAgc2V0dXBBbmRlcigidGhyZWFkZ3JvdXAiKTsKKyAgICAgICAgICAgICAgICBzZXR1cEFu
ZGVyKCJkZXZpY2UiKTsKKyAgICAgICAgICAgICAgICBzZXR1cEFuZGVyKCJjb25zdGFudCIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02LDEzICs2LDE0
IEBACiA8c2NyaXB0IHNyYz0iUmVmZXJlbmNlVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iVmFsdWUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkV4cHJlc3Npb24uanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9IlZpc2l0b3JCYXNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJSZXdyaXRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVmlzaXRvci5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iQ3JlYXRlTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iQ3JlYXRlTGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiAKIDxzY3JpcHQgc3JjPSJBZGRyZXNzU3Bh
Y2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkFub255bW91c1ZhcmlhYmxlLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVJlZlR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IkFycmF5VHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQXNzaWdubWVudC5qcyI+
PC9zY3JpcHQ+CkBAIC0yMCw3ICsyMSw2IEBACiA8c2NyaXB0IHNyYz0iQmxvY2suanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IkJvb2xMaXRlcmFsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJCcmVhay5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iQ2FsbEFzc2lnbm1lbnQuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IkNhbGxFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJDYWxsRnVuY3Rpb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNoZWNrLmpz
Ij48L3NjcmlwdD4KQEAgLTQ4LDYgKzQ4LDcgQEAKIDxzY3JpcHQgc3JjPSJFdmFsdWF0b3IuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkV4cHJlc3Npb25GaW5kZXIuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IkZpZWxkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJGaW5kSGlnaFpv
bWJpZXMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZsYXR0ZW5Qcm90b2NvbEV4dGVuZHMu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZsb2F0TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iRmxvYXRMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+CkBAIC01Nyw3ICs1OCwx
MCBAQAogPHNjcmlwdCBzcmM9IkZ1bmNJbnN0YW50aWF0b3IuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9IkZ1bmNQYXJhbWV0ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZ1bmN0aW9u
TGlrZUJsb2NrLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJIaWdoWm9tYmllRmluZGVyLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJJZGVudGl0eUV4cHJlc3Npb24uanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IklmU3RhdGVtZW50LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJJ
bmRleEV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkluZmVyVHlwZXNGb3JD
YWxsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJbmxpbmUuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IklubGluZXIuanMiPjwvc2NyaXB0PgpAQCAtNzksMjAgKzgzLDI0IEBACiA8c2Ny
aXB0IHNyYz0iTmF0aXZlRnVuY0luc3RhbmNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJO
YXRpdmVUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJOYXRpdmVUeXBlSW5zdGFuY2Uu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ik5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik51bGxMaXRlcmFsLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJOdWxsVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iT3ZlcmxvYWRSZXNv
bHV0aW9uRmFpbHVyZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUGFyc2UuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IlByZXBhcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlBy
b3BlcnR5UmVzb2x2ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb2dyYW0uanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3RvY29sLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJQcm90b2NvbERlY2wuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3RvY29sRnVuY0Rl
Y2wuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3RvY29sUmVmLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJQdHJUeXBlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZWN1cnNpb25D
aGVja2VyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXNvbHZlTmFtZXMuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IlJlc29sdmVPdmVybG9hZEltcGwuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9IlJlc29sdmVQcm9wZXJ0aWVzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJS
ZXNvbHZlVHlwZURlZnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJldHVybi5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmV0dXJuQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CkBAIC0xMDEs
MTIgKzEwOSwxNCBAQAogPHNjcmlwdCBzcmM9IlN0cnVjdExheW91dEJ1aWxkZXIuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IlN0cnVjdFR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IlN1YnN0aXR1dGlvbi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iU3VmZml4Q2FsbEFzc2ln
bm1lbnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3Nv
cnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5cGVEZWYuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IlR5cGVEZWZSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlw
ZU9yVmFyaWFibGVSZWYuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlR5cGVQYXJhbWV0ZXJS
ZXdyaXRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZVJlZi5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iVHlwZVZhcmlhYmxlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJU
eXBlVmFyaWFibGVUcmFja2VyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlZFZhbHVl
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJVaW50TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iVWludExpdGVyYWxUeXBlLmpzIj48L3NjcmlwdD4KQEAgLTEyNiwxMiArMTM2
LDI4IEBACiA8c2NyaXB0PgogZnVuY3Rpb24gZG9UZXN0SW5Ccm93c2VyKCkKIHsKLSAgICB0cnkg
ewotICAgICAgICBkb1Rlc3Qod2luZG93KTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIHBy
aW50KCJFUlJPUjogIiArIGUubWVzc2FnZSk7Ci0gICAgICAgIHByaW50KGUuc3RhY2spOworICAg
IHZhciB0ZXN0ZXIgPSBkb1Rlc3Qod2luZG93KTsKKyAgICB2YXIgbGFzdFRpbWU7CisgICAgZnVu
Y3Rpb24gbmV4dCgpCisgICAgeworICAgICAgICB2YXIgYmVmb3JlID0gRGF0ZS5ub3coKTsKKyAg
ICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAo
dGVzdGVyLm5leHQoKS5kb25lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiAiICsgZS5t
ZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBwcmludChlLnN0YWNrKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3co
KTsKKyAgICAgICAgICAgIGlmIChub3cgLSBiZWZvcmUgPiAxMDApIHsKKyAgICAgICAgICAgICAg
ICB3aW5kb3cuc2V0VGltZW91dChuZXh0LCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CisgICAgbmV4dCgpOwogfQogPC9zY3JpcHQ+
CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkocmV2aXNpb24gMjIy
MTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQCBpZiAodGhpcy53aW5kb3cpIHsKICAgICAgICAgdmFyIHNw
YW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJtZXNzYWdlcyIpLmFwcGVuZENoaWxkKHNwYW4pOwogICAgICAgICBzcGFu
LmlubmVySFRNTCA9IHRleHQucmVwbGFjZSgvIC9nLCAiJm5ic3A7IikucmVwbGFjZSgvXG4vZywg
Ijxicj4iKSArICI8YnI+IjsKKyAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsZG9jdW1lbnQuYm9k
eS5zY3JvbGxIZWlnaHQpOwogICAgIH07CiAgICAgdGhpcy5wcmVjaXNlVGltZSA9ICgpID0+IHBl
cmZvcm1hbmNlLm5vdygpIC8gMTAwMDsKIH0gZWxzZQpAQCAtNTcsNiArNTgsMTQgQEAgZnVuY3Rp
b24gbWFrZUludChwcm9ncmFtLCB2YWx1ZSkKICAgICByZXR1cm4gVHlwZWRWYWx1ZS5ib3gocHJv
Z3JhbS5pbnRyaW5zaWNzLmludDMyLCB2YWx1ZSk7CiB9CiAKK2Z1bmN0aW9uIGNoZWNrTnVtYmVy
KHByb2dyYW0sIHJlc3VsdCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKCFyZXN1bHQudHlwZS5pc051
bWJlcikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQgdHlwZTsgcmVzdWx0
OiAiICsgcmVzdWx0KTsKKyAgICBpZiAocmVzdWx0LnZhbHVlICE9IGV4cGVjdGVkKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdDogIiArIHJlc3VsdC52YWx1ZSArICIgKGV4
cGVjdGVkICIgKyBleHBlY3RlZCArICIpIik7Cit9CisKIGZ1bmN0aW9uIG1ha2VVaW50KHByb2dy
YW0sIHZhbHVlKQogewogICAgIHJldHVybiBUeXBlZFZhbHVlLmJveChwcm9ncmFtLmludHJpbnNp
Y3MudWludDMyLCB2YWx1ZSk7CkBAIC00NDgsMTAgKzQ1NywxMCBAQCBmdW5jdGlvbiBURVNUX2Rl
dmljZUFycmF5U3RvcmVJbnRMaXRlcmFsCiBmdW5jdGlvbiBURVNUX3NpbXBsZVByb3RvY29sKCkK
IHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIHByb3RvY29sIEFkZGFibGUg
ewotICAgICAgICAgICAgQWRkYWJsZSBvcGVyYXRvcisoQWRkYWJsZSwgQWRkYWJsZSk7CisgICAg
ICAgIHByb3RvY29sIE15QWRkYWJsZSB7CisgICAgICAgICAgICBNeUFkZGFibGUgb3BlcmF0b3Ir
KE15QWRkYWJsZSwgTXlBZGRhYmxlKTsKICAgICAgICAgfQotICAgICAgICBUIGFkZDxUOkFkZGFi
bGU+KFQgYSwgVCBiKQorICAgICAgICBUIGFkZDxUOk15QWRkYWJsZT4oVCBhLCBUIGIpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBhICsgYjsKICAgICAgICAgfQpAQCAtNzc5LDcgKzc4
OCw3IEBAIGZ1bmN0aW9uIFRFU1Rfc3RvcmVOdWxsQXJyYXlSZWYoKQogICAgICAgICAoKSA9PiBk
b1ByZXAoYAogICAgICAgICAgICAgdm9pZCBmb28oKSB7IG51bGxbMHVdID0gNDI7IH0KICAgICAg
ICAgYCksCi0gICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3Nh
Z2UuaW5kZXhPZigiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIikgIT0gLTEpOworICAg
ICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2Yo
IkxIUyBvZiBhc3NpZ25tZW50IGlzIG5vdCBhbiBMVmFsdWUiKSAhPSAtMSk7CiB9CiAKIGZ1bmN0
aW9uIFRFU1RfcmV0dXJuTnVsbEFycmF5UmVmKCkKQEAgLTg4NywxNCArODk2LDE0IEBAIGZ1bmN0
aW9uIFRFU1RfYmFkSW50TGl0ZXJhbEZvckludCgpCiB7CiAgICAgY2hlY2tGYWlsKAogICAgICAg
ICAoKSA9PiBkb1ByZXAoInZvaWQgZm9vKCkgeyBpbnQgeCA9IDMwMDAwMDAwMDA7IH0iKSwKLSAg
ICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKKyAgICAgICAgKGUpID0+IGUg
aW5zdGFuY2VvZiBXU3ludGF4RXJyb3IpOwogfQogCiBmdW5jdGlvbiBURVNUX2JhZEludExpdGVy
YWxGb3JVaW50KCkKIHsKICAgICBjaGVja0ZhaWwoCiAgICAgICAgICgpID0+IGRvUHJlcCgidm9p
ZCBmb28oKSB7IHVpbnQgeCA9IDUwMDAwMDAwMDA7IH0iKSwKLSAgICAgICAgKGUpID0+IGUgaW5z
dGFuY2VvZiBXVHlwZUVycm9yKTsKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXU3ludGF4
RXJyb3IpOwogfQogCiBmdW5jdGlvbiBURVNUX2JhZEludExpdGVyYWxGb3JEb3VibGUoKQpAQCAt
MTUwMywxMCArMTUxMiwxMCBAQCBmdW5jdGlvbiBURVNUX2ludExpdGVyYWxHZW5lcmljKCkKIGZ1
bmN0aW9uIFRFU1RfaW50TGl0ZXJhbEdlbmVyaWNXaXRoUHJvdG9jb2xzKCkKIHsKICAgICBsZXQg
cHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIHByb3RvY29sIENvbnZlcnRpYmxlVG9JbnQgewot
ICAgICAgICAgICAgb3BlcmF0b3IgaW50KENvbnZlcnRpYmxlVG9JbnQpOworICAgICAgICBwcm90
b2NvbCBNeUNvbnZlcnRpYmxlVG9JbnQgeworICAgICAgICAgICAgb3BlcmF0b3IgaW50KE15Q29u
dmVydGlibGVUb0ludCk7CiAgICAgICAgIH0KLSAgICAgICAgaW50IGZvbzxUOkNvbnZlcnRpYmxl
VG9JbnQ+KFQgeCkgeyByZXR1cm4gaW50KHgpOyB9CisgICAgICAgIGludCBmb288VDpNeUNvbnZl
cnRpYmxlVG9JbnQ+KFQgeCkgeyByZXR1cm4gaW50KHgpOyB9CiAgICAgICAgIGludCBiYXIoKSB7
IHJldHVybiBmb28oNDIpOyB9CiAgICAgYCk7CiAgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSwgW10pLCA0Mik7CkBAIC0xNTI0LDEwICsxNTMzLDEw
IEBAIGZ1bmN0aW9uIFRFU1RfdWludExpdGVyYWxHZW5lcmljKCkKIGZ1bmN0aW9uIFRFU1RfdWlu
dExpdGVyYWxHZW5lcmljV2l0aFByb3RvY29scygpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1By
ZXAoYAotICAgICAgICBwcm90b2NvbCBDb252ZXJ0aWJsZVRvVWludCB7Ci0gICAgICAgICAgICBv
cGVyYXRvciB1aW50KENvbnZlcnRpYmxlVG9VaW50KTsKKyAgICAgICAgcHJvdG9jb2wgTXlDb252
ZXJ0aWJsZVRvVWludCB7CisgICAgICAgICAgICBvcGVyYXRvciB1aW50KE15Q29udmVydGlibGVU
b1VpbnQpOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQgZm9vPFQ6Q29udmVydGlibGVUb1VpbnQ+
KFQgeCkgeyByZXR1cm4gdWludCh4KTsgfQorICAgICAgICB1aW50IGZvbzxUOk15Q29udmVydGli
bGVUb1VpbnQ+KFQgeCkgeyByZXR1cm4gdWludCh4KTsgfQogICAgICAgICB1aW50IGJhcigpIHsg
cmV0dXJuIGZvbyg0MnUpOyB9CiAgICAgYCk7CiAgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10sIFtdKSwgNDIpOwpAQCAtMjYwMiw2ICsyNjExLDc3
MSBAQCBmdW5jdGlvbiBURVNUX21ha2VBcnJheVJlZkZyb21BcnJheVJlZigpCiAgICAgICAgIChl
KSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7CiB9CiAKK2Z1bmN0aW9uIFRFU1Rfc2ltcGxl
TGVuZ3RoKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHVpbnQgZm9v
KCkKKyAgICAgICAgeworICAgICAgICAgICAgZG91YmxlWzc1NF0gYXJyYXk7CisgICAgICAgICAg
ICByZXR1cm4gKEBhcnJheSkubGVuZ3RoOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tV
aW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNzU0KTsK
K30KKworZnVuY3Rpb24gVEVTVF9ub25BcnJheVJlZkFycmF5TGVuZ3RoKCkKK3sKKyAgICBsZXQg
cHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHVpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZG91YmxlWzc1NF0gYXJyYXk7CisgICAgICAgICAgICByZXR1cm4gYXJyYXkubGVuZ3Ro
OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNzU0KTsKK30KKworZnVuY3Rpb24gVEVTVF9hc3Np
Z25MZW5ndGgoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAg
ICAgICAgICAgIHZvaWQgZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb3Vi
bGVbNzU0XSBhcnJheTsKKyAgICAgICAgICAgICAgICAoQGFycmF5KS5sZW5ndGggPSA0MjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5
cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiTEhTIG9mIGFzc2lnbm1lbnQgaXMgbm90IGFu
IExWYWx1ZSIpICE9IC0xKTsKK30KKworZnVuY3Rpb24gVEVTVF9hc3NpZ25MZW5ndGhIZWxwZXIo
KQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAg
IHZvaWQgYmFyKHRocmVhZCBkb3VibGVbXSBhcnJheSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBhcnJheS5sZW5ndGggPSA0MjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZv
aWQgZm9vKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb3VibGVbNzU0XSBhcnJh
eTsKKyAgICAgICAgICAgICAgICBiYXIoQGFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
YCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3NhZ2Uu
aW5kZXhPZigiQ2Fubm90IGVtaXQgc2V0IGJlY2F1c2U6IERpZCBub3QgZmluZCBhbnkgZnVuY3Rp
b25zIG5hbWVkIG9wZXJhdG9yLmxlbmd0aD0iKSAhPSAtMSk7Cit9CisKK2Z1bmN0aW9uIFRFU1Rf
c2ltcGxlR2V0dGVyKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0
cnVjdCBGb28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9w
ZXJhdG9yLnkoRm9vIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby54Owor
ICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28g
Zm9vOworICAgICAgICAgICAgZm9vLnggPSA3ODA0OworICAgICAgICAgICAgcmV0dXJuIGZvby55
OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW10pLCA3ODA0KTsKK30KKworZnVuY3Rpb24gVEVTVF9zaW1w
bGVTZXR0ZXIoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0
IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQorICAgICAgICBpbnQgb3BlcmF0
b3IueShGb28gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vLng7CisgICAg
ICAgIH0KKyAgICAgICAgRm9vIG9wZXJhdG9yLnk9KEZvbyBmb28sIGludCB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9vLnggPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBmb287
CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZv
byBmb287CisgICAgICAgICAgICBmb28ueSA9IDc4MDQ7CisgICAgICAgICAgICByZXR1cm4gZm9v
Lng7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDc4MDQpOworfQorCitmdW5jdGlvbiBURVNUX2dl
bmVyaWNBY2Nlc3NvcnMoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAg
c3RydWN0IEZvbzxUPiB7CisgICAgICAgICAgICBUIHg7CisgICAgICAgICAgICBUWzNdIHk7Cisg
ICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJhcjxUPiB7CisgICAgICAgICAgICBUIHg7CisgICAg
ICAgICAgICBUIHk7CisgICAgICAgIH0KKyAgICAgICAgQmFyPFQ+IG9wZXJhdG9yLno8VD4oRm9v
PFQ+IGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgQmFyPFQ+IHJlc3VsdDsKKyAgICAgICAg
ICAgIHJlc3VsdC54ID0gZm9vLng7CisgICAgICAgICAgICByZXN1bHQueSA9IGZvby55WzFdOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBGb288VD4gb3Bl
cmF0b3Iuej08VD4oRm9vPFQ+IGZvbywgQmFyPFQ+IGJhcikKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9vLnggPSBiYXIueDsKKyAgICAgICAgICAgIGZvby55WzFdID0gYmFyLnk7CisgICAgICAg
ICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgICAgIFQgb3BlcmF0b3Iuc3VtPFQ6QWRk
YWJsZT4oRm9vPFQ+IGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby54ICsg
Zm9vLnlbMF0gKyBmb28ueVsxXSArIGZvby55WzJdOworICAgICAgICB9CisgICAgICAgIFQgb3Bl
cmF0b3Iuc3VtPFQ6QWRkYWJsZT4oQmFyPFQ+IGJhcikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGJhci54ICsgYmFyLnk7CisgICAgICAgIH0KKyAgICAgICAgb3BlcmF0b3I8VD4gQmFy
PFQ+KFQgeCwgVCB5KQorICAgICAgICB7CisgICAgICAgICAgICBCYXI8VD4gcmVzdWx0OworICAg
ICAgICAgICAgcmVzdWx0LnggPSB4OworICAgICAgICAgICAgcmVzdWx0LnkgPSB5OworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNldHVwKHRocmVh
ZCBGb288aW50Pl4gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICBmb28tPnggPSAxOworICAg
ICAgICAgICAgZm9vLT55WzBdID0gMjsKKyAgICAgICAgICAgIGZvby0+eVsxXSA9IDM7CisgICAg
ICAgICAgICBmb28tPnlbMl0gPSA0OworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0U3VwZXJC
YXNpYygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAg
IHNldHVwKCZmb28pOworICAgICAgICAgICAgcmV0dXJuIGZvby5zdW07CisgICAgICAgIH0KKyAg
ICAgICAgaW50IHRlc3RaU2V0dGVyRGlkU2V0WSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZv
bzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIGZvby56ID0gQmFyPGludD4oNTMsIDkzMik7CisgICAg
ICAgICAgICByZXR1cm4gZm9vLnlbMV07CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RaU2V0
dGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vPGludD4gZm9vOworICAgICAgICAgICAg
Zm9vLnogPSBCYXI8aW50Pig1MywgOTMyKTsKKyAgICAgICAgICAgIHJldHVybiBmb28uc3VtOwor
ICAgICAgICB9CisgICAgICAgIGludCB0ZXN0WkdldHRlcigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIC8vIFRoaXMgZGVsaWJlcmF0ZWx5IGRvZXMg
bm90IGNhbGwgc2V0dXAoKSBqdXN0IHNvIHdlIHRlc3QgdGhpcyBzeW50YXguCisgICAgICAgICAg
ICBmb28ueCA9IDE7CisgICAgICAgICAgICBmb28ueVswXSA9IDI7CisgICAgICAgICAgICBmb28u
eVsxXSA9IDM7CisgICAgICAgICAgICBmb28ueVsyXSA9IDQ7CisgICAgICAgICAgICByZXR1cm4g
Zm9vLnouc3VtOworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0TFZhbHVlRW11bGF0aW9uKCkK
KyAgICAgICAgeworICAgICAgICAgICAgRm9vPGludD4gZm9vOworICAgICAgICAgICAgc2V0dXAo
JmZvbyk7CisgICAgICAgICAgICBmb28uei55ICo9IDU7CisgICAgICAgICAgICByZXR1cm4gZm9v
LnN1bTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAidGVzdFN1cGVyQmFzaWMiLCBbXSwgW10pLCAxICsgMiArIDMgKyA0KTsK
KyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RaU2V0dGVy
RGlkU2V0WSIsIFtdLCBbXSksIDkzMik7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJ0ZXN0WlNldHRlciIsIFtdLCBbXSksIDUzICsgOTMyKTsKKyAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RaR2V0dGVyIiwgW10sIFtd
KSwgMSArIDMpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
dGVzdExWYWx1ZUVtdWxhdGlvbiIsIFtdLCBbXSksIDEgKyAyICsgMyAqIDUgKyA0KTsKK30KKwor
ZnVuY3Rpb24gVEVTVF9iaXRTdWJzY3JpcHRBY2Nlc3NvcigpCit7CisgICAgbGV0IHByb2dyYW0g
PSBkb1ByZXAoYAorICAgICAgICBwcm90b2NvbCBNeUJpdG1hc2thYmxlIDogRXF1YXRhYmxlIHsK
KyAgICAgICAgICAgIE15Qml0bWFza2FibGUgb3BlcmF0b3ImKE15Qml0bWFza2FibGUsIE15Qml0
bWFza2FibGUpOworICAgICAgICAgICAgTXlCaXRtYXNrYWJsZSBvcGVyYXRvcnwoTXlCaXRtYXNr
YWJsZSwgTXlCaXRtYXNrYWJsZSk7CisgICAgICAgICAgICBNeUJpdG1hc2thYmxlIG9wZXJhdG9y
fihNeUJpdG1hc2thYmxlKTsKKyAgICAgICAgICAgIE15Qml0bWFza2FibGUgb3BlcmF0b3I8PChN
eUJpdG1hc2thYmxlLCB1aW50KTsKKyAgICAgICAgICAgIE15Qml0bWFza2FibGUgb3BlcmF0b3I+
PihNeUJpdG1hc2thYmxlLCB1aW50KTsKKyAgICAgICAgICAgIG9wZXJhdG9yIE15Qml0bWFza2Fi
bGUoaW50KTsKKyAgICAgICAgfQorICAgICAgICBUIG1hc2tGb3JCaXRJbmRleDxUOk15Qml0bWFz
a2FibGU+KHVpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBUKDEpIDw8
IGluZGV4OworICAgICAgICB9CisgICAgICAgIGJvb2wgb3BlcmF0b3JbXTxUOk15Qml0bWFza2Fi
bGU+KFQgdmFsdWUsIHVpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBi
b29sKHZhbHVlICYgbWFza0ZvckJpdEluZGV4PFQ+KGluZGV4KSk7CisgICAgICAgIH0KKyAgICAg
ICAgVCBvcGVyYXRvcltdPTxUOk15Qml0bWFza2FibGU+KFQgdmFsdWUsIHVpbnQgaW5kZXgsIGJv
b2wgYml0KQorICAgICAgICB7CisgICAgICAgICAgICBUIG1hc2sgPSBtYXNrRm9yQml0SW5kZXg8
VD4oaW5kZXgpOworICAgICAgICAgICAgaWYgKGJpdCkKKyAgICAgICAgICAgICAgICB2YWx1ZSB8
PSBtYXNrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlICY9IH5tYXNr
OworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisgICAgICAgIHVpbnQgb3Bl
cmF0b3IubGVuZ3RoKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDMyOworICAg
ICAgICB9CisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoKHVpbnQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAzMjsKKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdEludFNldEJp
dDMoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZm9vOworICAgICAgICAgICAgZm9vWzNd
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAgICAgICAgYm9v
bCB0ZXN0SW50U2V0R2V0Qml0NSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBmb287Cisg
ICAgICAgICAgICBmb29bNV0gPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZvb1s1XTsKKyAg
ICAgICAgfQorICAgICAgICBib29sIHRlc3RJbnRHZXRCaXQxKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaW50IGZvbzsKKyAgICAgICAgICAgIHJldHVybiBmb29bMV07CisgICAgICAgIH0KKyAg
ICAgICAgaW50IHRlc3RVaW50U3VtQml0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBm
b28gPSA0MjsKKyAgICAgICAgICAgIGludCByZXN1bHQ7CisgICAgICAgICAgICBmb3IgKHVpbnQg
aSA9IDA7IGkgPCBmb28ubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoZm9vW2ld
KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RVaW50U3dhcEJp
dHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZm9vID0gNDI7CisgICAgICAgICAgICBm
b3IgKHVpbnQgaSA9IDA7IGkgPCBmb28ubGVuZ3RoIC8gMjsgKytpKSB7CisgICAgICAgICAgICAg
ICAgYm9vbCB0bXAgPSBmb29baV07CisgICAgICAgICAgICAgICAgZm9vW2ldID0gZm9vW2Zvby5s
ZW5ndGggLSBpIC0gMV07CisgICAgICAgICAgICAgICAgZm9vW2Zvby5sZW5ndGggLSBpIC0gMV0g
PSB0bXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9
CisgICAgICAgIHN0cnVjdCBGb28geworICAgICAgICAgICAgdWludCBmOworICAgICAgICAgICAg
dWludCBnOworICAgICAgICB9CisgICAgICAgIG9wZXJhdG9yIEZvbyh1aW50IGYsIHVpbnQgZykK
KyAgICAgICAgeworICAgICAgICAgICAgRm9vIHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC5m
ID0gZjsKKyAgICAgICAgICAgIHJlc3VsdC5nID0gZzsKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9yLmgoRm9vIGZvbykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGludCgoZm9vLmYgJiAweGZmZmYpIHwgKChmb28uZyAmIDB4
ZmZmZikgPDwgMTYpKTsKKyAgICAgICAgfQorICAgICAgICBGb28gb3BlcmF0b3IuaD0oRm9vIGZv
bywgaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBmb28uZiAmPSB+MHhmZmZmdTsK
KyAgICAgICAgICAgIGZvby5mIHw9IHVpbnQodmFsdWUpICYgMHhmZmZmOworICAgICAgICAgICAg
Zm9vLmcgJj0gfjB4ZmZmZnU7CisgICAgICAgICAgICBmb28uZyB8PSAodWludCh2YWx1ZSkgPj4g
MTYpICYgMHhmZmZmOworICAgICAgICAgICAgcmV0dXJuIGZvbzsKKyAgICAgICAgfQorICAgICAg
ICBpbnQgdGVzdExWYWx1ZUVtdWxhdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbyBm
b287CisgICAgICAgICAgICBmb28uZiA9IDQyOworICAgICAgICAgICAgZm9vLmcgPSAzNzsKKyAg
ICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IGZvby5oLmxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgICAgIGZvby5oW2ldIF49IHRydWU7CisgICAgICAgICAgICByZXR1cm4gaW50KGZvby5m
ICsgZm9vLmcpOworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBCYXIgeworICAgICAgICAgICAg
Rm9vIGE7CisgICAgICAgICAgICBGb28gYjsKKyAgICAgICAgfQorICAgICAgICBGb28gb3BlcmF0
b3IuYyhCYXIgYmFyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vKHVpbnQoYmFy
LmEuaCksIHVpbnQoYmFyLmIuaCkpOworICAgICAgICB9CisgICAgICAgIEJhciBvcGVyYXRvci5j
PShCYXIgYmFyLCBGb28gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICBiYXIuYS5oID0gaW50
KGZvby5mKTsKKyAgICAgICAgICAgIGJhci5iLmggPSBpbnQoZm9vLmcpOworICAgICAgICAgICAg
cmV0dXJuIGJhcjsKKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdENyYXp5TFZhbHVlRW11bGF0
aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgQmFyIGJhcjsKKyAgICAgICAgICAgIGJhci5h
LmYgPSAxOworICAgICAgICAgICAgYmFyLmEuZyA9IDI7CisgICAgICAgICAgICBiYXIuYi5mID0g
MzsKKyAgICAgICAgICAgIGJhci5iLmcgPSA0OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSAw
OyBpIDwgYmFyLmMuaC5sZW5ndGg7IGkgKz0gMikKKyAgICAgICAgICAgICAgICBiYXIuYy5oW2ld
IF49IHRydWU7CisgICAgICAgICAgICByZXR1cm4gaW50KGJhci5hLmYgKyBiYXIuYS5nICsgYmFy
LmIuZiArIGJhci5iLmcpOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0SW50U2V0Qml0MyIsIFtdLCBbXSksIDgpOwor
ICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RJbnRTZXRH
ZXRCaXQ1IiwgW10sIFtdKSwgdHJ1ZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAidGVzdEludEdldEJpdDEiLCBbXSwgW10pLCBmYWxzZSk7CisgICAgY2hl
Y2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0VWludFN1bUJpdHMiLCBb
XSwgW10pLCAzKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
InRlc3RVaW50U3dhcEJpdHMiLCBbXSwgW10pLCAxNDA5Mjg2MTQ0KTsKKyAgICBjaGVja0ludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RMVmFsdWVFbXVsYXRpb24iLCBbXSwg
W10pLCAxMzA5OTEpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAidGVzdENyYXp5TFZhbHVlRW11bGF0aW9uIiwgW10sIFtdKSwgNDM2OTYpOworfQorCitmdW5j
dGlvbiBURVNUX25lc3RlZFN1YnNjcmlwdExWYWx1ZUVtdWxhdGlvblNpbXBsZSgpCit7CisgICAg
bGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAg
IGludFs3XSBhcnJheTsKKyAgICAgICAgfQorICAgICAgICBpbnQgb3BlcmF0b3JbXShGb28gZm9v
LCB1aW50IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vLmFycmF5W2lu
ZGV4XTsKKyAgICAgICAgfQorICAgICAgICBGb28gb3BlcmF0b3JbXT0oRm9vIGZvbywgdWludCBp
bmRleCwgaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBmb28uYXJyYXlbaW5kZXhd
ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgICAgIHVp
bnQgb3BlcmF0b3IubGVuZ3RoKEZvbyBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmb28uYXJyYXkubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGludCBzdW0oRm9vIGZvbykK
KyAgICAgICAgeworICAgICAgICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgICAgICAgICBmb3Ig
KHVpbnQgaSA9IGZvby5sZW5ndGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZv
b1tpXTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgc3Ry
dWN0IEJhciB7CisgICAgICAgICAgICBGb29bNl0gYXJyYXk7CisgICAgICAgIH0KKyAgICAgICAg
dWludCBvcGVyYXRvci5sZW5ndGgoQmFyIGJhcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGJhci5hcnJheS5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgRm9vIG9wZXJhdG9yW10o
QmFyIGJhciwgdWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhci5h
cnJheVtpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgQmFyIG9wZXJhdG9yW109KEJhciBiYXIs
IHVpbnQgaW5kZXgsIEZvbyB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYmFyLmFycmF5
W2luZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIGJhcjsKKyAgICAgICAgfQorICAg
ICAgICBpbnQgc3VtKEJhciBiYXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCByZXN1bHQg
PSAwOworICAgICAgICAgICAgZm9yICh1aW50IGkgPSBiYXIubGVuZ3RoOyBpLS07KQorICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSBzdW0oYmFyW2ldKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJheiB7CisgICAgICAgICAgICBCYXJbNV0g
YXJyYXk7CisgICAgICAgIH0KKyAgICAgICAgQmFyIG9wZXJhdG9yW10oQmF6IGJheiwgdWludCBp
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhei5hcnJheVtpbmRleF07Cisg
ICAgICAgIH0KKyAgICAgICAgQmF6IG9wZXJhdG9yW109KEJheiBiYXosIHVpbnQgaW5kZXgsIEJh
ciB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYmF6LmFycmF5W2luZGV4XSA9IHZhbHVl
OworICAgICAgICAgICAgcmV0dXJuIGJhejsKKyAgICAgICAgfQorICAgICAgICB1aW50IG9wZXJh
dG9yLmxlbmd0aChCYXogYmF6KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmF6LmFy
cmF5Lmxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3VtKEJheiBiYXopCisgICAgICAg
IHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgICAgICAgZm9yICh1aW50IGkg
PSBiYXoubGVuZ3RoOyBpLS07KQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdW0oYmF6W2ld
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBz
ZXRWYWx1ZXModGhyZWFkIEJhel4gYmF6KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVp
bnQgaSA9IGJhei0+bGVuZ3RoOyBpLS07KSB7CisgICAgICAgICAgICAgICAgZm9yICh1aW50IGog
PSAoXmJheilbaV0ubGVuZ3RoOyBqLS07KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodWlu
dCBrID0gKF5iYXopW2ldW2pdLmxlbmd0aDsgay0tOykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICheYmF6KVtpXVtqXVtrXSA9IGludChpICsgaiArIGspOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdFNldFZhbHVlc0FuZFN1bSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEJheiBiYXo7CisgICAgICAgICAgICBzZXRWYWx1ZXMo
JmJheik7CisgICAgICAgICAgICByZXR1cm4gc3VtKGJheik7CisgICAgICAgIH0KKyAgICAgICAg
aW50IHRlc3RTZXRWYWx1ZXNNdXRhdGVWYWx1ZXNBbmRTdW0oKQorICAgICAgICB7CisgICAgICAg
ICAgICBCYXogYmF6OworICAgICAgICAgICAgc2V0VmFsdWVzKCZiYXopOworICAgICAgICAgICAg
Zm9yICh1aW50IGkgPSBiYXoubGVuZ3RoOyBpLS07KSB7CisgICAgICAgICAgICAgICAgZm9yICh1
aW50IGogPSBiYXpbaV0ubGVuZ3RoOyBqLS07KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dWludCBrID0gYmF6W2ldW2pdLmxlbmd0aDsgay0tOykKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJheltpXVtqXVtrXSAqPSBpbnQoayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHN1bShiYXopOworICAgICAgICB9CisgICAgYCk7CisgICAg
Y2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0U2V0VmFsdWVzQW5k
U3VtIiwgW10sIFtdKSwgMTU3NSk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJ0ZXN0U2V0VmFsdWVzTXV0YXRlVmFsdWVzQW5kU3VtIiwgW10sIFtdKSwgNTU2
NSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfbmVzdGVkU3Vic2NyaXB0TFZhbHVlRW11bGF0aW9uR2Vu
ZXJpYygpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBzdHJ1Y3QgRm9v
PFQ+IHsKKyAgICAgICAgICAgIFRbN10gYXJyYXk7CisgICAgICAgIH0KKyAgICAgICAgVCBvcGVy
YXRvcltdPFQ+KEZvbzxUPiBmb28sIHVpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmb28uYXJyYXlbaW5kZXhdOworICAgICAgICB9CisgICAgICAgIEZvbzxUPiBvcGVy
YXRvcltdPTxUPihGb288VD4gZm9vLCB1aW50IGluZGV4LCBUIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBmb28uYXJyYXlbaW5kZXhdID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4g
Zm9vOworICAgICAgICB9CisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ+KEZvbzxUPiBm
b28pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb28uYXJyYXkubGVuZ3RoOworICAg
ICAgICB9CisgICAgICAgIHByb3RvY29sIE15QWRkYWJsZSB7CisgICAgICAgICAgICBNeUFkZGFi
bGUgb3BlcmF0b3IrKE15QWRkYWJsZSwgTXlBZGRhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBU
IHN1bTxUOk15QWRkYWJsZT4oRm9vPFQ+IGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgVCBy
ZXN1bHQ7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IGZvby5sZW5ndGg7IGktLTspCisgICAg
ICAgICAgICAgICAgcmVzdWx0ICs9IGZvb1tpXTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJhcjxUPiB7CisgICAgICAgICAgICBGb288VD5b
Nl0gYXJyYXk7CisgICAgICAgIH0KKyAgICAgICAgdWludCBvcGVyYXRvci5sZW5ndGg8VD4oQmFy
PFQ+IGJhcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhci5hcnJheS5sZW5ndGg7
CisgICAgICAgIH0KKyAgICAgICAgRm9vPFQ+IG9wZXJhdG9yW108VD4oQmFyPFQ+IGJhciwgdWlu
dCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhci5hcnJheVtpbmRleF07
CisgICAgICAgIH0KKyAgICAgICAgQmFyPFQ+IG9wZXJhdG9yW109PFQ+KEJhcjxUPiBiYXIsIHVp
bnQgaW5kZXgsIEZvbzxUPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYmFyLmFycmF5
W2luZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIGJhcjsKKyAgICAgICAgfQorICAg
ICAgICBUIHN1bTxUOk15QWRkYWJsZT4oQmFyPFQ+IGJhcikKKyAgICAgICAgeworICAgICAgICAg
ICAgVCByZXN1bHQ7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IGJhci5sZW5ndGg7IGktLTsp
CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN1bShiYXJbaV0pOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBzdHJ1Y3QgQmF6PFQ+IHsKKyAgICAgICAg
ICAgIEJhcjxUPls1XSBhcnJheTsKKyAgICAgICAgfQorICAgICAgICBCYXI8VD4gb3BlcmF0b3Jb
XTxUPihCYXo8VD4gYmF6LCB1aW50IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gYmF6LmFycmF5W2luZGV4XTsKKyAgICAgICAgfQorICAgICAgICBCYXo8VD4gb3BlcmF0b3Jb
XT08VD4oQmF6PFQ+IGJheiwgdWludCBpbmRleCwgQmFyPFQ+IHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBiYXouYXJyYXlbaW5kZXhdID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4g
YmF6OworICAgICAgICB9CisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ+KEJhejxUPiBi
YXopCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXouYXJyYXkubGVuZ3RoOworICAg
ICAgICB9CisgICAgICAgIFQgc3VtPFQ6TXlBZGRhYmxlPihCYXo8VD4gYmF6KQorICAgICAgICB7
CisgICAgICAgICAgICBUIHJlc3VsdDsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gYmF6Lmxl
bmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3VtKGJheltpXSk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHByb3RvY29sIE15Q29u
dmVydGlibGVGcm9tVWludCB7CisgICAgICAgICAgICBvcGVyYXRvciBNeUNvbnZlcnRpYmxlRnJv
bVVpbnQodWludCk7CisgICAgICAgIH0KKyAgICAgICAgcHJvdG9jb2wgU2V0VmFsdWFibGUgOiBN
eUFkZGFibGUsIE15Q29udmVydGlibGVGcm9tVWludCB7IH0KKyAgICAgICAgdm9pZCBzZXRWYWx1
ZXM8VDpTZXRWYWx1YWJsZT4odGhyZWFkIEJhejxUPl4gYmF6KQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKHVpbnQgaSA9IGJhei0+bGVuZ3RoOyBpLS07KSB7CisgICAgICAgICAgICAgICAg
Zm9yICh1aW50IGogPSAoXmJheilbaV0ubGVuZ3RoOyBqLS07KSB7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAodWludCBrID0gKF5iYXopW2ldW2pdLmxlbmd0aDsgay0tOykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICheYmF6KVtpXVtqXVtrXSA9IFQoaSArIGogKyBrKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RTZXRWYWx1
ZXNBbmRTdW0oKQorICAgICAgICB7CisgICAgICAgICAgICBCYXo8aW50PiBiYXo7CisgICAgICAg
ICAgICBzZXRWYWx1ZXMoJmJheik7CisgICAgICAgICAgICByZXR1cm4gc3VtKGJheik7CisgICAg
ICAgIH0KKyAgICAgICAgaW50IHRlc3RTZXRWYWx1ZXNNdXRhdGVWYWx1ZXNBbmRTdW0oKQorICAg
ICAgICB7CisgICAgICAgICAgICBCYXo8aW50PiBiYXo7CisgICAgICAgICAgICBzZXRWYWx1ZXMo
JmJheik7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IGJhei5sZW5ndGg7IGktLTspIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVpbnQgaiA9IGJheltpXS5sZW5ndGg7IGotLTspIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICh1aW50IGsgPSBiYXpbaV1bal0ubGVuZ3RoOyBrLS07KQorICAg
ICAgICAgICAgICAgICAgICAgICAgYmF6W2ldW2pdW2tdICo9IGludChrKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3VtKGJheik7CisgICAg
ICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgInRlc3RTZXRWYWx1ZXNBbmRTdW0iLCBbXSwgW10pLCAxNTc1KTsKKyAgICBjaGVja0ludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RTZXRWYWx1ZXNNdXRhdGVWYWx1ZXNB
bmRTdW0iLCBbXSwgW10pLCA1NTY1KTsKK30KKworZnVuY3Rpb24gVEVTVF9ib29sQml0QW5kKCkK
K3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGJvb2wgZm9vKGJvb2wgYSwg
Ym9vbCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAmIGI7CisgICAgICAgIH0K
KyAgICBgKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIGZhbHNlKSwgbWFrZUJvb2wocHJvZ3JhbSwgZmFs
c2UpXSksIGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIHRydWUpLCBtYWtlQm9vbChwcm9ncmFt
LCBmYWxzZSldKSwgZmFsc2UpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpLCBtYWtlQm9vbChw
cm9ncmFtLCB0cnVlKV0pLCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCB0cnVlKSwgbWFrZUJv
b2wocHJvZ3JhbSwgdHJ1ZSldKSwgdHJ1ZSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfYm9vbEJpdE9y
KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGJvb2wgZm9vKGJvb2wg
YSwgYm9vbCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSB8IGI7CisgICAgICAg
IH0KKyAgICBgKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIGZhbHNlKSwgbWFrZUJvb2wocHJvZ3JhbSwg
ZmFsc2UpXSksIGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIHRydWUpLCBtYWtlQm9vbChwcm9n
cmFtLCBmYWxzZSldKSwgdHJ1ZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSksIG1ha2VCb29s
KHByb2dyYW0sIHRydWUpXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSksIG1ha2VC
b29sKHByb2dyYW0sIHRydWUpXSksIHRydWUpOworfQorCitmdW5jdGlvbiBURVNUX2Jvb2xCaXRY
b3IoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgYm9vbCBmb28oYm9v
bCBhLCBib29sIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhIF4gYjsKKyAgICAg
ICAgfQorICAgIGApOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpLCBtYWtlQm9vbChwcm9ncmFt
LCBmYWxzZSldKSwgZmFsc2UpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSksIG1ha2VCb29sKHBy
b2dyYW0sIGZhbHNlKV0pLCB0cnVlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIGZhbHNlKSwgbWFrZUJv
b2wocHJvZ3JhbSwgdHJ1ZSldKSwgdHJ1ZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCB0cnVlKSwgbWFr
ZUJvb2wocHJvZ3JhbSwgdHJ1ZSldKSwgZmFsc2UpOworfQorCitmdW5jdGlvbiBURVNUX2Jvb2xC
aXROb3QoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgYm9vbCBmb28o
Ym9vbCBhKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gfmE7CisgICAgICAgIH0KKyAg
ICBgKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSwgW21ha2VCb29sKHByb2dyYW0sIGZhbHNlKV0pLCB0cnVlKTsKKyAgICBjaGVja0Jvb2wo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dy
YW0sIHRydWUpXSksIGZhbHNlKTsKK30KKworZnVuY3Rpb24gVEVTVF9pbnRCaXRBbmQoKQorewor
ICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyhpbnQgYSwgaW50IGIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhICYgYjsKKyAgICAgICAgfQorICAgIGAp
OworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlSW50KHByb2dyYW0sIDEpLCBtYWtlSW50KHByb2dyYW0sIDcpXSksIDEpOworICAgIGNo
ZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50
KHByb2dyYW0sIDY1NTM1KSwgbWFrZUludChwcm9ncmFtLCA0MildKSwgNDIpOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHBy
b2dyYW0sIC0xKSwgbWFrZUludChwcm9ncmFtLCAtNyldKSwgLTcpOworICAgIGNoZWNrSW50KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0s
IDApLCBtYWtlSW50KHByb2dyYW0sIDg1NzMyKV0pLCAwKTsKK30KKworZnVuY3Rpb24gVEVTVF9p
bnRCaXRPcigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9v
KGludCBhLCBpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgfCBiOworICAg
ICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgMSksIG1ha2VJbnQocHJvZ3JhbSwgNyld
KSwgNyk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgNjU1MzUpLCBtYWtlSW50KHByb2dyYW0sIDQyKV0pLCA2
NTUzNSk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgLTEpLCBtYWtlSW50KHByb2dyYW0sIC03KV0pLCAtMSk7
CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwg
W21ha2VJbnQocHJvZ3JhbSwgMCksIG1ha2VJbnQocHJvZ3JhbSwgODU3MzIpXSksIDg1NzMyKTsK
K30KKworZnVuY3Rpb24gVEVTVF9pbnRCaXRYb3IoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9Q
cmVwKGAKKyAgICAgICAgaW50IGZvbyhpbnQgYSwgaW50IGIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBhIF4gYjsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDEp
LCBtYWtlSW50KHByb2dyYW0sIDcpXSksIDYpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDY1NTM1KSwgbWFr
ZUludChwcm9ncmFtLCA0MildKSwgNjU0OTMpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIC0xKSwgbWFrZUlu
dChwcm9ncmFtLCAtNyldKSwgNik7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgMCksIG1ha2VJbnQocHJvZ3Jh
bSwgODU3MzIpXSksIDg1NzMyKTsKK30KKworZnVuY3Rpb24gVEVTVF9pbnRCaXROb3QoKQorewor
ICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyhpbnQgYSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIH5hOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hl
Y2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQo
cHJvZ3JhbSwgMSldKSwgLTIpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDY1NTM1KV0pLCAtNjU1MzYpOwor
ICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtt
YWtlSW50KHByb2dyYW0sIC0xKV0pLCAwKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAwKV0pLCAtMSk7Cit9
CisKK2Z1bmN0aW9uIFRFU1RfaW50TFNoaWZ0KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJl
cChgCisgICAgICAgIGludCBmb28oaW50IGEsIHVpbnQgYikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGEgPDwgYjsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDEp
LCBtYWtlVWludChwcm9ncmFtLCA3KV0pLCAxMjgpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDY1NTM1KSwg
bWFrZVVpbnQocHJvZ3JhbSwgMildKSwgMjYyMTQwKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAtMSksIG1h
a2VVaW50KHByb2dyYW0sIDUpXSksIC0zMik7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgMCksIG1ha2VVaW50
KHByb2dyYW0sIDMpXSksIDApOworfQorCitmdW5jdGlvbiBURVNUX2ludFJTaGlmdCgpCit7Cisg
ICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9vKGludCBhLCB1aW50IGIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhID4+IGI7CisgICAgICAgIH0KKyAgICBg
KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtd
LCBbbWFrZUludChwcm9ncmFtLCAxKSwgbWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgMCk7CisgICAg
Y2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJ
bnQocHJvZ3JhbSwgNjU1MzUpLCBtYWtlVWludChwcm9ncmFtLCAyKV0pLCAxNjM4Myk7CisgICAg
Y2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJ
bnQocHJvZ3JhbSwgLTEpLCBtYWtlVWludChwcm9ncmFtLCA1KV0pLCAtMSk7CisgICAgY2hlY2tJ
bnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJv
Z3JhbSwgMCksIG1ha2VVaW50KHByb2dyYW0sIDMpXSksIDApOworfQorCitmdW5jdGlvbiBURVNU
X3VpbnRCaXRBbmQoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdWlu
dCBmb28odWludCBhLCB1aW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhICYg
YjsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHBy
b2dyYW0sIDcpXSksIDEpOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgNjU1MzUpLCBtYWtlVWludChwcm9n
cmFtLCA0MildKSwgNDIpOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgLTEpLCBtYWtlVWludChwcm9ncmFt
LCAtNyldKSwgNDI5NDk2NzI4OSk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAwKSwgbWFrZVVpbnQocHJv
Z3JhbSwgODU3MzIpXSksIDApOworfQorCitmdW5jdGlvbiBURVNUX3VpbnRCaXRPcigpCit7Cisg
ICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1aW50IGZvbyh1aW50IGEsIHVpbnQg
YikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgfCBiOworICAgICAgICB9CisgICAg
YCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10sIFttYWtlVWludChwcm9ncmFtLCAxKSwgbWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgNyk7Cisg
ICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtt
YWtlVWludChwcm9ncmFtLCA2NTUzNSksIG1ha2VVaW50KHByb2dyYW0sIDQyKV0pLCA2NTUzNSk7
CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlVWludChwcm9ncmFtLCAtMSksIG1ha2VVaW50KHByb2dyYW0sIC03KV0pLCA0Mjk0OTY3
Mjk1KTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDApLCBtYWtlVWludChwcm9ncmFtLCA4NTczMildKSwg
ODU3MzIpOworfQorCitmdW5jdGlvbiBURVNUX3VpbnRCaXRYb3IoKQoreworICAgIGxldCBwcm9n
cmFtID0gZG9QcmVwKGAKKyAgICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhIF4gYjsKKyAgICAgICAgfQorICAgIGApOworICAgIGNo
ZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVp
bnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHByb2dyYW0sIDcpXSksIDYpOworICAgIGNoZWNrVWlu
dChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJv
Z3JhbSwgNjU1MzUpLCBtYWtlVWludChwcm9ncmFtLCA0MildKSwgNjU0OTMpOworICAgIGNoZWNr
VWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQo
cHJvZ3JhbSwgLTEpLCBtYWtlVWludChwcm9ncmFtLCAtNyldKSwgNik7CisgICAgY2hlY2tVaW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9n
cmFtLCAwKSwgbWFrZVVpbnQocHJvZ3JhbSwgODU3MzIpXSksIDg1NzMyKTsKK30KKworZnVuY3Rp
b24gVEVTVF91aW50Qml0Tm90KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAg
ICAgIHVpbnQgZm9vKHVpbnQgYSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIH5hOwor
ICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAxKV0pLCA0Mjk0OTY3Mjk0KTsK
KyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwg
W21ha2VVaW50KHByb2dyYW0sIDY1NTM1KV0pLCA0Mjk0OTAxNzYwKTsKKyAgICBjaGVja1VpbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dy
YW0sIC0xKV0pLCAwKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDApXSksIDQyOTQ5NjcyOTUpOworfQor
CitmdW5jdGlvbiBURVNUX3VpbnRMU2hpZnQoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVw
KGAKKyAgICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBhIDw8IGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja1VpbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0s
IDEpLCBtYWtlVWludChwcm9ncmFtLCA3KV0pLCAxMjgpOworICAgIGNoZWNrVWludChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgNjU1
MzUpLCBtYWtlVWludChwcm9ncmFtLCAyKV0pLCAyNjIxNDApOworICAgIGNoZWNrVWludChwcm9n
cmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwg
LTEpLCBtYWtlVWludChwcm9ncmFtLCA1KV0pLCA0Mjk0OTY3MjY0KTsKKyAgICBjaGVja1VpbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dy
YW0sIDApLCBtYWtlVWludChwcm9ncmFtLCAzKV0pLCAwKTsKK30KKworZnVuY3Rpb24gVEVTVF91
aW50UlNoaWZ0KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHVpbnQg
Zm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSA+PiBi
OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAxKSwgbWFrZVVpbnQocHJv
Z3JhbSwgNyldKSwgMCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCA2NTUzNSksIG1ha2VVaW50KHByb2dy
YW0sIDIpXSksIDE2MzgzKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIC0xKSwgbWFrZVVpbnQocHJvZ3Jh
bSwgNSldKSwgMTM0MjE3NzI3KTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDApLCBtYWtlVWludChwcm9n
cmFtLCAzKV0pLCAwKTsKK30KKwogZnVuY3Rpb24gVEVTVF9mbG9hdE1hdGgoKQogewogICAgIGxl
dCBwcm9ncmFtID0gZG9QcmVwKGAKQEAgLTI4MDMsNyArMzU3Nyw3IEBAIGlmICh0aGlzWyJhcmd1
bWVudHMiXSkgewogICAgIH0KIH0KIAotZnVuY3Rpb24gZG9UZXN0KG9iamVjdCkKK2Z1bmN0aW9u
KiBkb1Rlc3Qob2JqZWN0KQogewogICAgIGxldCBiZWZvcmUgPSBwcmVjaXNlVGltZSgpOwogCkBA
IC0yODEyLDEzICszNTg2LDE3IEBAIGZ1bmN0aW9uIGRvVGVzdChvYmplY3QpCiAgICAgICAgICAg
ICBwcmludChzICsgIi4uLiIpOwogICAgICAgICAgICAgb2JqZWN0W3NdKCk7CiAgICAgICAgICAg
ICBwcmludCgiICAgIE9LISIpOworICAgICAgICAgICAgeWllbGQ7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBsZXQgYWZ0ZXIgPSBwcmVjaXNlVGltZSgpOwogICAgIAorICAgIHByaW50KCJTdWNj
ZXNzISIpOwogICAgIHByaW50KCJUaGF0IHRvb2sgIiArIChhZnRlciAtIGJlZm9yZSkgKiAxMDAw
ICsgIiBtcy4iKTsKIH0KIAogaWYgKCF0aGlzLndpbmRvdykKLSAgICBkb1Rlc3QodGhpcyk7Cisg
ICAgZm9yIChsZXQgXyBvZiBkb1Rlc3QodGhpcykpIHsgfQorCisKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QCBjbGFzcyBUeXBlIGV4dGVuZHMgTm9kZSB7CiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBUeXBl
OyB9CiAgICAgZ2V0IGlzUHRyKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNBcnJheVJl
ZigpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgZ2V0IGlzUmVmKCkgeyByZXR1cm4gdGhpcy5pc1B0
ciB8fCB0aGlzLmlzQXJyYXlSZWY7IH0KICAgICBnZXQgaXNOdW1iZXIoKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgIGdldCBpc0ludCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzRmxvYXRp
bmcoKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtNDEsNSArNDIsMTkgQEAgY2xhc3MgVHlwZSBleHRl
bmRzIE5vZGUgewogICAgIH0KICAgICAKICAgICBnZXQgaW5zdGFudGlhdGVkVHlwZSgpIHsgcmV0
dXJuIHRoaXMudmlzaXQobmV3IEluc3RhbnRpYXRlSW1tZWRpYXRlcygpKTsgfQorICAgIAorICAg
IC8vIEhhdmUgdG8gY2FsbCB0aGVzZSBvbiB0aGUgdW5pZnlOb2RlLgorICAgIGFyZ3VtZW50Rm9y
QW5kT3ZlcmxvYWQob3JpZ2luLCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgTWFr
ZVB0ckV4cHJlc3Npb24ob3JpZ2luLCB2YWx1ZSk7CisgICAgfQorICAgIGFyZ3VtZW50VHlwZUZv
ckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUHRyVHlwZShv
cmlnaW4sICJ0aHJlYWQiLCB0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuVHlwZUZyb21BbmRPdmVy
bG9hZChvcmlnaW4pCisgICAgeworICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4u
b3JpZ2luU3RyaW5nLCAiQnktcG9pbnRlciBvdmVybG9hZCByZXR1cm5lZCBub24tcG9pbnRlciB0
eXBlOiAiICsgdGhpcyk7CisgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UeXBlUGFyYW1ldGVyUmV3cml0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzCShub25leGlzdGVu
dCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJhbWV0ZXJSZXdyaXRl
ci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFR5cGVQYXJh
bWV0ZXJSZXdyaXRlciB7CisgICAgdmlzaXRDb25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUpCisg
ICAgeworICAgICAgICByZXR1cm4gbmV3IENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIobm9kZS5vcmln
aW4sIG5vZGUubmFtZSwgbm9kZS50eXBlLnZpc2l0KG5ldyBSZXdyaXRlcigpKSk7CisgICAgfQor
ICAgIAorICAgIHZpc2l0VHlwZVZhcmlhYmxlKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IFR5cGVWYXJpYWJsZShub2RlLm9yaWdpbiwgbm9kZS5uYW1lLCBub2RlLnByb3RvY29sKTsK
KyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVWYXJp
YWJsZVRyYWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVHlwZVZhcmlhYmxlVHJhY2tlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgVHlwZVZhcmlhYmxlVHJhY2tlciBleHRlbmRzIFZp
c2l0b3IgeworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAg
ICAgIHRoaXMuX3NldCA9IG5ldyBTZXQoKTsKKyAgICB9CisgICAgCisgICAgZ2V0IHNldCgpIHsg
cmV0dXJuIHRoaXMuX3NldDsgfQorICAgIAorICAgIF9jb25zaWRlcih0aGluZykKKyAgICB7Cisg
ICAgICAgIGlmICh0aGluZy5pc1VuaWZpYWJsZSkKKyAgICAgICAgICAgIHRoaXMuX3NldC5hZGQo
dGhpbmcpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFR5cGVSZWYobm9kZSkKKyAgICB7CisgICAg
ICAgIHRoaXMuX2NvbnNpZGVyKG5vZGUudHlwZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0VmFy
aWFibGVSZWYobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2NvbnNpZGVyKHRoaXMudmFyaWFi
bGUpOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFs
dWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUu
anMJKHJldmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zh
bHVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1ICsyOCwxNCBAQCBjbGFzcyBWYWx1ZSBleHRl
bmRzIE5vZGUgewogICAgIGdldCBraW5kKCkgeyByZXR1cm4gVmFsdWU7IH0KICAgICBnZXQgaXND
b25zdGV4cHIoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgCisgICAgYmVjb21lKG90aGVyVmFsdWUpCisgICAgeworICAgICAgICAv
LyBOT1RFOiBNYWtlIHN1cmUgdGhhdCBJZGVudGl0eUV4cHJlc3Npb24gaW1wbGVtZW50cyB1bmlm
eU5vZGUgYW5kIGFsbCB0aGF0CisgICAgICAgIGxldCBvcmlnaW4gPSB0aGlzLm9yaWdpbjsKKyAg
ICAgICAgdGhpcy5fX3Byb3RvX18gPSBJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlOworICAg
ICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CisgICAgICAgIHRoaXMuX3RhcmdldCA9IG90aGVy
VmFsdWU7CisgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9W
YXJpYWJsZVJlZi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9WYXJpYWJsZVJlZi5qcwkocmV2aXNpb24gMjIyMTM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVmFyaWFibGVSZWYuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSw5
IEBAIGNsYXNzIFZhcmlhYmxlUmVmIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgICAgCiAgICAgZ2V0
IG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9CiAgICAgZ2V0IGlzQ29uc3RleHByKCkgeyBy
ZXR1cm4gdGhpcy52YXJpYWJsZS5pc0NvbnN0ZXhwcjsgfQotICAgIGdldCB1bmlmeU5vZGUoKSB7
IHJldHVybiB0aGlzLnZhcmlhYmxlLnVuaWZ5Tm9kZTsgfQorICAgIGdldCB1bmlmeU5vZGUoKSB7
IHJldHVybiB0aGlzLnZhcmlhYmxlLnVuaWZ5Tm9kZTsgfSAvLyBUaGlzIG9ubHkgbWFrZXMgc2Vu
c2Ugd2hlbiB0aGlzIGlzIGEgY29uc3RleHByLgogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJu
IHRydWU7IH0KICAgICBnZXQgYWRkcmVzc1NwYWNlKCkgeyByZXR1cm4gInRocmVhZCI7IH0KLSAg
ICBnZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZTsgfQogICAgIAogICAgIHRv
U3RyaW5nKCkKICAgICB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNp
dG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0
b3IuanMJKHJldmlzaW9uIDIyMjEzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Zpc2l0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEyICsyNCw3IEBACiAgKi8KICJ1c2Ug
c3RyaWN0IjsKIAotY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKLSAgICBjb25z
dHJ1Y3RvcigpCi0gICAgewotICAgICAgICBzdXBlcigpOwotICAgIH0KLSAgICAKK2NsYXNzIFZp
c2l0b3IgewogICAgIHZpc2l0UHJvZ3JhbShub2RlKQogICAgIHsKICAgICAgICAgZm9yIChsZXQg
c3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKQpAQCAtNjgsOCArNjMsOCBAQCBj
bGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0TmF0aXZl
RnVuY0luc3RhbmNlKG5vZGUpCiAgICAgewotICAgICAgICBub2RlLmZ1bmMudmlzaXQodGhpcyk7
CiAgICAgICAgIHRoaXMudmlzaXRGdW5jKG5vZGUpOworICAgICAgICBub2RlLmZ1bmMudmlzaXRJ
bXBsZW1lbnRhdGlvbkRhdGEobm9kZS5pbXBsZW1lbnRhdGlvbkRhdGEsIHRoaXMpOwogICAgIH0K
ICAgICAKICAgICB2aXNpdEJsb2NrKG5vZGUpCkBAIC0xMDAsOCArOTUsNyBAQCBjbGFzcyBWaXNp
dG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHsKICAgICAgICAgZm9yIChsZXQgdHlwZUFy
Z3VtZW50IG9mIG5vZGUudHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgIHR5cGVBcmd1bWVudC52
aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUudHlw
ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAg
IH0KICAgICAKICAgICB2aXNpdE5hdGl2ZVR5cGUobm9kZSkKQEAgLTEzNCw4ICsxMjgsNyBAQCBj
bGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0VHlwZVZh
cmlhYmxlKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5wcm90b2NvbCkKLSAgICAgICAg
ICAgIG5vZGUucHJvdG9jb2wudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5w
cm90b2NvbCwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0Q29uc3RleHByVHlwZVBhcmFt
ZXRlcihub2RlKQpAQCAtMTc3LDE0ICsxNzAsMjMgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZp
c2l0b3JCYXNlIHsKICAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQogICAgIHsKICAgICAgICAg
bm9kZS50eXBlLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5pbml0aWFsaXplcikKLSAg
ICAgICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlz
aXQobm9kZS5pbml0aWFsaXplciwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0QXNzaWdu
bWVudChub2RlKQogICAgIHsKICAgICAgICAgbm9kZS5saHMudmlzaXQodGhpcyk7CiAgICAgICAg
IG5vZGUucmhzLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhp
cyk7CisgICAgfQorICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2Rl
KQorICAgIHsKKyAgICAgICAgbm9kZS5sVmFsdWUudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUu
b2xkVmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUubmV3VmFsdWVWYXIudmlzaXQo
dGhpcyk7CisgICAgICAgIG5vZGUubmV3VmFsdWVFeHAudmlzaXQodGhpcyk7CisgICAgICAgIG5v
ZGUucmVzdWx0RXhwLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdERlcmVmZXJl
bmNlRXhwcmVzc2lvbihub2RlKQpAQCAtMTkyLDExICsxOTQsMjcgQEAgY2xhc3MgVmlzaXRvciBl
eHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgbm9kZS5wdHIudmlzaXQodGhpcyk7CiAgICAg
fQogICAgIAorICAgIF9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSkKKyAgICB7
CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5iYXNlVHlwZSwgdGhpcyk7CisgICAgICAgIE5vZGUu
dmlzaXQobm9kZS5jYWxsRm9yR2V0LCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJl
c3VsdFR5cGVGb3JHZXQsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvckFu
ZCwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlRm9yQW5kLCB0aGlz
KTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmNhbGxGb3JTZXQsIHRoaXMpOworICAgIH0KKyAg
ICAKICAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIG5vZGUuc3Ry
dWN0LnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5zdHJ1Y3RUeXBlKQotICAgICAgICAg
ICAgbm9kZS5zdHJ1Y3RUeXBlLnZpc2l0KHRoaXMpOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhF
eHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLmFycmF5LnZpc2l0KHRoaXMpOwor
ICAgICAgICBub2RlLmluZGV4LnZpc2l0KHRoaXMpOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0TWFrZVB0
ckV4cHJlc3Npb24obm9kZSkKQEAgLTIwNyw4ICsyMjUsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVu
ZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQog
ICAgIHsKICAgICAgICAgbm9kZS5sVmFsdWUudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2Rl
Lm51bUVsZW1lbnRzKQotICAgICAgICAgICAgbm9kZS5udW1FbGVtZW50cy52aXNpdCh0aGlzKTsK
KyAgICAgICAgTm9kZS52aXNpdChub2RlLm51bUVsZW1lbnRzLCB0aGlzKTsKICAgICB9CiAgICAg
CiAgICAgdmlzaXRDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24obm9kZSkKQEAgLTIyNCw4
ICsyNDEsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHsKICAg
ICAgICAgbm9kZS5jb25kaXRpb25hbC52aXNpdCh0aGlzKTsKICAgICAgICAgbm9kZS5ib2R5LnZp
c2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5lbHNlQm9keSkKLSAgICAgICAgICAgIG5vZGUu
ZWxzZUJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5lbHNlQm9keSwg
dGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0V2hpbGVMb29wKG5vZGUpCkBAIC0yNDIsMTkg
KzI1OCwxNSBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAg
IHZpc2l0Rm9yTG9vcChub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6YXRp
b24pCi0gICAgICAgICAgICBub2RlLmluaXRpYWxpemF0aW9uLnZpc2l0KHRoaXMpOwotICAgICAg
ICBpZiAobm9kZS5jb25kaXRpb24pCi0gICAgICAgICAgICBub2RlLmNvbmRpdGlvbi52aXNpdCh0
aGlzKTsKLSAgICAgICAgaWYgKG5vZGUuaW5jcmVtZW50KQotICAgICAgICAgICAgbm9kZS5pbmNy
ZW1lbnQudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbml0aWFsaXphdGlv
biwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5jb25kaXRpb24sIHRoaXMpOworICAg
ICAgICBOb2RlLnZpc2l0KG5vZGUuaW5jcmVtZW50LCB0aGlzKTsKICAgICAgICAgbm9kZS5ib2R5
LnZpc2l0KHRoaXMpOwogICAgIH0KIAogICAgIHZpc2l0UmV0dXJuKG5vZGUpCiAgICAgewotICAg
ICAgICBpZiAobm9kZS52YWx1ZSkKLSAgICAgICAgICAgIG5vZGUudmFsdWUudmlzaXQodGhpcyk7
CisgICAgICAgIE5vZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcyk7CiAgICAgfQogCiAgICAgdmlz
aXRDb250aW51ZShub2RlKQpAQCAtMjcyLDggKzI4NCw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5k
cyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9kZSkK
ICAgICB7Ci0gICAgICAgIGlmIChub2RlLnR5cGUpCi0gICAgICAgICAgICBub2RlLnR5cGUudmlz
aXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAg
bm9kZS5wcmVmZXJyZWRUeXBlLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKQEAgLTI4OCw4ICsy
OTksNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZp
c2l0TnVsbFR5cGUobm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLnR5cGUpCi0gICAgICAg
ICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBl
LCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQpAQCAt
Mjk3LDE2ICszMDcsMTUgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAg
ICAgICAgZm9yIChsZXQgdHlwZUFyZ3VtZW50IG9mIG5vZGUudHlwZUFyZ3VtZW50cykKICAgICAg
ICAgICAgIHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgZm9yIChsZXQgYXJndW1l
bnQgb2Ygbm9kZS5hcmd1bWVudExpc3QpCi0gICAgICAgICAgICBhcmd1bWVudC52aXNpdCh0aGlz
KTsKKyAgICAgICAgICAgIE5vZGUudmlzaXQoYXJndW1lbnQsIHRoaXMpOwogICAgICAgICBsZXQg
YWN0dWFsVHlwZUFyZ3VtZW50cyA9IG5vZGUuYWN0dWFsVHlwZUFyZ3VtZW50czsKICAgICAgICAg
aWYgKGFjdHVhbFR5cGVBcmd1bWVudHMpIHsKICAgICAgICAgICAgIGZvciAobGV0IGFyZ3VtZW50
IG9mIGFjdHVhbFR5cGVBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgYXJndW1lbnQudmlzaXQo
dGhpcyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKLSAgICAgICAg
ICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUucmVzdWx0
VHlwZSkKLSAgICAgICAgICAgIG5vZGUucmVzdWx0VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAg
Tm9kZS52aXNpdChub2RlLm5hdGl2ZUZ1bmNJbnN0YW5jZSwgdGhpcyk7CisgICAgICAgIE5vZGUu
dmlzaXQobm9kZS5yZXR1cm5UeXBlLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJl
c3VsdFR5cGUsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdExvZ2ljYWxOb3Qobm9kZSkK
QEAgLTMxNiwyMSArMzI1LDIzIEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7
CiAgICAgCiAgICAgdmlzaXRGdW5jdGlvbkxpa2VCbG9jayhub2RlKQogICAgIHsKLSAgICAgICAg
aWYgKG5vZGUucmV0dXJuVHlwZSkKLSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0
aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJldHVyblR5cGUsIHRoaXMpOwogICAgICAg
ICBmb3IgKGxldCBhcmd1bWVudCBvZiBub2RlLmFyZ3VtZW50TGlzdCkKICAgICAgICAgICAgIGFy
Z3VtZW50LnZpc2l0KHRoaXMpOwogICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2Ygbm9kZS5w
YXJhbWV0ZXJzKQogICAgICAgICAgICAgcGFyYW1ldGVyLnZpc2l0KHRoaXMpOwogICAgICAgICBu
b2RlLmJvZHkudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLnJlc3VsdFR5cGUpCi0gICAg
ICAgICAgICBub2RlLnJlc3VsdFR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQo
bm9kZS5yZXN1bHRUeXBlLCB0aGlzKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXRMZXRFeHByZXNz
aW9uKG5vZGUpCisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShub2RlKQogICAgIHsKLSAgICAg
ICAgbm9kZS5hcmd1bWVudC52aXNpdCh0aGlzKTsKLSAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRo
aXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CisgICAgfQorICAgIAor
ICAgIHZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnRh
cmdldC52aXNpdCh0aGlzKTsKICAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzCShyZXZpc2lvbiAyMjIxMzgpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yQmFzZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0x
LDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgVmlzaXRvckJhc2UgewotICAgIGNvbnN0cnVjdG9yKCkK
LSAgICB7Ci0gICAgICAgIHRoaXMuX21lbW9UYWJsZSA9IG5ldyBNYXAoKTsKLSAgICB9Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321076</attachid>
            <date>2017-09-17 22:11:35 -0700</date>
            <delta_ts>2017-09-18 10:35:50 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>190642</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjE0MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5OCBAQAorMjAxNy0wOS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEZpZ3VyZSBvdXQgaG93IFdTTCB3aWxsIHN1cHBvcnQgZmllbGQgb3ZlcmxvYWRz
IGxpa2UgZmxvYXQ0Lnh6IGFuZCBmcmllbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdTTCBuZWVkcyB0byBzdXBwb3J0IGdldHRlcnMg
YW5kIHNldHRlcnMsIHNvIHRoYXQgd2UgY2FuIGRvIHRoaW5ncyBsaWtlOgorICAgICAgICAKKyAg
ICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAgICB2ZWMuenggPSBmbG9hdDIoMSwgMik7
CisgICAgICAgICAgICAvLyB6ID0gMSwgeCA9IDIKKyAgICAgICAgCisgICAgICAgIFRoZXJlJ3Mg
bm8gd2F5IHRvIGV4cHJlc3MgdGhpcyBmbG9hdDQuenggcmV0dXJuaW5nIGEgcG9pbnRlciB0byBz
b21ldGhpbmcsIHNpbmNlIGl0J3MgZG9pbmcgc3dpenpsaW5nLgorICAgICAgICBJdCBjb3VsZCBy
ZXR1cm4gYSBjcmF6eSBzbWFydCBwb2ludGVyLCBidXQgdGhhdCBzb3VuZHMgbGlrZSBhIGxvdCBv
ZiB3b3JrLiBTbywgSSBkZWNpZGVkIHRvIGdvIGZvcgorICAgICAgICBsdmFsdWUgZW11bGF0aW9u
IGluc3RlYWQuCisgICAgICAgIAorICAgICAgICBUaGUgaWRlYSBvZiBsdmFsdWUgZW11bGF0aW9u
IGlzIHRoYXQgd2hlbiB3ZSB0cnkgdG8gbWFrZSBhbiBsdmFsdWUgd29yayBmb3IgYW4gYXNzaWdu
bWVudCBvciBSTVcKKyAgICAgICAgb3BlcmF0aW9uIChsaWtlICs9IGFuZCBmcmllbmRzKSwgd2Ug
Y29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgd2UgaGF2ZSB0byBmaXJzdCBsb2FkIHRoZSB2
YWx1ZSB1c2luZworICAgICAgICBhIGdldHRlciBhbmQgdGhlbiBzdG9yZSBpdCB3aXRoIGEgc2V0
dGVyLiBUaGlzIHBhdGNoIG1ha2VzIHRoaXMgd29yayByZWN1cnNpdmVseSwgc28gdGhhdCB0aGlz
IHdpbGwKKyAgICAgICAgd29yazoKKyAgICAgICAgCisgICAgICAgICAgICBmbG9hdDQgdmVjOwor
ICAgICAgICAgICAgdmVjLnp3eC55ID0gNDI7CisgICAgICAgICAgICAvLyBub3cgdyBpcyA0Mgor
ICAgICAgICAKKyAgICAgICAgVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRlY29tcG9zZSBpdCBhdXRv
bWF0aWNhbGx5OgorICAgICAgICAKKyAgICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAg
ICBmbG9hdDMgdG1wID0gdmVjLnp3eDsKKyAgICAgICAgICAgIHRtcC55ID0gNDI7CisgICAgICAg
ICAgICB2ZWMuend4ID0gdG1wOworICAgICAgICAKKyAgICAgICAgVGhpcydsbCB3b3JrIHRvIGFu
eSBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIFRvIGNoZWNrIGlmIHRoaXMgd29ya3MsIHRoaXMg
cGF0Y2ggYWRkcyB0d28gc3Vic3RhbnRpYWwgbmV3IHRlc3RzIGNhbGxlZCBURVNUX2dlbmVyaWNB
Y2Nlc3NvcnMoKSBhbmQKKyAgICAgICAgVEVTVF9iaXRTdWJzY3JpcHRBY2Nlc3NvcigpLiBUaGlz
IHRlc3RzIHRoYXQgdGhpcyBzdHVmZiB3b3JrcyB3aXRoIGEgbG90IG9mIGdlbmVyaWMgdHlwZXMs
IGFuZCB0aGF0IGl0J3MKKyAgICAgICAgcG9zc2libGUgdG8gdHVybiBpbnRlZ2VycyBpbnRvIGJp
dHZlY3RvcnMgdXNpbmcgc3Vic2NyaXB0IG92ZXJsb2FkaW5nLiBUaGlzIHBhdGNoIGFsc28gYWRk
cyBzbWFsbGVyIHVuaXQKKyAgICAgICAgdGVzdHMgYWxzby4KKyAgICAgICAgCisgICAgICAgIE9o
LCBhbmQgaXQncyBub3cgcG9zc2libGUgdG8gZ2V0IGFuIGFycmF5J3MgbGVuZ3RoLgorCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzOgorICAgICAgICAo
bmVlZHNQcmltaXRpdmVQcm90b2NvbCk6CisgICAgICAgIChwcm90b2NvbFN1ZmZpeCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKEFu
b255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5n
ZXQgb3JpZ2luKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5nZXQgbmFt
ZSk6CisgICAgICAgIChBbm9ueW1vdXNWYXJpYWJsZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qczoKKyAgICAgICAg
KEFycmF5UmVmVHlwZS5wcm90b3R5cGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZCk6CisgICAgICAg
IChBcnJheVJlZlR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanM6CisgICAgICAgIChB
cnJheVR5cGUucHJvdG90eXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQpOgorICAgICAgICAoQXJy
YXlUeXBlLnByb3RvdHlwZS5hcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCk6CisgICAgICAgIChB
cnJheVR5cGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQu
anM6CisgICAgICAgIChBc3NpZ25tZW50KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DYWxsQXNzaWdubWVudC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9uLnJl
c29sdmUpOgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmUpOgorICAg
ICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmVUb092ZXJsb2FkKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzOgorICAgICAgICAoQ2hlY2tl
ci5wcm90b3R5cGUudmlzaXRQcm9ncmFtKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZp
c2l0RnVuY0RlZik6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmMp
OgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KENoZWNrZXIucHJvdG90eXBlLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0RG90RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVja2VyLnBy
b3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9uKToKKyAgICAgICAgKENoZWNrZXIpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxl
LnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOiBEZWxldGVkLgorICAgICAgICAoQ2hlY2tlci5wcm90
b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxlLnByb3RvdHlwZS52aXNp
dFZhcmlhYmxlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0
UHJvdG9jb2xEZWNsLk5vdGljZVR5cGVWYXJpYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdFByb3RvY29sRGVjbC5zZXQgdGhyb3cpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qczoKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzOgorICAgICAgICAo
RG90RXhwcmVzc2lvbik6CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc3Ry
dWN0KToKKyAgICAgICAgKERvdEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBnZXRGdW5jTmFtZSk6
CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoRG90RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHNldEZ1bmNOYW1lKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzOgorICAgICAgICAoRUJ1ZmZlckJ1aWxk
ZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAoRUJ1ZmZlckJ1
aWxkZXIucHJvdG90eXBlLnZpc2l0TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAgICAgICAoRXZhbHVhdG9y
LnByb3RvdHlwZS52aXNpdElkZW50aXR5RXhwcmVzc2lvbik6CisgICAgICAgIChFdmFsdWF0b3Iu
cHJvdG90eXBlLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoRXZhbHVhdG9yLnBy
b3RvdHlwZS52aXNpdEFub255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEV2YWx1YXRvci5wcm90
b3R5cGUudmlzaXREb3RFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEV2YWx1YXRvci5w
cm90b3R5cGUudmlzaXRMZXRFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzOgorICAgICAgICAoRXhwcmVzc2lv
bkZpbmRlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzOgorICAgICAgICAo
Rm9yTG9vcC5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoRm9yTG9vcCk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanM6CisgICAg
ICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1
YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRDYWxsRXhwcmVzc2lvbik6CisgICAgICAgIChGdW5j
SW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1YnN0aXR1dGlv
bik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9y
LnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGUucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVu
Yyk6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUpOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlKToK
KyAgICAgICAgKEZ1bmNJbnN0YW50aWF0b3IpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qczogQWRkZWQuCisgICAgICAgIChJZGVudGl0eUV4
cHJlc3Npb24pOgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgdGFy
Z2V0KToKKyAgICAgICAgKElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0NvbnN0ZXhw
cik6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1ZSk6
CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJv
dG90eXBlLmdldCBhcnJheSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdl
dCBpbmRleCk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1
ZSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgZ2V0RnVuY05hbWUpOgor
ICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc2V0RnVuY05hbWUpOgorICAgICAg
ICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanM6CisgICAgICAgIChpbmZlclR5
cGVzRm9yQ2FsbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpz
OgorICAgICAgICAoX2lubGluZUZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzOgorICAgICAgICAoSW5saW5lci5wcm90b3R5cGUudmlzaXRDYWxs
RXhwcmVzc2lvbik6CisgICAgICAgIChJbmxpbmVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Np
b24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNp
Y3MuanM6CisgICAgICAgIChJbnRyaW5zaWNzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanM6CisgICAgICAgIChNYWtlQXJy
YXlSZWZFeHByZXNzaW9uLnByb3RvdHlwZS5iZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJl
c3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVD
b250ZXh0LmpzOgorICAgICAgICAoTmFtZUNvbnRleHQpOgorICAgICAgICAoTmFtZUNvbnRleHQu
cHJvdG90eXBlLmFkZCk6CisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZG9TdGF0ZW1l
bnQpOgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmhhbmRsZURlZmluaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKE5hbWVDb250ZXh0LnByb3RvdHlwZS5pc0RlZmluZWQpOiBEZWxldGVk
LgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmRlZmluZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZGVmaW5lQWxsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanM6CisgICAgICAgIChOYW1l
UmVzb2x2ZXIucHJvdG90eXBlLmRvU3RhdGVtZW50KToKKyAgICAgICAgKE5hbWVSZXNvbHZlci5w
cm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAgICAoTmFtZVJlc29sdmVyLnByb3Rv
dHlwZS52aXNpdFByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL05hdGl2ZUZ1bmMuanM6CisgICAgICAgIChOYXRpdmVGdW5jKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanM6CisgICAgICAgIChO
YXRpdmVGdW5jSW5zdGFuY2UpOgorICAgICAgICAoTmF0aXZlRnVuY0luc3RhbmNlLnByb3RvdHlw
ZS5nZXQgaW1wbGVtZW50YXRpb25EYXRhKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob2RlLmpzOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUudmlzaXQpOgorICAgICAgICAo
Tm9kZS52aXNpdCk6CisgICAgICAgIChOb2RlLnVuaWZ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0RG90
RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLnByb3RvdHlw
ZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAg
ICAgKGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KToKKyAgICAgICAgKHBhcnNlUG9zc2libGVT
dWZmaXgpOgorICAgICAgICAoZmluaXNoUGFyc2luZ1ByZUluY3JlbWVudCk6CisgICAgICAgIChn
ZW5lcmljUGFyc2VDb21tYUV4cHJlc3Npb24pOgorICAgICAgICAocGFyc2VGdW5jTmFtZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qczoKKyAgICAgICAgKHBy
ZXBhcmUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanM6Cisg
ICAgICAgIChQcm9ncmFtKToKKyAgICAgICAgKFByb2dyYW0ucHJvdG90eXBlLmdldCBnbG9iYWxO
YW1lQ29udGV4dCk6CisgICAgICAgIChQcm9ncmFtLnByb3RvdHlwZS5hZGQpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qczogQWRk
ZWQuCisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgcmVzdWx0VHlwZSk6CisgICAgICAgIChQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90eXBlLnJld3JpdGVBZnRlckNsb25pbmcpOgor
ICAgICAgICAoUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS51cGRhdGVDYWxsc0Fm
dGVyQ2hhbmdpbmdCYXNlKToKKyAgICAgICAgKFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wcm90
b3R5cGUuZW1pdEdldCk6CisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90
eXBlLmVtaXRTZXQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5
UmVzb2x2ZXIuanM6IEFkZGVkLgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUu
X3Zpc2l0UHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5
cGUudmlzaXREb3RFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJvdG90
eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJv
dG90eXBlLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZl
ci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFBy
b3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0QXNzaWdubWVudCk6CisgICAgICAgIChQcm9w
ZXJ0eVJlc29sdmVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVydHlS
ZXNvbHZlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KFByb3BlcnR5UmVzb2x2ZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0
clR5cGUuanM6CisgICAgICAgIChQdHJUeXBlLnByb3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLnJldHVyblR5cGVGcm9tQW5kT3Zlcmxv
YWQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24uanM6IEFkZGVkLgorICAgICAgICAoUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbik6
CisgICAgICAgIChSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgbFZhbHVl
KToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm9sZFZhbHVl
UmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm5ld1Zh
bHVlUmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLnRv
U3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMu
anM6CisgICAgICAgIChjcmVhdGVOYW1lUmVzb2x2ZXIpOgorICAgICAgICAocmVzb2x2ZU5hbWVz
SW5UeXBlcyk6CisgICAgICAgIChyZXNvbHZlTmFtZXNJblByb3RvY29scyk6CisgICAgICAgIChy
ZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlTmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwu
anM6CisgICAgICAgIChyZXNvbHZlT3ZlcmxvYWRJbXBsKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qczogQWRkZWQuCisgICAgICAgIChyZXNv
bHZlUHJvcGVydGllcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2
ZVR5cGVEZWZzLmpzOgorICAgICAgICAocmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyk6CisgICAgICAg
IChyZXNvbHZlVHlwZURlZnNJblByb3RvY29scyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnNJ
bkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnMpOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanM6CisgICAgICAgIChS
ZXR1cm5DaGVja2VyLnByb3RvdHlwZS5faXNCb29sQ2FzdEZyb21MaXRlcmFsVHJ1ZSk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanM6CisgICAgICAgIChSZXdy
aXRlcik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgor
ICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJlZik6CisgICAgICAgIChSZXdy
aXRlci5wcm90b3R5cGUudmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVy
LnByb3RvdHlwZS5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKToKKyAgICAgICAgKFJl
d3JpdGVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJldHVybik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRHZW5l
cmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0TnVsbFR5
cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnByb2Nlc3NEZXJpdmVkQ2FsbERhdGEp
OgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgorICAg
ICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0RnVuY3Rpb25MaWtlQmxvY2spOgorICAgICAg
ICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0SWZTdGF0ZW1lbnQpOgorICAgICAgICAoUmV3cml0
ZXIucHJvdG90eXBlLnZpc2l0Rm9yTG9vcCk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUu
dmlzaXRBbm9ueW1vdXNWYXJpYWJsZSk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0
TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RhbmRhcmRMaWJyYXJ5LmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0cnVjdExheW91dEJ1aWxkZXIuanM6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRCdWlsZGVyLnBy
b3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmNJbnN0YW5jZSk6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRC
dWlsZGVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpz
OgorICAgICAgICAoU3RydWN0VHlwZS5wcm90b3R5cGUuaW5zdGFudGlhdGUpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qczoKKyAgICAgICAgKFN1YnN0
aXR1dGlvbi5wcm90b3R5cGUuZ2V0IG1hcCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanM6IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qczogQWRkZWQuCisg
ICAgICAgIChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmNyZWF0ZVR5cGVQYXJhbWV0ZXJzKToK
KyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuKToKKyAgICAgICAgKHN5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlRmllbGRUeXBlKToKKyAgICAgICAgKHN5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlVHlwZVJlZik6CisgICAgICAgIChzeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzLnNldHVwQW5kZXIpOgorICAgICAgICAoc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29y
cyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChjaGVja051bWJl
cik6CisgICAgICAgIChURVNUX3NpbXBsZVByb3RvY29sKToKKyAgICAgICAgKFRFU1RfYXNzaWdu
TGVuZ3RoKToKKyAgICAgICAgKFRFU1Rfc2ltcGxlU2V0dGVyKToKKyAgICAgICAgKFRFU1RfZ2Vu
ZXJpY0FjY2Vzc29ycyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5q
czoKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmdldCBpc1JlZik6CisgICAgICAgIChUeXBlLnBy
b3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBl
LmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLnJl
dHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQpOgorICAgICAgICAoVHlwZSk6CisgICAgICAgICogV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzOiBBZGRlZC4KKyAg
ICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlzaXRDb25zdGV4cHJUeXBl
UGFyYW1ldGVyKToKKyAgICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRUeXBlVmFyaWFibGUpOgorICAgICAgICAoVHlwZVBhcmFtZXRlclJld3JpdGVyKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFR5cGVWYXJpYWJsZVRyYWNrZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1ZhbHVlLmpzOgorICAgICAgICAoVmFsdWUucHJvdG90eXBlLmJlY29tZSk6
CisgICAgICAgIChWYWx1ZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFy
aWFibGVSZWYuanM6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IGFkZHJlc3NTcGFjZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZp
c2l0b3IucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKToKKyAgICAgICAgKFZpc2l0
b3IucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xEZWNsKToKKyAgICAgICAgKFZpc2l0b3IpOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzOiBS
ZW1vdmVkLgorCiAyMDE3LTA5LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgU3RhcnQgd29ya2luZyBvbiBXU0wgZG9jdW1lbnRhdGlvbgpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5qcwkocmV2aXNpb24gMjIy
MTQwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxNiBAQCBmdW5jdGlvbiBpc0FkZHJlc3NTcGFjZShh
ZGRyZXNzU3BhY2UpCiAgICAgfQogfQogCitmdW5jdGlvbiBuZWVkc1ByaW1pdGl2ZVByb3RvY29s
KGFkZHJlc3NTcGFjZSkKK3sKKyAgICByZXR1cm4gYWRkcmVzc1NwYWNlICE9ICJ0aHJlYWQiOwor
fQorCitmdW5jdGlvbiBwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpCit7CisgICAgcmV0dXJu
IG5lZWRzUHJpbWl0aXZlUHJvdG9jb2woYWRkcmVzc1NwYWNlKSA/ICI6cHJpbWl0aXZlIiA6ICIi
OworfQorCiBmdW5jdGlvbiB2YWxpZGF0ZUFkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCiB7CiAg
ICAgaWYgKCFpc0FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpKQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0FsbC5qcwkocmV2aXNpb24gMjIyMTQwKQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTQgQEAg
bG9hZCgiVHlwZS5qcyIpOwogbG9hZCgiUmVmZXJlbmNlVHlwZS5qcyIpOwogbG9hZCgiVmFsdWUu
anMiKTsKIGxvYWQoIkV4cHJlc3Npb24uanMiKTsKLWxvYWQoIlZpc2l0b3JCYXNlLmpzIik7CiBs
b2FkKCJSZXdyaXRlci5qcyIpOwogbG9hZCgiVmlzaXRvci5qcyIpOwogbG9hZCgiQ3JlYXRlTGl0
ZXJhbC5qcyIpOwogbG9hZCgiQ3JlYXRlTGl0ZXJhbFR5cGUuanMiKTsKK2xvYWQoIlByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5qcyIpOwogCiBsb2FkKCJBZGRyZXNzU3BhY2UuanMiKTsKK2xvYWQo
IkFub255bW91c1ZhcmlhYmxlLmpzIik7CiBsb2FkKCJBcnJheVJlZlR5cGUuanMiKTsKIGxvYWQo
IkFycmF5VHlwZS5qcyIpOwogbG9hZCgiQXNzaWdubWVudC5qcyIpOwpAQCAtNDMsNyArNDQsNiBA
QCBsb2FkKCJBdXRvV3JhcHBlci5qcyIpOwogbG9hZCgiQmxvY2suanMiKTsKIGxvYWQoIkJvb2xM
aXRlcmFsLmpzIik7CiBsb2FkKCJCcmVhay5qcyIpOwotbG9hZCgiQ2FsbEFzc2lnbm1lbnQuanMi
KTsKIGxvYWQoIkNhbGxFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJDYWxsRnVuY3Rpb24uanMiKTsK
IGxvYWQoIkNoZWNrLmpzIik7CkBAIC03MSw2ICs3MSw3IEBAIGxvYWQoIkV2YWx1YXRpb25Db21t
b24uanMiKTsKIGxvYWQoIkV2YWx1YXRvci5qcyIpOwogbG9hZCgiRXhwcmVzc2lvbkZpbmRlci5q
cyIpOwogbG9hZCgiRmllbGQuanMiKTsKK2xvYWQoIkZpbmRIaWdoWm9tYmllcy5qcyIpOwogbG9h
ZCgiRmxhdHRlblByb3RvY29sRXh0ZW5kcy5qcyIpOwogbG9hZCgiRmxvYXRMaXRlcmFsLmpzIik7
CiBsb2FkKCJGbG9hdExpdGVyYWxUeXBlLmpzIik7CkBAIC04MCw3ICs4MSwxMCBAQCBsb2FkKCJG
dW5jRGVmLmpzIik7CiBsb2FkKCJGdW5jSW5zdGFudGlhdG9yLmpzIik7CiBsb2FkKCJGdW5jUGFy
YW1ldGVyLmpzIik7CiBsb2FkKCJGdW5jdGlvbkxpa2VCbG9jay5qcyIpOworbG9hZCgiSGlnaFpv
bWJpZUZpbmRlci5qcyIpOworbG9hZCgiSWRlbnRpdHlFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJJ
ZlN0YXRlbWVudC5qcyIpOworbG9hZCgiSW5kZXhFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJJbmZl
clR5cGVzRm9yQ2FsbC5qcyIpOwogbG9hZCgiSW5saW5lLmpzIik7CiBsb2FkKCJJbmxpbmVyLmpz
Iik7CkBAIC04OCw3ICs5Miw2IEBAIGxvYWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwog
bG9hZCgiSW50TGl0ZXJhbC5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbFR5cGUuanMiKTsKIGxvYWQo
IkludHJpbnNpY3MuanMiKTsKLWxvYWQoIkxldEV4cHJlc3Npb24uanMiKTsKIGxvYWQoIkxleGVy
LmpzIik7CiBsb2FkKCJMZXhlclRva2VuLmpzIik7CiBsb2FkKCJMaXRlcmFsVHlwZUNoZWNrZXIu
anMiKTsKQEAgLTEwMywyMCArMTA2LDI0IEBAIGxvYWQoIk5hdGl2ZUZ1bmMuanMiKTsKIGxvYWQo
Ik5hdGl2ZUZ1bmNJbnN0YW5jZS5qcyIpOwogbG9hZCgiTmF0aXZlVHlwZS5qcyIpOwogbG9hZCgi
TmF0aXZlVHlwZUluc3RhbmNlLmpzIik7Citsb2FkKCJOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVy
LmpzIik7CiBsb2FkKCJOdWxsTGl0ZXJhbC5qcyIpOwogbG9hZCgiTnVsbFR5cGUuanMiKTsKIGxv
YWQoIk92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiKTsKIGxvYWQoIlBhcnNlLmpzIik7CiBs
b2FkKCJQcmVwYXJlLmpzIik7CiBsb2FkKCJQcm9ncmFtLmpzIik7Citsb2FkKCJQcm9wZXJ0eVJl
c29sdmVyLmpzIik7CiBsb2FkKCJQcm90b2NvbC5qcyIpOwogbG9hZCgiUHJvdG9jb2xEZWNsLmpz
Iik7CiBsb2FkKCJQcm90b2NvbEZ1bmNEZWNsLmpzIik7CiBsb2FkKCJQcm90b2NvbFJlZi5qcyIp
OwogbG9hZCgiUHRyVHlwZS5qcyIpOworbG9hZCgiUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5q
cyIpOwogbG9hZCgiUmVjdXJzaW9uQ2hlY2tlci5qcyIpOwogbG9hZCgiUmVzb2x2ZU5hbWVzLmpz
Iik7CiBsb2FkKCJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIik7Citsb2FkKCJSZXNvbHZlUHJvcGVy
dGllcy5qcyIpOwogbG9hZCgiUmVzb2x2ZVR5cGVEZWZzLmpzIik7CiBsb2FkKCJSZXR1cm4uanMi
KTsKIGxvYWQoIlJldHVybkNoZWNrZXIuanMiKTsKQEAgLTEyNSwxMiArMTMyLDE0IEBAIGxvYWQo
IlN0YW5kYXJkTGlicmFyeS5qcyIpOwogbG9hZCgiU3RydWN0TGF5b3V0QnVpbGRlci5qcyIpOwog
bG9hZCgiU3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vic3RpdHV0aW9uLmpzIik7Ci1sb2FkKCJT
dWZmaXhDYWxsQXNzaWdubWVudC5qcyIpOworbG9hZCgiU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29y
cy5qcyIpOwogbG9hZCgiVHlwZURlZi5qcyIpOwogbG9hZCgiVHlwZURlZlJlc29sdmVyLmpzIik7
CiBsb2FkKCJUeXBlT3JWYXJpYWJsZVJlZi5qcyIpOworbG9hZCgiVHlwZVBhcmFtZXRlclJld3Jp
dGVyLmpzIik7CiBsb2FkKCJUeXBlUmVmLmpzIik7CiBsb2FkKCJUeXBlVmFyaWFibGUuanMiKTsK
K2xvYWQoIlR5cGVWYXJpYWJsZVRyYWNrZXIuanMiKTsKIGxvYWQoIlR5cGVkVmFsdWUuanMiKTsK
IGxvYWQoIlVpbnRMaXRlcmFsLmpzIik7CiBsb2FkKCJVaW50TGl0ZXJhbFR5cGUuanMiKTsKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1Zhcmlh
YmxlLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fu
b255bW91c1ZhcmlhYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
bGV0IGFub255bW91c1ZhcmlhYmxlQ291bnQgPSAwOworCitjbGFzcyBBbm9ueW1vdXNWYXJpYWJs
ZSBleHRlbmRzIFZhbHVlIHsKKyAgICAvLyBZb3UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSB2YXJp
YWJsZSdzIHZhbHVlIGJlZm9yZSB1c2UsIGJ1dCB0aGF0IGNvdWxkIGJlIHF1aXRlIGxhdGUuCisg
ICAgY29uc3RydWN0b3Iob3JpZ2luLCB0eXBlID0gbnVsbCkKKyAgICB7CisgICAgICAgIHN1cGVy
KCk7CisgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5pbmRleCA9
IGFub255bW91c1ZhcmlhYmxlQ291bnQrKzsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAg
ICB9CisgICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAg
IGdldCBuYW1lKCkgeyByZXR1cm4gImFub25WYXI8IiArIHRoaXMuaW5kZXggKyAiPiI7IH0KKyAg
ICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5uYW1lOworICAg
IH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVm
VHlwZS5qcwkocmV2aXNpb24gMjIyMTQwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQXJyYXlSZWZUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxNSBAQCBjbGFz
cyBBcnJheVJlZlR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlCiAgICAgCiAgICAgZ2V0IGlzQXJy
YXlSZWYoKSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBhcmd1bWVudEZvckFuZE92ZXJsb2FkKG9y
aWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICAgIGFy
Z3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH0KKwogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
LmVsZW1lbnRUeXBlICsgIltdICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanMJKHJldmlzaW9uIDIyMjE0MCkKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtNzMsNSArNzMsMTYgQEAgY2xhc3MgQXJyYXlUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNv
bnRleHQsIG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CisKKyAgICBhcmd1bWVudEZvckFuZE92
ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE1h
a2VBcnJheVJlZkV4cHJlc3Npb24ob3JpZ2luLCB2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5udW1F
bGVtZW50cyA9IHRoaXMubnVtRWxlbWVudHM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAg
IHJldHVybiBuZXcgQXJyYXlSZWZUeXBlKG9yaWdpbiwgInRocmVhZCIsIHRoaXMuZWxlbWVudFR5
cGUpOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXNz
aWdubWVudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9B
c3NpZ25tZW50LmpzCShyZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9Bc3NpZ25tZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTIgQEAK
ICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewot
ICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMpCisgICAgY29uc3RydWN0b3Iob3JpZ2lu
LCBsaHMsIHJocywgdHlwZSA9IG51bGwpCiAgICAgewogICAgICAgICBzdXBlcihvcmlnaW4pOwog
ICAgICAgICB0aGlzLl9saHMgPSBsaHM7CiAgICAgICAgIHRoaXMuX3JocyA9IHJoczsKKyAgICAg
ICAgdGhpcy50eXBlID0gdHlwZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IGxocygpIHsgcmV0dXJu
IHRoaXMuX2xoczsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFz
c2lnbm1lbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
Q2FsbEFzc2lnbm1lbnQuanMJKHJldmlzaW9uIDIyMjE0MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0NhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVudCkKQEAgLTEsNDYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBz
dHJpY3QiOwotCi1jbGFzcyBDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAg
IGNvbnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzLCByaHMpCi0gICAgewotICAgICAgICBzdXBl
cihvcmlnaW4pOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fbGhz
ID0gbGhzOwotICAgICAgICB0aGlzLl9yaHMgPSByaHM7Ci0gICAgICAgIHRoaXMuZnVuYyA9IG51
bGw7Ci0gICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQot
ICAgIGdldCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KLSAgICBnZXQgcmhzKCkgeyByZXR1
cm4gdGhpcy5fcmhzOyB9IC8vIFRoaXMgY2FuIGJlIG51bGwuCi0gICAgCi0gICAgdG9TdHJpbmco
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGhzICsgIiAiICsgdGhpcy5uYW1lICsgKHRo
aXMucmhzID8gIj0gIiArIHRoaXMucmhzIDogIiIpOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMJKHJldmlzaW9u
IDIyMjE0MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9u
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsODIgQEAgY2xhc3MgQ2FsbEV4cHJlc3Np
b24gZXh0ZW5kcyBFeHByZXNzaW9uIAogICAgIGdldCBpc0Nhc3QoKSB7IHJldHVybiB0aGlzLl9p
c0Nhc3Q7IH0KICAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3JldHVyblR5cGU7
IH0KICAgICAKLSAgICByZXNvbHZlKG92ZXJsb2FkKQorICAgIHN0YXRpYyByZXNvbHZlKG9yaWdp
biwgcG9zc2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSwgbmFtZSwgdHlwZUFy
Z3VtZW50cywgYXJndW1lbnRMaXN0LCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQorICAgIHsK
KyAgICAgICAgbGV0IGNhbGwgPSBuZXcgQ2FsbEV4cHJlc3Npb24ob3JpZ2luLCBuYW1lLCB0eXBl
QXJndW1lbnRzLCBhcmd1bWVudExpc3QpOworICAgICAgICBjYWxsLmFyZ3VtZW50VHlwZXMgPSBh
cmd1bWVudFR5cGVzOworICAgICAgICBpZiAocmV0dXJuVHlwZSkKKyAgICAgICAgICAgIGNhbGwu
c2V0Q2FzdERhdGEocmV0dXJuVHlwZSk7CisgICAgICAgIHJldHVybiB7Y2FsbCwgcmVzdWx0VHlw
ZTogY2FsbC5yZXNvbHZlKHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1ldGVyc0luU2NvcGUs
IHR5cGVBcmd1bWVudHMpfTsKKyAgICB9CisgICAgCisgICAgcmVzb2x2ZShwb3NzaWJsZU92ZXJs
b2FkcywgdHlwZVBhcmFtZXRlcnNJblNjb3BlLCB0eXBlQXJndW1lbnRzKQorICAgIHsKKyAgICAg
ICAgaWYgKCFwb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVy
cm9yKHRoaXMub3JpZ2luLm9yaWdpblN0cmluZywgIkRpZCBub3QgZmluZCBhbnkgZnVuY3Rpb25z
IG5hbWVkICIgKyB0aGlzLm5hbWUpOworICAgICAgICAKKyAgICAgICAgbGV0IG92ZXJsb2FkID0g
bnVsbDsKKyAgICAgICAgbGV0IGZhaWx1cmVzID0gW107CisgICAgICAgIGZvciAobGV0IHR5cGVQ
YXJhbWV0ZXIgb2YgdHlwZVBhcmFtZXRlcnNJblNjb3BlKSB7CisgICAgICAgICAgICBpZiAoISh0
eXBlUGFyYW1ldGVyIGluc3RhbmNlb2YgVHlwZVZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5wcm90b2NvbCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxldCBzaWduYXR1cmVzID0KKyAgICAg
ICAgICAgICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnByb3RvY29sRGVjbC5zaWduYXR1cmVz
QnlOYW1lV2l0aFR5cGVWYXJpYWJsZSh0aGlzLm5hbWUsIHR5cGVQYXJhbWV0ZXIpOworICAgICAg
ICAgICAgaWYgKCFzaWduYXR1cmVzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMsIHRoaXMudHlw
ZUFyZ3VtZW50cywgdGhpcy5hcmd1bWVudFR5cGVzLCB0aGlzLnJldHVyblR5cGUpOworICAgICAg
ICAgICAgaWYgKG92ZXJsb2FkLmZ1bmMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBmYWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKKyAgICAgICAgICAgIG92
ZXJsb2FkID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW92ZXJsb2FkKSB7CisgICAg
ICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCisgICAgICAgICAgICAgICAg
cG9zc2libGVPdmVybG9hZHMsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5hcmd1bWVudFR5cGVz
LCB0aGlzLnJldHVyblR5cGUpOworICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7Cisg
ICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7CisgICAg
ICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxs
IHdpdGggIjsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlQXJndW1lbnRzLmxlbmd0aCkK
KyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyB0aGlz
LnR5cGVBcmd1bWVudHMgKyAiPiBhbmQgIjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJh
cmd1bWVudCB0eXBlcyAoIiArIHRoaXMuYXJndW1lbnRUeXBlcyArICIpIjsKKyAgICAgICAgICAg
ICAgICBpZiAodGhpcy5yZXR1cm5UeXBlKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9
IiBhbmQgcmV0dXJuIHR5cGUgIiArIHRoaXMucmV0dXJuVHlwZTsKKyAgICAgICAgICAgICAgICBp
ZiAoZmFpbHVyZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIsIGJ1
dCBjb25zaWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKKyAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1lc3NhZ2UpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlw
ZUFyZ3VtZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5
cGUgPSB0eXBlQXJndW1lbnRzW2ldOworICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBv
dmVybG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOworICAgICAgICAgICAgaWYgKCEodHlwZVBh
cmFtZXRlciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxz
V2l0aENvbW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBl
IGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0
eXBlQXJndW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7
CisgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyZ3VtZW50VHlw
ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBhcmd1bWVudFR5cGUgPSB0aGlzLmFy
Z3VtZW50VHlwZXNbaV07CisgICAgICAgICAgICBsZXQgcGFyYW1ldGVyVHlwZSA9IG92ZXJsb2Fk
LmZ1bmMucGFyYW1ldGVyc1tpXS50eXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAorICAgICAg
ICAgICAgICAgIG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0
aW9uQ29udGV4dCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRUeXBlLmVxdWFs
c1dpdGhDb21taXQocGFyYW1ldGVyVHlwZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0ICIgKyB0aGlzLm9yaWdpbi5vcmlnaW5T
dHJpbmcgKyAiIGFyZ3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsIGFmdGVyIHR5
cGUgYXJndW1lbnQgc3Vic3RpdHV0aW9uOiBhcmd1bWVudCA9ICIgKyBhcmd1bWVudFR5cGUgKyAi
LCBwYXJhbWV0ZXIgPSAiICsgcGFyYW1ldGVyVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMucmVzb2x2ZVRvT3ZlcmxvYWQob3ZlcmxvYWQpOworICAgIH0KKyAgICAKKyAgICBy
ZXNvbHZlVG9PdmVybG9hZChvdmVybG9hZCkKICAgICB7CiAgICAgICAgIHRoaXMuZnVuYyA9IG92
ZXJsb2FkLmZ1bmM7CiAgICAgICAgIHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA9IG92ZXJsb2Fk
LnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJndW1lbnQgaW5zdGFuY2Vv
ZiBUeXBlID8gdHlwZUFyZ3VtZW50LnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKSA6IHR5cGVBcmd1
bWVudCk7CiAgICAgICAgIGxldCByZXN1bHQgPSBvdmVybG9hZC5mdW5jLnJldHVyblR5cGUuc3Vi
c3RpdHV0ZVRvVW5pZmljYXRpb24oCiAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJh
bWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwotICAgICAgICB0aGlzLnJlc3Vs
dFR5cGUgPSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOwogICAgICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCByZXR1cm4gdHlwZSIpOwor
ICAgICAgICByZXN1bHQgPSByZXN1bHQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpOworICAgICAg
ICB0aGlzLnJlc3VsdFR5cGUgPSByZXN1bHQ7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCShy
ZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2Vy
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwzOSArMzQsNDcgQEAgY2xhc3MgQ2hlY2tlciBleHRl
bmRzIFZpc2l0b3IgewogICAgIAogICAgIHZpc2l0UHJvZ3JhbShub2RlKQogICAgIHsKLSAgICAg
ICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKSB7CisgICAg
ICAgIGxldCBkb1N0YXRlbWVudCA9IHN0YXRlbWVudCA9PiB7CiAgICAgICAgICAgICB0aGlzLl9j
dXJyZW50U3RhdGVtZW50ID0gc3RhdGVtZW50OwogICAgICAgICAgICAgc3RhdGVtZW50LnZpc2l0
KHRoaXMpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGxldCB0eXBlIG9mIG5v
ZGUudHlwZXMudmFsdWVzKCkpCisgICAgICAgICAgICBkb1N0YXRlbWVudCh0eXBlKTsKKyAgICAg
ICAgZm9yIChsZXQgcHJvdG9jb2wgb2Ygbm9kZS5wcm90b2NvbHMudmFsdWVzKCkpCisgICAgICAg
ICAgICBkb1N0YXRlbWVudChwcm90b2NvbCk7CisgICAgICAgIGZvciAobGV0IGZ1bmNzIG9mIG5v
ZGUuZnVuY3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1
bmNzKSB7CisgICAgICAgICAgICAgICAgdGhpcy52aXNpdEZ1bmMoZnVuYyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgZnVuY3Mgb2Ygbm9kZS5mdW5jdGlvbnMu
dmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCisgICAgICAg
ICAgICAgICAgZG9TdGF0ZW1lbnQoZnVuYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAor
ICAgIHZpc2l0RnVuY0RlZihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRo
aXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdE5hdGl2ZUZ1bmMobm9kZSkKKyAgICB7CiAgICAg
fQogICAgIAogICAgIHZpc2l0UHJvdG9jb2xEZWNsKG5vZGUpCiAgICAgewogICAgICAgICBmb3Ig
KGxldCBzaWduYXR1cmUgb2Ygbm9kZS5zaWduYXR1cmVzKSB7Ci0gICAgICAgICAgICBsZXQgc2V0
ID0gbmV3IFNldCgpOwotICAgICAgICAgICAgZnVuY3Rpb24gY29uc2lkZXIodGhpbmcpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaW5nLmlzVW5pZmlhYmxlKQotICAgICAg
ICAgICAgICAgICAgICBzZXQuYWRkKHRoaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNsYXNzIE5vdGljZVR5cGVWYXJpYWJsZSBleHRlbmRzIFZpc2l0b3IgewotICAgICAgICAgICAg
ICAgIHZpc2l0VHlwZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc2lkZXIobm9kZS50eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc2lkZXIobm9kZS52YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbGV0IG5vdGljZVR5cGVWYXJpYWJsZSA9IG5ldyBO
b3RpY2VUeXBlVmFyaWFibGUoKTsKKyAgICAgICAgICAgIGxldCB0eXBlVmFyaWFibGVUcmFja2Vy
ID0gbmV3IFR5cGVWYXJpYWJsZVRyYWNrZXIoKTsKICAgICAgICAgICAgIGZvciAobGV0IHBhcmFt
ZXRlclR5cGUgb2Ygc2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzKQotICAgICAgICAgICAgICAgIHBh
cmFtZXRlclR5cGUudmlzaXQobm90aWNlVHlwZVZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJUeXBlLnZpc2l0KHR5cGVWYXJpYWJsZVRyYWNrZXIpOworICAgICAgICAgICAgTm9k
ZS52aXNpdChzaWduYXR1cmUucmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbiwgdHlwZVZh
cmlhYmxlVHJhY2tlcik7CiAgICAgICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHNp
Z25hdHVyZS50eXBlUGFyYW1ldGVycykgewotICAgICAgICAgICAgICAgIGlmICghc2V0Lmhhcyh0
eXBlUGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICBpZiAoIXR5cGVWYXJpYWJsZVRyYWNrZXIu
c2V0Lmhhcyh0eXBlUGFyYW1ldGVyKSkKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgV1R5cGVF
cnJvcih0eXBlUGFyYW1ldGVyLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBlIHBhcmFtZXRlciB0
byBwcm90b2NvbCBzaWduYXR1cmUgbm90IGluZmVycmFibGUgZnJvbSB2YWx1ZSBwYXJhbWV0ZXJz
Iik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXNldC5oYXMobm9kZS50eXBlVmFy
aWFibGUpKQorICAgICAgICAgICAgaWYgKCF0eXBlVmFyaWFibGVUcmFja2VyLnNldC5oYXMobm9k
ZS50eXBlVmFyaWFibGUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHNp
Z25hdHVyZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUHJvdG9jb2wncyB0eXBlIHZhcmlhYmxlICgi
ICsgbm9kZS5uYW1lICsgIikgbm90IG1lbnRpb25lZCBpbiBzaWduYXR1cmU6ICIgKyBzaWduYXR1
cmUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQxLDYgKzE0OSwzMiBAQCBjbGFzcyBDaGVja2Vy
IGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiBsaHNUeXBlOwogICAgIH0KICAgICAK
KyAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS5sVmFsdWUu
aXNMVmFsdWUpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5v
cmlnaW5TdHJpbmcsICJMSFMgb2YgcmVhZC1tb2RpZnktd3JpdGUgaXMgbm90IGFuIExWYWx1ZTog
IiArIG5vZGUubFZhbGUpOworICAgICAgICBsZXQgbGhzVHlwZSA9IG5vZGUubFZhbHVlLnZpc2l0
KHRoaXMpOworICAgICAgICBub2RlLm9sZFZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAg
ICBub2RlLm5ld1ZhbHVlVmFyLnR5cGUgPSBsaHNUeXBlOworICAgICAgICBub2RlLm9sZFZhbHVl
VmFyLnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLm5ld1ZhbHVlVmFyLnZpc2l0KHRoaXMpOwor
ICAgICAgICBsZXQgbmV3VmFsdWVUeXBlID0gbm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsK
KyAgICAgICAgaWYgKCFsaHNUeXBlLmVxdWFsc1dpdGhDb21taXQobmV3VmFsdWVUeXBlKSkKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcs
ICJUeXBlIG1pc21hdGNoIGluIHJlYWQtbW9kaWZ5LXdyaXRlOiAiICsgbGhzVHlwZSArICIgdmVy
c3VzICIgKyBuZXdWYWx1ZVR5cGUpOworICAgICAgICByZXR1cm4gbm9kZS5yZXN1bHRFeHAudmlz
aXQodGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkK
KyAgICB7CisgICAgICAgIGlmICghbm9kZS50eXBlKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJBbm9ueW1vdXMgdmFyaWFibGUgbXVzdCBrbm93IHR5cGUgYmVmb3JlIGZpcnN0IGFwcGVh
cmFuY2UiKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Npb24obm9k
ZSkKICAgICB7CiAgICAgICAgIGxldCB0eXBlID0gbm9kZS5wdHIudmlzaXQodGhpcykudW5pZnlO
b2RlOwpAQCAtMTQ4LDYgKzE4Miw4IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsK
ICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmlu
ZywgIlR5cGUgcGFzc2VkIHRvIGRlcmVmZXJlbmNlIGlzIG5vdCBhIHBvaW50ZXI6ICIgKyB0eXBl
KTsKICAgICAgICAgbm9kZS50eXBlID0gdHlwZS5lbGVtZW50VHlwZTsKICAgICAgICAgbm9kZS5h
ZGRyZXNzU3BhY2UgPSB0eXBlLmFkZHJlc3NTcGFjZTsKKyAgICAgICAgaWYgKCFub2RlLmFkZHJl
c3NTcGFjZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhZGRyZXNzIHNwYWNl
IGluIHR5cGU6ICIgKyB0eXBlKTsKICAgICAgICAgcmV0dXJuIG5vZGUudHlwZTsKICAgICB9CiAg
ICAgCkBAIC0xNjUsNyArMjAxLDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3Igewog
ICAgIHsKICAgICAgICAgbGV0IGVsZW1lbnRUeXBlID0gbm9kZS5sVmFsdWUudmlzaXQodGhpcyku
dW5pZnlOb2RlOwogICAgICAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBQdHJUeXBlKSB7
Ci0gICAgICAgICAgICBub2RlLmJlY29tZUNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbigp
OworICAgICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVz
c2lvbihub2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybiBuZXcg
QXJyYXlSZWZUeXBlKG5vZGUub3JpZ2luLCBlbGVtZW50VHlwZS5hZGRyZXNzU3BhY2UsIGVsZW1l
bnRUeXBlLmVsZW1lbnRUeXBlKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4OSwzNSArMjI1
LDg3IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJTaG91bGQgbm90IGV4aXN0IHlldC4iKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXRE
b3RFeHByZXNzaW9uKG5vZGUpCisgICAgX2ZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3Mobm9k
ZSwgYmFzZVR5cGUsIGV4dHJhQXJncywgZXh0cmFBcmdUeXBlcykKICAgICB7Ci0gICAgICAgIGxl
dCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAg
ICBiYXNlVHlwZSA9IGJhc2VUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKQorICAgICAgICBu
b2RlLmJhc2VUeXBlID0gYmFzZVR5cGU7CiAgICAgICAgIAotICAgICAgICBub2RlLnN0cnVjdFR5
cGUgPSBzdHJ1Y3RUeXBlLnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKLSAgICAgICAgCi0gICAg
ICAgIGxldCB1bmRlcmx5aW5nU3RydWN0ID0gc3RydWN0VHlwZTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikKLSAgICAgICAgICAgIHVuZGVybHlp
bmdTdHJ1Y3QgPSB1bmRlcmx5aW5nU3RydWN0LnR5cGU7Ci0gICAgICAgIAotICAgICAgICBpZiAo
ISh1bmRlcmx5aW5nU3RydWN0IGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJPcGVyYW5kIHRv
IGRvdCBleHByZXNzaW9uIGlzIG5vdCBhIHN0cnVjdCB0eXBlOiAiICsgc3RydWN0VHlwZSk7Cisg
ICAgICAgIC8vIFN1Y2ggYSB0eXBlIG11c3QgZXhpc3QuIFRoaXMgbWF5IHRocm93IGlmIGl0IGRv
ZXNuJ3QuCisgICAgICAgIGxldCB0eXBlRm9yQW5kID0gYmFzZVR5cGUuYXJndW1lbnRUeXBlRm9y
QW5kT3ZlcmxvYWQobm9kZS5vcmlnaW4pOworICAgICAgICBpZiAoIXR5cGVGb3JBbmQpCisgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlwZUZvckFuZCIpOworICAgICAg
ICAKKyAgICAgICAgbGV0IGVycm9yRm9yR2V0OworICAgICAgICBsZXQgZXJyb3JGb3JBbmQ7Cisg
ICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IENhbGxFeHBy
ZXNzaW9uLnJlc29sdmUoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUucG9zc2li
bGVHZXRPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsCisg
ICAgICAgICAgICAgICAgbm9kZS5nZXRGdW5jTmFtZSwgW10sIFtub2RlLmJhc2UsIC4uLmV4dHJh
QXJnc10sIFtiYXNlVHlwZSwgLi4uZXh0cmFBcmdUeXBlc10sIG51bGwpOworICAgICAgICAgICAg
bm9kZS5jYWxsRm9yR2V0ID0gcmVzdWx0LmNhbGw7CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5
cGVGb3JHZXQgPSByZXN1bHQucmVzdWx0VHlwZTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAg
IHRocm93IGU7CisgICAgICAgICAgICBlcnJvckZvckdldCA9IGU7CisgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGlmIChzdHJ1Y3RUeXBlIGluc3RhbmNlb2YgVHlwZVJlZikgCi0gICAgICAg
ICAgICB1bmRlcmx5aW5nU3RydWN0ID0gdW5kZXJseWluZ1N0cnVjdC5pbnN0YW50aWF0ZShzdHJ1
Y3RUeXBlLnR5cGVBcmd1bWVudHMsICJzaGFsbG93Iik7CisgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICBsZXQgYmFzZUZvckFuZCA9IGJhc2VUeXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQobm9k
ZS5vcmlnaW4sIG5vZGUuYmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCByZXN1
bHQgPSBDYWxsRXhwcmVzc2lvbi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUub3JpZ2lu
LCBub2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5cGVQ
YXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgIG5vZGUuYW5kRnVuY05hbWUsIFtdLCBbYmFzZUZv
ckFuZCwgLi4uZXh0cmFBcmdzXSwgW3R5cGVGb3JBbmQsIC4uLmV4dHJhQXJnVHlwZXNdLAorICAg
ICAgICAgICAgICAgIG51bGwpOworICAgICAgICAgICAgbm9kZS5jYWxsRm9yQW5kID0gcmVzdWx0
LmNhbGw7CisgICAgICAgICAgICBub2RlLnJlc3VsdFR5cGVGb3JBbmQgPSByZXN1bHQucmVzdWx0
VHlwZS51bmlmeU5vZGUucmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChub2RlLm9yaWdpbik7Cisg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBXVHlw
ZUVycm9yKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgZXJyb3JGb3JB
bmQgPSBlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGUucmVzdWx0VHlw
ZUZvckdldCAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yQW5kKSB7CisgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcigKKyAgICAgICAgICAgICAgICBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcs
CisgICAgICAgICAgICAgICAgIkNhbm5vdCByZXNvbHZlIGFjY2VzczsgdHJpZWQgYnktdmFsdWU6
XG4iICsKKyAgICAgICAgICAgICAgICBlcnJvckZvckdldC5tZXNzYWdlICsgIlxuIiArCisgICAg
ICAgICAgICAgICAgImFuZCB0cmllZCBieS1wb2ludGVyOlxuIiArCisgICAgICAgICAgICAgICAg
ZXJyb3JGb3JBbmQubWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChu
b2RlLnJlc3VsdFR5cGVGb3JHZXQgJiYgbm9kZS5yZXN1bHRUeXBlRm9yQW5kCisgICAgICAgICAg
ICAmJiAhbm9kZS5yZXN1bHRUeXBlRm9yR2V0LmVxdWFscyhub2RlLnJlc3VsdFR5cGVGb3JBbmQp
KQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3Ry
aW5nLCAiUmVzdWx0IHR5cGUgcmVzb2x2ZWQgYnktdmFsdWUgKCIgKyBub2RlLnJlc3VsdFR5cGVG
b3JHZXQgKyAiKSBkb2VzIG5vdCBtYXRjaCByZXN1bHQgdHlwZSByZXNvbHZlZCBieS1wb2ludGVy
ICgiICsgbm9kZS5yZXN1bHRUeXBlRm9yQW5kICsgIikiKTsKKyAgICAgICAgCisgICAgICAgIHRy
eSB7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVzb2x2ZSgKKyAg
ICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZVNldE92ZXJsb2FkcywgdGhp
cy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICBub2Rl
LnNldEZ1bmNOYW1lLCBbXSwgW25vZGUuYmFzZSwgLi4uZXh0cmFBcmdzLCBudWxsXSwgW2Jhc2VU
eXBlLCAuLi5leHRyYUFyZ1R5cGVzLCBub2RlLnJlc3VsdFR5cGVdLCBudWxsKTsKKyAgICAgICAg
ICAgIG5vZGUuY2FsbEZvclNldCA9IHJlc3VsdC5jYWxsOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQucmVzdWx0VHlwZS5lcXVhbHMoYmFzZVR5cGUpKQorICAgICAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlJlc3VsdCB0eXBlIG9mIHNl
dHRlciAiICsgcmVzdWx0LmNhbGwuZnVuYyArICIgaXMgbm90IHRoZSBiYXNlIHR5cGUgIiArIGJh
c2VUeXBlKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKCEoZSBpbnN0
YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAg
ICBub2RlLmVycm9yRm9yU2V0ID0gZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbGV0
IGZpZWxkID0gdW5kZXJseWluZ1N0cnVjdC5maWVsZEJ5TmFtZShub2RlLmZpZWxkTmFtZSk7Ci0g
ICAgICAgIGlmICghZmllbGQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2Rl
Lm9yaWdpbi5vcmlnaW5TdHJpbmcsICJGaWVsZCAiICsgbm9kZS5maWVsZE5hbWUgKyAiIG5vdCBm
b3VuZCBpbiAiICsgc3RydWN0VHlwZSk7Ci0gICAgICAgIHJldHVybiBmaWVsZC50eXBlOworICAg
ICAgICByZXR1cm4gbm9kZS5yZXN1bHRUeXBlOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4
cHJlc3Npb24obm9kZSkKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAg
ICAgIG5vZGUudHlwZSA9IG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmICgh
bm9kZS50eXBlKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEaWQgbm90IGdldCB0eXBl
IGZvciBub2RlOiAiICsgbm9kZS5hcmd1bWVudCk7Ci0gICAgICAgIHJldHVybiBub2RlLmJvZHku
dmlzaXQodGhpcyk7CisgICAgICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQo
dGhpcykudW5pZnlOb2RlOworICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2Vzcyhub2RlLCBzdHJ1Y3RUeXBlLCBbXSwgW10pOworICAgIH0KKyAgICAKKyAgICB2
aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGFycmF5VHlwZSA9
IG5vZGUuYXJyYXkudmlzaXQodGhpcykudW5pZnlOb2RlOworICAgICAgICBsZXQgaW5kZXhUeXBl
ID0gbm9kZS5pbmRleC52aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0aGlz
Ll9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIGFycmF5VHlwZSwgW25vZGUuaW5k
ZXhdLCBbaW5kZXhUeXBlXSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0VmFyaWFibGVSZWYobm9k
ZSkKQEAgLTMxNywxMCArNDA1LDEwIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsK
ICAgICAgICAgICAgIHJlc3VsdCA9IGV4cHJlc3Npb24udmlzaXQodGhpcyk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2Rl
KQogICAgIHsKLSAgICAgICAgbGV0IHR5cGVBcmd1bWVudFR5cGVzID0gbm9kZS50eXBlQXJndW1l
bnRzLm1hcCh0eXBlQXJndW1lbnQgPT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKTsKKyAgICAg
ICAgbGV0IHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVu
dCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhpcykpOwogICAgICAgICBsZXQgYXJndW1lbnRUeXBl
cyA9IG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiB7CiAgICAgICAgICAgICBsZXQg
bmV3QXJndW1lbnQgPSBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgICAgIGlmICghbmV3
QXJndW1lbnQpCkBAIC0zMjgsNzcgKzQxNiwxMiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlz
aXRvciB7CiAgICAgICAgICAgICByZXR1cm4gbmV3QXJndW1lbnQudmlzaXQobmV3IEF1dG9XcmFw
cGVyKCkpOwogICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0
byBoYW5kbGUgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yJltdIGlzIGNhbGxlZCB3aXRoIGEgdHlw
ZSB0aGF0IGlzbid0IHN1ZmZpY2llbnRseQotICAgICAgICAvLyByZWZlcmVuY2V5LgotICAgICAg
ICBpZiAobm9kZS5uYW1lID09ICJvcGVyYXRvciZbXSIpIHsKLSAgICAgICAgICAgIGxldCBhcmdU
eXBlID0gYXJndW1lbnRUeXBlc1swXS51bmlmeU5vZGU7Ci0gICAgICAgICAgICBpZiAoYXJnVHlw
ZSBpbnN0YW5jZW9mIFB0clR5cGUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMgbm90IHZh
bGlkIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcmdUeXBlIGluc3RhbmNlb2Yg
QXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcg
TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5hcmd1bWVudExpc3RbMF0p
OwotICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdLm51bUVsZW1lbnRzID0gYXJn
VHlwZS5udW1FbGVtZW50czsKLSAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBdID0gbmV3
IEFycmF5UmVmVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ1R5cGUuZWxlbWVudFR5cGUp
OwotICAgICAgICAgICAgfSBlbHNlIGlmICghKGFyZ1R5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5
cGUpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0gPSBuZXcgTWFrZVB0
ckV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0WzBdKTsKLSAgICAgICAg
ICAgICAgICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IFB0clR5cGUobm9kZS5vcmlnaW4sICJ0aHJl
YWQiLCBhcmd1bWVudFR5cGVzWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKICAgICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlczsKICAgICAgICAg
aWYgKG5vZGUucmV0dXJuVHlwZSkKICAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0
aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGxldCBvdmVybG9hZCA9IG51bGw7Ci0gICAgICAgIGxl
dCBmYWlsdXJlcyA9IFtdOwotICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIHRoaXMu
X2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGlmICghKHR5
cGVQYXJhbWV0ZXIgaW5zdGFuY2VvZiBUeXBlVmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnByb3RvY29sKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbGV0IHNpZ25hdHVyZXMgPQotICAgICAg
ICAgICAgICAgIHR5cGVQYXJhbWV0ZXIucHJvdG9jb2wucHJvdG9jb2xEZWNsLnNpZ25hdHVyZXNC
eU5hbWVXaXRoVHlwZVZhcmlhYmxlKG5vZGUubmFtZSwgdHlwZVBhcmFtZXRlcik7Ci0gICAgICAg
ICAgICBpZiAoIXNpZ25hdHVyZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgbm9kZS50eXBl
QXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVyblR5cGUpOwotICAgICAgICAgICAg
aWYgKG92ZXJsb2FkLmZ1bmMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBm
YWlsdXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKLSAgICAgICAgICAgIG92ZXJsb2Fk
ID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW92ZXJsb2FkKSB7Ci0gICAgICAgICAg
ICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCi0gICAgICAgICAgICAgICAgbm9kZS5w
b3NzaWJsZU92ZXJsb2Fkcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCBub2Rl
LnJldHVyblR5cGUpOwotICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7Ci0gICAgICAg
ICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Ci0gICAgICAgICAg
ICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdpdGgg
IjsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyBub2RlLnR5cGVB
cmd1bWVudHMgKyAiPiBhbmQgIjsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1bWVu
dCB0eXBlcyAoIiArIGFyZ3VtZW50VHlwZXMgKyAiKSI7Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUucmV0dXJuVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5kIHJldHVy
biB0eXBlICIgKyBub2RlLnJldHVyblR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKGZhaWx1cmVz
Lmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lkZXJl
ZDpcbiIgKyBmYWlsdXJlcy5qb2luKCJcbiIpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdU
eXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudFR5
cGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgdHlwZUFyZ3VtZW50VHlwZSA9IHR5
cGVBcmd1bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXIgPSBvdmVy
bG9hZC5mdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFt
ZXRlciBpbnN0YW5jZW9mIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyLnR5cGUuZXF1YWxzV2l0
aENvbW1pdCh0eXBlQXJndW1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkF0ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGNvbnN0ZXhwciB0eXBlIGFy
Z3VtZW50IGFuZCBwYXJhbWV0ZXIgdHlwZXMgbm90IGVxdWFsOiBhcmd1bWVudCA9ICIgKyB0eXBl
QXJndW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHR5cGVQYXJhbWV0ZXIudHlwZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlc1tp
XTsKLSAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gb3ZlcmxvYWQuZnVuYy5wYXJhbWV0
ZXJzW2ldLnR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCi0gICAgICAgICAgICAgICAgb3Zl
cmxvYWQuZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250ZXh0KTsK
LSAgICAgICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVudFR5cGUuZXF1YWxzV2l0aENvbW1pdChw
YXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyArICIgYXJn
dW1lbnQgYW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0ZXIgdHlwZSBhcmd1bWVudCBz
dWJzdGl0dXRpb246IGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50VHlwZSArICIsIHBhcmFtZXRlciA9
ICIgKyBwYXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm9kZS5yZXNv
bHZlKG92ZXJsb2FkKTsKKworICAgICAgICBsZXQgcmVzdWx0ID0gbm9kZS5yZXNvbHZlKG5vZGUu
cG9zc2libGVPdmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMs
IHR5cGVBcmd1bWVudHMpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIH0KIApJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHByZXNzaW9uLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5q
cwkocmV2aXNpb24gMjIyMTQwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29t
bWFFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBAIGNsYXNzIENv
bW1hRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24KICAgICAKICAgICBnZXQgbGlzdCgpIHsg
cmV0dXJuIHRoaXMuX2xpc3Q7IH0KICAgICAKKyAgICAvLyBOT1RFOiBJdCdzIHN1cGVyIHRlbXB0
aW5nIHRvIHNheSB0aGF0IENvbW1hRXhwcmVzc2lvbiBpcyBhbiBsVmFsdWUgaWYgaXRzIGxhc3Qg
ZW50cnkgaXMgYW4gbFZhbHVlLiBCdXQsCisgICAgLy8gUHJvcGVydHlSZXNvbHZlciByZWxpZXMg
b24gdGhpcyBub3QgYmVpbmcgdGhlIGNhc2UuCisgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuICIoIiArIHRoaXMubGlzdC50b1N0cmluZygpICsgIikiOwpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RlcmVmZXJlbmNlRXhw
cmVzc2lvbi5qcwkocmV2aXNpb24gMjIyMTQwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCAr
MjUsMTIgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgRGVyZWZlcmVuY2VFeHByZXNzaW9uIGV4
dGVuZHMgRXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBwdHIpCisgICAgY29u
c3RydWN0b3Iob3JpZ2luLCBwdHIsIHR5cGUgPSBudWxsLCBhZGRyZXNzU3BhY2UgPSBudWxsKQog
ICAgIHsKICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fcHRyID0gcHRyOwor
ICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgICAgICB0aGlzLmFkZHJlc3NTcGFjZSA9IGFk
ZHJlc3NTcGFjZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IHB0cigpIHsgcmV0dXJuIHRoaXMuX3B0
cjsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNz
aW9uLmpzCShyZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Eb3RFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxOSArMjQsMjIgQEAKICAq
LwogInVzZSBzdHJpY3QiOwogCi1jbGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lv
biB7CitjbGFzcyBEb3RFeHByZXNzaW9uIGV4dGVuZHMgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
IHsKICAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIHN0cnVjdCwgZmllbGROYW1lKQogICAgIHsKLSAg
ICAgICAgc3VwZXIob3JpZ2luKTsKLSAgICAgICAgdGhpcy5fc3RydWN0ID0gc3RydWN0OworICAg
ICAgICBzdXBlcihvcmlnaW4sIHN0cnVjdCk7CiAgICAgICAgIHRoaXMuX2ZpZWxkTmFtZSA9IGZp
ZWxkTmFtZTsKICAgICB9CiAgICAgCi0gICAgZ2V0IHN0cnVjdCgpIHsgcmV0dXJuIHRoaXMuX3N0
cnVjdDsgfQorICAgIGdldCBzdHJ1Y3QoKSB7IHJldHVybiB0aGlzLmJhc2U7IH0KICAgICBnZXQg
ZmllbGROYW1lKCkgeyByZXR1cm4gdGhpcy5fZmllbGROYW1lOyB9CiAgICAgZ2V0IGlzTFZhbHVl
KCkgeyByZXR1cm4gdGhpcy5zdHJ1Y3QuaXNMVmFsdWU7IH0KICAgICBnZXQgYWRkcmVzc1NwYWNl
KCkgeyByZXR1cm4gdGhpcy5zdHJ1Y3QuYWRkcmVzc1NwYWNlOyB9CiAgICAgCisgICAgZ2V0IGdl
dEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZpZWxkTmFtZTsgfQorICAg
IGdldCBhbmRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvciYuIiArIHRoaXMuZmllbGROYW1l
OyB9CisgICAgZ2V0IHNldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yLiIgKyB0aGlzLmZp
ZWxkTmFtZSArICI9IjsgfQorICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiAiKCIgKyB0aGlzLnN0cnVjdCArICIuIiArIHRoaXMuZmllbGROYW1lICsgIikiOwpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlci5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCShyZXZpc2lvbiAyMjIx
NDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC02MCwxMiArNjAsMTQgQEAgY2xhc3MgRUJ1ZmZlciB7CiAgICAgZ2V0KGluZGV4
KQogICAgIHsKICAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl9hcnJheS5s
ZW5ndGgpCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm91dCBvZiBib3VuZHMgYnVmZmVy
IGFjY2VzcyIpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJPdXQgb2YgYm91bmRzIGJ1
ZmZlciBhY2Nlc3MgKGJ1ZmZlciA9ICIgKyB0aGlzICsgIiwgaW5kZXggPSAiICsgaW5kZXggKyAi
KSIpOwogICAgICAgICByZXR1cm4gdGhpcy5fYXJyYXlbaW5kZXhdOwogICAgIH0KICAgICAKICAg
ICBzZXQoaW5kZXgsIHZhbHVlKQogICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRl
eCA+PSB0aGlzLl9hcnJheS5sZW5ndGgpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm91
dCBvZiBib3VuZHMgYnVmZmVyIGFjY2VzcyAoYnVmZmVyID0gIiArIHRoaXMgKyAiLCBpbmRleCA9
ICIgKyBpbmRleCArICIpIik7CiAgICAgICAgIHRoaXMuX2FycmF5W2luZGV4XSA9IHZhbHVlOwog
ICAgIH0KICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJC
dWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VC
dWZmZXJCdWlsZGVyLmpzCShyZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEwLDExICsx
MTAsOSBAQCBjbGFzcyBFQnVmZmVyQnVpbGRlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBz
dXBlci52aXNpdExvZ2ljYWxFeHByZXNzaW9uKG5vZGUpOwogICAgIH0KICAgICAKLSAgICB2aXNp
dExldEV4cHJlc3Npb24obm9kZSkKKyAgICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAg
ICAgewogICAgICAgICB0aGlzLl9jcmVhdGVFUHRyRm9yTm9kZShub2RlKTsKLSAgICAgICAgbm9k
ZS5hcmd1bWVudC52aXNpdCh0aGlzKTsKLSAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwog
ICAgIH0KICAgICAKICAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanMJKHJldmlzaW9uIDIy
MjE0MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwxMSBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBW
aXNpdG9yIHsKICAgICAgICAgcmV0dXJuIHRhcmdldDsKICAgICB9CiAgICAgCisgICAgdmlzaXRJ
ZGVudGl0eUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlLnRhcmdl
dC52aXNpdCh0aGlzKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXREZXJlZmVyZW5jZUV4cHJlc3Np
b24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCBwdHIgPSBub2RlLnB0ci52aXNpdCh0aGlzKS5s
b2FkVmFsdWUoKTsKQEAgLTExMiw3ICsxMTcsOCBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBW
aXNpdG9yIHsKICAgICAKICAgICB2aXNpdE1ha2VQdHJFeHByZXNzaW9uKG5vZGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gbm9kZS5lUHRyLmJveChub2RlLmxWYWx1ZS52aXNpdCh0aGlzKSk7Cisg
ICAgICAgIGxldCBwdHIgPSBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgcmV0dXJu
IG5vZGUuZVB0ci5ib3gocHRyKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRNYWtlQXJyYXlSZWZF
eHByZXNzaW9uKG5vZGUpCkBAIC0xMjUsMTIgKzEzMSw2IEBAIGNsYXNzIEV2YWx1YXRvciBleHRl
bmRzIFZpc2l0b3IgewogICAgICAgICByZXR1cm4gbm9kZS5lUHRyLmJveChuZXcgRUFycmF5UmVm
KG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpLmxvYWRWYWx1ZSgpLCAxKSk7CiAgICAgfQogICAgIAot
ICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgbGV0IHN0cnVjdFB0
ciA9IG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpOwotICAgICAgICByZXR1cm4gc3RydWN0UHRyLnBs
dXMobm9kZS5maWVsZC5vZmZzZXQpOwotICAgIH0KLSAgICAKICAgICB2aXNpdENvbW1hRXhwcmVz
c2lvbihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdDsKQEAgLTI0OSwxMCArMjQ5LDkg
QEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHRocm93IENvbnRp
bnVlRXhjZXB0aW9uOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkK
KyAgICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewotICAgICAgICBub2RlLmVQ
dHIuY29weUZyb20obm9kZS5hcmd1bWVudC52aXNpdCh0aGlzKSwgbm9kZS50eXBlLnNpemUpOwot
ICAgICAgICByZXR1cm4gbm9kZS5ib2R5LnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLnR5cGUu
cG9wdWxhdGVEZWZhdWx0VmFsdWUobm9kZS5lUHRyLmJ1ZmZlciwgbm9kZS5lUHRyLm9mZnNldCk7
CiAgICAgfQogICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKQEAgLTI2NSw2ICsy
NjQsOCBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgIGlm
ICghdHlwZSB8fCAhYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJD
YW5ub3QgZ2V0IHR5cGUgb3IgYXJndW1lbnQ7IGkgPSAiICsgaSArICIsIGFyZ3VtZW50ID0gIiAr
IGFyZ3VtZW50ICsgIiwgdHlwZSA9ICIgKyB0eXBlICsgIjsgaW4gIiArIG5vZGUpOwogICAgICAg
ICAgICAgbGV0IGFyZ3VtZW50VmFsdWUgPSBhcmd1bWVudC52aXNpdCh0aGlzKTsKKyAgICAgICAg
ICAgIGlmICghYXJndW1lbnRWYWx1ZSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
Ik51bGwgYXJndW1lbnQgdmFsdWUsIGkgPSAiICsgaSArICIsIG5vZGUgPSAiICsgbm9kZSk7CiAg
ICAgICAgICAgICBjYWxsQXJndW1lbnRzLnB1c2goKCkgPT4gdGhpcy5fc25hcHNob3QodHlwZSwg
bnVsbCwgYXJndW1lbnRWYWx1ZSkpOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXhwcmVzc2lvbkZpbmRlci5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCShyZXZp
c2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9u
RmluZGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxNiBAQCBjbGFzcyBFeHByZXNz
aW9uRmluZGVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUp
OwogICAgIH0KICAgICAKKyAgICB2aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZSkK
KyAgICB7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2
aXNpdElkZW50aXR5RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FsbGJh
Y2sobm9kZSk7CisgICAgfQorICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAg
ICB7CiAgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRmluZEhpZ2hab21iaWVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ZpbmRIaWdoWm9tYmllcy5qcwkobm9uZXhpc3RlbnQpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GaW5kSGlnaFpvbWJpZXMuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBmaW5kSGlnaFpvbWJpZXMo
cHJvZ3JhbSkKK3sKKyAgICBwcm9ncmFtLnZpc2l0KG5ldyBIaWdoWm9tYmllRmluZGVyKCkpOwor
fQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRm9yTG9vcC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzCShyZXZpc2lv
biAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIEZvckxvb3AgZXh0ZW5kcyBOb2Rl
IHsKIAogICAgIHRvU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAiZm9yICgiICsgKHRo
aXMuaW5pdGlhbGl6YXRpb24gPyB0aGlzLmluaXRpYWxpemF0aW9uIDogIiAiKSArICI7ICIgKyAo
dGhpcy5jb25kaXRpb24gPyB0aGlzLmNvbmRpdGlvbiA6ICIiKSArICI7ICIgKyAodGhpcy5pbmNy
ZW1lbnQgPyB0aGlzLmluY3JlbWVudCA6ICIiKSArICIpICIgKyBib2R5OworICAgICAgICByZXR1
cm4gImZvciAoIiArICh0aGlzLmluaXRpYWxpemF0aW9uID8gdGhpcy5pbml0aWFsaXphdGlvbiA6
ICIgIikgKyAiOyAiICsgKHRoaXMuY29uZGl0aW9uID8gdGhpcy5jb25kaXRpb24gOiAiIikgKyAi
OyAiICsgKHRoaXMuaW5jcmVtZW50ID8gdGhpcy5pbmNyZW1lbnQgOiAiIikgKyAiKSAiICsgdGhp
cy5ib2R5OwogICAgIH0KIH07CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0Z1bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVu
Yy5qcwkocmV2aXNpb24gMjIyMTQwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTIgQEAgY2xhc3MgRnVuYyBleHRl
bmRzIE5vZGUgewogICAgIHsKICAgICAgICAgaWYgKCEob3JpZ2luIGluc3RhbmNlb2YgTGV4ZXJU
b2tlbikpCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBvcmlnaW46ICIgKyBvcmln
aW4pOworICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykgeworICAgICAg
ICAgICAgaWYgKCFwYXJhbWV0ZXIpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJO
dWxsIHBhcmFtZXRlciIpOworICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXIudHlwZSkKKyAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcGFyYW1ldGVyIHR5cGUiKTsKKyAgICAg
ICAgfQogICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CiAg
ICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRnVuY0luc3RhbnRpYXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCShyZXZpc2lvbiAyMjIxNDApCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw4ICszOSwxNCBAQCBjbGFzcyBGdW5jSW5zdGFudGlhdG9yIHsKICAgICBn
ZXRVbmlxdWUoZnVuYywgdHlwZUFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIGNsYXNzIEZpbmRU
eXBlVmFyaWFibGUgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICAgICAgICAgIHZpc2l0VHlwZVJlZihu
b2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAobGV0IHR5cGVBcmd1bWVu
dCBvZiBub2RlLnR5cGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgICAgIHR5cGVBcmd1bWVu
dC52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAg
dmlzaXRUeXBlVmFyaWFibGUobm9kZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlOiAiICsgbm9kZSk7CisgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHR5cGUgdmFyaWFibGU6ICIgKyBub2RlICsgIiB3
aGVuIGluc3RhbnRpYXRpbmcgIiArIGZ1bmMgKyAiIHdpdGggYXJndW1lbnRzICIgKyB0eXBlQXJn
dW1lbnRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGxldCB0eXBl
QXJndW1lbnQgb2YgdHlwZUFyZ3VtZW50cykKQEAgLTc1LDMzICs4MSwzOCBAQCBjbGFzcyBGdW5j
SW5zdGFudGlhdG9yIHsKICAgICAgICAgICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gcmVzb2x2
ZU92ZXJsb2FkSW1wbChyZXN1bHQucG9zc2libGVPdmVybG9hZHMsIHJlc3VsdC50eXBlQXJndW1l
bnRzLCByZXN1bHQuYXJndW1lbnRUeXBlcywgcmVzdWx0LnJldHVyblR5cGVGb3JPdmVybG9hZFJl
c29sdXRpb24pOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMpCiAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCByZXNvbHZlIHBy
b3RvY29sIHNpZ25hdHVyZSBmdW5jdGlvbiBjYWxsIGR1cmluZyBpbnN0YW50aWF0aW9uOiAiICsg
cmVzdWx0LmZ1bmMgKyAob3ZlcmxvYWQuZmFpbHVyZXMubGVuZ3RoID8gIjsgdHJpZWQ6XG4iICsg
b3ZlcmxvYWQuZmFpbHVyZXMuam9pbigiXG4iKSA6ICIiKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5yZXNvbHZlKG92ZXJsb2FkKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJl
c29sdmVUb092ZXJsb2FkKG92ZXJsb2FkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5mdW5jLmlzTmF0aXZlKQorICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubmF0aXZlRnVuY0luc3RhbmNlID0gdGhpc0luc3RhbnRpYXRv
ci5nZXRVbmlxdWUocmVzdWx0LmZ1bmMsIHJlc3VsdC5hY3R1YWxUeXBlQXJndW1lbnRzKTsKKyAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBsZXQgc3Vic3RpdHV0aW9uID0gbmV3
IEluc3RhbnRpYXRpb25TdWJzdGl0dXRpb24oZnVuYy50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3Vt
ZW50cyk7CisgICAgICAgIGxldCBpbnN0YW50aWF0ZUltbWVkaWF0ZXMgPSBuZXcgSW5zdGFudGlh
dGVJbW1lZGlhdGVzKCk7CiAgICAgICAgIAotICAgICAgICBjbGFzcyBJbnN0YW50aWF0ZSBleHRl
bmRzIFZpc2l0b3JCYXNlIHsKKyAgICAgICAgY2xhc3MgSW5zdGFudGlhdGUgewogICAgICAgICAg
ICAgdmlzaXRGdW5jRGVmKGZ1bmMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIG5ldyBGdW5jRGVmKAogICAgICAgICAgICAgICAgICAgICBmdW5jLm9yaWdpbiwgZnVuYy5u
YW1lLAotICAgICAgICAgICAgICAgICAgICBmdW5jLnJldHVyblR5cGUudmlzaXQoc3Vic3RpdHV0
aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5yZXR1cm5UeXBlLnZpc2l0KHN1YnN0aXR1
dGlvbikudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlhdGVzKSwKICAgICAgICAgICAgICAgICAgICAg
W10sIC8vIFdlJ3JlIGluc3RhbnRpYXRlZCBzbyB3ZSBubyBsb25nZXIgdGFrZSB0eXBlIHBhcmFt
ZXRlcnMuCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVy
ID0+IHBhcmFtZXRlci52aXNpdChzdWJzdGl0dXRpb24pKSwKLSAgICAgICAgICAgICAgICAgICAg
ZnVuYy5ib2R5LnZpc2l0KHN1YnN0aXR1dGlvbikpOworICAgICAgICAgICAgICAgICAgICBmdW5j
LnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQoc3Vic3RpdHV0aW9u
KS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpKSwKKyAgICAgICAgICAgICAgICAgICAgZnVu
Yy5ib2R5LnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlhdGVzKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHZpc2l0TmF0aXZlRnVu
YyhmdW5jKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZl
RnVuY0luc3RhbmNlKAogICAgICAgICAgICAgICAgICAgICBmdW5jLAotICAgICAgICAgICAgICAg
ICAgICBmdW5jLnJldHVyblR5cGUudmlzaXQoc3Vic3RpdHV0aW9uKSwKLSAgICAgICAgICAgICAg
ICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHN1
YnN0aXR1dGlvbikpLAotICAgICAgICAgICAgICAgICAgICBmdW5jLmlzQ2FzdCk7CisgICAgICAg
ICAgICAgICAgICAgIGZ1bmMucmV0dXJuVHlwZS52aXNpdChzdWJzdGl0dXRpb24pLnZpc2l0KGlu
c3RhbnRpYXRlSW1tZWRpYXRlcyksCisgICAgICAgICAgICAgICAgICAgIGZ1bmMucGFyYW1ldGVy
cy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChzdWJzdGl0dXRpb24pLnZpc2l0KGlu
c3RhbnRpYXRlSW1tZWRpYXRlcykpLAorICAgICAgICAgICAgICAgICAgICBmdW5jLmlzQ2FzdCwK
KyAgICAgICAgICAgICAgICAgICAgZnVuYy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uKHN1YnN0
aXR1dGlvbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGxldCByZXN1bHRp
bmdGdW5jID0gZnVuYy52aXNpdChuZXcgSW5zdGFudGlhdGUoKSk7CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9IaWdoWm9tYmllRmluZGVyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0hpZ2hab21iaWVGaW5kZXIuanMJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSGlnaFpvbWJpZUZpbmRlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKKy8vIElmIGEgaGlnaC1sZXZl
bCBjb25zdHJ1Y3Qgc29tZWhvdyBtYW5hZ2VzIHRvIGxpdmUgb24gd2hlbiB3ZSdyZSBsb3dlcmVk
LCBpdCdzIGEgaGlnaCB6b21iaWUuCitjbGFzcyBIaWdoWm9tYmllRmluZGVyIGV4dGVuZHMgVmlz
aXRvciB7CisgICAgX2ZvdW5kKG5vZGUpCisgICAgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
bm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIjogSGlnaCB6b21iaWU6ICIgKyBub2RlKTsKKyAg
ICB9CisgICAgCisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0
aGlzLl9mb3VuZChub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24o
bm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2ZvdW5kKG5vZGUpOworICAgIH0KKyAgICAKKyAg
ICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNpdENh
bGxFeHByZXNzaW9uKG5vZGUpOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvSWRlbnRpdHlFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qcwkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JZGVudGl0eUV4cHJlc3Npb24uanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBJZGVudGl0eUV4cHJl
c3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKKyAgICBjb25zdHJ1Y3Rvcih0YXJnZXQpCisgICAg
eworICAgICAgICBzdXBlcih0YXJnZXQub3JpZ2luKTsKKyAgICAgICAgdGhpcy5fdGFyZ2V0ID0g
dGFyZ2V0OworICAgIH0KKyAgICAKKyAgICBnZXQgdGFyZ2V0KCkgeyByZXR1cm4gdGhpcy5fdGFy
Z2V0OyB9CisgICAgCisgICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudGFyZ2V0LnVu
aWZ5Tm9kZTsgfQorICAgIGdldCBpc0NvbnN0ZXhwcigpIHsgcmV0dXJuIHRoaXMudGFyZ2V0Lmlz
Q29uc3RleHByOyB9CisgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gdGhpcy50YXJnZXQuaXNM
VmFsdWU7IH0KKyAgICBnZXQgYWRkcmVzc1NwYWNlKCkgeyByZXR1cm4gdGhpcy50YXJnZXQuYWRk
cmVzc1NwYWNlOyB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICIoIiArIHRoaXMudGFyZ2V0ICsgIikiOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZGV4RXhwcmVzc2lvbi5qcwkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmRleEV4cHJlc3Npb24uanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBJbmRleEV4cHJlc3Npb24g
ZXh0ZW5kcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9yaWdp
biwgYXJyYXksIGluZGV4KQorICAgIHsKKyAgICAgICAgc3VwZXIob3JpZ2luLCBhcnJheSk7Cisg
ICAgICAgIHRoaXMuX2luZGV4ID0gaW5kZXg7CisgICAgfQorICAgIAorICAgIGdldCBhcnJheSgp
IHsgcmV0dXJuIHRoaXMuYmFzZTsgfQorICAgIGdldCBpbmRleCgpIHsgcmV0dXJuIHRoaXMuX2lu
ZGV4OyB9CisgICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gdGhpcy5hcnJheS5pc0xWYWx1ZTsg
fQorICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiB0aGlzLmFycmF5LmFkZHJlc3NTcGFj
ZTsgfQorICAgIAorICAgIGdldCBnZXRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvcltdIjsg
fQorICAgIGdldCBhbmRGdW5jTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRvciZbXSI7IH0KKyAgICBn
ZXQgc2V0RnVuY05hbWUoKSB7IHJldHVybiAib3BlcmF0b3JbXT0iOyB9CisKKyAgICB1cGRhdGVD
YWxscygpCisgICAgeworICAgICAgICBpZiAodGhpcy5jYWxsRm9yR2V0KQorICAgICAgICAgICAg
dGhpcy5jYWxsRm9yR2V0LmFyZ3VtZW50TGlzdFsxXSA9IHRoaXMuaW5kZXg7CisgICAgICAgIGlm
ICh0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICB0aGlzLmNhbGxGb3JBbmQuYXJndW1lbnRM
aXN0WzFdID0gdGhpcy5pbmRleDsKKyAgICAgICAgaWYgKHRoaXMuY2FsbEZvclNldCkKKyAgICAg
ICAgICAgIHRoaXMuY2FsbEZvclNldC5hcmd1bWVudExpc3RbMV0gPSB0aGlzLmluZGV4OworICAg
ICAgICBzdXBlci51cGRhdGVDYWxscygpOworICAgIH0KKworICAgIHRvU3RyaW5nKCkKKyAgICB7
CisgICAgICAgIHJldHVybiAiKCIgKyB0aGlzLmFycmF5ICsgIlsiICsgdGhpcy5pbmRleCArICJd
KSI7CisgICAgfQorfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJU
eXBlc0ZvckNhbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKHJldmlzaW9uIDIyMjE0MCkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIGZ1bmN0aW9uIGluZmVyVHlwZXNGb3JDYWxsKGZ1bmMsIHR5cGVBcmcK
ICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldKQogICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJOdWxsIGFyZ3VtZW50IHR5cGUgYXQgaSA9ICIgKyBpKTsKICAgICAgICAgaWYgKCFhcmd1
bWVudFR5cGVzW2ldLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgZnVuYy5wYXJhbWV0ZXJzW2ld
LnR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0
aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAoaSArIDEpICsgIiAiICsgKGZ1bmMucGFy
YW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS5u
YW1lIDogIiIpICsgIiBkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVudFR5cGVzW2ld
ICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUgKyAiKSIpfTsKKyAgICAg
ICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVu
YywgIkFyZ3VtZW50ICMiICsgKGkgKyAxKSArICIgIiArIChmdW5jLnBhcmFtZXRlcnNbaV0ubmFt
ZSA/ICJmb3IgcGFyYW1ldGVyICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSArICIgIiA6ICIi
KSArICJkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVudFR5cGVzW2ldICsgIiwgcmVx
dWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUgKyAiKSIpfTsKICAgICB9CiAgICAgaWYg
KHJldHVyblR5cGUgJiYgIXJldHVyblR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBmdW5j
LnJldHVyblR5cGUpKQogICAgICAgICByZXR1cm4ge2ZhaWx1cmU6IG5ldyBPdmVybG9hZFJlc29s
dXRpb25GYWlsdXJlKGZ1bmMsICJSZXR1cm4gdHlwZSAiICsgZnVuYy5yZXR1cm5UeXBlICsgIiBk
b2VzIG5vdCBtYXRjaCAiICsgcmV0dXJuVHlwZSl9OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvSW5saW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0lubGluZS5qcwkocmV2aXNpb24gMjIyMTQwKQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw2IEBA
IGZ1bmN0aW9uIF9pbmxpbmVGdW5jdGlvbihwcm9ncmFtLCBmdW5jLCAKICAgICBpZiAoZnVuYy5p
bmxpbmVkIHx8IGZ1bmMuaXNOYXRpdmUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBmdW5j
LnJld3JpdGUobmV3IEluc3RhbnRpYXRlSW1tZWRpYXRlcygpKTsKLSAgICAKICAgICAvLyBUaGlz
IGlzIHRoZSBwcmVjaXNlIHRpbWUgd2hlbiB3ZSBjYW4gYnVpbGQgRUJ1ZmZlcnMgaW4gb3JkZXIg
dG8gZ2V0IHRoZW0gdG8gYmUgdW5pcXVlZCBieQogICAgIC8vIHR5cGUgaW5zdGFudGlhdGlvbiBi
dXQgbm90aGluZyBlbHNlLgogICAgIGZ1bmMudmlzaXQobmV3IFN0cnVjdExheW91dEJ1aWxkZXIo
KSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmVyLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMJKHJldmlz
aW9uIDIyMjE0MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDI0ICszMiwxNSBAQCBjbGFzcyBJbmxpbmVyIGV4dGVuZHMg
UmV3cml0ZXIgewogICAgICAgICB0aGlzLl92aXNpdGluZyA9IHZpc2l0aW5nOwogICAgIH0KICAg
ICAKLSAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKLSAgICB7Ci0gICAgICAgIGxldCByZXN1
bHQgPSBzdXBlci52aXNpdERvdEV4cHJlc3Npb24obm9kZSk7Ci0gICAgICAgIHJlc3VsdC5maWVs
ZCA9IHJlc3VsdC5zdHJ1Y3RUeXBlLnVuaWZ5Tm9kZS5maWVsZEJ5TmFtZShyZXN1bHQuZmllbGRO
YW1lKTsKLSAgICAgICAgaWYgKHJlc3VsdC5maWVsZC5vZmZzZXQgPT0gbnVsbCkKLSAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiVW4tbGFpZC1vdXQgZmllbGQ6ICIgKyByZXN1bHQuZmllbGQg
KyAiIChpbiAiICsgcmVzdWx0LnN0cnVjdFR5cGUgKyAiKSIpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLSAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAgewog
ICAgICAgICBsZXQgcmVzdWx0ID0gc3VwZXIudmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKTsKKyAg
ICAgICAgaWYgKHJlc3VsdC5uYXRpdmVGdW5jSW5zdGFuY2UpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgICAgICByZXR1cm4gdGhpcy5fdmlzaXRpbmcuZG9WaXNpdChub2RlLmZ1bmMs
ICgpID0+IHsKICAgICAgICAgICAgIGxldCBmdW5jID0gdGhpcy5fcHJvZ3JhbS5mdW5jSW5zdGFu
dGlhdG9yLmdldFVuaXF1ZShyZXN1bHQuZnVuYywgcmVzdWx0LmFjdHVhbFR5cGVBcmd1bWVudHMp
OwotICAgICAgICAgICAgaWYgKGZ1bmMuaXNOYXRpdmUpIHsKLSAgICAgICAgICAgICAgICByZXN1
bHQubmF0aXZlRnVuY0luc3RhbmNlID0gZnVuYzsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZ1bmMuaXNOYXRpdmUpCisgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIG5hdGl2ZSBmdW5jOiAiICsg
ZnVuYyk7CiAgICAgICAgICAgICBfaW5saW5lRnVuY3Rpb24odGhpcy5fcHJvZ3JhbSwgZnVuYywg
dGhpcy5fdmlzaXRpbmcpOwogICAgICAgICAgICAgbGV0IHJlc3VsdGluZ0Jsb2NrID0gbmV3IEZ1
bmN0aW9uTGlrZUJsb2NrKAogICAgICAgICAgICAgICAgIHJlc3VsdC5vcmlnaW4sIGZ1bmMucmV0
dXJuVHlwZSwgcmVzdWx0LmFyZ3VtZW50TGlzdCwgZnVuYy5wYXJhbWV0ZXJzLCBmdW5jLmJvZHkp
OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCShy
ZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5z
aWNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNiArMjM3LDg4IEBAIGNsYXNzIEludHJpbnNp
Y3MgewogICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAgICB0aGlzLl9tYXAuc2V0KAor
ICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0b3ImPD4oaW50LGludCkiLAorICAgICAgICAg
ICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVm
dCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJveChsZWZ0LmxvYWRWYWx1
ZSgpICYgcmlnaHQubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAg
ICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSB1aW50IG9wZXJhdG9yJjw+
KHVpbnQsdWludCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVu
Yy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAg
ICBFUHRyLmJveCgobGVmdC5sb2FkVmFsdWUoKSAmIHJpZ2h0LmxvYWRWYWx1ZSgpKSA+Pj4gMCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAg
ICAgICAgICAibmF0aXZlIGludCBvcGVyYXRvcnw8PihpbnQsaW50KSIsCisgICAgICAgICAgICBm
dW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCBy
aWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkg
fCByaWdodC5sb2FkVmFsdWUoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAg
IHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0aXZlIHVpbnQgb3BlcmF0b3J8PD4odWlu
dCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmlt
cGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQ
dHIuYm94KChsZWZ0LmxvYWRWYWx1ZSgpIHwgcmlnaHQubG9hZFZhbHVlKCkpID4+PiAwKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAg
ICAgICJuYXRpdmUgaW50IG9wZXJhdG9yXjw+KGludCxpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMg
PT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0
XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2FkVmFsdWUoKSBeIHJp
Z2h0LmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhp
cy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgdWludCBvcGVyYXRvcl48Pih1aW50LHVp
bnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVt
ZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5i
b3goKGxlZnQubG9hZFZhbHVlKCkgXiByaWdodC5sb2FkVmFsdWUoKSkgPj4+IDApOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAg
Im5hdGl2ZSBpbnQgb3BlcmF0b3I8PDw+KGludCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+
IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0p
ID0+CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkgPDwgcmln
aHQubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlz
Ll9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSB1aW50IG9wZXJhdG9yPDw8Pih1aW50LHVp
bnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVt
ZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5i
b3goKGxlZnQubG9hZFZhbHVlKCkgPDwgcmlnaHQubG9hZFZhbHVlKCkpID4+PiAwKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAg
ICJuYXRpdmUgaW50IG9wZXJhdG9yPj48PihpbnQsdWludCkiLAorICAgICAgICAgICAgZnVuYyA9
PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRd
KSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJveChsZWZ0LmxvYWRWYWx1ZSgpID4+IHJp
Z2h0LmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhp
cy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgdWludCBvcGVyYXRvcj4+PD4odWludCx1
aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxl
bWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQdHIu
Ym94KGxlZnQubG9hZFZhbHVlKCkgPj4+IHJpZ2h0LmxvYWRWYWx1ZSgpKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRp
dmUgaW50IG9wZXJhdG9yfjw+KGludCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAg
ICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbdmFsdWVdKSA9PiBFUHRyLmJveCh+dmFs
dWUubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlz
Ll9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSB1aW50IG9wZXJhdG9yfjw+KHVpbnQpIiwK
KyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRp
b24gPSAoW3ZhbHVlXSkgPT4gRVB0ci5ib3goKH52YWx1ZS5sb2FkVmFsdWUoKSkgPj4+IDApOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAogICAgICAg
ICAgICAgIm5hdGl2ZSBmbG9hdCBvcGVyYXRvci88PihmbG9hdCxmbG9hdCkiLAogICAgICAgICAg
ICAgZnVuYyA9PiB7CiAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVm
dCwgcmlnaHRdKSA9PgpAQCAtMzk3LDMwICs0NzksMzIgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAg
ICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkgPj0gcmlnaHQubG9h
ZFZhbHVlKCkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIAotICAgICAgICBsZXQgYXJyYXlF
bGVtZW50UHRyID0gZnVuYyA9PiB7Ci0gICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0g
KFtyZWYsIGluZGV4XSwgbm9kZSkgPT4gewotICAgICAgICAgICAgICAgIHJlZiA9IHJlZi5sb2Fk
VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlZikKLSAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBkZXJl
ZmVyZW5jZSIpOwotICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXgubG9hZFZhbHVlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gcmVmLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQXJyYXkg
aW5kZXggIiArIGluZGV4ICsgIiBpcyBvdXQgb2YgYm91bmRzIG9mICIgKyByZWYpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBFUHRyLmJveChyZWYucHRyLnBsdXMoaW5kZXggKiBub2RlLmFjdHVh
bFR5cGVBcmd1bWVudHNbMF0uc2l6ZSkpOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAg
ICAgICAgCi0gICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZlIFReIHRo
cmVhZCBvcGVyYXRvciZbXTxUPihUW10gdGhyZWFkLHVpbnQpIiwKLSAgICAgICAgICAgIGFycmF5
RWxlbWVudFB0cik7Ci0gICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZl
IFReIHRocmVhZGdyb3VwIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihUW10gdGhyZWFkZ3JvdXAs
dWludCkiLAotICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsKLSAgICAgICAgdGhpcy5fbWFw
LnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgVF4gZGV2aWNlIG9wZXJhdG9yJltdPFQ6cHJpbWl0
aXZlPihUW10gZGV2aWNlLHVpbnQpIiwKLSAgICAgICAgICAgIGFycmF5RWxlbWVudFB0cik7Ci0g
ICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZlIFReIGNvbnN0YW50IG9w
ZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihUW10gY29uc3RhbnQsdWludCkiLAotICAgICAgICAgICAg
YXJyYXlFbGVtZW50UHRyKTsKKyAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlIG9mIGFkZHJl
c3NTcGFjZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAgICAg
YG5hdGl2ZSBUXiAke2FkZHJlc3NTcGFjZX0gb3BlcmF0b3ImW108VCR7cHJvdG9jb2xTdWZmaXgo
YWRkcmVzc1NwYWNlKX0+KFRbXSAke2FkZHJlc3NTcGFjZX0sdWludClgLAorICAgICAgICAgICAg
ICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0g
KFtyZWYsIGluZGV4XSwgbm9kZSkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgcmVmID0g
cmVmLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWYpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4u
b3JpZ2luU3RyaW5nLCAiTnVsbCBkZXJlZmVyZW5jZSIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXggPSBpbmRleC5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpbmRleCA+IHJlZi5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQXJyYXkgaW5kZXggIiAr
IGluZGV4ICsgIiBpcyBvdXQgb2YgYm91bmRzIG9mICIgKyByZWYpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEVQdHIuYm94KHJlZi5wdHIucGx1cyhpbmRleCAqIG5vZGUuYWN0dWFs
VHlwZUFyZ3VtZW50c1swXS5zaXplKSk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAg
ICAgYG5hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUJHtwcm90b2NvbFN1ZmZpeChhZGRyZXNz
U3BhY2UpfT4oVFtdICR7YWRkcmVzc1NwYWNlfSlgLAorICAgICAgICAgICAgICAgIGZ1bmMgPT4g
eworICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtyZWZdLCBub2Rl
KSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWYgPSByZWYubG9hZFZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gRVB0ci5ib3goMCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
RVB0ci5ib3gocmVmLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgYWRkKHRoaW5nKQpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV0RXhwcmVzc2lvbi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzCShyZXZp
c2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXRFeHByZXNz
aW9uLmpzCShub25leGlzdGVudCkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1sZXQgbGV0RXhwcmVz
c2lvbkNvdW50ID0gMDsKLQotY2xhc3MgTGV0RXhwcmVzc2lvbiBleHRlbmRzIFZhbHVlIHsKLSAg
ICBjb25zdHJ1Y3RvcihvcmlnaW4pCi0gICAgewotICAgICAgICBzdXBlcigpOwotICAgICAgICB0
aGlzLl9vcmlnaW4gPSBvcmlnaW47Ci0gICAgICAgIHRoaXMuaW5kZXggPSBsZXRFeHByZXNzaW9u
Q291bnQrKzsKLSAgICAgICAgdGhpcy5hcmd1bWVudCA9IG51bGw7Ci0gICAgICAgIHRoaXMuYm9k
eSA9IG51bGw7Ci0gICAgfQotICAgIAotICAgIGdldCBvcmlnaW4oKSB7IHJldHVybiB0aGlzLl9v
cmlnaW47IH0KLSAgICBnZXQgbmFtZSgpIHsgcmV0dXJuICJsZXQ8IiArIHRoaXMuaW5kZXggKyAi
PiI7IH0KLSAgICAKLSAgICB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5u
YW1lICsgIigiICsgdGhpcy5hcmd1bWVudCArICIsICIgKyB0aGlzLmJvZHkgKyAiKSI7Ci0gICAg
fQotfQotCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlci5qcwkocmV2aXNp
b24gMjIyMTQwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTExNywxMyArMTE3LDE5IEBAIGNsYXNzIExleGVyIHsKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQoImlkZW50aWZpZXIiKTsKICAgICAgICAgfQogCisgICAgICAgIGlm
ICgvXjB4WzAtOWEtZkEtRl0rdS8udGVzdChyZWxldmFudFRleHQpKQorICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdCgidWludEhleExpdGVyYWwiKTsKKworICAgICAgICBpZiAoL14weFswLTlhLWZB
LUZdKy8udGVzdChyZWxldmFudFRleHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgiaW50
SGV4TGl0ZXJhbCIpOworCiAgICAgICAgIGlmICgvXlswLTldK3UvLnRlc3QocmVsZXZhbnRUZXh0
KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQoInVpbnRMaXRlcmFsIik7CiAKICAgICAgICAg
aWYgKC9eWzAtOV0rLy50ZXN0KHJlbGV2YW50VGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0KCJpbnRMaXRlcmFsIik7CiAgICAgICAgIAotICAgICAgICBpZiAoL14tPnw+PXw8PXw9PXwh
PXxcKz18LT18XCo9fFwvPXwlPXxePXxcfD18Jj18XCtcK3wtLXwmJnxcfFx8fChbe30oKVxbXF0/
Oj0rKlwvLC4lIX5eJnw8PkA7LV0pLy50ZXN0KHJlbGV2YW50VGV4dCkpCisgICAgICAgIGlmICgv
Xjw8fD4+fC0+fD49fDw9fD09fCE9fFwrPXwtPXxcKj18XC89fCU9fFxePXxcfD18Jj18XCtcK3wt
LXwmJnxcfFx8fChbe30oKVxbXF0/Oj0rKlwvLC4lIX5eJnw8PkA7LV0pLy50ZXN0KHJlbGV2YW50
VGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJwdW5jdHVhdGlvbiIpOwogICAgICAg
ICAKICAgICAgICAgbGV0IHJlbWFpbmluZyA9IHJlbGV2YW50VGV4dC5zdWJzdHJpbmcoMCwgMjAp
LnNwbGl0KC9ccy8pWzBdOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFr
ZUFycmF5UmVmRXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9NYWtlQXJyYXlSZWZFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAyMjIxNDApCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtlQXJyYXlSZWZFeHByZXNzaW9uLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsNiBAQCBjbGFzcyBNYWtlQXJyYXlSZWZFeHBy
ZXNzaW9uIGV4dGVuZHMgRXhwCiAgICAgCiAgICAgZ2V0IGxWYWx1ZSgpIHsgcmV0dXJuIHRoaXMu
X2xWYWx1ZTsgfQogICAgIAotICAgIGJlY29tZUNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lv
bigpCi0gICAgewotICAgICAgICB0aGlzLl9fcHJvdG9fXyA9IENvbnZlcnRQdHJUb0FycmF5UmVm
RXhwcmVzc2lvbi5wcm90b3R5cGU7Ci0gICAgfQotICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7
CiAgICAgICAgIHJldHVybiAiQCIgKyAodGhpcy5udW1FbGVtZW50cyA/ICI8PCIgKyB0aGlzLm51
bUVsZW1lbnRzICsgIj4+IiA6ICIiKSArICIoIiArIHRoaXMubFZhbHVlICsgIikiOwpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanMJKHJldmlzaW9u
IDIyMjE0MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBAIGNsYXNzIE5hbWVDb250ZXh0IHsKICAg
ICB7CiAgICAgICAgIHRoaXMuX21hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgdGhpcy5fc2V0ID0g
bmV3IFNldCgpOwotICAgICAgICB0aGlzLl9kZWZpbmVkID0gbnVsbDsKICAgICAgICAgdGhpcy5f
Y3VycmVudFN0YXRlbWVudCA9IG51bGw7CiAgICAgICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdh
dGU7CiAgICAgICAgIHRoaXMuX2ludHJpbnNpY3MgPSBudWxsOwpAQCAtNjIsNyArNjEsNyBAQCBj
bGFzcyBOYW1lQ29udGV4dCB7CiAgICAgICAgIGlmICghdGhpbmcubmFtZSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmICh0aGluZy5pc05hdGl2ZSkgeworICAgICAg
ICBpZiAodGhpbmcuaXNOYXRpdmUgJiYgIXRoaW5nLmltcGxlbWVudGF0aW9uKSB7CiAgICAgICAg
ICAgICBpZiAoIXRoaXMuX2ludHJpbnNpY3MpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJOYXRpdmUgZnVuY3Rpb24gaW4gYSBzY29wZSB0aGF0IGRvZXMgbm90IHJlY29nbml6ZSBp
bnRyaW5zaWNzIik7CiAgICAgICAgICAgICB0aGlzLl9pbnRyaW5zaWNzLmFkZCh0aGluZyk7CkBA
IC0xMTUsMzYgKzExNCwxMSBAQCBjbGFzcyBOYW1lQ29udGV4dCB7CiAgICAgICAgIHJldHVybiBu
dWxsOwogICAgIH0KICAgICAKLSAgICBoYW5kbGVEZWZpbmluZygpCi0gICAgewotICAgICAgICB0
aGlzLl9kZWZpbmVkID0gbmV3IFNldCgpOwotICAgIH0KLSAgICAKLSAgICBpc0RlZmluZWQodGhp
bmcpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc2V0Lmhhcyh0aGluZykpIHsKLSAgICAgICAg
ICAgIHJldHVybiAhdGhpcy5fZGVmaW5lZAotICAgICAgICAgICAgICAgIHx8IHRoaXMuX2RlZmlu
ZWQuaGFzKHRoaW5nKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGUg
JiYgdGhpcy5fZGVsZWdhdGUuaXNEZWZpbmVkKHRoaW5nKTsKLSAgICB9Ci0gICAgCi0gICAgZGVm
aW5lKHRoaW5nKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVmaW5lZC5hZGQodGhpbmcpOwotICAg
IH0KLSAgICAKLSAgICBkZWZpbmVBbGwoKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVmaW5lZCA9
IG51bGw7Ci0gICAgfQotICAgIAogICAgIGRvU3RhdGVtZW50KHN0YXRlbWVudCwgY2FsbGJhY2sp
CiAgICAgewogICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGVtZW50ID0gc3RhdGVtZW50OwogICAg
ICAgICBjYWxsYmFjaygpOwogICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGVtZW50ID0gbnVsbDsK
LSAgICAgICAgdGhpcy5kZWZpbmUoc3RhdGVtZW50KTsKICAgICB9CiAgICAgCiAgICAgcmVjb2du
aXplSW50cmluc2ljcygpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1l
UmVzb2x2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
TmFtZVJlc29sdmVyLmpzCShyZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTMwLDI3ICszMCwx
NSBAQAogLy8gbW9yZSBjb252ZW5pZW50IHRvIGNoZWNrIGhlcmUgdGhhbiBpbiB0aGUgQ2hlY2tl
ci4gVGhpcyB1c3VhbGx5IGludm9sdmVzIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUKIC8vIGNoZWNr
ZWQgYmVmb3JlIFR5cGVSZWZUb1R5cGVEZWZTa2lwcGVyLgogY2xhc3MgTmFtZVJlc29sdmVyIGV4
dGVuZHMgVmlzaXRvciB7Ci0gICAgLy8gSXQncyB0b3RhbGx5IE9LIHRvIGluc3RhbnRpYXRlIHRo
aXMgd2l0aCB6ZXJvIGFyZ3VtZW50cyAoaS5lLiBwYXNzaW5nIHVuZGVmaW5lZCBmb3IgYm90aCBv
ZgotICAgIC8vIHRoZW0pIGlmIHlvdSdyZSBjcmVhdGluZyBhIE5hbWVSZXNvbHZlciB0byB2aXNp
dCBhIFByb2dyYW0uCiAgICAgY29uc3RydWN0b3IobmFtZUNvbnRleHQpCiAgICAgewogICAgICAg
ICBzdXBlcigpOwogICAgICAgICB0aGlzLl9uYW1lQ29udGV4dCA9IG5hbWVDb250ZXh0OwogICAg
IH0KLSAgICAKLSAgICB2aXNpdFByb2dyYW0obm9kZSkKKworICAgIGRvU3RhdGVtZW50KHN0YXRl
bWVudCkKICAgICB7Ci0gICAgICAgIGxldCBuYW1lQ29udGV4dCA9IG5ldyBOYW1lQ29udGV4dCh0
aGlzLl9uYW1lQ29udGV4dCk7Ci0gICAgICAgIG5hbWVDb250ZXh0LnByb2dyYW0gPSBub2RlOwot
ICAgICAgICBuYW1lQ29udGV4dC5yZWNvZ25pemVJbnRyaW5zaWNzKCk7Ci0gICAgICAgIG5hbWVD
b250ZXh0LmhhbmRsZURlZmluaW5nKCk7Ci0gICAgICAgIG5vZGUuaW50cmluc2ljcyA9IG5hbWVD
b250ZXh0LmludHJpbnNpY3M7Ci0gICAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBub2RlLnRv
cExldmVsU3RhdGVtZW50cykKLSAgICAgICAgICAgIG5hbWVDb250ZXh0LmFkZChzdGF0ZW1lbnQp
OwotICAgICAgICBsZXQgY2hlY2tlciA9IG5ldyBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwot
ICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCi0g
ICAgICAgICAgICBuYW1lQ29udGV4dC5kb1N0YXRlbWVudChzdGF0ZW1lbnQsICgpID0+IHN0YXRl
bWVudC52aXNpdChjaGVja2VyKSk7Ci0gICAgICAgIG5vZGUuZ2xvYmFsTmFtZUNvbnRleHQgPSBu
YW1lQ29udGV4dDsKKyAgICAgICAgdGhpcy5fbmFtZUNvbnRleHQuZG9TdGF0ZW1lbnQoc3RhdGVt
ZW50LCAoKSA9PiBzdGF0ZW1lbnQudmlzaXQodGhpcykpOwogICAgIH0KICAgICAKICAgICBfdmlz
aXRUeXBlUGFyYW1ldGVyc0FuZEJ1aWxkTmFtZUNvbnRleHQobm9kZSkKQEAgLTIwNyw4ICsxOTUs
NiBAQCBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgIHR5
cGUgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoVHlwZSwgbm9kZS5uYW1lKTsKICAgICAgICAgICAg
IGlmICghdHlwZSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9y
aWdpbi5vcmlnaW5TdHJpbmcsICJDb3VsZCBub3QgZmluZCB0eXBlIG5hbWVkICIgKyBub2RlLm5h
bWUpOwotICAgICAgICAgICAgaWYgKCF0aGlzLl9uYW1lQ29udGV4dC5pc0RlZmluZWQodHlwZSkp
Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2lu
U3RyaW5nLCAiSWxsZWdhbCBmb3J3YXJkIHVzZSBvZiB0eXBlIG5hbWVkICIgKyBub2RlLm5hbWUp
OwogICAgICAgICAgICAgbm9kZS50eXBlID0gdHlwZTsKICAgICAgICAgfQogICAgICAgICAKQEAg
LTIzMCw3ICsyMTYsNiBAQCBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAg
ICB2aXNpdFJlZmVyZW5jZVR5cGUobm9kZSkKICAgICB7CiAgICAgICAgIGxldCBuYW1lQ29udGV4
dCA9IG5ldyBOYW1lQ29udGV4dCh0aGlzLl9uYW1lQ29udGV4dCk7Ci0gICAgICAgIG5hbWVDb250
ZXh0LmRlZmluZUFsbCgpOwogICAgICAgICBub2RlLmVsZW1lbnRUeXBlLnZpc2l0KG5ldyBOYW1l
UmVzb2x2ZXIobmFtZUNvbnRleHQpKTsKICAgICB9CiAgICAgCkBAIC0yNTgsNiArMjQzLDI4IEBA
IGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBzdXBlci52aXNp
dFJldHVybihub2RlKTsKICAgICB9CiAgICAgCisgICAgX2hhbmRsZVByb3BlcnR5QWNjZXNzKG5v
ZGUpCisgICAgeworICAgICAgICBub2RlLnBvc3NpYmxlR2V0T3ZlcmxvYWRzID0gdGhpcy5fbmFt
ZUNvbnRleHQuZ2V0KEZ1bmMsIG5vZGUuZ2V0RnVuY05hbWUpOworICAgICAgICBub2RlLnBvc3Np
YmxlU2V0T3ZlcmxvYWRzID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KEZ1bmMsIG5vZGUuc2V0RnVu
Y05hbWUpOworICAgICAgICBub2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzID0gdGhpcy5fbmFtZUNv
bnRleHQuZ2V0KEZ1bmMsIG5vZGUuYW5kRnVuY05hbWUpOworCisgICAgICAgIGlmICghbm9kZS5w
b3NzaWJsZUdldE92ZXJsb2FkcyAmJiAhbm9kZS5wb3NzaWJsZUFuZE92ZXJsb2FkcykKKyAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkNh
bm5vdCBmaW5kIGVpdGhlciAiICsgbm9kZS5nZXRGdW5jTmFtZSArICIgb3IgIiArIG5vZGUuYW5k
RnVuY05hbWUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKKyAg
ICB7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzKG5vZGUpOworICAgICAgICBz
dXBlci52aXNpdERvdEV4cHJlc3Npb24obm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5k
ZXhFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFj
Y2Vzcyhub2RlKTsKKyAgICAgICAgc3VwZXIudmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSk7Cisg
ICAgfQorICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAg
IHRoaXMuX3Jlc29sdmVUeXBlQXJndW1lbnRzKG5vZGUudHlwZUFyZ3VtZW50cyk7CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMuanMJKHJldmlzaW9uIDIy
MjE0MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDEwIEBAIGNsYXNzIE5hdGl2ZUZ1bmMgZXh0ZW5kcyBG
dW5jIHsKICAgICB7CiAgICAgICAgIHN1cGVyKG9yaWdpbiwgbmFtZSwgcmV0dXJuVHlwZSwgdHlw
ZVBhcmFtZXRlcnMsIHBhcmFtZXRlcnMsIGlzQ2FzdCk7CiAgICAgICAgIHRoaXMuaXNSZXN0cmlj
dGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuaW1wbGVtZW50YXRpb24gPSBudWxsOworICAgICAg
ICB0aGlzLmluc3RhbnRpYXRlSW1wbGVtZW50YXRpb24gPSAoc3Vic3RpdHV0aW9uKSA9PiB7fTsK
KyAgICAgICAgdGhpcy52aXNpdEltcGxlbWVudGF0aW9uRGF0YSA9IChpbXBsZW1lbnRhdGlvbkRh
dGEsIHZpc2l0b3IpID0+IG51bGw7CisgICAgICAgIHRoaXMuZGlkTGF5b3V0U3RydWN0c0luSW1w
bGVtZW50YXRpb25EYXRhID0gaW1wbGVtZW50YXRpb25EYXRhID0+IG51bGw7CiAgICAgfQogICAg
IAogICAgIGdldCBpc05hdGl2ZSgpIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmNJbnN0YW5jZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanMJKHJldmlz
aW9uIDIyMjE0MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmNJ
bnN0YW5jZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE2IEBACiAidXNlIHN0cmlj
dCI7CiAKIGNsYXNzIE5hdGl2ZUZ1bmNJbnN0YW5jZSBleHRlbmRzIEZ1bmMgewotICAgIGNvbnN0
cnVjdG9yKGZ1bmMsIHJldHVyblR5cGUsIHBhcmFtZXRlcnMsIGlzQ2FzdCkKKyAgICBjb25zdHJ1
Y3RvcihmdW5jLCByZXR1cm5UeXBlLCBwYXJhbWV0ZXJzLCBpc0Nhc3QsIGltcGxlbWVudGF0aW9u
RGF0YSkKICAgICB7CiAgICAgICAgIHN1cGVyKGZ1bmMub3JpZ2luLCBmdW5jLm5hbWUsIHJldHVy
blR5cGUsIFtdLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpOwogICAgICAgICB0aGlzLl9mdW5jID0gZnVu
YzsKKyAgICAgICAgdGhpcy5faW1wbGVtZW50YXRpb25EYXRhID0gaW1wbGVtZW50YXRpb25EYXRh
OwogICAgIH0KICAgICAKICAgICBnZXQgZnVuYygpIHsgcmV0dXJuIHRoaXMuX2Z1bmM7IH0KICAg
ICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CisgICAgZ2V0IGltcGxlbWVudGF0aW9u
RGF0YSgpIHsgcmV0dXJuIHRoaXMuX2ltcGxlbWVudGF0aW9uRGF0YTsgfQogCiAgICAgdG9EZWNs
U3RyaW5nKCkKICAgICB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2Rl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMJ
KHJldmlzaW9uIDIyMjE0MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUu
anMJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDE3IEBAIGNsYXNzIE5vZGUgewogICAgICAg
ICBsZXQgcmV0dXJuVmFsdWUgPSB2aXNpdEZ1bmMuY2FsbCh2aXNpdG9yLCB0aGlzKTsKICAgICAg
ICAgaWYgKCJyZXR1cm5WYWx1ZSIgaW4gdmlzaXRvcikKICAgICAgICAgICAgIHJldHVyblZhbHVl
ID0gdmlzaXRvci5yZXR1cm5WYWx1ZTsKKyAgICAgICAgCiAgICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKICAgICB9CiAgICAgCisgICAgc3RhdGljIHZpc2l0KG5vZGUsIHZpc2l0b3IpCisgICAg
eworICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIE5vZGUpCisgICAgICAgICAgICByZXR1cm4g
bm9kZS52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorICAgIAog
ICAgIHVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCiAgICAgewogICAgICAgICBpZiAo
IW90aGVyKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9ybWFsVXNlUHJv
cGVydHlSZXNvbHZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBOb3JtYWxVc2VQcm9wZXJ0
eVJlc29sdmVyIGV4dGVuZHMgUmV3cml0ZXIgeworICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0RG90RXhwcmVzc2lvbihub2RlKS5y
ZXdyaXRlQWZ0ZXJDbG9uaW5nKCk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNz
aW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRJbmRleEV4cHJlc3Np
b24obm9kZSkucmV3cml0ZUFmdGVyQ2xvbmluZygpOworICAgIH0KK30KKwpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHJldmlzaW9uIDIyMjE0MCkKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIs
MTcgKzE3MiwzNyBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAg
ICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIikpCiAgICAgICAg
ICAgICByZXR1cm4gbmV3IFZhcmlhYmxlUmVmKHRva2VuLCB0b2tlbi50ZXh0KTsKICAgICAgICAg
aWYgKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQoImludExpdGVyYWwiKSkgewotICAgICAgICAgICAg
bGV0IGludFZlcnNpb24gPSBNYXRoLmZsb29yKCt0b2tlbi50ZXh0KTsKKyAgICAgICAgICAgIGxl
dCBpbnRWZXJzaW9uID0gKCt0b2tlbi50ZXh0KSB8IDA7CiAgICAgICAgICAgICBpZiAoIiIgKyBp
bnRWZXJzaW9uICE9PSB0b2tlbi50ZXh0KQotICAgICAgICAgICAgICAgIGxleGVyLmZhaWwoIklu
dGVnZXIgbGl0ZXJhbCBpcyBub3QgYW4gaW50ZWdlciIpOworICAgICAgICAgICAgICAgIGxleGVy
LmZhaWwoIkludGVnZXIgbGl0ZXJhbCBpcyBub3QgYW4gaW50ZWdlcjogIiArIHRva2VuLnRleHQp
OwogICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRMaXRlcmFsKHRva2VuLCBpbnRWZXJzaW9uKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lS2luZCgidWludExpdGVy
YWwiKSkgewogICAgICAgICAgICAgbGV0IHVpbnRWZXJzaW9uID0gdG9rZW4udGV4dC5zdWJzdHIo
MCwgdG9rZW4udGV4dC5sZW5ndGggLSAxKSA+Pj4gMDsKICAgICAgICAgICAgIGlmICh1aW50VmVy
c2lvbiArICJ1IiAhPT0gdG9rZW4udGV4dCkKLSAgICAgICAgICAgICAgICBsZXhlci5mYWlsKCJJ
bnRlZ2VyIGxpdGVyYWwgaXMgbm90IDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIik7CisgICAgICAg
ICAgICAgICAgbGV4ZXIuZmFpbCgiSW50ZWdlciBsaXRlcmFsIGlzIG5vdCAzMi1iaXQgdW5zaWdu
ZWQgaW50ZWdlcjogIiArIHRva2VuLnRleHQpOwogICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50
TGl0ZXJhbCh0b2tlbiwgdWludFZlcnNpb24pOwogICAgICAgICB9CisgICAgICAgIGlmICgodG9r
ZW4gPSB0cnlDb25zdW1lS2luZCgiaW50SGV4TGl0ZXJhbCIpKQorICAgICAgICAgICAgfHwgKHRv
a2VuID0gdHJ5Q29uc3VtZUtpbmQoInVpbnRIZXhMaXRlcmFsIikpKSB7CisgICAgICAgICAgICBs
ZXQgaGV4U3RyaW5nID0gdG9rZW4udGV4dC5zdWJzdHIoMik7CisgICAgICAgICAgICBpZiAodG9r
ZW4ua2luZCA9PSAidWludEhleExpdGVyYWwiKQorICAgICAgICAgICAgICAgIGhleFN0cmluZyA9
IGhleFN0cmluZy5zdWJzdHIoMCwgaGV4U3RyaW5nLmxlbmd0aCAtIDEpOworICAgICAgICAgICAg
aWYgKCFoZXhTdHJpbmcubGVuZ3RoKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
QmFkIGhleCBsaXRlcmFsOiAiICsgdG9rZW4pOworICAgICAgICAgICAgbGV0IGludFZlcnNpb24g
PSBwYXJzZUludChoZXhTdHJpbmcsIDE2KTsKKyAgICAgICAgICAgIGlmICh0b2tlbi5raW5kID09
ICJpbnRIZXhMaXRlcmFsIikKKyAgICAgICAgICAgICAgICBpbnRWZXJzaW9uID0gaW50VmVyc2lv
biB8IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW50VmVyc2lvbiA9IGlu
dFZlcnNpb24gPj4+IDA7CisgICAgICAgICAgICBpZiAoaW50VmVyc2lvbi50b1N0cmluZygxNikg
IT09IGhleFN0cmluZykKKyAgICAgICAgICAgICAgICBsZXhlci5mYWlsKCJIZXggaW50ZWdlciBs
aXRlcmFsIGlzIG5vdCBhbiBpbnRlZ2VyOiAiICsgdG9rZW4udGV4dCk7CisgICAgICAgICAgICBp
ZiAodG9rZW4ua2luZCA9PSAiaW50SGV4TGl0ZXJhbCIpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG5ldyBJbnRMaXRlcmFsKHRva2VuLCBpbnRWZXJzaW9uKTsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgVWludExpdGVyYWwodG9rZW4sIGludFZlcnNpb24gPj4+IDApOworICAgICAgICB9CisgICAg
ICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWVLaW5kKCJkb3VibGVMaXRlcmFsIikpCisgICAgICAg
ICAgICByZXR1cm4gbmV3IERvdWJsZUxpdGVyYWwodG9rZW4sICt0b2tlbi50ZXh0KTsKICAgICAg
ICAgaWYgKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQoImZsb2F0TGl0ZXJhbCIpKSB7CiAgICAgICAg
ICAgICBsZXQgdGV4dCA9IHRva2VuLnRleHQ7CiAgICAgICAgICAgICBsZXQgZCA9IHRva2VuLnRl
eHQuZW5kc1dpdGgoImQiKTsKQEAgLTMzMSwxMiArMzUxLDE0IEBAIGZ1bmN0aW9uIHBhcnNlKHBy
b2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgY29uc3VtZSgiKCIpOwogICAgICAgICBs
ZXQgYXJndW1lbnRMaXN0ID0gW107CiAgICAgICAgIHdoaWxlICghdGVzdCgiKSIpKSB7Ci0gICAg
ICAgICAgICBhcmd1bWVudExpc3QucHVzaChwYXJzZUV4cHJlc3Npb24oKSk7CisgICAgICAgICAg
ICBsZXQgYXJndW1lbnQgPSBwYXJzZVBvc3NpYmxlQXNzaWdubWVudCgpOworICAgICAgICAgICAg
YXJndW1lbnRMaXN0LnB1c2goYXJndW1lbnQpOwogICAgICAgICAgICAgaWYgKCF0cnlDb25zdW1l
KCIsIikpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY29uc3Vt
ZSgiKSIpOwotICAgICAgICByZXR1cm4gbmV3IENhbGxFeHByZXNzaW9uKG5hbWUsIG5hbWUudGV4
dCwgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRMaXN0KTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5l
dyBDYWxsRXhwcmVzc2lvbihuYW1lLCBuYW1lLnRleHQsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50
TGlzdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9u
IGlzQ2FsbEV4cHJlc3Npb24oKQpAQCAtMzQ4LDkgKzM3MCw5IEBAIGZ1bmN0aW9uIHBhcnNlKHBy
b2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgfSk7CiAgICAgfQogICAgIAotICAgIGZ1
bmN0aW9uIGVtaXRJbmNyZW1lbnQodG9rZW4sIHB0ciwgZXh0cmFBcmcpCisgICAgZnVuY3Rpb24g
ZW1pdEluY3JlbWVudCh0b2tlbiwgb2xkLCBleHRyYUFyZykKICAgICB7Ci0gICAgICAgIGxldCBh
cmdzID0gW25ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAo
cHRyKSldOworICAgICAgICBsZXQgYXJncyA9IFtvbGRdOwogICAgICAgICBpZiAoZXh0cmFBcmcp
CiAgICAgICAgICAgICBhcmdzLnB1c2goZXh0cmFBcmcpOwogICAgICAgICAKQEAgLTM2MSwyNyAr
MzgzLDE1IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAg
ICAgaWYgKG5hbWUgPT0gIm9wZXJhdG9yIikKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
SW52YWxpZCBuYW1lOiAiICsgbmFtZSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbmV3IEFz
c2lnbm1lbnQoCi0gICAgICAgICAgICB0b2tlbiwKLSAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5j
ZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAocHRyKSksCi0gICAgICAgICAgICBu
ZXcgQ2FsbEV4cHJlc3Npb24odG9rZW4sIG5hbWUsIFtdLCBhcmdzKSk7CisgICAgICAgIHJldHVy
biBuZXcgQ2FsbEV4cHJlc3Npb24odG9rZW4sIG5hbWUsIFtdLCBhcmdzKTsKICAgICB9CiAgICAg
CiAgICAgZnVuY3Rpb24gZmluaXNoUGFyc2luZ1Bvc3RJbmNyZW1lbnQodG9rZW4sIGxlZnQpCiAg
ICAgewotICAgICAgICBsZXQgcHRyID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4pOwotICAgICAg
ICBwdHIuYXJndW1lbnQgPSBuZXcgTWFrZVB0ckV4cHJlc3Npb24odG9rZW4sIGxlZnQpOwotICAg
ICAgICAKLSAgICAgICAgbGV0IG9sZFZhbHVlID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4pOwot
ICAgICAgICBvbGRWYWx1ZS5hcmd1bWVudCA9IG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odG9r
ZW4sIFZhcmlhYmxlUmVmLndyYXAocHRyKSk7Ci0gICAgICAgIAotICAgICAgICBwdHIuYm9keSA9
IG9sZFZhbHVlOwotICAgICAgICAKLSAgICAgICAgb2xkVmFsdWUuYm9keSA9IG5ldyBDb21tYUV4
cHJlc3Npb24odG9rZW4sIFsKLSAgICAgICAgICAgIGVtaXRJbmNyZW1lbnQodG9rZW4sIHB0ciks
Ci0gICAgICAgICAgICBWYXJpYWJsZVJlZi53cmFwKG9sZFZhbHVlKQotICAgICAgICBdKTsKLSAg
ICAgICAgcmV0dXJuIHB0cjsKKyAgICAgICAgbGV0IHJlYWRNb2RpZnlXcml0ZSA9IG5ldyBSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uKHRva2VuLCBsZWZ0KTsKKyAgICAgICAgcmVhZE1vZGlmeVdy
aXRlLm5ld1ZhbHVlRXhwID0gZW1pdEluY3JlbWVudCh0b2tlbiwgcmVhZE1vZGlmeVdyaXRlLm9s
ZFZhbHVlUmVmKCkpOworICAgICAgICByZWFkTW9kaWZ5V3JpdGUucmVzdWx0RXhwID0gcmVhZE1v
ZGlmeVdyaXRlLm9sZFZhbHVlUmVmKCk7CisgICAgICAgIHJldHVybiByZWFkTW9kaWZ5V3JpdGU7
CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIHBhcnNlUG9zc2libGVTdWZmaXgoKQpAQCAtNDA2
LDkgKzQxNiw3IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAg
ICAgICAgICAgIGNhc2UgIlsiOiB7CiAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gcGFyc2VF
eHByZXNzaW9uKCk7CiAgICAgICAgICAgICAgICAgY29uc3VtZSgiXSIpOwotICAgICAgICAgICAg
ICAgIGxlZnQgPSBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKAotICAgICAgICAgICAgICAgICAg
ICB0b2tlbiwKLSAgICAgICAgICAgICAgICAgICAgbmV3IENhbGxFeHByZXNzaW9uKHRva2VuLCAi
b3BlcmF0b3ImW10iLCBbXSwgW2xlZnQsIGluZGV4XSkpOworICAgICAgICAgICAgICAgIGxlZnQg
PSBuZXcgSW5kZXhFeHByZXNzaW9uKHRva2VuLCBsZWZ0LCBpbmRleCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNDIwLDEz
ICs0MjgsMTAgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAg
IAogICAgIGZ1bmN0aW9uIGZpbmlzaFBhcnNpbmdQcmVJbmNyZW1lbnQodG9rZW4sIGxlZnQsIGV4
dHJhQXJnKQogICAgIHsKLSAgICAgICAgbGV0IHB0ciA9IG5ldyBMZXRFeHByZXNzaW9uKHRva2Vu
KTsKLSAgICAgICAgcHRyLmFyZ3VtZW50ID0gbmV3IE1ha2VQdHJFeHByZXNzaW9uKHRva2VuLCBs
ZWZ0KTsKLSAgICAgICAgcHRyLmJvZHkgPSBuZXcgQ29tbWFFeHByZXNzaW9uKHRva2VuLCBbCi0g
ICAgICAgICAgICBlbWl0SW5jcmVtZW50KHRva2VuLCBwdHIsIGV4dHJhQXJnKSwKLSAgICAgICAg
ICAgIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAocHRy
KSkKLSAgICAgICAgXSk7Ci0gICAgICAgIHJldHVybiBwdHI7CisgICAgICAgIGxldCByZWFkTW9k
aWZ5V3JpdGUgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7Cisg
ICAgICAgIHJlYWRNb2RpZnlXcml0ZS5uZXdWYWx1ZUV4cCA9IGVtaXRJbmNyZW1lbnQodG9rZW4s
IHJlYWRNb2RpZnlXcml0ZS5vbGRWYWx1ZVJlZigpLCBleHRyYUFyZyk7CisgICAgICAgIHJlYWRN
b2RpZnlXcml0ZS5yZXN1bHRFeHAgPSByZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVSZWYoKTsKKyAg
ICAgICAgcmV0dXJuIHJlYWRNb2RpZnlXcml0ZTsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24g
cGFyc2VQcmVJbmNyZW1lbnQoKQpAQCAtNTg2LDYgKzU5MSwxMCBAQCBmdW5jdGlvbiBwYXJzZShw
cm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsaXN0
LnB1c2goZWZmZWN0ZnVsRXhwcmVzc2lvbik7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFsaXN0
Lmxlbmd0aCkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTGVuZ3RoIHNob3VsZCBuZXZl
ciBiZSB6ZXJvIik7CisgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAxKQorICAgICAgICAgICAg
cmV0dXJuIGxpc3RbMF07CiAgICAgICAgIHJldHVybiBuZXcgQ29tbWFFeHByZXNzaW9uKG9yaWdp
biwgbGlzdCk7CiAgICAgfQogICAgIApAQCAtNzcyLDE1ICs3ODEsMzAgQEAgZnVuY3Rpb24gcGFy
c2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgIGZ1bmN0aW9uIHBhcnNlRnVuY05hbWUo
KQogICAgIHsKICAgICAgICAgaWYgKHRyeUNvbnN1bWUoIm9wZXJhdG9yIikpIHsKLSAgICAgICAg
ICAgIGxldCB0b2tlbiA9IHRyeUNvbnN1bWUoIisiLCAiLSIsICIqIiwgIi8iLCAiJSIsICJeIiwg
IiYiLCAifCIsICI8IiwgIj4iLCAiPD0iLCAiPj0iLCAiPT0iLCAiKysiLCAiLS0iLCAiJiIpOwot
ICAgICAgICAgICAgaWYgKHRva2VuKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuLnRleHQg
IT0gIiYiIHx8ICF0cnlDb25zdW1lKCJbIikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAi
b3BlcmF0b3IiICsgdG9rZW4udGV4dDsKKyAgICAgICAgICAgIGxldCB0b2tlbiA9IGNvbnN1bWUo
IisiLCAiLSIsICIqIiwgIi8iLCAiJSIsICJeIiwgIiYiLCAifCIsICI8IiwgIj4iLCAiPD0iLCAi
Pj0iLCAiPT0iLCAiKysiLCAiLS0iLCAiJiIsICIuIiwgIn4iLCAiPDwiLCAiPj4iLCAiWyIpOwor
ICAgICAgICAgICAgaWYgKHRva2VuLnRleHQgPT0gIiYiKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRyeUNvbnN1bWUoIlsiKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCJdIik7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3ImW10iOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAodHJ5Q29uc3VtZSgiLiIpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gIm9wZXJhdG9yJi4iICsgY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKS50ZXh0
OworICAgICAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3ImIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0b2tlbi50ZXh0ID09ICIuIikgeworICAgICAgICAgICAgICAgIGxldCBy
ZXN1bHQgPSAib3BlcmF0b3IuIiArIGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIikudGV4dDsKKyAg
ICAgICAgICAgICAgICBpZiAodHJ5Q29uc3VtZSgiPSIpKQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gIj0iOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodG9rZW4udGV4dCA9PSAiWyIpIHsKICAgICAgICAgICAgICAg
ICBjb25zdW1lKCJdIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciZbXSI7Cisg
ICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICJvcGVyYXRvcltdIjsKKyAgICAgICAgICAgICAg
ICBpZiAodHJ5Q29uc3VtZSgiPSIpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIj0i
OworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBsZXQgbmFtZSA9IGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gIm9wZXJhdG9yICIgKyBuYW1lOworICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciIg
KyB0b2tlbi50ZXh0OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb25zdW1lS2luZCgiaWRl
bnRpZmllciIpLnRleHQ7CiAgICAgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUHJlcGFyZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9QcmVwYXJlLmpzCShyZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9QcmVwYXJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyMCArMjcsMzYgQEAKIGZ1
bmN0aW9uIHByZXBhcmUob3JpZ2luLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KQogewogICAgIGxl
dCBwcm9ncmFtID0gbmV3IFByb2dyYW0oKTsKKyAgICAKICAgICBwYXJzZShwcm9ncmFtLCAiL2lu
dGVybmFsL3N0ZGxpYiIsICJuYXRpdmUiLCAyNywgc3RhbmRhcmRMaWJyYXJ5KTsKICAgICBwYXJz
ZShwcm9ncmFtLCBvcmlnaW4sICJ1c2VyIiwgbGluZU51bWJlck9mZnNldCwgdGV4dCk7Ci0gICAg
cmVzb2x2ZU5hbWVzKHByb2dyYW0pOwotICAgIHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKTsKKyAg
ICAKKyAgICBsZXQgbmFtZVJlc29sdmVyID0gY3JlYXRlTmFtZVJlc29sdmVyKHByb2dyYW0pOwor
ICAgIHJlc29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNv
bHZlTmFtZXNJblByb3RvY29scyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIHJlc29sdmVU
eXBlRGVmc0luVHlwZXMocHJvZ3JhbSk7CisgICAgcmVzb2x2ZVR5cGVEZWZzSW5Qcm90b2NvbHMo
cHJvZ3JhbSk7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gdmVyaWZ5IHRoYXQgc3RydWN0cmUgYXJl
IG5vdCBjeWNsaWMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NzA0NAorICAgIHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSk7CisgICAg
cmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKTsKKyAgICByZXNv
bHZlVHlwZURlZnNJbkZ1bmN0aW9ucyhwcm9ncmFtKTsKKyAgICAKICAgICBmbGF0dGVuUHJvdG9j
b2xFeHRlbmRzKHByb2dyYW0pOwogICAgIGNoZWNrKHByb2dyYW0pOwogICAgIGNoZWNrTGl0ZXJh
bFR5cGVzKHByb2dyYW0pOworICAgIHJlc29sdmVQcm9wZXJ0aWVzKHByb2dyYW0pOworICAgIGZp
bmRIaWdoWm9tYmllcyhwcm9ncmFtKTsKKyAgICBjaGVja0xpdGVyYWxUeXBlcyhwcm9ncmFtKTsK
ICAgICBjaGVja1Byb2dyYW1XcmFwcGVkKHByb2dyYW0pOwogICAgIGNoZWNrUmV0dXJucyhwcm9n
cmFtKTsKICAgICBjaGVja1VucmVhY2hhYmxlQ29kZShwcm9ncmFtKTsKICAgICBjaGVja0xvb3Bz
KHByb2dyYW0pOwogICAgIGNoZWNrUmVjdXJzaW9uKHByb2dyYW0pOwogICAgIGNoZWNrUHJvZ3Jh
bVdyYXBwZWQocHJvZ3JhbSk7CisgICAgZmluZEhpZ2hab21iaWVzKHByb2dyYW0pOwogICAgIGlu
bGluZShwcm9ncmFtKTsKKyAgICAKICAgICByZXR1cm4gcHJvZ3JhbTsKIH0KIApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9ncmFtLmpzCShyZXZpc2lvbiAyMjIxNDApCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9ncmFtLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMywxMCBAQCBjbGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAgICAgICAg
IHRoaXMuX3R5cGVzID0gbmV3IE1hcCgpOwogICAgICAgICB0aGlzLl9wcm90b2NvbHMgPSBuZXcg
TWFwKCk7CiAgICAgICAgIHRoaXMuX2Z1bmNJbnN0YW50aWF0b3IgPSBuZXcgRnVuY0luc3RhbnRp
YXRvcih0aGlzKTsKKyAgICAgICAgdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQgPSBuZXcgTmFtZUNv
bnRleHQoKTsKKyAgICAgICAgdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQucHJvZ3JhbSA9IHRoaXM7
CisgICAgICAgIHRoaXMuX2dsb2JhbE5hbWVDb250ZXh0LnJlY29nbml6ZUludHJpbnNpY3MoKTsK
KyAgICAgICAgdGhpcy5pbnRyaW5zaWNzID0gdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQuaW50cmlu
c2ljczsKICAgICB9CiAgICAgCiAgICAgZ2V0IHRvcExldmVsU3RhdGVtZW50cygpIHsgcmV0dXJu
IHRoaXMuX3RvcExldmVsU3RhdGVtZW50czsgfQpAQCAtNDAsNiArNDQsNyBAQCBjbGFzcyBQcm9n
cmFtIGV4dGVuZHMgTm9kZSB7CiAgICAgZ2V0IHR5cGVzKCkgeyByZXR1cm4gdGhpcy5fdHlwZXM7
IH0KICAgICBnZXQgcHJvdG9jb2xzKCkgeyByZXR1cm4gdGhpcy5fcHJvdG9jb2xzOyB9CiAgICAg
Z2V0IGZ1bmNJbnN0YW50aWF0b3IoKSB7IHJldHVybiB0aGlzLl9mdW5jSW5zdGFudGlhdG9yOyB9
CisgICAgZ2V0IGdsb2JhbE5hbWVDb250ZXh0KCkgeyByZXR1cm4gdGhpcy5fZ2xvYmFsTmFtZUNv
bnRleHQ7IH0KICAgICAKICAgICBhZGQoc3RhdGVtZW50KQogICAgIHsKQEAgLTUyLDEwICs1Nywx
MSBAQCBjbGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAgICAgICAgIH0gZWxzZSBpZiAoc3Rh
dGVtZW50IGluc3RhbmNlb2YgVHlwZSkKICAgICAgICAgICAgIHRoaXMuX3R5cGVzLnNldChzdGF0
ZW1lbnQubmFtZSwgc3RhdGVtZW50KTsKICAgICAgICAgZWxzZSBpZiAoc3RhdGVtZW50IGluc3Rh
bmNlb2YgUHJvdG9jb2wpCi0gICAgICAgICAgICB0aGlzLl9wcm90b2NvbHMuc2V0KHN0YXRlbWVu
dC5hZGQsIHN0YXRlbWVudCk7CisgICAgICAgICAgICB0aGlzLl9wcm90b2NvbHMuc2V0KHN0YXRl
bWVudC5uYW1lLCBzdGF0ZW1lbnQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIlN0YXRlbWVudCBpcyBub3QgYSBmdW5jdGlvbiBvciB0eXBlOiAiICsgc3RhdGVt
ZW50KTsKICAgICAgICAgdGhpcy5fdG9wTGV2ZWxTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTsK
KyAgICAgICAgdGhpcy5fZ2xvYmFsTmFtZUNvbnRleHQuYWRkKHN0YXRlbWVudCk7CiAgICAgfQog
ICAgIAogICAgIHRvU3RyaW5nKCkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Io
b3JpZ2luLCBiYXNlKQorICAgIHsKKyAgICAgICAgc3VwZXIob3JpZ2luKTsKKyAgICAgICAgdGhp
cy5iYXNlID0gYmFzZTsKKyAgICB9CisgICAgCisgICAgZ2V0IHJlc3VsdFR5cGUoKSB7IHJldHVy
biB0aGlzLnJlc3VsdFR5cGVGb3JHZXQgPyB0aGlzLnJlc3VsdFR5cGVGb3JHZXQgOiB0aGlzLnJl
c3VsdFR5cGVGb3JBbmQ7IH0KKyAgICAKKyAgICByZXdyaXRlQWZ0ZXJDbG9uaW5nKCkKKyAgICB7
CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIG5vZGUuYmFzZS5pc0xWYWx1ZSB3aWxsIG9ubHkg
cmV0dXJuIHRydWUgaWYgaXQncyBwb3NzaWJsZSB0byBnZXQgYSBwb2ludGVyIHRvIGl0LAorICAg
ICAgICAvLyBzaW5jZSB3ZSB3aWxsIG5vIGxvbmdlciBzZWUgYW55IERvdEV4cHJlc3Npb25zIG9y
IEluZGV4RXhwcmVzc2lvbnMuIEFsc28sIG5vZGUgaXMgYSBuZXdseSBjcmVhdGVkCisgICAgICAg
IC8vIG5vZGUgYW5kIGV2ZXJ5dGhpbmcgYmVuZWF0aCBpdCBpcyBuZXdseSBjcmVhdGVkLCBzbyB3
ZSBjYW4gZWRpdCBpdCBpbi1wbGFjZS4KKyAgICAgICAgCisgICAgICAgIGlmICgodGhpcy5iYXNl
LmlzTFZhbHVlIHx8IHRoaXMuYmFzZVR5cGUuaXNSZWYpICYmIHRoaXMuY2FsbEZvckFuZCkKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRoaXMub3JpZ2luLCB0
aGlzLmNhbGxGb3JBbmQsIHRoaXMucmVzdWx0VHlwZSwgdGhpcy5jYWxsRm9yQW5kLnJlc3VsdFR5
cGUuYWRkcmVzc1NwYWNlKTsKKyAgICAgICAgCisgICAgICAgIGlmICh0aGlzLmNhbGxGb3JHZXQp
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsRm9yR2V0OworICAgICAgICAKKyAgICAgICAg
aWYgKCF0aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5v
cmlnaW4ub3JpZ2luU3RyaW5nICsgIjogUHJvcGVydHkgYWNjZXNzIHdpdGhvdXQgZ2V0dGVyIGFu
ZCBhbmRlcjogIiArIHRoaXMpOworICAgICAgICAKKyAgICAgICAgbGV0IGFub25WYXIgPSBuZXcg
QW5vbnltb3VzVmFyaWFibGUodGhpcy5vcmlnaW4sIHRoaXMuYmFzZVR5cGUpOworICAgICAgICB0
aGlzLmNhbGxGb3JBbmQuYXJndW1lbnRMaXN0WzBdID0gdGhpcy5iYXNlVHlwZS51bmlmeU5vZGUu
YXJndW1lbnRGb3JBbmRPdmVybG9hZCh0aGlzLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChhbm9u
VmFyKSk7CisgICAgICAgIHJldHVybiBuZXcgQ29tbWFFeHByZXNzaW9uKHRoaXMub3JpZ2luLCBb
CisgICAgICAgICAgICBhbm9uVmFyLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQodGhpcy5v
cmlnaW4sIFZhcmlhYmxlUmVmLndyYXAoYW5vblZhciksIHRoaXMuYmFzZSwgdGhpcy5iYXNlVHlw
ZSksCisgICAgICAgICAgICBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKHRoaXMub3JpZ2luLCB0
aGlzLmNhbGxGb3JBbmQsIHRoaXMucmVzdWx0VHlwZSwgdGhpcy5jYWxsRm9yQW5kLnJlc3VsdFR5
cGUuYWRkcmVzc1NwYWNlKQorICAgICAgICBdKTsKKyAgICB9CisgICAgCisgICAgdXBkYXRlQ2Fs
bHMoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuY2FsbEZvckdldCkKKyAgICAgICAgICAgIHRo
aXMuY2FsbEZvckdldC5hcmd1bWVudExpc3RbMF0gPSB0aGlzLmJhc2U7CisgICAgICAgIGlmICh0
aGlzLmNhbGxGb3JBbmQpCisgICAgICAgICAgICB0aGlzLmNhbGxGb3JBbmQuYXJndW1lbnRMaXN0
WzBdID0gdGhpcy5iYXNlVHlwZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKHRoaXMub3JpZ2luLCB0
aGlzLmJhc2UpOworICAgICAgICBpZiAodGhpcy5jYWxsRm9yU2V0KQorICAgICAgICAgICAgdGhp
cy5jYWxsRm9yU2V0LmFyZ3VtZW50TGlzdFswXSA9IHRoaXMuYmFzZTsKKyAgICB9CisgICAgCisg
ICAgZW1pdEdldChiYXNlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMudmlzaXQo
bmV3IFJld3JpdGVyKCkpOworICAgICAgICByZXN1bHQuYmFzZSA9IGJhc2U7CisgICAgICAgIHJl
c3VsdC51cGRhdGVDYWxscygpOworICAgICAgICByZXR1cm4gcmVzdWx0LnJld3JpdGVBZnRlckNs
b25pbmcoKTsKKyAgICB9CisgICAgCisgICAgZW1pdFNldChiYXNlLCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnZpc2l0KG5ldyBSZXdyaXRlcigpKTsKKyAgICAgICAg
aWYgKCFyZXN1bHQuY2FsbEZvclNldCkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9y
KHRoaXMub3JpZ2luLm9yaWdpblN0cmluZywgIkNhbm5vdCBlbWl0IHNldCBiZWNhdXNlOiAiICsg
dGhpcy5lcnJvckZvclNldC50eXBlRXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcmVzdWx0LmJhc2Ug
PSBiYXNlOworICAgICAgICByZXN1bHQudXBkYXRlQ2FsbHMoKTsKKyAgICAgICAgcmVzdWx0LmNh
bGxGb3JTZXQuYXJndW1lbnRMaXN0W3Jlc3VsdC5jYWxsRm9yU2V0LmFyZ3VtZW50TGlzdC5sZW5n
dGggLSAxXSA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0LmNhbGxGb3JTZXQ7CisgICAg
fQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eVJlc29s
dmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3Bl
cnR5UmVzb2x2ZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUHJvcGVydHlSZXNvbHZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJp
Y3QiOworCitjbGFzcyBQcm9wZXJ0eVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CisgICAgX3Zp
c2l0UlZhbHVlc1dpdGhpbkxWYWx1ZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHZpc2l0ID0g
bm9kZSA9PiBub2RlLnZpc2l0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgY2xhc3MgUlZhbHVl
RmluZGVyIHsKKyAgICAgICAgICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2Rl
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5vZGUuYXJyYXkudmlzaXQodGhpcyk7
CisgICAgICAgICAgICAgICAgdmlzaXQobm9kZS5pbmRleCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmlzaXREZXJlZmVy
ZW5jZUV4cHJlc3Npb24obm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2aXNp
dChub2RlLnB0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZp
c2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbm9kZS50YXJnZXQudmlzaXQodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG5vZGUudmlzaXQobmV3IFJWYWx1ZUZpbmRlcigpKTsKKyAgICB9Cisg
ICAgCisgICAgX3Zpc2l0UHJvcGVydHlBY2Nlc3Mobm9kZSkKKyAgICB7CisgICAgICAgIGxldCBu
ZXdOb2RlID0gbm9kZS52aXNpdChuZXcgTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlcigpKTsKKyAg
ICAgICAgbmV3Tm9kZS52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5iZWNvbWUobmV3Tm9kZSk7
CisgICAgfQorICAgIAorICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fdmlzaXRQcm9wZXJ0eUFjY2Vzcyhub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlz
aXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Zpc2l0UHJvcGVy
dHlBY2Nlc3Mobm9kZSk7CisgICAgfQorICAgIAorICAgIF9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUo
bm9kZSkKKyAgICB7CisgICAgICAgIGxldCB0eXBlID0gbm9kZS5vbGRWYWx1ZVZhci50eXBlOwor
ICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgdHlw
ZSIpOworICAgICAgICBsZXQgc2ltcGxlTEhTID0gbm9kZS5sVmFsdWUudmlzaXQobmV3IE5vcm1h
bFVzZVByb3BlcnR5UmVzb2x2ZXIoKSk7CisgICAgICAgIGlmIChzaW1wbGVMSFMuaXNMVmFsdWUp
IHsKKyAgICAgICAgICAgIGlmICghc2ltcGxlTEhTLmFkZHJlc3NTcGFjZSkKKyAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIjogTEhTIHdp
dGhvdXQgYWRkcmVzcyBzcGFjZTogIiArIHNpbXBsZUxIUyk7CisgICAgICAgICAgICBsZXQgcHRy
VHlwZSA9IG5ldyBQdHJUeXBlKG5vZGUub3JpZ2luLCBzaW1wbGVMSFMuYWRkcmVzc1NwYWNlLCB0
eXBlKTsKKyAgICAgICAgICAgIGxldCBwdHJWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUobm9k
ZS5vcmlnaW4sIHB0clR5cGUpOworICAgICAgICAgICAgbm9kZS5iZWNvbWUobmV3IENvbW1hRXhw
cmVzc2lvbihub2RlLm9yaWdpbiwgWworICAgICAgICAgICAgICAgIG5vZGUub2xkVmFsdWVWYXIs
IG5vZGUubmV3VmFsdWVWYXIsIHB0clZhciwKKyAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVu
dCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAocHRy
VmFyKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IE1ha2VQdHJFeHByZXNzaW9uKG5vZGUub3Jp
Z2luLCBzaW1wbGVMSFMpLCBwdHJUeXBlKSwKKyAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVu
dCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUub2xkVmFsdWVSZWYoKSwK
KyAgICAgICAgICAgICAgICAgICAgbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKHB0clZhciksIHR5
cGUsIHNpbXBsZUxIUy5hZGRyZXNzU3BhY2UpLAorICAgICAgICAgICAgICAgICAgICB0eXBlKSwK
KyAgICAgICAgICAgICAgICBuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwgbm9kZS5uZXdWYWx1
ZVJlZigpLCBub2RlLm5ld1ZhbHVlRXhwLCB0eXBlKSwKKyAgICAgICAgICAgICAgICBuZXcgQXNz
aWdubWVudCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgIG5ldyBEZXJlZmVyZW5jZUV4cHJlc3Npb24oCisgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChwdHJWYXIpLCB0eXBlLCBzaW1wbGVMSFMu
YWRkcmVzc1NwYWNlKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5uZXdWYWx1ZVJlZigpLCB0
eXBlKSwKKyAgICAgICAgICAgICAgICBub2RlLnJlc3VsdEV4cAorICAgICAgICAgICAgXSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsZXQgcmVz
dWx0ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubFZh
bHVlLmJhc2UsIG5vZGUubFZhbHVlLmJhc2VUeXBlKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVl
RXhwID0gbmV3IENvbW1hRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgWworICAgICAgICAgICAgbm9k
ZS5vbGRWYWx1ZVZhciwgbm9kZS5uZXdWYWx1ZVZhciwKKyAgICAgICAgICAgIG5ldyBBc3NpZ25t
ZW50KG5vZGUub3JpZ2luLCBub2RlLm9sZFZhbHVlUmVmKCksIG5vZGUubFZhbHVlLmVtaXRHZXQo
cmVzdWx0Lm9sZFZhbHVlUmVmKCkpLCB0eXBlKSwKKyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50
KG5vZGUub3JpZ2luLCBub2RlLm5ld1ZhbHVlUmVmKCksIG5vZGUubmV3VmFsdWVFeHAsIHR5cGUp
LAorICAgICAgICAgICAgbm9kZS5sVmFsdWUuZW1pdFNldChyZXN1bHQub2xkVmFsdWVSZWYoKSwg
bm9kZS5uZXdWYWx1ZVJlZigpKQorICAgICAgICBdKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdEV4
cCA9IG5vZGUubmV3VmFsdWVSZWYoKTsKKyAgICAgICAgdGhpcy5faGFuZGxlUmVhZE1vZGlmeVdy
aXRlKHJlc3VsdCk7CisgICAgICAgIG5vZGUuYmVjb21lKHJlc3VsdCk7CisgICAgfQorICAgIAor
ICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAg
bm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5yZXN1bHRFeHAudmlz
aXQodGhpcyk7CisgICAgICAgIHRoaXMuX3Zpc2l0UlZhbHVlc1dpdGhpbkxWYWx1ZShub2RlLmxW
YWx1ZSk7CisgICAgICAgIHRoaXMuX2hhbmRsZVJlYWRNb2RpZnlXcml0ZShub2RlKTsKKyAgICB9
CisgICAgCisgICAgdmlzaXRBc3NpZ25tZW50KG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl92
aXNpdFJWYWx1ZXNXaXRoaW5MVmFsdWUobm9kZS5saHMpOworICAgICAgICBub2RlLnJocy52aXNp
dCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGxldCBzaW1wbGVMSFMgPSBub2RlLmxocy52aXNp
dChuZXcgTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlcigpKTsKKyAgICAgICAgaWYgKHNpbXBsZUxI
Uy5pc0xWYWx1ZSkgeworICAgICAgICAgICAgbm9kZS5saHMuYmVjb21lKHNpbXBsZUxIUyk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghKG5v
ZGUubGhzIGluc3RhbmNlb2YgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKSkKKyAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBsaHMgdHlwZTogIiArIG5vZGUubGhzLmNvbnN0
cnVjdG9yLm5hbWUpOworICAgICAgICAKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmxocy5iYXNlLCBub2RlLmxocy5i
YXNlVHlwZSk7CisgICAgICAgIGxldCByZXN1bHRWYXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUo
bm9kZS5vcmlnaW4sIG5vZGUudHlwZSk7CisgICAgICAgIHJlc3VsdC5uZXdWYWx1ZUV4cCA9IG5l
dyBDb21tYUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIFsKKyAgICAgICAgICAgIHJlc3VsdFZhciwK
KyAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFw
KHJlc3VsdFZhciksIG5vZGUucmhzLCBub2RlLnR5cGUpLAorICAgICAgICAgICAgbm9kZS5saHMu
ZW1pdFNldChyZXN1bHQub2xkVmFsdWVSZWYoKSwgVmFyaWFibGVSZWYud3JhcChyZXN1bHRWYXIp
KQorICAgICAgICBdKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdEV4cCA9IFZhcmlhYmxlUmVmLndy
YXAocmVzdWx0VmFyKTsKKyAgICAgICAgdGhpcy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKHJlc3Vs
dCk7CisgICAgICAgIG5vZGUuYmVjb21lKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZpc2l0
TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0TWFrZVB0
ckV4cHJlc3Npb24obm9kZSk7CisgICAgICAgIGlmICghbm9kZS5sVmFsdWUuaXNMVmFsdWUpCisg
ICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcs
ICJOb3QgYW4gbHZhbHVlOiAiICsgbm9kZS5sVmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2aXNp
dE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0
TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgaWYgKCFub2RlLmxWYWx1ZS5p
c0xWYWx1ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9y
aWdpblN0cmluZywgIk5vdCBhbiBsdmFsdWU6ICIgKyBub2RlLmxWYWx1ZSk7CisgICAgfQorfQor
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvdG9jb2xEZWNsLmpz
CShyZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm90
b2NvbERlY2wuanMJKHdvcmtpbmcgY29weSkKQEAgLTk3LDE2ICs5NywxNiBAQCBjbGFzcyBQcm90
b2NvbERlY2wgZXh0ZW5kcyBQcm90b2NvbCB7CiAgICAgewogICAgICAgICBsZXQgc3Vic3RpdHV0
aW9uID0gbmV3IFN1YnN0aXR1dGlvbihbdGhpcy5fdHlwZVZhcmlhYmxlXSwgW3R5cGVdKTsKICAg
ICAgICAgbGV0IHNpZ25hdHVyZXMgPSB0aGlzLnNpZ25hdHVyZXM7Ci0gICAgICAgIGZvciAobGV0
IHNpZ25hdHVyZSBvZiBzaWduYXR1cmVzKSB7Ci0gICAgICAgICAgICBzaWduYXR1cmUgPSBzaWdu
YXR1cmUudmlzaXQoc3Vic3RpdHV0aW9uKTsKLSAgICAgICAgICAgIGxldCBvdmVybG9hZCA9IHJl
c29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlLnBvc3NpYmxlT3ZlcmxvYWRzLCBzaWduYXR1cmUu
dHlwZVBhcmFtZXRlcnMsIHNpZ25hdHVyZS5wYXJhbWV0ZXJUeXBlcywgc2lnbmF0dXJlLnJldHVy
blR5dXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uKTsKKyAgICAgICAgZm9yIChsZXQgb3JpZ2luYWxT
aWduYXR1cmUgb2Ygc2lnbmF0dXJlcykgeworICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IG9y
aWdpbmFsU2lnbmF0dXJlLnZpc2l0KHN1YnN0aXR1dGlvbik7CisgICAgICAgICAgICBsZXQgb3Zl
cmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZS5wb3NzaWJsZU92ZXJsb2Fkcywg
c2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzLCBzaWduYXR1cmUucGFyYW1ldGVyVHlwZXMsIHNpZ25h
dHVyZS5yZXR1cm5UeXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uKTsKICAgICAgICAgICAgIGlmICgh
b3ZlcmxvYWQuZnVuYykKLSAgICAgICAgICAgICAgICByZXR1cm4ge3Jlc3VsdDogZmFsc2UsIHJl
YXNvbjogIkRpZCBub3QgZmluZCBtYXRjaGluZyBzaWduYXR1cmUgZm9yICIgKyBzaWduYXR1cmUg
KyAiIHdpdGggdHlwZSAiICsgdHlwZSArIChvdmVybG9hZC5mYWlsdXJlcy5sZW5ndGggPyAiICh0
cmllZDogIiArIG92ZXJsb2FkLmZhaWx1cmVzLmpvaW4oIjsgIikgKyAiKSIgOiAiIil9OworICAg
ICAgICAgICAgICAgIHJldHVybiB7cmVzdWx0OiBmYWxzZSwgcmVhc29uOiAiRGlkIG5vdCBmaW5k
IG1hdGNoaW5nIHNpZ25hdHVyZSBmb3IgIiArIG9yaWdpbmFsU2lnbmF0dXJlICsgIiAoYXQgIiAr
IG9yaWdpbmFsU2lnbmF0dXJlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiKSB3aXRoIHR5cGUgIiAr
IHR5cGUgKyAob3ZlcmxvYWQuZmFpbHVyZXMubGVuZ3RoID8gIiAodHJpZWQ6ICIgKyBvdmVybG9h
ZC5mYWlsdXJlcy5qb2luKCI7ICIpICsgIikiIDogIiIpfTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbGV0IHN1YnN0aXR1dGVkUmV0dXJuVHlwZSA9IG92ZXJsb2FkLmZ1bmMucmV0dXJuVHlw
ZS5zdWJzdGl0dXRlVG9VbmlmaWNhdGlvbigKICAgICAgICAgICAgICAgICBvdmVybG9hZC5mdW5j
LnR5cGVQYXJhbWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwogICAgICAgICAg
ICAgaWYgKCFzdWJzdGl0dXRlZFJldHVyblR5cGUuZXF1YWxzKHNpZ25hdHVyZS5yZXR1cm5UeXBl
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4ge3Jlc3VsdDogZmFsc2UsIHJlYXNvbjogIlJldHVy
biB0eXBlIG1pc21hdGNoIGJldHdlZW4gIiArIHNpZ25hdHVyZS5yZXR1cm5UeXBlICsgIiBhbmQg
IiArIHN1YnN0aXR1dGVkUmV0dXJuVHlwZX07CisgICAgICAgICAgICAgICAgcmV0dXJuIHtyZXN1
bHQ6IGZhbHNlLCByZWFzb246ICJBdCBzaWduYXR1cmUgIiArIG9yaWdpbmFsU2lnbmF0dXJlICsg
IiAoYXQgIiArIG9yaWdpbmFsU2lnbmF0dXJlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiKTogcmV0
dXJuIHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAiICsgc2lnbmF0dXJlLnJldHVyblR5cGUgKyAiIGFu
ZCAiICsgc3Vic3RpdHV0ZWRSZXR1cm5UeXBlICsgIiBpbiBmb3VuZCBmdW5jdGlvbiAiICsgb3Zl
cmxvYWQuZnVuYy50b0RlY2xTdHJpbmcoKX07CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHty
ZXN1bHQ6IHRydWV9OwogICAgIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1B0clR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHRyVHlwZS5qcwkocmV2aXNpb24gMjIyMTQwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUHRyVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTkgQEAgY2xhc3Mg
UHRyVHlwZSBleHRlbmRzIFJlZmVyZW5jZVR5cGUgewogICAgICAgICByZXR1cm4gdGhpcy5lbGVt
ZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyLmVsZW1lbnRUeXBlKTsKICAg
ICB9CiAgICAgCisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAg
IHsKKyAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIlBv
aW50ZXIgc3Vic2NyaXB0IGlzIG5vdCB2YWxpZCIpOworICAgIH0KKyAgICBhcmd1bWVudFR5cGVG
b3JBbmRPdmVybG9hZChvcmlnaW4sIHR5cGUpCisgICAgeworICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMgbm90IHZh
bGlkIik7CisgICAgfQorICAgIHJldHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQob3JpZ2luKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGU7CisgICAgfQorCiAgICAgdG9TdHJp
bmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUgKyAiXiAiICsgdGhp
cy5hZGRyZXNzU3BhY2U7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKKyAgICBjb25zdHJ1Y3Rvcihv
cmlnaW4sIGxWYWx1ZSwgdHlwZSA9IG51bGwpCisgICAgeworICAgICAgICBzdXBlcihvcmlnaW4p
OworICAgICAgICB0aGlzLl9sVmFsdWUgPSBsVmFsdWU7CisgICAgICAgIHRoaXMub2xkVmFsdWVW
YXIgPSBuZXcgQW5vbnltb3VzVmFyaWFibGUob3JpZ2luLCB0eXBlKTsKKyAgICAgICAgdGhpcy5u
ZXdWYWx1ZVZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShvcmlnaW4sIHR5cGUpOworICAgICAg
ICB0aGlzLm5ld1ZhbHVlRXhwID0gbnVsbDsKKyAgICAgICAgdGhpcy5yZXN1bHRFeHAgPSBudWxs
OworICAgIH0KKyAgICAKKyAgICBnZXQgbFZhbHVlKCkgeyByZXR1cm4gdGhpcy5fbFZhbHVlOyB9
CisgICAgCisgICAgb2xkVmFsdWVSZWYoKSB7IHJldHVybiBWYXJpYWJsZVJlZi53cmFwKHRoaXMu
b2xkVmFsdWVWYXIpOyB9CisgICAgbmV3VmFsdWVSZWYoKSB7IHJldHVybiBWYXJpYWJsZVJlZi53
cmFwKHRoaXMubmV3VmFsdWVWYXIpOyB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICJSTVcoIiArIHRoaXMubFZhbHVlICsgIiwgIiArIHRoaXMub2xkVmFsdWVW
YXIgKyAiLCAiICsgdGhpcy5uZXdWYWx1ZVZhciArICIsICIgKyB0aGlzLm5ld1ZhbHVlRXhwICsg
IiwgIiArIHRoaXMucmVzdWx0RXhwICsgIikiOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU5hbWVzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVOYW1lcy5qcwkocmV2aXNpb24gMjIyMTQw
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU5hbWVzLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw3ICsyNCwyOCBAQAogICovCiAidXNlIHN0cmljdCI7CiAKLWZ1bmN0
aW9uIHJlc29sdmVOYW1lcyhwcm9ncmFtKQorZnVuY3Rpb24gY3JlYXRlTmFtZVJlc29sdmVyKHBy
b2dyYW0pCiB7Ci0gICAgcHJvZ3JhbS52aXNpdChuZXcgTmFtZVJlc29sdmVyKCkpOworICAgIHJl
dHVybiBuZXcgTmFtZVJlc29sdmVyKHByb2dyYW0uZ2xvYmFsTmFtZUNvbnRleHQpOwogfQorCitm
dW5jdGlvbiByZXNvbHZlTmFtZXNJblR5cGVzKHByb2dyYW0sIG5hbWVSZXNvbHZlcikKK3sKKyAg
ICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0udHlwZXMudmFsdWVzKCkpCisgICAgICAgIG5hbWVS
ZXNvbHZlci5kb1N0YXRlbWVudCh0eXBlKTsKK30KKworZnVuY3Rpb24gcmVzb2x2ZU5hbWVzSW5Q
cm90b2NvbHMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAobGV0IHByb3RvY29s
IG9mIHByb2dyYW0ucHJvdG9jb2xzLnZhbHVlcygpKQorICAgICAgICBuYW1lUmVzb2x2ZXIuZG9T
dGF0ZW1lbnQocHJvdG9jb2wpOworfQorCitmdW5jdGlvbiByZXNvbHZlTmFtZXNJbkZ1bmN0aW9u
cyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChsZXQgZnVuY3Mgb2YgcHJvZ3Jh
bS5mdW5jdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jcykK
KyAgICAgICAgICAgIG5hbWVSZXNvbHZlci5kb1N0YXRlbWVudChmdW5jKTsKKyAgICB9Cit9CisK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92
ZXJsb2FkSW1wbC5qcwkocmV2aXNpb24gMjIyMTQwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsOSBAQAogCiBmdW5jdGlvbiByZXNvbHZlT3ZlcmxvYWRJbXBsKGZ1bmN0aW9ucywgdHlwZUFy
Z3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSkKIHsKKyAgICBpZiAoIWZ1bmN0aW9u
cykKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIGZ1bmN0aW9uczsgdGhhdCBzaG91bGQg
aGF2ZSBiZWVuIGNhdWdodCBieSB0aGUgY2FsbGVyLiIpOworICAgIAogICAgIGxldCBmYWlsdXJl
cyA9IFtdOwogICAgIGxldCBzdWNjZXNzZXMgPSBbXTsKICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1
bmN0aW9ucykgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVBy
b3BlcnRpZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmVzb2x2ZVByb3BlcnRpZXMuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUmVzb2x2ZVByb3BlcnRpZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVz
ZSBzdHJpY3QiOworCisvLyBUaGlzIHR1cm5zIERvdEV4cHJlc3Npb24gYW5kIEluZGV4RXhwcmVz
c2lvbiBpbnRvIGNhbGxzIHRvIGdldHRlcnMgKG9wZXJhdG9yLmZpZWxkIGFuZCBvcGVyYXRvcltd
KSwKKy8vIHNldHRlcnMgKG9wZXJhdG9yLmZpZWxkPSBhbmQgb3BlcmF0b3JbXT0pLCBhbmQgYW5k
ZXJzIChvcGVyYXRvciYuZmllbGQgYW5kIG9wZXJhdG9yJltdKS4gVGhpcyBpbnZvbHZlcworLy8g
dHJhbnNmb3JtaW5nIGFzc2lnbm1lbnRzIGFuZCBSTVcncyB0byBkbyBsdmFsdWUgZW11bGF0aW9u
LgorZnVuY3Rpb24gcmVzb2x2ZVByb3BlcnRpZXMocHJvZ3JhbSkKK3sKKyAgICBwcm9ncmFtLnZp
c2l0KG5ldyBQcm9wZXJ0eVJlc29sdmVyKCkpOworfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUmVzb2x2ZVR5cGVEZWZzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVUeXBlRGVmcy5qcwkocmV2aXNpb24gMjIyMTQwKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZVR5cGVEZWZzLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw4ICsyNCwyNiBAQAogICovCiAidXNlIHN0cmljdCI7CiAKLWZ1bmN0
aW9uIHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKQorZnVuY3Rpb24gcmVzb2x2ZVR5cGVEZWZzSW5U
eXBlcyhwcm9ncmFtKQogewotICAgIHByb2dyYW0udmlzaXQobmV3IFR5cGVEZWZSZXNvbHZlcigp
KTsKKyAgICBsZXQgcmVzb2x2ZXIgPSBuZXcgVHlwZURlZlJlc29sdmVyKCk7CisgICAgZm9yIChs
ZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygpKQorICAgICAgICB0eXBlLnZpc2l0KHJl
c29sdmVyKTsKK30KKworZnVuY3Rpb24gcmVzb2x2ZVR5cGVEZWZzSW5Qcm90b2NvbHMocHJvZ3Jh
bSkKK3sKKyAgICBsZXQgcmVzb2x2ZXIgPSBuZXcgVHlwZURlZlJlc29sdmVyKCk7CisgICAgZm9y
IChsZXQgcHJvdG9jb2wgb2YgcHJvZ3JhbS5wcm90b2NvbHMudmFsdWVzKCkpCisgICAgICAgIHBy
b3RvY29sLnZpc2l0KHJlc29sdmVyKTsKK30KKworZnVuY3Rpb24gcmVzb2x2ZVR5cGVEZWZzSW5G
dW5jdGlvbnMocHJvZ3JhbSkKK3sKKyAgICBsZXQgcmVzb2x2ZXIgPSBuZXcgVHlwZURlZlJlc29s
dmVyKCk7CisgICAgZm9yIChsZXQgZnVuY3Mgb2YgcHJvZ3JhbS5mdW5jdGlvbnMudmFsdWVzKCkp
IHsKKyAgICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jcykKKyAgICAgICAgICAgIGZ1bmMudmlz
aXQocmVzb2x2ZXIpOworICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9SZXR1cm5DaGVja2VyLmpzCShyZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXR1cm5DaGVja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC03Niw3ICs3Niw3IEBAIGNsYXNzIFJldHVybkNoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKIAog
ICAgIF9pc0Jvb2xDYXN0RnJvbUxpdGVyYWxUcnVlKG5vZGUpCiAgICAgewotICAgICAgICByZXR1
cm4gbm9kZS5pc0Nhc3QgJiYgbm9kZS5yZXR1cm5UeXBlIGluc3RhbmNlb2YgVHlwZVJlZiAmJiBu
b2RlLnJldHVyblR5cGUuZXF1YWxzKHRoaXMuX3Byb2dyYW0uaW50cmluc2ljcy5ib29sKSAmJiBu
b2RlLmFyZ3VtZW50TGlzdC5sZW5ndGggPT0gMSAmJiBub2RlLmFyZ3VtZW50TGlzdFswXS5saXN0
Lmxlbmd0aCA9PSAxICYmIG5vZGUuYXJndW1lbnRMaXN0WzBdLmxpc3RbMF0gaW5zdGFuY2VvZiBC
b29sTGl0ZXJhbCAmJiBub2RlLmFyZ3VtZW50TGlzdFswXS5saXN0WzBdLnZhbHVlOworICAgICAg
ICByZXR1cm4gbm9kZS5pc0Nhc3QgJiYgbm9kZS5yZXR1cm5UeXBlIGluc3RhbmNlb2YgVHlwZVJl
ZiAmJiBub2RlLnJldHVyblR5cGUuZXF1YWxzKHRoaXMuX3Byb2dyYW0uaW50cmluc2ljcy5ib29s
KSAmJiBub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGggPT0gMSAmJiBub2RlLmFyZ3VtZW50TGlzdFsw
XSBpbnN0YW5jZW9mIEJvb2xMaXRlcmFsICYmIG5vZGUuYXJndW1lbnRMaXN0WzBdLnZhbHVlOwog
ICAgIH0KIAogICAgIHZpc2l0V2hpbGVMb29wKG5vZGUpCkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkocmV2aXNpb24gMjIyMTQwKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEw
ICsyNyw5IEBACiAvLyBGSVhNRTogVGhpcyBzaG91bGQgaGF2ZSBzZW5zaWJsZSBiZWhhdmlvciB3
aGVuIGl0IGVuY291bnRlcnMgZGVmaW5pdGlvbnMgdGhhdCBpdCBjYW5ub3QgaGFuZGxlLiBSaWdo
dAogLy8gbm93IHdlIGFyZSBoYWNraXNobHkgcHJldmVudGluZyB0aGlzIGJ5IHdyYXBwaW5nIHRo
aW5ncyBpbiBUeXBlUmVmLiBUaGF0J3MgcHJvYmFibHkgd3JvbmcuCiAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjA4Ci1jbGFzcyBSZXdyaXRlciBleHRlbmRz
IFZpc2l0b3JCYXNlIHsKK2NsYXNzIFJld3JpdGVyIHsKICAgICBjb25zdHJ1Y3RvcigpCiAgICAg
ewotICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlzLl9tYXBwaW5nID0gbmV3IE1hcCgpOwog
ICAgIH0KICAgICAKQEAgLTczLDcgKzcyLDggQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNp
dG9yQmFzZSB7CiAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5uYW1lLAogICAgICAgICAg
ICAgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpLAogICAgICAgICAgICAgbm9kZS50eXBlUGFy
YW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdCh0aGlzKSksCi0gICAgICAg
ICAgICBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQodGhp
cykpKTsKKyAgICAgICAgICAgIG5vZGUucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFt
ZXRlci52aXNpdCh0aGlzKSksCisgICAgICAgICAgICBub2RlLmlzQ2FzdCk7CiAgICAgICAgIHJl
c3VsdC5wcm90b2NvbERlY2wgPSBub2RlLnByb3RvY29sRGVjbDsKICAgICAgICAgcmVzdWx0LnBv
c3NpYmxlT3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZU92ZXJsb2FkczsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTk5LDcgKzk5LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9y
QmFzZSB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmFyaWFibGVEZWNsKAogICAgICAgICAg
ICAgbm9kZS5vcmlnaW4sIG5vZGUubmFtZSwKICAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0
aGlzKSwKLSAgICAgICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIgPyBub2RlLmluaXRpYWxpemVyLnZp
c2l0KHRoaXMpIDogbnVsbCk7CisgICAgICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5pdGlhbGl6
ZXIsIHRoaXMpKTsKICAgICAgICAgdGhpcy5fbWFwTm9kZShub2RlLCByZXN1bHQpOwogICAgICAg
ICByZXN1bHQuZVB0ciA9IG5vZGUuZVB0cjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEz
MSw3ICsxMzEsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2
aXNpdFR5cGVSZWYobm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgVHlwZVJl
Zihub2RlLm9yaWdpbiwgbm9kZS5uYW1lLCBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1
bWVudCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhpcykpKTsKLSAgICAgICAgcmVzdWx0LnR5cGUg
PSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1
bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAgICAgCkBAIC0xNjMsMjQgKzE2Myw1NCBAQCBjbGFzcyBSZXdyaXRlciBl
eHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdEFzc2lnbm1lbnQobm9kZSkKICAgICB7CiAg
ICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXNzaWdubWVudChub2RlLm9yaWdpbiwgbm9kZS5saHMu
dmlzaXQodGhpcyksIG5vZGUucmhzLnZpc2l0KHRoaXMpKTsKLSAgICAgICAgcmVzdWx0LnR5cGUg
PSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1
bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgdmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKG5v
ZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24obm9kZS5vcmlnaW4sIG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpKTsKKyAgICAgICAgcmVz
dWx0Lm9sZFZhbHVlVmFyID0gbm9kZS5vbGRWYWx1ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAg
cmVzdWx0Lm5ld1ZhbHVlVmFyID0gbm9kZS5uZXdWYWx1ZVZhci52aXNpdCh0aGlzKTsKKyAgICAg
ICAgcmVzdWx0Lm5ld1ZhbHVlRXhwID0gbm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0aGlzKTsKKyAg
ICAgICAgcmVzdWx0LnJlc3VsdEV4cCA9IG5vZGUucmVzdWx0RXhwLnZpc2l0KHRoaXMpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhw
cmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBEZXJlZmVyZW5j
ZUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUucHRyLnZpc2l0KHRoaXMpKTsKLSAgICAgICAg
cmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQodGhpcykgOiBudWxsOwor
ICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKKyAgICAg
ICAgcmVzdWx0LmFkZHJlc3NTcGFjZSA9IG5vZGUuYWRkcmVzc1NwYWNlOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAgICBfaGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uKHJlc3VsdCwgbm9kZSkKKyAgICB7CisgICAgICAgIHJlc3VsdC5wb3NzaWJsZUdldE92ZXJs
b2FkcyA9IG5vZGUucG9zc2libGVHZXRPdmVybG9hZHM7CisgICAgICAgIHJlc3VsdC5wb3NzaWJs
ZVNldE92ZXJsb2FkcyA9IG5vZGUucG9zc2libGVTZXRPdmVybG9hZHM7CisgICAgICAgIHJlc3Vs
dC5wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IG5vZGUucG9zc2libGVBbmRPdmVybG9hZHM7CisgICAg
ICAgIHJlc3VsdC5iYXNlVHlwZSA9IE5vZGUudmlzaXQobm9kZS5iYXNlVHlwZSwgdGhpcyk7Cisg
ICAgICAgIHJlc3VsdC5jYWxsRm9yR2V0ID0gTm9kZS52aXNpdChub2RlLmNhbGxGb3JHZXQsIHRo
aXMpOworICAgICAgICByZXN1bHQucmVzdWx0VHlwZUZvckdldCA9IE5vZGUudmlzaXQobm9kZS5y
ZXN1bHRUeXBlRm9yR2V0LCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LmNhbGxGb3JBbmQgPSBOb2Rl
LnZpc2l0KG5vZGUuY2FsbEZvckFuZCwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBl
Rm9yQW5kID0gTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JBbmQsIHRoaXMpOworICAgICAg
ICByZXN1bHQuY2FsbEZvclNldCA9IE5vZGUudmlzaXQobm9kZS5jYWxsRm9yU2V0LCB0aGlzKTsK
KyAgICAgICAgcmVzdWx0LmVycm9yRm9yU2V0ID0gbm9kZS5lcnJvckZvclNldDsKKyAgICAgICAg
cmVzdWx0LnVwZGF0ZUNhbGxzKCk7CisgICAgfQorICAgIAogICAgIHZpc2l0RG90RXhwcmVzc2lv
bihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBEb3RFeHByZXNzaW9uKG5v
ZGUub3JpZ2luLCBub2RlLnN0cnVjdC52aXNpdCh0aGlzKSwgbm9kZS5maWVsZE5hbWUpOwotICAg
ICAgICByZXN1bHQuc3RydWN0VHlwZSA9IG5vZGUuc3RydWN0VHlwZSA/IG5vZGUuc3RydWN0VHlw
ZS52aXNpdCh0aGlzKSA6IG51bGw7Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmV3cml0
ZSBmaWVsZCwgc2luY2UgdGhpcyBpcyBhIGRlZXAgcmVmZXJlbmNlIGdvaW5nIG91dCBvZiB0aGUg
ZnVuY3Rpb24uCi0gICAgICAgIC8vIEFsc28sIHRoaXMgaXMgc2V0IHVwIGR1cmluZyBpbmxpbmlu
Zywgc28gd2UncmUgYWxyZWFkeSBmdWxseSBtb25vbW9ycGhpc2VkLgotICAgICAgICByZXN1bHQu
ZmllbGQgPSBub2RlLmZpZWxkOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24ocmVzdWx0LCBub2RlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCBy
ZXN1bHQgPSBuZXcgSW5kZXhFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmFycmF5LnZpc2l0
KHRoaXMpLCBub2RlLmluZGV4LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgdGhpcy5faGFuZGxlUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKHJlc3VsdCwgbm9kZSk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogICAgIApAQCAtMjE2LDcgKzI0Niw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVu
ZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0UmV0dXJuKG5vZGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gbmV3IFJldHVybihub2RlLm9yaWdpbiwgbm9kZS52YWx1ZSA/IG5vZGUudmFs
dWUudmlzaXQodGhpcykgOiBudWxsKTsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm4obm9kZS5v
cmlnaW4sIE5vZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcykpOwogICAgIH0KICAgICAKICAgICB2
aXNpdENvbnRpbnVlKG5vZGUpCkBAIC0yNDEsNyArMjcxLDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0
ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9kZSkKICAg
ICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgbm9kZS5jb25zdHJ1Y3Rvcihub2RlLm9yaWdp
biwgbm9kZS52YWx1ZSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50
eXBlLnZpc2l0KHRoaXMpIDogbnVsbDsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBOb2RlLnZpc2l0
KG5vZGUudHlwZSwgdGhpcyk7CiAgICAgICAgIHJlc3VsdC5wcmVmZXJyZWRUeXBlID0gbm9kZS5w
cmVmZXJyZWRUeXBlLnZpc2l0KHRoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
QEAgLTI2Miw3ICsyOTIsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
ICAgICB2aXNpdE51bGxUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3
IE51bGxUeXBlKG5vZGUub3JpZ2luKTsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUg
PyBub2RlLnR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5v
ZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKQEAgLTI4MSw3ICszMTEsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNl
IHsKICAgICAgICAgcmVzdWx0LnBvc3NpYmxlT3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZU92ZXJs
b2FkczsKICAgICAgICAgaWYgKG5vZGUuaXNDYXN0KQogICAgICAgICAgICAgcmVzdWx0LnNldENh
c3REYXRhKG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKSk7Ci0gICAgICAgIHJlc3VsdC5yZXN1
bHRUeXBlID0gbm9kZS5yZXN1bHRUeXBlID8gbm9kZS5yZXN1bHRUeXBlLnZpc2l0KHRoaXMpIDog
bnVsbDsKKyAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBOb2RlLnZpc2l0KG5vZGUucmVzdWx0
VHlwZSwgdGhpcyk7CiAgICAgICAgIHJlc3VsdC5yZXN1bHRFUHRyID0gbm9kZS5yZXN1bHRFUHRy
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTI5MSw3ICszMjEsNyBAQCBjbGFz
cyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5l
dyBDYWxsRXhwcmVzc2lvbigKICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm5hbWUsCiAg
ICAgICAgICAgICBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9PiB0eXBlQXJn
dW1lbnQudmlzaXQodGhpcykpLAotICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFy
Z3VtZW50ID0+IGFyZ3VtZW50LnZpc2l0KHRoaXMpKSk7CisgICAgICAgICAgICBub2RlLmFyZ3Vt
ZW50TGlzdC5tYXAoYXJndW1lbnQgPT4gTm9kZS52aXNpdChhcmd1bWVudCwgdGhpcykpKTsKICAg
ICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0Rlcml2ZWRDYWxsRGF0YShub2RlLCByZXN1bHQpOwog
ICAgIH0KICAgICAKQEAgLTI5OSw3ICszMjksNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZp
c2l0b3JCYXNlIHsKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgRnVuY3Rpb25MaWtl
QmxvY2soCiAgICAgICAgICAgICBub2RlLm9yaWdpbiwKLSAgICAgICAgICAgIG5vZGUucmV0dXJu
VHlwZSA/IG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKSA6IG51bGwsCisgICAgICAgICAgICBO
b2RlLnZpc2l0KG5vZGUucmV0dXJuVHlwZSwgdGhpcyksCiAgICAgICAgICAgICBub2RlLmFyZ3Vt
ZW50TGlzdC5tYXAoYXJndW1lbnQgPT4gYXJndW1lbnQudmlzaXQodGhpcykpLAogICAgICAgICAg
ICAgbm9kZS5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMp
KSwKICAgICAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKSk7CkBAIC0zMjMsNyArMzUzLDcg
QEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAKICAgICB2aXNpdElmU3Rh
dGVtZW50KG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IElmU3RhdGVtZW50KG5vZGUu
b3JpZ2luLCBub2RlLmNvbmRpdGlvbmFsLnZpc2l0KHRoaXMpLCBub2RlLmJvZHkudmlzaXQodGhp
cyksIG5vZGUuZWxzZUJvZHkgPyBub2RlLmVsc2VCb2R5LnZpc2l0KHRoaXMpIDogdW5kZWZpbmVk
KTsKKyAgICAgICAgcmV0dXJuIG5ldyBJZlN0YXRlbWVudChub2RlLm9yaWdpbiwgbm9kZS5jb25k
aXRpb25hbC52aXNpdCh0aGlzKSwgbm9kZS5ib2R5LnZpc2l0KHRoaXMpLCBOb2RlLnZpc2l0KG5v
ZGUuZWxzZUJvZHksIHRoaXMpKTsKICAgICB9CiAKICAgICB2aXNpdFdoaWxlTG9vcChub2RlKQpA
QCAtMzM5LDIyICszNjksMjQgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7
CiAgICAgdmlzaXRGb3JMb29wKG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEZvckxv
b3Aobm9kZS5vcmlnaW4sCi0gICAgICAgICAgICBub2RlLmluaXRpYWxpemF0aW9uID8gbm9kZS5p
bml0aWFsaXphdGlvbi52aXNpdCh0aGlzKSA6IHVuZGVmaW5lZCwKLSAgICAgICAgICAgIG5vZGUu
Y29uZGl0aW9uID8gbm9kZS5jb25kaXRpb24udmlzaXQodGhpcykgOiB1bmRlZmluZWQsCi0gICAg
ICAgICAgICBub2RlLmluY3JlbWVudCA/IG5vZGUuaW5jcmVtZW50LnZpc2l0KHRoaXMpIDogdW5k
ZWZpbmVkLAorICAgICAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRpYWxpemF0aW9uLCB0aGlz
KSwKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5jb25kaXRpb24sIHRoaXMpLAorICAgICAg
ICAgICAgTm9kZS52aXNpdChub2RlLmluY3JlbWVudCwgdGhpcyksCiAgICAgICAgICAgICBub2Rl
LmJvZHkudmlzaXQodGhpcykpOwogICAgIH0KICAgICAKLSAgICB2aXNpdExldEV4cHJlc3Npb24o
bm9kZSkKKyAgICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewotICAgICAgICBs
ZXQgcmVzdWx0ID0gbmV3IExldEV4cHJlc3Npb24obm9kZS5vcmlnaW4pOwotICAgICAgICByZXN1
bHQuaW5kZXggPSBub2RlLmluZGV4OwotICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/
IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7Ci0gICAgICAgIHJlc3VsdC5hcmd1bWVudCA9
IG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgQW5v
bnltb3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUudHlwZS52aXNpdCh0aGlzKSk7CisgICAg
ICAgIHJlc3VsdC5faW5kZXggPSBub2RlLl9pbmRleDsKICAgICAgICAgdGhpcy5fbWFwTm9kZShu
b2RlLCByZXN1bHQpOwotICAgICAgICByZXN1bHQuYm9keSA9IG5vZGUuYm9keS52aXNpdCh0aGlz
KTsKICAgICAgICAgcmVzdWx0LmVQdHIgPSBub2RlLmVQdHI7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQorICAgIAorICAgIHZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKG5vZGUpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IElkZW50aXR5RXhwcmVzc2lvbihub2RlLnRhcmdldC52aXNp
dCh0aGlzKSk7CisgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TdGFuZGFyZExpYnJhcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCShyZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDYgKzY1LDE4IEBAIG5hdGl2ZSBmbG9hdCBvcGVyYXRvciooZmxvYXQsIGZsb2F0KTsK
IG5hdGl2ZSBkb3VibGUgb3BlcmF0b3IqKGRvdWJsZSwgZG91YmxlKTsKIG5hdGl2ZSBpbnQgb3Bl
cmF0b3IvKGludCwgaW50KTsKIG5hdGl2ZSB1aW50IG9wZXJhdG9yLyh1aW50LCB1aW50KTsKK25h
dGl2ZSBpbnQgb3BlcmF0b3ImKGludCwgaW50KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3J8KGludCwg
aW50KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3JeKGludCwgaW50KTsKK25hdGl2ZSBpbnQgb3BlcmF0
b3J+KGludCk7CituYXRpdmUgaW50IG9wZXJhdG9yPDwoaW50LCB1aW50KTsKK25hdGl2ZSBpbnQg
b3BlcmF0b3I+PihpbnQsIHVpbnQpOworbmF0aXZlIHVpbnQgb3BlcmF0b3ImKHVpbnQsIHVpbnQp
OworbmF0aXZlIHVpbnQgb3BlcmF0b3J8KHVpbnQsIHVpbnQpOworbmF0aXZlIHVpbnQgb3BlcmF0
b3JeKHVpbnQsIHVpbnQpOworbmF0aXZlIHVpbnQgb3BlcmF0b3J+KHVpbnQpOworbmF0aXZlIHVp
bnQgb3BlcmF0b3I8PCh1aW50LCB1aW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yPj4odWludCwg
dWludCk7CiBuYXRpdmUgZmxvYXQgb3BlcmF0b3IvKGZsb2F0LCBmbG9hdCk7CiBuYXRpdmUgZG91
YmxlIG9wZXJhdG9yLyhkb3VibGUsIGRvdWJsZSk7CiBuYXRpdmUgYm9vbCBvcGVyYXRvcj09KGlu
dCwgaW50KTsKQEAgLTg5LDYgKzEwMSwzNSBAQCBuYXRpdmUgYm9vbCBvcGVyYXRvcj49KHVpbnQs
IHVpbnQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I+PShmbG9hdCwgZmxvYXQpOwogbmF0aXZlIGJv
b2wgb3BlcmF0b3I+PShkb3VibGUsIGRvdWJsZSk7CiAKK2Jvb2wgb3BlcmF0b3ImKGJvb2wgYSwg
Ym9vbCBiKQoreworICAgIGlmIChhKQorICAgICAgICByZXR1cm4gYjsKKyAgICByZXR1cm4gZmFs
c2U7Cit9Citib29sIG9wZXJhdG9yfChib29sIGEsIGJvb2wgYikKK3sKKyAgICBpZiAoYSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBmYWxzZTsKK30KK2Jvb2wgb3BlcmF0b3JeKGJvb2wgYSwgYm9vbCBiKQoreworICAg
IGlmIChhKQorICAgICAgICByZXR1cm4gIWI7CisgICAgcmV0dXJuIGI7Cit9Citib29sIG9wZXJh
dG9yfihib29sIHZhbHVlKQoreworICAgIHJldHVybiAhdmFsdWU7Cit9CisKK3Byb3RvY29sIEFk
ZGFibGUgeworICAgIEFkZGFibGUgb3BlcmF0b3IrKEFkZGFibGUsIEFkZGFibGUpOworfQorCiBw
cm90b2NvbCBFcXVhdGFibGUgewogICAgIGJvb2wgb3BlcmF0b3I9PShFcXVhdGFibGUsIEVxdWF0
YWJsZSk7CiB9CkBAIC0xMTMsNCArMTU0LDE0IEBAIG5hdGl2ZSB0aHJlYWQgVF4gb3BlcmF0b3Im
W108VD4odGhyZWFkIFQKIG5hdGl2ZSB0aHJlYWRncm91cCBUXiBvcGVyYXRvciZbXTxUOnByaW1p
dGl2ZT4odGhyZWFkZ3JvdXAgVFtdLCB1aW50KTsKIG5hdGl2ZSBkZXZpY2UgVF4gb3BlcmF0b3Im
W108VDpwcmltaXRpdmU+KGRldmljZSBUW10sIHVpbnQpOwogbmF0aXZlIGNvbnN0YW50IFReIG9w
ZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihjb25zdGFudCBUW10sIHVpbnQpOworCituYXRpdmUgdWlu
dCBvcGVyYXRvci5sZW5ndGg8VD4odGhyZWFkIFRbXSk7CituYXRpdmUgdWludCBvcGVyYXRvci5s
ZW5ndGg8VDpwcmltaXRpdmU+KHRocmVhZGdyb3VwIFRbXSk7CituYXRpdmUgdWludCBvcGVyYXRv
ci5sZW5ndGg8VDpwcmltaXRpdmU+KGRldmljZSBUW10pOworbmF0aXZlIHVpbnQgb3BlcmF0b3Iu
bGVuZ3RoPFQ6cHJpbWl0aXZlPihjb25zdGFudCBUW10pOworCit1aW50IG9wZXJhdG9yLmxlbmd0
aDxULCB1aW50IGxlbmd0aD4oVFtsZW5ndGhdKQoreworICAgIHJldHVybiBsZW5ndGg7Cit9CiBg
OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0TGF5b3V0QnVpbGRl
ci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RM
YXlvdXRCdWlsZGVyLmpzCShyZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01OSw1
ICs1OSwxMSBAQCBjbGFzcyBTdHJ1Y3RMYXlvdXRCdWlsZGVyIGV4dGVuZHMgVmlzaXRvCiAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlR5cGUgZG9lcyBub3QgaGF2ZSBzaXplOiAiICsgbm9k
ZS50eXBlKTsKICAgICAgICAgdGhpcy5fb2Zmc2V0ICs9IHNpemU7CiAgICAgfQorICAgIAorICAg
IHZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNp
dE5hdGl2ZUZ1bmNJbnN0YW5jZShub2RlKTsKKyAgICAgICAgbm9kZS5mdW5jLmRpZExheW91dFN0
cnVjdHNJbkltcGxlbWVudGF0aW9uRGF0YShub2RlLmltcGxlbWVudGF0aW9uRGF0YSk7CisgICAg
fQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUu
anMJKHJldmlzaW9uIDIyMjE0MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0
cnVjdFR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3LDIxICs1NywyOSBAQCBjbGFzcyBTdHJ1
Y3RUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IAotICAgIGluc3RhbnRpYXRlKHR5cGVBcmd1bWVudHMsIG1vZGUpCisgICAgaW5zdGFudGlhdGUo
dHlwZUFyZ3VtZW50cyA9IG51bGwpCiAgICAgewotICAgICAgICBpZiAodHlwZUFyZ3VtZW50cy5s
ZW5ndGggIT0gdGhpcy50eXBlUGFyYW1ldGVycy5sZW5ndGgpCi0gICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUg
YXJndW1lbnRzIHRvIGluc3RhbnRpYXRpb24iKTsKKyAgICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9
IG51bGw7CisgICAgICAgIGxldCB0eXBlUGFyYW1ldGVycyA9IHRoaXMudHlwZVBhcmFtZXRlcnM7
CiAgICAgICAgIAotICAgICAgICBpZiAoIXR5cGVBcmd1bWVudHMubGVuZ3RoKQotICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgIGlmICh0eXBlQXJndW1lbnRzKSB7CisgICAgICAgICAg
ICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gdGhpcy50eXBlUGFyYW1ldGVycy5sZW5ndGgp
CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmlu
ZywgIldyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyB0byBpbnN0YW50aWF0aW9uIik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghdHlwZUFyZ3VtZW50cy5sZW5ndGgpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN1YnN0
aXR1dGlvbiA9IG5ldyBTdWJzdGl0dXRpb24odGhpcy50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICB0eXBlUGFyYW1ldGVycyA9IFtdOworICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBsZXQgc3Vic3RpdHV0aW9uID0gbmV3IFN1YnN0aXR1dGlvbih0aGlzLnR5
cGVQYXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKTsKLSAgICAgICAgbGV0IGluc3RhbnRpYXRlSW1t
ZWRpYXRlcyA9IG1vZGUgPT0gInNoYWxsb3ciID8gbnVsbCA6IG5ldyBJbnN0YW50aWF0ZUltbWVk
aWF0ZXMoKTsKLSAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTdHJ1Y3RUeXBlKHRoaXMub3JpZ2lu
LCB0aGlzLm5hbWUsIFtdKTsKKyAgICAgICAgbGV0IGluc3RhbnRpYXRlSW1tZWRpYXRlcyA9IG5l
dyBJbnN0YW50aWF0ZUltbWVkaWF0ZXMoKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTdHJ1
Y3RUeXBlKHRoaXMub3JpZ2luLCB0aGlzLm5hbWUsIHR5cGVQYXJhbWV0ZXJzKTsKICAgICAgICAg
Zm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWVsZHMpIHsKLSAgICAgICAgICAgIGxldCBuZXdGaWVs
ZCA9IGZpZWxkLnZpc2l0KHN1YnN0aXR1dGlvbik7Ci0gICAgICAgICAgICBpZiAoaW5zdGFudGlh
dGVJbW1lZGlhdGVzKQotICAgICAgICAgICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQudmlzaXQo
aW5zdGFudGlhdGVJbW1lZGlhdGVzKTsKKyAgICAgICAgICAgIGxldCBuZXdGaWVsZCA9IGZpZWxk
OworICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbikKKyAgICAgICAgICAgICAgICBuZXdGaWVs
ZCA9IG5ld0ZpZWxkLnZpc2l0KHN1YnN0aXR1dGlvbik7CisgICAgICAgICAgICBuZXdGaWVsZCA9
IG5ld0ZpZWxkLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyk7CiAgICAgICAgICAgICByZXN1
bHQuYWRkKG5ld0ZpZWxkKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Vic3RpdHV0aW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qcwkocmV2
aXNpb24gMjIyMTQwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Vic3RpdHV0
aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBAIGNsYXNzIFN1YnN0aXR1dGlv
biBleHRlbmRzIFJld3JpdGVyIHsKICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQocGFyYW1ldGVy
c1tpXSwgYXJndW1lbnRMaXN0W2ldKTsKICAgICB9CiAgICAgCisgICAgZ2V0IG1hcCgpIHsgcmV0
dXJuIHRoaXMuX21hcDsgfQorICAgIAogICAgIHZpc2l0VHlwZVJlZihub2RlKQogICAgIHsKICAg
ICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdGhpcy5fbWFwLmdldChub2RlLnR5cGUpOwpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3VmZml4Q2FsbEFzc2ln
bm1lbnQuanMJKHJldmlzaW9uIDIyMjE0MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1N1ZmZpeENhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVudCkKQEAgLTEsNDQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJp
Y3QiOwotCi1jbGFzcyBTdWZmaXhDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewot
ICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzKQotICAgIHsKLSAgICAgICAgc3VwZXIo
b3JpZ2luKTsKLSAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMuX2xocyA9
IGxoczsKLSAgICAgICAgdGhpcy5mdW5jID0gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG5h
bWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9Ci0gICAgZ2V0IGxocygpIHsgcmV0dXJuIHRoaXMu
X2xoczsgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
LmxocyArICIgc3VmZml4ICIgKyB0aGlzLm5hbWU7Ci0gICAgfQotfQotCkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RB
Y2Nlc3NvcnMuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVz
ZSBzdHJpY3QiOworCitmdW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0p
Cit7CisgICAgZm9yIChsZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygpKSB7CisgICAg
ICAgIGlmICghKHR5cGUgaW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAKKyAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdHlwZS5maWVsZHMpIHsK
KyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZS50eXBlUGFyYW1ldGVycy5tYXAoCisgICAg
ICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFtZXRlci52aXNpdChuZXcg
VHlwZVBhcmFtZXRlclJld3JpdGVyKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHlwZUFyZ3VtZW50cygpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVQYXJhbWV0ZXJzLm1hcCh0eXBlUGFyYW1ldGVy
ID0+IHR5cGVQYXJhbWV0ZXIudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gc2V0dXBJbXBsZW1lbnRhdGlv
bkRhdGEobmF0aXZlRnVuYywgaW1wbGVtZW50YXRpb24pCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbmF0aXZlRnVuYy5pbnN0YW50aWF0ZUltcGxlbWVudGF0aW9uID0gc3Vic3RpdHV0
aW9uID0+IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1R5cGUgPSB0eXBlLmluc3RhbnRp
YXRlKG5hdGl2ZUZ1bmMudHlwZVBhcmFtZXRlcnMubWFwKHR5cGVQYXJhbWV0ZXIgPT4geworICAg
ICAgICAgICAgICAgICAgICAgICAgbGV0IHN1YnN0aXR1dGUgPSBzdWJzdGl0dXRpb24ubWFwLmdl
dCh0eXBlUGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Vic3RpdHV0
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgc3Vi
c3RpdHV0ZSBmb3IgdHlwZSBwYXJhbWV0ZXIgIiArIHR5cGVQYXJhbWV0ZXIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGU7CisgICAgICAgICAgICAgICAgICAgIH0p
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiBuZXdUeXBlLCBmaWVsZE5hbWU6
IGZpZWxkLm5hbWV9OworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgbmF0aXZl
RnVuYy52aXNpdEltcGxlbWVudGF0aW9uRGF0YSA9IChpbXBsZW1lbnRhdGlvbkRhdGEsIHZpc2l0
b3IpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVmlzaXRpbmcgdGhlIHR5cGUgZmlyc3Qg
ZW5zdXJlcyB0aGF0IHRoZSBzdHJ1Y3QgbGF5b3V0IGJ1aWxkZXIgZmlndXJlcyBvdXQgdGhlIGZp
ZWxkJ3MKKyAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0LgorICAgICAgICAgICAgICAgICAg
ICBpbXBsZW1lbnRhdGlvbkRhdGEudHlwZS52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMuZGlkTGF5b3V0U3RydWN0c0luSW1wbGVt
ZW50YXRpb25EYXRhID0gaW1wbGVtZW50YXRpb25EYXRhID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgbGV0IHN0cnVjdFNpemUgPSBpbXBsZW1lbnRhdGlvbkRhdGEudHlwZS5zaXplOworICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0U2l6ZSA9PSBudWxsKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBzdHJ1Y3Qgc2l6ZSBmb3IgIiArIG5hdGl2ZUZ1bmMp
OworICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBpbXBsZW1lbnRhdGlvbkRhdGEudHlw
ZS5maWVsZEJ5TmFtZShpbXBsZW1lbnRhdGlvbkRhdGEuZmllbGROYW1lKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFmaWVsZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQ291bGQgbm90IGZpbmQgZmllbGQiKTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG9m
ZnNldCA9IGZpZWxkLm9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkU2l6ZSA9
IGZpZWxkLnR5cGUuc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkU2l6ZSA9PSBu
dWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBmaWVsZCBz
aXplIGZvciAiICsgbmF0aXZlRnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQg
PT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gb2Zm
c2V0IGZvciAiICsgbmF0aXZlRnVuYyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAg
ICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEuc3RydWN0U2l6ZSA9IHN0cnVjdFNpemU7Cisg
ICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0YS5maWVsZFNpemUgPSBmaWVsZFNp
emU7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLmltcGxl
bWVudGF0aW9uID0gKGFyZ3VtZW50TGlzdCwgbm9kZSkgPT4geworICAgICAgICAgICAgICAgICAg
ICBsZXQgbmF0aXZlRnVuY0luc3RhbmNlID0gbm9kZS5uYXRpdmVGdW5jSW5zdGFuY2U7CisgICAg
ICAgICAgICAgICAgICAgIGxldCBpbXBsZW1lbnRhdGlvbkRhdGEgPSBuYXRpdmVGdW5jSW5zdGFu
Y2UuaW1wbGVtZW50YXRpb25EYXRhOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1wbGVt
ZW50YXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudExpc3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEub2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhLnN0cnVjdFNpemUsCisgICAgICAgICAgICAg
ICAgICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEuZmllbGRTaXplKTsKKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBj
cmVhdGVGaWVsZFR5cGUoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBm
aWVsZC50eXBlLnZpc2l0KG5ldyBTdWJzdGl0dXRpb24odHlwZS50eXBlUGFyYW1ldGVycywgdHlw
ZVBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ZnVuY3Rpb24gY3JlYXRlVHlwZVJlZigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIFR5cGVSZWYuaW5zdGFudGlhdGUodHlwZSwgY3JlYXRlVHlwZUFyZ3VtZW50cygpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGV0IGlzQ2FzdCA9IGZh
bHNlOworICAgICAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXJzOworICAgICAgICAgICAgbGV0IG5h
dGl2ZUZ1bmM7CisKKyAgICAgICAgICAgIC8vIFRoZSBnZXR0ZXI6IG9wZXJhdG9yLmZpZWxkCisg
ICAgICAgICAgICB0eXBlUGFyYW1ldGVycyA9IGNyZWF0ZVR5cGVQYXJhbWV0ZXJzKCk7CisgICAg
ICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAgICAgICAgICAgICAgZmll
bGQub3JpZ2luLCAib3BlcmF0b3IuIiArIGZpZWxkLm5hbWUsIGNyZWF0ZUZpZWxkVHlwZSgpLCB0
eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICBbbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQu
b3JpZ2luLCBudWxsLCBjcmVhdGVUeXBlUmVmKCkpXSwgaXNDYXN0KTsKKyAgICAgICAgICAgIHNl
dHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9mZnNldCwgc3RydWN0
U2l6ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBF
UHRyKG5ldyBFQnVmZmVyKGZpZWxkU2l6ZSksIDApOworICAgICAgICAgICAgICAgIHJlc3VsdC5j
b3B5RnJvbShiYXNlLnBsdXMob2Zmc2V0KSwgZmllbGRTaXplKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBwcm9ncmFtLmFkZChu
YXRpdmVGdW5jKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhlIHNldHRlcjogb3Bl
cmF0b3IuZmllbGQ9CisgICAgICAgICAgICB0eXBlUGFyYW1ldGVycyA9IGNyZWF0ZVR5cGVQYXJh
bWV0ZXJzKCk7CisgICAgICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAg
ICAgICAgICAgICAgZmllbGQub3JpZ2luLCAib3BlcmF0b3IuIiArIGZpZWxkLm5hbWUgKyAiPSIs
IGNyZWF0ZVR5cGVSZWYoKSwgdHlwZVBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgWworICAg
ICAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNy
ZWF0ZVR5cGVSZWYoKSksCisgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKGZp
ZWxkLm9yaWdpbiwgbnVsbCwgY3JlYXRlRmllbGRUeXBlKCkpCisgICAgICAgICAgICAgICAgXSwK
KyAgICAgICAgICAgICAgICBpc0Nhc3QpOworICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlv
bkRhdGEobmF0aXZlRnVuYywgKFtiYXNlLCB2YWx1ZV0sIG9mZnNldCwgc3RydWN0U2l6ZSwgZmll
bGRTaXplKSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFUHRyKG5ldyBF
QnVmZmVyKHN0cnVjdFNpemUpLCAwKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuY29weUZyb20o
YmFzZSwgc3RydWN0U2l6ZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LnBsdXMob2Zmc2V0KS5j
b3B5RnJvbSh2YWx1ZSwgZmllbGRTaXplKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQK
KyAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVwQW5kZXIoYWRkcmVzc1NwYWNlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzID0gY3JlYXRlVHlwZVBhcmFtZXRl
cnMoKTsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5jID0gbmV3IE5hdGl2ZUZ1bmMoCisgICAg
ICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgIm9wZXJhdG9yJi4iICsgZmllbGQubmFtZSwg
bmV3IFB0clR5cGUoZmllbGQub3JpZ2luLCBhZGRyZXNzU3BhY2UsIGNyZWF0ZUZpZWxkVHlwZSgp
KSwKKyAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAg
ICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jUGFyYW1ldGVyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLm9yaWdpbiwgbnVsbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXcgUHRyVHlwZShmaWVsZC5vcmlnaW4sIGFkZHJlc3NTcGFjZSwgY3Jl
YXRlVHlwZVJlZigpKSkKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAg
ICAgaXNDYXN0KTsKKyAgICAgICAgICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRp
dmVGdW5jLCAoW2Jhc2VdLCBvZmZzZXQsIHN0cnVjdFNpemUsIGZpZWxkU2l6ZSkgPT4geworICAg
ICAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFiYXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFw
RXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBkZXJlZmVyZW5jZSIpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gRVB0ci5ib3goYmFzZS5wbHVzKG9mZnNldCkpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzZXR1cEFuZGVyKCJ0
aHJlYWQiKTsKKyAgICAgICAgICAgIGlmICh0eXBlLmluc3RhbnRpYXRlKCkuaXNQcmltaXRpdmUp
IHsKKyAgICAgICAgICAgICAgICBzZXR1cEFuZGVyKCJ0aHJlYWRncm91cCIpOworICAgICAgICAg
ICAgICAgIHNldHVwQW5kZXIoImRldmljZSIpOworICAgICAgICAgICAgICAgIHNldHVwQW5kZXIo
ImNvbnN0YW50Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCShyZXZpc2lvbiAyMjIxNDApCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTYsMTMgKzYsMTQgQEAKIDxzY3JpcHQgc3JjPSJSZWZlcmVuY2VUeXBlLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJWYWx1ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRXhwcmVz
c2lvbi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iVmlzaXRvckJhc2UuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IlJld3JpdGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJWaXNp
dG9yLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDcmVhdGVMaXRlcmFsLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJDcmVhdGVMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIAogPHNjcmlwdCBz
cmM9IkFkZHJlc3NTcGFjZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQW5vbnltb3VzVmFy
aWFibGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFycmF5UmVmVHlwZS5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iQXJyYXlUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJB
c3NpZ25tZW50LmpzIj48L3NjcmlwdD4KQEAgLTIwLDcgKzIxLDYgQEAKIDxzY3JpcHQgc3JjPSJC
bG9jay5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQm9vbExpdGVyYWwuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IkJyZWFrLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJDYWxsQXNz
aWdubWVudC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ2FsbEV4cHJlc3Npb24uanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IkNhbGxGdW5jdGlvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iQ2hlY2suanMiPjwvc2NyaXB0PgpAQCAtNDgsNiArNDgsNyBAQAogPHNjcmlwdCBzcmM9
IkV2YWx1YXRvci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRXhwcmVzc2lvbkZpbmRlci5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRmllbGQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9IkZpbmRIaWdoWm9tYmllcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRmxhdHRlblBy
b3RvY29sRXh0ZW5kcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRmxvYXRMaXRlcmFsLmpz
Ij48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGbG9hdExpdGVyYWxUeXBlLmpzIj48L3NjcmlwdD4K
QEAgLTU3LDcgKzU4LDEwIEBACiA8c2NyaXB0IHNyYz0iRnVuY0luc3RhbnRpYXRvci5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iRnVuY1BhcmFtZXRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iRnVuY3Rpb25MaWtlQmxvY2suanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkhpZ2ha
b21iaWVGaW5kZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IklkZW50aXR5RXhwcmVzc2lv
bi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSWZTdGF0ZW1lbnQuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9IkluZGV4RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
SW5mZXJUeXBlc0ZvckNhbGwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IklubGluZS5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW5saW5lci5qcyI+PC9zY3JpcHQ+CkBAIC04MCwyMCAr
ODQsMjQgQEAKIDxzY3JpcHQgc3JjPSJOYXRpdmVGdW5jSW5zdGFuY2UuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik5hdGl2
ZVR5cGVJbnN0YW5jZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTm9ybWFsVXNlUHJvcGVy
dHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTnVsbExpdGVyYWwuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9Ik51bGxUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQ
YXJzZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJlcGFyZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iUHJvcGVydHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
UHJvZ3JhbS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvdG9jb2wuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IlByb3RvY29sRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
UHJvdG9jb2xGdW5jRGVjbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJvdG9jb2xSZWYu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlB0clR5cGUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9IlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IlJlY3Vyc2lvbkNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJlc29sdmVO
YW1lcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUmVzb2x2ZVByb3BlcnRpZXMuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IlJlc29sdmVUeXBlRGVmcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
UmV0dXJuLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXR1cm5DaGVja2VyLmpzIj48L3Nj
cmlwdD4KQEAgLTEwMiwxMiArMTEwLDE0IEBACiA8c2NyaXB0IHNyYz0iU3RydWN0TGF5b3V0QnVp
bGRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3RydWN0VHlwZS5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iU3Vic3RpdHV0aW9uLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJT
dWZmaXhDYWxsQXNzaWdubWVudC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iU3ludGhlc2l6
ZVN0cnVjdEFjY2Vzc29ycy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZURlZi5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZURlZlJlc29sdmVyLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJUeXBlT3JWYXJpYWJsZVJlZi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
VHlwZVBhcmFtZXRlclJld3JpdGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlUmVm
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlVmFyaWFibGUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9IlR5cGVWYXJpYWJsZVRyYWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IlR5cGVkVmFsdWUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlVpbnRMaXRlcmFsLmpz
Ij48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJVaW50TGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgpA
QCAtMTI3LDEyICsxMzcsMjggQEAKIDxzY3JpcHQ+CiBmdW5jdGlvbiBkb1Rlc3RJbkJyb3dzZXIo
KQogewotICAgIHRyeSB7Ci0gICAgICAgIGRvVGVzdCh3aW5kb3cpOwotICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgcHJpbnQoIkVSUk9SOiAiICsgZS5tZXNzYWdlKTsKLSAgICAgICAgcHJpbnQo
ZS5zdGFjayk7CisgICAgdmFyIHRlc3RlciA9IGRvVGVzdCh3aW5kb3cpOworICAgIHZhciBsYXN0
VGltZTsKKyAgICBmdW5jdGlvbiBuZXh0KCkKKyAgICB7CisgICAgICAgIHZhciBiZWZvcmUgPSBE
YXRlLm5vdygpOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIGlmICh0ZXN0ZXIubmV4dCgpLmRvbmUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICBwcmludCgi
RVJST1I6ICIgKyBlLm1lc3NhZ2UpOworICAgICAgICAgICAgICAgIHByaW50KGUuc3RhY2spOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBu
b3cgPSBEYXRlLm5vdygpOworICAgICAgICAgICAgaWYgKG5vdyAtIGJlZm9yZSA+IDEwMCkgewor
ICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KG5leHQsIDApOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KKyAgICBuZXh0KCk7
CiB9CiA8L3NjcmlwdD4KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVz
dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmpz
CShyZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBAIGlmICh0aGlzLndpbmRvdykgewog
ICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lc3NhZ2VzIikuYXBwZW5kQ2hpbGQoc3Bhbik7
CiAgICAgICAgIHNwYW4uaW5uZXJIVE1MID0gdGV4dC5yZXBsYWNlKC8gL2csICImbmJzcDsiKS5y
ZXBsYWNlKC9cbi9nLCAiPGJyPiIpICsgIjxicj4iOworICAgICAgICB3aW5kb3cuc2Nyb2xsVG8o
MCxkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCk7CiAgICAgfTsKICAgICB0aGlzLnByZWNpc2VU
aW1lID0gKCkgPT4gcGVyZm9ybWFuY2Uubm93KCkgLyAxMDAwOwogfSBlbHNlCkBAIC01Nyw2ICs1
OCwxNCBAQCBmdW5jdGlvbiBtYWtlSW50KHByb2dyYW0sIHZhbHVlKQogICAgIHJldHVybiBUeXBl
ZFZhbHVlLmJveChwcm9ncmFtLmludHJpbnNpY3MuaW50MzIsIHZhbHVlKTsKIH0KIAorZnVuY3Rp
b24gY2hlY2tOdW1iZXIocHJvZ3JhbSwgcmVzdWx0LCBleHBlY3RlZCkKK3sKKyAgICBpZiAoIXJl
c3VsdC50eXBlLmlzTnVtYmVyKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3Vs
dCB0eXBlOyByZXN1bHQ6ICIgKyByZXN1bHQpOworICAgIGlmIChyZXN1bHQudmFsdWUgIT0gZXhw
ZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0OiAiICsgcmVzdWx0
LnZhbHVlICsgIiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIikiKTsKK30KKwogZnVuY3Rpb24g
bWFrZVVpbnQocHJvZ3JhbSwgdmFsdWUpCiB7CiAgICAgcmV0dXJuIFR5cGVkVmFsdWUuYm94KHBy
b2dyYW0uaW50cmluc2ljcy51aW50MzIsIHZhbHVlKTsKQEAgLTQ0OCwxMCArNDU3LDEwIEBAIGZ1
bmN0aW9uIFRFU1RfZGV2aWNlQXJyYXlTdG9yZUludExpdGVyYWwKIGZ1bmN0aW9uIFRFU1Rfc2lt
cGxlUHJvdG9jb2woKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgcHJv
dG9jb2wgQWRkYWJsZSB7Ci0gICAgICAgICAgICBBZGRhYmxlIG9wZXJhdG9yKyhBZGRhYmxlLCBB
ZGRhYmxlKTsKKyAgICAgICAgcHJvdG9jb2wgTXlBZGRhYmxlIHsKKyAgICAgICAgICAgIE15QWRk
YWJsZSBvcGVyYXRvcisoTXlBZGRhYmxlLCBNeUFkZGFibGUpOwogICAgICAgICB9Ci0gICAgICAg
IFQgYWRkPFQ6QWRkYWJsZT4oVCBhLCBUIGIpCisgICAgICAgIFQgYWRkPFQ6TXlBZGRhYmxlPihU
IGEsIFQgYikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGEgKyBiOwogICAgICAgICB9
CkBAIC03ODEsNyArNzkwLDcgQEAgZnVuY3Rpb24gVEVTVF9zdG9yZU51bGxBcnJheVJlZigpCiAg
ICAgICAgICgpID0+IGRvUHJlcChgCiAgICAgICAgICAgICB2b2lkIGZvbygpIHsgbnVsbFswdV0g
PSA0MjsgfQogICAgICAgICBgKSwKLSAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVy
cm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJEaWQgbm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwi
KSAhPSAtMSk7CisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1l
c3NhZ2UuaW5kZXhPZigiTEhTIG9mIGFzc2lnbm1lbnQgaXMgbm90IGFuIExWYWx1ZSIpICE9IC0x
KTsKIH0KIAogZnVuY3Rpb24gVEVTVF9yZXR1cm5OdWxsQXJyYXlSZWYoKQpAQCAtODg5LDE0ICs4
OTgsMTQgQEAgZnVuY3Rpb24gVEVTVF9iYWRJbnRMaXRlcmFsRm9ySW50KCkKIHsKICAgICBjaGVj
a0ZhaWwoCiAgICAgICAgICgpID0+IGRvUHJlcCgidm9pZCBmb28oKSB7IGludCB4ID0gMzAwMDAw
MDAwMDsgfSIpLAotICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworICAg
ICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdTeW50YXhFcnJvcik7CiB9CiAKIGZ1bmN0aW9uIFRF
U1RfYmFkSW50TGl0ZXJhbEZvclVpbnQoKQogewogICAgIGNoZWNrRmFpbCgKICAgICAgICAgKCkg
PT4gZG9QcmVwKCJ2b2lkIGZvbygpIHsgdWludCB4ID0gNTAwMDAwMDAwMDsgfSIpLAotICAgICAg
ICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworICAgICAgICAoZSkgPT4gZSBpbnN0
YW5jZW9mIFdTeW50YXhFcnJvcik7CiB9CiAKIGZ1bmN0aW9uIFRFU1RfYmFkSW50TGl0ZXJhbEZv
ckRvdWJsZSgpCkBAIC0xNTA1LDEwICsxNTE0LDEwIEBAIGZ1bmN0aW9uIFRFU1RfaW50TGl0ZXJh
bEdlbmVyaWMoKQogZnVuY3Rpb24gVEVTVF9pbnRMaXRlcmFsR2VuZXJpY1dpdGhQcm90b2NvbHMo
KQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAgICAgICAgcHJvdG9jb2wgQ29udmVy
dGlibGVUb0ludCB7Ci0gICAgICAgICAgICBvcGVyYXRvciBpbnQoQ29udmVydGlibGVUb0ludCk7
CisgICAgICAgIHByb3RvY29sIE15Q29udmVydGlibGVUb0ludCB7CisgICAgICAgICAgICBvcGVy
YXRvciBpbnQoTXlDb252ZXJ0aWJsZVRvSW50KTsKICAgICAgICAgfQotICAgICAgICBpbnQgZm9v
PFQ6Q29udmVydGlibGVUb0ludD4oVCB4KSB7IHJldHVybiBpbnQoeCk7IH0KKyAgICAgICAgaW50
IGZvbzxUOk15Q29udmVydGlibGVUb0ludD4oVCB4KSB7IHJldHVybiBpbnQoeCk7IH0KICAgICAg
ICAgaW50IGJhcigpIHsgcmV0dXJuIGZvbyg0Mik7IH0KICAgICBgKTsKICAgICBjaGVja0ludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdLCBbXSksIDQyKTsKQEAgLTE1
MjYsMTAgKzE1MzUsMTAgQEAgZnVuY3Rpb24gVEVTVF91aW50TGl0ZXJhbEdlbmVyaWMoKQogZnVu
Y3Rpb24gVEVTVF91aW50TGl0ZXJhbEdlbmVyaWNXaXRoUHJvdG9jb2xzKCkKIHsKICAgICBsZXQg
cHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIHByb3RvY29sIENvbnZlcnRpYmxlVG9VaW50IHsK
LSAgICAgICAgICAgIG9wZXJhdG9yIHVpbnQoQ29udmVydGlibGVUb1VpbnQpOworICAgICAgICBw
cm90b2NvbCBNeUNvbnZlcnRpYmxlVG9VaW50IHsKKyAgICAgICAgICAgIG9wZXJhdG9yIHVpbnQo
TXlDb252ZXJ0aWJsZVRvVWludCk7CiAgICAgICAgIH0KLSAgICAgICAgdWludCBmb288VDpDb252
ZXJ0aWJsZVRvVWludD4oVCB4KSB7IHJldHVybiB1aW50KHgpOyB9CisgICAgICAgIHVpbnQgZm9v
PFQ6TXlDb252ZXJ0aWJsZVRvVWludD4oVCB4KSB7IHJldHVybiB1aW50KHgpOyB9CiAgICAgICAg
IHVpbnQgYmFyKCkgeyByZXR1cm4gZm9vKDQydSk7IH0KICAgICBgKTsKICAgICBjaGVja1VpbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSwgW10pLCA0Mik7CkBAIC0y
NjA0LDYgKzI2MTMsNzcxIEBAIGZ1bmN0aW9uIFRFU1RfbWFrZUFycmF5UmVmRnJvbUFycmF5UmVm
KCkKICAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKIH0KIAorZnVuY3Rp
b24gVEVTVF9zaW1wbGVMZW5ndGgoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAg
ICAgICAgdWludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBkb3VibGVbNzU0XSBhcnJh
eTsKKyAgICAgICAgICAgIHJldHVybiAoQGFycmF5KS5sZW5ndGg7CisgICAgICAgIH0KKyAgICBg
KTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSwgW10pLCA3NTQpOworfQorCitmdW5jdGlvbiBURVNUX25vbkFycmF5UmVmQXJyYXlMZW5ndGgo
KQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdWludCBmb28oKQorICAg
ICAgICB7CisgICAgICAgICAgICBkb3VibGVbNzU0XSBhcnJheTsKKyAgICAgICAgICAgIHJldHVy
biBhcnJheS5sZW5ndGg7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja1VpbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLCA3NTQpOworfQorCitmdW5j
dGlvbiBURVNUX2Fzc2lnbkxlbmd0aCgpCit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9
PiBkb1ByZXAoYAorICAgICAgICAgICAgdm9pZCBmb28oKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGRvdWJsZVs3NTRdIGFycmF5OworICAgICAgICAgICAgICAgIChAYXJyYXkpLmxl
bmd0aCA9IDQyOworICAgICAgICAgICAgfQorICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUg
aW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJMSFMgb2YgYXNzaWdu
bWVudCBpcyBub3QgYW4gTFZhbHVlIikgIT0gLTEpOworfQorCitmdW5jdGlvbiBURVNUX2Fzc2ln
bkxlbmd0aEhlbHBlcigpCit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAo
YAorICAgICAgICAgICAgdm9pZCBiYXIodGhyZWFkIGRvdWJsZVtdIGFycmF5KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGFycmF5Lmxlbmd0aCA9IDQyOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdm9pZCBmb28oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRv
dWJsZVs3NTRdIGFycmF5OworICAgICAgICAgICAgICAgIGJhcihAYXJyYXkpOworICAgICAgICAg
ICAgfQorICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9y
ICYmIGUubWVzc2FnZS5pbmRleE9mKCJDYW5ub3QgZW1pdCBzZXQgYmVjYXVzZTogRGlkIG5vdCBm
aW5kIGFueSBmdW5jdGlvbnMgbmFtZWQgb3BlcmF0b3IubGVuZ3RoPSIpICE9IC0xKTsKK30KKwor
ZnVuY3Rpb24gVEVTVF9zaW1wbGVHZXR0ZXIoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVw
KGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgb3BlcmF0b3IueShGb28gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZm9vLng7CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEZvbyBmb287CisgICAgICAgICAgICBmb28ueCA9IDc4MDQ7CisgICAgICAgICAg
ICByZXR1cm4gZm9vLnk7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDc4MDQpOworfQorCitmdW5j
dGlvbiBURVNUX3NpbXBsZVNldHRlcigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAor
ICAgICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICB9CisgICAg
ICAgIGludCBvcGVyYXRvci55KEZvbyBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmb28ueDsKKyAgICAgICAgfQorICAgICAgICBGb28gb3BlcmF0b3IueT0oRm9vIGZvbywgaW50
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBmb28ueCA9IHZhbHVlOworICAgICAgICAg
ICAgcmV0dXJuIGZvbzsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAgICAgICAgIGZvby55ID0gNzgwNDsKKyAgICAgICAg
ICAgIHJldHVybiBmb28ueDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNzgwNCk7Cit9CisKK2Z1
bmN0aW9uIFRFU1RfZ2VuZXJpY0FjY2Vzc29ycygpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1By
ZXAoYAorICAgICAgICBzdHJ1Y3QgRm9vPFQ+IHsKKyAgICAgICAgICAgIFQgeDsKKyAgICAgICAg
ICAgIFRbM10geTsKKyAgICAgICAgfQorICAgICAgICBzdHJ1Y3QgQmFyPFQ+IHsKKyAgICAgICAg
ICAgIFQgeDsKKyAgICAgICAgICAgIFQgeTsKKyAgICAgICAgfQorICAgICAgICBCYXI8VD4gb3Bl
cmF0b3IuejxUPihGb288VD4gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICBCYXI8VD4gcmVz
dWx0OworICAgICAgICAgICAgcmVzdWx0LnggPSBmb28ueDsKKyAgICAgICAgICAgIHJlc3VsdC55
ID0gZm9vLnlbMV07CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAg
ICAgIEZvbzxUPiBvcGVyYXRvci56PTxUPihGb288VD4gZm9vLCBCYXI8VD4gYmFyKQorICAgICAg
ICB7CisgICAgICAgICAgICBmb28ueCA9IGJhci54OworICAgICAgICAgICAgZm9vLnlbMV0gPSBi
YXIueTsKKyAgICAgICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAgICAgICAgVCBvcGVy
YXRvci5zdW08VDpBZGRhYmxlPihGb288VD4gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZm9vLnggKyBmb28ueVswXSArIGZvby55WzFdICsgZm9vLnlbMl07CisgICAgICAgIH0K
KyAgICAgICAgVCBvcGVyYXRvci5zdW08VDpBZGRhYmxlPihCYXI8VD4gYmFyKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYmFyLnggKyBiYXIueTsKKyAgICAgICAgfQorICAgICAgICBv
cGVyYXRvcjxUPiBCYXI8VD4oVCB4LCBUIHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhcjxU
PiByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQueCA9IHg7CisgICAgICAgICAgICByZXN1bHQu
eSA9IHk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHZv
aWQgc2V0dXAodGhyZWFkIEZvbzxpbnQ+XiBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
by0+eCA9IDE7CisgICAgICAgICAgICBmb28tPnlbMF0gPSAyOworICAgICAgICAgICAgZm9vLT55
WzFdID0gMzsKKyAgICAgICAgICAgIGZvby0+eVsyXSA9IDQ7CisgICAgICAgIH0KKyAgICAgICAg
aW50IHRlc3RTdXBlckJhc2ljKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vPGludD4gZm9v
OworICAgICAgICAgICAgc2V0dXAoJmZvbyk7CisgICAgICAgICAgICByZXR1cm4gZm9vLnN1bTsK
KyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdFpTZXR0ZXJEaWRTZXRZKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgRm9vPGludD4gZm9vOworICAgICAgICAgICAgZm9vLnogPSBCYXI8aW50Pig1
MywgOTMyKTsKKyAgICAgICAgICAgIHJldHVybiBmb28ueVsxXTsKKyAgICAgICAgfQorICAgICAg
ICBpbnQgdGVzdFpTZXR0ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBGb288aW50PiBmb287
CisgICAgICAgICAgICBmb28ueiA9IEJhcjxpbnQ+KDUzLCA5MzIpOworICAgICAgICAgICAgcmV0
dXJuIGZvby5zdW07CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RaR2V0dGVyKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgRm9vPGludD4gZm9vOworICAgICAgICAgICAgLy8gVGhpcyBkZWxp
YmVyYXRlbHkgZG9lcyBub3QgY2FsbCBzZXR1cCgpIGp1c3Qgc28gd2UgdGVzdCB0aGlzIHN5bnRh
eC4KKyAgICAgICAgICAgIGZvby54ID0gMTsKKyAgICAgICAgICAgIGZvby55WzBdID0gMjsKKyAg
ICAgICAgICAgIGZvby55WzFdID0gMzsKKyAgICAgICAgICAgIGZvby55WzJdID0gNDsKKyAgICAg
ICAgICAgIHJldHVybiBmb28uei5zdW07CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RMVmFs
dWVFbXVsYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBGb288aW50PiBmb287CisgICAg
ICAgICAgICBzZXR1cCgmZm9vKTsKKyAgICAgICAgICAgIGZvby56LnkgKj0gNTsKKyAgICAgICAg
ICAgIHJldHVybiBmb28uc3VtOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0U3VwZXJCYXNpYyIsIFtdLCBbXSksIDEg
KyAyICsgMyArIDQpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAidGVzdFpTZXR0ZXJEaWRTZXRZIiwgW10sIFtdKSwgOTMyKTsKKyAgICBjaGVja0ludChwcm9n
cmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RaU2V0dGVyIiwgW10sIFtdKSwgNTMgKyA5
MzIpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFpH
ZXR0ZXIiLCBbXSwgW10pLCAxICsgMyk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJ0ZXN0TFZhbHVlRW11bGF0aW9uIiwgW10sIFtdKSwgMSArIDIgKyAzICog
NSArIDQpOworfQorCitmdW5jdGlvbiBURVNUX2JpdFN1YnNjcmlwdEFjY2Vzc29yKCkKK3sKKyAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHByb3RvY29sIE15Qml0bWFza2FibGUg
OiBFcXVhdGFibGUgeworICAgICAgICAgICAgTXlCaXRtYXNrYWJsZSBvcGVyYXRvciYoTXlCaXRt
YXNrYWJsZSwgTXlCaXRtYXNrYWJsZSk7CisgICAgICAgICAgICBNeUJpdG1hc2thYmxlIG9wZXJh
dG9yfChNeUJpdG1hc2thYmxlLCBNeUJpdG1hc2thYmxlKTsKKyAgICAgICAgICAgIE15Qml0bWFz
a2FibGUgb3BlcmF0b3J+KE15Qml0bWFza2FibGUpOworICAgICAgICAgICAgTXlCaXRtYXNrYWJs
ZSBvcGVyYXRvcjw8KE15Qml0bWFza2FibGUsIHVpbnQpOworICAgICAgICAgICAgTXlCaXRtYXNr
YWJsZSBvcGVyYXRvcj4+KE15Qml0bWFza2FibGUsIHVpbnQpOworICAgICAgICAgICAgb3BlcmF0
b3IgTXlCaXRtYXNrYWJsZShpbnQpOworICAgICAgICB9CisgICAgICAgIFQgbWFza0ZvckJpdElu
ZGV4PFQ6TXlCaXRtYXNrYWJsZT4odWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIFQoMSkgPDwgaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcltd
PFQ6TXlCaXRtYXNrYWJsZT4oVCB2YWx1ZSwgdWludCBpbmRleCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGJvb2wodmFsdWUgJiBtYXNrRm9yQml0SW5kZXg8VD4oaW5kZXgpKTsKKyAg
ICAgICAgfQorICAgICAgICBUIG9wZXJhdG9yW109PFQ6TXlCaXRtYXNrYWJsZT4oVCB2YWx1ZSwg
dWludCBpbmRleCwgYm9vbCBiaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFQgbWFzayA9IG1h
c2tGb3JCaXRJbmRleDxUPihpbmRleCk7CisgICAgICAgICAgICBpZiAoYml0KQorICAgICAgICAg
ICAgICAgIHZhbHVlIHw9IG1hc2s7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
dmFsdWUgJj0gfm1hc2s7CisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0KKyAg
ICAgICAgdWludCBvcGVyYXRvci5sZW5ndGgoaW50KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gMzI7CisgICAgICAgIH0KKyAgICAgICAgdWludCBvcGVyYXRvci5sZW5ndGgodWludCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDMyOworICAgICAgICB9CisgICAgICAgIGlu
dCB0ZXN0SW50U2V0Qml0MygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBmb287CisgICAg
ICAgICAgICBmb29bM10gPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZvbzsKKyAgICAgICAg
fQorICAgICAgICBib29sIHRlc3RJbnRTZXRHZXRCaXQ1KCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IGZvbzsKKyAgICAgICAgICAgIGZvb1s1XSA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm4gZm9vWzVdOworICAgICAgICB9CisgICAgICAgIGJvb2wgdGVzdEludEdldEJpdDEoKQorICAg
ICAgICB7CisgICAgICAgICAgICBpbnQgZm9vOworICAgICAgICAgICAgcmV0dXJuIGZvb1sxXTsK
KyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdFVpbnRTdW1CaXRzKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaW50IGZvbyA9IDQyOworICAgICAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAg
ICAgIGZvciAodWludCBpID0gMDsgaSA8IGZvby5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
ICAgIGlmIChmb29baV0pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBpbnQg
dGVzdFVpbnRTd2FwQml0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBmb28gPSA0MjsK
KyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IGZvby5sZW5ndGggLyAyOyArK2kpIHsK
KyAgICAgICAgICAgICAgICBib29sIHRtcCA9IGZvb1tpXTsKKyAgICAgICAgICAgICAgICBmb29b
aV0gPSBmb29bZm9vLmxlbmd0aCAtIGkgLSAxXTsKKyAgICAgICAgICAgICAgICBmb29bZm9vLmxl
bmd0aCAtIGkgLSAxXSA9IHRtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBm
b287CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICB1aW50IGY7
CisgICAgICAgICAgICB1aW50IGc7CisgICAgICAgIH0KKyAgICAgICAgb3BlcmF0b3IgRm9vKHVp
bnQgZiwgdWludCBnKQorICAgICAgICB7CisgICAgICAgICAgICBGb28gcmVzdWx0OworICAgICAg
ICAgICAgcmVzdWx0LmYgPSBmOworICAgICAgICAgICAgcmVzdWx0LmcgPSBnOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBpbnQgb3BlcmF0b3IuaChGb28g
Zm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW50KChmb28uZiAmIDB4ZmZmZikg
fCAoKGZvby5nICYgMHhmZmZmKSA8PCAxNikpOworICAgICAgICB9CisgICAgICAgIEZvbyBvcGVy
YXRvci5oPShGb28gZm9vLCBpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvby5m
ICY9IH4weGZmZmZ1OworICAgICAgICAgICAgZm9vLmYgfD0gdWludCh2YWx1ZSkgJiAweGZmZmY7
CisgICAgICAgICAgICBmb28uZyAmPSB+MHhmZmZmdTsKKyAgICAgICAgICAgIGZvby5nIHw9ICh1
aW50KHZhbHVlKSA+PiAxNikgJiAweGZmZmY7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAg
ICAgICB9CisgICAgICAgIGludCB0ZXN0TFZhbHVlRW11bGF0aW9uKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgRm9vIGZvbzsKKyAgICAgICAgICAgIGZvby5mID0gNDI7CisgICAgICAgICAgICBm
b28uZyA9IDM3OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgZm9vLmgubGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICAgICAgZm9vLmhbaV0gXj0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiBpbnQoZm9vLmYgKyBmb28uZyk7CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJhciB7
CisgICAgICAgICAgICBGb28gYTsKKyAgICAgICAgICAgIEZvbyBiOworICAgICAgICB9CisgICAg
ICAgIEZvbyBvcGVyYXRvci5jKEJhciBiYXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBGb28odWludChiYXIuYS5oKSwgdWludChiYXIuYi5oKSk7CisgICAgICAgIH0KKyAgICAgICAg
QmFyIG9wZXJhdG9yLmM9KEJhciBiYXIsIEZvbyBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAg
IGJhci5hLmggPSBpbnQoZm9vLmYpOworICAgICAgICAgICAgYmFyLmIuaCA9IGludChmb28uZyk7
CisgICAgICAgICAgICByZXR1cm4gYmFyOworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0Q3Jh
enlMVmFsdWVFbXVsYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBCYXIgYmFyOworICAg
ICAgICAgICAgYmFyLmEuZiA9IDE7CisgICAgICAgICAgICBiYXIuYS5nID0gMjsKKyAgICAgICAg
ICAgIGJhci5iLmYgPSAzOworICAgICAgICAgICAgYmFyLmIuZyA9IDQ7CisgICAgICAgICAgICBm
b3IgKHVpbnQgaSA9IDA7IGkgPCBiYXIuYy5oLmxlbmd0aDsgaSArPSAyKQorICAgICAgICAgICAg
ICAgIGJhci5jLmhbaV0gXj0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBpbnQoYmFyLmEuZiAr
IGJhci5hLmcgKyBiYXIuYi5mICsgYmFyLmIuZyk7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBj
aGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RJbnRTZXRCaXQzIiwg
W10sIFtdKSwgOCk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAidGVzdEludFNldEdldEJpdDUiLCBbXSwgW10pLCB0cnVlKTsKKyAgICBjaGVja0Jvb2wocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0SW50R2V0Qml0MSIsIFtdLCBbXSksIGZh
bHNlKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RV
aW50U3VtQml0cyIsIFtdLCBbXSksIDMpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAidGVzdFVpbnRTd2FwQml0cyIsIFtdLCBbXSksIDE0MDkyODYxNDQpOwor
ICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdExWYWx1ZUVt
dWxhdGlvbiIsIFtdLCBbXSksIDEzMDk5MSk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJ0ZXN0Q3JhenlMVmFsdWVFbXVsYXRpb24iLCBbXSwgW10pLCA0MzY5
Nik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfbmVzdGVkU3Vic2NyaXB0TFZhbHVlRW11bGF0aW9uU2lt
cGxlKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb28g
eworICAgICAgICAgICAgaW50WzddIGFycmF5OworICAgICAgICB9CisgICAgICAgIGludCBvcGVy
YXRvcltdKEZvbyBmb28sIHVpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmb28uYXJyYXlbaW5kZXhdOworICAgICAgICB9CisgICAgICAgIEZvbyBvcGVyYXRvcltdPShG
b28gZm9vLCB1aW50IGluZGV4LCBpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
by5hcnJheVtpbmRleF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBmb287CisgICAgICAg
IH0KKyAgICAgICAgdWludCBvcGVyYXRvci5sZW5ndGgoRm9vIGZvbykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGZvby5hcnJheS5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgaW50
IHN1bShGb28gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAg
ICAgICAgICAgIGZvciAodWludCBpID0gZm9vLmxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gZm9vW2ldOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorICAgICAgICBzdHJ1Y3QgQmFyIHsKKyAgICAgICAgICAgIEZvb1s2XSBhcnJheTsKKyAgICAg
ICAgfQorICAgICAgICB1aW50IG9wZXJhdG9yLmxlbmd0aChCYXIgYmFyKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYmFyLmFycmF5Lmxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBG
b28gb3BlcmF0b3JbXShCYXIgYmFyLCB1aW50IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYmFyLmFycmF5W2luZGV4XTsKKyAgICAgICAgfQorICAgICAgICBCYXIgb3BlcmF0
b3JbXT0oQmFyIGJhciwgdWludCBpbmRleCwgRm9vIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBiYXIuYXJyYXlbaW5kZXhdID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gYmFyOwor
ICAgICAgICB9CisgICAgICAgIGludCBzdW0oQmFyIGJhcikKKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IHJlc3VsdCA9IDA7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IGJhci5sZW5ndGg7
IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN1bShiYXJbaV0pOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBzdHJ1Y3QgQmF6IHsKKyAgICAg
ICAgICAgIEJhcls1XSBhcnJheTsKKyAgICAgICAgfQorICAgICAgICBCYXIgb3BlcmF0b3JbXShC
YXogYmF6LCB1aW50IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmF6LmFy
cmF5W2luZGV4XTsKKyAgICAgICAgfQorICAgICAgICBCYXogb3BlcmF0b3JbXT0oQmF6IGJheiwg
dWludCBpbmRleCwgQmFyIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBiYXouYXJyYXlb
aW5kZXhdID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gYmF6OworICAgICAgICB9CisgICAg
ICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoKEJheiBiYXopCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBiYXouYXJyYXkubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGludCBzdW0oQmF6
IGJheikKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgICAgICAg
ICBmb3IgKHVpbnQgaSA9IGJhei5sZW5ndGg7IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0
ICs9IHN1bShiYXpbaV0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgICAgICB2b2lkIHNldFZhbHVlcyh0aHJlYWQgQmF6XiBiYXopCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAodWludCBpID0gYmF6LT5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVpbnQgaiA9ICheYmF6KVtpXS5sZW5ndGg7IGotLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh1aW50IGsgPSAoXmJheilbaV1bal0ubGVuZ3RoOyBrLS07KQorICAgICAgICAg
ICAgICAgICAgICAgICAgKF5iYXopW2ldW2pdW2tdID0gaW50KGkgKyBqICsgayk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGludCB0ZXN0U2V0
VmFsdWVzQW5kU3VtKCkKKyAgICAgICAgeworICAgICAgICAgICAgQmF6IGJhejsKKyAgICAgICAg
ICAgIHNldFZhbHVlcygmYmF6KTsKKyAgICAgICAgICAgIHJldHVybiBzdW0oYmF6KTsKKyAgICAg
ICAgfQorICAgICAgICBpbnQgdGVzdFNldFZhbHVlc011dGF0ZVZhbHVlc0FuZFN1bSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEJheiBiYXo7CisgICAgICAgICAgICBzZXRWYWx1ZXMoJmJheik7
CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IGJhei5sZW5ndGg7IGktLTspIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVpbnQgaiA9IGJheltpXS5sZW5ndGg7IGotLTspIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1aW50IGsgPSBiYXpbaV1bal0ubGVuZ3RoOyBrLS07KQorICAgICAgICAg
ICAgICAgICAgICAgICAgYmF6W2ldW2pdW2tdICo9IGludChrKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3VtKGJheik7CisgICAgICAgIH0K
KyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRl
c3RTZXRWYWx1ZXNBbmRTdW0iLCBbXSwgW10pLCAxNTc1KTsKKyAgICBjaGVja0ludChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RTZXRWYWx1ZXNNdXRhdGVWYWx1ZXNBbmRTdW0i
LCBbXSwgW10pLCA1NTY1KTsKK30KKworZnVuY3Rpb24gVEVTVF9uZXN0ZWRTdWJzY3JpcHRMVmFs
dWVFbXVsYXRpb25HZW5lcmljKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAg
ICAgIHN0cnVjdCBGb288VD4geworICAgICAgICAgICAgVFs3XSBhcnJheTsKKyAgICAgICAgfQor
ICAgICAgICBUIG9wZXJhdG9yW108VD4oRm9vPFQ+IGZvbywgdWludCBpbmRleCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZvby5hcnJheVtpbmRleF07CisgICAgICAgIH0KKyAgICAg
ICAgRm9vPFQ+IG9wZXJhdG9yW109PFQ+KEZvbzxUPiBmb28sIHVpbnQgaW5kZXgsIFQgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvby5hcnJheVtpbmRleF0gPSB2YWx1ZTsKKyAgICAg
ICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAgICAgICAgdWludCBvcGVyYXRvci5sZW5n
dGg8VD4oRm9vPFQ+IGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby5hcnJh
eS5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgcHJvdG9jb2wgTXlBZGRhYmxlIHsKKyAgICAg
ICAgICAgIE15QWRkYWJsZSBvcGVyYXRvcisoTXlBZGRhYmxlLCBNeUFkZGFibGUpOworICAgICAg
ICB9CisgICAgICAgIFQgc3VtPFQ6TXlBZGRhYmxlPihGb288VD4gZm9vKQorICAgICAgICB7Cisg
ICAgICAgICAgICBUIHJlc3VsdDsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gZm9vLmxlbmd0
aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gZm9vW2ldOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBzdHJ1Y3QgQmFyPFQ+IHsKKyAgICAg
ICAgICAgIEZvbzxUPls2XSBhcnJheTsKKyAgICAgICAgfQorICAgICAgICB1aW50IG9wZXJhdG9y
Lmxlbmd0aDxUPihCYXI8VD4gYmFyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmFy
LmFycmF5Lmxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBGb288VD4gb3BlcmF0b3JbXTxUPihC
YXI8VD4gYmFyLCB1aW50IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmFy
LmFycmF5W2luZGV4XTsKKyAgICAgICAgfQorICAgICAgICBCYXI8VD4gb3BlcmF0b3JbXT08VD4o
QmFyPFQ+IGJhciwgdWludCBpbmRleCwgRm9vPFQ+IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBiYXIuYXJyYXlbaW5kZXhdID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gYmFyOwor
ICAgICAgICB9CisgICAgICAgIFQgc3VtPFQ6TXlBZGRhYmxlPihCYXI8VD4gYmFyKQorICAgICAg
ICB7CisgICAgICAgICAgICBUIHJlc3VsdDsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gYmFy
Lmxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3VtKGJhcltpXSk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBCYXo8
VD4geworICAgICAgICAgICAgQmFyPFQ+WzVdIGFycmF5OworICAgICAgICB9CisgICAgICAgIEJh
cjxUPiBvcGVyYXRvcltdPFQ+KEJhejxUPiBiYXosIHVpbnQgaW5kZXgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBiYXouYXJyYXlbaW5kZXhdOworICAgICAgICB9CisgICAgICAgIEJh
ejxUPiBvcGVyYXRvcltdPTxUPihCYXo8VD4gYmF6LCB1aW50IGluZGV4LCBCYXI8VD4gdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGJhei5hcnJheVtpbmRleF0gPSB2YWx1ZTsKKyAgICAg
ICAgICAgIHJldHVybiBiYXo7CisgICAgICAgIH0KKyAgICAgICAgdWludCBvcGVyYXRvci5sZW5n
dGg8VD4oQmF6PFQ+IGJheikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhei5hcnJh
eS5sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgVCBzdW08VDpNeUFkZGFibGU+KEJhejxUPiBi
YXopCisgICAgICAgIHsKKyAgICAgICAgICAgIFQgcmVzdWx0OworICAgICAgICAgICAgZm9yICh1
aW50IGkgPSBiYXoubGVuZ3RoOyBpLS07KQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdW0o
YmF6W2ldKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAg
cHJvdG9jb2wgTXlDb252ZXJ0aWJsZUZyb21VaW50IHsKKyAgICAgICAgICAgIG9wZXJhdG9yIE15
Q29udmVydGlibGVGcm9tVWludCh1aW50KTsKKyAgICAgICAgfQorICAgICAgICBwcm90b2NvbCBT
ZXRWYWx1YWJsZSA6IE15QWRkYWJsZSwgTXlDb252ZXJ0aWJsZUZyb21VaW50IHsgfQorICAgICAg
ICB2b2lkIHNldFZhbHVlczxUOlNldFZhbHVhYmxlPih0aHJlYWQgQmF6PFQ+XiBiYXopCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gYmF6LT5sZW5ndGg7IGktLTspIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVpbnQgaiA9ICheYmF6KVtpXS5sZW5ndGg7IGotLTspIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh1aW50IGsgPSAoXmJheilbaV1bal0ubGVuZ3RoOyBrLS07
KQorICAgICAgICAgICAgICAgICAgICAgICAgKF5iYXopW2ldW2pdW2tdID0gVChpICsgaiArIGsp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
bnQgdGVzdFNldFZhbHVlc0FuZFN1bSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhejxpbnQ+
IGJhejsKKyAgICAgICAgICAgIHNldFZhbHVlcygmYmF6KTsKKyAgICAgICAgICAgIHJldHVybiBz
dW0oYmF6KTsKKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdFNldFZhbHVlc011dGF0ZVZhbHVl
c0FuZFN1bSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhejxpbnQ+IGJhejsKKyAgICAgICAg
ICAgIHNldFZhbHVlcygmYmF6KTsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gYmF6Lmxlbmd0
aDsgaS0tOykgeworICAgICAgICAgICAgICAgIGZvciAodWludCBqID0gYmF6W2ldLmxlbmd0aDsg
ai0tOykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVpbnQgayA9IGJheltpXVtqXS5sZW5n
dGg7IGstLTspCisgICAgICAgICAgICAgICAgICAgICAgICBiYXpbaV1bal1ba10gKj0gaW50KGsp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBz
dW0oYmF6KTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAidGVzdFNldFZhbHVlc0FuZFN1bSIsIFtdLCBbXSksIDE1NzUpOwor
ICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFNldFZhbHVl
c011dGF0ZVZhbHVlc0FuZFN1bSIsIFtdLCBbXSksIDU1NjUpOworfQorCitmdW5jdGlvbiBURVNU
X2Jvb2xCaXRBbmQoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgYm9v
bCBmb28oYm9vbCBhLCBib29sIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhICYg
YjsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpLCBtYWtlQm9v
bChwcm9ncmFtLCBmYWxzZSldKSwgZmFsc2UpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSksIG1h
a2VCb29sKHByb2dyYW0sIGZhbHNlKV0pLCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxz
ZSksIG1ha2VCb29sKHByb2dyYW0sIHRydWUpXSksIGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0s
IHRydWUpLCBtYWtlQm9vbChwcm9ncmFtLCB0cnVlKV0pLCB0cnVlKTsKK30KKworZnVuY3Rpb24g
VEVTVF9ib29sQml0T3IoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAg
Ym9vbCBmb28oYm9vbCBhLCBib29sIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
IHwgYjsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpLCBtYWtl
Qm9vbChwcm9ncmFtLCBmYWxzZSldKSwgZmFsc2UpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSks
IG1ha2VCb29sKHByb2dyYW0sIGZhbHNlKV0pLCB0cnVlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIGZh
bHNlKSwgbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSldKSwgdHJ1ZSk7CisgICAgY2hlY2tCb29sKHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFt
LCB0cnVlKSwgbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSldKSwgdHJ1ZSk7Cit9CisKK2Z1bmN0aW9u
IFRFU1RfYm9vbEJpdFhvcigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAg
ICBib29sIGZvbyhib29sIGEsIGJvb2wgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGEgXiBiOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSksIG1h
a2VCb29sKHByb2dyYW0sIGZhbHNlKV0pLCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCB0cnVl
KSwgbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9n
cmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwg
ZmFsc2UpLCBtYWtlQm9vbChwcm9ncmFtLCB0cnVlKV0pLCB0cnVlKTsKKyAgICBjaGVja0Jvb2wo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dy
YW0sIHRydWUpLCBtYWtlQm9vbChwcm9ncmFtLCB0cnVlKV0pLCBmYWxzZSk7Cit9CisKK2Z1bmN0
aW9uIFRFU1RfYm9vbEJpdE5vdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAg
ICAgICBib29sIGZvbyhib29sIGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB+YTsK
KyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpXSksIHRydWUpOwor
ICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBb
bWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSldKSwgZmFsc2UpOworfQorCitmdW5jdGlvbiBURVNUX2lu
dEJpdEFuZCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9v
KGludCBhLCBpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgJiBiOworICAg
ICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgMSksIG1ha2VJbnQocHJvZ3JhbSwgNyld
KSwgMSk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgNjU1MzUpLCBtYWtlSW50KHByb2dyYW0sIDQyKV0pLCA0
Mik7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSwgW21ha2VJbnQocHJvZ3JhbSwgLTEpLCBtYWtlSW50KHByb2dyYW0sIC03KV0pLCAtNyk7Cisg
ICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21h
a2VJbnQocHJvZ3JhbSwgMCksIG1ha2VJbnQocHJvZ3JhbSwgODU3MzIpXSksIDApOworfQorCitm
dW5jdGlvbiBURVNUX2ludEJpdE9yKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisg
ICAgICAgIGludCBmb28oaW50IGEsIGludCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gYSB8IGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAxKSwgbWFrZUlu
dChwcm9ncmFtLCA3KV0pLCA3KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA2NTUzNSksIG1ha2VJbnQocHJv
Z3JhbSwgNDIpXSksIDY1NTM1KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAtMSksIG1ha2VJbnQocHJvZ3Jh
bSwgLTcpXSksIC0xKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAwKSwgbWFrZUludChwcm9ncmFtLCA4NTcz
MildKSwgODU3MzIpOworfQorCitmdW5jdGlvbiBURVNUX2ludEJpdFhvcigpCit7CisgICAgbGV0
IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9vKGludCBhLCBpbnQgYikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGEgXiBiOworICAgICAgICB9CisgICAgYCk7CisgICAg
Y2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJ
bnQocHJvZ3JhbSwgMSksIG1ha2VJbnQocHJvZ3JhbSwgNyldKSwgNik7CisgICAgY2hlY2tJbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3Jh
bSwgNjU1MzUpLCBtYWtlSW50KHByb2dyYW0sIDQyKV0pLCA2NTQ5Myk7CisgICAgY2hlY2tJbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3Jh
bSwgLTEpLCBtYWtlSW50KHByb2dyYW0sIC03KV0pLCA2KTsKKyAgICBjaGVja0ludChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAwKSwg
bWFrZUludChwcm9ncmFtLCA4NTczMildKSwgODU3MzIpOworfQorCitmdW5jdGlvbiBURVNUX2lu
dEJpdE5vdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9v
KGludCBhKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gfmE7CisgICAgICAgIH0KKyAg
ICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFtdLCBbbWFrZUludChwcm9ncmFtLCAxKV0pLCAtMik7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgNjU1MzUp
XSksIC02NTUzNik7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgLTEpXSksIDApOworICAgIGNoZWNrSW50KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0s
IDApXSksIC0xKTsKK30KKworZnVuY3Rpb24gVEVTVF9pbnRMU2hpZnQoKQoreworICAgIGxldCBw
cm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyhpbnQgYSwgdWludCBiKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYSA8PCBiOworICAgICAgICB9CisgICAgYCk7CisgICAg
Y2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJ
bnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHByb2dyYW0sIDcpXSksIDEyOCk7CisgICAgY2hlY2tJ
bnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJv
Z3JhbSwgNjU1MzUpLCBtYWtlVWludChwcm9ncmFtLCAyKV0pLCAyNjIxNDApOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHBy
b2dyYW0sIC0xKSwgbWFrZVVpbnQocHJvZ3JhbSwgNSldKSwgLTMyKTsKKyAgICBjaGVja0ludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFt
LCAwKSwgbWFrZVVpbnQocHJvZ3JhbSwgMyldKSwgMCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfaW50
UlNoaWZ0KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28o
aW50IGEsIHVpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPj4gYjsKKyAg
ICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDEpLCBtYWtlVWludChwcm9ncmFtLCA3
KV0pLCAwKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA2NTUzNSksIG1ha2VVaW50KHByb2dyYW0sIDIpXSks
IDE2MzgzKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAtMSksIG1ha2VVaW50KHByb2dyYW0sIDUpXSksIC0x
KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtd
LCBbbWFrZUludChwcm9ncmFtLCAwKSwgbWFrZVVpbnQocHJvZ3JhbSwgMyldKSwgMCk7Cit9CisK
K2Z1bmN0aW9uIFRFU1RfdWludEJpdEFuZCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
YAorICAgICAgICB1aW50IGZvbyh1aW50IGEsIHVpbnQgYikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGEgJiBiOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tVaW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAx
KSwgbWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgMSk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCA2NTUzNSks
IG1ha2VVaW50KHByb2dyYW0sIDQyKV0pLCA0Mik7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAtMSksIG1h
a2VVaW50KHByb2dyYW0sIC03KV0pLCA0Mjk0OTY3Mjg5KTsKKyAgICBjaGVja1VpbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDAp
LCBtYWtlVWludChwcm9ncmFtLCA4NTczMildKSwgMCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfdWlu
dEJpdE9yKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHVpbnQgZm9v
KHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSB8IGI7Cisg
ICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDEpLCBtYWtlVWludChwcm9ncmFt
LCA3KV0pLCA3KTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDY1NTM1KSwgbWFrZVVpbnQocHJvZ3JhbSwg
NDIpXSksIDY1NTM1KTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIC0xKSwgbWFrZVVpbnQocHJvZ3JhbSwg
LTcpXSksIDQyOTQ5NjcyOTUpOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMCksIG1ha2VVaW50KHByb2dy
YW0sIDg1NzMyKV0pLCA4NTczMik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfdWludEJpdFhvcigpCit7
CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1aW50IGZvbyh1aW50IGEsIHVp
bnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgXiBiOworICAgICAgICB9Cisg
ICAgYCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10sIFttYWtlVWludChwcm9ncmFtLCAxKSwgbWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgNik7
CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlVWludChwcm9ncmFtLCA2NTUzNSksIG1ha2VVaW50KHByb2dyYW0sIDQyKV0pLCA2NTQ5
Myk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10sIFttYWtlVWludChwcm9ncmFtLCAtMSksIG1ha2VVaW50KHByb2dyYW0sIC03KV0pLCA2KTsK
KyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwg
W21ha2VVaW50KHByb2dyYW0sIDApLCBtYWtlVWludChwcm9ncmFtLCA4NTczMildKSwgODU3MzIp
OworfQorCitmdW5jdGlvbiBURVNUX3VpbnRCaXROb3QoKQoreworICAgIGxldCBwcm9ncmFtID0g
ZG9QcmVwKGAKKyAgICAgICAgdWludCBmb28odWludCBhKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gfmE7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDEpXSks
IDQyOTQ5NjcyOTQpOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgNjU1MzUpXSksIDQyOTQ5MDE3NjApOwor
ICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBb
bWFrZVVpbnQocHJvZ3JhbSwgLTEpXSksIDApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMCldKSwgNDI5
NDk2NzI5NSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfdWludExTaGlmdCgpCit7CisgICAgbGV0IHBy
b2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1aW50IGZvbyh1aW50IGEsIHVpbnQgYikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPDwgYjsKKyAgICAgICAgfQorICAgIGApOworICAg
IGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFr
ZVVpbnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHByb2dyYW0sIDcpXSksIDEyOCk7CisgICAgY2hl
Y2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWlu
dChwcm9ncmFtLCA2NTUzNSksIG1ha2VVaW50KHByb2dyYW0sIDIpXSksIDI2MjE0MCk7CisgICAg
Y2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtl
VWludChwcm9ncmFtLCAtMSksIG1ha2VVaW50KHByb2dyYW0sIDUpXSksIDQyOTQ5NjcyNjQpOwor
ICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBb
bWFrZVVpbnQocHJvZ3JhbSwgMCksIG1ha2VVaW50KHByb2dyYW0sIDMpXSksIDApOworfQorCitm
dW5jdGlvbiBURVNUX3VpbnRSU2hpZnQoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
KyAgICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhID4+IGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja1VpbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDEp
LCBtYWtlVWludChwcm9ncmFtLCA3KV0pLCAwKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDY1NTM1KSwg
bWFrZVVpbnQocHJvZ3JhbSwgMildKSwgMTYzODMpOworICAgIGNoZWNrVWludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgLTEpLCBt
YWtlVWludChwcm9ncmFtLCA1KV0pLCAxMzQyMTc3MjcpOworICAgIGNoZWNrVWludChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMCks
IG1ha2VVaW50KHByb2dyYW0sIDMpXSksIDApOworfQorCiBmdW5jdGlvbiBURVNUX2Zsb2F0TWF0
aCgpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYApAQCAtMjc5Miw2ICszNTY2LDI5IEBA
IGZ1bmN0aW9uIFRFU1RfZmxvYXRNYXRoKCkKICAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBX
VHlwZUVycm9yKTsKIH0KIAorZnVuY3Rpb24gVEVTVF9nZW5lcmljQ2FzdEluZmVyKCkKK3sKKyAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBDb21wbGV4PFQ+IHsKKyAg
ICAgICAgICAgIFQgcmVhbDsKKyAgICAgICAgICAgIFQgaW1hZzsKKyAgICAgICAgfQorICAgICAg
ICBvcGVyYXRvcjxUPiBDb21wbGV4PFQ+KFQgcmVhbCwgVCBpbWFnKQorICAgICAgICB7CisgICAg
ICAgICAgICBDb21wbGV4PFQ+IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC5yZWFsID0gcmVh
bDsKKyAgICAgICAgICAgIHJlc3VsdC5pbWFnID0gaW1hZzsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENvbXBsZXg8aW50PiB4ID0gQ29tcGxleDxpbnQ+KDEsIDIpOworICAgICAgICAgICAgcmV0
dXJuIHgucmVhbCArIHguaW1hZzsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgMyk7Cit9CisKIGZ1
bmN0aW9uIFRFU1RfYm9vbGVhbk1hdGgoKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
QEAgLTI4NTEsNyArMzY0OCw3IEBAIGlmICh0aGlzWyJhcmd1bWVudHMiXSkgewogICAgIH0KIH0K
IAotZnVuY3Rpb24gZG9UZXN0KG9iamVjdCkKK2Z1bmN0aW9uKiBkb1Rlc3Qob2JqZWN0KQogewog
ICAgIGxldCBiZWZvcmUgPSBwcmVjaXNlVGltZSgpOwogCkBAIC0yODYwLDEzICszNjU3LDE3IEBA
IGZ1bmN0aW9uIGRvVGVzdChvYmplY3QpCiAgICAgICAgICAgICBwcmludChzICsgIi4uLiIpOwog
ICAgICAgICAgICAgb2JqZWN0W3NdKCk7CiAgICAgICAgICAgICBwcmludCgiICAgIE9LISIpOwor
ICAgICAgICAgICAgeWllbGQ7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBsZXQgYWZ0ZXIgPSBw
cmVjaXNlVGltZSgpOwogICAgIAorICAgIHByaW50KCJTdWNjZXNzISIpOwogICAgIHByaW50KCJU
aGF0IHRvb2sgIiArIChhZnRlciAtIGJlZm9yZSkgKiAxMDAwICsgIiBtcy4iKTsKIH0KIAogaWYg
KCF0aGlzLndpbmRvdykKLSAgICBkb1Rlc3QodGhpcyk7CisgICAgZm9yIChsZXQgXyBvZiBkb1Rl
c3QodGhpcykpIHsgfQorCisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5
cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5q
cwkocmV2aXNpb24gMjIyMTQwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlw
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQCBjbGFzcyBUeXBlIGV4dGVuZHMg
Tm9kZSB7CiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBUeXBlOyB9CiAgICAgZ2V0IGlzUHRyKCkg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNBcnJheVJlZigpIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgZ2V0IGlzUmVmKCkgeyByZXR1cm4gdGhpcy5pc1B0ciB8fCB0aGlzLmlzQXJyYXlSZWY7
IH0KICAgICBnZXQgaXNOdW1iZXIoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGdldCBpc0ludCgp
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzRmxvYXRpbmcoKSB7IHJldHVybiBmYWxzZTsg
fQpAQCAtNDEsNSArNDIsMTkgQEAgY2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewogICAgIH0KICAg
ICAKICAgICBnZXQgaW5zdGFudGlhdGVkVHlwZSgpIHsgcmV0dXJuIHRoaXMudmlzaXQobmV3IElu
c3RhbnRpYXRlSW1tZWRpYXRlcygpKTsgfQorICAgIAorICAgIC8vIEhhdmUgdG8gY2FsbCB0aGVz
ZSBvbiB0aGUgdW5pZnlOb2RlLgorICAgIGFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQob3JpZ2luLCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgTWFrZVB0ckV4cHJlc3Npb24ob3JpZ2lu
LCB2YWx1ZSk7CisgICAgfQorICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdpbikK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUHRyVHlwZShvcmlnaW4sICJ0aHJlYWQiLCB0aGlz
KTsKKyAgICB9CisgICAgcmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChvcmlnaW4pCisgICAgewor
ICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiQnktcG9p
bnRlciBvdmVybG9hZCByZXR1cm5lZCBub24tcG9pbnRlciB0eXBlOiAiICsgdGhpcyk7CisgICAg
fQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUGFyYW1ldGVy
UmV3cml0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VHlwZVBhcmFtZXRlclJld3JpdGVyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFR5cGVQYXJhbWV0ZXJSZXdyaXRlciB7CisgICAg
dmlzaXRDb25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIobm9kZS5vcmlnaW4sIG5vZGUubmFtZSwgbm9kZS50
eXBlLnZpc2l0KG5ldyBSZXdyaXRlcigpKSk7CisgICAgfQorICAgIAorICAgIHZpc2l0VHlwZVZh
cmlhYmxlKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZShub2Rl
Lm9yaWdpbiwgbm9kZS5uYW1lLCBub2RlLnByb3RvY29sKTsKKyAgICB9Cit9CisKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVWYXJpYWJsZVRyYWNrZXIuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVZhcmlhYmxlVHJhY2tl
ci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBl
VmFyaWFibGVUcmFja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Y2xhc3MgVHlwZVZhcmlhYmxlVHJhY2tlciBleHRlbmRzIFZpc2l0b3IgeworICAgIGNvbnN0cnVj
dG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuX3NldCA9IG5ldyBT
ZXQoKTsKKyAgICB9CisgICAgCisgICAgZ2V0IHNldCgpIHsgcmV0dXJuIHRoaXMuX3NldDsgfQor
ICAgIAorICAgIF9jb25zaWRlcih0aGluZykKKyAgICB7CisgICAgICAgIGlmICh0aGluZy5pc1Vu
aWZpYWJsZSkKKyAgICAgICAgICAgIHRoaXMuX3NldC5hZGQodGhpbmcpOworICAgIH0KKyAgICAK
KyAgICB2aXNpdFR5cGVSZWYobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2NvbnNpZGVyKG5v
ZGUudHlwZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKKyAgICB7
CisgICAgICAgIHRoaXMuX2NvbnNpZGVyKHRoaXMudmFyaWFibGUpOworICAgIH0KK30KKwpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFsdWUuanMJKHJldmlzaW9uIDIyMjE0MCkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ZhbHVlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw1ICsyOCwxNCBAQCBjbGFzcyBWYWx1ZSBleHRlbmRzIE5vZGUgewogICAgIGdldCBr
aW5kKCkgeyByZXR1cm4gVmFsdWU7IH0KICAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJldHVybiBm
YWxzZTsgfQogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCisgICAg
YmVjb21lKG90aGVyVmFsdWUpCisgICAgeworICAgICAgICAvLyBOT1RFOiBNYWtlIHN1cmUgdGhh
dCBJZGVudGl0eUV4cHJlc3Npb24gaW1wbGVtZW50cyB1bmlmeU5vZGUgYW5kIGFsbCB0aGF0Cisg
ICAgICAgIGxldCBvcmlnaW4gPSB0aGlzLm9yaWdpbjsKKyAgICAgICAgdGhpcy5fX3Byb3RvX18g
PSBJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlOworICAgICAgICB0aGlzLl9vcmlnaW4gPSBv
cmlnaW47CisgICAgICAgIHRoaXMuX3RhcmdldCA9IG90aGVyVmFsdWU7CisgICAgfQogfQogCklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZVJlZi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZVJlZi5qcwkocmV2
aXNpb24gMjIyMTQwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFyaWFibGVS
ZWYuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSw5IEBAIGNsYXNzIFZhcmlhYmxlUmVm
IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgICAgCiAgICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlz
Ll9uYW1lOyB9CiAgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdGhpcy52YXJpYWJsZS5p
c0NvbnN0ZXhwcjsgfQotICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxl
LnVuaWZ5Tm9kZTsgfQorICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxl
LnVuaWZ5Tm9kZTsgfSAvLyBUaGlzIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB0aGlzIGlzIGEgY29u
c3RleHByLgogICAgIGdldCBpc0xWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBnZXQgYWRk
cmVzc1NwYWNlKCkgeyByZXR1cm4gInRocmVhZCI7IH0KLSAgICBnZXQgdW5pZnlOb2RlKCkgeyBy
ZXR1cm4gdGhpcy52YXJpYWJsZTsgfQogICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJKHJldmlzaW9uIDIyMjE0
MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDEyICsyNCw3IEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotY2xhc3MgVmlz
aXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKLSAgICBjb25zdHJ1Y3RvcigpCi0gICAgewotICAg
ICAgICBzdXBlcigpOwotICAgIH0KLSAgICAKK2NsYXNzIFZpc2l0b3IgewogICAgIHZpc2l0UHJv
Z3JhbShub2RlKQogICAgIHsKICAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9w
TGV2ZWxTdGF0ZW1lbnRzKQpAQCAtNjgsOCArNjMsOCBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMg
VmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKG5vZGUpCiAg
ICAgewotICAgICAgICBub2RlLmZ1bmMudmlzaXQodGhpcyk7CiAgICAgICAgIHRoaXMudmlzaXRG
dW5jKG5vZGUpOworICAgICAgICBub2RlLmZ1bmMudmlzaXRJbXBsZW1lbnRhdGlvbkRhdGEobm9k
ZS5pbXBsZW1lbnRhdGlvbkRhdGEsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdEJsb2Nr
KG5vZGUpCkBAIC0xMDAsOCArOTUsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJh
c2UgewogICAgIHsKICAgICAgICAgZm9yIChsZXQgdHlwZUFyZ3VtZW50IG9mIG5vZGUudHlwZUFy
Z3VtZW50cykKICAgICAgICAgICAgIHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKTsKLSAgICAgICAg
aWYgKG5vZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKKyAgICAg
ICAgTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdE5h
dGl2ZVR5cGUobm9kZSkKQEAgLTEzNCw4ICsxMjgsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMg
VmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0VHlwZVZhcmlhYmxlKG5vZGUpCiAgICAgewot
ICAgICAgICBpZiAobm9kZS5wcm90b2NvbCkKLSAgICAgICAgICAgIG5vZGUucHJvdG9jb2wudmlz
aXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5wcm90b2NvbCwgdGhpcyk7CiAgICAg
fQogICAgIAogICAgIHZpc2l0Q29uc3RleHByVHlwZVBhcmFtZXRlcihub2RlKQpAQCAtMTc3LDE0
ICsxNzAsMjMgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNp
dFZhcmlhYmxlRGVjbChub2RlKQogICAgIHsKICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMp
OwotICAgICAgICBpZiAobm9kZS5pbml0aWFsaXplcikKLSAgICAgICAgICAgIG5vZGUuaW5pdGlh
bGl6ZXIudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbml0aWFsaXplciwg
dGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0QXNzaWdubWVudChub2RlKQogICAgIHsKICAg
ICAgICAgbm9kZS5saHMudmlzaXQodGhpcyk7CiAgICAgICAgIG5vZGUucmhzLnZpc2l0KHRoaXMp
OworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CisgICAgfQorICAgIAorICAg
IHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbm9k
ZS5sVmFsdWUudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUub2xkVmFsdWVWYXIudmlzaXQodGhp
cyk7CisgICAgICAgIG5vZGUubmV3VmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUu
bmV3VmFsdWVFeHAudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUucmVzdWx0RXhwLnZpc2l0KHRo
aXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQpA
QCAtMTkyLDExICsxOTQsMjcgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
ICAgICAgICAgbm9kZS5wdHIudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAorICAgIF9oYW5kbGVQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIE5vZGUudmlzaXQo
bm9kZS5iYXNlVHlwZSwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5jYWxsRm9yR2V0
LCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JHZXQsIHRoaXMp
OworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvckFuZCwgdGhpcyk7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlRm9yQW5kLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNp
dChub2RlLmNhbGxGb3JTZXQsIHRoaXMpOworICAgIH0KKyAgICAKICAgICB2aXNpdERvdEV4cHJl
c3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpOwotICAg
ICAgICBpZiAobm9kZS5zdHJ1Y3RUeXBlKQotICAgICAgICAgICAgbm9kZS5zdHJ1Y3RUeXBlLnZp
c2l0KHRoaXMpOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24o
bm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAg
eworICAgICAgICBub2RlLmFycmF5LnZpc2l0KHRoaXMpOworICAgICAgICBub2RlLmluZGV4LnZp
c2l0KHRoaXMpOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24o
bm9kZSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKQEAg
LTIwNyw4ICsyMjUsNyBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAg
IHZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbm9kZS5s
VmFsdWUudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLm51bUVsZW1lbnRzKQotICAgICAg
ICAgICAgbm9kZS5udW1FbGVtZW50cy52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChu
b2RlLm51bUVsZW1lbnRzLCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRDb252ZXJ0UHRy
VG9BcnJheVJlZkV4cHJlc3Npb24obm9kZSkKQEAgLTIyNCw4ICsyNDEsNyBAQCBjbGFzcyBWaXNp
dG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHsKICAgICAgICAgbm9kZS5jb25kaXRpb25h
bC52aXNpdCh0aGlzKTsKICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwotICAgICAgICBp
ZiAobm9kZS5lbHNlQm9keSkKLSAgICAgICAgICAgIG5vZGUuZWxzZUJvZHkudmlzaXQodGhpcyk7
CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5lbHNlQm9keSwgdGhpcyk7CiAgICAgfQogICAgIAog
ICAgIHZpc2l0V2hpbGVMb29wKG5vZGUpCkBAIC0yNDIsMTkgKzI1OCwxNSBAQCBjbGFzcyBWaXNp
dG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0Rm9yTG9vcChub2RlKQog
ICAgIHsKLSAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6YXRpb24pCi0gICAgICAgICAgICBub2Rl
LmluaXRpYWxpemF0aW9uLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5jb25kaXRpb24p
Ci0gICAgICAgICAgICBub2RlLmNvbmRpdGlvbi52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5v
ZGUuaW5jcmVtZW50KQotICAgICAgICAgICAgbm9kZS5pbmNyZW1lbnQudmlzaXQodGhpcyk7Cisg
ICAgICAgIE5vZGUudmlzaXQobm9kZS5pbml0aWFsaXphdGlvbiwgdGhpcyk7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS5jb25kaXRpb24sIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUu
aW5jcmVtZW50LCB0aGlzKTsKICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgIH0K
IAogICAgIHZpc2l0UmV0dXJuKG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS52YWx1ZSkK
LSAgICAgICAgICAgIG5vZGUudmFsdWUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQo
bm9kZS52YWx1ZSwgdGhpcyk7CiAgICAgfQogCiAgICAgdmlzaXRDb250aW51ZShub2RlKQpAQCAt
MjcyLDggKzI4NCw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAg
CiAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChu
b2RlLnR5cGUpCi0gICAgICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAgICAgICAgbm9kZS5wcmVmZXJyZWRUeXBlLnZp
c2l0KHRoaXMpOwogICAgIH0KICAgICAKQEAgLTI4OCw4ICsyOTksNyBAQCBjbGFzcyBWaXNpdG9y
IGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0TnVsbFR5cGUobm9kZSkKICAg
ICB7Ci0gICAgICAgIGlmIChub2RlLnR5cGUpCi0gICAgICAgICAgICBub2RlLnR5cGUudmlzaXQo
dGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKICAgICB9CiAgICAg
CiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQpAQCAtMjk3LDE2ICszMDcsMTUgQEAgY2xh
c3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgZm9yIChsZXQgdHlwZUFy
Z3VtZW50IG9mIG5vZGUudHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgIHR5cGVBcmd1bWVudC52
aXNpdCh0aGlzKTsKICAgICAgICAgZm9yIChsZXQgYXJndW1lbnQgb2Ygbm9kZS5hcmd1bWVudExp
c3QpCi0gICAgICAgICAgICBhcmd1bWVudC52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIE5vZGUu
dmlzaXQoYXJndW1lbnQsIHRoaXMpOwogICAgICAgICBsZXQgYWN0dWFsVHlwZUFyZ3VtZW50cyA9
IG5vZGUuYWN0dWFsVHlwZUFyZ3VtZW50czsKICAgICAgICAgaWYgKGFjdHVhbFR5cGVBcmd1bWVu
dHMpIHsKICAgICAgICAgICAgIGZvciAobGV0IGFyZ3VtZW50IG9mIGFjdHVhbFR5cGVBcmd1bWVu
dHMpCiAgICAgICAgICAgICAgICAgYXJndW1lbnQudmlzaXQodGhpcyk7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKLSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52
aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUucmVzdWx0VHlwZSkKLSAgICAgICAgICAgIG5v
ZGUucmVzdWx0VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLm5hdGl2
ZUZ1bmNJbnN0YW5jZSwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXR1cm5UeXBl
LCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGUsIHRoaXMpOwogICAg
IH0KICAgICAKICAgICB2aXNpdExvZ2ljYWxOb3Qobm9kZSkKQEAgLTMyMiwyMSArMzMxLDIzIEBA
IGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXRGdW5j
dGlvbkxpa2VCbG9jayhub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkK
LSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52
aXNpdChub2RlLnJldHVyblR5cGUsIHRoaXMpOwogICAgICAgICBmb3IgKGxldCBhcmd1bWVudCBv
ZiBub2RlLmFyZ3VtZW50TGlzdCkKICAgICAgICAgICAgIGFyZ3VtZW50LnZpc2l0KHRoaXMpOwog
ICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2Ygbm9kZS5wYXJhbWV0ZXJzKQogICAgICAgICAg
ICAgcGFyYW1ldGVyLnZpc2l0KHRoaXMpOwogICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7
Ci0gICAgICAgIGlmIChub2RlLnJlc3VsdFR5cGUpCi0gICAgICAgICAgICBub2RlLnJlc3VsdFR5
cGUudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlLCB0aGlz
KTsKICAgICB9CiAgICAgCi0gICAgdmlzaXRMZXRFeHByZXNzaW9uKG5vZGUpCisgICAgdmlzaXRB
bm9ueW1vdXNWYXJpYWJsZShub2RlKQogICAgIHsKLSAgICAgICAgbm9kZS5hcmd1bWVudC52aXNp
dCh0aGlzKTsKLSAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZp
c2l0KG5vZGUudHlwZSwgdGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0SWRlbnRpdHlFeHBy
ZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnRhcmdldC52aXNpdCh0aGlzKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JC
YXNlLmpzCShyZXZpc2lvbiAyMjIxNDApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9WaXNpdG9yQmFzZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xh
c3MgVmlzaXRvckJhc2UgewotICAgIGNvbnN0cnVjdG9yKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X21lbW9UYWJsZSA9IG5ldyBNYXAoKTsKLSAgICB9Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321106</attachid>
            <date>2017-09-18 10:35:50 -0700</date>
            <delta_ts>2017-09-18 11:32:25 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>190680</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjE2MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5OCBAQAorMjAxNy0wOS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEZpZ3VyZSBvdXQgaG93IFdTTCB3aWxsIHN1cHBvcnQgZmllbGQgb3ZlcmxvYWRz
IGxpa2UgZmxvYXQ0Lnh6IGFuZCBmcmllbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdTTCBuZWVkcyB0byBzdXBwb3J0IGdldHRlcnMg
YW5kIHNldHRlcnMsIHNvIHRoYXQgd2UgY2FuIGRvIHRoaW5ncyBsaWtlOgorICAgICAgICAKKyAg
ICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAgICB2ZWMuenggPSBmbG9hdDIoMSwgMik7
CisgICAgICAgICAgICAvLyB6ID0gMSwgeCA9IDIKKyAgICAgICAgCisgICAgICAgIFRoZXJlJ3Mg
bm8gd2F5IHRvIGV4cHJlc3MgdGhpcyBmbG9hdDQuenggcmV0dXJuaW5nIGEgcG9pbnRlciB0byBz
b21ldGhpbmcsIHNpbmNlIGl0J3MgZG9pbmcgc3dpenpsaW5nLgorICAgICAgICBJdCBjb3VsZCBy
ZXR1cm4gYSBjcmF6eSBzbWFydCBwb2ludGVyLCBidXQgdGhhdCBzb3VuZHMgbGlrZSBhIGxvdCBv
ZiB3b3JrLiBTbywgSSBkZWNpZGVkIHRvIGdvIGZvcgorICAgICAgICBsdmFsdWUgZW11bGF0aW9u
IGluc3RlYWQuCisgICAgICAgIAorICAgICAgICBUaGUgaWRlYSBvZiBsdmFsdWUgZW11bGF0aW9u
IGlzIHRoYXQgd2hlbiB3ZSB0cnkgdG8gbWFrZSBhbiBsdmFsdWUgd29yayBmb3IgYW4gYXNzaWdu
bWVudCBvciBSTVcKKyAgICAgICAgb3BlcmF0aW9uIChsaWtlICs9IGFuZCBmcmllbmRzKSwgd2Ug
Y29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgd2UgaGF2ZSB0byBmaXJzdCBsb2FkIHRoZSB2
YWx1ZSB1c2luZworICAgICAgICBhIGdldHRlciBhbmQgdGhlbiBzdG9yZSBpdCB3aXRoIGEgc2V0
dGVyLiBUaGlzIHBhdGNoIG1ha2VzIHRoaXMgd29yayByZWN1cnNpdmVseSwgc28gdGhhdCB0aGlz
IHdpbGwKKyAgICAgICAgd29yazoKKyAgICAgICAgCisgICAgICAgICAgICBmbG9hdDQgdmVjOwor
ICAgICAgICAgICAgdmVjLnp3eC55ID0gNDI7CisgICAgICAgICAgICAvLyBub3cgdyBpcyA0Mgor
ICAgICAgICAKKyAgICAgICAgVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRlY29tcG9zZSBpdCBhdXRv
bWF0aWNhbGx5OgorICAgICAgICAKKyAgICAgICAgICAgIGZsb2F0NCB2ZWM7CisgICAgICAgICAg
ICBmbG9hdDMgdG1wID0gdmVjLnp3eDsKKyAgICAgICAgICAgIHRtcC55ID0gNDI7CisgICAgICAg
ICAgICB2ZWMuend4ID0gdG1wOworICAgICAgICAKKyAgICAgICAgVGhpcydsbCB3b3JrIHRvIGFu
eSBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIFRvIGNoZWNrIGlmIHRoaXMgd29ya3MsIHRoaXMg
cGF0Y2ggYWRkcyB0d28gc3Vic3RhbnRpYWwgbmV3IHRlc3RzIGNhbGxlZCBURVNUX2dlbmVyaWNB
Y2Nlc3NvcnMoKSBhbmQKKyAgICAgICAgVEVTVF9iaXRTdWJzY3JpcHRBY2Nlc3NvcigpLiBUaGlz
IHRlc3RzIHRoYXQgdGhpcyBzdHVmZiB3b3JrcyB3aXRoIGEgbG90IG9mIGdlbmVyaWMgdHlwZXMs
IGFuZCB0aGF0IGl0J3MKKyAgICAgICAgcG9zc2libGUgdG8gdHVybiBpbnRlZ2VycyBpbnRvIGJp
dHZlY3RvcnMgdXNpbmcgc3Vic2NyaXB0IG92ZXJsb2FkaW5nLiBUaGlzIHBhdGNoIGFsc28gYWRk
cyBzbWFsbGVyIHVuaXQKKyAgICAgICAgdGVzdHMgYWxzby4KKyAgICAgICAgCisgICAgICAgIE9o
LCBhbmQgaXQncyBub3cgcG9zc2libGUgdG8gZ2V0IGFuIGFycmF5J3MgbGVuZ3RoLgorCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzOgorICAgICAgICAo
bmVlZHNQcmltaXRpdmVQcm90b2NvbCk6CisgICAgICAgIChwcm90b2NvbFN1ZmZpeCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Fub255bW91c1ZhcmlhYmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKEFu
b255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5n
ZXQgb3JpZ2luKToKKyAgICAgICAgKEFub255bW91c1ZhcmlhYmxlLnByb3RvdHlwZS5nZXQgbmFt
ZSk6CisgICAgICAgIChBbm9ueW1vdXNWYXJpYWJsZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qczoKKyAgICAgICAg
KEFycmF5UmVmVHlwZS5wcm90b3R5cGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZCk6CisgICAgICAg
IChBcnJheVJlZlR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanM6CisgICAgICAgIChB
cnJheVR5cGUucHJvdG90eXBlLmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQpOgorICAgICAgICAoQXJy
YXlUeXBlLnByb3RvdHlwZS5hcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCk6CisgICAgICAgIChB
cnJheVR5cGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQu
anM6CisgICAgICAgIChBc3NpZ25tZW50KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DYWxsQXNzaWdubWVudC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKENhbGxFeHByZXNzaW9uLnJl
c29sdmUpOgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmUpOgorICAg
ICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLnJlc29sdmVUb092ZXJsb2FkKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzOgorICAgICAgICAoQ2hlY2tl
ci5wcm90b3R5cGUudmlzaXRQcm9ncmFtKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZp
c2l0RnVuY0RlZik6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmMp
OgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAo
Q2hlY2tlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KENoZWNrZXIucHJvdG90eXBlLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKToKKyAgICAg
ICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0RG90RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChDaGVja2VyLnBy
b3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9uKToKKyAgICAgICAgKENoZWNrZXIpOgorICAgICAg
ICAoQ2hlY2tlci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxl
LnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOiBEZWxldGVkLgorICAgICAgICAoQ2hlY2tlci5wcm90
b3R5cGUudmlzaXRQcm90b2NvbERlY2wuTm90aWNlVHlwZVZhcmlhYmxlLnByb3RvdHlwZS52aXNp
dFZhcmlhYmxlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0
UHJvdG9jb2xEZWNsLk5vdGljZVR5cGVWYXJpYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChDaGVj
a2VyLnByb3RvdHlwZS52aXNpdFByb3RvY29sRGVjbC5zZXQgdGhyb3cpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbW1hRXhwcmVzc2lvbi5qczoKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzOgorICAgICAgICAo
RG90RXhwcmVzc2lvbik6CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc3Ry
dWN0KToKKyAgICAgICAgKERvdEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBnZXRGdW5jTmFtZSk6
CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoRG90RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHNldEZ1bmNOYW1lKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzOgorICAgICAgICAoRUJ1ZmZlckJ1aWxk
ZXIucHJvdG90eXBlLnZpc2l0QW5vbnltb3VzVmFyaWFibGUpOgorICAgICAgICAoRUJ1ZmZlckJ1
aWxkZXIucHJvdG90eXBlLnZpc2l0TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAgICAgICAoRXZhbHVhdG9y
LnByb3RvdHlwZS52aXNpdElkZW50aXR5RXhwcmVzc2lvbik6CisgICAgICAgIChFdmFsdWF0b3Iu
cHJvdG90eXBlLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoRXZhbHVhdG9yLnBy
b3RvdHlwZS52aXNpdEFub255bW91c1ZhcmlhYmxlKToKKyAgICAgICAgKEV2YWx1YXRvci5wcm90
b3R5cGUudmlzaXREb3RFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEV2YWx1YXRvci5w
cm90b3R5cGUudmlzaXRMZXRFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzOgorICAgICAgICAoRXhwcmVzc2lv
bkZpbmRlci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAg
ICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0SWRlbnRpdHlFeHByZXNzaW9uKToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzOgorICAgICAgICAo
Rm9yTG9vcC5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAoRm9yTG9vcCk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qczoKKyAgICAgICAgKEZ1bmMpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanM6CisgICAg
ICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1
YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRDYWxsRXhwcmVzc2lvbik6CisgICAgICAgIChGdW5j
SW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGlvblN1YnN0aXR1dGlv
bik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9y
LnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFudGlhdGUucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVu
Yyk6CisgICAgICAgIChGdW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuSW5zdGFu
dGlhdGUpOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlKToK
KyAgICAgICAgKEZ1bmNJbnN0YW50aWF0b3IpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qczogQWRkZWQuCisgICAgICAgIChJZGVudGl0eUV4
cHJlc3Npb24pOgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgdGFy
Z2V0KToKKyAgICAgICAgKElkZW50aXR5RXhwcmVzc2lvbi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0NvbnN0ZXhw
cik6CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1ZSk6
CisgICAgICAgIChJZGVudGl0eUV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSWRlbnRpdHlFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJv
dG90eXBlLmdldCBhcnJheSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdl
dCBpbmRleCk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0xWYWx1
ZSk6CisgICAgICAgIChJbmRleEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBhZGRyZXNzU3BhY2Up
OgorICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgZ2V0RnVuY05hbWUpOgor
ICAgICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYW5kRnVuY05hbWUpOgorICAg
ICAgICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgc2V0RnVuY05hbWUpOgorICAgICAg
ICAoSW5kZXhFeHByZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanM6CisgICAgICAgIChpbmZlclR5
cGVzRm9yQ2FsbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpz
OgorICAgICAgICAoX2lubGluZUZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzOgorICAgICAgICAoSW5saW5lci5wcm90b3R5cGUudmlzaXRDYWxs
RXhwcmVzc2lvbik6CisgICAgICAgIChJbmxpbmVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Np
b24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNp
Y3MuanM6CisgICAgICAgIChJbnRyaW5zaWNzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanM6CisgICAgICAgIChNYWtlQXJy
YXlSZWZFeHByZXNzaW9uLnByb3RvdHlwZS5iZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJl
c3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVD
b250ZXh0LmpzOgorICAgICAgICAoTmFtZUNvbnRleHQpOgorICAgICAgICAoTmFtZUNvbnRleHQu
cHJvdG90eXBlLmFkZCk6CisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZG9TdGF0ZW1l
bnQpOgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmhhbmRsZURlZmluaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKE5hbWVDb250ZXh0LnByb3RvdHlwZS5pc0RlZmluZWQpOiBEZWxldGVk
LgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLmRlZmluZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUuZGVmaW5lQWxsKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanM6CisgICAgICAgIChOYW1l
UmVzb2x2ZXIucHJvdG90eXBlLmRvU3RhdGVtZW50KToKKyAgICAgICAgKE5hbWVSZXNvbHZlci5w
cm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorICAgICAgICAoTmFtZVJlc29sdmVyLnByb3Rv
dHlwZS52aXNpdFByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL05hdGl2ZUZ1bmMuanM6CisgICAgICAgIChOYXRpdmVGdW5jKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanM6CisgICAgICAgIChO
YXRpdmVGdW5jSW5zdGFuY2UpOgorICAgICAgICAoTmF0aXZlRnVuY0luc3RhbmNlLnByb3RvdHlw
ZS5nZXQgaW1wbGVtZW50YXRpb25EYXRhKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Ob2RlLmpzOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUudmlzaXQpOgorICAgICAgICAo
Tm9kZS52aXNpdCk6CisgICAgICAgIChOb2RlLnVuaWZ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0RG90
RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLnByb3RvdHlw
ZS52aXNpdEluZGV4RXhwcmVzc2lvbik6CisgICAgICAgIChOb3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAg
ICAgKGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KToKKyAgICAgICAgKHBhcnNlUG9zc2libGVT
dWZmaXgpOgorICAgICAgICAoZmluaXNoUGFyc2luZ1ByZUluY3JlbWVudCk6CisgICAgICAgIChn
ZW5lcmljUGFyc2VDb21tYUV4cHJlc3Npb24pOgorICAgICAgICAocGFyc2VGdW5jTmFtZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qczoKKyAgICAgICAgKHBy
ZXBhcmUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanM6Cisg
ICAgICAgIChQcm9ncmFtKToKKyAgICAgICAgKFByb2dyYW0ucHJvdG90eXBlLmdldCBnbG9iYWxO
YW1lQ29udGV4dCk6CisgICAgICAgIChQcm9ncmFtLnByb3RvdHlwZS5hZGQpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qczogQWRk
ZWQuCisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgcmVzdWx0VHlwZSk6CisgICAgICAgIChQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90eXBlLnJld3JpdGVBZnRlckNsb25pbmcpOgor
ICAgICAgICAoUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnByb3RvdHlwZS51cGRhdGVDYWxsc0Fm
dGVyQ2hhbmdpbmdCYXNlKToKKyAgICAgICAgKFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wcm90
b3R5cGUuZW1pdEdldCk6CisgICAgICAgIChQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucHJvdG90
eXBlLmVtaXRTZXQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5
UmVzb2x2ZXIuanM6IEFkZGVkLgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUu
X3Zpc2l0UHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZlci5wcm90b3R5
cGUudmlzaXREb3RFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJvdG90
eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFByb3BlcnR5UmVzb2x2ZXIucHJv
dG90eXBlLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUpOgorICAgICAgICAoUHJvcGVydHlSZXNvbHZl
ci5wcm90b3R5cGUudmlzaXRSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFBy
b3BlcnR5UmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0QXNzaWdubWVudCk6CisgICAgICAgIChQcm9w
ZXJ0eVJlc29sdmVyLnZpc2l0TWFrZVB0ckV4cHJlc3Npb24pOgorICAgICAgICAoUHJvcGVydHlS
ZXNvbHZlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAg
KFByb3BlcnR5UmVzb2x2ZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0
clR5cGUuanM6CisgICAgICAgIChQdHJUeXBlLnByb3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLmFyZ3VtZW50VHlwZUZvckFuZE92ZXJs
b2FkKToKKyAgICAgICAgKFB0clR5cGUucHJvdG90eXBlLnJldHVyblR5cGVGcm9tQW5kT3Zlcmxv
YWQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24uanM6IEFkZGVkLgorICAgICAgICAoUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbik6
CisgICAgICAgIChSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgbFZhbHVl
KToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm9sZFZhbHVl
UmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLm5ld1Zh
bHVlUmVmKToKKyAgICAgICAgKFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucHJvdG90eXBlLnRv
U3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMu
anM6CisgICAgICAgIChjcmVhdGVOYW1lUmVzb2x2ZXIpOgorICAgICAgICAocmVzb2x2ZU5hbWVz
SW5UeXBlcyk6CisgICAgICAgIChyZXNvbHZlTmFtZXNJblByb3RvY29scyk6CisgICAgICAgIChy
ZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlTmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwu
anM6CisgICAgICAgIChyZXNvbHZlT3ZlcmxvYWRJbXBsKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qczogQWRkZWQuCisgICAgICAgIChyZXNv
bHZlUHJvcGVydGllcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2
ZVR5cGVEZWZzLmpzOgorICAgICAgICAocmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyk6CisgICAgICAg
IChyZXNvbHZlVHlwZURlZnNJblByb3RvY29scyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnNJ
bkZ1bmN0aW9ucyk6CisgICAgICAgIChyZXNvbHZlVHlwZURlZnMpOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanM6CisgICAgICAgIChS
ZXR1cm5DaGVja2VyLnByb3RvdHlwZS5faXNCb29sQ2FzdEZyb21MaXRlcmFsVHJ1ZSk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanM6CisgICAgICAgIChSZXdy
aXRlcik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgor
ICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJlZik6CisgICAgICAgIChSZXdy
aXRlci5wcm90b3R5cGUudmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVy
LnByb3RvdHlwZS5faGFuZGxlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKToKKyAgICAgICAgKFJl
d3JpdGVyLnByb3RvdHlwZS52aXNpdERvdEV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIu
cHJvdG90eXBlLnZpc2l0SW5kZXhFeHByZXNzaW9uKToKKyAgICAgICAgKFJld3JpdGVyLnByb3Rv
dHlwZS52aXNpdFJldHVybik6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRHZW5l
cmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0TnVsbFR5
cGUpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnByb2Nlc3NEZXJpdmVkQ2FsbERhdGEp
OgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgorICAg
ICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0RnVuY3Rpb25MaWtlQmxvY2spOgorICAgICAg
ICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0SWZTdGF0ZW1lbnQpOgorICAgICAgICAoUmV3cml0
ZXIucHJvdG90eXBlLnZpc2l0Rm9yTG9vcCk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUu
dmlzaXRBbm9ueW1vdXNWYXJpYWJsZSk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRJZGVudGl0eUV4cHJlc3Npb24pOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0
TGV0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RhbmRhcmRMaWJyYXJ5LmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0cnVjdExheW91dEJ1aWxkZXIuanM6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRCdWlsZGVyLnBy
b3RvdHlwZS52aXNpdE5hdGl2ZUZ1bmNJbnN0YW5jZSk6CisgICAgICAgIChTdHJ1Y3RMYXlvdXRC
dWlsZGVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpz
OgorICAgICAgICAoU3RydWN0VHlwZS5wcm90b3R5cGUuaW5zdGFudGlhdGUpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qczoKKyAgICAgICAgKFN1YnN0
aXR1dGlvbi5wcm90b3R5cGUuZ2V0IG1hcCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3VmZml4Q2FsbEFzc2lnbm1lbnQuanM6IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qczogQWRkZWQuCisg
ICAgICAgIChzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmNyZWF0ZVR5cGVQYXJhbWV0ZXJzKToK
KyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuKToKKyAgICAgICAgKHN5bnRoZXNp
emVTdHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlRmllbGRUeXBlKToKKyAgICAgICAgKHN5bnRoZXNpemVT
dHJ1Y3RBY2Nlc3NvcnMuY3JlYXRlVHlwZVJlZik6CisgICAgICAgIChzeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzLnNldHVwQW5kZXIpOgorICAgICAgICAoc3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29y
cyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChjaGVja051bWJl
cik6CisgICAgICAgIChURVNUX3NpbXBsZVByb3RvY29sKToKKyAgICAgICAgKFRFU1RfYXNzaWdu
TGVuZ3RoKToKKyAgICAgICAgKFRFU1Rfc2ltcGxlU2V0dGVyKToKKyAgICAgICAgKFRFU1RfZ2Vu
ZXJpY0FjY2Vzc29ycyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5q
czoKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmdldCBpc1JlZik6CisgICAgICAgIChUeXBlLnBy
b3RvdHlwZS5hcmd1bWVudEZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBl
LmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKToKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLnJl
dHVyblR5cGVGcm9tQW5kT3ZlcmxvYWQpOgorICAgICAgICAoVHlwZSk6CisgICAgICAgICogV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzOiBBZGRlZC4KKyAg
ICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlzaXRDb25zdGV4cHJUeXBl
UGFyYW1ldGVyKToKKyAgICAgICAgKFR5cGVQYXJhbWV0ZXJSZXdyaXRlci5wcm90b3R5cGUudmlz
aXRUeXBlVmFyaWFibGUpOgorICAgICAgICAoVHlwZVBhcmFtZXRlclJld3JpdGVyKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFR5cGVWYXJpYWJsZVRyYWNrZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1ZhbHVlLmpzOgorICAgICAgICAoVmFsdWUucHJvdG90eXBlLmJlY29tZSk6
CisgICAgICAgIChWYWx1ZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmFy
aWFibGVSZWYuanM6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IHVuaWZ5Tm9k
ZSk6CisgICAgICAgIChWYXJpYWJsZVJlZi5wcm90b3R5cGUuZ2V0IGFkZHJlc3NTcGFjZSk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZp
c2l0b3IucHJvdG90eXBlLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNlKToKKyAgICAgICAgKFZpc2l0
b3IucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xEZWNsKToKKyAgICAgICAgKFZpc2l0b3IpOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzOiBS
ZW1vdmVkLgorCiAyMDE3LTA5LTE4ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUu
Y29tPgogCiAgICAgICAgIGJ1aWxkLXdlYmtpdCBzcGF3bnMgZmV3ZXIgc3VicHJvY2Vzc2VzIHRo
YW4gbmluamEgdXNlcyBieSBkZWZhdWx0CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9BZGRyZXNzU3BhY2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQWRkcmVzc1NwYWNlLmpzCShyZXZpc2lvbiAyMjIxNjEpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9BZGRyZXNzU3BhY2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDE2IEBAIGZ1bmN0aW9uIGlzQWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICB9
CiB9CiAKK2Z1bmN0aW9uIG5lZWRzUHJpbWl0aXZlUHJvdG9jb2woYWRkcmVzc1NwYWNlKQorewor
ICAgIHJldHVybiBhZGRyZXNzU3BhY2UgIT0gInRocmVhZCI7Cit9CisKK2Z1bmN0aW9uIHByb3Rv
Y29sU3VmZml4KGFkZHJlc3NTcGFjZSkKK3sKKyAgICByZXR1cm4gbmVlZHNQcmltaXRpdmVQcm90
b2NvbChhZGRyZXNzU3BhY2UpID8gIjpwcmltaXRpdmUiIDogIiI7Cit9CisKIGZ1bmN0aW9uIHZh
bGlkYXRlQWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKIHsKICAgICBpZiAoIWlzQWRkcmVzc1Nw
YWNlKGFkZHJlc3NTcGFjZSkpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9B
bGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpz
CShyZXZpc2lvbiAyMjIxNjEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwu
anMJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxNCBAQCBsb2FkKCJUeXBlLmpzIik7CiBs
b2FkKCJSZWZlcmVuY2VUeXBlLmpzIik7CiBsb2FkKCJWYWx1ZS5qcyIpOwogbG9hZCgiRXhwcmVz
c2lvbi5qcyIpOwotbG9hZCgiVmlzaXRvckJhc2UuanMiKTsKIGxvYWQoIlJld3JpdGVyLmpzIik7
CiBsb2FkKCJWaXNpdG9yLmpzIik7CiBsb2FkKCJDcmVhdGVMaXRlcmFsLmpzIik7CiBsb2FkKCJD
cmVhdGVMaXRlcmFsVHlwZS5qcyIpOworbG9hZCgiUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpz
Iik7CiAKIGxvYWQoIkFkZHJlc3NTcGFjZS5qcyIpOworbG9hZCgiQW5vbnltb3VzVmFyaWFibGUu
anMiKTsKIGxvYWQoIkFycmF5UmVmVHlwZS5qcyIpOwogbG9hZCgiQXJyYXlUeXBlLmpzIik7CiBs
b2FkKCJBc3NpZ25tZW50LmpzIik7CkBAIC00Myw3ICs0NCw2IEBAIGxvYWQoIkF1dG9XcmFwcGVy
LmpzIik7CiBsb2FkKCJCbG9jay5qcyIpOwogbG9hZCgiQm9vbExpdGVyYWwuanMiKTsKIGxvYWQo
IkJyZWFrLmpzIik7Ci1sb2FkKCJDYWxsQXNzaWdubWVudC5qcyIpOwogbG9hZCgiQ2FsbEV4cHJl
c3Npb24uanMiKTsKIGxvYWQoIkNhbGxGdW5jdGlvbi5qcyIpOwogbG9hZCgiQ2hlY2suanMiKTsK
QEAgLTcxLDYgKzcxLDcgQEAgbG9hZCgiRXZhbHVhdGlvbkNvbW1vbi5qcyIpOwogbG9hZCgiRXZh
bHVhdG9yLmpzIik7CiBsb2FkKCJFeHByZXNzaW9uRmluZGVyLmpzIik7CiBsb2FkKCJGaWVsZC5q
cyIpOworbG9hZCgiRmluZEhpZ2hab21iaWVzLmpzIik7CiBsb2FkKCJGbGF0dGVuUHJvdG9jb2xF
eHRlbmRzLmpzIik7CiBsb2FkKCJGbG9hdExpdGVyYWwuanMiKTsKIGxvYWQoIkZsb2F0TGl0ZXJh
bFR5cGUuanMiKTsKQEAgLTgwLDcgKzgxLDEwIEBAIGxvYWQoIkZ1bmNEZWYuanMiKTsKIGxvYWQo
IkZ1bmNJbnN0YW50aWF0b3IuanMiKTsKIGxvYWQoIkZ1bmNQYXJhbWV0ZXIuanMiKTsKIGxvYWQo
IkZ1bmN0aW9uTGlrZUJsb2NrLmpzIik7Citsb2FkKCJIaWdoWm9tYmllRmluZGVyLmpzIik7Cits
b2FkKCJJZGVudGl0eUV4cHJlc3Npb24uanMiKTsKIGxvYWQoIklmU3RhdGVtZW50LmpzIik7Cits
b2FkKCJJbmRleEV4cHJlc3Npb24uanMiKTsKIGxvYWQoIkluZmVyVHlwZXNGb3JDYWxsLmpzIik7
CiBsb2FkKCJJbmxpbmUuanMiKTsKIGxvYWQoIklubGluZXIuanMiKTsKQEAgLTg4LDcgKzkyLDYg
QEAgbG9hZCgiSW5zdGFudGlhdGVJbW1lZGlhdGVzLmpzIik7CiBsb2FkKCJJbnRMaXRlcmFsLmpz
Iik7CiBsb2FkKCJJbnRMaXRlcmFsVHlwZS5qcyIpOwogbG9hZCgiSW50cmluc2ljcy5qcyIpOwot
bG9hZCgiTGV0RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiTGV4ZXIuanMiKTsKIGxvYWQoIkxleGVy
VG9rZW4uanMiKTsKIGxvYWQoIkxpdGVyYWxUeXBlQ2hlY2tlci5qcyIpOwpAQCAtMTAzLDIwICsx
MDYsMjQgQEAgbG9hZCgiTmF0aXZlRnVuYy5qcyIpOwogbG9hZCgiTmF0aXZlRnVuY0luc3RhbmNl
LmpzIik7CiBsb2FkKCJOYXRpdmVUeXBlLmpzIik7CiBsb2FkKCJOYXRpdmVUeXBlSW5zdGFuY2Uu
anMiKTsKK2xvYWQoIk5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMiKTsKIGxvYWQoIk51bGxM
aXRlcmFsLmpzIik7CiBsb2FkKCJOdWxsVHlwZS5qcyIpOwogbG9hZCgiT3ZlcmxvYWRSZXNvbHV0
aW9uRmFpbHVyZS5qcyIpOwogbG9hZCgiUGFyc2UuanMiKTsKIGxvYWQoIlByZXBhcmUuanMiKTsK
IGxvYWQoIlByb2dyYW0uanMiKTsKK2xvYWQoIlByb3BlcnR5UmVzb2x2ZXIuanMiKTsKIGxvYWQo
IlByb3RvY29sLmpzIik7CiBsb2FkKCJQcm90b2NvbERlY2wuanMiKTsKIGxvYWQoIlByb3RvY29s
RnVuY0RlY2wuanMiKTsKIGxvYWQoIlByb3RvY29sUmVmLmpzIik7CiBsb2FkKCJQdHJUeXBlLmpz
Iik7Citsb2FkKCJSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJSZWN1cnNp
b25DaGVja2VyLmpzIik7CiBsb2FkKCJSZXNvbHZlTmFtZXMuanMiKTsKIGxvYWQoIlJlc29sdmVP
dmVybG9hZEltcGwuanMiKTsKK2xvYWQoIlJlc29sdmVQcm9wZXJ0aWVzLmpzIik7CiBsb2FkKCJS
ZXNvbHZlVHlwZURlZnMuanMiKTsKIGxvYWQoIlJldHVybi5qcyIpOwogbG9hZCgiUmV0dXJuQ2hl
Y2tlci5qcyIpOwpAQCAtMTI1LDEyICsxMzIsMTQgQEAgbG9hZCgiU3RhbmRhcmRMaWJyYXJ5Lmpz
Iik7CiBsb2FkKCJTdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzIik7CiBsb2FkKCJTdHJ1Y3RUeXBlLmpz
Iik7CiBsb2FkKCJTdWJzdGl0dXRpb24uanMiKTsKLWxvYWQoIlN1ZmZpeENhbGxBc3NpZ25tZW50
LmpzIik7Citsb2FkKCJTeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzIik7CiBsb2FkKCJUeXBl
RGVmLmpzIik7CiBsb2FkKCJUeXBlRGVmUmVzb2x2ZXIuanMiKTsKIGxvYWQoIlR5cGVPclZhcmlh
YmxlUmVmLmpzIik7Citsb2FkKCJUeXBlUGFyYW1ldGVyUmV3cml0ZXIuanMiKTsKIGxvYWQoIlR5
cGVSZWYuanMiKTsKIGxvYWQoIlR5cGVWYXJpYWJsZS5qcyIpOworbG9hZCgiVHlwZVZhcmlhYmxl
VHJhY2tlci5qcyIpOwogbG9hZCgiVHlwZWRWYWx1ZS5qcyIpOwogbG9hZCgiVWludExpdGVyYWwu
anMiKTsKIGxvYWQoIlVpbnRMaXRlcmFsVHlwZS5qcyIpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvQW5vbnltb3VzVmFyaWFibGUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQW5vbnltb3VzVmFyaWFibGUuanMJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQW5vbnltb3VzVmFyaWFibGUuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitsZXQgYW5vbnltb3VzVmFyaWFi
bGVDb3VudCA9IDA7CisKK2NsYXNzIEFub255bW91c1ZhcmlhYmxlIGV4dGVuZHMgVmFsdWUgewor
ICAgIC8vIFlvdSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHZhcmlhYmxlJ3MgdmFsdWUgYmVmb3Jl
IHVzZSwgYnV0IHRoYXQgY291bGQgYmUgcXVpdGUgbGF0ZS4KKyAgICBjb25zdHJ1Y3Rvcihvcmln
aW4sIHR5cGUgPSBudWxsKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgdGhpcy5f
b3JpZ2luID0gb3JpZ2luOworICAgICAgICB0aGlzLmluZGV4ID0gYW5vbnltb3VzVmFyaWFibGVD
b3VudCsrOworICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIH0KKyAgICAKKyAgICBnZXQg
b3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9CisgICAgZ2V0IG5hbWUoKSB7IHJldHVy
biAiYW5vblZhcjwiICsgdGhpcy5pbmRleCArICI+IjsgfQorICAgIAorICAgIHRvU3RyaW5nKCkK
KyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLm5hbWU7CisgICAgfQorfQorCkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzCShyZXZpc2lvbiAy
MjIxNjEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE1IEBAIGNsYXNzIEFycmF5UmVmVHlwZSBleHRl
bmRzIFJlZmVyZW5jZVR5cGUKICAgICAKICAgICBnZXQgaXNBcnJheVJlZigpIHsgcmV0dXJuIHRy
dWU7IH0KIAorICAgIGFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQob3JpZ2luLCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgYXJndW1lbnRUeXBlRm9yQW5kT3Zl
cmxvYWQob3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCiAgICAg
dG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUgKyAiW10g
IiArIHRoaXMuYWRkcmVzc1NwYWNlOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQXJyYXlUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0FycmF5VHlwZS5qcwkocmV2aXNpb24gMjIyMTYxKQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvQXJyYXlUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03Myw1ICs3MywxNiBA
QCBjbGFzcyBBcnJheVR5cGUgZXh0ZW5kcyBUeXBlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biB0aGlzLmVsZW1lbnRUeXBlLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIuZWxlbWVu
dFR5cGUpOwogICAgIH0KKworICAgIGFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQob3JpZ2luLCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgTWFrZUFycmF5UmVmRXhwcmVzc2lv
bihvcmlnaW4sIHZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lm51bUVsZW1lbnRzID0gdGhpcy5udW1F
bGVtZW50czsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgYXJndW1lbnRUeXBl
Rm9yQW5kT3ZlcmxvYWQob3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBBcnJheVJl
ZlR5cGUob3JpZ2luLCAidGhyZWFkIiwgdGhpcy5lbGVtZW50VHlwZSk7CisgICAgfQogfQogCklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Bc3NpZ25tZW50LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQuanMJKHJldmlz
aW9uIDIyMjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fzc2lnbm1lbnQu
anMJKHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsyNSwxMiBAQAogInVzZSBzdHJpY3QiOwogCiBj
bGFzcyBBc3NpZ25tZW50IGV4dGVuZHMgRXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3Jp
Z2luLCBsaHMsIHJocykKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGxocywgcmhzLCB0eXBlID0g
bnVsbCkKICAgICB7CiAgICAgICAgIHN1cGVyKG9yaWdpbik7CiAgICAgICAgIHRoaXMuX2xocyA9
IGxoczsKICAgICAgICAgdGhpcy5fcmhzID0gcmhzOworICAgICAgICB0aGlzLnR5cGUgPSB0eXBl
OwogICAgIH0KICAgICAKICAgICBnZXQgbGhzKCkgeyByZXR1cm4gdGhpcy5fbGhzOyB9CkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsQXNzaWdubWVudC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYWxsQXNzaWdubWVudC5qcwko
cmV2aXNpb24gMjIyMTYxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEFz
c2lnbm1lbnQuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIENh
bGxBc3NpZ25tZW50IGV4dGVuZHMgRXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2lu
LCBuYW1lLCBsaHMsIHJocykKLSAgICB7Ci0gICAgICAgIHN1cGVyKG9yaWdpbik7Ci0gICAgICAg
IHRoaXMuX25hbWUgPSBuYW1lOwotICAgICAgICB0aGlzLl9saHMgPSBsaHM7Ci0gICAgICAgIHRo
aXMuX3JocyA9IHJoczsKLSAgICAgICAgdGhpcy5mdW5jID0gbnVsbDsKLSAgICB9Ci0gICAgCi0g
ICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9Ci0gICAgZ2V0IGxocygpIHsgcmV0
dXJuIHRoaXMuX2xoczsgfQotICAgIGdldCByaHMoKSB7IHJldHVybiB0aGlzLl9yaHM7IH0gLy8g
VGhpcyBjYW4gYmUgbnVsbC4KLSAgICAKLSAgICB0b1N0cmluZygpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5saHMgKyAiICIgKyB0aGlzLm5hbWUgKyAodGhpcy5yaHMgPyAiPSAiICsgdGhp
cy5yaHMgOiAiIik7Ci0gICAgfQotfQotCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DYWxsRXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcwkocmV2aXNpb24gMjIyMTYxKQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDE1ICs0Miw4MiBAQCBjbGFzcyBDYWxsRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Np
b24gCiAgICAgZ2V0IGlzQ2FzdCgpIHsgcmV0dXJuIHRoaXMuX2lzQ2FzdDsgfQogICAgIGdldCBy
ZXR1cm5UeXBlKCkgeyByZXR1cm4gdGhpcy5fcmV0dXJuVHlwZTsgfQogICAgIAotICAgIHJlc29s
dmUob3ZlcmxvYWQpCisgICAgc3RhdGljIHJlc29sdmUob3JpZ2luLCBwb3NzaWJsZU92ZXJsb2Fk
cywgdHlwZVBhcmFtZXRlcnNJblNjb3BlLCBuYW1lLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudExp
c3QsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpCisgICAgeworICAgICAgICBsZXQgY2FsbCA9
IG5ldyBDYWxsRXhwcmVzc2lvbihvcmlnaW4sIG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50
TGlzdCk7CisgICAgICAgIGNhbGwuYXJndW1lbnRUeXBlcyA9IGFyZ3VtZW50VHlwZXM7CisgICAg
ICAgIGlmIChyZXR1cm5UeXBlKQorICAgICAgICAgICAgY2FsbC5zZXRDYXN0RGF0YShyZXR1cm5U
eXBlKTsKKyAgICAgICAgcmV0dXJuIHtjYWxsLCByZXN1bHRUeXBlOiBjYWxsLnJlc29sdmUocG9z
c2libGVPdmVybG9hZHMsIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSwgdHlwZUFyZ3VtZW50cyl9Owor
ICAgIH0KKyAgICAKKyAgICByZXNvbHZlKHBvc3NpYmxlT3ZlcmxvYWRzLCB0eXBlUGFyYW1ldGVy
c0luU2NvcGUsIHR5cGVBcmd1bWVudHMpCisgICAgeworICAgICAgICBpZiAoIXBvc3NpYmxlT3Zl
cmxvYWRzKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IodGhpcy5vcmlnaW4ub3Jp
Z2luU3RyaW5nLCAiRGlkIG5vdCBmaW5kIGFueSBmdW5jdGlvbnMgbmFtZWQgIiArIHRoaXMubmFt
ZSk7CisgICAgICAgIAorICAgICAgICBsZXQgb3ZlcmxvYWQgPSBudWxsOworICAgICAgICBsZXQg
ZmFpbHVyZXMgPSBbXTsKKyAgICAgICAgZm9yIChsZXQgdHlwZVBhcmFtZXRlciBvZiB0eXBlUGFy
YW1ldGVyc0luU2NvcGUpIHsKKyAgICAgICAgICAgIGlmICghKHR5cGVQYXJhbWV0ZXIgaW5zdGFu
Y2VvZiBUeXBlVmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKCF0eXBlUGFyYW1ldGVyLnByb3RvY29sKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgbGV0IHNpZ25hdHVyZXMgPQorICAgICAgICAgICAgICAgIHR5cGVQYXJh
bWV0ZXIucHJvdG9jb2wucHJvdG9jb2xEZWNsLnNpZ25hdHVyZXNCeU5hbWVXaXRoVHlwZVZhcmlh
YmxlKHRoaXMubmFtZSwgdHlwZVBhcmFtZXRlcik7CisgICAgICAgICAgICBpZiAoIXNpZ25hdHVy
ZXMpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBvdmVybG9hZCA9IHJl
c29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgdGhpcy50eXBlQXJndW1lbnRzLCB0aGlzLmFy
Z3VtZW50VHlwZXMsIHRoaXMucmV0dXJuVHlwZSk7CisgICAgICAgICAgICBpZiAob3ZlcmxvYWQu
ZnVuYykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZhaWx1cmVzLnB1c2go
Li4ub3ZlcmxvYWQuZmFpbHVyZXMpOworICAgICAgICAgICAgb3ZlcmxvYWQgPSBudWxsOworICAg
ICAgICB9CisgICAgICAgIGlmICghb3ZlcmxvYWQpIHsKKyAgICAgICAgICAgIG92ZXJsb2FkID0g
cmVzb2x2ZU92ZXJsb2FkSW1wbCgKKyAgICAgICAgICAgICAgICBwb3NzaWJsZU92ZXJsb2Fkcywg
dGhpcy50eXBlQXJndW1lbnRzLCB0aGlzLmFyZ3VtZW50VHlwZXMsIHRoaXMucmV0dXJuVHlwZSk7
CisgICAgICAgICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMpIHsKKyAgICAgICAgICAgICAgICBmYWls
dXJlcy5wdXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKKyAgICAgICAgICAgICAgICBsZXQgbWVz
c2FnZSA9ICJEaWQgbm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwgd2l0aCAiOworICAgICAgICAg
ICAgICAgIGlmICh0aGlzLnR5cGVBcmd1bWVudHMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlICs9ICJ0eXBlIGFyZ3VtZW50cyA8IiArIHRoaXMudHlwZUFyZ3VtZW50cyArICI+
IGFuZCAiOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gImFyZ3VtZW50IHR5cGVzICgiICsg
dGhpcy5hcmd1bWVudFR5cGVzICsgIikiOworICAgICAgICAgICAgICAgIGlmICh0aGlzLnJldHVy
blR5cGUpCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0iIGFuZCByZXR1cm4gdHlwZSAi
ICsgdGhpcy5yZXR1cm5UeXBlOworICAgICAgICAgICAgICAgIGlmIChmYWlsdXJlcy5sZW5ndGgp
CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIiwgYnV0IGNvbnNpZGVyZWQ6XG4iICsg
ZmFpbHVyZXMuam9pbigiXG4iKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9y
KHRoaXMub3JpZ2luLm9yaWdpblN0cmluZywgbWVzc2FnZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBsZXQgdHlwZUFyZ3VtZW50VHlwZSA9IHR5cGVBcmd1bWVudHNb
aV07CisgICAgICAgICAgICBsZXQgdHlwZVBhcmFtZXRlciA9IG92ZXJsb2FkLmZ1bmMudHlwZVBh
cmFtZXRlcnNbaV07CisgICAgICAgICAgICBpZiAoISh0eXBlUGFyYW1ldGVyIGluc3RhbmNlb2Yg
Q29uc3RleHByVHlwZVBhcmFtZXRlcikpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoIXR5cGVQYXJhbWV0ZXIudHlwZS5lcXVhbHNXaXRoQ29tbWl0KHR5cGVBcmd1
bWVudFR5cGUpKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQXQgIiArIHRoaXMu
b3JpZ2luLm9yaWdpblN0cmluZyArICIgY29uc3RleHByIHR5cGUgYXJndW1lbnQgYW5kIHBhcmFt
ZXRlciB0eXBlcyBub3QgZXF1YWw6IGFyZ3VtZW50ID0gIiArIHR5cGVBcmd1bWVudFR5cGUgKyAi
LCBwYXJhbWV0ZXIgPSAiICsgdHlwZVBhcmFtZXRlci50eXBlKTsKKyAgICAgICAgfQorICAgICAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXJndW1lbnRUeXBlcy5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgbGV0IGFyZ3VtZW50VHlwZSA9IHRoaXMuYXJndW1lbnRUeXBlc1tpXTsKKyAg
ICAgICAgICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gb3ZlcmxvYWQuZnVuYy5wYXJhbWV0ZXJzW2ld
LnR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCisgICAgICAgICAgICAgICAgb3ZlcmxvYWQu
ZnVuYy50eXBlUGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250ZXh0KTsKKyAgICAg
ICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVudFR5cGUuZXF1YWxzV2l0aENvbW1pdChwYXJhbWV0
ZXJUeXBlKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQXQgIiArIHRoaXMub3JpZ2luLm9yaWdpblN0cmluZyArICIgYXJndW1lbnQg
YW5kIHBhcmFtZXRlciB0eXBlcyBub3QgZXF1YWwgYWZ0ZXIgdHlwZSBhcmd1bWVudCBzdWJzdGl0
dXRpb246IGFyZ3VtZW50ID0gIiArIGFyZ3VtZW50VHlwZSArICIsIHBhcmFtZXRlciA9ICIgKyBw
YXJhbWV0ZXJUeXBlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVG9P
dmVybG9hZChvdmVybG9hZCk7CisgICAgfQorICAgIAorICAgIHJlc29sdmVUb092ZXJsb2FkKG92
ZXJsb2FkKQogICAgIHsKICAgICAgICAgdGhpcy5mdW5jID0gb3ZlcmxvYWQuZnVuYzsKICAgICAg
ICAgdGhpcy5hY3R1YWxUeXBlQXJndW1lbnRzID0gb3ZlcmxvYWQudHlwZUFyZ3VtZW50cy5tYXAo
dHlwZUFyZ3VtZW50ID0+IHR5cGVBcmd1bWVudCBpbnN0YW5jZW9mIFR5cGUgPyB0eXBlQXJndW1l
bnQudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpIDogdHlwZUFyZ3VtZW50KTsKICAgICAgICAgbGV0
IHJlc3VsdCA9IG92ZXJsb2FkLmZ1bmMucmV0dXJuVHlwZS5zdWJzdGl0dXRlVG9VbmlmaWNhdGlv
bigKICAgICAgICAgICAgIG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVu
aWZpY2F0aW9uQ29udGV4dCk7Ci0gICAgICAgIHRoaXMucmVzdWx0VHlwZSA9IHJlc3VsdC52aXNp
dChuZXcgQXV0b1dyYXBwZXIoKSk7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJOdWxsIHJldHVybiB0eXBlIik7CisgICAgICAgIHJlc3VsdCA9IHJl
c3VsdC52aXNpdChuZXcgQXV0b1dyYXBwZXIoKSk7CisgICAgICAgIHRoaXMucmVzdWx0VHlwZSA9
IHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHJldmlzaW9uIDIyMjE2MSkKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDM5ICszNCw0NyBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAg
CiAgICAgdmlzaXRQcm9ncmFtKG5vZGUpCiAgICAgewotICAgICAgICBmb3IgKGxldCBzdGF0ZW1l
bnQgb2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpIHsKKyAgICAgICAgbGV0IGRvU3RhdGVtZW50
ID0gc3RhdGVtZW50ID0+IHsKICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQgPSBz
dGF0ZW1lbnQ7CiAgICAgICAgICAgICBzdGF0ZW1lbnQudmlzaXQodGhpcyk7CiAgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGZvciAobGV0IHR5cGUgb2Ygbm9kZS50eXBlcy52YWx1ZXMoKSkK
KyAgICAgICAgICAgIGRvU3RhdGVtZW50KHR5cGUpOworICAgICAgICBmb3IgKGxldCBwcm90b2Nv
bCBvZiBub2RlLnByb3RvY29scy52YWx1ZXMoKSkKKyAgICAgICAgICAgIGRvU3RhdGVtZW50KHBy
b3RvY29sKTsKKyAgICAgICAgZm9yIChsZXQgZnVuY3Mgb2Ygbm9kZS5mdW5jdGlvbnMudmFsdWVz
KCkpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLnZpc2l0RnVuYyhmdW5jKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBmb3IgKGxldCBmdW5jcyBvZiBub2RlLmZ1bmN0aW9ucy52YWx1ZXMoKSkgeworICAgICAg
ICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jcykKKyAgICAgICAgICAgICAgICBkb1N0YXRlbWVu
dChmdW5jKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgdmlzaXRGdW5jRGVmKG5v
ZGUpCisgICAgeworICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgfQorICAgIAor
ICAgIHZpc2l0TmF0aXZlRnVuYyhub2RlKQorICAgIHsKICAgICB9CiAgICAgCiAgICAgdmlzaXRQ
cm90b2NvbERlY2wobm9kZSkKICAgICB7CiAgICAgICAgIGZvciAobGV0IHNpZ25hdHVyZSBvZiBu
b2RlLnNpZ25hdHVyZXMpIHsKLSAgICAgICAgICAgIGxldCBzZXQgPSBuZXcgU2V0KCk7Ci0gICAg
ICAgICAgICBmdW5jdGlvbiBjb25zaWRlcih0aGluZykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAodGhpbmcuaXNVbmlmaWFibGUpCi0gICAgICAgICAgICAgICAgICAgIHNldC5h
ZGQodGhpbmcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2xhc3MgTm90aWNlVHlwZVZh
cmlhYmxlIGV4dGVuZHMgVmlzaXRvciB7Ci0gICAgICAgICAgICAgICAgdmlzaXRUeXBlUmVmKG5v
ZGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb25zaWRlcihub2Rl
LnR5cGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2aXNpdFZhcmlhYmxl
UmVmKG5vZGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb25zaWRl
cihub2RlLnZhcmlhYmxlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBsZXQgbm90aWNlVHlwZVZhcmlhYmxlID0gbmV3IE5vdGljZVR5cGVWYXJpYWJsZSgp
OworICAgICAgICAgICAgbGV0IHR5cGVWYXJpYWJsZVRyYWNrZXIgPSBuZXcgVHlwZVZhcmlhYmxl
VHJhY2tlcigpOwogICAgICAgICAgICAgZm9yIChsZXQgcGFyYW1ldGVyVHlwZSBvZiBzaWduYXR1
cmUucGFyYW1ldGVyVHlwZXMpCi0gICAgICAgICAgICAgICAgcGFyYW1ldGVyVHlwZS52aXNpdChu
b3RpY2VUeXBlVmFyaWFibGUpOworICAgICAgICAgICAgICAgIHBhcmFtZXRlclR5cGUudmlzaXQo
dHlwZVZhcmlhYmxlVHJhY2tlcik7CisgICAgICAgICAgICBOb2RlLnZpc2l0KHNpZ25hdHVyZS5y
ZXR1cm5UeXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uLCB0eXBlVmFyaWFibGVUcmFja2VyKTsKICAg
ICAgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIgb2Ygc2lnbmF0dXJlLnR5cGVQYXJhbWV0
ZXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXQuaGFzKHR5cGVQYXJhbWV0ZXIpKQorICAg
ICAgICAgICAgICAgIGlmICghdHlwZVZhcmlhYmxlVHJhY2tlci5zZXQuaGFzKHR5cGVQYXJhbWV0
ZXIpKQogICAgICAgICAgICAgICAgICAgICB0aHJvdyBXVHlwZUVycm9yKHR5cGVQYXJhbWV0ZXIu
b3JpZ2luLm9yaWdpblN0cmluZywgIlR5cGUgcGFyYW1ldGVyIHRvIHByb3RvY29sIHNpZ25hdHVy
ZSBub3QgaW5mZXJyYWJsZSBmcm9tIHZhbHVlIHBhcmFtZXRlcnMiKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmICghc2V0Lmhhcyhub2RlLnR5cGVWYXJpYWJsZSkpCisgICAgICAgICAg
ICBpZiAoIXR5cGVWYXJpYWJsZVRyYWNrZXIuc2V0Lmhhcyhub2RlLnR5cGVWYXJpYWJsZSkpCiAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Ioc2lnbmF0dXJlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJQcm90b2NvbCdzIHR5cGUgdmFyaWFibGUgKCIgKyBub2RlLm5hbWUgKyAiKSBu
b3QgbWVudGlvbmVkIGluIHNpZ25hdHVyZTogIiArIHNpZ25hdHVyZSk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xNDEsNiArMTQ5LDMyIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsK
ICAgICAgICAgcmV0dXJuIGxoc1R5cGU7CiAgICAgfQogICAgIAorICAgIHZpc2l0SWRlbnRpdHlF
eHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZS50YXJnZXQudmlzaXQo
dGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihu
b2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLmxWYWx1ZS5pc0xWYWx1ZSkKKyAgICAgICAg
ICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkxIUyBv
ZiByZWFkLW1vZGlmeS13cml0ZSBpcyBub3QgYW4gTFZhbHVlOiAiICsgbm9kZS5sVmFsZSk7Cisg
ICAgICAgIGxldCBsaHNUeXBlID0gbm9kZS5sVmFsdWUudmlzaXQodGhpcyk7CisgICAgICAgIG5v
ZGUub2xkVmFsdWVWYXIudHlwZSA9IGxoc1R5cGU7CisgICAgICAgIG5vZGUubmV3VmFsdWVWYXIu
dHlwZSA9IGxoc1R5cGU7CisgICAgICAgIG5vZGUub2xkVmFsdWVWYXIudmlzaXQodGhpcyk7Cisg
ICAgICAgIG5vZGUubmV3VmFsdWVWYXIudmlzaXQodGhpcyk7CisgICAgICAgIGxldCBuZXdWYWx1
ZVR5cGUgPSBub2RlLm5ld1ZhbHVlRXhwLnZpc2l0KHRoaXMpOworICAgICAgICBpZiAoIWxoc1R5
cGUuZXF1YWxzV2l0aENvbW1pdChuZXdWYWx1ZVR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIG5l
dyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlR5cGUgbWlzbWF0Y2ggaW4g
cmVhZC1tb2RpZnktd3JpdGU6ICIgKyBsaHNUeXBlICsgIiB2ZXJzdXMgIiArIG5ld1ZhbHVlVHlw
ZSk7CisgICAgICAgIHJldHVybiBub2RlLnJlc3VsdEV4cC52aXNpdCh0aGlzKTsKKyAgICB9Cisg
ICAgCisgICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShub2RlKQorICAgIHsKKyAgICAgICAgaWYg
KCFub2RlLnR5cGUpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFub255bW91cyB2YXJp
YWJsZSBtdXN0IGtub3cgdHlwZSBiZWZvcmUgZmlyc3QgYXBwZWFyYW5jZSIpOworICAgIH0KKyAg
ICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAg
bGV0IHR5cGUgPSBub2RlLnB0ci52aXNpdCh0aGlzKS51bmlmeU5vZGU7CkBAIC0xNDgsNiArMTgy
LDggQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgdGhyb3cg
bmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVHlwZSBwYXNzZWQgdG8g
ZGVyZWZlcmVuY2UgaXMgbm90IGEgcG9pbnRlcjogIiArIHR5cGUpOwogICAgICAgICBub2RlLnR5
cGUgPSB0eXBlLmVsZW1lbnRUeXBlOwogICAgICAgICBub2RlLmFkZHJlc3NTcGFjZSA9IHR5cGUu
YWRkcmVzc1NwYWNlOworICAgICAgICBpZiAoIW5vZGUuYWRkcmVzc1NwYWNlKQorICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIGFkZHJlc3Mgc3BhY2UgaW4gdHlwZTogIiArIHR5cGUp
OwogICAgICAgICByZXR1cm4gbm9kZS50eXBlOwogICAgIH0KICAgICAKQEAgLTE2NSw3ICsyMDEs
NyBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgewogICAgICAgICBsZXQg
ZWxlbWVudFR5cGUgPSBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKS51bmlmeU5vZGU7CiAgICAgICAg
IGlmIChlbGVtZW50VHlwZSBpbnN0YW5jZW9mIFB0clR5cGUpIHsKLSAgICAgICAgICAgIG5vZGUu
YmVjb21lQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBub2Rl
LmJlY29tZShuZXcgQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBu
b2RlLmxWYWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheVJlZlR5cGUobm9kZS5v
cmlnaW4sIGVsZW1lbnRUeXBlLmFkZHJlc3NTcGFjZSwgZWxlbWVudFR5cGUuZWxlbWVudFR5cGUp
OwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTg5LDM1ICsyMjUsODcgQEAgY2xhc3MgQ2hlY2tl
ciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNob3VsZCBub3Qg
ZXhpc3QgeWV0LiIpOwogICAgIH0KICAgICAKLSAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkK
KyAgICBfZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2Vzcyhub2RlLCBiYXNlVHlwZSwgZXh0cmFB
cmdzLCBleHRyYUFyZ1R5cGVzKQogICAgIHsKLSAgICAgICAgbGV0IHN0cnVjdFR5cGUgPSBub2Rl
LnN0cnVjdC52aXNpdCh0aGlzKS51bmlmeU5vZGU7CisgICAgICAgIGJhc2VUeXBlID0gYmFzZVR5
cGUudmlzaXQobmV3IEF1dG9XcmFwcGVyKCkpCisgICAgICAgIG5vZGUuYmFzZVR5cGUgPSBiYXNl
VHlwZTsKICAgICAgICAgCi0gICAgICAgIG5vZGUuc3RydWN0VHlwZSA9IHN0cnVjdFR5cGUudmlz
aXQobmV3IEF1dG9XcmFwcGVyKCkpOwotICAgICAgICAKLSAgICAgICAgbGV0IHVuZGVybHlpbmdT
dHJ1Y3QgPSBzdHJ1Y3RUeXBlOwotICAgICAgICAKLSAgICAgICAgaWYgKHN0cnVjdFR5cGUgaW5z
dGFuY2VvZiBUeXBlUmVmKQotICAgICAgICAgICAgdW5kZXJseWluZ1N0cnVjdCA9IHVuZGVybHlp
bmdTdHJ1Y3QudHlwZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghKHVuZGVybHlpbmdTdHJ1Y3Qg
aW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9y
KG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk9wZXJhbmQgdG8gZG90IGV4cHJlc3Npb24gaXMg
bm90IGEgc3RydWN0IHR5cGU6ICIgKyBzdHJ1Y3RUeXBlKTsKKyAgICAgICAgLy8gU3VjaCBhIHR5
cGUgbXVzdCBleGlzdC4gVGhpcyBtYXkgdGhyb3cgaWYgaXQgZG9lc24ndC4KKyAgICAgICAgbGV0
IHR5cGVGb3JBbmQgPSBiYXNlVHlwZS5hcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZChub2RlLm9y
aWdpbik7CisgICAgICAgIGlmICghdHlwZUZvckFuZCkKKyAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQ2Fubm90IGdldCB0eXBlRm9yQW5kIik7CisgICAgICAgIAorICAgICAgICBsZXQgZXJy
b3JGb3JHZXQ7CisgICAgICAgIGxldCBlcnJvckZvckFuZDsKKyAgICAgICAgCisgICAgICAgIHRy
eSB7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gQ2FsbEV4cHJlc3Npb24ucmVzb2x2ZSgKKyAg
ICAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5wb3NzaWJsZUdldE92ZXJsb2FkcywgdGhp
cy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICBub2Rl
LmdldEZ1bmNOYW1lLCBbXSwgW25vZGUuYmFzZSwgLi4uZXh0cmFBcmdzXSwgW2Jhc2VUeXBlLCAu
Li5leHRyYUFyZ1R5cGVzXSwgbnVsbCk7CisgICAgICAgICAgICBub2RlLmNhbGxGb3JHZXQgPSBy
ZXN1bHQuY2FsbDsKKyAgICAgICAgICAgIG5vZGUucmVzdWx0VHlwZUZvckdldCA9IHJlc3VsdC5y
ZXN1bHRUeXBlOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoIShlIGlu
c3RhbmNlb2YgV1R5cGVFcnJvcikpCisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAg
ICAgIGVycm9yRm9yR2V0ID0gZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKHN0
cnVjdFR5cGUgaW5zdGFuY2VvZiBUeXBlUmVmKSAKLSAgICAgICAgICAgIHVuZGVybHlpbmdTdHJ1
Y3QgPSB1bmRlcmx5aW5nU3RydWN0Lmluc3RhbnRpYXRlKHN0cnVjdFR5cGUudHlwZUFyZ3VtZW50
cywgInNoYWxsb3ciKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCBiYXNlRm9yQW5k
ID0gYmFzZVR5cGUuYXJndW1lbnRGb3JBbmRPdmVybG9hZChub2RlLm9yaWdpbiwgbm9kZS5iYXNl
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGV0IHJlc3VsdCA9IENhbGxFeHByZXNzaW9u
LnJlc29sdmUoCisgICAgICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUucG9zc2libGVBbmRP
dmVybG9hZHMsIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQudHlwZVBhcmFtZXRlcnMsCisgICAgICAg
ICAgICAgICAgbm9kZS5hbmRGdW5jTmFtZSwgW10sIFtiYXNlRm9yQW5kLCAuLi5leHRyYUFyZ3Nd
LCBbdHlwZUZvckFuZCwgLi4uZXh0cmFBcmdUeXBlc10sCisgICAgICAgICAgICAgICAgbnVsbCk7
CisgICAgICAgICAgICBub2RlLmNhbGxGb3JBbmQgPSByZXN1bHQuY2FsbDsKKyAgICAgICAgICAg
IG5vZGUucmVzdWx0VHlwZUZvckFuZCA9IHJlc3VsdC5yZXN1bHRUeXBlLnVuaWZ5Tm9kZS5yZXR1
cm5UeXBlRnJvbUFuZE92ZXJsb2FkKG5vZGUub3JpZ2luKTsKKyAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpKQorICAgICAgICAg
ICAgICAgIHRocm93IGU7CisgICAgICAgICAgICBlcnJvckZvckFuZCA9IGU7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmICghbm9kZS5yZXN1bHRUeXBlRm9yR2V0ICYmICFub2RlLnJl
c3VsdFR5cGVGb3JBbmQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKAorICAg
ICAgICAgICAgICAgIG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywKKyAgICAgICAgICAgICAgICAi
Q2Fubm90IHJlc29sdmUgYWNjZXNzOyB0cmllZCBieS12YWx1ZTpcbiIgKworICAgICAgICAgICAg
ICAgIGVycm9yRm9yR2V0Lm1lc3NhZ2UgKyAiXG4iICsKKyAgICAgICAgICAgICAgICAiYW5kIHRy
aWVkIGJ5LXBvaW50ZXI6XG4iICsKKyAgICAgICAgICAgICAgICBlcnJvckZvckFuZC5tZXNzYWdl
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUucmVzdWx0VHlwZUZvckdl
dCAmJiBub2RlLnJlc3VsdFR5cGVGb3JBbmQKKyAgICAgICAgICAgICYmICFub2RlLnJlc3VsdFR5
cGVGb3JHZXQuZXF1YWxzKG5vZGUucmVzdWx0VHlwZUZvckFuZCkpCisgICAgICAgICAgICB0aHJv
dyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJSZXN1bHQgdHlwZSBy
ZXNvbHZlZCBieS12YWx1ZSAoIiArIG5vZGUucmVzdWx0VHlwZUZvckdldCArICIpIGRvZXMgbm90
IG1hdGNoIHJlc3VsdCB0eXBlIHJlc29sdmVkIGJ5LXBvaW50ZXIgKCIgKyBub2RlLnJlc3VsdFR5
cGVGb3JBbmQgKyAiKSIpOworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxl
dCByZXN1bHQgPSBDYWxsRXhwcmVzc2lvbi5yZXNvbHZlKAorICAgICAgICAgICAgICAgIG5vZGUu
b3JpZ2luLCBub2RlLnBvc3NpYmxlU2V0T3ZlcmxvYWRzLCB0aGlzLl9jdXJyZW50U3RhdGVtZW50
LnR5cGVQYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgIG5vZGUuc2V0RnVuY05hbWUsIFtdLCBb
bm9kZS5iYXNlLCAuLi5leHRyYUFyZ3MsIG51bGxdLCBbYmFzZVR5cGUsIC4uLmV4dHJhQXJnVHlw
ZXMsIG5vZGUucmVzdWx0VHlwZV0sIG51bGwpOworICAgICAgICAgICAgbm9kZS5jYWxsRm9yU2V0
ID0gcmVzdWx0LmNhbGw7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5yZXN1bHRUeXBlLmVxdWFs
cyhiYXNlVHlwZSkpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5v
cmlnaW4ub3JpZ2luU3RyaW5nLCAiUmVzdWx0IHR5cGUgb2Ygc2V0dGVyICIgKyByZXN1bHQuY2Fs
bC5mdW5jICsgIiBpcyBub3QgdGhlIGJhc2UgdHlwZSAiICsgYmFzZVR5cGUpOworICAgICAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgV1R5cGVFcnJvcikp
CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIG5vZGUuZXJyb3JGb3JTZXQg
PSBlOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBsZXQgZmllbGQgPSB1bmRlcmx5aW5n
U3RydWN0LmZpZWxkQnlOYW1lKG5vZGUuZmllbGROYW1lKTsKLSAgICAgICAgaWYgKCFmaWVsZCkK
LSAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmlu
ZywgIkZpZWxkICIgKyBub2RlLmZpZWxkTmFtZSArICIgbm90IGZvdW5kIGluICIgKyBzdHJ1Y3RU
eXBlKTsKLSAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGU7CisgICAgICAgIHJldHVybiBub2RlLnJl
c3VsdFR5cGU7CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAg
IHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQogICAgIHsKLSAgICAgICAgbm9kZS50eXBlID0gbm9k
ZS5hcmd1bWVudC52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKCFub2RlLnR5cGUpCi0gICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIkRpZCBub3QgZ2V0IHR5cGUgZm9yIG5vZGU6ICIgKyBub2Rl
LmFyZ3VtZW50KTsKLSAgICAgICAgcmV0dXJuIG5vZGUuYm9keS52aXNpdCh0aGlzKTsKKyAgICAg
ICAgbGV0IHN0cnVjdFR5cGUgPSBub2RlLnN0cnVjdC52aXNpdCh0aGlzKS51bmlmeU5vZGU7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9maW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKG5vZGUsIHN0
cnVjdFR5cGUsIFtdLCBbXSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SW5kZXhFeHByZXNzaW9u
KG5vZGUpCisgICAgeworICAgICAgICBsZXQgYXJyYXlUeXBlID0gbm9kZS5hcnJheS52aXNpdCh0
aGlzKS51bmlmeU5vZGU7CisgICAgICAgIGxldCBpbmRleFR5cGUgPSBub2RlLmluZGV4LnZpc2l0
KHRoaXMpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmlzaFZpc2l0aW5nUHJv
cGVydHlBY2Nlc3Mobm9kZSwgYXJyYXlUeXBlLCBbbm9kZS5pbmRleF0sIFtpbmRleFR5cGVdKTsK
ICAgICB9CiAgICAgCiAgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQpAQCAtMzE3LDEwICs0MDUs
MTAgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgcmVzdWx0
ID0gZXhwcmVzc2lvbi52aXNpdCh0aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
Ci0KKyAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAgewotICAgICAgICBs
ZXQgdHlwZUFyZ3VtZW50VHlwZXMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVu
dCA9PiB0eXBlQXJndW1lbnQudmlzaXQodGhpcykpOworICAgICAgICBsZXQgdHlwZUFyZ3VtZW50
cyA9IG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3VtZW50ID0+IHR5cGVBcmd1bWVudC52
aXNpdCh0aGlzKSk7CiAgICAgICAgIGxldCBhcmd1bWVudFR5cGVzID0gbm9kZS5hcmd1bWVudExp
c3QubWFwKGFyZ3VtZW50ID0+IHsKICAgICAgICAgICAgIGxldCBuZXdBcmd1bWVudCA9IGFyZ3Vt
ZW50LnZpc2l0KHRoaXMpOwogICAgICAgICAgICAgaWYgKCFuZXdBcmd1bWVudCkKQEAgLTMyOCw3
NyArNDE2LDEyIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAg
IHJldHVybiBuZXdBcmd1bWVudC52aXNpdChuZXcgQXV0b1dyYXBwZXIoKSk7CiAgICAgICAgIH0p
OwogICAgICAgICAKLSAgICAgICAgLy8gSGVyZSB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZXMg
d2hlcmUgb3BlcmF0b3ImW10gaXMgY2FsbGVkIHdpdGggYSB0eXBlIHRoYXQgaXNuJ3Qgc3VmZmlj
aWVudGx5Ci0gICAgICAgIC8vIHJlZmVyZW5jZXkuCi0gICAgICAgIGlmIChub2RlLm5hbWUgPT0g
Im9wZXJhdG9yJltdIikgewotICAgICAgICAgICAgbGV0IGFyZ1R5cGUgPSBhcmd1bWVudFR5cGVz
WzBdLnVuaWZ5Tm9kZTsKLSAgICAgICAgICAgIGlmIChhcmdUeXBlIGluc3RhbmNlb2YgUHRyVHlw
ZSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJQb2ludGVyIHN1YnNjcmlwdCBpcyBub3QgdmFsaWQiKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGFyZ1R5cGUgaW5zdGFuY2VvZiBBcnJheVR5cGUpIHsKLSAgICAg
ICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdFswXSA9IG5ldyBNYWtlQXJyYXlSZWZFeHByZXNz
aW9uKG5vZGUub3JpZ2luLCBub2RlLmFyZ3VtZW50TGlzdFswXSk7Ci0gICAgICAgICAgICAgICAg
bm9kZS5hcmd1bWVudExpc3RbMF0ubnVtRWxlbWVudHMgPSBhcmdUeXBlLm51bUVsZW1lbnRzOwot
ICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlwZXNbMF0gPSBuZXcgQXJyYXlSZWZUeXBlKG5vZGUu
b3JpZ2luLCAidGhyZWFkIiwgYXJnVHlwZS5lbGVtZW50VHlwZSk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKCEoYXJnVHlwZSBpbnN0YW5jZW9mIEFycmF5UmVmVHlwZSkpIHsKLSAgICAgICAgICAg
ICAgICBub2RlLmFyZ3VtZW50TGlzdFswXSA9IG5ldyBNYWtlUHRyRXhwcmVzc2lvbihub2RlLm9y
aWdpbiwgbm9kZS5hcmd1bWVudExpc3RbMF0pOwotICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlw
ZXNbMF0gPSBuZXcgUHRyVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ3VtZW50VHlwZXNb
MF0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBub2RlLmFy
Z3VtZW50VHlwZXMgPSBhcmd1bWVudFR5cGVzOwogICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBl
KQogICAgICAgICAgICAgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpOwotICAgICAgICAKLSAg
ICAgICAgbGV0IG92ZXJsb2FkID0gbnVsbDsKLSAgICAgICAgbGV0IGZhaWx1cmVzID0gW107Ci0g
ICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIgb2YgdGhpcy5fY3VycmVudFN0YXRlbWVudC50
eXBlUGFyYW1ldGVycykgewotICAgICAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRlciBpbnN0YW5j
ZW9mIFR5cGVWYXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBpZiAoIXR5cGVQYXJhbWV0ZXIucHJvdG9jb2wpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBsZXQgc2lnbmF0dXJlcyA9Ci0gICAgICAgICAgICAgICAgdHlwZVBhcmFt
ZXRlci5wcm90b2NvbC5wcm90b2NvbERlY2wuc2lnbmF0dXJlc0J5TmFtZVdpdGhUeXBlVmFyaWFi
bGUobm9kZS5uYW1lLCB0eXBlUGFyYW1ldGVyKTsKLSAgICAgICAgICAgIGlmICghc2lnbmF0dXJl
cykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG92ZXJsb2FkID0gcmVz
b2x2ZU92ZXJsb2FkSW1wbChzaWduYXR1cmVzLCBub2RlLnR5cGVBcmd1bWVudHMsIGFyZ3VtZW50
VHlwZXMsIG5vZGUucmV0dXJuVHlwZSk7Ci0gICAgICAgICAgICBpZiAob3ZlcmxvYWQuZnVuYykK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZhaWx1cmVzLnB1c2goLi4ub3Zl
cmxvYWQuZmFpbHVyZXMpOwotICAgICAgICAgICAgb3ZlcmxvYWQgPSBudWxsOwotICAgICAgICB9
Ci0gICAgICAgIGlmICghb3ZlcmxvYWQpIHsKLSAgICAgICAgICAgIG92ZXJsb2FkID0gcmVzb2x2
ZU92ZXJsb2FkSW1wbCgKLSAgICAgICAgICAgICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzLCBu
b2RlLnR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIG5vZGUucmV0dXJuVHlwZSk7Ci0gICAg
ICAgICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMpIHsKLSAgICAgICAgICAgICAgICBmYWlsdXJlcy5w
dXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKLSAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9
ICJEaWQgbm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwgd2l0aCAiOwotICAgICAgICAgICAgICAg
IGlmIChub2RlLnR5cGVBcmd1bWVudHMubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlICs9ICJ0eXBlIGFyZ3VtZW50cyA8IiArIG5vZGUudHlwZUFyZ3VtZW50cyArICI+IGFuZCAi
OwotICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gImFyZ3VtZW50IHR5cGVzICgiICsgYXJndW1l
bnRUeXBlcyArICIpIjsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQotICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IiBhbmQgcmV0dXJuIHR5cGUgIiArIG5vZGUucmV0
dXJuVHlwZTsKLSAgICAgICAgICAgICAgICBpZiAoZmFpbHVyZXMubGVuZ3RoKQotICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlICs9ICIsIGJ1dCBjb25zaWRlcmVkOlxuIiArIGZhaWx1cmVzLmpv
aW4oIlxuIikKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsIG1lc3NhZ2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50VHlwZXMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIGxldCB0eXBlQXJndW1lbnRUeXBlID0gdHlwZUFyZ3VtZW50VHlwZXNbaV07
Ci0gICAgICAgICAgICBsZXQgdHlwZVBhcmFtZXRlciA9IG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFt
ZXRlcnNbaV07Ci0gICAgICAgICAgICBpZiAoISh0eXBlUGFyYW1ldGVyIGluc3RhbmNlb2YgQ29u
c3RleHByVHlwZVBhcmFtZXRlcikpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBpZiAoIXR5cGVQYXJhbWV0ZXIudHlwZS5lcXVhbHNXaXRoQ29tbWl0KHR5cGVBcmd1bWVu
dFR5cGUpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQXQgIiArIG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZyArICIgY29uc3RleHByIHR5cGUgYXJndW1lbnQgYW5kIHBhcmFtZXRl
ciB0eXBlcyBub3QgZXF1YWw6IGFyZ3VtZW50ID0gIiArIHR5cGVBcmd1bWVudFR5cGUgKyAiLCBw
YXJhbWV0ZXIgPSAiICsgdHlwZVBhcmFtZXRlci50eXBlKTsKLSAgICAgICAgfQotICAgICAgICBm
b3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50VHlwZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIGxldCBhcmd1bWVudFR5cGUgPSBhcmd1bWVudFR5cGVzW2ldOwotICAgICAgICAgICAgbGV0
IHBhcmFtZXRlclR5cGUgPSBvdmVybG9hZC5mdW5jLnBhcmFtZXRlcnNbaV0udHlwZS5zdWJzdGl0
dXRlVG9VbmlmaWNhdGlvbigKLSAgICAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQYXJh
bWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwotICAgICAgICAgICAgbGV0IHJl
c3VsdCA9IGFyZ3VtZW50VHlwZS5lcXVhbHNXaXRoQ29tbWl0KHBhcmFtZXRlclR5cGUpOwotICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJB
dCAiICsgbm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIiBhcmd1bWVudCBhbmQgcGFyYW1ldGVy
IHR5cGVzIG5vdCBlcXVhbCBhZnRlciB0eXBlIGFyZ3VtZW50IHN1YnN0aXR1dGlvbjogYXJndW1l
bnQgPSAiICsgYXJndW1lbnRUeXBlICsgIiwgcGFyYW1ldGVyID0gIiArIHBhcmFtZXRlclR5cGUp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBub2RlLnJlc29sdmUob3ZlcmxvYWQpOworCisg
ICAgICAgIGxldCByZXN1bHQgPSBub2RlLnJlc29sdmUobm9kZS5wb3NzaWJsZU92ZXJsb2Fkcywg
dGhpcy5fY3VycmVudFN0YXRlbWVudC50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Db21tYUV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29tbWFFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAyMjIxNjEp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Db21tYUV4cHJlc3Npb24uanMJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDkgQEAgY2xhc3MgQ29tbWFFeHByZXNzaW9uIGV4dGVu
ZHMgRXhwcmVzc2lvbgogICAgIAogICAgIGdldCBsaXN0KCkgeyByZXR1cm4gdGhpcy5fbGlzdDsg
fQogICAgIAorICAgIC8vIE5PVEU6IEl0J3Mgc3VwZXIgdGVtcHRpbmcgdG8gc2F5IHRoYXQgQ29t
bWFFeHByZXNzaW9uIGlzIGFuIGxWYWx1ZSBpZiBpdHMgbGFzdCBlbnRyeSBpcyBhbiBsVmFsdWUu
IEJ1dCwKKyAgICAvLyBQcm9wZXJ0eVJlc29sdmVyIHJlbGllcyBvbiB0aGlzIG5vdCBiZWluZyB0
aGUgY2FzZS4KKyAgICAKICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gIigi
ICsgdGhpcy5saXN0LnRvU3RyaW5nKCkgKyAiKSI7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9EZXJlZmVyZW5jZUV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzCShyZXZpc2lv
biAyMjIxNjEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9EZXJlZmVyZW5jZUV4
cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMiBAQAogInVzZSBzdHJp
Y3QiOwogCiBjbGFzcyBEZXJlZmVyZW5jZUV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsK
LSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIHB0cikKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIHB0
ciwgdHlwZSA9IG51bGwsIGFkZHJlc3NTcGFjZSA9IG51bGwpCiAgICAgewogICAgICAgICBzdXBl
cihvcmlnaW4pOwogICAgICAgICB0aGlzLl9wdHIgPSBwdHI7CisgICAgICAgIHRoaXMudHlwZSA9
IHR5cGU7CisgICAgICAgIHRoaXMuYWRkcmVzc1NwYWNlID0gYWRkcmVzc1NwYWNlOwogICAgIH0K
ICAgICAKICAgICBnZXQgcHRyKCkgeyByZXR1cm4gdGhpcy5fcHRyOyB9CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RvdEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIy
MjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RvdEV4cHJlc3Npb24uanMJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDE5ICsyNCwyMiBAQAogICovCiAidXNlIHN0cmljdCI7CiAK
LWNsYXNzIERvdEV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKK2NsYXNzIERvdEV4cHJl
c3Npb24gZXh0ZW5kcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24gewogICAgIGNvbnN0cnVjdG9y
KG9yaWdpbiwgc3RydWN0LCBmaWVsZE5hbWUpCiAgICAgewotICAgICAgICBzdXBlcihvcmlnaW4p
OwotICAgICAgICB0aGlzLl9zdHJ1Y3QgPSBzdHJ1Y3Q7CisgICAgICAgIHN1cGVyKG9yaWdpbiwg
c3RydWN0KTsKICAgICAgICAgdGhpcy5fZmllbGROYW1lID0gZmllbGROYW1lOwogICAgIH0KICAg
ICAKLSAgICBnZXQgc3RydWN0KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0OyB9CisgICAgZ2V0IHN0
cnVjdCgpIHsgcmV0dXJuIHRoaXMuYmFzZTsgfQogICAgIGdldCBmaWVsZE5hbWUoKSB7IHJldHVy
biB0aGlzLl9maWVsZE5hbWU7IH0KICAgICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0aGlzLnN0
cnVjdC5pc0xWYWx1ZTsgfQogICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiB0aGlzLnN0
cnVjdC5hZGRyZXNzU3BhY2U7IH0KICAgICAKKyAgICBnZXQgZ2V0RnVuY05hbWUoKSB7IHJldHVy
biAib3BlcmF0b3IuIiArIHRoaXMuZmllbGROYW1lOyB9CisgICAgZ2V0IGFuZEZ1bmNOYW1lKCkg
eyByZXR1cm4gIm9wZXJhdG9yJi4iICsgdGhpcy5maWVsZE5hbWU7IH0KKyAgICBnZXQgc2V0RnVu
Y05hbWUoKSB7IHJldHVybiAib3BlcmF0b3IuIiArIHRoaXMuZmllbGROYW1lICsgIj0iOyB9Cisg
ICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuICIoIiArIHRoaXMuc3Ry
dWN0ICsgIi4iICsgdGhpcy5maWVsZE5hbWUgKyAiKSI7CkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9FQnVmZmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0VCdWZmZXIuanMJKHJldmlzaW9uIDIyMjE2MSkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEyICs2
MCwxNCBAQCBjbGFzcyBFQnVmZmVyIHsKICAgICBnZXQoaW5kZXgpCiAgICAgewogICAgICAgICBp
ZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuX2FycmF5Lmxlbmd0aCkKLSAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigib3V0IG9mIGJvdW5kcyBidWZmZXIgYWNjZXNzIik7CisgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIk91dCBvZiBib3VuZHMgYnVmZmVyIGFjY2VzcyAoYnVmZmVy
ID0gIiArIHRoaXMgKyAiLCBpbmRleCA9ICIgKyBpbmRleCArICIpIik7CiAgICAgICAgIHJldHVy
biB0aGlzLl9hcnJheVtpbmRleF07CiAgICAgfQogICAgIAogICAgIHNldChpbmRleCwgdmFsdWUp
CiAgICAgeworICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuX2FycmF5Lmxl
bmd0aCkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigib3V0IG9mIGJvdW5kcyBidWZmZXIg
YWNjZXNzIChidWZmZXIgPSAiICsgdGhpcyArICIsIGluZGV4ID0gIiArIGluZGV4ICsgIikiKTsK
ICAgICAgICAgdGhpcy5fYXJyYXlbaW5kZXhdID0gdmFsdWU7CiAgICAgfQogICAgIApJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlckJ1aWxkZXIuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRUJ1ZmZlckJ1aWxkZXIuanMJKHJl
dmlzaW9uIDIyMjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJC
dWlsZGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTEgKzExMCw5IEBAIGNsYXNzIEVCdWZm
ZXJCdWlsZGVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHN1cGVyLnZpc2l0TG9naWNhbEV4
cHJlc3Npb24obm9kZSk7CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2Rl
KQorICAgIHZpc2l0QW5vbnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7CiAgICAgICAgIHRoaXMu
X2NyZWF0ZUVQdHJGb3JOb2RlKG5vZGUpOwotICAgICAgICBub2RlLmFyZ3VtZW50LnZpc2l0KHRo
aXMpOwotICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAogICAgIHZp
c2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNpb24gMjIyMTYxKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
NiArMTAyLDExIEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBy
ZXR1cm4gdGFyZ2V0OwogICAgIH0KICAgICAKKyAgICB2aXNpdElkZW50aXR5RXhwcmVzc2lvbihu
b2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpOworICAg
IH0KKyAgICAKICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAg
ICAgICAgbGV0IHB0ciA9IG5vZGUucHRyLnZpc2l0KHRoaXMpLmxvYWRWYWx1ZSgpOwpAQCAtMTEy
LDcgKzExNyw4IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgIAogICAg
IHZpc2l0TWFrZVB0ckV4cHJlc3Npb24obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBub2Rl
LmVQdHIuYm94KG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpKTsKKyAgICAgICAgbGV0IHB0ciA9IG5v
ZGUubFZhbHVlLnZpc2l0KHRoaXMpOworICAgICAgICByZXR1cm4gbm9kZS5lUHRyLmJveChwdHIp
OwogICAgIH0KICAgICAKICAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKQEAg
LTEyNSwxMiArMTMxLDYgQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7CiAgICAg
ICAgIHJldHVybiBub2RlLmVQdHIuYm94KG5ldyBFQXJyYXlSZWYobm9kZS5sVmFsdWUudmlzaXQo
dGhpcykubG9hZFZhbHVlKCksIDEpKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXREb3RFeHByZXNz
aW9uKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgc3RydWN0UHRyID0gbm9kZS5zdHJ1Y3Qudmlz
aXQodGhpcyk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3RQdHIucGx1cyhub2RlLmZpZWxkLm9mZnNl
dCk7Ci0gICAgfQotICAgIAogICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCiAgICAgewog
ICAgICAgICBsZXQgcmVzdWx0OwpAQCAtMjQ5LDEwICsyNDksOSBAQCBjbGFzcyBFdmFsdWF0b3Ig
ZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgdGhyb3cgQ29udGludWVFeGNlcHRpb247CiAgICAg
fQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0QW5vbnltb3Vz
VmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAgICAgIG5vZGUuZVB0ci5jb3B5RnJvbShub2RlLmFy
Z3VtZW50LnZpc2l0KHRoaXMpLCBub2RlLnR5cGUuc2l6ZSk7Ci0gICAgICAgIHJldHVybiBub2Rl
LmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUudHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1
ZShub2RlLmVQdHIuYnVmZmVyLCBub2RlLmVQdHIub2Zmc2V0KTsKICAgICB9CiAgICAgCiAgICAg
dmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQpAQCAtMjY1LDYgKzI2NCw4IEBAIGNsYXNzIEV2YWx1
YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgaWYgKCF0eXBlIHx8ICFhcmd1bWVu
dCkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgdHlwZSBvciBh
cmd1bWVudDsgaSA9ICIgKyBpICsgIiwgYXJndW1lbnQgPSAiICsgYXJndW1lbnQgKyAiLCB0eXBl
ID0gIiArIHR5cGUgKyAiOyBpbiAiICsgbm9kZSk7CiAgICAgICAgICAgICBsZXQgYXJndW1lbnRW
YWx1ZSA9IGFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAgICAgICAgICAgaWYgKCFhcmd1bWVudFZh
bHVlKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhcmd1bWVudCB2YWx1
ZSwgaSA9ICIgKyBpICsgIiwgbm9kZSA9ICIgKyBub2RlKTsKICAgICAgICAgICAgIGNhbGxBcmd1
bWVudHMucHVzaCgoKSA9PiB0aGlzLl9zbmFwc2hvdCh0eXBlLCBudWxsLCBhcmd1bWVudFZhbHVl
KSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJKHJldmlzaW9uIDIyMjE2MSkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDYgKzU2LDE2IEBAIGNsYXNzIEV4cHJlc3Npb25GaW5kZXIgZXh0ZW5kcyBW
aXNpdG9yIHsKICAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CiAgICAgfQogICAgIAorICAg
IHZpc2l0UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhp
cy5fY2FsbGJhY2sobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0SWRlbnRpdHlFeHByZXNz
aW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9jYWxsYmFjayhub2RlKTsKKyAgICB9Cisg
ICAgCiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgdGhpcy5f
Y2FsbGJhY2sobm9kZSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GaW5k
SGlnaFpvbWJpZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRmluZEhpZ2hab21iaWVzLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0ZpbmRIaWdoWm9tYmllcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNl
IHN0cmljdCI7CisKK2Z1bmN0aW9uIGZpbmRIaWdoWm9tYmllcyhwcm9ncmFtKQoreworICAgIHBy
b2dyYW0udmlzaXQobmV3IEhpZ2hab21iaWVGaW5kZXIoKSk7Cit9CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9Gb3JMb29wLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHJldmlzaW9uIDIyMjE2MSkKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zvckxvb3AuanMJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDcgKzQzLDcgQEAgY2xhc3MgRm9yTG9vcCBleHRlbmRzIE5vZGUgewogCiAgICAgdG9TdHJpbmco
KQogICAgIHsKLSAgICAgICAgcmV0dXJuICJmb3IgKCIgKyAodGhpcy5pbml0aWFsaXphdGlvbiA/
IHRoaXMuaW5pdGlhbGl6YXRpb24gOiAiICIpICsgIjsgIiArICh0aGlzLmNvbmRpdGlvbiA/IHRo
aXMuY29uZGl0aW9uIDogIiIpICsgIjsgIiArICh0aGlzLmluY3JlbWVudCA/IHRoaXMuaW5jcmVt
ZW50IDogIiIpICsgIikgIiArIGJvZHk7CisgICAgICAgIHJldHVybiAiZm9yICgiICsgKHRoaXMu
aW5pdGlhbGl6YXRpb24gPyB0aGlzLmluaXRpYWxpemF0aW9uIDogIiAiKSArICI7ICIgKyAodGhp
cy5jb25kaXRpb24gPyB0aGlzLmNvbmRpdGlvbiA6ICIiKSArICI7ICIgKyAodGhpcy5pbmNyZW1l
bnQgPyB0aGlzLmluY3JlbWVudCA6ICIiKSArICIpICIgKyB0aGlzLmJvZHk7CiAgICAgfQogfTsK
IApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCShyZXZpc2lvbiAyMjIx
NjEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSwxMiBAQCBjbGFzcyBGdW5jIGV4dGVuZHMgTm9kZSB7CiAgICAgewog
ICAgICAgICBpZiAoIShvcmlnaW4gaW5zdGFuY2VvZiBMZXhlclRva2VuKSkKICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIG9yaWdpbjogIiArIG9yaWdpbik7CisgICAgICAgIGZvciAo
bGV0IHBhcmFtZXRlciBvZiBwYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICBpZiAoIXBhcmFtZXRl
cikKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcGFyYW1ldGVyIik7Cisg
ICAgICAgICAgICBpZiAoIXBhcmFtZXRlci50eXBlKQorICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiTnVsbCBwYXJhbWV0ZXIgdHlwZSIpOworICAgICAgICB9CiAgICAgICAgIHN1cGVy
KCk7CiAgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKICAgICAgICAgdGhpcy5fbmFtZSA9
IG5hbWU7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlh
dG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJ
bnN0YW50aWF0b3IuanMJKHJldmlzaW9uIDIyMjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5
LDE0IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAgIGdldFVuaXF1ZShmdW5jLCB0eXBl
QXJndW1lbnRzKQogICAgIHsKICAgICAgICAgY2xhc3MgRmluZFR5cGVWYXJpYWJsZSBleHRlbmRz
IFZpc2l0b3IgeworICAgICAgICAgICAgdmlzaXRUeXBlUmVmKG5vZGUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZm9yIChsZXQgdHlwZUFyZ3VtZW50IG9mIG5vZGUudHlwZUFyZ3Vt
ZW50cykKKyAgICAgICAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICB2aXNpdFR5cGVWYXJpYWJsZShu
b2RlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHR5cGUg
dmFyaWFibGU6ICIgKyBub2RlKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVu
ZXhwZWN0ZWQgdHlwZSB2YXJpYWJsZTogIiArIG5vZGUgKyAiIHdoZW4gaW5zdGFudGlhdGluZyAi
ICsgZnVuYyArICIgd2l0aCBhcmd1bWVudHMgIiArIHR5cGVBcmd1bWVudHMpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAobGV0IHR5cGVBcmd1bWVudCBvZiB0eXBlQXJn
dW1lbnRzKQpAQCAtNzUsMzMgKzgxLDM4IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAg
ICAgICAgICAgICAgICAgICBsZXQgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHJlc3Vs
dC5wb3NzaWJsZU92ZXJsb2FkcywgcmVzdWx0LnR5cGVBcmd1bWVudHMsIHJlc3VsdC5hcmd1bWVu
dFR5cGVzLCByZXN1bHQucmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbik7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykKICAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHJlc29sdmUgcHJvdG9jb2wgc2lnbmF0dXJlIGZ1
bmN0aW9uIGNhbGwgZHVyaW5nIGluc3RhbnRpYXRpb246ICIgKyByZXN1bHQuZnVuYyArIChvdmVy
bG9hZC5mYWlsdXJlcy5sZW5ndGggPyAiOyB0cmllZDpcbiIgKyBvdmVybG9hZC5mYWlsdXJlcy5q
b2luKCJcbiIpIDogIiIpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmUob3Zl
cmxvYWQpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzb2x2ZVRvT3ZlcmxvYWQob3Zl
cmxvYWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0LmZ1bmMuaXNOYXRpdmUpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5uYXRpdmVGdW5jSW5zdGFuY2UgPSB0aGlzSW5zdGFudGlhdG9yLmdldFVuaXF1ZShyZXN1bHQu
ZnVuYywgcmVzdWx0LmFjdHVhbFR5cGVBcmd1bWVudHMpOworICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBuZXcgSW5zdGFudGlhdGlvblN1YnN0
aXR1dGlvbihmdW5jLnR5cGVQYXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKTsKKyAgICAgICAgbGV0
IGluc3RhbnRpYXRlSW1tZWRpYXRlcyA9IG5ldyBJbnN0YW50aWF0ZUltbWVkaWF0ZXMoKTsKICAg
ICAgICAgCi0gICAgICAgIGNsYXNzIEluc3RhbnRpYXRlIGV4dGVuZHMgVmlzaXRvckJhc2Ugewor
ICAgICAgICBjbGFzcyBJbnN0YW50aWF0ZSB7CiAgICAgICAgICAgICB2aXNpdEZ1bmNEZWYoZnVu
YykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZ1bmNEZWYoCiAg
ICAgICAgICAgICAgICAgICAgIGZ1bmMub3JpZ2luLCBmdW5jLm5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgIGZ1bmMucmV0dXJuVHlwZS52aXNpdChzdWJzdGl0dXRpb24pLAorICAgICAgICAgICAg
ICAgICAgICBmdW5jLnJldHVyblR5cGUudmlzaXQoc3Vic3RpdHV0aW9uKS52aXNpdChpbnN0YW50
aWF0ZUltbWVkaWF0ZXMpLAogICAgICAgICAgICAgICAgICAgICBbXSwgLy8gV2UncmUgaW5zdGFu
dGlhdGVkIHNvIHdlIG5vIGxvbmdlciB0YWtlIHR5cGUgcGFyYW1ldGVycy4KLSAgICAgICAgICAg
ICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0
KHN1YnN0aXR1dGlvbikpLAotICAgICAgICAgICAgICAgICAgICBmdW5jLmJvZHkudmlzaXQoc3Vi
c3RpdHV0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMucGFyYW1ldGVycy5tYXAocGFy
YW1ldGVyID0+IHBhcmFtZXRlci52aXNpdChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRl
SW1tZWRpYXRlcykpLAorICAgICAgICAgICAgICAgICAgICBmdW5jLmJvZHkudmlzaXQoc3Vic3Rp
dHV0aW9uKS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgdmlzaXROYXRpdmVGdW5jKGZ1bmMpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVGdW5jSW5zdGFuY2UoCiAgICAg
ICAgICAgICAgICAgICAgIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMucmV0dXJuVHlw
ZS52aXNpdChzdWJzdGl0dXRpb24pLAotICAgICAgICAgICAgICAgICAgICBmdW5jLnBhcmFtZXRl
cnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQoc3Vic3RpdHV0aW9uKSksCi0gICAg
ICAgICAgICAgICAgICAgIGZ1bmMuaXNDYXN0KTsKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5y
ZXR1cm5UeXBlLnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlhdGVz
KSwKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4g
cGFyYW1ldGVyLnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlhdGVz
KSksCisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaXNDYXN0LAorICAgICAgICAgICAgICAgICAg
ICBmdW5jLmluc3RhbnRpYXRlSW1wbGVtZW50YXRpb24oc3Vic3RpdHV0aW9uKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbGV0IHJlc3VsdGluZ0Z1bmMgPSBmdW5jLnZpc2l0
KG5ldyBJbnN0YW50aWF0ZSgpKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0hpZ2hab21iaWVGaW5kZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvSGlnaFpvbWJpZUZpbmRlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9IaWdoWm9tYmllRmluZGVyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworLy8gSWYgYSBoaWdoLWxldmVsIGNvbnN0cnVjdCBzb21laG93
IG1hbmFnZXMgdG8gbGl2ZSBvbiB3aGVuIHdlJ3JlIGxvd2VyZWQsIGl0J3MgYSBoaWdoIHpvbWJp
ZS4KK2NsYXNzIEhpZ2hab21iaWVGaW5kZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBfZm91bmQo
bm9kZSkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcgKyAiOiBIaWdoIHpvbWJpZTogIiArIG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNp
dERvdEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2ZvdW5kKG5vZGUpOwor
ICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fZm91bmQobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0Q2FsbEV4cHJlc3Np
b24obm9kZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7
CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JZGVudGl0
eUV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvSWRlbnRpdHlFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0lkZW50aXR5RXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisidXNlIHN0cmljdCI7CisKK2NsYXNzIElkZW50aXR5RXhwcmVzc2lvbiBleHRlbmRzIEV4cHJl
c3Npb24geworICAgIGNvbnN0cnVjdG9yKHRhcmdldCkKKyAgICB7CisgICAgICAgIHN1cGVyKHRh
cmdldC5vcmlnaW4pOworICAgICAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7CisgICAgfQorICAg
IAorICAgIGdldCB0YXJnZXQoKSB7IHJldHVybiB0aGlzLl90YXJnZXQ7IH0KKyAgICAKKyAgICBn
ZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy50YXJnZXQudW5pZnlOb2RlOyB9CisgICAgZ2V0
IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdGhpcy50YXJnZXQuaXNDb25zdGV4cHI7IH0KKyAgICBn
ZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0aGlzLnRhcmdldC5pc0xWYWx1ZTsgfQorICAgIGdldCBh
ZGRyZXNzU3BhY2UoKSB7IHJldHVybiB0aGlzLnRhcmdldC5hZGRyZXNzU3BhY2U7IH0KKyAgICAK
KyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIigiICsgdGhpcy50YXJnZXQg
KyAiKSI7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9J
bmRleEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSW5kZXhFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0luZGV4RXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisi
dXNlIHN0cmljdCI7CisKK2NsYXNzIEluZGV4RXhwcmVzc2lvbiBleHRlbmRzIFByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBhcnJheSwgaW5kZXgpCisg
ICAgeworICAgICAgICBzdXBlcihvcmlnaW4sIGFycmF5KTsKKyAgICAgICAgdGhpcy5faW5kZXgg
PSBpbmRleDsKKyAgICB9CisgICAgCisgICAgZ2V0IGFycmF5KCkgeyByZXR1cm4gdGhpcy5iYXNl
OyB9CisgICAgZ2V0IGluZGV4KCkgeyByZXR1cm4gdGhpcy5faW5kZXg7IH0KKyAgICBnZXQgaXNM
VmFsdWUoKSB7IHJldHVybiB0aGlzLmFycmF5LmlzTFZhbHVlOyB9CisgICAgZ2V0IGFkZHJlc3NT
cGFjZSgpIHsgcmV0dXJuIHRoaXMuYXJyYXkuYWRkcmVzc1NwYWNlOyB9CisgICAgCisgICAgZ2V0
IGdldEZ1bmNOYW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yW10iOyB9CisgICAgZ2V0IGFuZEZ1bmNO
YW1lKCkgeyByZXR1cm4gIm9wZXJhdG9yJltdIjsgfQorICAgIGdldCBzZXRGdW5jTmFtZSgpIHsg
cmV0dXJuICJvcGVyYXRvcltdPSI7IH0KKworICAgIHVwZGF0ZUNhbGxzKCkKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLmNhbGxGb3JHZXQpCisgICAgICAgICAgICB0aGlzLmNhbGxGb3JHZXQuYXJn
dW1lbnRMaXN0WzFdID0gdGhpcy5pbmRleDsKKyAgICAgICAgaWYgKHRoaXMuY2FsbEZvckFuZCkK
KyAgICAgICAgICAgIHRoaXMuY2FsbEZvckFuZC5hcmd1bWVudExpc3RbMV0gPSB0aGlzLmluZGV4
OworICAgICAgICBpZiAodGhpcy5jYWxsRm9yU2V0KQorICAgICAgICAgICAgdGhpcy5jYWxsRm9y
U2V0LmFyZ3VtZW50TGlzdFsxXSA9IHRoaXMuaW5kZXg7CisgICAgICAgIHN1cGVyLnVwZGF0ZUNh
bGxzKCk7CisgICAgfQorCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICIo
IiArIHRoaXMuYXJyYXkgKyAiWyIgKyB0aGlzLmluZGV4ICsgIl0pIjsKKyAgICB9Cit9CkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVzRm9yQ2FsbC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVzRm9yQ2Fs
bC5qcwkocmV2aXNpb24gMjIyMTYxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
SW5mZXJUeXBlc0ZvckNhbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgZnVu
Y3Rpb24gaW5mZXJUeXBlc0ZvckNhbGwoZnVuYywgdHlwZUFyZwogICAgICAgICBpZiAoIWFyZ3Vt
ZW50VHlwZXNbaV0pCiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgYXJndW1lbnQg
dHlwZSBhdCBpID0gIiArIGkpOwogICAgICAgICBpZiAoIWFyZ3VtZW50VHlwZXNbaV0udW5pZnko
dW5pZmljYXRpb25Db250ZXh0LCBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSkpCi0gICAgICAgICAg
ICByZXR1cm4ge2ZhaWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJB
cmd1bWVudCAjIiArIChpICsgMSkgKyAiICIgKyAoZnVuYy5wYXJhbWV0ZXJzW2ldLm5hbWUgPyAi
Zm9yIHBhcmFtZXRlciAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLm5hbWUgOiAiIikgKyAiIGRvZXMg
bm90IG1hdGNoIChwYXNzZWQgIiArIGFyZ3VtZW50VHlwZXNbaV0gKyAiLCByZXF1aXJlICIgKyBm
dW5jLnBhcmFtZXRlcnNbaV0udHlwZSArICIpIil9OworICAgICAgICAgICAgcmV0dXJuIHtmYWls
dXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAo
aSArIDEpICsgIiAiICsgKGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIg
IiArIGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lICsgIiAiIDogIiIpICsgImRvZXMgbm90IG1hdGNo
IChwYXNzZWQgIiArIGFyZ3VtZW50VHlwZXNbaV0gKyAiLCByZXF1aXJlICIgKyBmdW5jLnBhcmFt
ZXRlcnNbaV0udHlwZSArICIpIil9OwogICAgIH0KICAgICBpZiAocmV0dXJuVHlwZSAmJiAhcmV0
dXJuVHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIGZ1bmMucmV0dXJuVHlwZSkpCiAgICAg
ICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywg
IlJldHVybiB0eXBlICIgKyBmdW5jLnJldHVyblR5cGUgKyAiIGRvZXMgbm90IG1hdGNoICIgKyBy
ZXR1cm5UeXBlKX07CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpz
CShyZXZpc2lvbiAyMjIxNjEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Jbmxp
bmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDYgQEAgZnVuY3Rpb24gX2lubGluZUZ1
bmN0aW9uKHByb2dyYW0sIGZ1bmMsIAogICAgIGlmIChmdW5jLmlubGluZWQgfHwgZnVuYy5pc05h
dGl2ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGZ1bmMucmV3cml0ZShuZXcgSW5zdGFu
dGlhdGVJbW1lZGlhdGVzKCkpOwotICAgIAogICAgIC8vIFRoaXMgaXMgdGhlIHByZWNpc2UgdGlt
ZSB3aGVuIHdlIGNhbiBidWlsZCBFQnVmZmVycyBpbiBvcmRlciB0byBnZXQgdGhlbSB0byBiZSB1
bmlxdWVkIGJ5CiAgICAgLy8gdHlwZSBpbnN0YW50aWF0aW9uIGJ1dCBub3RoaW5nIGVsc2UuCiAg
ICAgZnVuYy52aXNpdChuZXcgU3RydWN0TGF5b3V0QnVpbGRlcigpKTsKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwkocmV2aXNpb24gMjIyMTYxKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzIsMjQgKzMyLDE1IEBAIGNsYXNzIElubGluZXIgZXh0ZW5kcyBSZXdyaXRlciB7CiAgICAgICAg
IHRoaXMuX3Zpc2l0aW5nID0gdmlzaXRpbmc7CiAgICAgfQogICAgIAotICAgIHZpc2l0RG90RXhw
cmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0RG90
RXhwcmVzc2lvbihub2RlKTsKLSAgICAgICAgcmVzdWx0LmZpZWxkID0gcmVzdWx0LnN0cnVjdFR5
cGUudW5pZnlOb2RlLmZpZWxkQnlOYW1lKHJlc3VsdC5maWVsZE5hbWUpOwotICAgICAgICBpZiAo
cmVzdWx0LmZpZWxkLm9mZnNldCA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJVbi1sYWlkLW91dCBmaWVsZDogIiArIHJlc3VsdC5maWVsZCArICIgKGluICIgKyByZXN1bHQu
c3RydWN0VHlwZSArICIpIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAog
ICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQg
PSBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOworICAgICAgICBpZiAocmVzdWx0Lm5h
dGl2ZUZ1bmNJbnN0YW5jZSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIHJl
dHVybiB0aGlzLl92aXNpdGluZy5kb1Zpc2l0KG5vZGUuZnVuYywgKCkgPT4gewogICAgICAgICAg
ICAgbGV0IGZ1bmMgPSB0aGlzLl9wcm9ncmFtLmZ1bmNJbnN0YW50aWF0b3IuZ2V0VW5pcXVlKHJl
c3VsdC5mdW5jLCByZXN1bHQuYWN0dWFsVHlwZUFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBpZiAo
ZnVuYy5pc05hdGl2ZSkgewotICAgICAgICAgICAgICAgIHJlc3VsdC5uYXRpdmVGdW5jSW5zdGFu
Y2UgPSBmdW5jOwotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoZnVuYy5pc05hdGl2ZSkKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbmF0aXZlIGZ1bmM6ICIgKyBmdW5jKTsKICAgICAgICAgICAg
IF9pbmxpbmVGdW5jdGlvbih0aGlzLl9wcm9ncmFtLCBmdW5jLCB0aGlzLl92aXNpdGluZyk7CiAg
ICAgICAgICAgICBsZXQgcmVzdWx0aW5nQmxvY2sgPSBuZXcgRnVuY3Rpb25MaWtlQmxvY2soCiAg
ICAgICAgICAgICAgICAgcmVzdWx0Lm9yaWdpbiwgZnVuYy5yZXR1cm5UeXBlLCByZXN1bHQuYXJn
dW1lbnRMaXN0LCBmdW5jLnBhcmFtZXRlcnMsIGZ1bmMuYm9keSk7CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMJKHJldmlzaW9uIDIyMjE2MSkKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNyw2ICsyMzcsODggQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgCiAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0aXZl
IGludCBvcGVyYXRvciY8PihpbnQsaW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAg
ICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAg
ICAgICAgICAgICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkgJiByaWdodC5sb2FkVmFs
dWUoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQo
CisgICAgICAgICAgICAibmF0aXZlIHVpbnQgb3BlcmF0b3ImPD4odWludCx1aW50KSIsCisgICAg
ICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0g
KFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAgICAgICAgIEVQdHIuYm94KChsZWZ0Lmxv
YWRWYWx1ZSgpICYgcmlnaHQubG9hZFZhbHVlKCkpID4+PiAwKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgaW50
IG9wZXJhdG9yfDw+KGludCxpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAg
ICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAg
ICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2FkVmFsdWUoKSB8IHJpZ2h0LmxvYWRWYWx1ZSgp
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAg
ICAgICAgICAgICJuYXRpdmUgdWludCBvcGVyYXRvcnw8Pih1aW50LHVpbnQpIiwKKyAgICAgICAg
ICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xl
ZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3goKGxlZnQubG9hZFZh
bHVlKCkgfCByaWdodC5sb2FkVmFsdWUoKSkgPj4+IDApOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3Bl
cmF0b3JePD4oaW50LGludCkiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAg
ICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgorICAgICAgICAgICAg
ICAgICAgICBFUHRyLmJveChsZWZ0LmxvYWRWYWx1ZSgpIF4gcmlnaHQubG9hZFZhbHVlKCkpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAg
ICAgICAgIm5hdGl2ZSB1aW50IG9wZXJhdG9yXjw+KHVpbnQsdWludCkiLAorICAgICAgICAgICAg
ZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwg
cmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJveCgobGVmdC5sb2FkVmFsdWUo
KSBeIHJpZ2h0LmxvYWRWYWx1ZSgpKSA+Pj4gMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
CisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAibmF0aXZlIGludCBvcGVyYXRv
cjw8PD4oaW50LHVpbnQpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAg
IGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAg
ICAgICAgRVB0ci5ib3gobGVmdC5sb2FkVmFsdWUoKSA8PCByaWdodC5sb2FkVmFsdWUoKSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAg
ICAgICAibmF0aXZlIHVpbnQgb3BlcmF0b3I8PDw+KHVpbnQsdWludCkiLAorICAgICAgICAgICAg
ZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbbGVmdCwg
cmlnaHRdKSA9PgorICAgICAgICAgICAgICAgICAgICBFUHRyLmJveCgobGVmdC5sb2FkVmFsdWUo
KSA8PCByaWdodC5sb2FkVmFsdWUoKSkgPj4+IDApOworICAgICAgICAgICAgfSk7CisgICAgICAg
IAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0
b3I+Pjw+KGludCx1aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAg
ICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CisgICAgICAgICAgICAg
ICAgICAgIEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkgPj4gcmlnaHQubG9hZFZhbHVlKCkpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAg
ICAgICAgIm5hdGl2ZSB1aW50IG9wZXJhdG9yPj48Pih1aW50LHVpbnQpIiwKKyAgICAgICAgICAg
IGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQs
IHJpZ2h0XSkgPT4KKyAgICAgICAgICAgICAgICAgICAgRVB0ci5ib3gobGVmdC5sb2FkVmFsdWUo
KSA+Pj4gcmlnaHQubG9hZFZhbHVlKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAg
ICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0b3J+PD4o
aW50KSIsCisgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxl
bWVudGF0aW9uID0gKFt2YWx1ZV0pID0+IEVQdHIuYm94KH52YWx1ZS5sb2FkVmFsdWUoKSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAg
ICAgICAibmF0aXZlIHVpbnQgb3BlcmF0b3J+PD4odWludCkiLAorICAgICAgICAgICAgZnVuYyA9
PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbdmFsdWVdKSA9PiBF
UHRyLmJveCgofnZhbHVlLmxvYWRWYWx1ZSgpKSA+Pj4gMCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCiAgICAgICAgICAgICAibmF0aXZlIGZsb2F0
IG9wZXJhdG9yLzw+KGZsb2F0LGZsb2F0KSIsCiAgICAgICAgICAgICBmdW5jID0+IHsKICAgICAg
ICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0LCByaWdodF0pID0+CkBAIC0z
OTcsMzAgKzQ3OSwzMiBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICAgICAg
RVB0ci5ib3gobGVmdC5sb2FkVmFsdWUoKSA+PSByaWdodC5sb2FkVmFsdWUoKSk7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIGxldCBhcnJheUVsZW1lbnRQdHIgPSBmdW5jID0+
IHsKLSAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZiwgaW5kZXhdLCBub2Rl
KSA9PiB7Ci0gICAgICAgICAgICAgICAgcmVmID0gcmVmLmxvYWRWYWx1ZSgpOwotICAgICAgICAg
ICAgICAgIGlmICghcmVmKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJv
cihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7Ci0gICAgICAg
ICAgICAgICAgaW5kZXggPSBpbmRleC5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAo
aW5kZXggPiByZWYubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBF
cnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJBcnJheSBpbmRleCAiICsgaW5kZXggKyAi
IGlzIG91dCBvZiBib3VuZHMgb2YgIiArIHJlZik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVQ
dHIuYm94KHJlZi5wdHIucGx1cyhpbmRleCAqIG5vZGUuYWN0dWFsVHlwZUFyZ3VtZW50c1swXS5z
aXplKSk7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgdGhp
cy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgVF4gdGhyZWFkIG9wZXJhdG9yJltdPFQ+
KFRbXSB0aHJlYWQsdWludCkiLAotICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsKLSAgICAg
ICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgVF4gdGhyZWFkZ3JvdXAgb3Bl
cmF0b3ImW108VDpwcmltaXRpdmU+KFRbXSB0aHJlYWRncm91cCx1aW50KSIsCi0gICAgICAgICAg
ICBhcnJheUVsZW1lbnRQdHIpOwotICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAg
Im5hdGl2ZSBUXiBkZXZpY2Ugb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KFRbXSBkZXZpY2UsdWlu
dCkiLAotICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsKLSAgICAgICAgdGhpcy5fbWFwLnNl
dCgKLSAgICAgICAgICAgICJuYXRpdmUgVF4gY29uc3RhbnQgb3BlcmF0b3ImW108VDpwcmltaXRp
dmU+KFRbXSBjb25zdGFudCx1aW50KSIsCi0gICAgICAgICAgICBhcnJheUVsZW1lbnRQdHIpOwor
ICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2Ugb2YgYWRkcmVzc1NwYWNlcykgeworICAgICAg
ICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICAgICBgbmF0aXZlIFReICR7YWRkcmVz
c1NwYWNlfSBvcGVyYXRvciZbXTxUJHtwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpfT4oVFtd
ICR7YWRkcmVzc1NwYWNlfSx1aW50KWAsCisgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAg
ICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZiwgaW5kZXhdLCBub2Rl
KSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWYgPSByZWYubG9hZFZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxs
IGRlcmVmZXJlbmNlIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4Lmxv
YWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gcmVmLmxlbmd0
aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2Rl
Lm9yaWdpbi5vcmlnaW5TdHJpbmcsICJBcnJheSBpbmRleCAiICsgaW5kZXggKyAiIGlzIG91dCBv
ZiBib3VuZHMgb2YgIiArIHJlZik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVB0
ci5ib3gocmVmLnB0ci5wbHVzKGluZGV4ICogbm9kZS5hY3R1YWxUeXBlQXJndW1lbnRzWzBdLnNp
emUpKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICAgICBgbmF0aXZlIHVpbnQgb3Bl
cmF0b3IubGVuZ3RoPFQke3Byb3RvY29sU3VmZml4KGFkZHJlc3NTcGFjZSl9PihUW10gJHthZGRy
ZXNzU3BhY2V9KWAsCisgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAg
ICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZl0sIG5vZGUpID0+IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZiA9IHJlZi5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghcmVmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJv
eCgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUHRyLmJveChyZWYubGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQogICAgIH0KICAgICAKICAgICBhZGQodGhpbmcpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0xldEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjE2MSkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xldEV4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0idXNlIHN0cmljdCI7Ci0KLWxldCBsZXRFeHByZXNzaW9uQ291bnQgPSAwOwotCi1j
bGFzcyBMZXRFeHByZXNzaW9uIGV4dGVuZHMgVmFsdWUgewotICAgIGNvbnN0cnVjdG9yKG9yaWdp
bikKLSAgICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdp
bjsKLSAgICAgICAgdGhpcy5pbmRleCA9IGxldEV4cHJlc3Npb25Db3VudCsrOwotICAgICAgICB0
aGlzLmFyZ3VtZW50ID0gbnVsbDsKLSAgICAgICAgdGhpcy5ib2R5ID0gbnVsbDsKLSAgICB9Ci0g
ICAgCi0gICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQotICAgIGdldCBu
YW1lKCkgeyByZXR1cm4gImxldDwiICsgdGhpcy5pbmRleCArICI+IjsgfQotICAgIAotICAgIHRv
U3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAiKCIgKyB0aGlzLmFy
Z3VtZW50ICsgIiwgIiArIHRoaXMuYm9keSArICIpIjsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xleGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xleGVyLmpzCShyZXZpc2lvbiAyMjIxNjEpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTE3
LDEzICsxMTcsMTkgQEAgY2xhc3MgTGV4ZXIgewogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgi
aWRlbnRpZmllciIpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKC9eMHhbMC05YS1mQS1GXSt1
Ly50ZXN0KHJlbGV2YW50VGV4dCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJ1aW50SGV4
TGl0ZXJhbCIpOworCisgICAgICAgIGlmICgvXjB4WzAtOWEtZkEtRl0rLy50ZXN0KHJlbGV2YW50
VGV4dCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJpbnRIZXhMaXRlcmFsIik7CisKICAg
ICAgICAgaWYgKC9eWzAtOV0rdS8udGVzdChyZWxldmFudFRleHQpKQogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdCgidWludExpdGVyYWwiKTsKIAogICAgICAgICBpZiAoL15bMC05XSsvLnRlc3Qo
cmVsZXZhbnRUZXh0KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQoImludExpdGVyYWwiKTsK
ICAgICAgICAgCi0gICAgICAgIGlmICgvXi0+fD49fDw9fD09fCE9fFwrPXwtPXxcKj18XC89fCU9
fF49fFx8PXwmPXxcK1wrfC0tfCYmfFx8XHx8KFt7fSgpXFtcXT86PSsqXC8sLiUhfl4mfDw+QDst
XSkvLnRlc3QocmVsZXZhbnRUZXh0KSkKKyAgICAgICAgaWYgKC9ePDx8Pj58LT58Pj18PD18PT18
IT18XCs9fC09fFwqPXxcLz18JT18XF49fFx8PXwmPXxcK1wrfC0tfCYmfFx8XHx8KFt7fSgpXFtc
XT86PSsqXC8sLiUhfl4mfDw+QDstXSkvLnRlc3QocmVsZXZhbnRUZXh0KSkKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQoInB1bmN0dWF0aW9uIik7CiAgICAgICAgIAogICAgICAgICBsZXQgcmVt
YWluaW5nID0gcmVsZXZhbnRUZXh0LnN1YnN0cmluZygwLCAyMCkuc3BsaXQoL1xzLylbMF07Cklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtlQXJyYXlSZWZFeHByZXNzaW9u
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VBcnJh
eVJlZkV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDExICszMyw2IEBAIGNsYXNzIE1ha2VBcnJheVJlZkV4cHJlc3Npb24gZXh0ZW5kcyBFeHAK
ICAgICAKICAgICBnZXQgbFZhbHVlKCkgeyByZXR1cm4gdGhpcy5fbFZhbHVlOyB9CiAgICAgCi0g
ICAgYmVjb21lQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX19wcm90b19fID0gQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uLnByb3RvdHlw
ZTsKLSAgICB9Ci0gICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuICJA
IiArICh0aGlzLm51bUVsZW1lbnRzID8gIjw8IiArIHRoaXMubnVtRWxlbWVudHMgKyAiPj4iIDog
IiIpICsgIigiICsgdGhpcy5sVmFsdWUgKyAiKSI7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9OYW1lQ29udGV4dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9OYW1lQ29udGV4dC5qcwkocmV2aXNpb24gMjIyMTYxKQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDYgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogICAgIHsKICAgICAgICAgdGhpcy5f
bWFwID0gbmV3IE1hcCgpOwogICAgICAgICB0aGlzLl9zZXQgPSBuZXcgU2V0KCk7Ci0gICAgICAg
IHRoaXMuX2RlZmluZWQgPSBudWxsOwogICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGVtZW50ID0g
bnVsbDsKICAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKICAgICAgICAgdGhpcy5f
aW50cmluc2ljcyA9IG51bGw7CkBAIC02Miw3ICs2MSw3IEBAIGNsYXNzIE5hbWVDb250ZXh0IHsK
ICAgICAgICAgaWYgKCF0aGluZy5uYW1lKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
LSAgICAgICAgaWYgKHRoaW5nLmlzTmF0aXZlKSB7CisgICAgICAgIGlmICh0aGluZy5pc05hdGl2
ZSAmJiAhdGhpbmcuaW1wbGVtZW50YXRpb24pIHsKICAgICAgICAgICAgIGlmICghdGhpcy5faW50
cmluc2ljcykKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBmdW5jdGlv
biBpbiBhIHNjb3BlIHRoYXQgZG9lcyBub3QgcmVjb2duaXplIGludHJpbnNpY3MiKTsKICAgICAg
ICAgICAgIHRoaXMuX2ludHJpbnNpY3MuYWRkKHRoaW5nKTsKQEAgLTExNSwzNiArMTE0LDExIEBA
IGNsYXNzIE5hbWVDb250ZXh0IHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogICAgIAot
ICAgIGhhbmRsZURlZmluaW5nKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2RlZmluZWQgPSBuZXcg
U2V0KCk7Ci0gICAgfQotICAgIAotICAgIGlzRGVmaW5lZCh0aGluZykKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9zZXQuaGFzKHRoaW5nKSkgewotICAgICAgICAgICAgcmV0dXJuICF0aGlzLl9k
ZWZpbmVkCi0gICAgICAgICAgICAgICAgfHwgdGhpcy5fZGVmaW5lZC5oYXModGhpbmcpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZSAmJiB0aGlzLl9kZWxlZ2F0ZS5p
c0RlZmluZWQodGhpbmcpOwotICAgIH0KLSAgICAKLSAgICBkZWZpbmUodGhpbmcpCi0gICAgewot
ICAgICAgICB0aGlzLl9kZWZpbmVkLmFkZCh0aGluZyk7Ci0gICAgfQotICAgIAotICAgIGRlZmlu
ZUFsbCgpCi0gICAgewotICAgICAgICB0aGlzLl9kZWZpbmVkID0gbnVsbDsKLSAgICB9Ci0gICAg
CiAgICAgZG9TdGF0ZW1lbnQoc3RhdGVtZW50LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHRo
aXMuX2N1cnJlbnRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7CiAgICAgICAgIGNhbGxiYWNrKCk7CiAg
ICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQgPSBudWxsOwotICAgICAgICB0aGlzLmRlZmlu
ZShzdGF0ZW1lbnQpOwogICAgIH0KICAgICAKICAgICByZWNvZ25pemVJbnRyaW5zaWNzKCkKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMJKHJl
dmlzaW9uIDIyMjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVSZXNv
bHZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDE1IEBACiAvLyBtb3JlIGNvbnZl
bmllbnQgdG8gY2hlY2sgaGVyZSB0aGFuIGluIHRoZSBDaGVja2VyLiBUaGlzIHVzdWFsbHkgaW52
b2x2ZXMgdGhpbmdzIHRoYXQgbmVlZCB0byBiZQogLy8gY2hlY2tlZCBiZWZvcmUgVHlwZVJlZlRv
VHlwZURlZlNraXBwZXIuCiBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKLSAg
ICAvLyBJdCdzIHRvdGFsbHkgT0sgdG8gaW5zdGFudGlhdGUgdGhpcyB3aXRoIHplcm8gYXJndW1l
bnRzIChpLmUuIHBhc3NpbmcgdW5kZWZpbmVkIGZvciBib3RoIG9mCi0gICAgLy8gdGhlbSkgaWYg
eW91J3JlIGNyZWF0aW5nIGEgTmFtZVJlc29sdmVyIHRvIHZpc2l0IGEgUHJvZ3JhbS4KICAgICBj
b25zdHJ1Y3RvcihuYW1lQ29udGV4dCkKICAgICB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAg
IHRoaXMuX25hbWVDb250ZXh0ID0gbmFtZUNvbnRleHQ7CiAgICAgfQotICAgIAotICAgIHZpc2l0
UHJvZ3JhbShub2RlKQorCisgICAgZG9TdGF0ZW1lbnQoc3RhdGVtZW50KQogICAgIHsKLSAgICAg
ICAgbGV0IG5hbWVDb250ZXh0ID0gbmV3IE5hbWVDb250ZXh0KHRoaXMuX25hbWVDb250ZXh0KTsK
LSAgICAgICAgbmFtZUNvbnRleHQucHJvZ3JhbSA9IG5vZGU7Ci0gICAgICAgIG5hbWVDb250ZXh0
LnJlY29nbml6ZUludHJpbnNpY3MoKTsKLSAgICAgICAgbmFtZUNvbnRleHQuaGFuZGxlRGVmaW5p
bmcoKTsKLSAgICAgICAgbm9kZS5pbnRyaW5zaWNzID0gbmFtZUNvbnRleHQuaW50cmluc2ljczsK
LSAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKQot
ICAgICAgICAgICAgbmFtZUNvbnRleHQuYWRkKHN0YXRlbWVudCk7Ci0gICAgICAgIGxldCBjaGVj
a2VyID0gbmV3IE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCk7Ci0gICAgICAgIGZvciAobGV0IHN0
YXRlbWVudCBvZiBub2RlLnRvcExldmVsU3RhdGVtZW50cykKLSAgICAgICAgICAgIG5hbWVDb250
ZXh0LmRvU3RhdGVtZW50KHN0YXRlbWVudCwgKCkgPT4gc3RhdGVtZW50LnZpc2l0KGNoZWNrZXIp
KTsKLSAgICAgICAgbm9kZS5nbG9iYWxOYW1lQ29udGV4dCA9IG5hbWVDb250ZXh0OworICAgICAg
ICB0aGlzLl9uYW1lQ29udGV4dC5kb1N0YXRlbWVudChzdGF0ZW1lbnQsICgpID0+IHN0YXRlbWVu
dC52aXNpdCh0aGlzKSk7CiAgICAgfQogICAgIAogICAgIF92aXNpdFR5cGVQYXJhbWV0ZXJzQW5k
QnVpbGROYW1lQ29udGV4dChub2RlKQpAQCAtMjA3LDggKzE5NSw2IEBAIGNsYXNzIE5hbWVSZXNv
bHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgdHlwZSA9IHRoaXMuX25hbWVDb250
ZXh0LmdldChUeXBlLCBub2RlLm5hbWUpOwogICAgICAgICAgICAgaWYgKCF0eXBlKQogICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywg
IkNvdWxkIG5vdCBmaW5kIHR5cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7Ci0gICAgICAgICAgICBp
ZiAoIXRoaXMuX25hbWVDb250ZXh0LmlzRGVmaW5lZCh0eXBlKSkKLSAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJJbGxlZ2FsIGZv
cndhcmQgdXNlIG9mIHR5cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7CiAgICAgICAgICAgICBub2Rl
LnR5cGUgPSB0eXBlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjMwLDcgKzIxNiw2IEBAIGNs
YXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHZpc2l0UmVmZXJlbmNlVHlw
ZShub2RlKQogICAgIHsKICAgICAgICAgbGV0IG5hbWVDb250ZXh0ID0gbmV3IE5hbWVDb250ZXh0
KHRoaXMuX25hbWVDb250ZXh0KTsKLSAgICAgICAgbmFtZUNvbnRleHQuZGVmaW5lQWxsKCk7CiAg
ICAgICAgIG5vZGUuZWxlbWVudFR5cGUudmlzaXQobmV3IE5hbWVSZXNvbHZlcihuYW1lQ29udGV4
dCkpOwogICAgIH0KICAgICAKQEAgLTI1OCw2ICsyNDMsMjggQEAgY2xhc3MgTmFtZVJlc29sdmVy
IGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHN1cGVyLnZpc2l0UmV0dXJuKG5vZGUpOwogICAg
IH0KICAgICAKKyAgICBfaGFuZGxlUHJvcGVydHlBY2Nlc3Mobm9kZSkKKyAgICB7CisgICAgICAg
IG5vZGUucG9zc2libGVHZXRPdmVybG9hZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywg
bm9kZS5nZXRGdW5jTmFtZSk7CisgICAgICAgIG5vZGUucG9zc2libGVTZXRPdmVybG9hZHMgPSB0
aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgbm9kZS5zZXRGdW5jTmFtZSk7CisgICAgICAgIG5v
ZGUucG9zc2libGVBbmRPdmVybG9hZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgbm9k
ZS5hbmRGdW5jTmFtZSk7CisKKyAgICAgICAgaWYgKCFub2RlLnBvc3NpYmxlR2V0T3ZlcmxvYWRz
ICYmICFub2RlLnBvc3NpYmxlQW5kT3ZlcmxvYWRzKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdU
eXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGZpbmQgZWl0aGVyICIg
KyBub2RlLmdldEZ1bmNOYW1lICsgIiBvciAiICsgbm9kZS5hbmRGdW5jTmFtZSk7CisgICAgfQor
ICAgIAorICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5f
aGFuZGxlUHJvcGVydHlBY2Nlc3Mobm9kZSk7CisgICAgICAgIHN1cGVyLnZpc2l0RG90RXhwcmVz
c2lvbihub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkK
KyAgICB7CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzKG5vZGUpOworICAgICAg
ICBzdXBlci52aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKTsKKyAgICB9CisgICAgCiAgICAgdmlz
aXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzb2x2ZVR5cGVB
cmd1bWVudHMobm9kZS50eXBlQXJndW1lbnRzKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL05hdGl2ZUZ1bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkocmV2aXNpb24gMjIyMTYxKQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksMTAgQEAgY2xhc3MgTmF0aXZlRnVuYyBleHRlbmRzIEZ1bmMgewogICAgIHsKICAgICAg
ICAgc3VwZXIob3JpZ2luLCBuYW1lLCByZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycywgcGFyYW1l
dGVycywgaXNDYXN0KTsKICAgICAgICAgdGhpcy5pc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5pbXBsZW1lbnRhdGlvbiA9IG51bGw7CisgICAgICAgIHRoaXMuaW5zdGFudGlhdGVJ
bXBsZW1lbnRhdGlvbiA9IChzdWJzdGl0dXRpb24pID0+IHt9OworICAgICAgICB0aGlzLnZpc2l0
SW1wbGVtZW50YXRpb25EYXRhID0gKGltcGxlbWVudGF0aW9uRGF0YSwgdmlzaXRvcikgPT4gbnVs
bDsKKyAgICAgICAgdGhpcy5kaWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEgPSBp
bXBsZW1lbnRhdGlvbkRhdGEgPT4gbnVsbDsKICAgICB9CiAgICAgCiAgICAgZ2V0IGlzTmF0aXZl
KCkgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
TmF0aXZlRnVuY0luc3RhbmNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL05hdGl2ZUZ1bmNJbnN0YW5jZS5qcwkocmV2aXNpb24gMjIyMTYxKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSwxNCArMjUsMTYgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgTmF0aXZl
RnVuY0luc3RhbmNlIGV4dGVuZHMgRnVuYyB7Ci0gICAgY29uc3RydWN0b3IoZnVuYywgcmV0dXJu
VHlwZSwgcGFyYW1ldGVycywgaXNDYXN0KQorICAgIGNvbnN0cnVjdG9yKGZ1bmMsIHJldHVyblR5
cGUsIHBhcmFtZXRlcnMsIGlzQ2FzdCwgaW1wbGVtZW50YXRpb25EYXRhKQogICAgIHsKICAgICAg
ICAgc3VwZXIoZnVuYy5vcmlnaW4sIGZ1bmMubmFtZSwgcmV0dXJuVHlwZSwgW10sIHBhcmFtZXRl
cnMsIGlzQ2FzdCk7CiAgICAgICAgIHRoaXMuX2Z1bmMgPSBmdW5jOworICAgICAgICB0aGlzLl9p
bXBsZW1lbnRhdGlvbkRhdGEgPSBpbXBsZW1lbnRhdGlvbkRhdGE7CiAgICAgfQogICAgIAogICAg
IGdldCBmdW5jKCkgeyByZXR1cm4gdGhpcy5fZnVuYzsgfQogICAgIGdldCBpc05hdGl2ZSgpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICBnZXQgaW1wbGVtZW50YXRpb25EYXRhKCkgeyByZXR1cm4gdGhp
cy5faW1wbGVtZW50YXRpb25EYXRhOyB9CiAKICAgICB0b0RlY2xTdHJpbmcoKQogICAgIHsKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkocmV2aXNpb24gMjIyMTYxKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMzMsOSArMzMsMTcgQEAgY2xhc3MgTm9kZSB7CiAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9
IHZpc2l0RnVuYy5jYWxsKHZpc2l0b3IsIHRoaXMpOwogICAgICAgICBpZiAoInJldHVyblZhbHVl
IiBpbiB2aXNpdG9yKQogICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB2aXNpdG9yLnJldHVyblZh
bHVlOworICAgICAgICAKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KICAgICAK
KyAgICBzdGF0aWMgdmlzaXQobm9kZSwgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlmIChub2Rl
IGluc3RhbmNlb2YgTm9kZSkKKyAgICAgICAgICAgIHJldHVybiBub2RlLnZpc2l0KHZpc2l0b3Ip
OworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisgICAgCiAgICAgdW5pZnkodW5pZmljYXRp
b25Db250ZXh0LCBvdGhlcikKICAgICB7CiAgICAgICAgIGlmICghb3RoZXIpCkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vcm1hbFVzZVByb3Bl
cnR5UmVzb2x2ZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisi
dXNlIHN0cmljdCI7CisKK2NsYXNzIE5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIgZXh0ZW5kcyBS
ZXdyaXRlciB7CisgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3VwZXIudmlzaXREb3RFeHByZXNzaW9uKG5vZGUpLnJld3JpdGVBZnRlckNsb25pbmco
KTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdXBlci52aXNpdEluZGV4RXhwcmVzc2lvbihub2RlKS5yZXdyaXRlQWZ0
ZXJDbG9uaW5nKCk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9QYXJzZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9QYXJzZS5qcwkocmV2aXNpb24gMjIyMTYxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUGFyc2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTE3MiwxNyArMTcyLDM3IEBAIGZ1bmN0
aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgaWYgKHRva2VuID0g
dHJ5Q29uc3VtZUtpbmQoImlkZW50aWZpZXIiKSkKICAgICAgICAgICAgIHJldHVybiBuZXcgVmFy
aWFibGVSZWYodG9rZW4sIHRva2VuLnRleHQpOwogICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25z
dW1lS2luZCgiaW50TGl0ZXJhbCIpKSB7Ci0gICAgICAgICAgICBsZXQgaW50VmVyc2lvbiA9IE1h
dGguZmxvb3IoK3Rva2VuLnRleHQpOworICAgICAgICAgICAgbGV0IGludFZlcnNpb24gPSAoK3Rv
a2VuLnRleHQpIHwgMDsKICAgICAgICAgICAgIGlmICgiIiArIGludFZlcnNpb24gIT09IHRva2Vu
LnRleHQpCi0gICAgICAgICAgICAgICAgbGV4ZXIuZmFpbCgiSW50ZWdlciBsaXRlcmFsIGlzIG5v
dCBhbiBpbnRlZ2VyIik7CisgICAgICAgICAgICAgICAgbGV4ZXIuZmFpbCgiSW50ZWdlciBsaXRl
cmFsIGlzIG5vdCBhbiBpbnRlZ2VyOiAiICsgdG9rZW4udGV4dCk7CiAgICAgICAgICAgICByZXR1
cm4gbmV3IEludExpdGVyYWwodG9rZW4sIGludFZlcnNpb24pOwogICAgICAgICB9CiAgICAgICAg
IGlmICh0b2tlbiA9IHRyeUNvbnN1bWVLaW5kKCJ1aW50TGl0ZXJhbCIpKSB7CiAgICAgICAgICAg
ICBsZXQgdWludFZlcnNpb24gPSB0b2tlbi50ZXh0LnN1YnN0cigwLCB0b2tlbi50ZXh0Lmxlbmd0
aCAtIDEpID4+PiAwOwogICAgICAgICAgICAgaWYgKHVpbnRWZXJzaW9uICsgInUiICE9PSB0b2tl
bi50ZXh0KQotICAgICAgICAgICAgICAgIGxleGVyLmZhaWwoIkludGVnZXIgbGl0ZXJhbCBpcyBu
b3QgMzItYml0IHVuc2lnbmVkIGludGVnZXIiKTsKKyAgICAgICAgICAgICAgICBsZXhlci5mYWls
KCJJbnRlZ2VyIGxpdGVyYWwgaXMgbm90IDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyOiAiICsgdG9r
ZW4udGV4dCk7CiAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnRMaXRlcmFsKHRva2VuLCB1aW50
VmVyc2lvbik7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCh0b2tlbiA9IHRyeUNvbnN1bWVLaW5k
KCJpbnRIZXhMaXRlcmFsIikpCisgICAgICAgICAgICB8fCAodG9rZW4gPSB0cnlDb25zdW1lS2lu
ZCgidWludEhleExpdGVyYWwiKSkpIHsKKyAgICAgICAgICAgIGxldCBoZXhTdHJpbmcgPSB0b2tl
bi50ZXh0LnN1YnN0cigyKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi5raW5kID09ICJ1aW50SGV4
TGl0ZXJhbCIpCisgICAgICAgICAgICAgICAgaGV4U3RyaW5nID0gaGV4U3RyaW5nLnN1YnN0cigw
LCBoZXhTdHJpbmcubGVuZ3RoIC0gMSk7CisgICAgICAgICAgICBpZiAoIWhleFN0cmluZy5sZW5n
dGgpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgaGV4IGxpdGVyYWw6ICIg
KyB0b2tlbik7CisgICAgICAgICAgICBsZXQgaW50VmVyc2lvbiA9IHBhcnNlSW50KGhleFN0cmlu
ZywgMTYpOworICAgICAgICAgICAgaWYgKHRva2VuLmtpbmQgPT0gImludEhleExpdGVyYWwiKQor
ICAgICAgICAgICAgICAgIGludFZlcnNpb24gPSBpbnRWZXJzaW9uIHwgMDsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBpbnRWZXJzaW9uID0gaW50VmVyc2lvbiA+Pj4gMDsKKyAg
ICAgICAgICAgIGlmIChpbnRWZXJzaW9uLnRvU3RyaW5nKDE2KSAhPT0gaGV4U3RyaW5nKQorICAg
ICAgICAgICAgICAgIGxleGVyLmZhaWwoIkhleCBpbnRlZ2VyIGxpdGVyYWwgaXMgbm90IGFuIGlu
dGVnZXI6ICIgKyB0b2tlbi50ZXh0KTsKKyAgICAgICAgICAgIGlmICh0b2tlbi5raW5kID09ICJp
bnRIZXhMaXRlcmFsIikKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludExpdGVyYWwodG9r
ZW4sIGludFZlcnNpb24pOworICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50TGl0ZXJhbCh0b2tl
biwgaW50VmVyc2lvbiA+Pj4gMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRva2VuID0gdHJ5
Q29uc3VtZUtpbmQoImRvdWJsZUxpdGVyYWwiKSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgRG91
YmxlTGl0ZXJhbCh0b2tlbiwgK3Rva2VuLnRleHQpOwogICAgICAgICBpZiAodG9rZW4gPSB0cnlD
b25zdW1lS2luZCgiZmxvYXRMaXRlcmFsIikpIHsKICAgICAgICAgICAgIGxldCB0ZXh0ID0gdG9r
ZW4udGV4dDsKICAgICAgICAgICAgIGxldCBkID0gdG9rZW4udGV4dC5lbmRzV2l0aCgiZCIpOwpA
QCAtMzMxLDEyICszNTEsMTQgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmln
aW5LaQogICAgICAgICBjb25zdW1lKCIoIik7CiAgICAgICAgIGxldCBhcmd1bWVudExpc3QgPSBb
XTsKICAgICAgICAgd2hpbGUgKCF0ZXN0KCIpIikpIHsKLSAgICAgICAgICAgIGFyZ3VtZW50TGlz
dC5wdXNoKHBhcnNlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgIGxldCBhcmd1bWVudCA9IHBh
cnNlUG9zc2libGVBc3NpZ25tZW50KCk7CisgICAgICAgICAgICBhcmd1bWVudExpc3QucHVzaChh
cmd1bWVudCk7CiAgICAgICAgICAgICBpZiAoIXRyeUNvbnN1bWUoIiwiKSkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjb25zdW1lKCIpIik7Ci0gICAgICAgIHJl
dHVybiBuZXcgQ2FsbEV4cHJlc3Npb24obmFtZSwgbmFtZS50ZXh0LCB0eXBlQXJndW1lbnRzLCBh
cmd1bWVudExpc3QpOworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IENhbGxFeHByZXNzaW9uKG5h
bWUsIG5hbWUudGV4dCwgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRMaXN0KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24gaXNDYWxsRXhwcmVzc2lvbigp
CkBAIC0zNDgsOSArMzcwLDkgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmln
aW5LaQogICAgICAgICB9KTsKICAgICB9CiAgICAgCi0gICAgZnVuY3Rpb24gZW1pdEluY3JlbWVu
dCh0b2tlbiwgcHRyLCBleHRyYUFyZykKKyAgICBmdW5jdGlvbiBlbWl0SW5jcmVtZW50KHRva2Vu
LCBvbGQsIGV4dHJhQXJnKQogICAgIHsKLSAgICAgICAgbGV0IGFyZ3MgPSBbbmV3IERlcmVmZXJl
bmNlRXhwcmVzc2lvbih0b2tlbiwgVmFyaWFibGVSZWYud3JhcChwdHIpKV07CisgICAgICAgIGxl
dCBhcmdzID0gW29sZF07CiAgICAgICAgIGlmIChleHRyYUFyZykKICAgICAgICAgICAgIGFyZ3Mu
cHVzaChleHRyYUFyZyk7CiAgICAgICAgIApAQCAtMzYxLDI3ICszODMsMTUgQEAgZnVuY3Rpb24g
cGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAgICBpZiAobmFtZSA9PSAib3Bl
cmF0b3IiKQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG5hbWU6ICIgKyBu
YW1lKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBuZXcgQXNzaWdubWVudCgKLSAgICAgICAg
ICAgIHRva2VuLAotICAgICAgICAgICAgbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tlbiwg
VmFyaWFibGVSZWYud3JhcChwdHIpKSwKLSAgICAgICAgICAgIG5ldyBDYWxsRXhwcmVzc2lvbih0
b2tlbiwgbmFtZSwgW10sIGFyZ3MpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsRXhwcmVzc2lv
bih0b2tlbiwgbmFtZSwgW10sIGFyZ3MpOwogICAgIH0KICAgICAKICAgICBmdW5jdGlvbiBmaW5p
c2hQYXJzaW5nUG9zdEluY3JlbWVudCh0b2tlbiwgbGVmdCkKICAgICB7Ci0gICAgICAgIGxldCBw
dHIgPSBuZXcgTGV0RXhwcmVzc2lvbih0b2tlbik7Ci0gICAgICAgIHB0ci5hcmd1bWVudCA9IG5l
dyBNYWtlUHRyRXhwcmVzc2lvbih0b2tlbiwgbGVmdCk7Ci0gICAgICAgIAotICAgICAgICBsZXQg
b2xkVmFsdWUgPSBuZXcgTGV0RXhwcmVzc2lvbih0b2tlbik7Ci0gICAgICAgIG9sZFZhbHVlLmFy
Z3VtZW50ID0gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tlbiwgVmFyaWFibGVSZWYud3Jh
cChwdHIpKTsKLSAgICAgICAgCi0gICAgICAgIHB0ci5ib2R5ID0gb2xkVmFsdWU7Ci0gICAgICAg
IAotICAgICAgICBvbGRWYWx1ZS5ib2R5ID0gbmV3IENvbW1hRXhwcmVzc2lvbih0b2tlbiwgWwot
ICAgICAgICAgICAgZW1pdEluY3JlbWVudCh0b2tlbiwgcHRyKSwKLSAgICAgICAgICAgIFZhcmlh
YmxlUmVmLndyYXAob2xkVmFsdWUpCi0gICAgICAgIF0pOwotICAgICAgICByZXR1cm4gcHRyOwor
ICAgICAgICBsZXQgcmVhZE1vZGlmeVdyaXRlID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24odG9rZW4sIGxlZnQpOworICAgICAgICByZWFkTW9kaWZ5V3JpdGUubmV3VmFsdWVFeHAgPSBl
bWl0SW5jcmVtZW50KHRva2VuLCByZWFkTW9kaWZ5V3JpdGUub2xkVmFsdWVSZWYoKSk7CisgICAg
ICAgIHJlYWRNb2RpZnlXcml0ZS5yZXN1bHRFeHAgPSByZWFkTW9kaWZ5V3JpdGUub2xkVmFsdWVS
ZWYoKTsKKyAgICAgICAgcmV0dXJuIHJlYWRNb2RpZnlXcml0ZTsKICAgICB9CiAgICAgCiAgICAg
ZnVuY3Rpb24gcGFyc2VQb3NzaWJsZVN1ZmZpeCgpCkBAIC00MDYsOSArNDE2LDcgQEAgZnVuY3Rp
b24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAgICAgICAgY2FzZSAiWyI6
IHsKICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgICAg
ICAgICAgICAgICBjb25zdW1lKCJdIik7Ci0gICAgICAgICAgICAgICAgbGVmdCA9IG5ldyBEZXJl
ZmVyZW5jZUV4cHJlc3Npb24oCi0gICAgICAgICAgICAgICAgICAgIHRva2VuLAotICAgICAgICAg
ICAgICAgICAgICBuZXcgQ2FsbEV4cHJlc3Npb24odG9rZW4sICJvcGVyYXRvciZbXSIsIFtdLCBb
bGVmdCwgaW5kZXhdKSk7CisgICAgICAgICAgICAgICAgbGVmdCA9IG5ldyBJbmRleEV4cHJlc3Np
b24odG9rZW4sIGxlZnQsIGluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC00MjAsMTMgKzQyOCwxMCBAQCBmdW5jdGlv
biBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgCiAgICAgZnVuY3Rpb24gZmlu
aXNoUGFyc2luZ1ByZUluY3JlbWVudCh0b2tlbiwgbGVmdCwgZXh0cmFBcmcpCiAgICAgewotICAg
ICAgICBsZXQgcHRyID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4pOwotICAgICAgICBwdHIuYXJn
dW1lbnQgPSBuZXcgTWFrZVB0ckV4cHJlc3Npb24odG9rZW4sIGxlZnQpOwotICAgICAgICBwdHIu
Ym9keSA9IG5ldyBDb21tYUV4cHJlc3Npb24odG9rZW4sIFsKLSAgICAgICAgICAgIGVtaXRJbmNy
ZW1lbnQodG9rZW4sIHB0ciwgZXh0cmFBcmcpLAotICAgICAgICAgICAgbmV3IERlcmVmZXJlbmNl
RXhwcmVzc2lvbih0b2tlbiwgVmFyaWFibGVSZWYud3JhcChwdHIpKQotICAgICAgICBdKTsKLSAg
ICAgICAgcmV0dXJuIHB0cjsKKyAgICAgICAgbGV0IHJlYWRNb2RpZnlXcml0ZSA9IG5ldyBSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uKHRva2VuLCBsZWZ0KTsKKyAgICAgICAgcmVhZE1vZGlmeVdy
aXRlLm5ld1ZhbHVlRXhwID0gZW1pdEluY3JlbWVudCh0b2tlbiwgcmVhZE1vZGlmeVdyaXRlLm9s
ZFZhbHVlUmVmKCksIGV4dHJhQXJnKTsKKyAgICAgICAgcmVhZE1vZGlmeVdyaXRlLnJlc3VsdEV4
cCA9IHJlYWRNb2RpZnlXcml0ZS5uZXdWYWx1ZVJlZigpOworICAgICAgICByZXR1cm4gcmVhZE1v
ZGlmeVdyaXRlOwogICAgIH0KICAgICAKICAgICBmdW5jdGlvbiBwYXJzZVByZUluY3JlbWVudCgp
CkBAIC01ODYsNiArNTkxLDEwIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3Jp
Z2luS2kKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxpc3QucHVzaChlZmZlY3RmdWxFeHBy
ZXNzaW9uKTsKICAgICAgICAgfQorICAgICAgICBpZiAoIWxpc3QubGVuZ3RoKQorICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggc2hvdWxkIG5ldmVyIGJlIHplcm8iKTsKKyAgICAg
ICAgaWYgKGxpc3QubGVuZ3RoID09IDEpCisgICAgICAgICAgICByZXR1cm4gbGlzdFswXTsKICAg
ICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Npb24ob3JpZ2luLCBsaXN0KTsKICAgICB9CiAg
ICAgCkBAIC03NzIsMTUgKzc4MSwzMCBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4s
IG9yaWdpbktpCiAgICAgZnVuY3Rpb24gcGFyc2VGdW5jTmFtZSgpCiAgICAgewogICAgICAgICBp
ZiAodHJ5Q29uc3VtZSgib3BlcmF0b3IiKSkgewotICAgICAgICAgICAgbGV0IHRva2VuID0gdHJ5
Q29uc3VtZSgiKyIsICItIiwgIioiLCAiLyIsICIlIiwgIl4iLCAiJiIsICJ8IiwgIjwiLCAiPiIs
ICI8PSIsICI+PSIsICI9PSIsICIrKyIsICItLSIsICImIik7Ci0gICAgICAgICAgICBpZiAodG9r
ZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4udGV4dCAhPSAiJiIgfHwgIXRyeUNvbnN1
bWUoIlsiKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRvciIgKyB0b2tlbi50
ZXh0OworICAgICAgICAgICAgbGV0IHRva2VuID0gY29uc3VtZSgiKyIsICItIiwgIioiLCAiLyIs
ICIlIiwgIl4iLCAiJiIsICJ8IiwgIjwiLCAiPiIsICI8PSIsICI+PSIsICI9PSIsICIrKyIsICIt
LSIsICImIiwgIi4iLCAifiIsICI8PCIsICI+PiIsICJbIik7CisgICAgICAgICAgICBpZiAodG9r
ZW4udGV4dCA9PSAiJiIpIHsKKyAgICAgICAgICAgICAgICBpZiAodHJ5Q29uc3VtZSgiWyIpKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIl0iKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJvcGVyYXRvciZbXSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICh0cnlDb25zdW1lKCIuIikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAib3BlcmF0
b3ImLiIgKyBjb25zdW1lS2luZCgiaWRlbnRpZmllciIpLnRleHQ7CisgICAgICAgICAgICAgICAg
cmV0dXJuICJvcGVyYXRvciYiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRva2Vu
LnRleHQgPT0gIi4iKSB7CisgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICJvcGVyYXRvci4i
ICsgY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKS50ZXh0OworICAgICAgICAgICAgICAgIGlmICh0
cnlDb25zdW1lKCI9IikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPSI7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICh0b2tlbi50ZXh0ID09ICJbIikgewogICAgICAgICAgICAgICAgIGNvbnN1bWUoIl0iKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9yJltdIjsKKyAgICAgICAgICAgICAgICBsZXQg
cmVzdWx0ID0gIm9wZXJhdG9yW10iOworICAgICAgICAgICAgICAgIGlmICh0cnlDb25zdW1lKCI9
IikpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPSI7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxldCBuYW1lID0gY29u
c3VtZUtpbmQoImlkZW50aWZpZXIiKTsKLSAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3IgIiAr
IG5hbWU7CisgICAgICAgICAgICByZXR1cm4gIm9wZXJhdG9yIiArIHRva2VuLnRleHQ7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIikudGV4dDsKICAg
ICB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMJKHJldmlz
aW9uIDIyMjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDIwICsyNywzNiBAQAogZnVuY3Rpb24gcHJlcGFyZShvcmln
aW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBuZXcgUHJv
Z3JhbSgpOworICAgIAogICAgIHBhcnNlKHByb2dyYW0sICIvaW50ZXJuYWwvc3RkbGliIiwgIm5h
dGl2ZSIsIDI3LCBzdGFuZGFyZExpYnJhcnkpOwogICAgIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwg
InVzZXIiLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KTsKLSAgICByZXNvbHZlTmFtZXMocHJvZ3Jh
bSk7Ci0gICAgcmVzb2x2ZVR5cGVEZWZzKHByb2dyYW0pOworICAgIAorICAgIGxldCBuYW1lUmVz
b2x2ZXIgPSBjcmVhdGVOYW1lUmVzb2x2ZXIocHJvZ3JhbSk7CisgICAgcmVzb2x2ZU5hbWVzSW5U
eXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIHJlc29sdmVOYW1lc0luUHJvdG9jb2xz
KHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CisgICAgcmVzb2x2ZVR5cGVEZWZzSW5UeXBlcyhwcm9n
cmFtKTsKKyAgICByZXNvbHZlVHlwZURlZnNJblByb3RvY29scyhwcm9ncmFtKTsKKyAgICAvLyBG
SVhNRTogTmVlZCB0byB2ZXJpZnkgdGhhdCBzdHJ1Y3RyZSBhcmUgbm90IGN5Y2xpYy4KKyAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MDQ0CisgICAgc3lu
dGhlc2l6ZVN0cnVjdEFjY2Vzc29ycyhwcm9ncmFtKTsKKyAgICByZXNvbHZlTmFtZXNJbkZ1bmN0
aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOworICAgIHJlc29sdmVUeXBlRGVmc0luRnVuY3Rp
b25zKHByb2dyYW0pOworICAgIAogICAgIGZsYXR0ZW5Qcm90b2NvbEV4dGVuZHMocHJvZ3JhbSk7
CiAgICAgY2hlY2socHJvZ3JhbSk7CiAgICAgY2hlY2tMaXRlcmFsVHlwZXMocHJvZ3JhbSk7Cisg
ICAgcmVzb2x2ZVByb3BlcnRpZXMocHJvZ3JhbSk7CisgICAgZmluZEhpZ2hab21iaWVzKHByb2dy
YW0pOworICAgIGNoZWNrTGl0ZXJhbFR5cGVzKHByb2dyYW0pOwogICAgIGNoZWNrUHJvZ3JhbVdy
YXBwZWQocHJvZ3JhbSk7CiAgICAgY2hlY2tSZXR1cm5zKHByb2dyYW0pOwogICAgIGNoZWNrVW5y
ZWFjaGFibGVDb2RlKHByb2dyYW0pOwogICAgIGNoZWNrTG9vcHMocHJvZ3JhbSk7CiAgICAgY2hl
Y2tSZWN1cnNpb24ocHJvZ3JhbSk7CiAgICAgY2hlY2tQcm9ncmFtV3JhcHBlZChwcm9ncmFtKTsK
KyAgICBmaW5kSGlnaFpvbWJpZXMocHJvZ3JhbSk7CiAgICAgaW5saW5lKHByb2dyYW0pOworICAg
IAogICAgIHJldHVybiBwcm9ncmFtOwogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9Qcm9ncmFtLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Byb2dyYW0uanMJKHJldmlzaW9uIDIyMjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Byb2dyYW0uanMJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDEwIEBA
IGNsYXNzIFByb2dyYW0gZXh0ZW5kcyBOb2RlIHsKICAgICAgICAgdGhpcy5fdHlwZXMgPSBuZXcg
TWFwKCk7CiAgICAgICAgIHRoaXMuX3Byb3RvY29scyA9IG5ldyBNYXAoKTsKICAgICAgICAgdGhp
cy5fZnVuY0luc3RhbnRpYXRvciA9IG5ldyBGdW5jSW5zdGFudGlhdG9yKHRoaXMpOworICAgICAg
ICB0aGlzLl9nbG9iYWxOYW1lQ29udGV4dCA9IG5ldyBOYW1lQ29udGV4dCgpOworICAgICAgICB0
aGlzLl9nbG9iYWxOYW1lQ29udGV4dC5wcm9ncmFtID0gdGhpczsKKyAgICAgICAgdGhpcy5fZ2xv
YmFsTmFtZUNvbnRleHQucmVjb2duaXplSW50cmluc2ljcygpOworICAgICAgICB0aGlzLmludHJp
bnNpY3MgPSB0aGlzLl9nbG9iYWxOYW1lQ29udGV4dC5pbnRyaW5zaWNzOwogICAgIH0KICAgICAK
ICAgICBnZXQgdG9wTGV2ZWxTdGF0ZW1lbnRzKCkgeyByZXR1cm4gdGhpcy5fdG9wTGV2ZWxTdGF0
ZW1lbnRzOyB9CkBAIC00MCw2ICs0NCw3IEBAIGNsYXNzIFByb2dyYW0gZXh0ZW5kcyBOb2RlIHsK
ICAgICBnZXQgdHlwZXMoKSB7IHJldHVybiB0aGlzLl90eXBlczsgfQogICAgIGdldCBwcm90b2Nv
bHMoKSB7IHJldHVybiB0aGlzLl9wcm90b2NvbHM7IH0KICAgICBnZXQgZnVuY0luc3RhbnRpYXRv
cigpIHsgcmV0dXJuIHRoaXMuX2Z1bmNJbnN0YW50aWF0b3I7IH0KKyAgICBnZXQgZ2xvYmFsTmFt
ZUNvbnRleHQoKSB7IHJldHVybiB0aGlzLl9nbG9iYWxOYW1lQ29udGV4dDsgfQogICAgIAogICAg
IGFkZChzdGF0ZW1lbnQpCiAgICAgewpAQCAtNTIsMTAgKzU3LDExIEBAIGNsYXNzIFByb2dyYW0g
ZXh0ZW5kcyBOb2RlIHsKICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQgaW5zdGFuY2VvZiBU
eXBlKQogICAgICAgICAgICAgdGhpcy5fdHlwZXMuc2V0KHN0YXRlbWVudC5uYW1lLCBzdGF0ZW1l
bnQpOwogICAgICAgICBlbHNlIGlmIChzdGF0ZW1lbnQgaW5zdGFuY2VvZiBQcm90b2NvbCkKLSAg
ICAgICAgICAgIHRoaXMuX3Byb3RvY29scy5zZXQoc3RhdGVtZW50LmFkZCwgc3RhdGVtZW50KTsK
KyAgICAgICAgICAgIHRoaXMuX3Byb3RvY29scy5zZXQoc3RhdGVtZW50Lm5hbWUsIHN0YXRlbWVu
dCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiU3RhdGVtZW50
IGlzIG5vdCBhIGZ1bmN0aW9uIG9yIHR5cGU6ICIgKyBzdGF0ZW1lbnQpOwogICAgICAgICB0aGlz
Ll90b3BMZXZlbFN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpOworICAgICAgICB0aGlzLl9nbG9i
YWxOYW1lQ29udGV4dC5hZGQoc3RhdGVtZW50KTsKICAgICB9CiAgICAgCiAgICAgdG9TdHJpbmco
KQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1By
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24g
ZXh0ZW5kcyBFeHByZXNzaW9uIHsKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGJhc2UpCisgICAg
eworICAgICAgICBzdXBlcihvcmlnaW4pOworICAgICAgICB0aGlzLmJhc2UgPSBiYXNlOworICAg
IH0KKyAgICAKKyAgICBnZXQgcmVzdWx0VHlwZSgpIHsgcmV0dXJuIHRoaXMucmVzdWx0VHlwZUZv
ckdldCA/IHRoaXMucmVzdWx0VHlwZUZvckdldCA6IHRoaXMucmVzdWx0VHlwZUZvckFuZDsgfQor
ICAgIAorICAgIHJld3JpdGVBZnRlckNsb25pbmcoKQorICAgIHsKKyAgICAgICAgLy8gQXQgdGhp
cyBwb2ludCwgbm9kZS5iYXNlLmlzTFZhbHVlIHdpbGwgb25seSByZXR1cm4gdHJ1ZSBpZiBpdCdz
IHBvc3NpYmxlIHRvIGdldCBhIHBvaW50ZXIgdG8gaXQsCisgICAgICAgIC8vIHNpbmNlIHdlIHdp
bGwgbm8gbG9uZ2VyIHNlZSBhbnkgRG90RXhwcmVzc2lvbnMgb3IgSW5kZXhFeHByZXNzaW9ucy4g
QWxzbywgbm9kZSBpcyBhIG5ld2x5IGNyZWF0ZWQKKyAgICAgICAgLy8gbm9kZSBhbmQgZXZlcnl0
aGluZyBiZW5lYXRoIGl0IGlzIG5ld2x5IGNyZWF0ZWQsIHNvIHdlIGNhbiBlZGl0IGl0IGluLXBs
YWNlLgorICAgICAgICAKKyAgICAgICAgaWYgKCh0aGlzLmJhc2UuaXNMVmFsdWUgfHwgdGhpcy5i
YXNlVHlwZS5pc1JlZikgJiYgdGhpcy5jYWxsRm9yQW5kKQorICAgICAgICAgICAgcmV0dXJuIG5l
dyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odGhpcy5vcmlnaW4sIHRoaXMuY2FsbEZvckFuZCwgdGhp
cy5yZXN1bHRUeXBlLCB0aGlzLmNhbGxGb3JBbmQucmVzdWx0VHlwZS5hZGRyZXNzU3BhY2UpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHRoaXMuY2FsbEZvckdldCkKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLmNhbGxGb3JHZXQ7CisgICAgICAgIAorICAgICAgICBpZiAoIXRoaXMuY2FsbEZvckFu
ZCkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLm9yaWdpbi5vcmlnaW5TdHJpbmcg
KyAiOiBQcm9wZXJ0eSBhY2Nlc3Mgd2l0aG91dCBnZXR0ZXIgYW5kIGFuZGVyOiAiICsgdGhpcyk7
CisgICAgICAgIAorICAgICAgICBsZXQgYW5vblZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZSh0
aGlzLm9yaWdpbiwgdGhpcy5iYXNlVHlwZSk7CisgICAgICAgIHRoaXMuY2FsbEZvckFuZC5hcmd1
bWVudExpc3RbMF0gPSB0aGlzLmJhc2VUeXBlLnVuaWZ5Tm9kZS5hcmd1bWVudEZvckFuZE92ZXJs
b2FkKHRoaXMub3JpZ2luLCBWYXJpYWJsZVJlZi53cmFwKGFub25WYXIpKTsKKyAgICAgICAgcmV0
dXJuIG5ldyBDb21tYUV4cHJlc3Npb24odGhpcy5vcmlnaW4sIFsKKyAgICAgICAgICAgIGFub25W
YXIsCisgICAgICAgICAgICBuZXcgQXNzaWdubWVudCh0aGlzLm9yaWdpbiwgVmFyaWFibGVSZWYu
d3JhcChhbm9uVmFyKSwgdGhpcy5iYXNlLCB0aGlzLmJhc2VUeXBlKSwKKyAgICAgICAgICAgIG5l
dyBEZXJlZmVyZW5jZUV4cHJlc3Npb24odGhpcy5vcmlnaW4sIHRoaXMuY2FsbEZvckFuZCwgdGhp
cy5yZXN1bHRUeXBlLCB0aGlzLmNhbGxGb3JBbmQucmVzdWx0VHlwZS5hZGRyZXNzU3BhY2UpCisg
ICAgICAgIF0pOworICAgIH0KKyAgICAKKyAgICB1cGRhdGVDYWxscygpCisgICAgeworICAgICAg
ICBpZiAodGhpcy5jYWxsRm9yR2V0KQorICAgICAgICAgICAgdGhpcy5jYWxsRm9yR2V0LmFyZ3Vt
ZW50TGlzdFswXSA9IHRoaXMuYmFzZTsKKyAgICAgICAgaWYgKHRoaXMuY2FsbEZvckFuZCkKKyAg
ICAgICAgICAgIHRoaXMuY2FsbEZvckFuZC5hcmd1bWVudExpc3RbMF0gPSB0aGlzLmJhc2VUeXBl
LmFyZ3VtZW50Rm9yQW5kT3ZlcmxvYWQodGhpcy5vcmlnaW4sIHRoaXMuYmFzZSk7CisgICAgICAg
IGlmICh0aGlzLmNhbGxGb3JTZXQpCisgICAgICAgICAgICB0aGlzLmNhbGxGb3JTZXQuYXJndW1l
bnRMaXN0WzBdID0gdGhpcy5iYXNlOworICAgIH0KKyAgICAKKyAgICBlbWl0R2V0KGJhc2UpCisg
ICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy52aXNpdChuZXcgUmV3cml0ZXIoKSk7Cisg
ICAgICAgIHJlc3VsdC5iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0LnVwZGF0ZUNhbGxzKCk7
CisgICAgICAgIHJldHVybiByZXN1bHQucmV3cml0ZUFmdGVyQ2xvbmluZygpOworICAgIH0KKyAg
ICAKKyAgICBlbWl0U2V0KGJhc2UsIHZhbHVlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9
IHRoaXMudmlzaXQobmV3IFJld3JpdGVyKCkpOworICAgICAgICBpZiAoIXJlc3VsdC5jYWxsRm9y
U2V0KQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IodGhpcy5vcmlnaW4ub3JpZ2lu
U3RyaW5nLCAiQ2Fubm90IGVtaXQgc2V0IGJlY2F1c2U6ICIgKyB0aGlzLmVycm9yRm9yU2V0LnR5
cGVFcnJvck1lc3NhZ2UpOworICAgICAgICByZXN1bHQuYmFzZSA9IGJhc2U7CisgICAgICAgIHJl
c3VsdC51cGRhdGVDYWxscygpOworICAgICAgICByZXN1bHQuY2FsbEZvclNldC5hcmd1bWVudExp
c3RbcmVzdWx0LmNhbGxGb3JTZXQuYXJndW1lbnRMaXN0Lmxlbmd0aCAtIDFdID0gdmFsdWU7Cisg
ICAgICAgIHJldHVybiByZXN1bHQuY2FsbEZvclNldDsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3BlcnR5UmVzb2x2ZXIuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvcGVydHlSZXNvbHZlci5qcwkobm9u
ZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9wZXJ0eVJlc29s
dmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFByb3Bl
cnR5UmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBfdmlzaXRSVmFsdWVzV2l0aGluTFZh
bHVlKG5vZGUpCisgICAgeworICAgICAgICBsZXQgdmlzaXQgPSBub2RlID0+IG5vZGUudmlzaXQo
dGhpcyk7CisgICAgICAgIAorICAgICAgICBjbGFzcyBSVmFsdWVGaW5kZXIgeworICAgICAgICAg
ICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHZpc2l0SW5kZXhFeHByZXNzaW9uKG5vZGUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbm9kZS5hcnJheS52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgICAgICB2
aXNpdChub2RlLmluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICB2aXNpdERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2Rl
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZpc2l0KG5vZGUucHRyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmlzaXRJZGVudGl0eUV4cHJlc3Np
b24obm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBub2RlLnRhcmdldC52aXNp
dCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbm9k
ZS52aXNpdChuZXcgUlZhbHVlRmluZGVyKCkpOworICAgIH0KKyAgICAKKyAgICBfdmlzaXRQcm9w
ZXJ0eUFjY2Vzcyhub2RlKQorICAgIHsKKyAgICAgICAgbGV0IG5ld05vZGUgPSBub2RlLnZpc2l0
KG5ldyBOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyKCkpOworICAgICAgICBuZXdOb2RlLnZpc2l0
KHRoaXMpOworICAgICAgICBub2RlLmJlY29tZShuZXdOb2RlKTsKKyAgICB9CisgICAgCisgICAg
dmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl92aXNpdFByb3Bl
cnR5QWNjZXNzKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4RXhwcmVzc2lvbihu
b2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fdmlzaXRQcm9wZXJ0eUFjY2Vzcyhub2RlKTsKKyAg
ICB9CisgICAgCisgICAgX2hhbmRsZVJlYWRNb2RpZnlXcml0ZShub2RlKQorICAgIHsKKyAgICAg
ICAgbGV0IHR5cGUgPSBub2RlLm9sZFZhbHVlVmFyLnR5cGU7CisgICAgICAgIGlmICghdHlwZSkK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCB0eXBlIik7CisgICAgICAgIGxldCBz
aW1wbGVMSFMgPSBub2RlLmxWYWx1ZS52aXNpdChuZXcgTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZl
cigpKTsKKyAgICAgICAgaWYgKHNpbXBsZUxIUy5pc0xWYWx1ZSkgeworICAgICAgICAgICAgaWYg
KCFzaW1wbGVMSFMuYWRkcmVzc1NwYWNlKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiOiBMSFMgd2l0aG91dCBhZGRyZXNzIHNwYWNl
OiAiICsgc2ltcGxlTEhTKTsKKyAgICAgICAgICAgIGxldCBwdHJUeXBlID0gbmV3IFB0clR5cGUo
bm9kZS5vcmlnaW4sIHNpbXBsZUxIUy5hZGRyZXNzU3BhY2UsIHR5cGUpOworICAgICAgICAgICAg
bGV0IHB0clZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwgcHRyVHlwZSk7
CisgICAgICAgICAgICBub2RlLmJlY29tZShuZXcgQ29tbWFFeHByZXNzaW9uKG5vZGUub3JpZ2lu
LCBbCisgICAgICAgICAgICAgICAgbm9kZS5vbGRWYWx1ZVZhciwgbm9kZS5uZXdWYWx1ZVZhciwg
cHRyVmFyLAorICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KAorICAgICAgICAgICAgICAg
ICAgICBub2RlLm9yaWdpbiwgVmFyaWFibGVSZWYud3JhcChwdHJWYXIpLAorICAgICAgICAgICAg
ICAgICAgICBuZXcgTWFrZVB0ckV4cHJlc3Npb24obm9kZS5vcmlnaW4sIHNpbXBsZUxIUyksIHB0
clR5cGUpLAorICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KAorICAgICAgICAgICAgICAg
ICAgICBub2RlLm9yaWdpbiwgbm9kZS5vbGRWYWx1ZVJlZigpLAorICAgICAgICAgICAgICAgICAg
ICBuZXcgRGVyZWZlcmVuY2VFeHByZXNzaW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAocHRyVmFyKSwgdHlwZSwgc2ltcGxlTEhTLmFkZHJl
c3NTcGFjZSksCisgICAgICAgICAgICAgICAgICAgIHR5cGUpLAorICAgICAgICAgICAgICAgIG5l
dyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2RlLm5ld1ZhbHVlUmVmKCksIG5vZGUubmV3VmFs
dWVFeHAsIHR5cGUpLAorICAgICAgICAgICAgICAgIG5ldyBBc3NpZ25tZW50KAorICAgICAgICAg
ICAgICAgICAgICBub2RlLm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgbmV3IERlcmVmZXJl
bmNlRXhwcmVzc2lvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUub3JpZ2luLCBWYXJp
YWJsZVJlZi53cmFwKHB0clZhciksIHR5cGUsIHNpbXBsZUxIUy5hZGRyZXNzU3BhY2UpLAorICAg
ICAgICAgICAgICAgICAgICBub2RlLm5ld1ZhbHVlUmVmKCksIHR5cGUpLAorICAgICAgICAgICAg
ICAgIG5vZGUucmVzdWx0RXhwCisgICAgICAgICAgICBdKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUuYmFzZSwgbm9kZS5sVmFs
dWUuYmFzZVR5cGUpOworICAgICAgICByZXN1bHQubmV3VmFsdWVFeHAgPSBuZXcgQ29tbWFFeHBy
ZXNzaW9uKG5vZGUub3JpZ2luLCBbCisgICAgICAgICAgICBub2RlLm9sZFZhbHVlVmFyLCBub2Rl
Lm5ld1ZhbHVlVmFyLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIG5v
ZGUub2xkVmFsdWVSZWYoKSwgbm9kZS5sVmFsdWUuZW1pdEdldChyZXN1bHQub2xkVmFsdWVSZWYo
KSksIHR5cGUpLAorICAgICAgICAgICAgbmV3IEFzc2lnbm1lbnQobm9kZS5vcmlnaW4sIG5vZGUu
bmV3VmFsdWVSZWYoKSwgbm9kZS5uZXdWYWx1ZUV4cCwgdHlwZSksCisgICAgICAgICAgICBub2Rl
LmxWYWx1ZS5lbWl0U2V0KHJlc3VsdC5vbGRWYWx1ZVJlZigpLCBub2RlLm5ld1ZhbHVlUmVmKCkp
CisgICAgICAgIF0pOworICAgICAgICByZXN1bHQucmVzdWx0RXhwID0gbm9kZS5uZXdWYWx1ZVJl
ZigpOworICAgICAgICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUocmVzdWx0KTsKKyAgICAg
ICAgbm9kZS5iZWNvbWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdmlzaXRSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLm5ld1ZhbHVlRXhwLnZp
c2l0KHRoaXMpOworICAgICAgICBub2RlLnJlc3VsdEV4cC52aXNpdCh0aGlzKTsKKyAgICAgICAg
dGhpcy5fdmlzaXRSVmFsdWVzV2l0aGluTFZhbHVlKG5vZGUubFZhbHVlKTsKKyAgICAgICAgdGhp
cy5faGFuZGxlUmVhZE1vZGlmeVdyaXRlKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEFz
c2lnbm1lbnQobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Zpc2l0UlZhbHVlc1dpdGhpbkxW
YWx1ZShub2RlLmxocyk7CisgICAgICAgIG5vZGUucmhzLnZpc2l0KHRoaXMpOworICAgICAgICAK
KyAgICAgICAgbGV0IHNpbXBsZUxIUyA9IG5vZGUubGhzLnZpc2l0KG5ldyBOb3JtYWxVc2VQcm9w
ZXJ0eVJlc29sdmVyKCkpOworICAgICAgICBpZiAoc2ltcGxlTEhTLmlzTFZhbHVlKSB7CisgICAg
ICAgICAgICBub2RlLmxocy5iZWNvbWUoc2ltcGxlTEhTKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCEobm9kZS5saHMgaW5zdGFuY2VvZiBQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJV
bmV4cGVjdGVkIGxocyB0eXBlOiAiICsgbm9kZS5saHMuY29uc3RydWN0b3IubmFtZSk7CisgICAg
ICAgIAorICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24o
bm9kZS5vcmlnaW4sIG5vZGUubGhzLmJhc2UsIG5vZGUubGhzLmJhc2VUeXBlKTsKKyAgICAgICAg
bGV0IHJlc3VsdFZhciA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwgbm9kZS50
eXBlKTsKKyAgICAgICAgcmVzdWx0Lm5ld1ZhbHVlRXhwID0gbmV3IENvbW1hRXhwcmVzc2lvbihu
b2RlLm9yaWdpbiwgWworICAgICAgICAgICAgcmVzdWx0VmFyLAorICAgICAgICAgICAgbmV3IEFz
c2lnbm1lbnQobm9kZS5vcmlnaW4sIFZhcmlhYmxlUmVmLndyYXAocmVzdWx0VmFyKSwgbm9kZS5y
aHMsIG5vZGUudHlwZSksCisgICAgICAgICAgICBub2RlLmxocy5lbWl0U2V0KHJlc3VsdC5vbGRW
YWx1ZVJlZigpLCBWYXJpYWJsZVJlZi53cmFwKHJlc3VsdFZhcikpCisgICAgICAgIF0pOworICAg
ICAgICByZXN1bHQucmVzdWx0RXhwID0gVmFyaWFibGVSZWYud3JhcChyZXN1bHRWYXIpOworICAg
ICAgICB0aGlzLl9oYW5kbGVSZWFkTW9kaWZ5V3JpdGUocmVzdWx0KTsKKyAgICAgICAgbm9kZS5i
ZWNvbWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdmlzaXRNYWtlUHRyRXhwcmVzc2lvbihu
b2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2RlKTsK
KyAgICAgICAgaWYgKCFub2RlLmxWYWx1ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk5vdCBhbiBsdmFsdWU6ICIg
KyBub2RlLmxWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0TWFrZUFycmF5UmVmRXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNz
aW9uKG5vZGUpOworICAgICAgICBpZiAoIW5vZGUubFZhbHVlLmlzTFZhbHVlKQorICAgICAgICAg
ICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTm90IGFu
IGx2YWx1ZTogIiArIG5vZGUubFZhbHVlKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Byb3RvY29sRGVjbC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanMJKHJldmlzaW9uIDIyMjE2MSkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3RvY29sRGVjbC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtOTcsMTYgKzk3LDE2IEBAIGNsYXNzIFByb3RvY29sRGVjbCBleHRlbmRzIFBy
b3RvY29sIHsKICAgICB7CiAgICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBuZXcgU3Vic3RpdHV0
aW9uKFt0aGlzLl90eXBlVmFyaWFibGVdLCBbdHlwZV0pOwogICAgICAgICBsZXQgc2lnbmF0dXJl
cyA9IHRoaXMuc2lnbmF0dXJlczsKLSAgICAgICAgZm9yIChsZXQgc2lnbmF0dXJlIG9mIHNpZ25h
dHVyZXMpIHsKLSAgICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZS52aXNpdChzdWJzdGl0
dXRpb24pOwotICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gcmVzb2x2ZU92ZXJsb2FkSW1wbChz
aWduYXR1cmUucG9zc2libGVPdmVybG9hZHMsIHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycywgc2ln
bmF0dXJlLnBhcmFtZXRlclR5cGVzLCBzaWduYXR1cmUucmV0dXJuVHl1cGVGb3JPdmVybG9hZFJl
c29sdXRpb24pOworICAgICAgICBmb3IgKGxldCBvcmlnaW5hbFNpZ25hdHVyZSBvZiBzaWduYXR1
cmVzKSB7CisgICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gb3JpZ2luYWxTaWduYXR1cmUudmlz
aXQoc3Vic3RpdHV0aW9uKTsKKyAgICAgICAgICAgIGxldCBvdmVybG9hZCA9IHJlc29sdmVPdmVy
bG9hZEltcGwoc2lnbmF0dXJlLnBvc3NpYmxlT3ZlcmxvYWRzLCBzaWduYXR1cmUudHlwZVBhcmFt
ZXRlcnMsIHNpZ25hdHVyZS5wYXJhbWV0ZXJUeXBlcywgc2lnbmF0dXJlLnJldHVyblR5cGVGb3JP
dmVybG9hZFJlc29sdXRpb24pOwogICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKQotICAg
ICAgICAgICAgICAgIHJldHVybiB7cmVzdWx0OiBmYWxzZSwgcmVhc29uOiAiRGlkIG5vdCBmaW5k
IG1hdGNoaW5nIHNpZ25hdHVyZSBmb3IgIiArIHNpZ25hdHVyZSArICIgd2l0aCB0eXBlICIgKyB0
eXBlICsgKG92ZXJsb2FkLmZhaWx1cmVzLmxlbmd0aCA/ICIgKHRyaWVkOiAiICsgb3ZlcmxvYWQu
ZmFpbHVyZXMuam9pbigiOyAiKSArICIpIiA6ICIiKX07CisgICAgICAgICAgICAgICAgcmV0dXJu
IHtyZXN1bHQ6IGZhbHNlLCByZWFzb246ICJEaWQgbm90IGZpbmQgbWF0Y2hpbmcgc2lnbmF0dXJl
IGZvciAiICsgb3JpZ2luYWxTaWduYXR1cmUgKyAiIChhdCAiICsgb3JpZ2luYWxTaWduYXR1cmUu
b3JpZ2luLm9yaWdpblN0cmluZyArICIpIHdpdGggdHlwZSAiICsgdHlwZSArIChvdmVybG9hZC5m
YWlsdXJlcy5sZW5ndGggPyAiICh0cmllZDogIiArIG92ZXJsb2FkLmZhaWx1cmVzLmpvaW4oIjsg
IikgKyAiKSIgOiAiIil9OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBsZXQgc3Vic3RpdHV0
ZWRSZXR1cm5UeXBlID0gb3ZlcmxvYWQuZnVuYy5yZXR1cm5UeXBlLnN1YnN0aXR1dGVUb1VuaWZp
Y2F0aW9uKAogICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92
ZXJsb2FkLnVuaWZpY2F0aW9uQ29udGV4dCk7CiAgICAgICAgICAgICBpZiAoIXN1YnN0aXR1dGVk
UmV0dXJuVHlwZS5lcXVhbHMoc2lnbmF0dXJlLnJldHVyblR5cGUpKQotICAgICAgICAgICAgICAg
IHJldHVybiB7cmVzdWx0OiBmYWxzZSwgcmVhc29uOiAiUmV0dXJuIHR5cGUgbWlzbWF0Y2ggYmV0
d2VlbiAiICsgc2lnbmF0dXJlLnJldHVyblR5cGUgKyAiIGFuZCAiICsgc3Vic3RpdHV0ZWRSZXR1
cm5UeXBlfTsKKyAgICAgICAgICAgICAgICByZXR1cm4ge3Jlc3VsdDogZmFsc2UsIHJlYXNvbjog
IkF0IHNpZ25hdHVyZSAiICsgb3JpZ2luYWxTaWduYXR1cmUgKyAiIChhdCAiICsgb3JpZ2luYWxT
aWduYXR1cmUub3JpZ2luLm9yaWdpblN0cmluZyArICIpOiByZXR1cm4gdHlwZSBtaXNtYXRjaCBi
ZXR3ZWVuICIgKyBzaWduYXR1cmUucmV0dXJuVHlwZSArICIgYW5kICIgKyBzdWJzdGl0dXRlZFJl
dHVyblR5cGUgKyAiIGluIGZvdW5kIGZ1bmN0aW9uICIgKyBvdmVybG9hZC5mdW5jLnRvRGVjbFN0
cmluZygpfTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4ge3Jlc3VsdDogdHJ1ZX07CiAgICAg
fQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCShyZXZpc2lv
biAyMjIxNjEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxOSBAQCBjbGFzcyBQdHJUeXBlIGV4dGVuZHMgUmVm
ZXJlbmNlVHlwZSB7CiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnVuaWZ5KHVuaWZp
Y2F0aW9uQ29udGV4dCwgb3RoZXIuZWxlbWVudFR5cGUpOwogICAgIH0KICAgICAKKyAgICBhcmd1
bWVudEZvckFuZE92ZXJsb2FkKG9yaWdpbiwgdmFsdWUpCisgICAgeworICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3JpcHQgaXMg
bm90IHZhbGlkIik7CisgICAgfQorICAgIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKG9yaWdp
biwgdHlwZSkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmln
aW5TdHJpbmcsICJQb2ludGVyIHN1YnNjcmlwdCBpcyBub3QgdmFsaWQiKTsKKyAgICB9CisgICAg
cmV0dXJuVHlwZUZyb21BbmRPdmVybG9hZChvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5lbGVtZW50VHlwZTsKKyAgICB9CisKICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAg
ICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZSArICJeICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiBl
eHRlbmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbFZhbHVlLCB0eXBl
ID0gbnVsbCkKKyAgICB7CisgICAgICAgIHN1cGVyKG9yaWdpbik7CisgICAgICAgIHRoaXMuX2xW
YWx1ZSA9IGxWYWx1ZTsKKyAgICAgICAgdGhpcy5vbGRWYWx1ZVZhciA9IG5ldyBBbm9ueW1vdXNW
YXJpYWJsZShvcmlnaW4sIHR5cGUpOworICAgICAgICB0aGlzLm5ld1ZhbHVlVmFyID0gbmV3IEFu
b255bW91c1ZhcmlhYmxlKG9yaWdpbiwgdHlwZSk7CisgICAgICAgIHRoaXMubmV3VmFsdWVFeHAg
PSBudWxsOworICAgICAgICB0aGlzLnJlc3VsdEV4cCA9IG51bGw7CisgICAgfQorICAgIAorICAg
IGdldCBsVmFsdWUoKSB7IHJldHVybiB0aGlzLl9sVmFsdWU7IH0KKyAgICAKKyAgICBvbGRWYWx1
ZVJlZigpIHsgcmV0dXJuIFZhcmlhYmxlUmVmLndyYXAodGhpcy5vbGRWYWx1ZVZhcik7IH0KKyAg
ICBuZXdWYWx1ZVJlZigpIHsgcmV0dXJuIFZhcmlhYmxlUmVmLndyYXAodGhpcy5uZXdWYWx1ZVZh
cik7IH0KKyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIlJNVygi
ICsgdGhpcy5sVmFsdWUgKyAiLCAiICsgdGhpcy5vbGRWYWx1ZVZhciArICIsICIgKyB0aGlzLm5l
d1ZhbHVlVmFyICsgIiwgIiArIHRoaXMubmV3VmFsdWVFeHAgKyAiLCAiICsgdGhpcy5yZXN1bHRF
eHAgKyAiKSI7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9SZXNvbHZlTmFtZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUmVzb2x2ZU5hbWVzLmpzCShyZXZpc2lvbiAyMjIxNjEpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlTmFtZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcg
KzI0LDI4IEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotZnVuY3Rpb24gcmVzb2x2ZU5hbWVzKHBy
b2dyYW0pCitmdW5jdGlvbiBjcmVhdGVOYW1lUmVzb2x2ZXIocHJvZ3JhbSkKIHsKLSAgICBwcm9n
cmFtLnZpc2l0KG5ldyBOYW1lUmVzb2x2ZXIoKSk7CisgICAgcmV0dXJuIG5ldyBOYW1lUmVzb2x2
ZXIocHJvZ3JhbS5nbG9iYWxOYW1lQ29udGV4dCk7CiB9CisKK2Z1bmN0aW9uIHJlc29sdmVOYW1l
c0luVHlwZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAobGV0IHR5cGUgb2Yg
cHJvZ3JhbS50eXBlcy52YWx1ZXMoKSkKKyAgICAgICAgbmFtZVJlc29sdmVyLmRvU3RhdGVtZW50
KHR5cGUpOworfQorCitmdW5jdGlvbiByZXNvbHZlTmFtZXNJblByb3RvY29scyhwcm9ncmFtLCBu
YW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChsZXQgcHJvdG9jb2wgb2YgcHJvZ3JhbS5wcm90b2Nv
bHMudmFsdWVzKCkpCisgICAgICAgIG5hbWVSZXNvbHZlci5kb1N0YXRlbWVudChwcm90b2NvbCk7
Cit9CisKK2Z1bmN0aW9uIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKHByb2dyYW0sIG5hbWVSZXNv
bHZlcikKK3sKKyAgICBmb3IgKGxldCBmdW5jcyBvZiBwcm9ncmFtLmZ1bmN0aW9ucy52YWx1ZXMo
KSkgeworICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmNzKQorICAgICAgICAgICAgbmFtZVJl
c29sdmVyLmRvU3RhdGVtZW50KGZ1bmMpOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlT3ZlcmxvYWRJbXBsLmpzCShyZXZp
c2lvbiAyMjIxNjEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlT3Zl
cmxvYWRJbXBsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAKIGZ1bmN0aW9u
IHJlc29sdmVPdmVybG9hZEltcGwoZnVuY3Rpb25zLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5
cGVzLCByZXR1cm5UeXBlKQogeworICAgIGlmICghZnVuY3Rpb25zKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIk51bGwgZnVuY3Rpb25zOyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJ5
IHRoZSBjYWxsZXIuIik7CisgICAgCiAgICAgbGV0IGZhaWx1cmVzID0gW107CiAgICAgbGV0IHN1
Y2Nlc3NlcyA9IFtdOwogICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3Rpb25zKSB7CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlUHJvcGVydGllcy5q
cwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZl
UHJvcGVydGllcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKKy8vIFRo
aXMgdHVybnMgRG90RXhwcmVzc2lvbiBhbmQgSW5kZXhFeHByZXNzaW9uIGludG8gY2FsbHMgdG8g
Z2V0dGVycyAob3BlcmF0b3IuZmllbGQgYW5kIG9wZXJhdG9yW10pLAorLy8gc2V0dGVycyAob3Bl
cmF0b3IuZmllbGQ9IGFuZCBvcGVyYXRvcltdPSksIGFuZCBhbmRlcnMgKG9wZXJhdG9yJi5maWVs
ZCBhbmQgb3BlcmF0b3ImW10pLiBUaGlzIGludm9sdmVzCisvLyB0cmFuc2Zvcm1pbmcgYXNzaWdu
bWVudHMgYW5kIFJNVydzIHRvIGRvIGx2YWx1ZSBlbXVsYXRpb24uCitmdW5jdGlvbiByZXNvbHZl
UHJvcGVydGllcyhwcm9ncmFtKQoreworICAgIHByb2dyYW0udmlzaXQobmV3IFByb3BlcnR5UmVz
b2x2ZXIoKSk7Cit9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZl
VHlwZURlZnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmVzb2x2ZVR5cGVEZWZzLmpzCShyZXZpc2lvbiAyMjIxNjEpCisrKyBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXNvbHZlVHlwZURlZnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDgg
KzI0LDI2IEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotZnVuY3Rpb24gcmVzb2x2ZVR5cGVEZWZz
KHByb2dyYW0pCitmdW5jdGlvbiByZXNvbHZlVHlwZURlZnNJblR5cGVzKHByb2dyYW0pCiB7Ci0g
ICAgcHJvZ3JhbS52aXNpdChuZXcgVHlwZURlZlJlc29sdmVyKCkpOworICAgIGxldCByZXNvbHZl
ciA9IG5ldyBUeXBlRGVmUmVzb2x2ZXIoKTsKKyAgICBmb3IgKGxldCB0eXBlIG9mIHByb2dyYW0u
dHlwZXMudmFsdWVzKCkpCisgICAgICAgIHR5cGUudmlzaXQocmVzb2x2ZXIpOworfQorCitmdW5j
dGlvbiByZXNvbHZlVHlwZURlZnNJblByb3RvY29scyhwcm9ncmFtKQoreworICAgIGxldCByZXNv
bHZlciA9IG5ldyBUeXBlRGVmUmVzb2x2ZXIoKTsKKyAgICBmb3IgKGxldCBwcm90b2NvbCBvZiBw
cm9ncmFtLnByb3RvY29scy52YWx1ZXMoKSkKKyAgICAgICAgcHJvdG9jb2wudmlzaXQocmVzb2x2
ZXIpOworfQorCitmdW5jdGlvbiByZXNvbHZlVHlwZURlZnNJbkZ1bmN0aW9ucyhwcm9ncmFtKQor
eworICAgIGxldCByZXNvbHZlciA9IG5ldyBUeXBlRGVmUmVzb2x2ZXIoKTsKKyAgICBmb3IgKGxl
dCBmdW5jcyBvZiBwcm9ncmFtLmZ1bmN0aW9ucy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGxl
dCBmdW5jIG9mIGZ1bmNzKQorICAgICAgICAgICAgZnVuYy52aXNpdChyZXNvbHZlcik7CisgICAg
fQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXR1cm5DaGVja2Vy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JldHVybkNo
ZWNrZXIuanMJKHJldmlzaW9uIDIyMjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1JldHVybkNoZWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgY2xh
c3MgUmV0dXJuQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogCiAgICAgX2lzQm9vbENhc3RGcm9t
TGl0ZXJhbFRydWUobm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLmlzQ2FzdCAmJiBu
b2RlLnJldHVyblR5cGUgaW5zdGFuY2VvZiBUeXBlUmVmICYmIG5vZGUucmV0dXJuVHlwZS5lcXVh
bHModGhpcy5fcHJvZ3JhbS5pbnRyaW5zaWNzLmJvb2wpICYmIG5vZGUuYXJndW1lbnRMaXN0Lmxl
bmd0aCA9PSAxICYmIG5vZGUuYXJndW1lbnRMaXN0WzBdLmxpc3QubGVuZ3RoID09IDEgJiYgbm9k
ZS5hcmd1bWVudExpc3RbMF0ubGlzdFswXSBpbnN0YW5jZW9mIEJvb2xMaXRlcmFsICYmIG5vZGUu
YXJndW1lbnRMaXN0WzBdLmxpc3RbMF0udmFsdWU7CisgICAgICAgIHJldHVybiBub2RlLmlzQ2Fz
dCAmJiBub2RlLnJldHVyblR5cGUgaW5zdGFuY2VvZiBUeXBlUmVmICYmIG5vZGUucmV0dXJuVHlw
ZS5lcXVhbHModGhpcy5fcHJvZ3JhbS5pbnRyaW5zaWNzLmJvb2wpICYmIG5vZGUuYXJndW1lbnRM
aXN0Lmxlbmd0aCA9PSAxICYmIG5vZGUuYXJndW1lbnRMaXN0WzBdIGluc3RhbmNlb2YgQm9vbExp
dGVyYWwgJiYgbm9kZS5hcmd1bWVudExpc3RbMF0udmFsdWU7CiAgICAgfQogCiAgICAgdmlzaXRX
aGlsZUxvb3Aobm9kZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3Jp
dGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3Jp
dGVyLmpzCShyZXZpc2lvbiAyMjIxNjEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9SZXdyaXRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDkgQEAKIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBoYXZlIHNlbnNpYmxlIGJlaGF2aW9yIHdoZW4gaXQgZW5jb3VudGVycyBk
ZWZpbml0aW9ucyB0aGF0IGl0IGNhbm5vdCBoYW5kbGUuIFJpZ2h0CiAvLyBub3cgd2UgYXJlIGhh
Y2tpc2hseSBwcmV2ZW50aW5nIHRoaXMgYnkgd3JhcHBpbmcgdGhpbmdzIGluIFR5cGVSZWYuIFRo
YXQncyBwcm9iYWJseSB3cm9uZy4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzYyMDgKLWNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgeworY2xh
c3MgUmV3cml0ZXIgewogICAgIGNvbnN0cnVjdG9yKCkKICAgICB7Ci0gICAgICAgIHN1cGVyKCk7
CiAgICAgICAgIHRoaXMuX21hcHBpbmcgPSBuZXcgTWFwKCk7CiAgICAgfQogICAgIApAQCAtNzMs
NyArNzIsOCBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAg
ICAgIG5vZGUub3JpZ2luLCBub2RlLm5hbWUsCiAgICAgICAgICAgICBub2RlLnJldHVyblR5cGUu
dmlzaXQodGhpcyksCiAgICAgICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzLm1hcChwYXJhbWV0
ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMpKSwKLSAgICAgICAgICAgIG5vZGUucGFyYW1ldGVy
cy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdCh0aGlzKSkpOworICAgICAgICAgICAg
bm9kZS5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMpKSwK
KyAgICAgICAgICAgIG5vZGUuaXNDYXN0KTsKICAgICAgICAgcmVzdWx0LnByb3RvY29sRGVjbCA9
IG5vZGUucHJvdG9jb2xEZWNsOwogICAgICAgICByZXN1bHQucG9zc2libGVPdmVybG9hZHMgPSBu
b2RlLnBvc3NpYmxlT3ZlcmxvYWRzOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTksNyAr
OTksNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAgICAgbGV0
IHJlc3VsdCA9IG5ldyBWYXJpYWJsZURlY2woCiAgICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9k
ZS5uYW1lLAogICAgICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpLAotICAgICAgICAgICAg
bm9kZS5pbml0aWFsaXplciA/IG5vZGUuaW5pdGlhbGl6ZXIudmlzaXQodGhpcykgOiBudWxsKTsK
KyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbml0aWFsaXplciwgdGhpcykpOwogICAgICAg
ICB0aGlzLl9tYXBOb2RlKG5vZGUsIHJlc3VsdCk7CiAgICAgICAgIHJlc3VsdC5lUHRyID0gbm9k
ZS5lUHRyOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTMxLDcgKzEzMSw3IEBAIGNsYXNz
IFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0VHlwZVJlZihub2RlKQog
ICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUeXBlUmVmKG5vZGUub3JpZ2luLCBub2Rl
Lm5hbWUsIG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3VtZW50ID0+IHR5cGVBcmd1bWVu
dC52aXNpdCh0aGlzKSkpOwotICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUu
dHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNp
dChub2RlLnR5cGUsIHRoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAK
QEAgLTE2MywyNCArMTYzLDU0IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2Ug
ewogICAgIHZpc2l0QXNzaWdubWVudChub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9
IG5ldyBBc3NpZ25tZW50KG5vZGUub3JpZ2luLCBub2RlLmxocy52aXNpdCh0aGlzKSwgbm9kZS5y
aHMudmlzaXQodGhpcykpOwotICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUu
dHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNp
dChub2RlLnR5cGUsIHRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICB2aXNpdFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAg
IGxldCByZXN1bHQgPSBuZXcgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihub2RlLm9yaWdpbiwg
bm9kZS5sVmFsdWUudmlzaXQodGhpcykpOworICAgICAgICByZXN1bHQub2xkVmFsdWVWYXIgPSBu
b2RlLm9sZFZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAgICByZXN1bHQubmV3VmFsdWVWYXIg
PSBub2RlLm5ld1ZhbHVlVmFyLnZpc2l0KHRoaXMpOworICAgICAgICByZXN1bHQubmV3VmFsdWVF
eHAgPSBub2RlLm5ld1ZhbHVlRXhwLnZpc2l0KHRoaXMpOworICAgICAgICByZXN1bHQucmVzdWx0
RXhwID0gbm9kZS5yZXN1bHRFeHAudmlzaXQodGhpcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgIAogICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCiAgICAg
ewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbihub2RlLm9y
aWdpbiwgbm9kZS5wdHIudmlzaXQodGhpcykpOwotICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUu
dHlwZSA/IG5vZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3VsdC50eXBl
ID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOworICAgICAgICByZXN1bHQuYWRkcmVzc1Nw
YWNlID0gbm9kZS5hZGRyZXNzU3BhY2U7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ICAgIAorICAgIF9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ocmVzdWx0LCBub2RlKQor
ICAgIHsKKyAgICAgICAgcmVzdWx0LnBvc3NpYmxlR2V0T3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJs
ZUdldE92ZXJsb2FkczsKKyAgICAgICAgcmVzdWx0LnBvc3NpYmxlU2V0T3ZlcmxvYWRzID0gbm9k
ZS5wb3NzaWJsZVNldE92ZXJsb2FkczsKKyAgICAgICAgcmVzdWx0LnBvc3NpYmxlQW5kT3Zlcmxv
YWRzID0gbm9kZS5wb3NzaWJsZUFuZE92ZXJsb2FkczsKKyAgICAgICAgcmVzdWx0LmJhc2VUeXBl
ID0gTm9kZS52aXNpdChub2RlLmJhc2VUeXBlLCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LmNhbGxG
b3JHZXQgPSBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvckdldCwgdGhpcyk7CisgICAgICAgIHJlc3Vs
dC5yZXN1bHRUeXBlRm9yR2V0ID0gTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGVGb3JHZXQsIHRo
aXMpOworICAgICAgICByZXN1bHQuY2FsbEZvckFuZCA9IE5vZGUudmlzaXQobm9kZS5jYWxsRm9y
QW5kLCB0aGlzKTsKKyAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGVGb3JBbmQgPSBOb2RlLnZpc2l0
KG5vZGUucmVzdWx0VHlwZUZvckFuZCwgdGhpcyk7CisgICAgICAgIHJlc3VsdC5jYWxsRm9yU2V0
ID0gTm9kZS52aXNpdChub2RlLmNhbGxGb3JTZXQsIHRoaXMpOworICAgICAgICByZXN1bHQuZXJy
b3JGb3JTZXQgPSBub2RlLmVycm9yRm9yU2V0OworICAgICAgICByZXN1bHQudXBkYXRlQ2FsbHMo
KTsKKyAgICB9CisgICAgCiAgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAg
ICAgICBsZXQgcmVzdWx0ID0gbmV3IERvdEV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuc3Ry
dWN0LnZpc2l0KHRoaXMpLCBub2RlLmZpZWxkTmFtZSk7Ci0gICAgICAgIHJlc3VsdC5zdHJ1Y3RU
eXBlID0gbm9kZS5zdHJ1Y3RUeXBlID8gbm9kZS5zdHJ1Y3RUeXBlLnZpc2l0KHRoaXMpIDogbnVs
bDsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXdyaXRlIGZpZWxkLCBzaW5jZSB0aGlz
IGlzIGEgZGVlcCByZWZlcmVuY2UgZ29pbmcgb3V0IG9mIHRoZSBmdW5jdGlvbi4KLSAgICAgICAg
Ly8gQWxzbywgdGhpcyBpcyBzZXQgdXAgZHVyaW5nIGlubGluaW5nLCBzbyB3ZSdyZSBhbHJlYWR5
IGZ1bGx5IG1vbm9tb3JwaGlzZWQuCi0gICAgICAgIHJlc3VsdC5maWVsZCA9IG5vZGUuZmllbGQ7
CisgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihyZXN1bHQsIG5v
ZGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2aXNpdEluZGV4
RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBJbmRleEV4
cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJyYXkudmlzaXQodGhpcyksIG5vZGUuaW5kZXgu
dmlzaXQodGhpcykpOworICAgICAgICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24ocmVzdWx0LCBub2RlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBA
IC0yMTYsNyArMjQ2LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAg
ICAgCiAgICAgdmlzaXRSZXR1cm4obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgUmV0
dXJuKG5vZGUub3JpZ2luLCBub2RlLnZhbHVlID8gbm9kZS52YWx1ZS52aXNpdCh0aGlzKSA6IG51
bGwpOworICAgICAgICByZXR1cm4gbmV3IFJldHVybihub2RlLm9yaWdpbiwgTm9kZS52aXNpdChu
b2RlLnZhbHVlLCB0aGlzKSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0Q29udGludWUobm9kZSkK
QEAgLTI0MSw3ICsyNzEsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
ICAgICB2aXNpdEdlbmVyaWNMaXRlcmFsVHlwZShub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJl
c3VsdCA9IG5ldyBub2RlLmNvbnN0cnVjdG9yKG5vZGUub3JpZ2luLCBub2RlLnZhbHVlKTsKLSAg
ICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBub2RlLnR5cGUudmlzaXQodGhpcykgOiBu
dWxsOworICAgICAgICByZXN1bHQudHlwZSA9IE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsK
ICAgICAgICAgcmVzdWx0LnByZWZlcnJlZFR5cGUgPSBub2RlLnByZWZlcnJlZFR5cGUudmlzaXQo
dGhpcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjYyLDcgKzI5Miw3IEBA
IGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0TnVsbFR5cGUo
bm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgTnVsbFR5cGUobm9kZS5vcmln
aW4pOwotICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5vZGUudHlwZS52aXNpdCh0
aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUs
IHRoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjgxLDcgKzMxMSw3
IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICByZXN1bHQu
cG9zc2libGVPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzOwogICAgICAgICBpZiAo
bm9kZS5pc0Nhc3QpCiAgICAgICAgICAgICByZXN1bHQuc2V0Q2FzdERhdGEobm9kZS5yZXR1cm5U
eXBlLnZpc2l0KHRoaXMpKTsKLSAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBub2RlLnJlc3Vs
dFR5cGUgPyBub2RlLnJlc3VsdFR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXN1
bHQucmVzdWx0VHlwZSA9IE5vZGUudmlzaXQobm9kZS5yZXN1bHRUeXBlLCB0aGlzKTsKICAgICAg
ICAgcmVzdWx0LnJlc3VsdEVQdHIgPSBub2RlLnJlc3VsdEVQdHI7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQpAQCAtMjkxLDcgKzMyMSw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMg
VmlzaXRvckJhc2UgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IENhbGxFeHByZXNzaW9uKAog
ICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUubmFtZSwKICAgICAgICAgICAgIG5vZGUudHlw
ZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3VtZW50ID0+IHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKSks
Ci0gICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdC5tYXAoYXJndW1lbnQgPT4gYXJndW1lbnQu
dmlzaXQodGhpcykpKTsKKyAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVu
dCA9PiBOb2RlLnZpc2l0KGFyZ3VtZW50LCB0aGlzKSkpOwogICAgICAgICByZXR1cm4gdGhpcy5w
cm9jZXNzRGVyaXZlZENhbGxEYXRhKG5vZGUsIHJlc3VsdCk7CiAgICAgfQogICAgIApAQCAtMjk5
LDcgKzMyOSw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHsK
ICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBGdW5jdGlvbkxpa2VCbG9jaygKICAgICAgICAgICAg
IG5vZGUub3JpZ2luLAotICAgICAgICAgICAgbm9kZS5yZXR1cm5UeXBlID8gbm9kZS5yZXR1cm5U
eXBlLnZpc2l0KHRoaXMpIDogbnVsbCwKKyAgICAgICAgICAgIE5vZGUudmlzaXQobm9kZS5yZXR1
cm5UeXBlLCB0aGlzKSwKICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVu
dCA9PiBhcmd1bWVudC52aXNpdCh0aGlzKSksCiAgICAgICAgICAgICBub2RlLnBhcmFtZXRlcnMu
bWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQodGhpcykpLAogICAgICAgICAgICAgbm9k
ZS5ib2R5LnZpc2l0KHRoaXMpKTsKQEAgLTMyMyw3ICszNTMsNyBAQCBjbGFzcyBSZXdyaXRlciBl
eHRlbmRzIFZpc2l0b3JCYXNlIHsKIAogICAgIHZpc2l0SWZTdGF0ZW1lbnQobm9kZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBuZXcgSWZTdGF0ZW1lbnQobm9kZS5vcmlnaW4sIG5vZGUuY29uZGl0
aW9uYWwudmlzaXQodGhpcyksIG5vZGUuYm9keS52aXNpdCh0aGlzKSwgbm9kZS5lbHNlQm9keSA/
IG5vZGUuZWxzZUJvZHkudmlzaXQodGhpcykgOiB1bmRlZmluZWQpOworICAgICAgICByZXR1cm4g
bmV3IElmU3RhdGVtZW50KG5vZGUub3JpZ2luLCBub2RlLmNvbmRpdGlvbmFsLnZpc2l0KHRoaXMp
LCBub2RlLmJvZHkudmlzaXQodGhpcyksIE5vZGUudmlzaXQobm9kZS5lbHNlQm9keSwgdGhpcykp
OwogICAgIH0KIAogICAgIHZpc2l0V2hpbGVMb29wKG5vZGUpCkBAIC0zMzksMjIgKzM2OSwyNCBA
QCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICB2aXNpdEZvckxvb3Ao
bm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgRm9yTG9vcChub2RlLm9yaWdpbiwKLSAg
ICAgICAgICAgIG5vZGUuaW5pdGlhbGl6YXRpb24gPyBub2RlLmluaXRpYWxpemF0aW9uLnZpc2l0
KHRoaXMpIDogdW5kZWZpbmVkLAotICAgICAgICAgICAgbm9kZS5jb25kaXRpb24gPyBub2RlLmNv
bmRpdGlvbi52aXNpdCh0aGlzKSA6IHVuZGVmaW5lZCwKLSAgICAgICAgICAgIG5vZGUuaW5jcmVt
ZW50ID8gbm9kZS5pbmNyZW1lbnQudmlzaXQodGhpcykgOiB1bmRlZmluZWQsCisgICAgICAgICAg
ICBOb2RlLnZpc2l0KG5vZGUuaW5pdGlhbGl6YXRpb24sIHRoaXMpLAorICAgICAgICAgICAgTm9k
ZS52aXNpdChub2RlLmNvbmRpdGlvbiwgdGhpcyksCisgICAgICAgICAgICBOb2RlLnZpc2l0KG5v
ZGUuaW5jcmVtZW50LCB0aGlzKSwKICAgICAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKSk7
CiAgICAgfQogICAgIAotICAgIHZpc2l0TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHZpc2l0QW5v
bnltb3VzVmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTGV0
RXhwcmVzc2lvbihub2RlLm9yaWdpbik7Ci0gICAgICAgIHJlc3VsdC5pbmRleCA9IG5vZGUuaW5k
ZXg7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRo
aXMpIDogbnVsbDsKLSAgICAgICAgcmVzdWx0LmFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudC52aXNp
dCh0aGlzKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2Rl
Lm9yaWdpbiwgbm9kZS50eXBlLnZpc2l0KHRoaXMpKTsKKyAgICAgICAgcmVzdWx0Ll9pbmRleCA9
IG5vZGUuX2luZGV4OwogICAgICAgICB0aGlzLl9tYXBOb2RlKG5vZGUsIHJlc3VsdCk7Ci0gICAg
ICAgIHJlc3VsdC5ib2R5ID0gbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgICAgICByZXN1bHQu
ZVB0ciA9IG5vZGUuZVB0cjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisg
ICAgdmlzaXRJZGVudGl0eUV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBu
ZXcgSWRlbnRpdHlFeHByZXNzaW9uKG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpKTsKKyAgICB9CiB9
CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExp
YnJhcnkuanMJKHJldmlzaW9uIDIyMjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1N0YW5kYXJkTGlicmFyeS5qcwkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsMTggQEAg
bmF0aXZlIGZsb2F0IG9wZXJhdG9yKihmbG9hdCwgZmxvYXQpOwogbmF0aXZlIGRvdWJsZSBvcGVy
YXRvciooZG91YmxlLCBkb3VibGUpOwogbmF0aXZlIGludCBvcGVyYXRvci8oaW50LCBpbnQpOwog
bmF0aXZlIHVpbnQgb3BlcmF0b3IvKHVpbnQsIHVpbnQpOworbmF0aXZlIGludCBvcGVyYXRvciYo
aW50LCBpbnQpOworbmF0aXZlIGludCBvcGVyYXRvcnwoaW50LCBpbnQpOworbmF0aXZlIGludCBv
cGVyYXRvcl4oaW50LCBpbnQpOworbmF0aXZlIGludCBvcGVyYXRvcn4oaW50KTsKK25hdGl2ZSBp
bnQgb3BlcmF0b3I8PChpbnQsIHVpbnQpOworbmF0aXZlIGludCBvcGVyYXRvcj4+KGludCwgdWlu
dCk7CituYXRpdmUgdWludCBvcGVyYXRvciYodWludCwgdWludCk7CituYXRpdmUgdWludCBvcGVy
YXRvcnwodWludCwgdWludCk7CituYXRpdmUgdWludCBvcGVyYXRvcl4odWludCwgdWludCk7Citu
YXRpdmUgdWludCBvcGVyYXRvcn4odWludCk7CituYXRpdmUgdWludCBvcGVyYXRvcjw8KHVpbnQs
IHVpbnQpOworbmF0aXZlIHVpbnQgb3BlcmF0b3I+Pih1aW50LCB1aW50KTsKIG5hdGl2ZSBmbG9h
dCBvcGVyYXRvci8oZmxvYXQsIGZsb2F0KTsKIG5hdGl2ZSBkb3VibGUgb3BlcmF0b3IvKGRvdWJs
ZSwgZG91YmxlKTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPT0oaW50LCBpbnQpOwpAQCAtODksNiAr
MTAxLDM1IEBAIG5hdGl2ZSBib29sIG9wZXJhdG9yPj0odWludCwgdWludCk7CiBuYXRpdmUgYm9v
bCBvcGVyYXRvcj49KGZsb2F0LCBmbG9hdCk7CiBuYXRpdmUgYm9vbCBvcGVyYXRvcj49KGRvdWJs
ZSwgZG91YmxlKTsKIAorYm9vbCBvcGVyYXRvciYoYm9vbCBhLCBib29sIGIpCit7CisgICAgaWYg
KGEpCisgICAgICAgIHJldHVybiBiOworICAgIHJldHVybiBmYWxzZTsKK30KK2Jvb2wgb3BlcmF0
b3J8KGJvb2wgYSwgYm9vbCBiKQoreworICAgIGlmIChhKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoYikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Ym9vbCBvcGVyYXRvcl4oYm9vbCBhLCBib29sIGIpCit7CisgICAgaWYgKGEpCisgICAgICAgIHJl
dHVybiAhYjsKKyAgICByZXR1cm4gYjsKK30KK2Jvb2wgb3BlcmF0b3J+KGJvb2wgdmFsdWUpCit7
CisgICAgcmV0dXJuICF2YWx1ZTsKK30KKworcHJvdG9jb2wgQWRkYWJsZSB7CisgICAgQWRkYWJs
ZSBvcGVyYXRvcisoQWRkYWJsZSwgQWRkYWJsZSk7Cit9CisKIHByb3RvY29sIEVxdWF0YWJsZSB7
CiAgICAgYm9vbCBvcGVyYXRvcj09KEVxdWF0YWJsZSwgRXF1YXRhYmxlKTsKIH0KQEAgLTExMyw0
ICsxNTQsMTQgQEAgbmF0aXZlIHRocmVhZCBUXiBvcGVyYXRvciZbXTxUPih0aHJlYWQgVAogbmF0
aXZlIHRocmVhZGdyb3VwIFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPih0aHJlYWRncm91cCBU
W10sIHVpbnQpOwogbmF0aXZlIGRldmljZSBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4oZGV2
aWNlIFRbXSwgdWludCk7CiBuYXRpdmUgY29uc3RhbnQgVF4gb3BlcmF0b3ImW108VDpwcmltaXRp
dmU+KGNvbnN0YW50IFRbXSwgdWludCk7CisKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxU
Pih0aHJlYWQgVFtdKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOnByaW1pdGl2ZT4o
dGhyZWFkZ3JvdXAgVFtdKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOnByaW1pdGl2
ZT4oZGV2aWNlIFRbXSk7CituYXRpdmUgdWludCBvcGVyYXRvci5sZW5ndGg8VDpwcmltaXRpdmU+
KGNvbnN0YW50IFRbXSk7CisKK3VpbnQgb3BlcmF0b3IubGVuZ3RoPFQsIHVpbnQgbGVuZ3RoPihU
W2xlbmd0aF0pCit7CisgICAgcmV0dXJuIGxlbmd0aDsKK30KIGA7CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIuanMJKHJl
dmlzaW9uIDIyMjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdExh
eW91dEJ1aWxkZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTU5LDUgKzU5LDExIEBAIGNsYXNzIFN0
cnVjdExheW91dEJ1aWxkZXIgZXh0ZW5kcyBWaXNpdG8KICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiVHlwZSBkb2VzIG5vdCBoYXZlIHNpemU6ICIgKyBub2RlLnR5cGUpOwogICAgICAgICB0
aGlzLl9vZmZzZXQgKz0gc2l6ZTsKICAgICB9CisgICAgCisgICAgdmlzaXROYXRpdmVGdW5jSW5z
dGFuY2Uobm9kZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0TmF0aXZlRnVuY0luc3RhbmNl
KG5vZGUpOworICAgICAgICBub2RlLmZ1bmMuZGlkTGF5b3V0U3RydWN0c0luSW1wbGVtZW50YXRp
b25EYXRhKG5vZGUuaW1wbGVtZW50YXRpb25EYXRhKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkocmV2aXNpb24gMjIyMTYx
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsMjEgKzU3LDI5IEBAIGNsYXNzIFN0cnVjdFR5cGUgZXh0ZW5kcyBUeXBl
IHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgaW5zdGFudGlhdGUo
dHlwZUFyZ3VtZW50cywgbW9kZSkKKyAgICBpbnN0YW50aWF0ZSh0eXBlQXJndW1lbnRzID0gbnVs
bCkKICAgICB7Ci0gICAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSB0aGlzLnR5cGVQ
YXJhbWV0ZXJzLmxlbmd0aCkKLSAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdp
bi5vcmlnaW5TdHJpbmcsICJXcm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgdG8gaW5zdGFu
dGlhdGlvbiIpOworICAgICAgICBsZXQgc3Vic3RpdHV0aW9uID0gbnVsbDsKKyAgICAgICAgbGV0
IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy50eXBlUGFyYW1ldGVyczsKICAgICAgICAgCi0gICAgICAg
IGlmICghdHlwZUFyZ3VtZW50cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgaWYgKHR5cGVBcmd1bWVudHMpIHsKKyAgICAgICAgICAgIGlmICh0eXBlQXJndW1lbnRz
Lmxlbmd0aCAhPSB0aGlzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcihvcmlnaW4ub3JpZ2luU3RyaW5nLCAiV3JvbmcgbnVtYmVyIG9m
IHR5cGUgYXJndW1lbnRzIHRvIGluc3RhbnRpYXRpb24iKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCF0eXBlQXJndW1lbnRzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3Vic3RpdHV0aW9uID0gbmV3IFN1YnN0
aXR1dGlvbih0aGlzLnR5cGVQYXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKTsKKyAgICAgICAgICAg
IHR5cGVQYXJhbWV0ZXJzID0gW107CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGxldCBz
dWJzdGl0dXRpb24gPSBuZXcgU3Vic3RpdHV0aW9uKHRoaXMudHlwZVBhcmFtZXRlcnMsIHR5cGVB
cmd1bWVudHMpOwotICAgICAgICBsZXQgaW5zdGFudGlhdGVJbW1lZGlhdGVzID0gbW9kZSA9PSAi
c2hhbGxvdyIgPyBudWxsIDogbmV3IEluc3RhbnRpYXRlSW1tZWRpYXRlcygpOwotICAgICAgICBs
ZXQgcmVzdWx0ID0gbmV3IFN0cnVjdFR5cGUodGhpcy5vcmlnaW4sIHRoaXMubmFtZSwgW10pOwor
ICAgICAgICBsZXQgaW5zdGFudGlhdGVJbW1lZGlhdGVzID0gbmV3IEluc3RhbnRpYXRlSW1tZWRp
YXRlcygpOworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFN0cnVjdFR5cGUodGhpcy5vcmlnaW4s
IHRoaXMubmFtZSwgdHlwZVBhcmFtZXRlcnMpOwogICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0
aGlzLmZpZWxkcykgewotICAgICAgICAgICAgbGV0IG5ld0ZpZWxkID0gZmllbGQudmlzaXQoc3Vi
c3RpdHV0aW9uKTsKLSAgICAgICAgICAgIGlmIChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpCi0gICAg
ICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0
ZXMpOworICAgICAgICAgICAgbGV0IG5ld0ZpZWxkID0gZmllbGQ7CisgICAgICAgICAgICBpZiAo
c3Vic3RpdHV0aW9uKQorICAgICAgICAgICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQudmlzaXQo
c3Vic3RpdHV0aW9uKTsKKyAgICAgICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQudmlzaXQoaW5z
dGFudGlhdGVJbW1lZGlhdGVzKTsKICAgICAgICAgICAgIHJlc3VsdC5hZGQobmV3RmllbGQpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9TdWJzdGl0dXRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3Vic3RpdHV0aW9uLmpzCShyZXZpc2lvbiAyMjIxNjEpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWJzdGl0dXRpb24uanMJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDYgKzM1LDggQEAgY2xhc3MgU3Vic3RpdHV0aW9uIGV4dGVuZHMgUmV3cml0ZXIg
ewogICAgICAgICAgICAgdGhpcy5fbWFwLnNldChwYXJhbWV0ZXJzW2ldLCBhcmd1bWVudExpc3Rb
aV0pOwogICAgIH0KICAgICAKKyAgICBnZXQgbWFwKCkgeyByZXR1cm4gdGhpcy5fbWFwOyB9Cisg
ICAgCiAgICAgdmlzaXRUeXBlUmVmKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVwbGFjZW1l
bnQgPSB0aGlzLl9tYXAuZ2V0KG5vZGUudHlwZSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TdWZmaXhDYWxsQXNzaWdubWVudC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWZmaXhDYWxsQXNzaWdubWVudC5qcwkocmV2aXNpb24g
MjIyMTYxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3VmZml4Q2FsbEFzc2ln
bm1lbnQuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIFN1ZmZp
eENhbGxBc3NpZ25tZW50IGV4dGVuZHMgRXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3Jp
Z2luLCBuYW1lLCBsaHMpCi0gICAgewotICAgICAgICBzdXBlcihvcmlnaW4pOwotICAgICAgICB0
aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fbGhzID0gbGhzOwotICAgICAgICB0aGlz
LmZ1bmMgPSBudWxsOwotICAgIH0KLSAgICAKLSAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMu
X25hbWU7IH0KLSAgICBnZXQgbGhzKCkgeyByZXR1cm4gdGhpcy5fbGhzOyB9Ci0gICAgCi0gICAg
dG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGhzICsgIiBzdWZmaXggIiAr
IHRoaXMubmFtZTsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwkobm9uZXhp
c3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0
QWNjZXNzb3JzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2Z1bmN0
aW9uIHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3JhbSkKK3sKKyAgICBmb3IgKGxldCB0
eXBlIG9mIHByb2dyYW0udHlwZXMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCEodHlwZSBpbnN0
YW5jZW9mIFN0cnVjdFR5cGUpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAg
ICAgICBmb3IgKGxldCBmaWVsZCBvZiB0eXBlLmZpZWxkcykgeworICAgICAgICAgICAgZnVuY3Rp
b24gY3JlYXRlVHlwZVBhcmFtZXRlcnMoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiB0eXBlLnR5cGVQYXJhbWV0ZXJzLm1hcCgKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZVBhcmFtZXRlciA9PiB0eXBlUGFyYW1ldGVyLnZpc2l0KG5ldyBUeXBlUGFyYW1ldGVyUmV3cml0
ZXIoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlv
biBjcmVhdGVUeXBlQXJndW1lbnRzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHlwZVBhcmFtZXRlcnMubWFwKHR5cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFtZXRlci52
aXNpdChuZXcgQXV0b1dyYXBwZXIoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBmdW5jdGlvbiBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCBp
bXBsZW1lbnRhdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5j
Lmluc3RhbnRpYXRlSW1wbGVtZW50YXRpb24gPSBzdWJzdGl0dXRpb24gPT4geworICAgICAgICAg
ICAgICAgICAgICBsZXQgbmV3VHlwZSA9IHR5cGUuaW5zdGFudGlhdGUobmF0aXZlRnVuYy50eXBl
UGFyYW1ldGVycy5tYXAodHlwZVBhcmFtZXRlciA9PiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsZXQgc3Vic3RpdHV0ZSA9IHN1YnN0aXR1dGlvbi5tYXAuZ2V0KHR5cGVQYXJhbWV0ZXIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJzdGl0dXRlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBzdWJzdGl0dXRlIGZvciB0eXBlIHBh
cmFtZXRlciAiICsgdHlwZVBhcmFtZXRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3Vic3RpdHV0ZTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ge3R5cGU6IG5ld1R5cGUsIGZpZWxkTmFtZTogZmllbGQubmFtZX07CisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBuYXRpdmVGdW5jLnZpc2l0SW1wbGVtZW50
YXRpb25EYXRhID0gKGltcGxlbWVudGF0aW9uRGF0YSwgdmlzaXRvcikgPT4geworICAgICAgICAg
ICAgICAgICAgICAvLyBWaXNpdGluZyB0aGUgdHlwZSBmaXJzdCBlbnN1cmVzIHRoYXQgdGhlIHN0
cnVjdCBsYXlvdXQgYnVpbGRlciBmaWd1cmVzIG91dCB0aGUgZmllbGQncworICAgICAgICAgICAg
ICAgICAgICAvLyBvZmZzZXQuCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uRGF0
YS50eXBlLnZpc2l0KHZpc2l0b3IpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgbmF0aXZlRnVuYy5kaWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEgPSBpbXBs
ZW1lbnRhdGlvbkRhdGEgPT4geworICAgICAgICAgICAgICAgICAgICBsZXQgc3RydWN0U2l6ZSA9
IGltcGxlbWVudGF0aW9uRGF0YS50eXBlLnNpemU7CisgICAgICAgICAgICAgICAgICAgIGlmIChz
dHJ1Y3RTaXplID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIk5vIHN0cnVjdCBzaXplIGZvciAiICsgbmF0aXZlRnVuYyk7CisgICAgICAgICAgICAgICAg
ICAgIGxldCBmaWVsZCA9IGltcGxlbWVudGF0aW9uRGF0YS50eXBlLmZpZWxkQnlOYW1lKGltcGxl
bWVudGF0aW9uRGF0YS5maWVsZE5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxk
KQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmlu
ZCBmaWVsZCIpOworICAgICAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gZmllbGQub2Zmc2V0
OworICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGRTaXplID0gZmllbGQudHlwZS5zaXplOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRTaXplID09IG51bGwpCisgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIGZpZWxkIHNpemUgZm9yICIgKyBuYXRpdmVG
dW5jKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBudWxsKQorICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBvZmZzZXQgZm9yICIgKyBuYXRpdmVG
dW5jKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVu
dGF0aW9uRGF0YS5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVu
dGF0aW9uRGF0YS5zdHJ1Y3RTaXplID0gc3RydWN0U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAg
aW1wbGVtZW50YXRpb25EYXRhLmZpZWxkU2l6ZSA9IGZpZWxkU2l6ZTsKKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bmMuaW1wbGVtZW50YXRpb24gPSAoYXJndW1l
bnRMaXN0LCBub2RlKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jSW5z
dGFuY2UgPSBub2RlLm5hdGl2ZUZ1bmNJbnN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgbGV0
IGltcGxlbWVudGF0aW9uRGF0YSA9IG5hdGl2ZUZ1bmNJbnN0YW5jZS5pbXBsZW1lbnRhdGlvbkRh
dGE7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlt
cGxlbWVudGF0aW9uRGF0YS5vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1l
bnRhdGlvbkRhdGEuc3RydWN0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVu
dGF0aW9uRGF0YS5maWVsZFNpemUpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUZpZWxkVHlwZSgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGUudmlzaXQobmV3
IFN1YnN0aXR1dGlvbih0eXBlLnR5cGVQYXJhbWV0ZXJzLCB0eXBlUGFyYW1ldGVycykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUeXBl
UmVmKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVHlwZVJlZi5pbnN0
YW50aWF0ZSh0eXBlLCBjcmVhdGVUeXBlQXJndW1lbnRzKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBsZXQgaXNDYXN0ID0gZmFsc2U7CisgICAgICAgICAgICBs
ZXQgdHlwZVBhcmFtZXRlcnM7CisgICAgICAgICAgICBsZXQgbmF0aXZlRnVuYzsKKworICAgICAg
ICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmllbGQKKyAgICAgICAgICAgIHR5cGVQYXJh
bWV0ZXJzID0gY3JlYXRlVHlwZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIG5hdGl2ZUZ1bmMg
PSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgICAgICBmaWVsZC5vcmlnaW4sICJvcGVyYXRv
ci4iICsgZmllbGQubmFtZSwgY3JlYXRlRmllbGRUeXBlKCksIHR5cGVQYXJhbWV0ZXJzLAorICAg
ICAgICAgICAgICAgIFtuZXcgRnVuY1BhcmFtZXRlcihmaWVsZC5vcmlnaW4sIG51bGwsIGNyZWF0
ZVR5cGVSZWYoKSldLCBpc0Nhc3QpOworICAgICAgICAgICAgc2V0dXBJbXBsZW1lbnRhdGlvbkRh
dGEobmF0aXZlRnVuYywgKFtiYXNlXSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+
IHsKKyAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoZmll
bGRTaXplKSwgMCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmNvcHlGcm9tKGJhc2UucGx1cyhv
ZmZzZXQpLCBmaWVsZFNpemUpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBUaGUgc2V0dGVyOiBvcGVyYXRvci5maWVsZD0KKyAgICAg
ICAgICAgIHR5cGVQYXJhbWV0ZXJzID0gY3JlYXRlVHlwZVBhcmFtZXRlcnMoKTsKKyAgICAgICAg
ICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgICAgICBmaWVsZC5v
cmlnaW4sICJvcGVyYXRvci4iICsgZmllbGQubmFtZSArICI9IiwgY3JlYXRlVHlwZVJlZigpLCB0
eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIG5l
dyBGdW5jUGFyYW1ldGVyKGZpZWxkLm9yaWdpbiwgbnVsbCwgY3JlYXRlVHlwZVJlZigpKSwKKyAg
ICAgICAgICAgICAgICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIoZmllbGQub3JpZ2luLCBudWxsLCBj
cmVhdGVGaWVsZFR5cGUoKSkKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGlz
Q2FzdCk7CisgICAgICAgICAgICBzZXR1cEltcGxlbWVudGF0aW9uRGF0YShuYXRpdmVGdW5jLCAo
W2Jhc2UsIHZhbHVlXSwgb2Zmc2V0LCBzdHJ1Y3RTaXplLCBmaWVsZFNpemUpID0+IHsKKyAgICAg
ICAgICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEVQdHIobmV3IEVCdWZmZXIoc3RydWN0U2l6ZSks
IDApOworICAgICAgICAgICAgICAgIHJlc3VsdC5jb3B5RnJvbShiYXNlLCBzdHJ1Y3RTaXplKTsK
KyAgICAgICAgICAgICAgICByZXN1bHQucGx1cyhvZmZzZXQpLmNvcHlGcm9tKHZhbHVlLCBmaWVs
ZFNpemUpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAorICAgICAgICAgICAgZnVuY3Rp
b24gc2V0dXBBbmRlcihhZGRyZXNzU3BhY2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdHlwZVBhcmFtZXRlcnMgPSBjcmVhdGVUeXBlUGFyYW1ldGVycygpOworICAgICAgICAgICAg
ICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgICAgICAgICAgZmll
bGQub3JpZ2luLCAib3BlcmF0b3ImLiIgKyBmaWVsZC5uYW1lLCBuZXcgUHRyVHlwZShmaWVsZC5v
cmlnaW4sIGFkZHJlc3NTcGFjZSwgY3JlYXRlRmllbGRUeXBlKCkpLAorICAgICAgICAgICAgICAg
ICAgICB0eXBlUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3IEZ1bmNQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmllbGQub3JpZ2luLCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQ
dHJUeXBlKGZpZWxkLm9yaWdpbiwgYWRkcmVzc1NwYWNlLCBjcmVhdGVUeXBlUmVmKCkpKQorICAg
ICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICBpc0Nhc3QpOworICAgICAg
ICAgICAgICAgIHNldHVwSW1wbGVtZW50YXRpb25EYXRhKG5hdGl2ZUZ1bmMsIChbYmFzZV0sIG9m
ZnNldCwgc3RydWN0U2l6ZSwgZmllbGRTaXplKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGJh
c2UgPSBiYXNlLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5v
cmlnaW5TdHJpbmcsICJOdWxsIGRlcmVmZXJlbmNlIik7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBFUHRyLmJveChiYXNlLnBsdXMob2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgcHJvZ3JhbS5hZGQobmF0aXZlRnVuYyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHNldHVwQW5kZXIoInRocmVhZCIpOworICAgICAgICAg
ICAgaWYgKHR5cGUuaW5zdGFudGlhdGUoKS5pc1ByaW1pdGl2ZSkgeworICAgICAgICAgICAgICAg
IHNldHVwQW5kZXIoInRocmVhZGdyb3VwIik7CisgICAgICAgICAgICAgICAgc2V0dXBBbmRlcigi
ZGV2aWNlIik7CisgICAgICAgICAgICAgICAgc2V0dXBBbmRlcigiY29uc3RhbnQiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UZXN0Lmh0bWwJKHJldmlzaW9uIDIyMjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiwxMyArNiwxNCBAQAog
PHNjcmlwdCBzcmM9IlJlZmVyZW5jZVR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlZh
bHVlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4K
LTxzY3JpcHQgc3JjPSJWaXNpdG9yQmFzZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmV3
cml0ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlZpc2l0b3IuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNy
ZWF0ZUxpdGVyYWxUeXBlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uanMiPjwvc2NyaXB0PgogCiA8c2NyaXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJBbm9ueW1vdXNWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iQXJyYXlSZWZUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJB
cnJheVR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFzc2lnbm1lbnQuanMiPjwvc2Ny
aXB0PgpAQCAtMjAsNyArMjEsNiBAQAogPHNjcmlwdCBzcmM9IkJsb2NrLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJCb29sTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQnJl
YWsuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9IkNhbGxBc3NpZ25tZW50LmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJDYWxsRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iQ2FsbEZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDaGVjay5qcyI+PC9z
Y3JpcHQ+CkBAIC00OCw2ICs0OCw3IEBACiA8c2NyaXB0IHNyYz0iRXZhbHVhdG9yLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJFeHByZXNzaW9uRmluZGVyLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJGaWVsZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iRmluZEhpZ2hab21iaWVz
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGbGF0dGVuUHJvdG9jb2xFeHRlbmRzLmpzIj48
L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGbG9hdExpdGVyYWwuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9IkZsb2F0TGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgpAQCAtNTcsNyArNTgsMTAgQEAK
IDxzY3JpcHQgc3JjPSJGdW5jSW5zdGFudGlhdG9yLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJGdW5jUGFyYW1ldGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGdW5jdGlvbkxpa2VC
bG9jay5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iSGlnaFpvbWJpZUZpbmRlci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iSWRlbnRpdHlFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJJZlN0YXRlbWVudC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iSW5kZXhF
eHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJbmZlclR5cGVzRm9yQ2FsbC5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW5saW5lLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJJbmxpbmVyLmpzIj48L3NjcmlwdD4KQEAgLTgwLDIwICs4NCwyNCBAQAogPHNjcmlwdCBz
cmM9Ik5hdGl2ZUZ1bmNJbnN0YW5jZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTmF0aXZl
VHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZUluc3RhbmNlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJOdWxsTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iTnVsbFR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik92ZXJsb2FkUmVzb2x1dGlv
bkZhaWx1cmUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlBhcnNlLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJQcmVwYXJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJQcm9wZXJ0
eVJlc29sdmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm9ncmFtLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJQcm90b2NvbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUHJv
dG9jb2xEZWNsLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm90b2NvbEZ1bmNEZWNsLmpz
Ij48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm90b2NvbFJlZi5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iUHRyVHlwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVjdXJzaW9uQ2hlY2tl
ci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVzb2x2ZU5hbWVzLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJSZXNvbHZlUHJvcGVydGllcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmVzb2x2
ZVR5cGVEZWZzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXR1cm4uanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IlJldHVybkNoZWNrZXIuanMiPjwvc2NyaXB0PgpAQCAtMTAyLDEyICsx
MTAsMTQgQEAKIDxzY3JpcHQgc3JjPSJTdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJTdHJ1Y3RUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJTdWJz
dGl0dXRpb24uanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9IlN1ZmZpeENhbGxBc3NpZ25tZW50
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJTeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpz
Ij48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJUeXBlRGVmLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJUeXBlRGVmUmVzb2x2ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5cGVPclZh
cmlhYmxlUmVmLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJUeXBlUGFyYW1ldGVyUmV3cml0
ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlR5cGVSZWYuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IlR5cGVWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iVHlwZVZh
cmlhYmxlVHJhY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZWRWYWx1ZS5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVWludExpdGVyYWwuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9IlVpbnRMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+CkBAIC0xMjcsMTIgKzEzNywyOCBA
QAogPHNjcmlwdD4KIGZ1bmN0aW9uIGRvVGVzdEluQnJvd3NlcigpCiB7Ci0gICAgdHJ5IHsKLSAg
ICAgICAgZG9UZXN0KHdpbmRvdyk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBwcmludCgi
RVJST1I6ICIgKyBlLm1lc3NhZ2UpOwotICAgICAgICBwcmludChlLnN0YWNrKTsKKyAgICB2YXIg
dGVzdGVyID0gZG9UZXN0KHdpbmRvdyk7CisgICAgdmFyIGxhc3RUaW1lOworICAgIGZ1bmN0aW9u
IG5leHQoKQorICAgIHsKKyAgICAgICAgdmFyIGJlZm9yZSA9IERhdGUubm93KCk7CisgICAgICAg
IGZvciAoOzspIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaWYgKHRlc3Rl
ci5uZXh0KCkuZG9uZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIHByaW50KCJFUlJPUjogIiArIGUubWVzc2Fn
ZSk7CisgICAgICAgICAgICAgICAgcHJpbnQoZS5zdGFjayk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7Cisg
ICAgICAgICAgICBpZiAobm93IC0gYmVmb3JlID4gMTAwKSB7CisgICAgICAgICAgICAgICAgd2lu
ZG93LnNldFRpbWVvdXQobmV4dCwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgfQorICAgIG5leHQoKTsKIH0KIDwvc2NyaXB0PgogCklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHJldmlzaW9uIDIyMjE2MSkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAgaWYgKHRoaXMud2luZG93KSB7CiAgICAgICAgIHZhciBzcGFuID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibWVzc2FnZXMiKS5hcHBlbmRDaGlsZChzcGFuKTsKICAgICAgICAgc3Bhbi5pbm5l
ckhUTUwgPSB0ZXh0LnJlcGxhY2UoLyAvZywgIiZuYnNwOyIpLnJlcGxhY2UoL1xuL2csICI8YnI+
IikgKyAiPGJyPiI7CisgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLGRvY3VtZW50LmJvZHkuc2Ny
b2xsSGVpZ2h0KTsKICAgICB9OwogICAgIHRoaXMucHJlY2lzZVRpbWUgPSAoKSA9PiBwZXJmb3Jt
YW5jZS5ub3coKSAvIDEwMDA7CiB9IGVsc2UKQEAgLTU3LDYgKzU4LDE0IEBAIGZ1bmN0aW9uIG1h
a2VJbnQocHJvZ3JhbSwgdmFsdWUpCiAgICAgcmV0dXJuIFR5cGVkVmFsdWUuYm94KHByb2dyYW0u
aW50cmluc2ljcy5pbnQzMiwgdmFsdWUpOwogfQogCitmdW5jdGlvbiBjaGVja051bWJlcihwcm9n
cmFtLCByZXN1bHQsIGV4cGVjdGVkKQoreworICAgIGlmICghcmVzdWx0LnR5cGUuaXNOdW1iZXIp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0IHR5cGU7IHJlc3VsdDogIiAr
IHJlc3VsdCk7CisgICAgaWYgKHJlc3VsdC52YWx1ZSAhPSBleHBlY3RlZCkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQ6ICIgKyByZXN1bHQudmFsdWUgKyAiIChleHBlY3Rl
ZCAiICsgZXhwZWN0ZWQgKyAiKSIpOworfQorCiBmdW5jdGlvbiBtYWtlVWludChwcm9ncmFtLCB2
YWx1ZSkKIHsKICAgICByZXR1cm4gVHlwZWRWYWx1ZS5ib3gocHJvZ3JhbS5pbnRyaW5zaWNzLnVp
bnQzMiwgdmFsdWUpOwpAQCAtNDQ4LDEwICs0NTcsMTAgQEAgZnVuY3Rpb24gVEVTVF9kZXZpY2VB
cnJheVN0b3JlSW50TGl0ZXJhbAogZnVuY3Rpb24gVEVTVF9zaW1wbGVQcm90b2NvbCgpCiB7CiAg
ICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBwcm90b2NvbCBBZGRhYmxlIHsKLSAg
ICAgICAgICAgIEFkZGFibGUgb3BlcmF0b3IrKEFkZGFibGUsIEFkZGFibGUpOworICAgICAgICBw
cm90b2NvbCBNeUFkZGFibGUgeworICAgICAgICAgICAgTXlBZGRhYmxlIG9wZXJhdG9yKyhNeUFk
ZGFibGUsIE15QWRkYWJsZSk7CiAgICAgICAgIH0KLSAgICAgICAgVCBhZGQ8VDpBZGRhYmxlPihU
IGEsIFQgYikKKyAgICAgICAgVCBhZGQ8VDpNeUFkZGFibGU+KFQgYSwgVCBiKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gYSArIGI7CiAgICAgICAgIH0KQEAgLTc4MSw3ICs3OTAsNyBA
QCBmdW5jdGlvbiBURVNUX3N0b3JlTnVsbEFycmF5UmVmKCkKICAgICAgICAgKCkgPT4gZG9QcmVw
KGAKICAgICAgICAgICAgIHZvaWQgZm9vKCkgeyBudWxsWzB1XSA9IDQyOyB9CiAgICAgICAgIGAp
LAotICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmlu
ZGV4T2YoIkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCIpICE9IC0xKTsKKyAgICAgICAg
KGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJMSFMg
b2YgYXNzaWdubWVudCBpcyBub3QgYW4gTFZhbHVlIikgIT0gLTEpOwogfQogCiBmdW5jdGlvbiBU
RVNUX3JldHVybk51bGxBcnJheVJlZigpCkBAIC04ODksMTQgKzg5OCwxNCBAQCBmdW5jdGlvbiBU
RVNUX2JhZEludExpdGVyYWxGb3JJbnQoKQogewogICAgIGNoZWNrRmFpbCgKICAgICAgICAgKCkg
PT4gZG9QcmVwKCJ2b2lkIGZvbygpIHsgaW50IHggPSAzMDAwMDAwMDAwOyB9IiksCi0gICAgICAg
IChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7CisgICAgICAgIChlKSA9PiBlIGluc3Rh
bmNlb2YgV1N5bnRheEVycm9yKTsKIH0KIAogZnVuY3Rpb24gVEVTVF9iYWRJbnRMaXRlcmFsRm9y
VWludCgpCiB7CiAgICAgY2hlY2tGYWlsKAogICAgICAgICAoKSA9PiBkb1ByZXAoInZvaWQgZm9v
KCkgeyB1aW50IHggPSA1MDAwMDAwMDAwOyB9IiksCi0gICAgICAgIChlKSA9PiBlIGluc3RhbmNl
b2YgV1R5cGVFcnJvcik7CisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1N5bnRheEVycm9y
KTsKIH0KIAogZnVuY3Rpb24gVEVTVF9iYWRJbnRMaXRlcmFsRm9yRG91YmxlKCkKQEAgLTE1MDUs
MTAgKzE1MTQsMTAgQEAgZnVuY3Rpb24gVEVTVF9pbnRMaXRlcmFsR2VuZXJpYygpCiBmdW5jdGlv
biBURVNUX2ludExpdGVyYWxHZW5lcmljV2l0aFByb3RvY29scygpCiB7CiAgICAgbGV0IHByb2dy
YW0gPSBkb1ByZXAoYAotICAgICAgICBwcm90b2NvbCBDb252ZXJ0aWJsZVRvSW50IHsKLSAgICAg
ICAgICAgIG9wZXJhdG9yIGludChDb252ZXJ0aWJsZVRvSW50KTsKKyAgICAgICAgcHJvdG9jb2wg
TXlDb252ZXJ0aWJsZVRvSW50IHsKKyAgICAgICAgICAgIG9wZXJhdG9yIGludChNeUNvbnZlcnRp
YmxlVG9JbnQpOwogICAgICAgICB9Ci0gICAgICAgIGludCBmb288VDpDb252ZXJ0aWJsZVRvSW50
PihUIHgpIHsgcmV0dXJuIGludCh4KTsgfQorICAgICAgICBpbnQgZm9vPFQ6TXlDb252ZXJ0aWJs
ZVRvSW50PihUIHgpIHsgcmV0dXJuIGludCh4KTsgfQogICAgICAgICBpbnQgYmFyKCkgeyByZXR1
cm4gZm9vKDQyKTsgfQogICAgIGApOwogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiYmFyIiwgW10sIFtdKSwgNDIpOwpAQCAtMTUyNiwxMCArMTUzNSwxMCBAQCBm
dW5jdGlvbiBURVNUX3VpbnRMaXRlcmFsR2VuZXJpYygpCiBmdW5jdGlvbiBURVNUX3VpbnRMaXRl
cmFsR2VuZXJpY1dpdGhQcm90b2NvbHMoKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
LSAgICAgICAgcHJvdG9jb2wgQ29udmVydGlibGVUb1VpbnQgewotICAgICAgICAgICAgb3BlcmF0
b3IgdWludChDb252ZXJ0aWJsZVRvVWludCk7CisgICAgICAgIHByb3RvY29sIE15Q29udmVydGli
bGVUb1VpbnQgeworICAgICAgICAgICAgb3BlcmF0b3IgdWludChNeUNvbnZlcnRpYmxlVG9VaW50
KTsKICAgICAgICAgfQotICAgICAgICB1aW50IGZvbzxUOkNvbnZlcnRpYmxlVG9VaW50PihUIHgp
IHsgcmV0dXJuIHVpbnQoeCk7IH0KKyAgICAgICAgdWludCBmb288VDpNeUNvbnZlcnRpYmxlVG9V
aW50PihUIHgpIHsgcmV0dXJuIHVpbnQoeCk7IH0KICAgICAgICAgdWludCBiYXIoKSB7IHJldHVy
biBmb28oNDJ1KTsgfQogICAgIGApOwogICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImJhciIsIFtdLCBbXSksIDQyKTsKQEAgLTI2MDQsNiArMjYxMyw3NzEgQEAg
ZnVuY3Rpb24gVEVTVF9tYWtlQXJyYXlSZWZGcm9tQXJyYXlSZWYoKQogICAgICAgICAoZSkgPT4g
ZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOwogfQogCitmdW5jdGlvbiBURVNUX3NpbXBsZUxlbmd0
aCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1aW50IGZvbygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRvdWJsZVs3NTRdIGFycmF5OworICAgICAgICAgICAgcmV0
dXJuIChAYXJyYXkpLmxlbmd0aDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrVWludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDc1NCk7Cit9CisK
K2Z1bmN0aW9uIFRFU1Rfbm9uQXJyYXlSZWZBcnJheUxlbmd0aCgpCit7CisgICAgbGV0IHByb2dy
YW0gPSBkb1ByZXAoYAorICAgICAgICB1aW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGRvdWJsZVs3NTRdIGFycmF5OworICAgICAgICAgICAgcmV0dXJuIGFycmF5Lmxlbmd0aDsKKyAg
ICAgICAgfQorICAgIGApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbXSksIDc1NCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfYXNzaWduTGVu
Z3RoKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAg
ICAgICB2b2lkIGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG91YmxlWzc1
NF0gYXJyYXk7CisgICAgICAgICAgICAgICAgKEBhcnJheSkubGVuZ3RoID0gNDI7CisgICAgICAg
ICAgICB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJy
b3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoIkxIUyBvZiBhc3NpZ25tZW50IGlzIG5vdCBhbiBMVmFs
dWUiKSAhPSAtMSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfYXNzaWduTGVuZ3RoSGVscGVyKCkKK3sK
KyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICB2b2lk
IGJhcih0aHJlYWQgZG91YmxlW10gYXJyYXkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYXJyYXkubGVuZ3RoID0gNDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2b2lkIGZv
bygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG91YmxlWzc1NF0gYXJyYXk7Cisg
ICAgICAgICAgICAgICAgYmFyKEBhcnJheSk7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAor
ICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4
T2YoIkNhbm5vdCBlbWl0IHNldCBiZWNhdXNlOiBEaWQgbm90IGZpbmQgYW55IGZ1bmN0aW9ucyBu
YW1lZCBvcGVyYXRvci5sZW5ndGg9IikgIT0gLTEpOworfQorCitmdW5jdGlvbiBURVNUX3NpbXBs
ZUdldHRlcigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBzdHJ1Y3Qg
Rm9vIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICB9CisgICAgICAgIGludCBvcGVyYXRv
ci55KEZvbyBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb28ueDsKKyAgICAg
ICAgfQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIGZvbzsK
KyAgICAgICAgICAgIGZvby54ID0gNzgwNDsKKyAgICAgICAgICAgIHJldHVybiBmb28ueTsKKyAg
ICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFtdKSwgNzgwNCk7Cit9CisKK2Z1bmN0aW9uIFRFU1Rfc2ltcGxlU2V0
dGVyKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb28g
eworICAgICAgICAgICAgaW50IHg7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9yLnko
Rm9vIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby54OworICAgICAgICB9
CisgICAgICAgIEZvbyBvcGVyYXRvci55PShGb28gZm9vLCBpbnQgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvby54ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAg
ICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28gZm9v
OworICAgICAgICAgICAgZm9vLnkgPSA3ODA0OworICAgICAgICAgICAgcmV0dXJuIGZvby54Owor
ICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSwgW10pLCA3ODA0KTsKK30KKworZnVuY3Rpb24gVEVTVF9nZW5lcmlj
QWNjZXNzb3JzKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVj
dCBGb288VD4geworICAgICAgICAgICAgVCB4OworICAgICAgICAgICAgVFszXSB5OworICAgICAg
ICB9CisgICAgICAgIHN0cnVjdCBCYXI8VD4geworICAgICAgICAgICAgVCB4OworICAgICAgICAg
ICAgVCB5OworICAgICAgICB9CisgICAgICAgIEJhcjxUPiBvcGVyYXRvci56PFQ+KEZvbzxUPiBm
b28pCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhcjxUPiByZXN1bHQ7CisgICAgICAgICAgICBy
ZXN1bHQueCA9IGZvby54OworICAgICAgICAgICAgcmVzdWx0LnkgPSBmb28ueVsxXTsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgRm9vPFQ+IG9wZXJhdG9y
Lno9PFQ+KEZvbzxUPiBmb28sIEJhcjxUPiBiYXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
by54ID0gYmFyLng7CisgICAgICAgICAgICBmb28ueVsxXSA9IGJhci55OworICAgICAgICAgICAg
cmV0dXJuIGZvbzsKKyAgICAgICAgfQorICAgICAgICBUIG9wZXJhdG9yLnN1bTxUOkFkZGFibGU+
KEZvbzxUPiBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb28ueCArIGZvby55
WzBdICsgZm9vLnlbMV0gKyBmb28ueVsyXTsKKyAgICAgICAgfQorICAgICAgICBUIG9wZXJhdG9y
LnN1bTxUOkFkZGFibGU+KEJhcjxUPiBiYXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBiYXIueCArIGJhci55OworICAgICAgICB9CisgICAgICAgIG9wZXJhdG9yPFQ+IEJhcjxUPihU
IHgsIFQgeSkKKyAgICAgICAgeworICAgICAgICAgICAgQmFyPFQ+IHJlc3VsdDsKKyAgICAgICAg
ICAgIHJlc3VsdC54ID0geDsKKyAgICAgICAgICAgIHJlc3VsdC55ID0geTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXR1cCh0aHJlYWQgRm9v
PGludD5eIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgZm9vLT54ID0gMTsKKyAgICAgICAg
ICAgIGZvby0+eVswXSA9IDI7CisgICAgICAgICAgICBmb28tPnlbMV0gPSAzOworICAgICAgICAg
ICAgZm9vLT55WzJdID0gNDsKKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdFN1cGVyQmFzaWMo
KQorICAgICAgICB7CisgICAgICAgICAgICBGb288aW50PiBmb287CisgICAgICAgICAgICBzZXR1
cCgmZm9vKTsKKyAgICAgICAgICAgIHJldHVybiBmb28uc3VtOworICAgICAgICB9CisgICAgICAg
IGludCB0ZXN0WlNldHRlckRpZFNldFkoKQorICAgICAgICB7CisgICAgICAgICAgICBGb288aW50
PiBmb287CisgICAgICAgICAgICBmb28ueiA9IEJhcjxpbnQ+KDUzLCA5MzIpOworICAgICAgICAg
ICAgcmV0dXJuIGZvby55WzFdOworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0WlNldHRlcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIGZvby56
ID0gQmFyPGludD4oNTMsIDkzMik7CisgICAgICAgICAgICByZXR1cm4gZm9vLnN1bTsKKyAgICAg
ICAgfQorICAgICAgICBpbnQgdGVzdFpHZXR0ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBG
b288aW50PiBmb287CisgICAgICAgICAgICAvLyBUaGlzIGRlbGliZXJhdGVseSBkb2VzIG5vdCBj
YWxsIHNldHVwKCkganVzdCBzbyB3ZSB0ZXN0IHRoaXMgc3ludGF4LgorICAgICAgICAgICAgZm9v
LnggPSAxOworICAgICAgICAgICAgZm9vLnlbMF0gPSAyOworICAgICAgICAgICAgZm9vLnlbMV0g
PSAzOworICAgICAgICAgICAgZm9vLnlbMl0gPSA0OworICAgICAgICAgICAgcmV0dXJuIGZvby56
LnN1bTsKKyAgICAgICAgfQorICAgICAgICBpbnQgdGVzdExWYWx1ZUVtdWxhdGlvbigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEZvbzxpbnQ+IGZvbzsKKyAgICAgICAgICAgIHNldHVwKCZmb28p
OworICAgICAgICAgICAgZm9vLnoueSAqPSA1OworICAgICAgICAgICAgcmV0dXJuIGZvby5zdW07
CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgInRlc3RTdXBlckJhc2ljIiwgW10sIFtdKSwgMSArIDIgKyAzICsgNCk7CisgICAg
Y2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0WlNldHRlckRpZFNl
dFkiLCBbXSwgW10pLCA5MzIpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAidGVzdFpTZXR0ZXIiLCBbXSwgW10pLCA1MyArIDkzMik7CisgICAgY2hlY2tJbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0WkdldHRlciIsIFtdLCBbXSksIDEg
KyAzKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RM
VmFsdWVFbXVsYXRpb24iLCBbXSwgW10pLCAxICsgMiArIDMgKiA1ICsgNCk7Cit9CisKK2Z1bmN0
aW9uIFRFU1RfYml0U3Vic2NyaXB0QWNjZXNzb3IoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9Q
cmVwKGAKKyAgICAgICAgcHJvdG9jb2wgTXlCaXRtYXNrYWJsZSA6IEVxdWF0YWJsZSB7CisgICAg
ICAgICAgICBNeUJpdG1hc2thYmxlIG9wZXJhdG9yJihNeUJpdG1hc2thYmxlLCBNeUJpdG1hc2th
YmxlKTsKKyAgICAgICAgICAgIE15Qml0bWFza2FibGUgb3BlcmF0b3J8KE15Qml0bWFza2FibGUs
IE15Qml0bWFza2FibGUpOworICAgICAgICAgICAgTXlCaXRtYXNrYWJsZSBvcGVyYXRvcn4oTXlC
aXRtYXNrYWJsZSk7CisgICAgICAgICAgICBNeUJpdG1hc2thYmxlIG9wZXJhdG9yPDwoTXlCaXRt
YXNrYWJsZSwgdWludCk7CisgICAgICAgICAgICBNeUJpdG1hc2thYmxlIG9wZXJhdG9yPj4oTXlC
aXRtYXNrYWJsZSwgdWludCk7CisgICAgICAgICAgICBvcGVyYXRvciBNeUJpdG1hc2thYmxlKGlu
dCk7CisgICAgICAgIH0KKyAgICAgICAgVCBtYXNrRm9yQml0SW5kZXg8VDpNeUJpdG1hc2thYmxl
Pih1aW50IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gVCgxKSA8PCBpbmRl
eDsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJhdG9yW108VDpNeUJpdG1hc2thYmxlPihU
IHZhbHVlLCB1aW50IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYm9vbCh2
YWx1ZSAmIG1hc2tGb3JCaXRJbmRleDxUPihpbmRleCkpOworICAgICAgICB9CisgICAgICAgIFQg
b3BlcmF0b3JbXT08VDpNeUJpdG1hc2thYmxlPihUIHZhbHVlLCB1aW50IGluZGV4LCBib29sIGJp
dCkKKyAgICAgICAgeworICAgICAgICAgICAgVCBtYXNrID0gbWFza0ZvckJpdEluZGV4PFQ+KGlu
ZGV4KTsKKyAgICAgICAgICAgIGlmIChiaXQpCisgICAgICAgICAgICAgICAgdmFsdWUgfD0gbWFz
azsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2YWx1ZSAmPSB+bWFzazsKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICB1aW50IG9wZXJhdG9y
Lmxlbmd0aChpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAzMjsKKyAgICAgICAg
fQorICAgICAgICB1aW50IG9wZXJhdG9yLmxlbmd0aCh1aW50KQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gMzI7CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RJbnRTZXRCaXQzKCkK
KyAgICAgICAgeworICAgICAgICAgICAgaW50IGZvbzsKKyAgICAgICAgICAgIGZvb1szXSA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gZm9vOworICAgICAgICB9CisgICAgICAgIGJvb2wgdGVz
dEludFNldEdldEJpdDUoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZm9vOworICAgICAg
ICAgICAgZm9vWzVdID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmb29bNV07CisgICAgICAg
IH0KKyAgICAgICAgYm9vbCB0ZXN0SW50R2V0Qml0MSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGludCBmb287CisgICAgICAgICAgICByZXR1cm4gZm9vWzFdOworICAgICAgICB9CisgICAgICAg
IGludCB0ZXN0VWludFN1bUJpdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZm9vID0g
NDI7CisgICAgICAgICAgICBpbnQgcmVzdWx0OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSAw
OyBpIDwgZm9vLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZvb1tpXSkKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGludCB0ZXN0VWludFN3YXBCaXRzKCkK
KyAgICAgICAgeworICAgICAgICAgICAgaW50IGZvbyA9IDQyOworICAgICAgICAgICAgZm9yICh1
aW50IGkgPSAwOyBpIDwgZm9vLmxlbmd0aCAvIDI7ICsraSkgeworICAgICAgICAgICAgICAgIGJv
b2wgdG1wID0gZm9vW2ldOworICAgICAgICAgICAgICAgIGZvb1tpXSA9IGZvb1tmb28ubGVuZ3Ro
IC0gaSAtIDFdOworICAgICAgICAgICAgICAgIGZvb1tmb28ubGVuZ3RoIC0gaSAtIDFdID0gdG1w
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZvbzsKKyAgICAgICAgfQorICAg
ICAgICBzdHJ1Y3QgRm9vIHsKKyAgICAgICAgICAgIHVpbnQgZjsKKyAgICAgICAgICAgIHVpbnQg
ZzsKKyAgICAgICAgfQorICAgICAgICBvcGVyYXRvciBGb28odWludCBmLCB1aW50IGcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEZvbyByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQuZiA9IGY7
CisgICAgICAgICAgICByZXN1bHQuZyA9IGc7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgICAgIGludCBvcGVyYXRvci5oKEZvbyBmb28pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpbnQoKGZvby5mICYgMHhmZmZmKSB8ICgoZm9vLmcgJiAweGZmZmYp
IDw8IDE2KSk7CisgICAgICAgIH0KKyAgICAgICAgRm9vIG9wZXJhdG9yLmg9KEZvbyBmb28sIGlu
dCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9vLmYgJj0gfjB4ZmZmZnU7CisgICAg
ICAgICAgICBmb28uZiB8PSB1aW50KHZhbHVlKSAmIDB4ZmZmZjsKKyAgICAgICAgICAgIGZvby5n
ICY9IH4weGZmZmZ1OworICAgICAgICAgICAgZm9vLmcgfD0gKHVpbnQodmFsdWUpID4+IDE2KSAm
IDB4ZmZmZjsKKyAgICAgICAgICAgIHJldHVybiBmb287CisgICAgICAgIH0KKyAgICAgICAgaW50
IHRlc3RMVmFsdWVFbXVsYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBGb28gZm9vOwor
ICAgICAgICAgICAgZm9vLmYgPSA0MjsKKyAgICAgICAgICAgIGZvby5nID0gMzc7CisgICAgICAg
ICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBmb28uaC5sZW5ndGg7ICsraSkKKyAgICAgICAgICAg
ICAgICBmb28uaFtpXSBePSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGludChmb28uZiArIGZv
by5nKTsKKyAgICAgICAgfQorICAgICAgICBzdHJ1Y3QgQmFyIHsKKyAgICAgICAgICAgIEZvbyBh
OworICAgICAgICAgICAgRm9vIGI7CisgICAgICAgIH0KKyAgICAgICAgRm9vIG9wZXJhdG9yLmMo
QmFyIGJhcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvbyh1aW50KGJhci5hLmgp
LCB1aW50KGJhci5iLmgpKTsKKyAgICAgICAgfQorICAgICAgICBCYXIgb3BlcmF0b3IuYz0oQmFy
IGJhciwgRm9vIGZvbykKKyAgICAgICAgeworICAgICAgICAgICAgYmFyLmEuaCA9IGludChmb28u
Zik7CisgICAgICAgICAgICBiYXIuYi5oID0gaW50KGZvby5nKTsKKyAgICAgICAgICAgIHJldHVy
biBiYXI7CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RDcmF6eUxWYWx1ZUVtdWxhdGlvbigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEJhciBiYXI7CisgICAgICAgICAgICBiYXIuYS5mID0g
MTsKKyAgICAgICAgICAgIGJhci5hLmcgPSAyOworICAgICAgICAgICAgYmFyLmIuZiA9IDM7Cisg
ICAgICAgICAgICBiYXIuYi5nID0gNDsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gMDsgaSA8
IGJhci5jLmgubGVuZ3RoOyBpICs9IDIpCisgICAgICAgICAgICAgICAgYmFyLmMuaFtpXSBePSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIGludChiYXIuYS5mICsgYmFyLmEuZyArIGJhci5iLmYg
KyBiYXIuYi5nKTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdEludFNldEJpdDMiLCBbXSwgW10pLCA4KTsKKyAgICBj
aGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0SW50U2V0R2V0Qml0
NSIsIFtdLCBbXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgInRlc3RJbnRHZXRCaXQxIiwgW10sIFtdKSwgZmFsc2UpOworICAgIGNoZWNrSW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFVpbnRTdW1CaXRzIiwgW10sIFtd
KSwgMyk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0
VWludFN3YXBCaXRzIiwgW10sIFtdKSwgMTQwOTI4NjE0NCk7CisgICAgY2hlY2tJbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0TFZhbHVlRW11bGF0aW9uIiwgW10sIFtdKSwg
MTMwOTkxKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRl
c3RDcmF6eUxWYWx1ZUVtdWxhdGlvbiIsIFtdLCBbXSksIDQzNjk2KTsKK30KKworZnVuY3Rpb24g
VEVTVF9uZXN0ZWRTdWJzY3JpcHRMVmFsdWVFbXVsYXRpb25TaW1wbGUoKQoreworICAgIGxldCBw
cm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZvbyB7CisgICAgICAgICAgICBpbnRb
N10gYXJyYXk7CisgICAgICAgIH0KKyAgICAgICAgaW50IG9wZXJhdG9yW10oRm9vIGZvbywgdWlu
dCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZvby5hcnJheVtpbmRleF07
CisgICAgICAgIH0KKyAgICAgICAgRm9vIG9wZXJhdG9yW109KEZvbyBmb28sIHVpbnQgaW5kZXgs
IGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9vLmFycmF5W2luZGV4XSA9IHZh
bHVlOworICAgICAgICAgICAgcmV0dXJuIGZvbzsKKyAgICAgICAgfQorICAgICAgICB1aW50IG9w
ZXJhdG9yLmxlbmd0aChGb28gZm9vKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9v
LmFycmF5Lmxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3VtKEZvbyBmb28pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgICAgICAgZm9yICh1aW50
IGkgPSBmb28ubGVuZ3RoOyBpLS07KQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmb29baV07
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHN0cnVjdCBC
YXIgeworICAgICAgICAgICAgRm9vWzZdIGFycmF5OworICAgICAgICB9CisgICAgICAgIHVpbnQg
b3BlcmF0b3IubGVuZ3RoKEJhciBiYXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBi
YXIuYXJyYXkubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIEZvbyBvcGVyYXRvcltdKEJhciBi
YXIsIHVpbnQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXIuYXJyYXlb
aW5kZXhdOworICAgICAgICB9CisgICAgICAgIEJhciBvcGVyYXRvcltdPShCYXIgYmFyLCB1aW50
IGluZGV4LCBGb28gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhci5hcnJheVtpbmRl
eF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBiYXI7CisgICAgICAgIH0KKyAgICAgICAg
aW50IHN1bShCYXIgYmFyKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsK
KyAgICAgICAgICAgIGZvciAodWludCBpID0gYmFyLmxlbmd0aDsgaS0tOykKKyAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gc3VtKGJhcltpXSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgICAgIHN0cnVjdCBCYXogeworICAgICAgICAgICAgQmFyWzVdIGFycmF5
OworICAgICAgICB9CisgICAgICAgIEJhciBvcGVyYXRvcltdKEJheiBiYXosIHVpbnQgaW5kZXgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXouYXJyYXlbaW5kZXhdOworICAgICAg
ICB9CisgICAgICAgIEJheiBvcGVyYXRvcltdPShCYXogYmF6LCB1aW50IGluZGV4LCBCYXIgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhei5hcnJheVtpbmRleF0gPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBiYXo7CisgICAgICAgIH0KKyAgICAgICAgdWludCBvcGVyYXRvci5s
ZW5ndGgoQmF6IGJheikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhei5hcnJheS5s
ZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgaW50IHN1bShCYXogYmF6KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIGZvciAodWludCBpID0gYmF6
Lmxlbmd0aDsgaS0tOykKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3VtKGJheltpXSk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0VmFs
dWVzKHRocmVhZCBCYXpeIGJheikKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1aW50IGkg
PSBiYXotPmxlbmd0aDsgaS0tOykgeworICAgICAgICAgICAgICAgIGZvciAodWludCBqID0gKF5i
YXopW2ldLmxlbmd0aDsgai0tOykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVpbnQgayA9
ICheYmF6KVtpXVtqXS5sZW5ndGg7IGstLTspCisgICAgICAgICAgICAgICAgICAgICAgICAoXmJh
eilbaV1bal1ba10gPSBpbnQoaSArIGogKyBrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RTZXRWYWx1ZXNBbmRTdW0oKQorICAg
ICAgICB7CisgICAgICAgICAgICBCYXogYmF6OworICAgICAgICAgICAgc2V0VmFsdWVzKCZiYXop
OworICAgICAgICAgICAgcmV0dXJuIHN1bShiYXopOworICAgICAgICB9CisgICAgICAgIGludCB0
ZXN0U2V0VmFsdWVzTXV0YXRlVmFsdWVzQW5kU3VtKCkKKyAgICAgICAgeworICAgICAgICAgICAg
QmF6IGJhejsKKyAgICAgICAgICAgIHNldFZhbHVlcygmYmF6KTsKKyAgICAgICAgICAgIGZvciAo
dWludCBpID0gYmF6Lmxlbmd0aDsgaS0tOykgeworICAgICAgICAgICAgICAgIGZvciAodWludCBq
ID0gYmF6W2ldLmxlbmd0aDsgai0tOykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVpbnQg
ayA9IGJheltpXVtqXS5sZW5ndGg7IGstLTspCisgICAgICAgICAgICAgICAgICAgICAgICBiYXpb
aV1bal1ba10gKj0gaW50KGspOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBzdW0oYmF6KTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFNldFZhbHVlc0FuZFN1bSIs
IFtdLCBbXSksIDE1NzUpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAidGVzdFNldFZhbHVlc011dGF0ZVZhbHVlc0FuZFN1bSIsIFtdLCBbXSksIDU1NjUpOwor
fQorCitmdW5jdGlvbiBURVNUX25lc3RlZFN1YnNjcmlwdExWYWx1ZUVtdWxhdGlvbkdlbmVyaWMo
KQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZvbzxUPiB7
CisgICAgICAgICAgICBUWzddIGFycmF5OworICAgICAgICB9CisgICAgICAgIFQgb3BlcmF0b3Jb
XTxUPihGb288VD4gZm9vLCB1aW50IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZm9vLmFycmF5W2luZGV4XTsKKyAgICAgICAgfQorICAgICAgICBGb288VD4gb3BlcmF0b3Jb
XT08VD4oRm9vPFQ+IGZvbywgdWludCBpbmRleCwgVCB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9vLmFycmF5W2luZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIGZvbzsK
KyAgICAgICAgfQorICAgICAgICB1aW50IG9wZXJhdG9yLmxlbmd0aDxUPihGb288VD4gZm9vKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZm9vLmFycmF5Lmxlbmd0aDsKKyAgICAgICAg
fQorICAgICAgICBwcm90b2NvbCBNeUFkZGFibGUgeworICAgICAgICAgICAgTXlBZGRhYmxlIG9w
ZXJhdG9yKyhNeUFkZGFibGUsIE15QWRkYWJsZSk7CisgICAgICAgIH0KKyAgICAgICAgVCBzdW08
VDpNeUFkZGFibGU+KEZvbzxUPiBmb28pCisgICAgICAgIHsKKyAgICAgICAgICAgIFQgcmVzdWx0
OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSBmb28ubGVuZ3RoOyBpLS07KQorICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSBmb29baV07CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgICAgIHN0cnVjdCBCYXI8VD4geworICAgICAgICAgICAgRm9vPFQ+WzZdIGFy
cmF5OworICAgICAgICB9CisgICAgICAgIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ+KEJhcjxUPiBi
YXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXIuYXJyYXkubGVuZ3RoOworICAg
ICAgICB9CisgICAgICAgIEZvbzxUPiBvcGVyYXRvcltdPFQ+KEJhcjxUPiBiYXIsIHVpbnQgaW5k
ZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXIuYXJyYXlbaW5kZXhdOworICAg
ICAgICB9CisgICAgICAgIEJhcjxUPiBvcGVyYXRvcltdPTxUPihCYXI8VD4gYmFyLCB1aW50IGlu
ZGV4LCBGb288VD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhci5hcnJheVtpbmRl
eF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBiYXI7CisgICAgICAgIH0KKyAgICAgICAg
VCBzdW08VDpNeUFkZGFibGU+KEJhcjxUPiBiYXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIFQg
cmVzdWx0OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSBiYXIubGVuZ3RoOyBpLS07KQorICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSBzdW0oYmFyW2ldKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJhejxUPiB7CisgICAgICAgICAgICBC
YXI8VD5bNV0gYXJyYXk7CisgICAgICAgIH0KKyAgICAgICAgQmFyPFQ+IG9wZXJhdG9yW108VD4o
QmF6PFQ+IGJheiwgdWludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJh
ei5hcnJheVtpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgQmF6PFQ+IG9wZXJhdG9yW109PFQ+
KEJhejxUPiBiYXosIHVpbnQgaW5kZXgsIEJhcjxUPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgYmF6LmFycmF5W2luZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIGJhejsK
KyAgICAgICAgfQorICAgICAgICB1aW50IG9wZXJhdG9yLmxlbmd0aDxUPihCYXo8VD4gYmF6KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmF6LmFycmF5Lmxlbmd0aDsKKyAgICAgICAg
fQorICAgICAgICBUIHN1bTxUOk15QWRkYWJsZT4oQmF6PFQ+IGJheikKKyAgICAgICAgeworICAg
ICAgICAgICAgVCByZXN1bHQ7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IGJhei5sZW5ndGg7
IGktLTspCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN1bShiYXpbaV0pOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBwcm90b2NvbCBNeUNvbnZlcnRp
YmxlRnJvbVVpbnQgeworICAgICAgICAgICAgb3BlcmF0b3IgTXlDb252ZXJ0aWJsZUZyb21VaW50
KHVpbnQpOworICAgICAgICB9CisgICAgICAgIHByb3RvY29sIFNldFZhbHVhYmxlIDogTXlBZGRh
YmxlLCBNeUNvbnZlcnRpYmxlRnJvbVVpbnQgeyB9CisgICAgICAgIHZvaWQgc2V0VmFsdWVzPFQ6
U2V0VmFsdWFibGU+KHRocmVhZCBCYXo8VD5eIGJheikKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yICh1aW50IGkgPSBiYXotPmxlbmd0aDsgaS0tOykgeworICAgICAgICAgICAgICAgIGZvciAo
dWludCBqID0gKF5iYXopW2ldLmxlbmd0aDsgai0tOykgeworICAgICAgICAgICAgICAgICAgICBm
b3IgKHVpbnQgayA9ICheYmF6KVtpXVtqXS5sZW5ndGg7IGstLTspCisgICAgICAgICAgICAgICAg
ICAgICAgICAoXmJheilbaV1bal1ba10gPSBUKGkgKyBqICsgayk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGludCB0ZXN0U2V0VmFsdWVzQW5k
U3VtKCkKKyAgICAgICAgeworICAgICAgICAgICAgQmF6PGludD4gYmF6OworICAgICAgICAgICAg
c2V0VmFsdWVzKCZiYXopOworICAgICAgICAgICAgcmV0dXJuIHN1bShiYXopOworICAgICAgICB9
CisgICAgICAgIGludCB0ZXN0U2V0VmFsdWVzTXV0YXRlVmFsdWVzQW5kU3VtKCkKKyAgICAgICAg
eworICAgICAgICAgICAgQmF6PGludD4gYmF6OworICAgICAgICAgICAgc2V0VmFsdWVzKCZiYXop
OworICAgICAgICAgICAgZm9yICh1aW50IGkgPSBiYXoubGVuZ3RoOyBpLS07KSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1aW50IGogPSBiYXpbaV0ubGVuZ3RoOyBqLS07KSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodWludCBrID0gYmF6W2ldW2pdLmxlbmd0aDsgay0tOykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJheltpXVtqXVtrXSAqPSBpbnQoayk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1bShiYXopOworICAgICAgICB9
CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0
ZXN0U2V0VmFsdWVzQW5kU3VtIiwgW10sIFtdKSwgMTU3NSk7CisgICAgY2hlY2tJbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0U2V0VmFsdWVzTXV0YXRlVmFsdWVzQW5kU3Vt
IiwgW10sIFtdKSwgNTU2NSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfYm9vbEJpdEFuZCgpCit7Cisg
ICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBib29sIGZvbyhib29sIGEsIGJvb2wg
YikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgJiBiOworICAgICAgICB9CisgICAg
YCk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwg
W10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSksIG1ha2VCb29sKHByb2dyYW0sIGZhbHNlKV0p
LCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCB0cnVlKSwgbWFrZUJvb2wocHJvZ3JhbSwgZmFs
c2UpXSksIGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIGZhbHNlKSwgbWFrZUJvb2wocHJvZ3Jh
bSwgdHJ1ZSldKSwgZmFsc2UpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSksIG1ha2VCb29sKHBy
b2dyYW0sIHRydWUpXSksIHRydWUpOworfQorCitmdW5jdGlvbiBURVNUX2Jvb2xCaXRPcigpCit7
CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBib29sIGZvbyhib29sIGEsIGJv
b2wgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgfCBiOworICAgICAgICB9Cisg
ICAgYCk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSksIG1ha2VCb29sKHByb2dyYW0sIGZhbHNl
KV0pLCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCB0cnVlKSwgbWFrZUJvb2wocHJvZ3JhbSwg
ZmFsc2UpXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgZmFsc2UpLCBtYWtlQm9vbChwcm9n
cmFtLCB0cnVlKV0pLCB0cnVlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIHRydWUpLCBtYWtlQm9vbChw
cm9ncmFtLCB0cnVlKV0pLCB0cnVlKTsKK30KKworZnVuY3Rpb24gVEVTVF9ib29sQml0WG9yKCkK
K3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGJvb2wgZm9vKGJvb2wgYSwg
Ym9vbCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSBeIGI7CisgICAgICAgIH0K
KyAgICBgKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIGZhbHNlKSwgbWFrZUJvb2wocHJvZ3JhbSwgZmFs
c2UpXSksIGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VCb29sKHByb2dyYW0sIHRydWUpLCBtYWtlQm9vbChwcm9ncmFt
LCBmYWxzZSldKSwgdHJ1ZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSksIG1ha2VCb29sKHBy
b2dyYW0sIHRydWUpXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUJvb2wocHJvZ3JhbSwgdHJ1ZSksIG1ha2VCb29s
KHByb2dyYW0sIHRydWUpXSksIGZhbHNlKTsKK30KKworZnVuY3Rpb24gVEVTVF9ib29sQml0Tm90
KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGJvb2wgZm9vKGJvb2wg
YSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIH5hOworICAgICAgICB9CisgICAgYCk7
CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlQm9vbChwcm9ncmFtLCBmYWxzZSldKSwgdHJ1ZSk7CisgICAgY2hlY2tCb29sKHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlQm9vbChwcm9ncmFtLCB0
cnVlKV0pLCBmYWxzZSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfaW50Qml0QW5kKCkKK3sKKyAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oaW50IGEsIGludCBiKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAmIGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAg
ICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFr
ZUludChwcm9ncmFtLCAxKSwgbWFrZUludChwcm9ncmFtLCA3KV0pLCAxKTsKKyAgICBjaGVja0lu
dChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9n
cmFtLCA2NTUzNSksIG1ha2VJbnQocHJvZ3JhbSwgNDIpXSksIDQyKTsKKyAgICBjaGVja0ludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFt
LCAtMSksIG1ha2VJbnQocHJvZ3JhbSwgLTcpXSksIC03KTsKKyAgICBjaGVja0ludChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAwKSwg
bWFrZUludChwcm9ncmFtLCA4NTczMildKSwgMCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfaW50Qml0
T3IoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyhpbnQg
YSwgaW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhIHwgYjsKKyAgICAgICAg
fQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDEpLCBtYWtlSW50KHByb2dyYW0sIDcpXSksIDcp
OworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlSW50KHByb2dyYW0sIDY1NTM1KSwgbWFrZUludChwcm9ncmFtLCA0MildKSwgNjU1MzUp
OworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlSW50KHByb2dyYW0sIC0xKSwgbWFrZUludChwcm9ncmFtLCAtNyldKSwgLTEpOworICAg
IGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtl
SW50KHByb2dyYW0sIDApLCBtYWtlSW50KHByb2dyYW0sIDg1NzMyKV0pLCA4NTczMik7Cit9CisK
K2Z1bmN0aW9uIFRFU1RfaW50Qml0WG9yKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChg
CisgICAgICAgIGludCBmb28oaW50IGEsIGludCBiKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYSBeIGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAxKSwgbWFr
ZUludChwcm9ncmFtLCA3KV0pLCA2KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA2NTUzNSksIG1ha2VJbnQo
cHJvZ3JhbSwgNDIpXSksIDY1NDkzKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAtMSksIG1ha2VJbnQocHJv
Z3JhbSwgLTcpXSksIDYpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDApLCBtYWtlSW50KHByb2dyYW0sIDg1
NzMyKV0pLCA4NTczMik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfaW50Qml0Tm90KCkKK3sKKyAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oaW50IGEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiB+YTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dy
YW0sIDEpXSksIC0yKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA2NTUzNSldKSwgLTY1NTM2KTsKKyAgICBj
aGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUlu
dChwcm9ncmFtLCAtMSldKSwgMCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgMCldKSwgLTEpOworfQorCitm
dW5jdGlvbiBURVNUX2ludExTaGlmdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAor
ICAgICAgICBpbnQgZm9vKGludCBhLCB1aW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBhIDw8IGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAxKSwgbWFr
ZVVpbnQocHJvZ3JhbSwgNyldKSwgMTI4KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA2NTUzNSksIG1ha2VV
aW50KHByb2dyYW0sIDIpXSksIDI2MjE0MCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgLTEpLCBtYWtlVWlu
dChwcm9ncmFtLCA1KV0pLCAtMzIpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDApLCBtYWtlVWludChwcm9n
cmFtLCAzKV0pLCAwKTsKK30KKworZnVuY3Rpb24gVEVTVF9pbnRSU2hpZnQoKQoreworICAgIGxl
dCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyhpbnQgYSwgdWludCBiKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSA+PiBiOworICAgICAgICB9CisgICAgYCk7Cisg
ICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21h
a2VJbnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHByb2dyYW0sIDcpXSksIDApOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHBy
b2dyYW0sIDY1NTM1KSwgbWFrZVVpbnQocHJvZ3JhbSwgMildKSwgMTYzODMpOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHBy
b2dyYW0sIC0xKSwgbWFrZVVpbnQocHJvZ3JhbSwgNSldKSwgLTEpOworICAgIGNoZWNrSW50KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0s
IDApLCBtYWtlVWludChwcm9ncmFtLCAzKV0pLCAwKTsKK30KKworZnVuY3Rpb24gVEVTVF91aW50
Qml0QW5kKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHVpbnQgZm9v
KHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAmIGI7Cisg
ICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDEpLCBtYWtlVWludChwcm9ncmFt
LCA3KV0pLCAxKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDY1NTM1KSwgbWFrZVVpbnQocHJvZ3JhbSwg
NDIpXSksIDQyKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIC0xKSwgbWFrZVVpbnQocHJvZ3JhbSwgLTcp
XSksIDQyOTQ5NjcyODkpOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMCksIG1ha2VVaW50KHByb2dyYW0s
IDg1NzMyKV0pLCAwKTsKK30KKworZnVuY3Rpb24gVEVTVF91aW50Qml0T3IoKQoreworICAgIGxl
dCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdWludCBmb28odWludCBhLCB1aW50IGIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhIHwgYjsKKyAgICAgICAgfQorICAgIGApOwor
ICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBb
bWFrZVVpbnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHByb2dyYW0sIDcpXSksIDcpOworICAgIGNo
ZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVp
bnQocHJvZ3JhbSwgNjU1MzUpLCBtYWtlVWludChwcm9ncmFtLCA0MildKSwgNjU1MzUpOworICAg
IGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFr
ZVVpbnQocHJvZ3JhbSwgLTEpLCBtYWtlVWludChwcm9ncmFtLCAtNyldKSwgNDI5NDk2NzI5NSk7
CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10s
IFttYWtlVWludChwcm9ncmFtLCAwKSwgbWFrZVVpbnQocHJvZ3JhbSwgODU3MzIpXSksIDg1NzMy
KTsKK30KKworZnVuY3Rpb24gVEVTVF91aW50Qml0WG9yKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9
IGRvUHJlcChgCisgICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYSBeIGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja1Vp
bnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHBy
b2dyYW0sIDEpLCBtYWtlVWludChwcm9ncmFtLCA3KV0pLCA2KTsKKyAgICBjaGVja1VpbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0s
IDY1NTM1KSwgbWFrZVVpbnQocHJvZ3JhbSwgNDIpXSksIDY1NDkzKTsKKyAgICBjaGVja1VpbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dy
YW0sIC0xKSwgbWFrZVVpbnQocHJvZ3JhbSwgLTcpXSksIDYpOworICAgIGNoZWNrVWludChwcm9n
cmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwg
MCksIG1ha2VVaW50KHByb2dyYW0sIDg1NzMyKV0pLCA4NTczMik7Cit9CisKK2Z1bmN0aW9uIFRF
U1RfdWludEJpdE5vdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1
aW50IGZvbyh1aW50IGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB+YTsKKyAgICAg
ICAgfQorICAgIGApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMSldKSwgNDI5NDk2NzI5NCk7CisgICAg
Y2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtl
VWludChwcm9ncmFtLCA2NTUzNSldKSwgNDI5NDkwMTc2MCk7CisgICAgY2hlY2tVaW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAt
MSldKSwgMCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAwKV0pLCA0Mjk0OTY3Mjk1KTsKK30KKworZnVu
Y3Rpb24gVEVTVF91aW50TFNoaWZ0KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisg
ICAgICAgIHVpbnQgZm9vKHVpbnQgYSwgdWludCBiKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYSA8PCBiOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAxKSwg
bWFrZVVpbnQocHJvZ3JhbSwgNyldKSwgMTI4KTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDY1NTM1KSwg
bWFrZVVpbnQocHJvZ3JhbSwgMildKSwgMjYyMTQwKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIC0xKSwg
bWFrZVVpbnQocHJvZ3JhbSwgNSldKSwgNDI5NDk2NzI2NCk7CisgICAgY2hlY2tVaW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAw
KSwgbWFrZVVpbnQocHJvZ3JhbSwgMyldKSwgMCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfdWludFJT
aGlmdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1aW50IGZvbyh1
aW50IGEsIHVpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPj4gYjsKKyAg
ICAgICAgfQorICAgIGApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgMSksIG1ha2VVaW50KHByb2dyYW0s
IDcpXSksIDApOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgNjU1MzUpLCBtYWtlVWludChwcm9ncmFtLCAy
KV0pLCAxNjM4Myk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAtMSksIG1ha2VVaW50KHByb2dyYW0sIDUp
XSksIDEzNDIxNzcyNyk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFttYWtlVWludChwcm9ncmFtLCAwKSwgbWFrZVVpbnQocHJvZ3JhbSwg
MyldKSwgMCk7Cit9CisKIGZ1bmN0aW9uIFRFU1RfZmxvYXRNYXRoKCkKIHsKICAgICBsZXQgcHJv
Z3JhbSA9IGRvUHJlcChgCkBAIC0yNzkyLDYgKzM1NjYsMjkgQEAgZnVuY3Rpb24gVEVTVF9mbG9h
dE1hdGgoKQogICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOwogfQogCitm
dW5jdGlvbiBURVNUX2dlbmVyaWNDYXN0SW5mZXIoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9Q
cmVwKGAKKyAgICAgICAgc3RydWN0IENvbXBsZXg8VD4geworICAgICAgICAgICAgVCByZWFsOwor
ICAgICAgICAgICAgVCBpbWFnOworICAgICAgICB9CisgICAgICAgIG9wZXJhdG9yPFQ+IENvbXBs
ZXg8VD4oVCByZWFsLCBUIGltYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIENvbXBsZXg8VD4g
cmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LnJlYWwgPSByZWFsOworICAgICAgICAgICAgcmVz
dWx0LmltYWcgPSBpbWFnOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ29tcGxleDxpbnQ+IHgg
PSBDb21wbGV4PGludD4oMSwgMik7CisgICAgICAgICAgICByZXR1cm4geC5yZWFsICsgeC5pbWFn
OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW10pLCAzKTsKK30KKwogZnVuY3Rpb24gVEVTVF9ib29sZWFu
TWF0aCgpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYApAQCAtMjg1MSw3ICszNjQ4LDcg
QEAgaWYgKHRoaXNbImFyZ3VtZW50cyJdKSB7CiAgICAgfQogfQogCi1mdW5jdGlvbiBkb1Rlc3Qo
b2JqZWN0KQorZnVuY3Rpb24qIGRvVGVzdChvYmplY3QpCiB7CiAgICAgbGV0IGJlZm9yZSA9IHBy
ZWNpc2VUaW1lKCk7CiAKQEAgLTI4NjAsMTMgKzM2NTcsMTcgQEAgZnVuY3Rpb24gZG9UZXN0KG9i
amVjdCkKICAgICAgICAgICAgIHByaW50KHMgKyAiLi4uIik7CiAgICAgICAgICAgICBvYmplY3Rb
c10oKTsKICAgICAgICAgICAgIHByaW50KCIgICAgT0shIik7CisgICAgICAgICAgICB5aWVsZDsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGxldCBhZnRlciA9IHByZWNpc2VUaW1lKCk7CiAgICAg
CisgICAgcHJpbnQoIlN1Y2Nlc3MhIik7CiAgICAgcHJpbnQoIlRoYXQgdG9vayAiICsgKGFmdGVy
IC0gYmVmb3JlKSAqIDEwMDAgKyAiIG1zLiIpOwogfQogCiBpZiAoIXRoaXMud2luZG93KQotICAg
IGRvVGVzdCh0aGlzKTsKKyAgICBmb3IgKGxldCBfIG9mIGRvVGVzdCh0aGlzKSkgeyB9CisKKwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCShyZXZpc2lvbiAyMjIxNjEp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBAIGNsYXNzIFR5cGUgZXh0ZW5kcyBOb2RlIHsKICAgICBnZXQga2lu
ZCgpIHsgcmV0dXJuIFR5cGU7IH0KICAgICBnZXQgaXNQdHIoKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIGdldCBpc0FycmF5UmVmKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBnZXQgaXNSZWYoKSB7
IHJldHVybiB0aGlzLmlzUHRyIHx8IHRoaXMuaXNBcnJheVJlZjsgfQogICAgIGdldCBpc051bWJl
cigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzSW50KCkgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICBnZXQgaXNGbG9hdGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC00MSw1ICs0MiwxOSBA
QCBjbGFzcyBUeXBlIGV4dGVuZHMgTm9kZSB7CiAgICAgfQogICAgIAogICAgIGdldCBpbnN0YW50
aWF0ZWRUeXBlKCkgeyByZXR1cm4gdGhpcy52aXNpdChuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVz
KCkpOyB9CisgICAgCisgICAgLy8gSGF2ZSB0byBjYWxsIHRoZXNlIG9uIHRoZSB1bmlmeU5vZGUu
CisgICAgYXJndW1lbnRGb3JBbmRPdmVybG9hZChvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG5ldyBNYWtlUHRyRXhwcmVzc2lvbihvcmlnaW4sIHZhbHVlKTsKKyAgICB9Cisg
ICAgYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQob3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBQdHJUeXBlKG9yaWdpbiwgInRocmVhZCIsIHRoaXMpOworICAgIH0KKyAgICByZXR1
cm5UeXBlRnJvbUFuZE92ZXJsb2FkKG9yaWdpbikKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBX
VHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJCeS1wb2ludGVyIG92ZXJsb2FkIHJldHVy
bmVkIG5vbi1wb2ludGVyIHR5cGU6ICIgKyB0aGlzKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUGFyYW1ldGVyUmV3cml0
ZXIuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlw
ZVBhcmFtZXRlclJld3JpdGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworY2xhc3MgVHlwZVBhcmFtZXRlclJld3JpdGVyIHsKKyAgICB2aXNpdENvbnN0ZXhwclR5cGVQ
YXJhbWV0ZXIobm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ29uc3RleHByVHlwZVBh
cmFtZXRlcihub2RlLm9yaWdpbiwgbm9kZS5uYW1lLCBub2RlLnR5cGUudmlzaXQobmV3IFJld3Jp
dGVyKCkpKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRUeXBlVmFyaWFibGUobm9kZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgVHlwZVZhcmlhYmxlKG5vZGUub3JpZ2luLCBub2RlLm5hbWUs
IG5vZGUucHJvdG9jb2wpOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVHlwZVZhcmlhYmxlVHJhY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlVmFyaWFibGVUcmFja2VyLmpzCShub25leGlzdGVudCkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVWYXJpYWJsZVRyYWNrZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBUeXBlVmFyaWFibGVU
cmFja2VyIGV4dGVuZHMgVmlzaXRvciB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAg
ICAgc3VwZXIoKTsKKyAgICAgICAgdGhpcy5fc2V0ID0gbmV3IFNldCgpOworICAgIH0KKyAgICAK
KyAgICBnZXQgc2V0KCkgeyByZXR1cm4gdGhpcy5fc2V0OyB9CisgICAgCisgICAgX2NvbnNpZGVy
KHRoaW5nKQorICAgIHsKKyAgICAgICAgaWYgKHRoaW5nLmlzVW5pZmlhYmxlKQorICAgICAgICAg
ICAgdGhpcy5fc2V0LmFkZCh0aGluZyk7CisgICAgfQorICAgIAorICAgIHZpc2l0VHlwZVJlZihu
b2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29uc2lkZXIobm9kZS50eXBlKTsKKyAgICB9Cisg
ICAgCisgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29u
c2lkZXIodGhpcy52YXJpYWJsZSk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9WYWx1ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9WYWx1ZS5qcwkocmV2aXNpb24gMjIyMTYxKQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVmFsdWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI4LDUgKzI4LDE0IEBA
IGNsYXNzIFZhbHVlIGV4dGVuZHMgTm9kZSB7CiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBWYWx1
ZTsgfQogICAgIGdldCBpc0NvbnN0ZXhwcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlz
TFZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICBiZWNvbWUob3RoZXJWYWx1ZSkK
KyAgICB7CisgICAgICAgIC8vIE5PVEU6IE1ha2Ugc3VyZSB0aGF0IElkZW50aXR5RXhwcmVzc2lv
biBpbXBsZW1lbnRzIHVuaWZ5Tm9kZSBhbmQgYWxsIHRoYXQKKyAgICAgICAgbGV0IG9yaWdpbiA9
IHRoaXMub3JpZ2luOworICAgICAgICB0aGlzLl9fcHJvdG9fXyA9IElkZW50aXR5RXhwcmVzc2lv
bi5wcm90b3R5cGU7CisgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhp
cy5fdGFyZ2V0ID0gb3RoZXJWYWx1ZTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1ZhcmlhYmxlUmVmLmpzCShyZXZpc2lvbiAyMjIxNjEpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WYXJpYWJsZVJlZi5qcwkod29ya2luZyBjb3B5
KQpAQCAtNDEsMTAgKzQxLDkgQEAgY2xhc3MgVmFyaWFibGVSZWYgZXh0ZW5kcyBFeHByZXNzaW9u
IHsKICAgICAKICAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KICAgICBnZXQg
aXNDb25zdGV4cHIoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxlLmlzQ29uc3RleHByOyB9Ci0gICAg
Z2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFyaWFibGUudW5pZnlOb2RlOyB9CisgICAg
Z2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRoaXMudmFyaWFibGUudW5pZnlOb2RlOyB9IC8vIFRo
aXMgb25seSBtYWtlcyBzZW5zZSB3aGVuIHRoaXMgaXMgYSBjb25zdGV4cHIuCiAgICAgZ2V0IGlz
TFZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVy
biAidGhyZWFkIjsgfQotICAgIGdldCB1bmlmeU5vZGUoKSB7IHJldHVybiB0aGlzLnZhcmlhYmxl
OyB9CiAgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVmlzaXRvci5qcwkocmV2aXNpb24gMjIyMTYxKQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsMTIgKzI0
LDcgQEAKICAqLwogInVzZSBzdHJpY3QiOwogCi1jbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRv
ckJhc2UgewotICAgIGNvbnN0cnVjdG9yKCkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAg
fQotICAgIAorY2xhc3MgVmlzaXRvciB7CiAgICAgdmlzaXRQcm9ncmFtKG5vZGUpCiAgICAgewog
ICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCkBA
IC02OCw4ICs2Myw4IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAg
CiAgICAgdmlzaXROYXRpdmVGdW5jSW5zdGFuY2Uobm9kZSkKICAgICB7Ci0gICAgICAgIG5vZGUu
ZnVuYy52aXNpdCh0aGlzKTsKICAgICAgICAgdGhpcy52aXNpdEZ1bmMobm9kZSk7CisgICAgICAg
IG5vZGUuZnVuYy52aXNpdEltcGxlbWVudGF0aW9uRGF0YShub2RlLmltcGxlbWVudGF0aW9uRGF0
YSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0QmxvY2sobm9kZSkKQEAgLTEwMCw4ICs5
NSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgewogICAgICAg
ICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBlQXJndW1lbnRzKQogICAgICAgICAg
ICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS50eXBlKQotICAg
ICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUu
dHlwZSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0TmF0aXZlVHlwZShub2RlKQpAQCAt
MTM0LDggKzEyOCw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAg
CiAgICAgdmlzaXRUeXBlVmFyaWFibGUobm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLnBy
b3RvY29sKQotICAgICAgICAgICAgbm9kZS5wcm90b2NvbC52aXNpdCh0aGlzKTsKKyAgICAgICAg
Tm9kZS52aXNpdChub2RlLnByb3RvY29sLCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRD
b25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUpCkBAIC0xNzcsMTQgKzE3MCwyMyBAQCBjbGFzcyBW
aXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHZpc2l0VmFyaWFibGVEZWNsKG5vZGUp
CiAgICAgewogICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2Rl
LmluaXRpYWxpemVyKQotICAgICAgICAgICAgbm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKTsK
KyAgICAgICAgTm9kZS52aXNpdChub2RlLmluaXRpYWxpemVyLCB0aGlzKTsKICAgICB9CiAgICAg
CiAgICAgdmlzaXRBc3NpZ25tZW50KG5vZGUpCiAgICAgewogICAgICAgICBub2RlLmxocy52aXNp
dCh0aGlzKTsKICAgICAgICAgbm9kZS5yaHMudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlz
aXQobm9kZS50eXBlLCB0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLmxWYWx1ZS52aXNpdCh0aGlz
KTsKKyAgICAgICAgbm9kZS5vbGRWYWx1ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5u
ZXdWYWx1ZVZhci52aXNpdCh0aGlzKTsKKyAgICAgICAgbm9kZS5uZXdWYWx1ZUV4cC52aXNpdCh0
aGlzKTsKKyAgICAgICAgbm9kZS5yZXN1bHRFeHAudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAog
ICAgIHZpc2l0RGVyZWZlcmVuY2VFeHByZXNzaW9uKG5vZGUpCkBAIC0xOTIsMTEgKzE5NCwyNyBA
QCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgICAgICBub2RlLnB0ci52
aXNpdCh0aGlzKTsKICAgICB9CiAgICAgCisgICAgX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbihub2RlKQorICAgIHsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmJhc2VUeXBlLCB0aGlz
KTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmNhbGxGb3JHZXQsIHRoaXMpOworICAgICAgICBO
b2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZUZvckdldCwgdGhpcyk7CisgICAgICAgIE5vZGUudmlz
aXQobm9kZS5jYWxsRm9yQW5kLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJlc3Vs
dFR5cGVGb3JBbmQsIHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUuY2FsbEZvclNldCwg
dGhpcyk7CisgICAgfQorICAgIAogICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQogICAgIHsK
ICAgICAgICAgbm9kZS5zdHJ1Y3QudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLnN0cnVj
dFR5cGUpCi0gICAgICAgICAgICBub2RlLnN0cnVjdFR5cGUudmlzaXQodGhpcyk7CisgICAgICAg
IHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlKTsKKyAgICB9CisgICAg
CisgICAgdmlzaXRJbmRleEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUuYXJy
YXkudmlzaXQodGhpcyk7CisgICAgICAgIG5vZGUuaW5kZXgudmlzaXQodGhpcyk7CisgICAgICAg
IHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlKTsKICAgICB9CiAgICAg
CiAgICAgdmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2RlKQpAQCAtMjA3LDggKzIyNSw3IEBAIGNs
YXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgdmlzaXRNYWtlQXJyYXlSZWZF
eHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsK
LSAgICAgICAgaWYgKG5vZGUubnVtRWxlbWVudHMpCi0gICAgICAgICAgICBub2RlLm51bUVsZW1l
bnRzLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUubnVtRWxlbWVudHMsIHRo
aXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lv
bihub2RlKQpAQCAtMjI0LDggKzI0MSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9y
QmFzZSB7CiAgICAgewogICAgICAgICBub2RlLmNvbmRpdGlvbmFsLnZpc2l0KHRoaXMpOwogICAg
ICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLmVsc2VCb2R5KQot
ICAgICAgICAgICAgbm9kZS5lbHNlQm9keS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNp
dChub2RlLmVsc2VCb2R5LCB0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRXaGlsZUxvb3Ao
bm9kZSkKQEAgLTI0MiwxOSArMjU4LDE1IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9y
QmFzZSB7CiAgICAgCiAgICAgdmlzaXRGb3JMb29wKG5vZGUpCiAgICAgewotICAgICAgICBpZiAo
bm9kZS5pbml0aWFsaXphdGlvbikKLSAgICAgICAgICAgIG5vZGUuaW5pdGlhbGl6YXRpb24udmlz
aXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLmNvbmRpdGlvbikKLSAgICAgICAgICAgIG5vZGUu
Y29uZGl0aW9uLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5pbmNyZW1lbnQpCi0gICAg
ICAgICAgICBub2RlLmluY3JlbWVudC52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChu
b2RlLmluaXRpYWxpemF0aW9uLCB0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLmNvbmRp
dGlvbiwgdGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS5pbmNyZW1lbnQsIHRoaXMpOwog
ICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgfQogCiAgICAgdmlzaXRSZXR1cm4o
bm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLnZhbHVlKQotICAgICAgICAgICAgbm9kZS52
YWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnZhbHVlLCB0aGlzKTsK
ICAgICB9CiAKICAgICB2aXNpdENvbnRpbnVlKG5vZGUpCkBAIC0yNzIsOCArMjg0LDcgQEAgY2xh
c3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2aXNpdEdlbmVyaWNM
aXRlcmFsVHlwZShub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUudHlwZSkKLSAgICAgICAg
ICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnR5cGUs
IHRoaXMpOwogICAgICAgICBub2RlLnByZWZlcnJlZFR5cGUudmlzaXQodGhpcyk7CiAgICAgfQog
ICAgIApAQCAtMjg4LDggKzI5OSw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFz
ZSB7CiAgICAgCiAgICAgdmlzaXROdWxsVHlwZShub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5v
ZGUudHlwZSkKLSAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgTm9k
ZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdENhbGxFeHBy
ZXNzaW9uKG5vZGUpCkBAIC0yOTcsMTYgKzMwNywxNSBAQCBjbGFzcyBWaXNpdG9yIGV4dGVuZHMg
VmlzaXRvckJhc2UgewogICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBl
QXJndW1lbnRzKQogICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpOwogICAgICAg
ICBmb3IgKGxldCBhcmd1bWVudCBvZiBub2RlLmFyZ3VtZW50TGlzdCkKLSAgICAgICAgICAgIGFy
Z3VtZW50LnZpc2l0KHRoaXMpOworICAgICAgICAgICAgTm9kZS52aXNpdChhcmd1bWVudCwgdGhp
cyk7CiAgICAgICAgIGxldCBhY3R1YWxUeXBlQXJndW1lbnRzID0gbm9kZS5hY3R1YWxUeXBlQXJn
dW1lbnRzOwogICAgICAgICBpZiAoYWN0dWFsVHlwZUFyZ3VtZW50cykgewogICAgICAgICAgICAg
Zm9yIChsZXQgYXJndW1lbnQgb2YgYWN0dWFsVHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgICAg
ICBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS5yZXR1
cm5UeXBlKQotICAgICAgICAgICAgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpOwotICAgICAg
ICBpZiAobm9kZS5yZXN1bHRUeXBlKQotICAgICAgICAgICAgbm9kZS5yZXN1bHRUeXBlLnZpc2l0
KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUubmF0aXZlRnVuY0luc3RhbmNlLCB0aGlz
KTsKKyAgICAgICAgTm9kZS52aXNpdChub2RlLnJldHVyblR5cGUsIHRoaXMpOworICAgICAgICBO
b2RlLnZpc2l0KG5vZGUucmVzdWx0VHlwZSwgdGhpcyk7CiAgICAgfQogICAgIAogICAgIHZpc2l0
TG9naWNhbE5vdChub2RlKQpAQCAtMzIyLDIxICszMzEsMjMgQEAgY2xhc3MgVmlzaXRvciBleHRl
bmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2aXNpdEZ1bmN0aW9uTGlrZUJsb2NrKG5vZGUp
CiAgICAgewotICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQotICAgICAgICAgICAgbm9kZS5y
ZXR1cm5UeXBlLnZpc2l0KHRoaXMpOworICAgICAgICBOb2RlLnZpc2l0KG5vZGUucmV0dXJuVHlw
ZSwgdGhpcyk7CiAgICAgICAgIGZvciAobGV0IGFyZ3VtZW50IG9mIG5vZGUuYXJndW1lbnRMaXN0
KQogICAgICAgICAgICAgYXJndW1lbnQudmlzaXQodGhpcyk7CiAgICAgICAgIGZvciAobGV0IHBh
cmFtZXRlciBvZiBub2RlLnBhcmFtZXRlcnMpCiAgICAgICAgICAgICBwYXJhbWV0ZXIudmlzaXQo
dGhpcyk7CiAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUu
cmVzdWx0VHlwZSkKLSAgICAgICAgICAgIG5vZGUucmVzdWx0VHlwZS52aXNpdCh0aGlzKTsKKyAg
ICAgICAgTm9kZS52aXNpdChub2RlLnJlc3VsdFR5cGUsIHRoaXMpOwogICAgIH0KICAgICAKLSAg
ICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkKKyAgICB2aXNpdEFub255bW91c1ZhcmlhYmxlKG5v
ZGUpCiAgICAgewotICAgICAgICBub2RlLmFyZ3VtZW50LnZpc2l0KHRoaXMpOwotICAgICAgICBu
b2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlz
KTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJZGVudGl0eUV4cHJlc3Npb24obm9kZSkKKyAgICB7
CisgICAgICAgIG5vZGUudGFyZ2V0LnZpc2l0KHRoaXMpOwogICAgIH0KIH0KIApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvckJhc2UuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvckJhc2UuanMJKHJldmlzaW9uIDIy
MjE2MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3JCYXNlLmpzCShu
b25leGlzdGVudCkKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBWaXNpdG9yQmFzZSB7Ci0g
ICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWVtb1RhYmxlID0gbmV3IE1h
cCgpOwotICAgIH0KLX0K
</data>
<flag name="review"
          id="341136"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
      

    </bug>

</bugzilla>