<?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>14886</bug_id>
          
          <creation_ts>2007-08-05 15:07:26 -0700</creation_ts>
          <short_desc>Stack overflow due to deeply nested parse tree doing repeated string concatentation</short_desc>
          <delta_ts>2008-11-09 17:28:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>523.x (Safari 3)</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>HasReduction, InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael A. Puls II">shadow2531</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
    
    <cc>aroben</cc>
    
    <cc>dev+webkit</cc>
    
    <cc>mihnea</cc>
    
    <cc>mrowe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2982</commentid>
    <comment_count>0</comment_count>
    <who name="Michael A. Puls II">shadow2531</who>
    <bug_when>2007-08-05 15:07:26 -0700</bug_when>
    <thetext>If you do:

var x = &quot;string1&quot; + &quot;string2&quot; + &quot;stringN&quot; etc. where you&apos;re adding an insane amount of strings together, Safari will crash.

IE will crash also.
Opera throws an exception.
Firefox handles it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2983</commentid>
    <comment_count>1</comment_count>
      <attachid>15844</attachid>
    <who name="Michael A. Puls II">shadow2531</who>
    <bug_when>2007-08-05 15:08:50 -0700</bug_when>
    <thetext>Created attachment 15844
TC that will crash Safari

If the situation cannot be handled, an exception should be thrown instead of crashing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2985</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-08-05 15:18:43 -0700</bug_when>
    <thetext>Thanks for the bug report, Michael! Can you tell us what version(s) of Safari you tested with?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2986</commentid>
    <comment_count>3</comment_count>
    <who name="Michael A. Puls II">shadow2531</who>
    <bug_when>2007-08-05 16:12:56 -0700</bug_when>
    <thetext>Safari 3.0.2(522.13.1) and that Safari with WebKit-SVN-r24872</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2987</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-08-05 17:10:25 -0700</bug_when>
    <thetext>Could you attach a crash log as described at &lt;http://webkit.org/quality/crashlogs.html&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2988</commentid>
    <comment_count>5</comment_count>
    <who name="Michael A. Puls II">shadow2531</who>
    <bug_when>2007-08-05 17:53:27 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Could you attach a crash log as described at
&gt; &lt;http://webkit.org/quality/crashlogs.html&gt;?
&gt; 

Tried, but it does not produce a crash log or memory dump. This is a silent crash where Safari just dies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2989</commentid>
    <comment_count>6</comment_count>
    <who name="Matt Lilek">dev+webkit</who>
    <bug_when>2007-08-05 18:09:18 -0700</bug_when>
    <thetext>My local debug build of r24875 gives me this back trace:

Thread: 0

Exception:  EXC_BAD_ACCESS (0x0001)
Codes:      KERN_INVALID_ADDRESS (0x0001) at 0xbf7fffd0

Thread 0 Crashed:
0   com.apple.JavaScriptCore       	0x005b72f4 KJS::AddNode::evaluate(KJS::ExecState*) + 12 (nodes.cpp:1205)
1   com.apple.JavaScriptCore       	0x005b733c KJS::AddNode::evaluate(KJS::ExecState*) + 84 (nodes.cpp:1207)
[it repeats frame 1 for ~500 frames]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2993</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-08-06 02:26:58 -0700</bug_when>
    <thetext>This is not specific to strings, nor really to the + operation.  The parse tree that&apos;s generated by the input leads to a stack overflow during the recursive evaluation.  It should also be reproducible with numbers, and with various other operators such as -, /, and *.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2994</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-08-06 02:27:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/5387997&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85154</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-07-03 22:49:28 -0700</bug_when>
    <thetext>This may be fixed with SquirellFish?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85163</commentid>
    <comment_count>10</comment_count>
    <who name="Michael A. Puls II">shadow2531</who>
    <bug_when>2008-07-04 00:48:44 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; This may be fixed with SquirellFish?
&gt; 

Well, Safari still silently dies with the latest webkit nightly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97819</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-06 09:32:39 -0800</bug_when>
    <thetext>I have a patch mostly done, starting with Chris Brichford&apos;s patch from another bug. I&apos;m figuring out what the limit should be -- 1000 was too large and I crashed while destroying the AST. And making a regression test. Should be done shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97991</commentid>
    <comment_count>12</comment_count>
      <attachid>24981</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-07 18:05:45 -0800</bug_when>
    <thetext>Created attachment 24981
work in progress

This patch works, but I also need to make the test case into a regression test ready to check in and write change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98026</commentid>
    <comment_count>13</comment_count>
      <attachid>24995</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-08 11:58:25 -0800</bug_when>
    <thetext>Created attachment 24995
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98093</commentid>
    <comment_count>14</comment_count>
      <attachid>25004</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-09 11:59:50 -0800</bug_when>
    <thetext>Created attachment 25004
improved patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98110</commentid>
    <comment_count>15</comment_count>
      <attachid>25004</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-09 16:20:35 -0800</bug_when>
    <thetext>Comment on attachment 25004
improved patch

Looks good.  My only concern is that &quot;Expression too deep&quot; is a little vague, but I am short on better alternatives.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98114</commentid>
    <comment_count>16</comment_count>
      <attachid>25004</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-11-09 16:33:00 -0800</bug_when>
    <thetext>Comment on attachment 25004
improved patch

&gt; void NodeReleaser::adopt(PassRefPtr&lt;ParserRefCounted&gt; node)

1) This is a bit of a funny name, perhaps it should be called release()? Or markForRelease()? Or something? It&apos;s true that the releaser is meant to take ownership of the node, but it feels a little funny to focus on that instead of the intended side effect that it will get freed.

2) It took me a while to understand how this works, and while I get it now, it was very unclear at first and I am not sure it was what you intended. In particular, NodeReleaser::adopt looks like it expects to take ownership of an existing reference, but instead of a PassRefPtr it is given a RefPtr, at call sites like this:

&gt; ArrayNode::releaseNodes(NodeReleaser&amp; releaser)
&gt; {
&gt;    releaser.adopt(m_element);
&gt; }

Constructing a PassRefPtr from a RefPtr doesn&apos;t release the original reference. I was expecting to see m_element.release() here. I understand now that this prevents recursive invocation of destructors, because the child nodes end up having two refs, and the parent&apos;s ref is removed first, then the one from the Vector. This seems awfully subtle, and leads to refcount thrash of every node at destruction time, which is extra unfortunate due to the external refcount hashtable. Was it what you meant?

I will r+ anyway since the patch works, but please at least add an explanatory comment, explain in the ChangeLog why it was done this way, and clarify whether any perf testing was done to see if the extra cost of destruction costs us anything here.

Or if this was not on purpose, it would be good to do it the more straightforward way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98115</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-09 16:37:10 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; 1) This is a bit of a funny name, perhaps it should be called release()? Or
&gt; markForRelease()?

I think releaseSoon would be a good name. If I can find you on IRC we can talk about other names.

&gt; NodeReleaser::adopt looks like it expects to take ownership of an
&gt; existing reference, but instead of a PassRefPtr it is given a RefPtr, at call
&gt; sites like this:
&gt; 
&gt; &gt; ArrayNode::releaseNodes(NodeReleaser&amp; releaser)
&gt; &gt; {
&gt; &gt;    releaser.adopt(m_element);
&gt; &gt; }
&gt; 
&gt; Constructing a PassRefPtr from a RefPtr doesn&apos;t release the original reference.
&gt; I was expecting to see m_element.release() here. I understand now that this
&gt; prevents recursive invocation of destructors, because the child nodes end up
&gt; having two refs, and the parent&apos;s ref is removed first, then the one from the
&gt; Vector.

No, that&apos;s not how it works. The way it actually works is that adopt is a function that takes a RefPtr&amp; and does the release. I can change the name of adopt to releaseSoon if you think that is clearer.

The confusion is due to the fact that I named two different functions adopt. You&apos;re looking at the private one that&apos;s an implementation detail.

&gt; Or if this was not on purpose, it would be good to do it the more
&gt; straightforward way.

I&apos;m sorry the code isn&apos;t clear. I can make it better. But the scheme actually is the simpler one you&apos;re talking about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98120</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-09 17:28:43 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/38247</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>15844</attachid>
            <date>2007-08-05 15:08:50 -0700</date>
            <delta_ts>2007-08-05 15:08:50 -0700</delta_ts>
            <desc>TC that will crash Safari</desc>
            <filename>trat.zip</filename>
            <type>application/zip</type>
            <size>3994</size>
            <attacher name="Michael A. Puls II">shadow2531</attacher>
            
              <data encoding="base64">UEsDBBQAAgAIAHZPBTcy6EPYJg8AAN+PDgAJAAAAdHJhdC5odG1s7dwxTsNAFEXR3qsYuQqiYAEJ
2YsxgTgEMDNOQlg90qvYQBp0mqcpj+b3d9PGOs3LtjsPtbTyWPqhL/elf8qO2efsLvuSfc3us1P2
kH3LHrMf2fc/78/snP3K1mzLLtlT9py9ZL+z1+xPlpCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ
kJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ
kPD2Ql9ISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIKFhLSEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhIKFhLSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIKFhLSEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhIKFhLSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIKFhLSEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhIKFhLSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIKFhLSEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhIKFhLSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIKFhLSEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhIKFhLSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIKFhLSEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhIKFhLSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIKFhLSEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhIKFhLSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIKFhL
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhIKFhLSEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
KFhLSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIKFhLSEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhIKFhLSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIKFjryISEhISEhISEhISEhISEhISEhISE
hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
hISEhISEhIK1jkxISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISChY68iEhISEhISEhISEhISEhISE
hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
hISEhISEhISEhISCtY5MSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEgoWOvIhISEhISEhISEhISE
hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
hISEhISEhISEhISEhISEgrWOTEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIKFjryISEhISEhISE
hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
hISEhISEhISEhISEhISEhISEhIK1jkxISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISChY68iEhISE
hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
hISEhISEhISEhISEhISEhISEhISEhISCtY5MSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEgoWOvI
hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
hISEhISEhISEhISEhISEhISEhISEhISEhISEgrWOTEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
KFjryISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIK1jkxISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISChY68iEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISCtY5MSEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEgoWOvIhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEgrWOTEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhIKFjryISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIK1vpCQkJCQkJCQkJCQ
kJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ
kJCQkJCQkJCQkJCQkJCQkFCw1hcSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIS
EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIK1vpCQkJCQkJC
QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJC
QkJCQkJCQkJCQkJCQkJCQkJCQkLC/ydcd8NxV5dVu1t3m4c21mletr9QSwECFAAUAAIACAB2TwU3
MuhD2CYPAADfjw4ACQAAAAAAAAABACAAAAAAAAAAdHJhdC5odG1sUEsFBgAAAAABAAEANwAAAE0P
AAAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24981</attachid>
            <date>2008-11-07 18:05:45 -0800</date>
            <delta_ts>2008-11-08 11:58:25 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>OverflowWorkInProgressPatch.txt</filename>
            <type>text/plain</type>
            <size>64170</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzODExNCkKKysr
IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDcsNiArMjA3LDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZQog
ICAgICwgbV9uZXh0R2xvYmFsKC0xKQogICAgICwgbV9nbG9iYWxEYXRhKCZzY29wZUNoYWluLmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCktPmdsb2JhbERhdGEoKSkKICAgICAsIG1fbGFzdE9w
Y29kZUlEKG9wX2VuZCkKKyAgICAsIG1fZW1pdE5vZGVEZXB0aCgwKQogewogICAgIGlmIChtX3No
b3VsZEVtaXREZWJ1Z0hvb2tzKQogICAgICAgICBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVD
aGFpbiA9IHRydWU7CkBAIC0yODMsNiArMjg0LDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVy
YXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCiAgICAgLCBt
X2dsb2JhbERhdGEoJnNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKS0+Z2xv
YmFsRGF0YSgpKQogICAgICwgbV9sYXN0T3Bjb2RlSUQob3BfZW5kKQorICAgICwgbV9lbWl0Tm9k
ZURlcHRoKDApCiB7CiAgICAgaWYgKG1fc2hvdWxkRW1pdERlYnVnSG9va3MpCiAgICAgICAgIG1f
Y29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluID0gdHJ1ZTsKQEAgLTM1Myw2ICszNTUsNyBA
QCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBlCiAgICAgLCBtX2NvZGVU
eXBlKEV2YWxDb2RlKQogICAgICwgbV9nbG9iYWxEYXRhKCZzY29wZUNoYWluLmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCktPmdsb2JhbERhdGEoKSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9w
X2VuZCkKKyAgICAsIG1fZW1pdE5vZGVEZXB0aCgwKQogewogICAgIGlmIChtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzKQogICAgICAgICBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbiA9IHRy
dWU7CkBAIC0xNjc2LDQgKzE2NzksMTYgQEAgdm9pZCBDb2RlR2VuZXJhdG9yOjplbmRTd2l0Y2go
dWludDMyX3QgYwogICAgIH0KIH0KIAorUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFRo
cm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKQoreworICAgIC8vIEl0IHdvdWxkIGJlIG5p
Y2UgdG8gZG8gYW4gZXZlbiBiZXR0ZXIgam9iIG9mIGlkZW50aWZ5aW5nIGV4YWN0bHkgd2hlcmUg
dGhlIGV4cHJlc3Npb24gaXMuCisgICAgLy8gQW5kIHdlIGNvdWxkIG1ha2UgdGhlIGNhbGxlciBw
YXNzIHRoZSBub2RlIHBvaW50ZXIgaW4sIGlmIHRoZXJlIHdhcyBzb21lIHdheSBvZiBnZXR0aW5n
CisgICAgLy8gdGhhdCBmcm9tIGFuIGFyYml0cmFyeSBub2RlLiBIb3dldmVyLCBjYWxsaW5nIGVt
aXRFeHByZXNzaW9uSW5mbyB3aXRob3V0IGFueSB1c2VmdWwgZGF0YQorICAgIC8vIGlzIHN0aWxs
IGdvb2QgZW5vdWdoIHRvIGdldCB1cyBhbiBhY2N1cmF0ZSBsaW5lIG51bWJlci4KKyAgICBlbWl0
RXhwcmVzc2lvbkluZm8oMCwgMCwgMCk7CisgICAgUmVnaXN0ZXJJRCogZXhjZXB0aW9uID0gZW1p
dE5ld0Vycm9yKG5ld1RlbXBvcmFyeSgpLCBTeW50YXhFcnJvciwganNTdHJpbmcoZ2xvYmFsRGF0
YSgpLCAiRXhwcmVzc2lvbiB0b28gZGVlcCIpKTsKKyAgICBlbWl0VGhyb3coZXhjZXB0aW9uKTsK
KyAgICByZXR1cm4gZXhjZXB0aW9uOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDM4MTE0KQorKysgSmF2YVNjcmlwdENv
cmUvVk0vQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDEyIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIExpbmVJbmZvIGluZm8gPSB7IGluc3Ry
dWN0aW9ucygpLnNpemUoKSwgbi0+bGluZU5vKCkgfTsKICAgICAgICAgICAgICAgICBtX2NvZGVC
bG9jay0+bGluZUluZm8uYXBwZW5kKGluZm8pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIG4tPmVtaXRDb2RlKCp0aGlzLCBkc3QpOworICAgICAgICAgICAgaWYgKG1fZW1pdE5v
ZGVEZXB0aCA+PSBzX21heEVtaXROb2RlRGVwdGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVt
aXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CisgICAgICAgICAgICArK21fZW1p
dE5vZGVEZXB0aDsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHIgPSBuLT5lbWl0Q29kZSgqdGhp
cywgZHN0KTsKKyAgICAgICAgICAgIC0tbV9lbWl0Tm9kZURlcHRoOworICAgICAgICAgICAgcmV0
dXJuIHI7CiAgICAgICAgIH0KIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Tm9kZShOb2RlKiBu
KQpAQCAtMzk5LDYgKzQwNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3Vs
ZE9wdGltaXplTG9jYWxzKCkgeyByZXR1cm4gKG1fY29kZVR5cGUgIT0gRXZhbENvZGUpICYmICFt
X2R5bmFtaWNTY29wZURlcHRoOyB9CiAgICAgICAgIGJvb2wgY2FuT3B0aW1pemVOb25Mb2NhbHMo
KSB7IHJldHVybiAobV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpICYmICFtX2R5bmFtaWNTY29w
ZURlcHRoICYmICFtX2NvZGVCbG9jay0+dXNlc0V2YWw7IH0KIAorICAgICAgICBSZWdpc3RlcklE
KiBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOworCiAgICAgICAgIGJvb2wg
bV9zaG91bGRFbWl0RGVidWdIb29rczsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxl
SG9va3M7CiAKQEAgLTQ0NCw2ICs0NTEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWZuZGVmIE5E
RUJVRwogICAgICAgICBzdGF0aWMgYm9vbCBzX2R1bXBzR2VuZXJhdGVkQ29kZTsKICNlbmRpZgor
CisgICAgICAgIHVuc2lnbmVkIG1fZW1pdE5vZGVEZXB0aDsKKworICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgc19tYXhFbWl0Tm9kZURlcHRoID0gMTAwMDsKICAgICB9OwogCiB9CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDM4MTE0KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIHZvaWQgc3Vic3RpdHV0ZShVU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IFVTdHJpbmcmIHN1YnN0cmluZykgSlNDX0ZBU1RfQ0FMTDsKKwog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTE0MCwxMyArMTQy
LDU3IEBAIHZvaWQgUGFyc2VyUmVmQ291bnRlZDo6ZGVsZXRlTmV3T2JqZWN0cygKICAgICBnbG9i
YWxEYXRhLT5uZXdQYXJzZXJPYmplY3RzID0gMDsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIE5vZGVSZWxlYXNlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitjbGFzcyBOb2RlUmVsZWFzZXIgOiBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHZvaWQgcmVsZWFzZUFsbE5vZGVzKE5vZGUqIHJvb3QpOworICAgIHZvaWQgYWRkKFBhc3NS
ZWZQdHI8Tm9kZT4pOworCitwcml2YXRlOgorICAgIE5vZGVSZWxlYXNlcigpIHsgfQorICAgIH5O
b2RlUmVsZWFzZXIoKSB7IH0KKworICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IE5v
ZGVSZWxlYXNlVmVjdG9yOworICAgIE93blB0cjxOb2RlUmVsZWFzZVZlY3Rvcj4gbV92ZWN0b3I7
Cit9OworCit2b2lkIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKE5vZGUqIHJvb3QpCit7
CisgICAgQVNTRVJUKHJvb3QpOworICAgIE5vZGVSZWxlYXNlciByZWxlYXNlcjsKKyAgICByb290
LT5yZWxlYXNlTm9kZXMocmVsZWFzZXIpOworICAgIGlmICghcmVsZWFzZXIubV92ZWN0b3IpCisg
ICAgICAgIHJldHVybjsKKyAgICAvLyBOb3RlOiBUaGUgY2FsbCB0byByZWxlYXNlLm1fdmVjdG9y
LT5zaXplKCkgaXMgaW50ZW50aW9uYWxseSBpbnNpZGUKKyAgICAvLyB0aGUgbG9vcCwgc2luY2Ug
Y2FsbHMgdG8gcmVsZWFzZU5vZGVzIGFyZSBleHBlY3RlZCB0byBpbmNyZWFzZSB0aGUgc2l6ZS4K
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGVhc2VyLm1fdmVjdG9yLT5zaXplKCk7ICsr
aSkKKyAgICAgICAgKCpyZWxlYXNlci5tX3ZlY3RvcilbaV0tPnJlbGVhc2VOb2RlcyhyZWxlYXNl
cik7Cit9CisKK3ZvaWQgTm9kZVJlbGVhc2VyOjphZGQoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQor
eworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV92ZWN0b3IpCisg
ICAgICAgIG1fdmVjdG9yLnNldChuZXcgTm9kZVJlbGVhc2VWZWN0b3IpOworICAgIG1fdmVjdG9y
LT5hcHBlbmQobm9kZSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIE5vZGU6Ok5vZGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDogUGFyc2VyUmVmQ291bnRlZChnbG9iYWxEYXRhKQog
ewogICAgIG1fbGluZSA9IGdsb2JhbERhdGEtPmxleGVyLT5saW5lTm8oKTsKIH0KIAotc3RhdGlj
IHZvaWQgc3Vic3RpdHV0ZShVU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFVTdHJpbmcmIHN1YnN0cmlu
ZykgSlNDX0ZBU1RfQ0FMTDsKK3ZvaWQgTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYp
Cit7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaHJvd2FibGVFeHBy
ZXNzaW9uRGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBzdGF0aWMgdm9p
ZCBzdWJzdGl0dXRlKFVTdHJpbmcmIHN0cmluZywgY29uc3QgVVN0cmluZyYgc3Vic3RyaW5nKQog
ewogICAgIGludCBwb3NpdGlvbiA9IHN0cmluZy5maW5kKCIlcyIpOwpAQCAtMjc1LDggKzMyMSwz
MSBAQCBSZWdpc3RlcklEKiBSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlCiAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0UmVzb2x2ZShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBt
X2lkZW50KTsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVsZW1lbnRO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFbGVtZW50Tm9kZTo6
fkVsZW1lbnROb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlz
KTsKK30KKwordm9pZCBFbGVtZW50Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVs
ZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRkKG1fbmV4dC5yZWxlYXNlKCkpOworICAgIHJlbGVh
c2VyLmFkZChtX25vZGUucmVsZWFzZSgpKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEFycmF5Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAorQXJyYXlOb2RlOjp+QXJyYXlOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VB
bGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBBcnJheU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVs
ZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkZChtX2VsZW1lbnQucmVsZWFzZSgp
KTsKK30KKwogUmVnaXN0ZXJJRCogQXJyYXlOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHB1
dCBhbGwgb2YgdGhpcyBjb2RlIGludG8gZW1pdE5ld0FycmF5PwpAQCAtMzA4LDggKzM3NywzMCBA
QCBSZWdpc3RlcklEKiBBcnJheU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0dXJuIGdl
bmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgYXJyYXkuZ2V0KCkpOwogfQog
CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHJvcGVydHlOb2RlOjp+UHJvcGVydHlOb2RlKCkKK3sK
KyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBQcm9w
ZXJ0eU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJl
bGVhc2VyLmFkZChtX2Fzc2lnbi5yZWxlYXNlKCkpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gT2JqZWN0TGl0ZXJhbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCitPYmplY3RMaXRlcmFsTm9kZTo6fk9iamVjdExpdGVyYWxOb2RlKCkKK3sKKyAgICBO
b2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBPYmplY3RMaXRl
cmFsTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVs
ZWFzZXIuYWRkKG1fbGlzdC5yZWxlYXNlKCkpOworfQorCiBSZWdpc3RlcklEKiBPYmplY3RMaXRl
cmFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiB7CiAgICAgIGlmICghbV9saXN0KSB7CkBAIC0zMjIsNiArNDEzLDE3IEBAIFJlZ2lzdGVy
SUQqIE9iamVjdExpdGVyYWxOb2RlOjplbWl0Q29kZSgKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFByb3BlcnR5TGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAorUHJvcGVydHlMaXN0Tm9kZTo6flByb3BlcnR5TGlzdE5vZGUoKQoreworICAgIE5vZGVS
ZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIFByb3BlcnR5TGlzdE5v
ZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2Vy
LmFkZChtX25vZGUucmVsZWFzZSgpKTsKKyAgICByZWxlYXNlci5hZGQobV9uZXh0LnJlbGVhc2Uo
KSk7Cit9CisKIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBuZXdPYmogPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CkBAIC0zNTQsNiAr
NDU2LDE3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRDb2RlKEMKIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQnJhY2tldEFjY2Vzc29yTm9kZTo6fkJyYWNr
ZXRBY2Nlc3Nvck5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRo
aXMpOworfQorCit2b2lkIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVs
ZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkZChtX2Jhc2UucmVsZWFzZSgpKTsK
KyAgICByZWxlYXNlci5hZGQobV9zdWJzY3JpcHQucmVsZWFzZSgpKTsKK30KKwogUmVnaXN0ZXJJ
RCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5l
cmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLmdldCgpLCBtX3N1YnNjcmlwdEhh
c0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlwdC0+aXNQdXJlKGdlbmVyYXRvcikpOwpAQCAtMzY0LDYg
KzQ3NywxNiBAQCBSZWdpc3RlcklEKiBCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Q29kCiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb3RBY2Nlc3Nvck5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorRG90QWNjZXNzb3JOb2RlOjp+RG90QWNjZXNzb3JO
b2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwor
dm9pZCBEb3RBY2Nlc3Nvck5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2Vy
KQoreworICAgIHJlbGVhc2VyLmFkZChtX2Jhc2UucmVsZWFzZSgpKTsKK30KKwogUmVnaXN0ZXJJ
RCogRG90QWNjZXNzb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fYmFzZS5nZXQoKSk7CkBAIC0zNzMsMjAgKzQ5Niw2NiBAQCBSZWdpc3RlcklEKiBEb3RB
Y2Nlc3Nvck5vZGU6OmVtaXRDb2RlKENvCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBBcmd1bWVudExpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0Fy
Z3VtZW50TGlzdE5vZGU6On5Bcmd1bWVudExpc3ROb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6
OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBBcmd1bWVudExpc3ROb2RlOjpyZWxl
YXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZGQobV9u
ZXh0LnJlbGVhc2UoKSk7CisgICAgcmVsZWFzZXIuYWRkKG1fZXhwci5yZWxlYXNlKCkpOworfQor
CiBSZWdpc3RlcklEKiBBcmd1bWVudExpc3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBBU1NFUlQobV9leHByKTsKICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9leHByLmdldCgpKTsKIH0KIAorLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFyZ3VtZW50c05vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworQXJndW1lbnRzTm9kZTo6fkFyZ3VtZW50c05vZGUoKQoreworICAg
IE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEFyZ3VtZW50
c05vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVh
c2VyLmFkZChtX2xpc3ROb2RlLnJlbGVhc2UoKSk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBOZXdFeHByTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKK05ld0V4cHJOb2RlOjp+TmV3RXhwck5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6
cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIE5ld0V4cHJOb2RlOjpyZWxlYXNlTm9k
ZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZGQobV9leHByLnJl
bGVhc2UoKSk7CisgICAgcmVsZWFzZXIuYWRkKG1fYXJncy5yZWxlYXNlKCkpOworfQorCiBSZWdp
c3RlcklEKiBOZXdFeHByTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDb25z
dHJ1Y3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZnVuYy5nZXQoKSwgbV9hcmdz
LmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CiB9CiAKKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFdmFsRnVuY3Rpb25DYWxsTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V2YWxGdW5jdGlvbkNhbGxOb2RlOjp+RXZh
bEZ1bmN0aW9uQ2FsbE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVz
KHRoaXMpOworfQorCit2b2lkIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjpyZWxlYXNlTm9kZXMoTm9k
ZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZGQobV9hcmdzLnJlbGVhc2Uo
KSk7Cit9CisKIFJlZ2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKQEAgLTM5NSwx
MiArNTY0LDM3IEBAIFJlZ2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Q28KICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jLmdldCgpLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCks
IG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKIH0KIAorLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Z1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6fkZ1bmN0aW9u
Q2FsbFZhbHVlTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhp
cyk7Cit9CisKK3ZvaWQgRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJl
bGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZGQobV9leHByLnJlbGVhc2UoKSk7
CisgICAgcmVsZWFzZXIuYWRkKG1fYXJncy5yZWxlYXNlKCkpOworfQorCiBSZWdpc3RlcklEKiBG
dW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBmdW5jLmdldCgpLCAwLCBtX2FyZ3Mu
Z2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKIH0KIAorLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6
On5GdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNl
QWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OnJlbGVh
c2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkZChtX2Fy
Z3MucmVsZWFzZSgpKTsKK30KKwogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewog
ICAgIGlmIChSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3Io
bV9pZGVudCkpCkBAIC00MjIsNiArNjE2LDIwIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJl
c29sdmVOb2RlOjplbWkKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSksIGZ1bmMuZ2V0KCksIGJhc2UuZ2V0KCks
IG1fYXJncy5nZXQoKSwgbV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOwogfQog
CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsQnJhY2tldE5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZTo6fkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6
OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBGdW5jdGlvbkNhbGxCcmFja2V0Tm9k
ZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIu
YWRkKG1fYmFzZS5yZWxlYXNlKCkpOworICAgIHJlbGVhc2VyLmFkZChtX3N1YnNjcmlwdC5yZWxl
YXNlKCkpOworICAgIHJlbGVhc2VyLmFkZChtX2FyZ3MucmVsZWFzZSgpKTsKK30KKwogUmVnaXN0
ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNl
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CkBAIC00MzEsNiArNjM5LDE5IEBA
IFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWkKICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQo
KSksIGZ1bmN0aW9uLmdldCgpLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1f
c3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbERvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitGdW5jdGlvbkNhbGxEb3ROb2RlOjp+RnVuY3Rpb25DYWxsRG90Tm9kZSgpCit7
CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgRnVu
Y3Rpb25DYWxsRG90Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7
CisgICAgcmVsZWFzZXIuYWRkKG1fYmFzZS5yZWxlYXNlKCkpOworICAgIHJlbGVhc2VyLmFkZCht
X2FyZ3MucmVsZWFzZSgpKTsKK30KKwogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsRG90Tm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdl
dCgpKTsKQEAgLTQ5Nyw2ICs3MTgsMTcgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeFJlc29sdmVOb2Rl
OjplbWl0Q29kZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUG9zdGZpeEJy
YWNrZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorUG9zdGZpeEJy
YWNrZXROb2RlOjp+UG9zdGZpeEJyYWNrZXROb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJl
bGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBQb3N0Zml4QnJhY2tldE5vZGU6OnJlbGVh
c2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkZChtX2Jh
c2UucmVsZWFzZSgpKTsKKyAgICByZWxlYXNlci5hZGQobV9zdWJzY3JpcHQucmVsZWFzZSgpKTsK
K30KKwogUmVnaXN0ZXJJRCogUG9zdGZpeEJyYWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwpAQCAtNTIxLDYgKzc1
MywxNiBAQCBSZWdpc3RlcklEKiBQb3N0Zml4QnJhY2tldE5vZGU6OmVtaXRDb2RlCiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0Zml4RG90Tm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1Bvc3RmaXhEb3ROb2RlOjp+UG9zdGZpeERvdE5vZGUo
KQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lk
IFBvc3RmaXhEb3ROb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sK
KyAgICByZWxlYXNlci5hZGQobV9iYXNlLnJlbGVhc2UoKSk7Cit9CisKIFJlZ2lzdGVySUQqIFBv
c3RmaXhEb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2Jhc2UuZ2V0KCkpOwpAQCAtNTQ0LDYgKzc4NiwxNiBAQCBSZWdpc3RlcklEKiBQb3N0
Zml4RG90Tm9kZTo6ZW1pdENvZGUoQ29kCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBQb3N0Zml4RXJyb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKK1Bvc3RmaXhFcnJvck5vZGU6On5Qb3N0Zml4RXJyb3JOb2RlKCkKK3sKKyAgICBOb2RlUmVs
ZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBQb3N0Zml4RXJyb3JOb2Rl
OjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5h
ZGQobV9leHByLnJlbGVhc2UoKSk7Cit9CisKIFJlZ2lzdGVySUQqIFBvc3RmaXhFcnJvck5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CiAgICAg
cmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwgUmVmZXJlbmNlRXJyb3IsIG1fb3BlcmF0
b3IgPT0gT3BQbHVzUGx1cyA/ICJQb3N0Zml4ICsrIG9wZXJhdG9yIGFwcGxpZWQgdG8gdmFsdWUg
dGhhdCBpcyBub3QgYSByZWZlcmVuY2UuIiA6ICJQb3N0Zml4IC0tIG9wZXJhdG9yIGFwcGxpZWQg
dG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVuY2UuIik7CkBAIC01NjMsNiArODE1LDE3IEBA
IFJlZ2lzdGVySUQqIERlbGV0ZVJlc29sdmVOb2RlOjplbWl0Q29kZSgKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0ZUJyYWNrZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKK0RlbGV0ZUJyYWNrZXROb2RlOjp+RGVsZXRlQnJhY2tldE5v
ZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2
b2lkIERlbGV0ZUJyYWNrZXROb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNl
cikKK3sKKyAgICByZWxlYXNlci5hZGQobV9iYXNlLnJlbGVhc2UoKSk7CisgICAgcmVsZWFzZXIu
YWRkKG1fc3Vic2NyaXB0LnJlbGVhc2UoKSk7Cit9CisKIFJlZ2lzdGVySUQqIERlbGV0ZUJyYWNr
ZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9i
YXNlLmdldCgpKTsKQEAgLTU3NCw2ICs4MzcsMTYgQEAgUmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tl
dE5vZGU6OmVtaXRDb2RlKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVs
ZXRlRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitEZWxldGVE
b3ROb2RlOjp+RGVsZXRlRG90Tm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxs
Tm9kZXModGhpcyk7Cit9CisKK3ZvaWQgRGVsZXRlRG90Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVS
ZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRkKG1fYmFzZS5yZWxlYXNlKCkp
OworfQorCiBSZWdpc3RlcklEKiBEZWxldGVEb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWdpc3RlcklEKiByMCA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwpAQCAtNTg0LDYgKzg1NywxNiBAQCBSZWdp
c3RlcklEKiBEZWxldGVEb3ROb2RlOjplbWl0Q29kZShDb2RlCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBEZWxldGVWYWx1ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAorRGVsZXRlVmFsdWVOb2RlOjp+RGVsZXRlVmFsdWVOb2RlKCkKK3sKKyAg
ICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBEZWxldGVW
YWx1ZU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJl
bGVhc2VyLmFkZChtX2V4cHIucmVsZWFzZSgpKTsKK30KKwogUmVnaXN0ZXJJRCogRGVsZXRlVmFs
dWVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoaWdub3JlZFJlc3VsdCgpLCBtX2V4cHIuZ2V0
KCkpOwpAQCAtNTk0LDYgKzg3NywxNiBAQCBSZWdpc3RlcklEKiBEZWxldGVWYWx1ZU5vZGU6OmVt
aXRDb2RlKENvCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWb2lkTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1ZvaWROb2RlOjp+Vm9pZE5v
ZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2
b2lkIFZvaWROb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAg
ICByZWxlYXNlci5hZGQobV9leHByLnJlbGVhc2UoKSk7Cit9CisKIFJlZ2lzdGVySUQqIFZvaWRO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKICAgICBpZiAoZHN0ID09IGlnbm9yZWRSZXN1bHQoKSkgewpAQCAtNjIzLDYgKzkxNiwxNiBA
QCBSZWdpc3RlcklEKiBUeXBlT2ZSZXNvbHZlTm9kZTo6ZW1pdENvZGUoCiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUeXBlT2ZWYWx1ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAorVHlwZU9mVmFsdWVOb2RlOjp+VHlwZU9mVmFsdWVOb2RlKCkK
K3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBU
eXBlT2ZWYWx1ZU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQorewor
ICAgIHJlbGVhc2VyLmFkZChtX2V4cHIucmVsZWFzZSgpKTsKK30KKwogUmVnaXN0ZXJJRCogVHlw
ZU9mVmFsdWVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIHsKICAgICBpZiAoZHN0ID09IGlnbm9yZWRSZXN1bHQoKSkgewpAQCAtNjY5LDYg
Kzk3MiwxNyBAQCBSZWdpc3RlcklEKiBQcmVmaXhSZXNvbHZlTm9kZTo6ZW1pdENvZGUoCiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcmVmaXhCcmFja2V0Tm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1ByZWZpeEJyYWNrZXROb2RlOjp+UHJlZml4
QnJhY2tldE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMp
OworfQorCit2b2lkIFByZWZpeEJyYWNrZXROb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2Vy
JiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZGQobV9iYXNlLnJlbGVhc2UoKSk7CisgICAg
cmVsZWFzZXIuYWRkKG1fc3Vic2NyaXB0LnJlbGVhc2UoKSk7Cit9CisKIFJlZ2lzdGVySUQqIFBy
ZWZpeEJyYWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwpAQCAtNjg4LDYgKzEwMDIsMTYgQEAgUmVnaXN0ZXJJRCog
UHJlZml4QnJhY2tldE5vZGU6OmVtaXRDb2RlKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUHJlZml4RG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKK1ByZWZpeERvdE5vZGU6On5QcmVmaXhEb3ROb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6
OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBQcmVmaXhEb3ROb2RlOjpyZWxlYXNl
Tm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZGQobV9iYXNl
LnJlbGVhc2UoKSk7Cit9CisKIFJlZ2lzdGVySUQqIFByZWZpeERvdE5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CkBAIC03
MDYsNiArMTAzMCwxNiBAQCBSZWdpc3RlcklEKiBQcmVmaXhEb3ROb2RlOjplbWl0Q29kZShDb2Rl
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcmVmaXhFcnJvck5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorUHJlZml4RXJyb3JOb2RlOjp+UHJl
Zml4RXJyb3JOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlz
KTsKK30KKwordm9pZCBQcmVmaXhFcnJvck5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXIm
IHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkZChtX2V4cHIucmVsZWFzZSgpKTsKK30KKwog
UmVnaXN0ZXJJRCogUHJlZml4RXJyb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqKQogewogICAgIHJldHVybiBlbWl0VGhyb3dFcnJvcihnZW5lcmF0
b3IsIFJlZmVyZW5jZUVycm9yLCBtX29wZXJhdG9yID09IE9wUGx1c1BsdXMgPyAiUHJlZml4ICsr
IG9wZXJhdG9yIGFwcGxpZWQgdG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVuY2UuIiA6ICJQ
cmVmaXggLS0gb3BlcmF0b3IgYXBwbGllZCB0byB2YWx1ZSB0aGF0IGlzIG5vdCBhIHJlZmVyZW5j
ZS4iKTsKQEAgLTcxMyw2ICsxMDQ3LDE2IEBAIFJlZ2lzdGVySUQqIFByZWZpeEVycm9yTm9kZTo6
ZW1pdENvZGUoQ28KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVuYXJ5IE9w
ZXJhdGlvbiBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitVbmFy
eU9wTm9kZTo6flVuYXJ5T3BOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxO
b2Rlcyh0aGlzKTsKK30KKwordm9pZCBVbmFyeU9wTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxl
YXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRkKG1fZXhwci5yZWxlYXNlKCkpOwor
fQorCiBSZWdpc3RlcklEKiBVbmFyeU9wTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVnaXN0ZXJJRCogc3JjID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7CkBAIC03MjEsNiArMTA2NSwxNyBAQCBSZWdpc3Rl
cklEKiBVbmFyeU9wTm9kZTo6ZW1pdENvZGUoQ29kZUdlCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBCaW5hcnkgT3BlcmF0aW9uIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKK0JpbmFyeU9wTm9kZTo6fkJpbmFyeU9wTm9kZSgpCit7CisgICAg
Tm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgQmluYXJ5T3BO
b2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNl
ci5hZGQobV9leHByMS5yZWxlYXNlKCkpOworICAgIHJlbGVhc2VyLmFkZChtX2V4cHIyLnJlbGVh
c2UoKSk7Cit9CisKIFJlZ2lzdGVySUQqIEJpbmFyeU9wTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2Rl
ID0gdGhpcy0+b3Bjb2RlKCk7CkBAIC03ODIsNyArMTEzNywxOCBAQCBSZWdpc3RlcklEKiBJbnN0
YW5jZU9mTm9kZTo6ZW1pdENvZGUoQ29kCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0SW5zdGFu
Y2VPZihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdl
dCgpLCBzcmMyLmdldCgpLCBzcmMyUHJvdG90eXBlKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEJpbmFyeSBMb2dpY2FsIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2dpY2FsT3BOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTG9naWNhbE9wTm9kZTo6fkxvZ2ljYWxP
cE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQor
Cit2b2lkIExvZ2ljYWxPcE5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2Vy
KQoreworICAgIHJlbGVhc2VyLmFkZChtX2V4cHIxLnJlbGVhc2UoKSk7CisgICAgcmVsZWFzZXIu
YWRkKG1fZXhwcjIucmVsZWFzZSgpKTsKK30KIAogUmVnaXN0ZXJJRCogTG9naWNhbE9wTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CkBA
IC04MDIsNiArMTE2OCwxOCBAQCBSZWdpc3RlcklEKiBMb2dpY2FsT3BOb2RlOjplbWl0Q29kZShD
b2RlCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25kaXRpb25hbE5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvbmRpdGlvbmFsTm9kZTo6fkNvbmRp
dGlvbmFsTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7
Cit9CisKK3ZvaWQgQ29uZGl0aW9uYWxOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiBy
ZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZGQobV9sb2dpY2FsLnJlbGVhc2UoKSk7CisgICAg
cmVsZWFzZXIuYWRkKG1fZXhwcjEucmVsZWFzZSgpKTsKKyAgICByZWxlYXNlci5hZGQobV9leHBy
Mi5yZWxlYXNlKCkpOworfQorCiBSZWdpc3RlcklEKiBDb25kaXRpb25hbE5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBuZXdEc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwpA
QCAtODI0LDYgKzEyMDIsMTYgQEAgUmVnaXN0ZXJJRCogQ29uZGl0aW9uYWxOb2RlOjplbWl0Q29k
ZShDbwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVhZE1vZGlmeVJlc29s
dmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1JlYWRNb2RpZnlS
ZXNvbHZlTm9kZTo6flJlYWRNb2RpZnlSZXNvbHZlTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2Vy
OjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgUmVhZE1vZGlmeVJlc29sdmVOb2Rl
OjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5h
ZGQobV9yaWdodC5yZWxlYXNlKCkpOworfQorCiAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgbW92
ZWQgdG8gYmUgYSBtZXRob2Qgb24gQ29kZUdlbmVyYXRvcj8KIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IFJlZ2lzdGVySUQqIGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3Jj
MiwgT3BlcmF0b3Igb3BlciwgT3BlcmFuZFR5cGVzIHR5cGVzKQogewpAQCAtOTE0LDYgKzEzMDIs
MTYgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0QwogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXNzaWduUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQXNzaWduUmVzb2x2ZU5vZGU6On5Bc3NpZ25SZXNv
bHZlTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9
CisKK3ZvaWQgQXNzaWduUmVzb2x2ZU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJl
bGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkZChtX3JpZ2h0LnJlbGVhc2UoKSk7Cit9CisKIFJl
Z2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBn
ZW5lcmF0b3IucmVnaXN0ZXJGb3IobV9pZGVudCkpIHsKQEAgLTk0NSw2ICsxMzQzLDE3IEBAIFJl
Z2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Q29kZSgKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnbkRvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAorQXNzaWduRG90Tm9kZTo6fkFzc2lnbkRvdE5vZGUoKQoreworICAgIE5v
ZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEFzc2lnbkRvdE5v
ZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2Vy
LmFkZChtX2Jhc2UucmVsZWFzZSgpKTsKKyAgICByZWxlYXNlci5hZGQobV9yaWdodC5yZWxlYXNl
KCkpOworfQorCiBSZWdpc3RlcklEKiBBc3NpZ25Eb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UuZ2V0KCks
IG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpOwpAQCAt
OTU3LDYgKzEzNjYsMTcgQEAgUmVnaXN0ZXJJRCogQXNzaWduRG90Tm9kZTo6ZW1pdENvZGUoQ29k
ZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVhZE1vZGlmeURvdE5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorUmVhZE1vZGlmeURvdE5vZGU6
On5SZWFkTW9kaWZ5RG90Tm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9k
ZXModGhpcyk7Cit9CisKK3ZvaWQgUmVhZE1vZGlmeURvdE5vZGU6OnJlbGVhc2VOb2RlcyhOb2Rl
UmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkZChtX2Jhc2UucmVsZWFzZSgp
KTsKKyAgICByZWxlYXNlci5hZGQobV9yaWdodC5yZWxlYXNlKCkpOworfQorCiBSZWdpc3RlcklE
KiBSZWFkTW9kaWZ5RG90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0
b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNlLmdldCgpLCBtX3JpZ2h0SGFzQXNzaWdu
bWVudHMsIG1fcmlnaHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKQEAgLTk3Miw2ICsxMzkyLDE3IEBA
IFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlEb3ROb2RlOjplbWl0Q29kZSgKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnbkVycm9yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCitBc3NpZ25FcnJvck5vZGU6On5Bc3NpZ25FcnJvck5vZGUoKQor
eworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEFz
c2lnbkVycm9yTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7Cisg
ICAgcmVsZWFzZXIuYWRkKG1fbGVmdC5yZWxlYXNlKCkpOworICAgIHJlbGVhc2VyLmFkZChtX3Jp
Z2h0LnJlbGVhc2UoKSk7Cit9CisKIFJlZ2lzdGVySUQqIEFzc2lnbkVycm9yTm9kZTo6ZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKIHsKICAgICByZXR1cm4g
ZW1pdFRocm93RXJyb3IoZ2VuZXJhdG9yLCBSZWZlcmVuY2VFcnJvciwgIkxlZnQgc2lkZSBvZiBh
c3NpZ25tZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsKQEAgLTk3OSw2ICsxNDEwLDE4IEBAIFJl
Z2lzdGVySUQqIEFzc2lnbkVycm9yTm9kZTo6ZW1pdENvZGUoQ28KIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnbkJyYWNrZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKK0Fzc2lnbkJyYWNrZXROb2RlOjp+QXNzaWduQnJhY2tldE5vZGUo
KQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lk
IEFzc2lnbkJyYWNrZXROb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikK
K3sKKyAgICByZWxlYXNlci5hZGQobV9iYXNlLnJlbGVhc2UoKSk7CisgICAgcmVsZWFzZXIuYWRk
KG1fc3Vic2NyaXB0LnJlbGVhc2UoKSk7CisgICAgcmVsZWFzZXIuYWRkKG1fcmlnaHQucmVsZWFz
ZSgpKTsKK30KKwogUmVnaXN0ZXJJRCogQXNzaWduQnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZS5n
ZXQoKSwgbV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cyB8fCBtX3JpZ2h0SGFzQXNzaWdubWVudHMs
IG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSAmJiBtX3JpZ2h0LT5pc1B1cmUoZ2VuZXJh
dG9yKSk7CkBAIC05OTEsNiArMTQzNCwyMCBAQCBSZWdpc3RlcklEKiBBc3NpZ25CcmFja2V0Tm9k
ZTo6ZW1pdENvZGUoCiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVl
ZGVkKGRzdCwgcmVzdWx0KTsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IFJlYWRNb2RpZnlCcmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitSZWFkTW9kaWZ5QnJhY2tldE5vZGU6On5SZWFkTW9kaWZ5QnJhY2tldE5vZGUoKQorewor
ICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIFJlYWRN
b2RpZnlCcmFja2V0Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7
CisgICAgcmVsZWFzZXIuYWRkKG1fYmFzZS5yZWxlYXNlKCkpOworICAgIHJlbGVhc2VyLmFkZCht
X3N1YnNjcmlwdC5yZWxlYXNlKCkpOworICAgIHJlbGVhc2VyLmFkZChtX3JpZ2h0LnJlbGVhc2Uo
KSk7Cit9CisKIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV9iYXNl
LmdldCgpLCBtX3N1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzIHx8IG1fcmlnaHRIYXNBc3NpZ25tZW50
cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3IpICYmIG1fcmlnaHQtPmlzUHVyZShnZW5l
cmF0b3IpKTsKQEAgLTEwMDksMTMgKzE0NjYsMzUgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeUJy
YWNrZXROb2RlOjplbWl0QwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29t
bWFOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb21tYU5vZGU6
On5Db21tYU5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMp
OworfQorCit2b2lkIENvbW1hTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFz
ZXIpCit7CisgICAgcmVsZWFzZXIuYWRkKG1fZXhwcjEucmVsZWFzZSgpKTsKKyAgICByZWxlYXNl
ci5hZGQobV9leHByMi5yZWxlYXNlKCkpOworfQorCiBSZWdpc3RlcklEKiBDb21tYU5vZGU6OmVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShpZ25vcmVkUmVzdWx0KCksIG1fZXhwcjEuZ2V0KCkpOwogICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2V4cHIyLmdldCgpKTsKIH0KIAotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbnN0RGVjbE5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IENvbnN0RGVjbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Nv
bnN0RGVjbE5vZGU6On5Db25zdERlY2xOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVh
c2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBDb25zdERlY2xOb2RlOjpyZWxlYXNlTm9kZXMo
Tm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZGQobV9uZXh0LnJlbGVh
c2UoKSk7CisgICAgcmVsZWFzZXIuYWRkKG1faW5pdC5yZWxlYXNlKCkpOworfQogCiBDb25zdERl
Y2xOb2RlOjpDb25zdERlY2xOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbml0KQogICAgIDogRXhwcmVzc2lvbk5v
ZGUoZ2xvYmFsRGF0YSkKQEAgLTEwNTEsNiArMTUzMCwxNiBAQCBSZWdpc3RlcklEKiBDb25zdERl
Y2xOb2RlOjplbWl0Q29kZShDb2RlCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBDb25zdFN0YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29u
c3RTdGF0ZW1lbnROb2RlOjp+Q29uc3RTdGF0ZW1lbnROb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFz
ZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBDb25zdFN0YXRlbWVudE5vZGU6
OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFk
ZChtX25leHQucmVsZWFzZSgpKTsKK30KKwogUmVnaXN0ZXJJRCogQ29uc3RTdGF0ZW1lbnROb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogewogICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUobV9uZXh0LmdldCgpKTsKQEAgLTEwODIsNiArMTU3
MSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3RhdGVtZW50TGlzdFB1c2hGSUZPCiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCbG9ja05vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKK0Jsb2NrTm9kZTo6fkJsb2NrTm9kZSgpCit7CisgICAgTm9k
ZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgQmxvY2tOb2RlOjpy
ZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICBzaXplX3Qgc2l6ZSA9
IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQorICAgICAgICByZWxlYXNlci5hZGQobV9jaGlsZHJlbltpXS5yZWxlYXNlKCkpOworfQorCiBC
bG9ja05vZGU6OkJsb2NrTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1l
bnRzKiBjaGlsZHJlbikKICAgICA6IFN0YXRlbWVudE5vZGUoZ2xvYmFsRGF0YSkKIHsKQEAgLTEx
MTksNiArMTYyMCwxNiBAQCBSZWdpc3RlcklEKiBFeHByU3RhdGVtZW50Tm9kZTo6ZW1pdENvZGUo
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWYXJTdGF0ZW1lbnROb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorVmFyU3RhdGVtZW50Tm9kZTo6flZhclN0YXRl
bWVudE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOwor
fQorCit2b2lkIFZhclN0YXRlbWVudE5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJl
bGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkZChtX2V4cHIucmVsZWFzZSgpKTsKK30KKwogUmVn
aXN0ZXJJRCogVmFyU3RhdGVtZW50Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKikKIHsKICAgICBBU1NFUlQobV9leHByKTsKQEAgLTExMjcsNiArMTYz
OCwxNyBAQCBSZWdpc3RlcklEKiBWYXJTdGF0ZW1lbnROb2RlOjplbWl0Q29kZShDCiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJZk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKK0lmTm9kZTo6fklmTm9kZSgpCit7CisgICAgTm9kZVJlbGVh
c2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgSWZOb2RlOjpyZWxlYXNlTm9k
ZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZGQobV9jb25kaXRp
b24ucmVsZWFzZSgpKTsKKyAgICByZWxlYXNlci5hZGQobV9pZkJsb2NrLnJlbGVhc2UoKSk7Cit9
CisKIFJlZ2lzdGVySUQqIElmTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPExhYmVsSUQ+IGFmdGVyVGhlbiA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOwpAQCAtMTE0MCwxMCArMTY2MiwyMyBAQCBSZWdpc3RlcklEKiBJ
Zk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0CiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9pZkJsb2NrLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGFmdGVyVGhlbi5nZXQo
KSk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHN0YXRlbWVu
dCBleGVjdHV0ZWQgc28gdGhhdCBpdCBjYW4gYmUgcmV0dXJuZWQgYXMgYSBDb21wbGV0aW9uCisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBzdGF0ZW1lbnQgZXhlY3V0
ZWQgc28gdGhhdCBpdCBjYW4gYmUgcmV0dXJuZWQgYXMgYSBDb21wbGV0aW9uLgogICAgIHJldHVy
biAwOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSWZFbHNlTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWZFbHNlTm9kZTo6fklm
RWxzZU5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOwor
fQorCit2b2lkIElmRWxzZU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2Vy
KQoreworICAgIHJlbGVhc2VyLmFkZChtX2Vsc2VCbG9jay5yZWxlYXNlKCkpOworICAgIElmTm9k
ZTo6cmVsZWFzZU5vZGVzKHJlbGVhc2VyKTsKK30KKwogUmVnaXN0ZXJJRCogSWZFbHNlTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAg
ICAgUmVmUHRyPExhYmVsSUQ+IGJlZm9yZUVsc2UgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKQEAg
LTExNjcsMTIgKzE3MDIsMjMgQEAgUmVnaXN0ZXJJRCogSWZFbHNlTm9kZTo6ZW1pdENvZGUoQ29k
ZUdlbgogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChhZnRlckVsc2UuZ2V0KCkpOwogCi0gICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBzdGF0ZW1lbnQgZXhlY3R1dGVk
IHNvIHRoYXQgaXQgY2FuIGJlIHJldHVybmVkIGFzIGEgQ29tcGxldGlvbgorICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCByZXR1cm4gdGhlIGxhc3Qgc3RhdGVtZW50IGV4ZWN1dGVkIHNvIHRoYXQg
aXQgY2FuIGJlIHJldHVybmVkIGFzIGEgQ29tcGxldGlvbi4KICAgICByZXR1cm4gMDsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvV2hpbGVOb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorRG9XaGlsZU5vZGU6On5Eb1doaWxlTm9kZSgpCit7
CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgRG9X
aGlsZU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJl
bGVhc2VyLmFkZChtX3N0YXRlbWVudC5yZWxlYXNlKCkpOworICAgIHJlbGVhc2VyLmFkZChtX2V4
cHIucmVsZWFzZSgpKTsKK30KKwogUmVnaXN0ZXJJRCogRG9XaGlsZU5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxM
YWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxv
b3ApOwpAQCAtMTE5OCw2ICsxNzQ0LDE3IEBAIFJlZ2lzdGVySUQqIERvV2hpbGVOb2RlOjplbWl0
Q29kZShDb2RlR2UKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdoaWxlTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2hpbGVOb2RlOjp+V2hp
bGVOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30K
Kwordm9pZCBXaGlsZU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQor
eworICAgIHJlbGVhc2VyLmFkZChtX2V4cHIucmVsZWFzZSgpKTsKKyAgICByZWxlYXNlci5hZGQo
bV9zdGF0ZW1lbnQucmVsZWFzZSgpKTsKK30KKwogUmVnaXN0ZXJJRCogV2hpbGVOb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBS
ZWZQdHI8TGFiZWxTY29wZT4gc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNj
b3BlOjpMb29wKTsKQEAgLTEyMjUsNiArMTc4MiwxOSBAQCBSZWdpc3RlcklEKiBXaGlsZU5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBG
b3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0Zvck5vZGU6
On5Gb3JOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsK
K30KKwordm9pZCBGb3JOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikK
K3sKKyAgICByZWxlYXNlci5hZGQobV9leHByMS5yZWxlYXNlKCkpOworICAgIHJlbGVhc2VyLmFk
ZChtX2V4cHIyLnJlbGVhc2UoKSk7CisgICAgcmVsZWFzZXIuYWRkKG1fZXhwcjMucmVsZWFzZSgp
KTsKKyAgICByZWxlYXNlci5hZGQobV9zdGF0ZW1lbnQucmVsZWFzZSgpKTsKK30KKwogUmVnaXN0
ZXJJRCogRm9yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCiB7CiAgICAgaWYgKGRzdCA9PSBpZ25vcmVkUmVzdWx0KCkpCkBAIC0xMjY0LDYg
KzE4MzQsMTkgQEAgUmVnaXN0ZXJJRCogRm9yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYQogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9ySW5Ob2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitGb3JJbk5vZGU6On5Gb3JJbk5vZGUoKQoreworICAg
IE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEZvckluTm9k
ZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIu
YWRkKG1faW5pdC5yZWxlYXNlKCkpOworICAgIHJlbGVhc2VyLmFkZChtX2xleHByLnJlbGVhc2Uo
KSk7CisgICAgcmVsZWFzZXIuYWRkKG1fZXhwci5yZWxlYXNlKCkpOworICAgIHJlbGVhc2VyLmFk
ZChtX3N0YXRlbWVudC5yZWxlYXNlKCkpOworfQorCiBGb3JJbk5vZGU6OkZvckluTm9kZShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBsLCBFeHByZXNzaW9uTm9kZSog
ZXhwciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50KQogICAgIDogU3RhdGVtZW50Tm9kZShnbG9i
YWxEYXRhKQogICAgICwgbV9pbml0KDBMKQpAQCAtMTM4Nyw2ICsxOTcwLDE2IEBAIFJlZ2lzdGVy
SUQqIEJyZWFrTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFJldHVybk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAorUmV0dXJuTm9kZTo6flJldHVybk5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVs
ZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIFJldHVybk5vZGU6OnJlbGVhc2VOb2RlcyhO
b2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkZChtX3ZhbHVlLnJlbGVh
c2UoKSk7Cit9CisKIFJlZ2lzdGVySUQqIFJldHVybk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIGlmIChnZW5lcmF0b3IuY29k
ZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUpCkBAIC0xNDA2LDYgKzE5OTksMTcgQEAgUmVnaXN0ZXJJ
RCogUmV0dXJuTm9kZTo6ZW1pdENvZGUoQ29kZUdlbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gV2l0aE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCitXaXRoTm9kZTo6fldpdGhOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VB
bGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBXaXRoTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxl
YXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRkKG1fZXhwci5yZWxlYXNlKCkpOwor
ICAgIHJlbGVhc2VyLmFkZChtX3N0YXRlbWVudC5yZWxlYXNlKCkpOworfQorCiBSZWdpc3RlcklE
KiBXaXRoTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fZXhwci5nZXQoKSk7IC8vIHNjb3BlIG11c3QgYmUgcHJvdGVjdGVkIHVudGlsIHBvcHBl
ZApAQCAtMTQxNiw3ICsyMDIwLDQ1IEBAIFJlZ2lzdGVySUQqIFdpdGhOb2RlOjplbWl0Q29kZShD
b2RlR2VuZXIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gQ2FzZUNsYXVzZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworQ2FzZUNsYXVzZU5vZGU6On5DYXNlQ2xhdXNlTm9kZSgpCit7CisgICAgTm9kZVJlbGVh
c2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgQ2FzZUNsYXVzZU5vZGU6OnJl
bGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkZCht
X2V4cHIucmVsZWFzZSgpKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IENsYXVzZUxpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NsYXVz
ZUxpc3ROb2RlOjp+Q2xhdXNlTGlzdE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFz
ZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIENsYXVzZUxpc3ROb2RlOjpyZWxlYXNlTm9kZXMo
Tm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZGQobV9jbGF1c2UucmVs
ZWFzZSgpKTsKKyAgICByZWxlYXNlci5hZGQobV9uZXh0LnJlbGVhc2UoKSk7Cit9CisKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDYXNlQmxvY2tOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK0Nhc2VCbG9ja05vZGU6On5DYXNlQmxvY2tOb2RlKCkKK3sK
KyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBDYXNl
QmxvY2tOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICBy
ZWxlYXNlci5hZGQobV9saXN0MS5yZWxlYXNlKCkpOworICAgIHJlbGVhc2VyLmFkZChtX2RlZmF1
bHRDbGF1c2UucmVsZWFzZSgpKTsKKyAgICByZWxlYXNlci5hZGQobV9saXN0Mi5yZWxlYXNlKCkp
OworfQorCiBlbnVtIFN3aXRjaEtpbmQgeyAKICAgICBTd2l0Y2hVbnNldCA9IDAsCiAgICAgU3dp
dGNoTnVtYmVyID0gMSwgCkBAIC0xNTYwLDYgKzIyMDIsMTcgQEAgUmVnaXN0ZXJJRCogQ2FzZUJs
b2NrTm9kZTo6ZW1pdENvZGVGb3JCbAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gU3dpdGNoTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitTd2l0
Y2hOb2RlOjp+U3dpdGNoTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9k
ZXModGhpcyk7Cit9CisKK3ZvaWQgU3dpdGNoTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNl
ciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRkKG1fZXhwci5yZWxlYXNlKCkpOworICAg
IHJlbGVhc2VyLmFkZChtX2Jsb2NrLnJlbGVhc2UoKSk7Cit9CisKIFJlZ2lzdGVySUQqIFN3aXRj
aE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQogewogICAgIFJlZlB0cjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNj
b3BlKExhYmVsU2NvcGU6OlN3aXRjaCk7CkBAIC0xNTczLDYgKzIyMjYsMTYgQEAgUmVnaXN0ZXJJ
RCogU3dpdGNoTm9kZTo6ZW1pdENvZGUoQ29kZUdlbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gTGFiZWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCitMYWJlbE5vZGU6On5MYWJlbE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFz
ZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIExhYmVsTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVS
ZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRkKG1fc3RhdGVtZW50LnJlbGVh
c2UoKSk7Cit9CisKIFJlZ2lzdGVySUQqIExhYmVsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgaWYgKGdlbmVyYXRvci5icmVh
a1RhcmdldChtX25hbWUpKQpAQCAtMTU4Nyw2ICsyMjUwLDE2IEBAIFJlZ2lzdGVySUQqIExhYmVs
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIFRocm93Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorVGhy
b3dOb2RlOjp+VGhyb3dOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rl
cyh0aGlzKTsKK30KKwordm9pZCBUaHJvd05vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXIm
IHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkZChtX2V4cHIucmVsZWFzZSgpKTsKK30KKwog
UmVnaXN0ZXJJRCogVGhyb3dOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAoZHN0ID09IGlnbm9yZWRSZXN1bHQoKSkKQEAg
LTE1OTksNiArMjI3MiwxOCBAQCBSZWdpc3RlcklEKiBUaHJvd05vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcnlOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1RyeU5vZGU6On5UcnlOb2RlKCkKK3sK
KyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBUcnlO
b2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNl
ci5hZGQobV90cnlCbG9jay5yZWxlYXNlKCkpOworICAgIHJlbGVhc2VyLmFkZChtX2NhdGNoQmxv
Y2sucmVsZWFzZSgpKTsKKyAgICByZWxlYXNlci5hZGQobV9maW5hbGx5QmxvY2sucmVsZWFzZSgp
KTsKK30KKwogUmVnaXN0ZXJJRCogVHJ5Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPExhYmVsSUQ+IHRyeVN0YXJ0
TGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKQEAgLTE2NTcsNiArMjM0MiwxNyBAQCBSZWdp
c3RlcklEKiBUcnlOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhCiAgICAgcmV0dXJuIGRzdDsKIH0K
IAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBhcmFtZXRlck5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFyYW1ldGVyTm9kZTo6flBhcmFtZXRlck5vZGUo
KQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lk
IFBhcmFtZXRlck5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQorewor
ICAgIHJlbGVhc2VyLmFkZChtX25leHQucmVsZWFzZSgpKTsKK30KIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIFNjb3BlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCkBAIC0xODQyLDYgKzI1MzgsMTcgQEAgSWRlbnRpZmllciogRnVuY3Rpb25Cb2R5Tm9kZTo6
Y29weVBhcmFtZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY0RlY2xO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitGdW5jRGVjbE5vZGU6On5G
dW5jRGVjbE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMp
OworfQorCit2b2lkIEZ1bmNEZWNsTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVs
ZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRkKG1fcGFyYW1ldGVyLnJlbGVhc2UoKSk7CisgICAg
cmVsZWFzZXIuYWRkKG1fYm9keS5yZWxlYXNlKCkpOworfQorCiBKU0Z1bmN0aW9uKiBGdW5jRGVj
bE5vZGU6Om1ha2VGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgbV9pZGVu
dCwgbV9ib2R5LmdldCgpLCBzY29wZUNoYWluKTsKQEAgLTE4NTQsNiArMjU2MSwxNyBAQCBSZWdp
c3RlcklEKiBGdW5jRGVjbE5vZGU6OmVtaXRDb2RlKENvZGVHCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBGdW5jRXhwck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKK0Z1bmNFeHByTm9kZTo6fkZ1bmNFeHByTm9kZSgpCit7CisgICAgTm9kZVJlbGVh
c2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgRnVuY0V4cHJOb2RlOjpyZWxl
YXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZGQobV9w
YXJhbWV0ZXIucmVsZWFzZSgpKTsKKyAgICByZWxlYXNlci5hZGQobV9ib2R5LnJlbGVhc2UoKSk7
Cit9CisKIFJlZ2lzdGVySUQqIEZ1bmNFeHByTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
TmV3RnVuY3Rpb25FeHByZXNzaW9uKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHRo
aXMpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUva2pzL25vZGVzLmgJKHJldmlzaW9uIDM4MTE0KQorKysgSmF2YVNjcmlwdENv
cmUva2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRl
ICJTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKICNpbmNsdWRlICJyZWdl
eHAuaCIKLSNpbmNsdWRlIDx3dGYvTGlzdFJlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJh
bS5oPgpAQCAtMTQ0LDYgKzE0Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFs
IH5QYXJzZXJSZWZDb3VudGVkKCk7CiAgICAgfTsKIAorICAgIGNsYXNzIE5vZGVSZWxlYXNlcjsK
KwogICAgIGNsYXNzIE5vZGUgOiBwdWJsaWMgUGFyc2VyUmVmQ291bnRlZCB7CiAgICAgcHVibGlj
OgogICAgICAgICB0eXBlZGVmIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2sgTm9kZVN0YWNr
OwpAQCAtMTUyLDYgKzE1Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIE5vZGUoSlNH
bG9iYWxEYXRhKikgSlNDX0ZBU1RfQ0FMTDsKIAorICAgICAgICAvLyBOb25yZWN1cnNpdmUgZGVz
dHJ1Y3Rpb24uCisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2Vy
Jik7CisKICAgICAgICAgLyoKICAgICAgICAgICAgIFJldHVybiB2YWx1ZTogVGhlIHJlZ2lzdGVy
IGhvbGRpbmcgdGhlIHByb2R1Y3Rpb24ncyB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgIGRz
dDogQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlIG1vc3QgZWZmaWNpZW50CkBA
IC0xOTAsNyArMTk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMID0gMDsKICAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBuZWVkc1BhcmVuc0lmTGVmdG1vc3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgICAgICAKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgaW50IG1fbGluZTsKICAgICB9OwpA
QCAtNDc3LDcgKzQ4MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByb3RlY3RlZDoKICAgICAg
ICAgSWRlbnRpZmllciBtX2lkZW50OwogICAgICAgICBpbnQzMl90IG1fc3RhcnRPZmZzZXQ7Ci0g
ICAgICAgIAogICAgIH07CiAKICAgICBjbGFzcyBFbGVtZW50Tm9kZSA6IHB1YmxpYyBOb2RlIHsK
QEAgLTQ5Nyw2ICs1MDAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGwtPm1fbmV4
dCA9IHRoaXM7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5FbGVtZW50Tm9kZSgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAg
ICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogCkBAIC01MDQsMTAg
KzUxMCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBFeHByZXNzaW9uTm9kZSogdmFsdWUo
KSB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KIAogICAgICAgICBFbGVtZW50Tm9kZSogbmV4dCgp
IHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQotICAgICAgICBQYXNzUmVmUHRyPEVsZW1lbnROb2Rl
PiByZWxlYXNlTmV4dCgpIEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgTGlzdFJlZlB0cjxFbGVtZW50Tm9kZT4gbV9uZXh0
OworICAgICAgICBSZWZQdHI8RWxlbWVudE5vZGU+IG1fbmV4dDsKICAgICAgICAgaW50IG1fZWxp
c2lvbjsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX25vZGU7CiAgICAgfTsKQEAg
LTUzNyw2ICs1NDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAK
KyAgICAgICAgdmlydHVhbCB+QXJyYXlOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxl
YXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0Nf
RkFTVF9DQUxMOwpAQCAtNTYwLDYgKzU2OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5Qcm9wZXJ0eU5vZGUoKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KIApAQCAtNTg3LDE2ICs1OTgsMTcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBsaXN0LT5tX25leHQgPSB0aGlzOwogICAg
ICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+UHJvcGVydHlMaXN0Tm9kZSgpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
SlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNz
aW9uOyB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxQcm9wZXJ0eUxpc3ROb2RlPiByZWxlYXNlTmV4
dCgpIEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQotCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdExpdGVyYWxOb2RlOwogICAgICAgICBS
ZWZQdHI8UHJvcGVydHlOb2RlPiBtX25vZGU7Ci0gICAgICAgIExpc3RSZWZQdHI8UHJvcGVydHlM
aXN0Tm9kZT4gbV9uZXh0OworICAgICAgICBSZWZQdHI8UHJvcGVydHlMaXN0Tm9kZT4gbV9uZXh0
OwogICAgIH07CiAKICAgICBjbGFzcyBPYmplY3RMaXRlcmFsTm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSB7CkBAIC02MTIsNiArNjI0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsK
ICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfk9iamVjdExpdGVyYWxOb2RlKCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQpAQCAtNjMxLDYgKzY0
Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2
aXJ0dWFsIH5CcmFja2V0QWNjZXNzb3JOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxl
YXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0Nf
RkFTVF9DQUxMOwpAQCAtNjU2LDYgKzY3NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5Eb3RBY2Nlc3Nvck5vZGUoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNZW1iZXI7IH0KQEAgLTY4NSwxMyArNzA2
LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbGlzdE5vZGUtPm1fbmV4dCA9IHRo
aXM7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5Bcmd1bWVudExpc3ROb2RlKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJl
Y0V4cHJlc3Npb247IH0KIAotICAgICAgICBQYXNzUmVmUHRyPEFyZ3VtZW50TGlzdE5vZGU+IHJl
bGVhc2VOZXh0KCkgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9Ci0K
LSAgICAgICAgTGlzdFJlZlB0cjxBcmd1bWVudExpc3ROb2RlPiBtX25leHQ7CisgICAgICAgIFJl
ZlB0cjxBcmd1bWVudExpc3ROb2RlPiBtX25leHQ7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gbV9leHByOwogICAgIH07CiAKQEAgLTcwOCw2ICs3MzAsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+QXJndW1lbnRzTm9k
ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOwor
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0Nf
RkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogCkBAIC03
MjksNiArNzU0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisg
ICAgICAgIHZpcnR1YWwgfk5ld0V4cHJOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxl
YXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0Nf
RkFTVF9DQUxMOwpAQCAtNzQ4LDYgKzc3Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5FdmFsRnVuY3Rpb25DYWxsTm9kZSgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2Vk
ZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KQEAgLTc2Niw2ICs3
OTcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAg
dmlydHVhbCB+RnVuY3Rpb25DYWxsVmFsdWVOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlND
X0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25z
dCB7IHJldHVybiBQcmVjQ2FsbDsgfQpAQCAtNzg1LDYgKzgxOSw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5GdW5jdGlvbkNhbGxS
ZXNvbHZlTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxl
YXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKQEAgLTgw
OCw2ICs4NDUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAg
ICAgICAgdmlydHVhbCB+RnVuY3Rpb25DYWxsQnJhY2tldE5vZGUoKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJl
Z2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19G
QVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDYWxsOyB9CkBAIC04MjksNiArODY5LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkZ1bmN0
aW9uQ2FsbERvdE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2Rl
UmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAg
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWND
YWxsOyB9CkBAIC04NzksNiArOTIyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAg
ICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgflBvc3RmaXhCcmFja2V0Tm9kZSgpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1Bvc3RmaXg7IH0KQEAgLTkwMCw2ICs5NDYs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmly
dHVhbCB+UG9zdGZpeERvdE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2Rl
cyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNQb3N0Zml4OyB9CkBAIC05MjAsNiArOTY5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgflBvc3RmaXhFcnJvck5vZGUoKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9CkBAIC05NTcs
NiArMTAwOSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAg
ICAgICB2aXJ0dWFsIH5EZWxldGVCcmFja2V0Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FM
TDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
SlNDX0ZBU1RfQ0FMTDsKQEAgLTk3Nyw2ICsxMDMyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkRlbGV0ZURvdE5vZGUoKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBAIC05OTUsNiArMTA1Myw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5E
ZWxldGVWYWx1ZU5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2Rl
UmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBA
IC0xMDEyLDYgKzEwNzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9
CiAKKyAgICAgICAgdmlydHVhbCB+Vm9pZE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJl
bGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7
CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpT
Q19GQVNUX0NBTEw7CkBAIC0xMDQ5LDYgKzExMTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+VHlwZU9mVmFsdWVOb2RlKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwpAQCAtMTA4Niw2ICsxMTUzLDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwg
flByZWZpeEJyYWNrZXROb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMo
Tm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsK
ICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQ
cmVjVW5hcnk7IH0KQEAgLTExMDcsNiArMTE3Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5QcmVmaXhEb3ROb2RlKCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUG9zdGZpeDsgfQpAQCAtMTEyNyw2ICsx
MjAwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAg
IHZpcnR1YWwgflByZWZpeEVycm9yTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFz
ZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY1VuYXJ5OyB9CkBAIC0xMTUwLDYgKzEyMjYsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+VW5hcnlPcE5vZGUoKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgT3Bjb2RlSUQgb3Bjb2Rl
KCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCA9IDA7CiAKQEAgLTEyMjUsNiArMTMwNCw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5CaW5h
cnlPcE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFz
ZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgT3Bj
b2RlSUQgb3Bjb2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCA9IDA7CiAKQEAgLTEyMzQsMzEgKzEz
MTYsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9yaWdodEhhc0Fzc2lnbm1l
bnRzOwogICAgIH07CiAKLSAgICBjbGFzcyBSZXZlcnNlQmluYXJ5T3BOb2RlIDogcHVibGljIEV4
cHJlc3Npb25Ob2RlIHsKKyAgICBjbGFzcyBSZXZlcnNlQmluYXJ5T3BOb2RlIDogcHVibGljIEJp
bmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBSZXZlcnNlQmluYXJ5T3BOb2RlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKLSAgICAgICAgICAgIDogRXhw
cmVzc2lvbk5vZGUoZ2xvYmFsRGF0YSkKLSAgICAgICAgICAgICwgbV9leHByMShleHByMSkKLSAg
ICAgICAgICAgICwgbV9leHByMihleHByMikKLSAgICAgICAgICAgICwgbV9yaWdodEhhc0Fzc2ln
bm1lbnRzKHJpZ2h0SGFzQXNzaWdubWVudHMpCisgICAgICAgICAgICA6IEJpbmFyeU9wTm9kZShn
bG9iYWxEYXRhLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpCiAgICAgICAgIHsK
ICAgICAgICAgfQogCiAgICAgICAgIFJldmVyc2VCaW5hcnlPcE5vZGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBSZXN1bHRUeXBlIHR5cGUsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEsIHR5cGUpCi0gICAgICAgICAgICAsIG1fZXhwcjEo
ZXhwcjEpCi0gICAgICAgICAgICAsIG1fZXhwcjIoZXhwcjIpCi0gICAgICAgICAgICAsIG1fcmln
aHRIYXNBc3NpZ25tZW50cyhyaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgOiBCaW5h
cnlPcE5vZGUoZ2xvYmFsRGF0YSwgdHlwZSwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1l
bnRzKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgT3Bjb2RlSUQgb3Bjb2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCA9
IDA7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9l
eHByMTsKLSAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwotICAgICAgICBi
b29sIG1fcmlnaHRIYXNBc3NpZ25tZW50czsKICAgICB9OwogCiAgICAgY2xhc3MgTXVsdE5vZGUg
OiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKQEAgLTE1NDMsNiArMTYxMyw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5Mb2dpY2FsT3BO
b2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7
CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiAobV9vcGVyYXRvciA9PSBP
cExvZ2ljYWxBbmQpID8gUHJlY0xvZ2ljYWxBbmQgOiBQcmVjTG9naWNhbE9yOyB9CkBAIC0xNTY2
LDYgKzE2MzksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAg
ICAgICAgdmlydHVhbCB+Q29uZGl0aW9uYWxOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlND
X0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25z
dCB7IHJldHVybiBQcmVjQ29uZGl0aW9uYWw7IH0KQEAgLTE1ODgsNiArMTY2NCw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5SZWFk
TW9kaWZ5UmVzb2x2ZU5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhO
b2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7
CkBAIC0xNjExLDYgKzE2OTAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAg
ICB9CiAKKyAgICAgICAgdmlydHVhbCB+QXNzaWduUmVzb2x2ZU5vZGUoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpT
Q19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBAIC0xNjM3LDYgKzE3MTksOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+UmVhZE1vZGlm
eUJyYWNrZXROb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJl
bGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwpAQCAt
MTY2NCw2ICsxNzQ5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQog
CisgICAgICAgIHZpcnR1YWwgfkFzc2lnbkJyYWNrZXROb2RlKCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFT
VF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBKU0NfRkFTVF9DQUxMOwpAQCAtMTY4OSw2ICsxNzc3LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkFzc2lnbkRvdE5vZGUo
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNBc3NpZ25tZW50OyB9CkBA
IC0xNzEzLDYgKzE4MDQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9
CiAKKyAgICAgICAgdmlydHVhbCB+UmVhZE1vZGlmeURvdE5vZGUoKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJl
Z2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19G
QVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBAIC0xNzM3LDYgKzE4MzEsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+QXNzaWduRXJyb3JO
b2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7
CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsg
fQpAQCAtMTc1Niw2ICsxODUzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAg
ICAgfQogCisgICAgICAgIHZpcnR1YWwgfkNvbW1hTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KQEAgLTE3NzgsMTIgKzE4NzgsMTQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBDb25zdERlY2xOb2RlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25O
b2RlKiBpbikgSlNDX0ZBU1RfQ0FMTDsKIAorICAgICAgICB2aXJ0dWFsIH5Db25zdERlY2xOb2Rl
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisK
ICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19G
QVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9Ci0gICAgICAg
IFBhc3NSZWZQdHI8Q29uc3REZWNsTm9kZT4gcmVsZWFzZU5leHQoKSBKU0NfRkFTVF9DQUxMIHsg
cmV0dXJuIG1fbmV4dC5yZWxlYXNlKCk7IH0KIAogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7
Ci0gICAgICAgIExpc3RSZWZQdHI8Q29uc3REZWNsTm9kZT4gbV9uZXh0OworICAgICAgICBSZWZQ
dHI8Q29uc3REZWNsTm9kZT4gbV9uZXh0OwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IG1faW5pdDsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKQEAgLTE3OTgs
NiArMTkwMCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAg
ICAgICB2aXJ0dWFsIH5Db25zdFN0YXRlbWVudE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgCiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKQEAgLTE4MjcsMTIgKzE5MzIsMTYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBCbG9ja05vZGUoSlNHbG9iYWxEYXRhKiwgU291
cmNlRWxlbWVudHMqIGNoaWxkcmVuKSBKU0NfRkFTVF9DQUxMOwogCisgICAgICAgIHZpcnR1YWwg
fkJsb2NrTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxl
YXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKICAgICAg
ICAgU3RhdGVtZW50VmVjdG9yJiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCbG9jaygpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1
cm4gdHJ1ZTsgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBTdGF0ZW1lbnRWZWN0b3IgbV9j
aGlsZHJlbjsKICAgICB9OwpAQCAtMTg4NSw2ICsxOTk0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgdmlydHVhbCB+VmFyU3RhdGVt
ZW50Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNl
ciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKQEAgLTE5MDIs
NiArMjAxNCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAg
ICAgICB2aXJ0dWFsIH5JZk5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2Rl
cyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxM
OwogCkBAIC0xOTE4LDYgKzIwMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAg
ICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+SWZFbHNlTm9kZSgpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEpTQ19GQVNUX0NBTEw7CiAKQEAgLTE5MzQsMTAgKzIwNTIsMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkRvV2hpbGVOb2Rl
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisK
ICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNMb29wKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CisKICAg
ICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gbV9zdGF0ZW1lbnQ7CiAg
ICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwpAQCAtMTk1MiwxMCArMjA3NCwx
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmly
dHVhbCB+V2hpbGVOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9k
ZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMb29wKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVy
biB0cnVlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IG1fZXhwcjsKICAgICAgICAgUmVmUHRyPFN0YXRlbWVudE5vZGU+IG1fc3RhdGVtZW50OwpAQCAt
MTk3NCwxMCArMjEwMCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChz
dGF0ZW1lbnQpOwogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+Rm9yTm9kZSgpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCBib29sIGlz
TG9vcCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgcHJpdmF0
ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOwogICAgICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjI7CkBAIC0xOTkxLDEwICsyMTIxLDE0IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBGb3JJbk5vZGUoSlNHbG9iYWxEYXRhKiwgRXhwcmVzc2lvbk5v
ZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqKSBKU0NfRkFTVF9DQUxMOwogICAg
ICAgICBGb3JJbk5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Np
b25Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwgaW50IGRpdm90LCBpbnQg
c3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIAorICAg
ICAgICB2aXJ0dWFsIH5Gb3JJbk5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VO
b2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9D
QUxMOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvb3AoKSBjb25zdCBKU0NfRkFTVF9DQUxM
IHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIElkZW50aWZpZXIgbV9p
ZGVudDsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2luaXQ7CkBAIC0yMDUyLDYg
KzIxODYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAg
ICAgdmlydHVhbCB+UmV0dXJuTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5v
ZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NB
TEw7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1JldHVybk5vZGUoKSBjb25zdCBKU0NfRkFTVF9D
QUxMIHsgcmV0dXJuIHRydWU7IH0KQEAgLTIwNzEsNiArMjIwOCw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5XaXRoTm9kZSgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKQEAgLTIwOTAsNiArMjIzMCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFs
IH5MYWJlbE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVs
ZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogCkBAIC0y
MTA2LDYgKzIyNDksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAK
KyAgICAgICAgdmlydHVhbCB+VGhyb3dOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxl
YXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZB
U1RfQ0FMTDsKIApAQCAtMjEyNCw2ICsyMjcwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgflRyeU5vZGUoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKIAogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiBkc3QgPSAwKSBKU0NfRkFTVF9DQUxMOwpAQCAtMjE1MCwxNyArMjI5OSwxOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIGwtPm1fbmV4dCA9IHRoaXM7CiAgICAgICAgIH0KIAor
ICAgICAgICB2aXJ0dWFsIH5QYXJhbWV0ZXJOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgSWRlbnRpZmllciBpZGVudCgp
IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gbV9pZGVudDsgfQogICAgICAgICBQYXJhbWV0ZXJOb2Rl
ICpuZXh0UGFyYW0oKSBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgUGFzc1JlZlB0cjxQYXJhbWV0ZXJOb2RlPiByZWxlYXNlTmV4dCgpIEpT
Q19GQVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQogICAgICAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiBQcmVjRXhwcmVzc2lvbjsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNs
YXNzIEZ1bmNEZWNsTm9kZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIEZ1bmNFeHByTm9kZTsKICAg
ICAgICAgSWRlbnRpZmllciBtX2lkZW50OwotICAgICAgICBMaXN0UmVmUHRyPFBhcmFtZXRlck5v
ZGU+IG1fbmV4dDsKKyAgICAgICAgUmVmUHRyPFBhcmFtZXRlck5vZGU+IG1fbmV4dDsKICAgICB9
OwogCiAgICAgY2xhc3MgU2NvcGVOb2RlIDogcHVibGljIEJsb2NrTm9kZSB7CkBAIC0yMzIzLDYg
KzI0NzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fYm9keS0+ZmluaXNoUGFy
c2luZyhzb3VyY2UsIG1fcGFyYW1ldGVyLmdldCgpKTsKICAgICAgICAgfQogCisgICAgICAgIHZp
cnR1YWwgfkZ1bmNFeHByTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVz
KE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAg
SlNGdW5jdGlvbiogbWFrZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgSlND
X0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBAIC0yMzUwLDYgKzI1MDQsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIG1fYm9keS0+ZmluaXNoUGFyc2luZyhzb3VyY2UsIG1fcGFyYW1ldGVy
LmdldCgpKTsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkZ1bmNEZWNsTm9kZSgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKQEAgLTIzODAsNiArMjUzNyw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIGNoaWxkcmVuLT5yZWxlYXNlQ29udGVu
dHNJbnRvVmVjdG9yKG1fY2hpbGRyZW4pOwogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+
Q2FzZUNsYXVzZU5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2Rl
UmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNl
ZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Np
b247IH0KIApAQCAtMjQwNiwxNiArMjU2NiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIGNsYXVzZUxpc3QtPm1fbmV4dCA9IHRoaXM7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0
dWFsIH5DbGF1c2VMaXN0Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVz
KE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIENhc2VDbGF1c2VOb2RlKiBnZXRDbGF1c2UoKSBj
b25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG1fY2xhdXNlLmdldCgpOyB9CiAgICAgICAgIENs
YXVzZUxpc3ROb2RlKiBnZXROZXh0KCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBtX25l
eHQuZ2V0KCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2xhdXNlTGlzdE5vZGU+
IHJlbGVhc2VOZXh0KCkgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9
CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBmcmllbmQgY2xhc3MgQ2FzZUJsb2NrTm9kZTsKICAgICAgICAgUmVmUHRyPENhc2VD
bGF1c2VOb2RlPiBtX2NsYXVzZTsKLSAgICAgICAgTGlzdFJlZlB0cjxDbGF1c2VMaXN0Tm9kZT4g
bV9uZXh0OworICAgICAgICBSZWZQdHI8Q2xhdXNlTGlzdE5vZGU+IG1fbmV4dDsKICAgICB9Owog
CiAgICAgY2xhc3MgQ2FzZUJsb2NrTm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTI0MjgsNiArMjU5
MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2
aXJ0dWFsIH5DYXNlQmxvY2tOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9k
ZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENvZGVGb3JCbG9j
ayhDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogaW5wdXQsIFJlZ2lzdGVySUQqIGRzdCA9IDAp
IEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBAIC0yNDQ5LDYgKzI2MTQsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+U3dpdGNo
Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYp
OworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24995</attachid>
            <date>2008-11-08 11:58:25 -0800</date>
            <delta_ts>2008-11-09 11:59:50 -0800</delta_ts>
            <desc>patch</desc>
            <filename>DeepParseTreePatch.txt</filename>
            <type>text/plain</type>
            <size>71276</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MjM0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMDgtMTEtMDggIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICBJbmNsdWRlcyBzb21lIHdvcmsgZG9uZSBieSBDaHJpcyBCcmljaGZvcmQu
CisKKyAgICAgICAgLSBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0ODg2CisgICAgICAgICAgU3RhY2sgb3ZlcmZsb3cgZHVlIHRvIGRlZXBseSBuZXN0ZWQgcGFy
c2UgdHJlZSBkb2luZyByZXBlYXRlZCBzdHJpbmcgY29uY2F0ZW50YXRpb24KKworICAgICAgICBU
ZXN0OiBmYXN0L2pzL2xhcmdlLWV4cHJlc3Npb25zLmh0bWwKKworICAgICAgICAxKSBDb2RlIGdl
bmVyYXRpb24gaXMgcmVjdXJzaXZlLCBzbyB0YWtlcyBzdGFjayBwcm9wb3J0aW9uYWwgdG8gdGhl
IGNvbXBsZXhpdHkKKyAgICAgICAgICAgb2YgdGhlIHNvdXJjZSBjb2RlIGV4cHJlc3Npb24uIEZp
eGVkIGJ5IHNldHRpbmcgYW4gYXJiaXRyYXJ5IHJlY3Vyc2lvbiBsaW1pdAorICAgICAgICAgICBv
ZiAxMCwwMDAgbm9kZXMuCisKKyAgICAgICAgMikgRGVzdHJ1Y3Rpb24gb2YgdGhlIHN5bnRheCB0
cmVlIHdhcyByZWN1cnNpdmUuIEZpeGVkIGJ5IGludHJvZHVjaW5nIGEKKyAgICAgICAgICAgbm9u
LXJlY3Vyc2l2ZSBtZWNoYW5pc20gZm9yIGRlc3Ryb3lpbmcgdGhlIHRyZWUuCisKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQ29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkNvZGVHZW5l
cmF0b3I6OkNvZGVHZW5lcmF0b3IpOiBJbml0aWFsaXplIGRlcHRoIHRvIDAuCisgICAgICAgIChK
U0M6OkNvZGVHZW5lcmF0b3I6OmVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKTog
QWRkZWQuIEVtaXRzIHRoZSBjb2RlCisgICAgICAgIHRvIHRocm93IGEgInRvbyBkZWVwIiBleGNl
cHRpb24uCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0NvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KEpTQzo6Q29kZUdlbmVyYXRvcjo6ZW1pdE5vZGUpOiBDaGVjayBkZXB0aCBhbmQgZW1pdCBhbiBl
eGNlcHRpb24gaWYgd2UgZXhjZWVkCisgICAgICAgIHRoZSBtYXhpbXVtIGRlcHRoLgorCisgICAg
ICAgICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Tm9kZVJlbGVhc2VyOjpyZWxl
YXNlQWxsTm9kZXMpOiBBZGRlZC4gVG8gYmUgY2FsbGVkIGluc2lkZSBub2RlIGRlc3RydWN0b3Jz
CisgICAgICAgIHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxscyB0byBkZXN0cnVjdG9ycyBmb3Igbm9k
ZXMgaW5zaWRlIHRoaXMgb25lLgorICAgICAgICAoSlNDOjpOb2RlUmVsZWFzZXI6OmFkb3B0KTog
QWRkZWQuIFRvIGJlIGNhbGxlZCBpbnNpZGUgcmVsZWFzZU5vZGVzIGZ1bmN0aW9ucy4KKyAgICAg
ICAgQWxzbyBhZGRlZCByZWxlYXNlTm9kZXMgZnVuY3Rpb25zIGFuZCBjYWxscyB0byByZWxlYXNl
QWxsTm9kZXMgaW5zaWRlIGRlc3RydWN0b3JzCisgICAgICAgIGZvciBlYWNoIGNsYXNzIGRlcml2
ZWQgZnJvbSBOb2RlIHRoYXQgaGFzIFJlZlB0ciB0byBvdGhlciBub2Rlcy4KKworICAgICAgICAq
IHBhcnNlci9Ob2Rlcy5oOiBBZGRlZCBkZWNsYXJhdGlvbnMgb2YgcmVsZWFzZU5vZGVzIGFuZCBk
ZXN0cnVjdG9ycyBpbiBhbGwgY2xhc3NlcworICAgICAgICB0aGF0IG5lZWRlZCBpdC4gRWxpbWlu
YXRlZCB1c2Ugb2YgTGlzdFJlZlB0ciBhbmQgcmVsZWFzZU5leHQsIHdoaWNoIGFyZSB0aGUgdHdv
IHBhcnRzCisgICAgICAgIG9mIGFuIG9sZGVyIHNvbHV0aW9uIHRvIHRoZSBub24tcmVjdXJzaXZl
IGRlc3RydWN0aW9uIHByb2JsZW0gdGhhdCB3b3JrcyBvbmx5IGZvcgorICAgICAgICBsaXN0cywg
d2hlcmVhcyB0aGUgbmV3IHNvbHV0aW9uIHdvcmtzIGZvciBvdGhlciBncmFwaHMuIENoYW5nZWQg
UmV2ZXJzZUJpbmFyeU9wTm9kZQorICAgICAgICB0byB1c2UgQmluYXJ5T3BOb2RlIGFzIGEgYmFz
ZSBjbGFzcyB0byBhdm9pZCBzb21lIGR1cGxpY2F0ZWQgY29kZS4KKwogMjAwOC0xMS0wNyAgQ2Ft
ZXJvbiBad2FyaWNoICA8endhcmljaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
R2VvZmYgR2FyZW4uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQ29kZUdlbmVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0NvZGVH
ZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzODIzMykKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDYgKzIwNyw3IEBA
IENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUKICAgICAsIG1fbmV4dEds
b2JhbEluZGV4KC0xKQogICAgICwgbV9nbG9iYWxEYXRhKCZzY29wZUNoYWluLmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCktPmdsb2JhbERhdGEoKSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9w
X2VuZCkKKyAgICAsIG1fZW1pdE5vZGVEZXB0aCgwKQogewogICAgIGlmIChtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzKQogICAgICAgICBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbiA9IHRy
dWU7CkBAIC0yODMsNiArMjg0LDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihGdW5j
dGlvbkJvZAogICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCiAgICAgLCBtX2dsb2JhbERh
dGEoJnNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKS0+Z2xvYmFsRGF0YSgp
KQogICAgICwgbV9sYXN0T3Bjb2RlSUQob3BfZW5kKQorICAgICwgbV9lbWl0Tm9kZURlcHRoKDAp
CiB7CiAgICAgaWYgKG1fc2hvdWxkRW1pdERlYnVnSG9va3MpCiAgICAgICAgIG1fY29kZUJsb2Nr
LT5uZWVkc0Z1bGxTY29wZUNoYWluID0gdHJ1ZTsKQEAgLTM1Myw2ICszNTUsNyBAQCBDb2RlR2Vu
ZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBlCiAgICAgLCBtX2NvZGVUeXBlKEV2YWxD
b2RlKQogICAgICwgbV9nbG9iYWxEYXRhKCZzY29wZUNoYWluLmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCktPmdsb2JhbERhdGEoKSkKICAgICAsIG1fbGFzdE9wY29kZUlEKG9wX2VuZCkKKyAg
ICAsIG1fZW1pdE5vZGVEZXB0aCgwKQogewogICAgIGlmIChtX3Nob3VsZEVtaXREZWJ1Z0hvb2tz
KQogICAgICAgICBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbiA9IHRydWU7CkBAIC0x
Njc2LDQgKzE2NzksMTYgQEAgdm9pZCBDb2RlR2VuZXJhdG9yOjplbmRTd2l0Y2godWludDMyX3Qg
YwogICAgIH0KIH0KIAorUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdFRocm93RXhwcmVz
c2lvblRvb0RlZXBFeGNlcHRpb24oKQoreworICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gZG8g
YW4gZXZlbiBiZXR0ZXIgam9iIG9mIGlkZW50aWZ5aW5nIGV4YWN0bHkgd2hlcmUgdGhlIGV4cHJl
c3Npb24gaXMuCisgICAgLy8gQW5kIHdlIGNvdWxkIG1ha2UgdGhlIGNhbGxlciBwYXNzIHRoZSBu
b2RlIHBvaW50ZXIgaW4sIGlmIHRoZXJlIHdhcyBzb21lIHdheSBvZiBnZXR0aW5nCisgICAgLy8g
dGhhdCBmcm9tIGFuIGFyYml0cmFyeSBub2RlLiBIb3dldmVyLCBjYWxsaW5nIGVtaXRFeHByZXNz
aW9uSW5mbyB3aXRob3V0IGFueSB1c2VmdWwgZGF0YQorICAgIC8vIGlzIHN0aWxsIGdvb2QgZW5v
dWdoIHRvIGdldCB1cyBhbiBhY2N1cmF0ZSBsaW5lIG51bWJlci4KKyAgICBlbWl0RXhwcmVzc2lv
bkluZm8oMCwgMCwgMCk7CisgICAgUmVnaXN0ZXJJRCogZXhjZXB0aW9uID0gZW1pdE5ld0Vycm9y
KG5ld1RlbXBvcmFyeSgpLCBTeW50YXhFcnJvciwganNTdHJpbmcoZ2xvYmFsRGF0YSgpLCAiRXhw
cmVzc2lvbiB0b28gZGVlcCIpKTsKKyAgICBlbWl0VGhyb3coZXhjZXB0aW9uKTsKKyAgICByZXR1
cm4gZXhjZXB0aW9uOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Db2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0NvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMzgyMzMpCisrKyBK
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjUsNyArMTY1LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIExp
bmVJbmZvIGluZm8gPSB7IGluc3RydWN0aW9ucygpLnNpemUoKSwgbi0+bGluZU5vKCkgfTsKICAg
ICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+bGluZUluZm8uYXBwZW5kKGluZm8pOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG4tPmVtaXRDb2RlKCp0aGlzLCBkc3QpOworICAg
ICAgICAgICAgaWYgKG1fZW1pdE5vZGVEZXB0aCA+PSBzX21heEVtaXROb2RlRGVwdGgpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7
CisgICAgICAgICAgICArK21fZW1pdE5vZGVEZXB0aDsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQq
IHIgPSBuLT5lbWl0Q29kZSgqdGhpcywgZHN0KTsKKyAgICAgICAgICAgIC0tbV9lbWl0Tm9kZURl
cHRoOworICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgIH0KIAogICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0Tm9kZShOb2RlKiBuKQpAQCAtMzk5LDYgKzQwNCw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTG9jYWxzKCkgeyByZXR1cm4gKG1fY29kZVR5
cGUgIT0gRXZhbENvZGUpICYmICFtX2R5bmFtaWNTY29wZURlcHRoOyB9CiAgICAgICAgIGJvb2wg
Y2FuT3B0aW1pemVOb25Mb2NhbHMoKSB7IHJldHVybiAobV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNv
ZGUpICYmICFtX2R5bmFtaWNTY29wZURlcHRoICYmICFtX2NvZGVCbG9jay0+dXNlc0V2YWw7IH0K
IAorICAgICAgICBSZWdpc3RlcklEKiBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlv
bigpOworCiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0RGVidWdIb29rczsKICAgICAgICAgYm9v
bCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3M7CiAKQEAgLTQ0NCw2ICs0NTEsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBzdGF0aWMgYm9vbCBzX2R1bXBzR2Vu
ZXJhdGVkQ29kZTsKICNlbmRpZgorCisgICAgICAgIHVuc2lnbmVkIG1fZW1pdE5vZGVEZXB0aDsK
KworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19tYXhFbWl0Tm9kZURlcHRoID0gMTAw
MDA7CiAgICAgfTsKIAogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiAz
ODIzMykKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK3N0YXRpYyB2b2lkIHN1YnN0aXR1dGUoVVN0cmluZyYgc3RyaW5nLCBjb25zdCBVU3RyaW5n
JiBzdWJzdHJpbmcpIEpTQ19GQVNUX0NBTEw7CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
ICNpZm5kZWYgTkRFQlVHCkBAIC0xNDAsMTMgKzE0Miw4MSBAQCB2b2lkIFBhcnNlclJlZkNvdW50
ZWQ6OmRlbGV0ZU5ld09iamVjdHMoCiAgICAgZ2xvYmFsRGF0YS0+bmV3UGFyc2VyT2JqZWN0cyA9
IDA7CiB9CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOb2RlUmVsZWFzZXIg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgTm9kZVJlbGVhc2VyIDog
Tm9uY29weWFibGUgeworcHVibGljOgorICAgIC8vIENhbGwgdGhpcyBmdW5jdGlvbiBpbnNpZGUg
dGhlIGRlc3RydWN0b3Igb2YgYSBjbGFzcyBkZXJpdmVkIGZyb20gTm9kZS4KKyAgICAvLyBUaGlz
IHdpbGwgdHJhdmVyc2UgdGhlIHRyZWUgYmVsb3cgdGhpcyBub2RlLCBkZXN0cm95aW5nIGFsbCBv
ZiB0aG9zZSBub2RlcywKKyAgICAvLyBidXQgd2l0aG91dCByZWx5aW5nIG9uIHJlY3Vyc2lvbi4K
KyAgICBzdGF0aWMgdm9pZCByZWxlYXNlQWxsTm9kZXMoTm9kZSogcm9vdCk7CisKKyAgICAvLyBD
YWxsIHRoaXMgb24gZWFjaCBub2RlIGluIGEgdGhlIHJlbGVhc2VOb2RlcyB2aXJ0dWFsIGZ1bmN0
aW9uLgorICAgIC8vIEl0IGdpdmVzIHRoZSBub2RlIHRvIHRoZSBOb2RlUmVsZWFzZXIsIHdoaWNo
IHdpbGwgdGhlbiByZWxlYXNlIHRoZQorICAgIC8vIG5vZGUgbGF0ZXIgYXQgdGhlIGVuZCBvZiB0
aGUgcmVsZWFzZUFsbE5vZGVzIHByb2Nlc3MuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZv
aWQgYWRvcHQoUmVmUHRyPFQ+JiBub2RlKSB7IGlmIChub2RlKSBhZG9wdChub2RlLnJlbGVhc2Uo
KSk7IH0KKyAgICB2b2lkIGFkb3B0KFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiYgbm9kZSkgeyBp
ZiAobm9kZSkgYWRvcHRGdW5jdGlvbkJvZHlOb2RlKG5vZGUpOyB9CisKK3ByaXZhdGU6CisgICAg
Tm9kZVJlbGVhc2VyKCkgeyB9CisgICAgfk5vZGVSZWxlYXNlcigpIHsgfQorCisgICAgdm9pZCBh
ZG9wdChQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIGFkb3B0RnVuY3Rpb25Cb2R5Tm9kZShS
ZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4mKTsKKworICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxO
b2RlPiA+IE5vZGVSZWxlYXNlVmVjdG9yOworICAgIE93blB0cjxOb2RlUmVsZWFzZVZlY3Rvcj4g
bV92ZWN0b3I7Cit9OworCit2b2lkIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKE5vZGUq
IHJvb3QpCit7CisgICAgQVNTRVJUKHJvb3QpOworICAgIE5vZGVSZWxlYXNlciByZWxlYXNlcjsK
KyAgICByb290LT5yZWxlYXNlTm9kZXMocmVsZWFzZXIpOworICAgIGlmICghcmVsZWFzZXIubV92
ZWN0b3IpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBOb3RlOiBUaGUgY2FsbCB0byByZWxlYXNl
Lm1fdmVjdG9yLT5zaXplKCkgaXMgaW50ZW50aW9uYWxseSBpbnNpZGUKKyAgICAvLyB0aGUgbG9v
cCwgc2luY2UgY2FsbHMgdG8gcmVsZWFzZU5vZGVzIGFyZSBleHBlY3RlZCB0byBpbmNyZWFzZSB0
aGUgc2l6ZS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGVhc2VyLm1fdmVjdG9yLT5z
aXplKCk7ICsraSkKKyAgICAgICAgKCpyZWxlYXNlci5tX3ZlY3RvcilbaV0tPnJlbGVhc2VOb2Rl
cyhyZWxlYXNlcik7Cit9CisKK3ZvaWQgTm9kZVJlbGVhc2VyOjphZG9wdChQYXNzUmVmUHRyPE5v
ZGU+IG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIGlmICghbm9kZS0+aGFzT25lUmVm
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fdmVjdG9yKQorICAgICAgICBtX3ZlY3Rv
ci5zZXQobmV3IE5vZGVSZWxlYXNlVmVjdG9yKTsKKyAgICBtX3ZlY3Rvci0+YXBwZW5kKG5vZGUp
OworfQorCit2b2lkIE5vZGVSZWxlYXNlcjo6YWRvcHRGdW5jdGlvbkJvZHlOb2RlKFJlZlB0cjxG
dW5jdGlvbkJvZHlOb2RlPiYgZnVuY3Rpb25Cb2R5Tm9kZSkKK3sKKyAgICAvLyBUaGlzIHNpZGVz
dGVwcyBhIHByb2JsZW0gd2hlcmUgaWYgeW91IGFzc2lnbiBhIFBhc3NSZWZQdHI8RnVuY3Rpb25C
b2R5Tm9kZT4KKyAgICAvLyB0byBhIFBhc3NSZWZQdHI8Tm9kZT4gd2UgbGVhdmUgdGhlIHR3byBy
ZWZlcmVuY2UgY291bnRzIChGdW5jdGlvbkJvZHlOb2RlCisgICAgLy8gYW5kIFBhcnNlclJlZkNv
dW50ZWQpIHVuYmFsYW5jZWQuIEl0IHdvdWxkIGJlIG5pY2UgdG8gZml4IHRoaXMgcHJvYmxlbSBp
bgorICAgIC8vIGEgY2xlYW5lciB3YXkgLS0gcGVyaGFwcyB3ZSBjb3VsZCByZW1vdmUgdGhlIEZ1
bmN0aW9uQm9keU5vZGUgcmVmZXJlbmNlCisgICAgLy8gY291bnQgYXQgc29tZSBwb2ludC4KKyAg
ICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGZ1bmN0aW9uQm9keU5vZGU7CisgICAgZnVuY3Rpb25Cb2R5
Tm9kZSA9IDA7CisgICAgYWRvcHQobm9kZS5yZWxlYXNlKCkpOworfQorCisvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCiBOb2RlOjpOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICA6IFBhcnNlclJl
ZkNvdW50ZWQoZ2xvYmFsRGF0YSkKIHsKICAgICBtX2xpbmUgPSBnbG9iYWxEYXRhLT5sZXhlci0+
bGluZU5vKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHN1YnN0aXR1dGUoVVN0cmluZyYgc3RyaW5nLCBj
b25zdCBVU3RyaW5nJiBzdWJzdHJpbmcpIEpTQ19GQVNUX0NBTEw7Cit2b2lkIE5vZGU6OnJlbGVh
c2VOb2RlcyhOb2RlUmVsZWFzZXImKQoreworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKwogc3RhdGljIHZvaWQgc3Vic3RpdHV0ZShVU3RyaW5nJiBzdHJpbmcsIGNvbnN0
IFVTdHJpbmcmIHN1YnN0cmluZykKIHsKICAgICBpbnQgcG9zaXRpb24gPSBzdHJpbmcuZmluZCgi
JXMiKTsKQEAgLTI3NSw4ICszNDUsMzEgQEAgUmVnaXN0ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRD
b2RlKENvZGVHZQogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFJlc29sdmUoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0KSwgbV9pZGVudCk7CiB9CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBFbGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworRWxlbWVudE5vZGU6On5FbGVtZW50Tm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2Vy
OjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgRWxlbWVudE5vZGU6OnJlbGVhc2VO
b2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fbmV4
dCk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9ub2RlKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEFycmF5Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAorQXJyYXlOb2RlOjp+QXJyYXlOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJl
bGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBBcnJheU5vZGU6OnJlbGVhc2VOb2RlcyhO
b2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fZWxlbWVudCk7
Cit9CisKIFJlZ2lzdGVySUQqIEFycmF5Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBwdXQg
YWxsIG9mIHRoaXMgY29kZSBpbnRvIGVtaXROZXdBcnJheT8KQEAgLTMwOCw4ICs0MDEsMzAgQEAg
UmVnaXN0ZXJJRCogQXJyYXlOb2RlOjplbWl0Q29kZShDb2RlR2VuZQogICAgIHJldHVybiBnZW5l
cmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGFycmF5LmdldCgpKTsKIH0KIAor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3BlcnR5Tm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK1Byb3BlcnR5Tm9kZTo6flByb3BlcnR5Tm9kZSgpCit7Cisg
ICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgUHJvcGVy
dHlOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxl
YXNlci5hZG9wdChtX2Fzc2lnbik7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBPYmplY3RMaXRlcmFsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK09i
amVjdExpdGVyYWxOb2RlOjp+T2JqZWN0TGl0ZXJhbE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNl
cjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIE9iamVjdExpdGVyYWxOb2RlOjpy
ZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9w
dChtX2xpc3QpOworfQorCiBSZWdpc3RlcklEKiBPYmplY3RMaXRlcmFsTm9kZTo6ZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgIGlmICgh
bV9saXN0KSB7CkBAIC0zMjIsNiArNDM3LDE3IEBAIFJlZ2lzdGVySUQqIE9iamVjdExpdGVyYWxO
b2RlOjplbWl0Q29kZSgKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3Bl
cnR5TGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorUHJvcGVydHlMaXN0
Tm9kZTo6flByb3BlcnR5TGlzdE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFs
bE5vZGVzKHRoaXMpOworfQorCit2b2lkIFByb3BlcnR5TGlzdE5vZGU6OnJlbGVhc2VOb2RlcyhO
b2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fbm9kZSk7Cisg
ICAgcmVsZWFzZXIuYWRvcHQobV9uZXh0KTsKK30KKwogUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG5ld09iaiA9IGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KTsKQEAgLTM1NCw2ICs0ODAsMTcgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdENvZGUoQwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJh
Y2tldEFjY2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitCcmFj
a2V0QWNjZXNzb3JOb2RlOjp+QnJhY2tldEFjY2Vzc29yTm9kZSgpCit7CisgICAgTm9kZVJlbGVh
c2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgQnJhY2tldEFjY2Vzc29yTm9k
ZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIu
YWRvcHQobV9iYXNlKTsKKyAgICByZWxlYXNlci5hZG9wdChtX3N1YnNjcmlwdCk7Cit9CisKIFJl
Z2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNl
ID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZS5nZXQoKSwgbV9zdWJz
Y3JpcHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKQEAg
LTM2NCw2ICs1MDEsMTYgQEAgUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdENv
ZAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG90QWNjZXNzb3JOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0RvdEFjY2Vzc29yTm9kZTo6fkRvdEFj
Y2Vzc29yTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7
Cit9CisKK3ZvaWQgRG90QWNjZXNzb3JOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiBy
ZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2Jhc2UpOworfQorCiBSZWdpc3RlcklE
KiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewogICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9iYXNlLmdldCgpKTsKQEAgLTM3MywyMCArNTIwLDY2IEBAIFJlZ2lzdGVySUQqIERvdEFj
Y2Vzc29yTm9kZTo6ZW1pdENvZGUoQ28KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEFyZ3VtZW50TGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQXJn
dW1lbnRMaXN0Tm9kZTo6fkFyZ3VtZW50TGlzdE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6
cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEFyZ3VtZW50TGlzdE5vZGU6OnJlbGVh
c2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1f
bmV4dCk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByKTsKK30KKwogUmVnaXN0ZXJJRCogQXJn
dW1lbnRMaXN0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCiB7CiAgICAgQVNTRVJUKG1fZXhwcik7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0Tm9kZShkc3QsIG1fZXhwci5nZXQoKSk7CiB9CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBBcmd1bWVudHNOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K0FyZ3VtZW50c05vZGU6On5Bcmd1bWVudHNOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJl
bGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBBcmd1bWVudHNOb2RlOjpyZWxlYXNlTm9k
ZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2xpc3RO
b2RlKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5ld0V4cHJOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorTmV3RXhwck5vZGU6On5OZXdF
eHByTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9
CisKK3ZvaWQgTmV3RXhwck5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2Vy
KQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fZXhwcik7CisgICAgcmVsZWFzZXIuYWRvcHQobV9h
cmdzKTsKK30KKwogUmVnaXN0ZXJJRCogTmV3RXhwck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBmdW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7CiAgICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0Q29uc3RydWN0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGZ1
bmMuZ2V0KCksIG1fYXJncy5nZXQoKSwgbV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZz
ZXQpOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZhbEZ1bmN0aW9u
Q2FsbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFdmFsRnVuY3Rp
b25DYWxsTm9kZTo6fkV2YWxGdW5jdGlvbkNhbGxOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6
OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6
cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRv
cHQobV9hcmdzKTsKK30KKwogUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwpA
QCAtMzk1LDEyICs1ODgsMzcgQEAgUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVt
aXRDbwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSksIGZ1bmMuZ2V0KCksIGJhc2UuZ2V0KCksIG1fYXJn
cy5nZXQoKSwgbV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOwogfQogCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsVmFsdWVOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjp+
RnVuY3Rpb25DYWxsVmFsdWVOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxO
b2Rlcyh0aGlzKTsKK30KKwordm9pZCBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OnJlbGVhc2VOb2Rl
cyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fZXhwcik7
CisgICAgcmVsZWFzZXIuYWRvcHQobV9hcmdzKTsKK30KKwogUmVnaXN0ZXJJRCogRnVuY3Rpb25D
YWxsVmFsdWVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2V4cHIuZ2V0KCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZnVuYy5nZXQoKSwgMCwgbV9hcmdzLmdldCgpLCBt
X2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CiB9CiAKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Z1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjp+RnVuY3Rp
b25DYWxsUmVzb2x2ZU5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVz
KHRoaXMpOworfQorCit2b2lkIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpyZWxlYXNlTm9kZXMo
Tm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2FyZ3MpOwor
fQorCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgaWYgKFJlZlB0cjxS
ZWdpc3RlcklEPiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZvcihtX2lkZW50KSkKQEAgLTQy
Miw2ICs2NDAsMjAgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQog
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0LCBiYXNlLmdldCgpKSwgZnVuYy5nZXQoKSwgYmFzZS5nZXQoKSwgbV9hcmdzLmdldCgpLCBt
X2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CiB9CiAKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Z1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjp+RnVuY3Rp
b25DYWxsQnJhY2tldE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVz
KHRoaXMpOworfQorCit2b2lkIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpyZWxlYXNlTm9kZXMo
Tm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2Jhc2UpOwor
ICAgIHJlbGVhc2VyLmFkb3B0KG1fc3Vic2NyaXB0KTsKKyAgICByZWxlYXNlci5hZG9wdChtX2Fy
Z3MpOworfQorCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKQEAg
LTQzMSw2ICs2NjMsMTkgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVt
aQogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0LCBiYXNlLmdldCgpKSwgZnVuY3Rpb24uZ2V0KCksIGJhc2UuZ2V0KCksIG1fYXJncy5n
ZXQoKSwgbV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOwogfQogCisvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsRG90Tm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Z1bmN0aW9uQ2FsbERvdE5vZGU6On5GdW5jdGlv
bkNhbGxEb3ROb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlz
KTsKK30KKwordm9pZCBGdW5jdGlvbkNhbGxEb3ROb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVh
c2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2Jhc2UpOworICAgIHJlbGVh
c2VyLmFkb3B0KG1fYXJncyk7Cit9CisKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5n
ZXQoKSk7CkBAIC00OTcsNiArNzQyLDE3IEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhSZXNvbHZlTm9k
ZTo6ZW1pdENvZGUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhC
cmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1Bvc3RmaXhC
cmFja2V0Tm9kZTo6flBvc3RmaXhCcmFja2V0Tm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpy
ZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgUG9zdGZpeEJyYWNrZXROb2RlOjpyZWxl
YXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdCht
X2Jhc2UpOworICAgIHJlbGVhc2VyLmFkb3B0KG1fc3Vic2NyaXB0KTsKK30KKwogUmVnaXN0ZXJJ
RCogUG9zdGZpeEJyYWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwpAQCAtNTIxLDYgKzc3NywxNiBAQCBSZWdpc3Rl
cklEKiBQb3N0Zml4QnJhY2tldE5vZGU6OmVtaXRDb2RlCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBQb3N0Zml4RG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKK1Bvc3RmaXhEb3ROb2RlOjp+UG9zdGZpeERvdE5vZGUoKQoreworICAgIE5vZGVS
ZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIFBvc3RmaXhEb3ROb2Rl
OjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5h
ZG9wdChtX2Jhc2UpOworfQorCiBSZWdpc3RlcklEKiBQb3N0Zml4RG90Tm9kZTo6ZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKQEAg
LTU0NCw2ICs4MTAsMTYgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeERvdE5vZGU6OmVtaXRDb2RlKENv
ZAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUG9zdGZpeEVycm9yTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitQb3N0Zml4RXJyb3JOb2RlOjp+
UG9zdGZpeEVycm9yTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXMo
dGhpcyk7Cit9CisKK3ZvaWQgUG9zdGZpeEVycm9yTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxl
YXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByKTsKK30KKwogUmVn
aXN0ZXJJRCogUG9zdGZpeEVycm9yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKikKIHsKICAgICByZXR1cm4gZW1pdFRocm93RXJyb3IoZ2VuZXJhdG9y
LCBSZWZlcmVuY2VFcnJvciwgbV9vcGVyYXRvciA9PSBPcFBsdXNQbHVzID8gIlBvc3RmaXggKysg
b3BlcmF0b3IgYXBwbGllZCB0byB2YWx1ZSB0aGF0IGlzIG5vdCBhIHJlZmVyZW5jZS4iIDogIlBv
c3RmaXggLS0gb3BlcmF0b3IgYXBwbGllZCB0byB2YWx1ZSB0aGF0IGlzIG5vdCBhIHJlZmVyZW5j
ZS4iKTsKQEAgLTU2Myw2ICs4MzksMTcgQEAgUmVnaXN0ZXJJRCogRGVsZXRlUmVzb2x2ZU5vZGU6
OmVtaXRDb2RlKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlQnJh
Y2tldE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorRGVsZXRlQnJh
Y2tldE5vZGU6On5EZWxldGVCcmFja2V0Tm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxl
YXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgRGVsZXRlQnJhY2tldE5vZGU6OnJlbGVhc2VO
b2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fYmFz
ZSk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9zdWJzY3JpcHQpOworfQorCiBSZWdpc3RlcklEKiBE
ZWxldGVCcmFja2V0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fYmFzZS5nZXQoKSk7CkBAIC01NzQsNiArODYxLDE2IEBAIFJlZ2lzdGVySUQqIERl
bGV0ZUJyYWNrZXROb2RlOjplbWl0Q29kZSgKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIERlbGV0ZURvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAorRGVsZXRlRG90Tm9kZTo6fkRlbGV0ZURvdE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6
cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIERlbGV0ZURvdE5vZGU6OnJlbGVhc2VO
b2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fYmFz
ZSk7Cit9CisKIFJlZ2lzdGVySUQqIERlbGV0ZURvdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZ2lzdGVySUQqIHIwID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CkBAIC01ODQsNiArODgxLDE2IEBAIFJl
Z2lzdGVySUQqIERlbGV0ZURvdE5vZGU6OmVtaXRDb2RlKENvZGUKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0ZVZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCitEZWxldGVWYWx1ZU5vZGU6On5EZWxldGVWYWx1ZU5vZGUoKQorewor
ICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIERlbGV0
ZVZhbHVlTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAg
cmVsZWFzZXIuYWRvcHQobV9leHByKTsKK30KKwogUmVnaXN0ZXJJRCogRGVsZXRlVmFsdWVOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
ICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoaWdub3JlZFJlc3VsdCgpLCBtX2V4cHIuZ2V0KCkpOwpA
QCAtNTk0LDYgKzkwMSwxNiBAQCBSZWdpc3RlcklEKiBEZWxldGVWYWx1ZU5vZGU6OmVtaXRDb2Rl
KENvCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWb2lkTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1ZvaWROb2RlOjp+Vm9pZE5vZGUoKQor
eworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIFZv
aWROb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxl
YXNlci5hZG9wdChtX2V4cHIpOworfQorCiBSZWdpc3RlcklEKiBWb2lkTm9kZTo6ZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgaWYgKGRz
dCA9PSBpZ25vcmVkUmVzdWx0KCkpIHsKQEAgLTYyMyw2ICs5NDAsMTYgQEAgUmVnaXN0ZXJJRCog
VHlwZU9mUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gVHlwZU9mVmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKK1R5cGVPZlZhbHVlTm9kZTo6flR5cGVPZlZhbHVlTm9kZSgpCit7CisgICAgTm9kZVJl
bGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgVHlwZU9mVmFsdWVOb2Rl
OjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5h
ZG9wdChtX2V4cHIpOworfQorCiBSZWdpc3RlcklEKiBUeXBlT2ZWYWx1ZU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIGlmIChk
c3QgPT0gaWdub3JlZFJlc3VsdCgpKSB7CkBAIC02NjksNiArOTk2LDE3IEBAIFJlZ2lzdGVySUQq
IFByZWZpeFJlc29sdmVOb2RlOjplbWl0Q29kZSgKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIFByZWZpeEJyYWNrZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAorUHJlZml4QnJhY2tldE5vZGU6On5QcmVmaXhCcmFja2V0Tm9kZSgpCit7CisgICAg
Tm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgUHJlZml4QnJh
Y2tldE5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJl
bGVhc2VyLmFkb3B0KG1fYmFzZSk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9zdWJzY3JpcHQpOwor
fQorCiBSZWdpc3RlcklEKiBQcmVmaXhCcmFja2V0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKQEAgLTY4OCw2ICsxMDI2
LDE2IEBAIFJlZ2lzdGVySUQqIFByZWZpeEJyYWNrZXROb2RlOjplbWl0Q29kZSgKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByZWZpeERvdE5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCitQcmVmaXhEb3ROb2RlOjp+UHJlZml4RG90Tm9kZSgpCit7
CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgUHJl
Zml4RG90Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAg
cmVsZWFzZXIuYWRvcHQobV9iYXNlKTsKK30KKwogUmVnaXN0ZXJJRCogUHJlZml4RG90Tm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdl
dCgpKTsKQEAgLTcwNiw2ICsxMDU0LDE2IEBAIFJlZ2lzdGVySUQqIFByZWZpeERvdE5vZGU6OmVt
aXRDb2RlKENvZGUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByZWZpeEVy
cm9yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitQcmVmaXhFcnJv
ck5vZGU6On5QcmVmaXhFcnJvck5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFs
bE5vZGVzKHRoaXMpOworfQorCit2b2lkIFByZWZpeEVycm9yTm9kZTo6cmVsZWFzZU5vZGVzKE5v
ZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByKTsKK30K
KwogUmVnaXN0ZXJJRCogUHJlZml4RXJyb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogewogICAgIHJldHVybiBlbWl0VGhyb3dFcnJvcihnZW5l
cmF0b3IsIFJlZmVyZW5jZUVycm9yLCBtX29wZXJhdG9yID09IE9wUGx1c1BsdXMgPyAiUHJlZml4
ICsrIG9wZXJhdG9yIGFwcGxpZWQgdG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVuY2UuIiA6
ICJQcmVmaXggLS0gb3BlcmF0b3IgYXBwbGllZCB0byB2YWx1ZSB0aGF0IGlzIG5vdCBhIHJlZmVy
ZW5jZS4iKTsKQEAgLTcxMyw2ICsxMDcxLDE2IEBAIFJlZ2lzdGVySUQqIFByZWZpeEVycm9yTm9k
ZTo6ZW1pdENvZGUoQ28KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVuYXJ5
IE9wZXJhdGlvbiBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitV
bmFyeU9wTm9kZTo6flVuYXJ5T3BOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VB
bGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBVbmFyeU9wTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVS
ZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByKTsKK30KKwog
UmVnaXN0ZXJJRCogVW5hcnlPcE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwpAQCAtNzIxLDYgKzEwODksMTcgQEAgUmVnaXN0ZXJJRCog
VW5hcnlPcE5vZGU6OmVtaXRDb2RlKENvZGVHZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gQmluYXJ5IE9wZXJhdGlvbiBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCitCaW5hcnlPcE5vZGU6On5CaW5hcnlPcE5vZGUoKQoreworICAgIE5vZGVS
ZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEJpbmFyeU9wTm9kZTo6
cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRv
cHQobV9leHByMSk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByMik7Cit9CisKIFJlZ2lzdGVy
SUQqIEJpbmFyeU9wTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlID0gdGhpcy0+b3Bjb2RlKCk7CkBA
IC03ODIsNyArMTE2MSwxOCBAQCBSZWdpc3RlcklEKiBJbnN0YW5jZU9mTm9kZTo6ZW1pdENvZGUo
Q29kCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0SW5zdGFuY2VPZihnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyLmdldCgpLCBzcmMy
UHJvdG90eXBlKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJpbmFy
eSBMb2dpY2FsIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2dpY2FsT3BOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworTG9naWNhbE9wTm9kZTo6fkxvZ2ljYWxPcE5vZGUoKQoreworICAgIE5vZGVS
ZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIExvZ2ljYWxPcE5vZGU6
OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFk
b3B0KG1fZXhwcjEpOworICAgIHJlbGVhc2VyLmFkb3B0KG1fZXhwcjIpOworfQogCiBSZWdpc3Rl
cklEKiBMb2dpY2FsT3BOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKIHsKQEAgLTgwMiw2ICsxMTkyLDE4IEBAIFJlZ2lzdGVySUQqIExvZ2lj
YWxPcE5vZGU6OmVtaXRDb2RlKENvZGUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIENvbmRpdGlvbmFsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29u
ZGl0aW9uYWxOb2RlOjp+Q29uZGl0aW9uYWxOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJl
bGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBDb25kaXRpb25hbE5vZGU6OnJlbGVhc2VO
b2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fbG9n
aWNhbCk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByMSk7CisgICAgcmVsZWFzZXIuYWRvcHQo
bV9leHByMik7Cit9CisKIFJlZ2lzdGVySUQqIENvbmRpdGlvbmFsTm9kZTo6ZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG5ld0RzdCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CkBAIC04
MjQsNiArMTIyNiwxNiBAQCBSZWdpc3RlcklEKiBDb25kaXRpb25hbE5vZGU6OmVtaXRDb2RlKENv
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWFkTW9kaWZ5UmVzb2x2ZU5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorUmVhZE1vZGlmeVJlc29s
dmVOb2RlOjp+UmVhZE1vZGlmeVJlc29sdmVOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJl
bGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OnJl
bGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0
KG1fcmlnaHQpOworfQorCiAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgbW92ZWQgdG8gYmUgYSBt
ZXRob2Qgb24gQ29kZUdlbmVyYXRvcj8KIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVySUQq
IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmF0b3Ig
b3BlciwgT3BlcmFuZFR5cGVzIHR5cGVzKQogewpAQCAtOTE0LDYgKzEzMjYsMTYgQEAgUmVnaXN0
ZXJJRCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0QwogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gQXNzaWduUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAorQXNzaWduUmVzb2x2ZU5vZGU6On5Bc3NpZ25SZXNvbHZlTm9kZSgpCit7
CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgQXNz
aWduUmVzb2x2ZU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQorewor
ICAgIHJlbGVhc2VyLmFkb3B0KG1fcmlnaHQpOworfQorCiBSZWdpc3RlcklEKiBBc3NpZ25SZXNv
bHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiB7CiAgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9y
KG1faWRlbnQpKSB7CkBAIC05NDUsNiArMTM2NywxNyBAQCBSZWdpc3RlcklEKiBBc3NpZ25SZXNv
bHZlTm9kZTo6ZW1pdENvZGUoCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBB
c3NpZ25Eb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0Fzc2ln
bkRvdE5vZGU6On5Bc3NpZ25Eb3ROb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VB
bGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBBc3NpZ25Eb3ROb2RlOjpyZWxlYXNlTm9kZXMoTm9k
ZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2Jhc2UpOworICAg
IHJlbGVhc2VyLmFkb3B0KG1fcmlnaHQpOworfQorCiBSZWdpc3RlcklEKiBBc3NpZ25Eb3ROb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRI
YW5kU2lkZShtX2Jhc2UuZ2V0KCksIG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdodC0+aXNQ
dXJlKGdlbmVyYXRvcikpOwpAQCAtOTU3LDYgKzEzOTAsMTcgQEAgUmVnaXN0ZXJJRCogQXNzaWdu
RG90Tm9kZTo6ZW1pdENvZGUoQ29kZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUmVhZE1vZGlmeURvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAorUmVhZE1vZGlmeURvdE5vZGU6On5SZWFkTW9kaWZ5RG90Tm9kZSgpCit7CisgICAgTm9kZVJl
bGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgUmVhZE1vZGlmeURvdE5v
ZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2Vy
LmFkb3B0KG1fYmFzZSk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9yaWdodCk7Cit9CisKIFJlZ2lz
dGVySUQqIFJlYWRNb2RpZnlEb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdl
bmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UuZ2V0KCksIG1fcmlnaHRIYXNB
c3NpZ25tZW50cywgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpOwpAQCAtOTcyLDYgKzE0MTYs
MTcgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeURvdE5vZGU6OmVtaXRDb2RlKAogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXNzaWduRXJyb3JOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0Fzc2lnbkVycm9yTm9kZTo6fkFzc2lnbkVycm9yTm9k
ZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3Zv
aWQgQXNzaWduRXJyb3JOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikK
K3sKKyAgICByZWxlYXNlci5hZG9wdChtX2xlZnQpOworICAgIHJlbGVhc2VyLmFkb3B0KG1fcmln
aHQpOworfQorCiBSZWdpc3RlcklEKiBBc3NpZ25FcnJvck5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CiAgICAgcmV0dXJuIGVtaXRUaHJvd0Vy
cm9yKGdlbmVyYXRvciwgUmVmZXJlbmNlRXJyb3IsICJMZWZ0IHNpZGUgb2YgYXNzaWdubWVudCBp
cyBub3QgYSByZWZlcmVuY2UuIik7CkBAIC05NzksNiArMTQzNCwxOCBAQCBSZWdpc3RlcklEKiBB
c3NpZ25FcnJvck5vZGU6OmVtaXRDb2RlKENvCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBBc3NpZ25CcmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCitBc3NpZ25CcmFja2V0Tm9kZTo6fkFzc2lnbkJyYWNrZXROb2RlKCkKK3sKKyAgICBO
b2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBBc3NpZ25CcmFj
a2V0Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVs
ZWFzZXIuYWRvcHQobV9iYXNlKTsKKyAgICByZWxlYXNlci5hZG9wdChtX3N1YnNjcmlwdCk7Cisg
ICAgcmVsZWFzZXIuYWRvcHQobV9yaWdodCk7Cit9CisKIFJlZ2lzdGVySUQqIEFzc2lnbkJyYWNr
ZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZv
ckxlZnRIYW5kU2lkZShtX2Jhc2UuZ2V0KCksIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMgfHwg
bV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlwdC0+aXNQdXJlKGdlbmVyYXRvcikgJiYg
bV9yaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpOwpAQCAtOTkxLDYgKzE0NTgsMjAgQEAgUmVnaXN0
ZXJJRCogQXNzaWduQnJhY2tldE5vZGU6OmVtaXRDb2RlKAogICAgIHJldHVybiBnZW5lcmF0b3Iu
bW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdCk7CiB9CiAKKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWFkTW9kaWZ5QnJhY2tldE5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVhZE1vZGlmeUJyYWNrZXROb2RlOjp+UmVhZE1v
ZGlmeUJyYWNrZXROb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0
aGlzKTsKK30KKwordm9pZCBSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OnJlbGVhc2VOb2RlcyhOb2Rl
UmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fYmFzZSk7CisgICAg
cmVsZWFzZXIuYWRvcHQobV9zdWJzY3JpcHQpOworICAgIHJlbGVhc2VyLmFkb3B0KG1fcmlnaHQp
OworfQorCiBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZS5n
ZXQoKSwgbV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cyB8fCBtX3JpZ2h0SGFzQXNzaWdubWVudHMs
IG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSAmJiBtX3JpZ2h0LT5pc1B1cmUoZ2VuZXJh
dG9yKSk7CkBAIC0xMDA5LDEzICsxNDkwLDM1IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlCcmFj
a2V0Tm9kZTo6ZW1pdEMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbW1h
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29tbWFOb2RlOjp+
Q29tbWFOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsK
K30KKwordm9pZCBDb21tYU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2Vy
KQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fZXhwcjEpOworICAgIHJlbGVhc2VyLmFkb3B0KG1f
ZXhwcjIpOworfQorCiBSZWdpc3RlcklEKiBDb21tYU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZShpZ25vcmVkUmVzdWx0KCksIG1fZXhwcjEuZ2V0KCkpOwogICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdE5vZGUoZHN0LCBtX2V4cHIyLmdldCgpKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIENvbnN0RGVjbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbnN0RGVjbE5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbnN0RGVjbE5vZGU6On5Db25z
dERlY2xOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsK
K30KKwordm9pZCBDb25zdERlY2xOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxl
YXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX25leHQpOworICAgIHJlbGVhc2VyLmFkb3B0
KG1faW5pdCk7Cit9CiAKIENvbnN0RGVjbE5vZGU6OkNvbnN0RGVjbE5vZGUoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIGlu
aXQpCiAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQpAQCAtMTA1MSw2ICsxNTU0LDE2
IEBAIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5vZGU6OmVtaXRDb2RlKENvZGUKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbnN0U3RhdGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCitDb25zdFN0YXRlbWVudE5vZGU6On5Db25zdFN0YXRlbWVudE5v
ZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2
b2lkIENvbnN0U3RhdGVtZW50Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFz
ZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9uZXh0KTsKK30KKwogUmVnaXN0ZXJJRCogQ29u
c3RTdGF0ZW1lbnROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqKQogewogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUobV9uZXh0LmdldCgpKTsK
QEAgLTEwODIsNiArMTU5NSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3RhdGVtZW50TGlzdFB1
c2hGSUZPCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCbG9ja05vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0Jsb2NrTm9kZTo6fkJsb2NrTm9k
ZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3Zv
aWQgQmxvY2tOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAg
ICBzaXplX3Qgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQorICAgICAgICByZWxlYXNlci5hZG9wdChtX2NoaWxkcmVuW2ldKTsK
K30KKwogQmxvY2tOb2RlOjpCbG9ja05vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTb3Vy
Y2VFbGVtZW50cyogY2hpbGRyZW4pCiAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEpCiB7
CkBAIC0xMTE5LDYgKzE2NDQsMTYgQEAgUmVnaXN0ZXJJRCogRXhwclN0YXRlbWVudE5vZGU6OmVt
aXRDb2RlKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVmFyU3RhdGVtZW50
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1ZhclN0YXRlbWVudE5vZGU6On5W
YXJTdGF0ZW1lbnROb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0
aGlzKTsKK30KKwordm9pZCBWYXJTdGF0ZW1lbnROb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVh
c2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2V4cHIpOworfQorCiBSZWdp
c3RlcklEKiBWYXJTdGF0ZW1lbnROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqKQogewogICAgIEFTU0VSVChtX2V4cHIpOwpAQCAtMTEyNyw2ICsxNjYy
LDE3IEBAIFJlZ2lzdGVySUQqIFZhclN0YXRlbWVudE5vZGU6OmVtaXRDb2RlKEMKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElmTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAorSWZOb2RlOjp+SWZOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFz
ZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBJZk5vZGU6OnJlbGVhc2VOb2Rl
cyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fY29uZGl0
aW9uKTsKKyAgICByZWxlYXNlci5hZG9wdChtX2lmQmxvY2spOworfQorCiBSZWdpc3RlcklEKiBJ
Zk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQogewogICAgIFJlZlB0cjxMYWJlbElEPiBhZnRlclRoZW4gPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKQEAgLTExNDAsMTAgKzE2ODYsMjMgQEAgUmVnaXN0ZXJJRCogSWZOb2RlOjplbWl0Q29kZShD
b2RlR2VuZXJhdAogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1faWZCbG9jay5nZXQoKSk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChhZnRlclRoZW4uZ2V0KCkpOwogCi0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBzdGF0ZW1lbnQgZXhlY3R1dGVkIHNvIHRo
YXQgaXQgY2FuIGJlIHJldHVybmVkIGFzIGEgQ29tcGxldGlvbgorICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCByZXR1cm4gdGhlIGxhc3Qgc3RhdGVtZW50IGV4ZWN1dGVkIHNvIHRoYXQgaXQgY2Fu
IGJlIHJldHVybmVkIGFzIGEgQ29tcGxldGlvbi4KICAgICByZXR1cm4gMDsKIH0KIAorLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElmRWxzZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmRWxzZU5vZGU6On5JZkVsc2VOb2RlKCkKK3sKKyAg
ICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBJZkVsc2VO
b2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNl
ci5hZG9wdChtX2Vsc2VCbG9jayk7CisgICAgSWZOb2RlOjpyZWxlYXNlTm9kZXMocmVsZWFzZXIp
OworfQorCiBSZWdpc3RlcklEKiBJZkVsc2VOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8TGFiZWxJRD4gYmVmb3Jl
RWxzZSA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwpAQCAtMTE2NywxMiArMTcyNiwyMyBAQCBSZWdp
c3RlcklEKiBJZkVsc2VOb2RlOjplbWl0Q29kZShDb2RlR2VuCiAKICAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKGFmdGVyRWxzZS5nZXQoKSk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmV0
dXJuIHRoZSBsYXN0IHN0YXRlbWVudCBleGVjdHV0ZWQgc28gdGhhdCBpdCBjYW4gYmUgcmV0dXJu
ZWQgYXMgYSBDb21wbGV0aW9uCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJldHVybiB0aGUg
bGFzdCBzdGF0ZW1lbnQgZXhlY3V0ZWQgc28gdGhhdCBpdCBjYW4gYmUgcmV0dXJuZWQgYXMgYSBD
b21wbGV0aW9uLgogICAgIHJldHVybiAwOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRG9XaGlsZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CitEb1doaWxlTm9kZTo6fkRvV2hpbGVOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVh
c2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBEb1doaWxlTm9kZTo6cmVsZWFzZU5vZGVzKE5v
ZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9zdGF0ZW1lbnQp
OworICAgIHJlbGVhc2VyLmFkb3B0KG1fZXhwcik7Cit9CisKIFJlZ2lzdGVySUQqIERvV2hpbGVO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKICAgICBSZWZQdHI8TGFiZWxTY29wZT4gc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29w
ZShMYWJlbFNjb3BlOjpMb29wKTsKQEAgLTExOTgsNiArMTc2OCwxNyBAQCBSZWdpc3RlcklEKiBE
b1doaWxlTm9kZTo6ZW1pdENvZGUoQ29kZUdlCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBXaGlsZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
K1doaWxlTm9kZTo6fldoaWxlTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxs
Tm9kZXModGhpcyk7Cit9CisKK3ZvaWQgV2hpbGVOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVh
c2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2V4cHIpOworICAgIHJlbGVh
c2VyLmFkb3B0KG1fc3RhdGVtZW50KTsKK30KKwogUmVnaXN0ZXJJRCogV2hpbGVOb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBS
ZWZQdHI8TGFiZWxTY29wZT4gc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNj
b3BlOjpMb29wKTsKQEAgLTEyMjUsNiArMTgwNiwxOSBAQCBSZWdpc3RlcklEKiBXaGlsZU5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBG
b3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0Zvck5vZGU6
On5Gb3JOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsK
K30KKwordm9pZCBGb3JOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikK
K3sKKyAgICByZWxlYXNlci5hZG9wdChtX2V4cHIxKTsKKyAgICByZWxlYXNlci5hZG9wdChtX2V4
cHIyKTsKKyAgICByZWxlYXNlci5hZG9wdChtX2V4cHIzKTsKKyAgICByZWxlYXNlci5hZG9wdCht
X3N0YXRlbWVudCk7Cit9CisKIFJlZ2lzdGVySUQqIEZvck5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIGlmIChkc3QgPT0gaWdu
b3JlZFJlc3VsdCgpKQpAQCAtMTI2NCw2ICsxODU4LDE5IEBAIFJlZ2lzdGVySUQqIEZvck5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmEKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEZvckluTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorRm9ySW5O
b2RlOjp+Rm9ySW5Ob2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0
aGlzKTsKK30KKwordm9pZCBGb3JJbk5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJl
bGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1faW5pdCk7CisgICAgcmVsZWFzZXIuYWRv
cHQobV9sZXhwcik7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByKTsKKyAgICByZWxlYXNlci5h
ZG9wdChtX3N0YXRlbWVudCk7Cit9CisKIEZvckluTm9kZTo6Rm9ySW5Ob2RlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgRXhwcmVzc2lvbk5vZGUqIGwsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBT
dGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQpCiAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEp
CiAgICAgLCBtX2luaXQoMEwpCkBAIC0xMzg3LDYgKzE5OTQsMTYgQEAgUmVnaXN0ZXJJRCogQnJl
YWtOb2RlOjplbWl0Q29kZShDb2RlR2VuZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gUmV0dXJuTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitS
ZXR1cm5Ob2RlOjp+UmV0dXJuTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxs
Tm9kZXModGhpcyk7Cit9CisKK3ZvaWQgUmV0dXJuTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxl
YXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV92YWx1ZSk7Cit9CisKIFJl
Z2lzdGVySUQqIFJldHVybk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogewogICAgIGlmIChnZW5lcmF0b3IuY29kZVR5cGUoKSAhPSBGdW5j
dGlvbkNvZGUpCkBAIC0xNDA2LDYgKzIwMjMsMTcgQEAgUmVnaXN0ZXJJRCogUmV0dXJuTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2l0
aE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaXRoTm9kZTo6
fldpdGhOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsK
K30KKwordm9pZCBXaXRoTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIp
Cit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByKTsKKyAgICByZWxlYXNlci5hZG9wdChtX3N0
YXRlbWVudCk7Cit9CisKIFJlZ2lzdGVySUQqIFdpdGhOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsgLy8gc2NvcGUgbXVz
dCBiZSBwcm90ZWN0ZWQgdW50aWwgcG9wcGVkCkBAIC0xNDE2LDcgKzIwNDQsNDUgQEAgUmVnaXN0
ZXJJRCogV2l0aE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcgogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDYXNlQ2xhdXNlTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDYXNlQ2xhdXNlTm9kZTo6fkNhc2VDbGF1
c2VOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30K
Kwordm9pZCBDYXNlQ2xhdXNlTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFz
ZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByKTsKK30KKworLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIENsYXVzZUxpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK0NsYXVzZUxpc3ROb2RlOjp+Q2xhdXNlTGlzdE5vZGUoKQoreworICAgIE5v
ZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIENsYXVzZUxpc3RO
b2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNl
ci5hZG9wdChtX2NsYXVzZSk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9uZXh0KTsKK30KKwogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENhc2VCbG9ja05vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2FzZUJsb2NrTm9kZTo6fkNhc2VCbG9ja05vZGUoKQor
eworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIENh
c2VCbG9ja05vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAg
IHJlbGVhc2VyLmFkb3B0KG1fbGlzdDEpOworICAgIHJlbGVhc2VyLmFkb3B0KG1fZGVmYXVsdENs
YXVzZSk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9saXN0Mik7Cit9CisKIGVudW0gU3dpdGNoS2lu
ZCB7IAogICAgIFN3aXRjaFVuc2V0ID0gMCwKICAgICBTd2l0Y2hOdW1iZXIgPSAxLCAKQEAgLTE1
NjAsNiArMjIyNiwxNyBAQCBSZWdpc3RlcklEKiBDYXNlQmxvY2tOb2RlOjplbWl0Q29kZUZvckJs
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTd2l0Y2hOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1N3aXRjaE5vZGU6On5Td2l0Y2hOb2RlKCkK
K3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBT
d2l0Y2hOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICBy
ZWxlYXNlci5hZG9wdChtX2V4cHIpOworICAgIHJlbGVhc2VyLmFkb3B0KG1fYmxvY2spOworfQor
CiBSZWdpc3RlcklEKiBTd2l0Y2hOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8TGFiZWxTY29wZT4gc2NvcGUgPSBn
ZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpTd2l0Y2gpOwpAQCAtMTU3Myw2ICsy
MjUwLDE2IEBAIFJlZ2lzdGVySUQqIFN3aXRjaE5vZGU6OmVtaXRDb2RlKENvZGVHZW4KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExhYmVsTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorTGFiZWxOb2RlOjp+TGFiZWxOb2RlKCkKK3sKKyAgICBO
b2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBMYWJlbE5vZGU6
OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFk
b3B0KG1fc3RhdGVtZW50KTsKK30KKwogUmVnaXN0ZXJJRCogTGFiZWxOb2RlOjplbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAoZ2Vu
ZXJhdG9yLmJyZWFrVGFyZ2V0KG1fbmFtZSkpCkBAIC0xNTg3LDYgKzIyNzQsMTYgQEAgUmVnaXN0
ZXJJRCogTGFiZWxOb2RlOjplbWl0Q29kZShDb2RlR2VuZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gVGhyb3dOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCitUaHJvd05vZGU6On5UaHJvd05vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVs
ZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIFRocm93Tm9kZTo6cmVsZWFzZU5vZGVzKE5v
ZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByKTsKK30K
KwogUmVnaXN0ZXJJRCogVGhyb3dOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAoZHN0ID09IGlnbm9yZWRSZXN1bHQoKSkK
QEAgLTE1OTksNiArMjI5NiwxOCBAQCBSZWdpc3RlcklEKiBUaHJvd05vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcnlOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1RyeU5vZGU6On5UcnlOb2RlKCkK
K3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBU
cnlOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxl
YXNlci5hZG9wdChtX3RyeUJsb2NrKTsKKyAgICByZWxlYXNlci5hZG9wdChtX2NhdGNoQmxvY2sp
OworICAgIHJlbGVhc2VyLmFkb3B0KG1fZmluYWxseUJsb2NrKTsKK30KKwogUmVnaXN0ZXJJRCog
VHJ5Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiB7CiAgICAgUmVmUHRyPExhYmVsSUQ+IHRyeVN0YXJ0TGFiZWwgPSBnZW5lcmF0b3IubmV3
TGFiZWwoKTsKQEAgLTE2NTcsNiArMjM2NiwxNyBAQCBSZWdpc3RlcklEKiBUcnlOb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhCiAgICAgcmV0dXJuIGRzdDsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFBhcmFtZXRlck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworUGFyYW1ldGVyTm9kZTo6flBhcmFtZXRlck5vZGUoKQoreworICAgIE5vZGVSZWxlYXNl
cjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIFBhcmFtZXRlck5vZGU6OnJlbGVh
c2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1f
bmV4dCk7Cit9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTY29wZU5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTczNiw4ICsyNDU2LDggQEAgRnVu
Y3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShKU0dsbwogCiBGdW5jdGlvbkJvZHlOb2Rl
Ojp+RnVuY3Rpb25Cb2R5Tm9kZSgpCiB7Ci0gICAgaWYgKG1fcGFyYW1ldGVycykKLSAgICAgICAg
ZmFzdEZyZWUobV9wYXJhbWV0ZXJzKTsKKyAgICBBU1NFUlQoIW1fcmVmQ291bnQpOworICAgIGZh
c3RGcmVlKG1fcGFyYW1ldGVycyk7CiB9CiAKIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNo
UGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRlck5vZGUqIGZpcnN0UGFy
YW1ldGVyKQpAQCAtMTg0Miw2ICsyNTYyLDE3IEBAIElkZW50aWZpZXIqIEZ1bmN0aW9uQm9keU5v
ZGU6OmNvcHlQYXJhbWUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmNE
ZWNsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorRnVuY0RlY2xOb2Rl
Ojp+RnVuY0RlY2xOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0
aGlzKTsKK30KKwordm9pZCBGdW5jRGVjbE5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXIm
IHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fcGFyYW1ldGVyKTsKKyAgICByZWxl
YXNlci5hZG9wdChtX2JvZHkpOworfQorCiBKU0Z1bmN0aW9uKiBGdW5jRGVjbE5vZGU6Om1ha2VG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQogewog
ICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgbV9pZGVudCwgbV9ib2R5Lmdl
dCgpLCBzY29wZUNoYWluKTsKQEAgLTE4NTQsNiArMjU4NSwxNyBAQCBSZWdpc3RlcklEKiBGdW5j
RGVjbE5vZGU6OmVtaXRDb2RlKENvZGVHCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBGdW5jRXhwck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0Z1
bmNFeHByTm9kZTo6fkZ1bmNFeHByTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNl
QWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgRnVuY0V4cHJOb2RlOjpyZWxlYXNlTm9kZXMoTm9k
ZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX3BhcmFtZXRlcik7
CisgICAgcmVsZWFzZXIuYWRvcHQobV9ib2R5KTsKK30KKwogUmVnaXN0ZXJJRCogRnVuY0V4cHJO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdGhpcyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
aAkocmV2aXNpb24gMzgyMzMpCisrKyBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNp
bmNsdWRlICJTeW1ib2xUYWJsZS5oIgogI2luY2x1ZGUgIlJlZ0V4cC5oIgotI2luY2x1ZGUgPHd0
Zi9MaXN0UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CkBAIC0xNDQsNiArMTQz
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgflBhcnNlclJlZkNvdW50ZWQo
KTsKICAgICB9OwogCisgICAgY2xhc3MgTm9kZVJlbGVhc2VyOworCiAgICAgY2xhc3MgTm9kZSA6
IHB1YmxpYyBQYXJzZXJSZWZDb3VudGVkIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYg
RGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayBOb2RlU3RhY2s7CkBAIC0xNTIsNiArMTUzLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTm9kZShKU0dsb2JhbERhdGEqKSBKU0NfRkFT
VF9DQUxMOwogCisgICAgICAgIC8vIE5vbnJlY3Vyc2l2ZSBkZXN0cnVjdGlvbi4KKyAgICAgICAg
dmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICAvKgog
ICAgICAgICAgICAgUmV0dXJuIHZhbHVlOiBUaGUgcmVnaXN0ZXIgaG9sZGluZyB0aGUgcHJvZHVj
dGlvbidzIHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgZHN0OiBBbiBvcHRpb25hbCBwYXJh
bWV0ZXIgc3BlY2lmeWluZyB0aGUgbW9zdCBlZmZpY2llbnQKQEAgLTE5MCw3ICsxOTQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEpTQ19GQVNUX0NBTEwgPSAwOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIG5lZWRzUGFyZW5z
SWZMZWZ0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIAorCiAgICAgcHJv
dGVjdGVkOgogICAgICAgICBpbnQgbV9saW5lOwogICAgIH07CkBAIC00NzcsNyArNDgxLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBJZGVudGlmaWVyIG1faWRl
bnQ7CiAgICAgICAgIGludDMyX3QgbV9zdGFydE9mZnNldDsKLSAgICAgICAgCiAgICAgfTsKIAog
ICAgIGNsYXNzIEVsZW1lbnROb2RlIDogcHVibGljIE5vZGUgewpAQCAtNDk3LDYgKzUwMCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbC0+bV9uZXh0ID0gdGhpczsKICAgICAgICAg
fQogCisgICAgICAgIHZpcnR1YWwgfkVsZW1lbnROb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJl
Y0V4cHJlc3Npb247IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKQEAgLTUwNCwxMCArNTEwLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiB2YWx1ZSgpIHsgcmV0dXJuIG1fbm9kZS5n
ZXQoKTsgfQogCiAgICAgICAgIEVsZW1lbnROb2RlKiBuZXh0KCkgeyByZXR1cm4gbV9uZXh0Lmdl
dCgpOyB9Ci0gICAgICAgIFBhc3NSZWZQdHI8RWxlbWVudE5vZGU+IHJlbGVhc2VOZXh0KCkgSlND
X0ZBU1RfQ0FMTCB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CiAKICAgICBwcml2YXRlOgot
ICAgICAgICBMaXN0UmVmUHRyPEVsZW1lbnROb2RlPiBtX25leHQ7CisgICAgICAgIFJlZlB0cjxF
bGVtZW50Tm9kZT4gbV9uZXh0OwogICAgICAgICBpbnQgbV9lbGlzaW9uOwogICAgICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1fbm9kZTsKICAgICB9OwpAQCAtNTM3LDYgKzU0Miw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5B
cnJheU5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFz
ZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBAIC01NjAs
NiArNTY4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAg
ICAgIHZpcnR1YWwgflByb3BlcnR5Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFz
ZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQ
cmVjRXhwcmVzc2lvbjsgfQogCkBAIC01ODcsMTYgKzU5OCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIGxpc3QtPm1fbmV4dCA9IHRoaXM7CiAgICAgICAgIH0KIAorICAgICAgICB2
aXJ0dWFsIH5Qcm9wZXJ0eUxpc3ROb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNl
Tm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KIAotICAgICAgICBQ
YXNzUmVmUHRyPFByb3BlcnR5TGlzdE5vZGU+IHJlbGVhc2VOZXh0KCkgSlNDX0ZBU1RfQ0FMTCB7
IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBmcmll
bmQgY2xhc3MgT2JqZWN0TGl0ZXJhbE5vZGU7CiAgICAgICAgIFJlZlB0cjxQcm9wZXJ0eU5vZGU+
IG1fbm9kZTsKLSAgICAgICAgTGlzdFJlZlB0cjxQcm9wZXJ0eUxpc3ROb2RlPiBtX25leHQ7Cisg
ICAgICAgIFJlZlB0cjxQcm9wZXJ0eUxpc3ROb2RlPiBtX25leHQ7CiAgICAgfTsKIAogICAgIGNs
YXNzIE9iamVjdExpdGVyYWxOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKQEAgLTYxMiw2
ICs2MjQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAg
ICAgdmlydHVhbCB+T2JqZWN0TGl0ZXJhbE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJl
bGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0Nf
RkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNQcmltYXJ5OyB9CkBAIC02MzEsNiArNjQ2LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkJyYWNrZXRBY2Nl
c3Nvck5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFz
ZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBAIC02NTYs
NiArNjc0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAg
ICAgIHZpcnR1YWwgfkRvdEFjY2Vzc29yTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVs
ZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19G
QVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
eyByZXR1cm4gUHJlY01lbWJlcjsgfQpAQCAtNjg1LDEzICs3MDYsMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBsaXN0Tm9kZS0+bV9uZXh0ID0gdGhpczsKICAgICAgICAgfQogCisg
ICAgICAgIHZpcnR1YWwgfkFyZ3VtZW50TGlzdE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NB
TEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBK
U0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNv
bnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogCi0g
ICAgICAgIFBhc3NSZWZQdHI8QXJndW1lbnRMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBKU0NfRkFT
VF9DQUxMIHsgcmV0dXJuIG1fbmV4dC5yZWxlYXNlKCk7IH0KLQotICAgICAgICBMaXN0UmVmUHRy
PEFyZ3VtZW50TGlzdE5vZGU+IG1fbmV4dDsKKyAgICAgICAgUmVmUHRyPEFyZ3VtZW50TGlzdE5v
ZGU+IG1fbmV4dDsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAgICAg
fTsKIApAQCAtNzA4LDYgKzczMCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAg
ICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5Bcmd1bWVudHNOb2RlKCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAKQEAgLTcyOSw2ICs3NTQsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+TmV3
RXhwck5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFz
ZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBAIC03NDgs
NiArNzc2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAg
ICAgIHZpcnR1YWwgfkV2YWxGdW5jdGlvbkNhbGxOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9D
QUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
SlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IHJldHVybiBQcmVjQ2FsbDsgfQpAQCAtNzY2LDYgKzc5Nyw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5GdW5jdGlvbkNh
bGxWYWx1ZU5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVs
ZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDYWxs
OyB9CkBAIC03ODUsNiArODE5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAg
ICAgfQogCisgICAgICAgIHZpcnR1YWwgfkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwpAQCAtODA4LDYgKzg0NSw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5GdW5j
dGlvbkNhbGxCcmFja2V0Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVz
KE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY0NhbGw7IH0KQEAgLTgyOSw2ICs4NjksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+RnVuY3Rpb25DYWxsRG90Tm9kZSgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2Vk
ZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KQEAgLTg3OSw2ICs5
MjIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAg
dmlydHVhbCB+UG9zdGZpeEJyYWNrZXROb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxl
YXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjUG9zdGZpeDsgfQpAQCAtOTAwLDYgKzk0Niw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5Qb3N0Zml4RG90Tm9k
ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOwor
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1Bvc3RmaXg7IH0KQEAg
LTkyMCw2ICs5NjksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAK
KyAgICAgICAgdmlydHVhbCB+UG9zdGZpeEVycm9yTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY1Bvc3RmaXg7IH0KQEAgLTk1Nyw2ICsxMDA5LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkRlbGV0
ZUJyYWNrZXROb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJl
bGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwpAQCAt
OTc3LDYgKzEwMzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAK
KyAgICAgICAgdmlydHVhbCB+RGVsZXRlRG90Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FM
TDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
SlNDX0ZBU1RfQ0FMTDsKQEAgLTk5NSw2ICsxMDUzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkRlbGV0ZVZhbHVlTm9kZSgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKQEAgLTEwMTIsNiArMTA3Myw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFs
IH5Wb2lkTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxl
YXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKQEAgLTEw
NDksNiArMTExMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAor
ICAgICAgICB2aXJ0dWFsIH5UeXBlT2ZWYWx1ZU5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NB
TEw7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEpTQ19GQVNUX0NBTEw7CkBAIC0xMDg2LDYgKzExNTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+UHJlZml4QnJhY2tldE5vZGUo
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQpAQCAtMTEw
Nyw2ICsxMTc3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisg
ICAgICAgIHZpcnR1YWwgflByZWZpeERvdE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJl
bGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0Nf
RkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9CkBAIC0xMTI3LDYgKzEyMDAsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+UHJlZml4RXJy
b3JOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2Vy
Jik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmly
dHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0K
QEAgLTExNTAsNiArMTIyNiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAg
IH0KIAorICAgICAgICB2aXJ0dWFsIH5VbmFyeU9wTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCBPcGNvZGVJRCBvcGNvZGUoKSBjb25zdCBKU0NfRkFTVF9D
QUxMID0gMDsKIApAQCAtMTIyNSw2ICsxMzA0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkJpbmFyeU9wTm9kZSgpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBPcGNvZGVJRCBvcGNvZGUoKSBjb25z
dCBKU0NfRkFTVF9DQUxMID0gMDsKIApAQCAtMTIzNCwzMSArMTMxNiwxOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgYm9vbCBtX3JpZ2h0SGFzQXNzaWdubWVudHM7CiAgICAgfTsKIAotICAg
IGNsYXNzIFJldmVyc2VCaW5hcnlPcE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAg
IGNsYXNzIFJldmVyc2VCaW5hcnlPcE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFJldmVyc2VCaW5hcnlPcE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCBy
aWdodEhhc0Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShnbG9iYWxE
YXRhKQotICAgICAgICAgICAgLCBtX2V4cHIxKGV4cHIxKQotICAgICAgICAgICAgLCBtX2V4cHIy
KGV4cHIyKQotICAgICAgICAgICAgLCBtX3JpZ2h0SGFzQXNzaWdubWVudHMocmlnaHRIYXNBc3Np
Z25tZW50cykKKyAgICAgICAgICAgIDogQmluYXJ5T3BOb2RlKGdsb2JhbERhdGEsIGV4cHIxLCBl
eHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cykKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAg
ICAgUmV2ZXJzZUJpbmFyeU9wTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJlc3VsdFR5
cGUgdHlwZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJv
b2wgcmlnaHRIYXNBc3NpZ25tZW50cykKLSAgICAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xv
YmFsRGF0YSwgdHlwZSkKLSAgICAgICAgICAgICwgbV9leHByMShleHByMSkKLSAgICAgICAgICAg
ICwgbV9leHByMihleHByMikKLSAgICAgICAgICAgICwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzKHJp
Z2h0SGFzQXNzaWdubWVudHMpCisgICAgICAgICAgICA6IEJpbmFyeU9wTm9kZShnbG9iYWxEYXRh
LCB0eXBlLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpCiAgICAgICAgIHsKICAg
ICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBP
cGNvZGVJRCBvcGNvZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMID0gMDsKLQotICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOwotICAgICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjI7Ci0gICAgICAgIGJvb2wgbV9yaWdodEhhc0Fzc2ln
bm1lbnRzOwogICAgIH07CiAKICAgICBjbGFzcyBNdWx0Tm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5v
ZGUgewpAQCAtMTU0Myw2ICsxNjEzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAg
ICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkxvZ2ljYWxPcE5vZGUoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpT
Q19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIChtX29wZXJhdG9yID09IE9wTG9naWNhbEFuZCkgPyBQcmVj
TG9naWNhbEFuZCA6IFByZWNMb2dpY2FsT3I7IH0KQEAgLTE1NjYsNiArMTYzOSw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5Db25k
aXRpb25hbE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVs
ZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDb25k
aXRpb25hbDsgfQpAQCAtMTU4OCw2ICsxNjY0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgflJlYWRNb2RpZnlSZXNvbHZlTm9kZSgp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKQEAgLTE2MTEsNiArMTY5MCw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0
dWFsIH5Bc3NpZ25SZXNvbHZlTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5v
ZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1Rf
Q0FMTDsKQEAgLTE2MzcsNiArMTcxOSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAg
ICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5SZWFkTW9kaWZ5QnJhY2tldE5vZGUoKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBAIC0xNjY0LDYgKzE3NDksOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+
QXNzaWduQnJhY2tldE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhO
b2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7
CkBAIC0xNjg5LDYgKzE3NzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAg
ICB9CiAKKyAgICAgICAgdmlydHVhbCB+QXNzaWduRG90Tm9kZSgpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KQEAgLTE3MTMsNiArMTgwNCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFs
IH5SZWFkTW9kaWZ5RG90Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVz
KE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FM
TDsKQEAgLTE3MzcsNiArMTgzMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAg
ICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5Bc3NpZ25FcnJvck5vZGUoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpT
Q19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNBc3NpZ25tZW50OyB9CkBAIC0xNzU2LDYgKzE4NTMs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmly
dHVhbCB+Q29tbWFOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9k
ZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
RXhwcmVzc2lvbjsgfQpAQCAtMTc3OCwxMiArMTg3OCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIENvbnN0RGVjbE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIGluKSBKU0NfRkFTVF9D
QUxMOwogCisgICAgICAgIHZpcnR1YWwgfkNvbnN0RGVjbE5vZGUoKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KLSAgICAgICAgUGFzc1JlZlB0cjxDb25zdERl
Y2xOb2RlPiByZWxlYXNlTmV4dCgpIEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVh
c2UoKTsgfQogCiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKLSAgICAgICAgTGlzdFJlZlB0
cjxDb25zdERlY2xOb2RlPiBtX25leHQ7CisgICAgICAgIFJlZlB0cjxDb25zdERlY2xOb2RlPiBt
X25leHQ7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9pbml0OwogICAgICAgICAK
ICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwpAQCAtMTc5OCw2ICsxOTAwLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkNvbnN0
U3RhdGVtZW50Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVS
ZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9D
QUxMOwpAQCAtMTgyNywxMiArMTkzMiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIEJsb2NrTm9kZShKU0dsb2JhbERhdGEqLCBTb3VyY2VFbGVtZW50cyogY2hpbGRy
ZW4pIEpTQ19GQVNUX0NBTEw7CiAKKyAgICAgICAgdmlydHVhbCB+QmxvY2tOb2RlKCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICBTdGF0ZW1lbnRWZWN0b3Im
IGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc0Jsb2NrKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CisKICAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIFN0YXRlbWVudFZlY3RvciBtX2NoaWxkcmVuOwogICAgIH07CkBA
IC0xODg1LDYgKzE5OTQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9
CiAgICAgICAgIAorICAgICAgICB2aXJ0dWFsIH5WYXJTdGF0ZW1lbnROb2RlKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwpAQCAtMTkwMiw2ICsyMDE0LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfklmTm9k
ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOwor
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKQEAgLTE5MTgsNiArMjAz
Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2
aXJ0dWFsIH5JZkVsc2VOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMo
Tm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsK
IApAQCAtMTkzNCwxMCArMjA1MiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAg
ICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+RG9XaGlsZU5vZGUoKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJl
Z2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19G
QVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvb3AoKSBjb25z
dCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAg
IFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBtX3N0YXRlbWVudDsKICAgICAgICAgUmVmUHRyPEV4cHJl
c3Npb25Ob2RlPiBtX2V4cHI7CkBAIC0xOTUyLDEwICsyMDc0LDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5XaGlsZU5vZGUoKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc0xvb3AoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwogICAgICAgICBS
ZWZQdHI8U3RhdGVtZW50Tm9kZT4gbV9zdGF0ZW1lbnQ7CkBAIC0xOTc0LDEwICsyMTAwLDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKHN0YXRlbWVudCk7CiAgICAgICAg
IH0KIAorICAgICAgICB2aXJ0dWFsIH5Gb3JOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlND
X0ZBU1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMb29wKCkgY29uc3QgSlNDX0ZB
U1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
bV9leHByMjsKQEAgLTE5OTEsMTAgKzIxMjEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEZvckluTm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25Ob2Rl
KiwgU3RhdGVtZW50Tm9kZSopIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIEZvckluTm9kZShKU0ds
b2JhbERhdGEqLCBjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9u
Tm9kZSosIFN0YXRlbWVudE5vZGUqLCBpbnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVu
ZE9mZnNldCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgCisgICAgICAgIHZpcnR1YWwgfkZvcklu
Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYp
OworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmly
dHVhbCBib29sIGlzTG9vcCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwogICAgICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1faW5pdDsKQEAgLTIwNTIsNiArMjE4Niw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5SZXR1cm5O
b2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7
CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVh
bCBib29sIGlzUmV0dXJuTm9kZSgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsg
fQpAQCAtMjA3MSw2ICsyMjA4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAg
ICAgfQogCisgICAgICAgIHZpcnR1YWwgfldpdGhOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9D
QUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
SlNDX0ZBU1RfQ0FMTDsKIApAQCAtMjA5MCw2ICsyMjMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkxhYmVsTm9kZSgpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKQEAgLTIxMDYsNiArMjI0OSw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5U
aHJvd05vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFz
ZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogCkBAIC0yMTI0
LDYgKzIyNzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAg
ICAgICAgdmlydHVhbCB+VHJ5Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5v
ZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqIGRzdCA9IDApIEpTQ19G
QVNUX0NBTEw7CkBAIC0yMTUwLDE3ICsyMjk5LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgbC0+bV9uZXh0ID0gdGhpczsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgflBh
cmFtZXRlck5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVs
ZWFzZXImKTsKKwogICAgICAgICBJZGVudGlmaWVyIGlkZW50KCkgSlNDX0ZBU1RfQ0FMTCB7IHJl
dHVybiBtX2lkZW50OyB9CiAgICAgICAgIFBhcmFtZXRlck5vZGUgKm5leHRQYXJhbSgpIEpTQ19G
QVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICBQYXNz
UmVmUHRyPFBhcmFtZXRlck5vZGU+IHJlbGVhc2VOZXh0KCkgSlNDX0ZBU1RfQ0FMTCB7IHJldHVy
biBtX25leHQucmVsZWFzZSgpOyB9CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9u
OyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgRnVuY0RlY2xOb2RlOwog
ICAgICAgICBmcmllbmQgY2xhc3MgRnVuY0V4cHJOb2RlOwogICAgICAgICBJZGVudGlmaWVyIG1f
aWRlbnQ7Ci0gICAgICAgIExpc3RSZWZQdHI8UGFyYW1ldGVyTm9kZT4gbV9uZXh0OworICAgICAg
ICBSZWZQdHI8UGFyYW1ldGVyTm9kZT4gbV9uZXh0OwogICAgIH07CiAKICAgICBjbGFzcyBTY29w
ZU5vZGUgOiBwdWJsaWMgQmxvY2tOb2RlIHsKQEAgLTIzMjQsNiArMjQ3NSw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgbV9ib2R5LT5maW5pc2hQYXJzaW5nKHNvdXJjZSwgbV9wYXJh
bWV0ZXIuZ2V0KCkpOwogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+RnVuY0V4cHJOb2Rl
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisK
ICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICBKU0Z1bmN0aW9uKiBtYWtlRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKSBKU0NfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FM
TDsKQEAgLTIzNTEsNiArMjUwNSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9i
b2R5LT5maW5pc2hQYXJzaW5nKHNvdXJjZSwgbV9wYXJhbWV0ZXIuZ2V0KCkpOwogICAgICAgICB9
CiAKKyAgICAgICAgdmlydHVhbCB+RnVuY0RlY2xOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9D
QUxMOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBKU0NfRkFTVF9DQUxMOwpAQCAtMjM4MSw2ICsyNTM4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICAgICAgY2hpbGRyZW4tPnJlbGVhc2VDb250ZW50c0ludG9WZWN0b3IobV9jaGls
ZHJlbik7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5DYXNlQ2xhdXNlTm9kZSgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9D
QUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogCkBAIC0yNDA3LDE2
ICsyNTY3LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgY2xhdXNlTGlzdC0+bV9u
ZXh0ID0gdGhpczsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkNsYXVzZUxpc3ROb2Rl
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisK
ICAgICAgICAgQ2FzZUNsYXVzZU5vZGUqIGdldENsYXVzZSgpIGNvbnN0IEpTQ19GQVNUX0NBTEwg
eyByZXR1cm4gbV9jbGF1c2UuZ2V0KCk7IH0KICAgICAgICAgQ2xhdXNlTGlzdE5vZGUqIGdldE5l
eHQoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FM
TDsKLSAgICAgICAgUGFzc1JlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBKU0Nf
RkFTVF9DQUxMIHsgcmV0dXJuIG1fbmV4dC5yZWxlYXNlKCk7IH0KICAgICAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1
cm4gUHJlY0V4cHJlc3Npb247IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBDYXNlQmxvY2tOb2RlOwogICAgICAgICBSZWZQdHI8Q2FzZUNsYXVzZU5vZGU+IG1fY2xhdXNl
OwotICAgICAgICBMaXN0UmVmUHRyPENsYXVzZUxpc3ROb2RlPiBtX25leHQ7CisgICAgICAgIFJl
ZlB0cjxDbGF1c2VMaXN0Tm9kZT4gbV9uZXh0OwogICAgIH07CiAKICAgICBjbGFzcyBDYXNlQmxv
Y2tOb2RlIDogcHVibGljIE5vZGUgewpAQCAtMjQyOSw2ICsyNTkxLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkNhc2VCbG9ja05v
ZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsK
KwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29kZUZvckJsb2NrKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiBpbnB1dCwgUmVnaXN0ZXJJRCogZHN0ID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZB
U1RfQ0FMTDsKQEAgLTI0NTAsNiArMjYxNSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5Td2l0Y2hOb2RlKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBK
U0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzgyMzQpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAw
OC0xMS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSB0ZXN0IGZvciBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4ODYKKyAgICAgICAgICBTdGFjayBvdmVyZmxv
dyBkdWUgdG8gZGVlcGx5IG5lc3RlZCBwYXJzZSB0cmVlIGRvaW5nIHJlcGVhdGVkIHN0cmluZyBj
b25jYXRlbnRhdGlvbgorCisgICAgICAgICogZmFzdC9qcy9sYXJnZS1leHByZXNzaW9ucy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvbGFyZ2UtZXhwcmVzc2lvbnMuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZXNvdXJjZXMvbGFyZ2UtZXhwcmVzc2lvbnMu
anM6IEFkZGVkLgorCiAyMDA4LTExLTA3ICBDYW1lcm9uIFp3YXJpY2ggIDx6d2FyaWNoQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvanMvbGFyZ2UtZXhwcmVzc2lvbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvbGFyZ2UtZXhwcmVzc2lvbnMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9sYXJnZS1leHByZXNzaW9ucy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKK1RoaXMgdGVzdCBjaGVja3MgYmVo
YXZpb3Igd2l0aCBleHByZXNzaW9ucyB0aGF0IGNyZWF0ZSBkZWVwIHBhcnNlIHRyZWVzLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBldmFsKHJlcGVhdGVkRXhwcmVzc2lv
bigibGV0dGVyQSIsICIrIiwgMTAwKSkgaXMgcmVwZWF0ZWRTdHJpbmcoImEiLCAxMDApCitQQVNT
IGV2YWwocmVwZWF0ZWRFeHByZXNzaW9uKCJsZXR0ZXJBIiwgIisiLCAxMDAwKSkgaXMgcmVwZWF0
ZWRTdHJpbmcoImEiLCAxMDAwKQorUEFTUyBldmFsKHJlcGVhdGVkRXhwcmVzc2lvbigibGV0dGVy
QSIsICIrIiwgMTAwMDApKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IEV4cHJlc3Npb24g
dG9vIGRlZXAuCitQQVNTIGV2YWwocmVwZWF0ZWRFeHByZXNzaW9uKCJsZXR0ZXJBIiwgIisiLCAx
MDAwMDApKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IEV4cHJlc3Npb24gdG9vIGRlZXAu
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9qcy9sYXJnZS1leHByZXNzaW9ucy1l
eHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9sYXJnZS1leHByZXNzaW9ucy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvbGFyZ2UtZXhwcmVzc2lvbnMuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvbGFyZ2UtZXhwcmVzc2lvbnMuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9sYXJnZS1leHByZXNzaW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2pzL2xhcmdlLWV4cHJlc3Npb25zLmh0
bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1sCk5hbWU6IHN2
bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291
cmNlcy9sYXJnZS1leHByZXNzaW9ucy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2pzL3Jlc291cmNlcy9sYXJnZS1leHByZXNzaW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2xhcmdlLWV4cHJlc3Npb25zLmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMyIEBACitkZXNjcmlwdGlvbigKKyJUaGlzIHRlc3QgY2hlY2tzIGJlaGF2
aW9yIHdpdGggZXhwcmVzc2lvbnMgdGhhdCBjcmVhdGUgZGVlcCBwYXJzZSB0cmVlcy4iCispOwor
CisvLyBBdCB0aGUgbW9tZW50LCB0aGlzIHRlc3RzIG9ubHkgcmVwZWF0ZWQgIisiIG9wZXJhdG9y
IGV4cHJlc3Npb24gdHJlZXMuCisvLyBUaGVyZSBhcmUgbG90cyBvZiBvdGhlciBjYXNlcyB3ZXIg
Y291bGQgY292ZXIgdG8gbWFrZSB0aGlzIGEgbW9yZSB0aG9yb3VnaCB0ZXN0LgorCisvLyBVc2Ug
YSB2YXJpYWJsZSB0byBkZWNyZWFzZSB0aGUgY2hhbmNlIHRoZSB0ZXN0IHdpbGwgYmUgaW52YWxp
ZCBkdWUgdG8gY29uc3RuYXQgZm9sZGluZy4KK3ZhciBsZXR0ZXJBID0gJ2EnOworCitmdW5jdGlv
biByZXBlYXRlZEV4cHJlc3Npb24odmFsdWUsIG9wZXJhdG9yLCBjb3VudCkKK3sKKyAgICB2YXIg
ZXhwcmVzc2lvbiA9IHZhbHVlOworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgY291bnQ7ICsraSkK
KyAgICAgICAgZXhwcmVzc2lvbiArPSAnICcgKyBvcGVyYXRvciArICcgJyArIHZhbHVlOworICAg
IHJldHVybiBleHByZXNzaW9uOworfQorCitmdW5jdGlvbiByZXBlYXRlZFN0cmluZyh2YWx1ZSwg
Y291bnQpCit7CisgICAgdmFyIHJlc3VsdCA9ICIiOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IHZhbHVlOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3Nob3VsZEJlKCdldmFsKHJlcGVhdGVkRXhwcmVzc2lvbigibGV0dGVyQSIsICIrIiwg
MTAwKSknLCAncmVwZWF0ZWRTdHJpbmcoImEiLCAxMDApJyk7CitzaG91bGRCZSgnZXZhbChyZXBl
YXRlZEV4cHJlc3Npb24oImxldHRlckEiLCAiKyIsIDEwMDApKScsICdyZXBlYXRlZFN0cmluZygi
YSIsIDEwMDApJyk7CitzaG91bGRUaHJvdygnZXZhbChyZXBlYXRlZEV4cHJlc3Npb24oImxldHRl
ckEiLCAiKyIsIDEwMDAwKSknLCAnIlN5bnRheEVycm9yOiBFeHByZXNzaW9uIHRvbyBkZWVwIicp
Oworc2hvdWxkVGhyb3coJ2V2YWwocmVwZWF0ZWRFeHByZXNzaW9uKCJsZXR0ZXJBIiwgIisiLCAx
MDAwMDApKScsICciU3ludGF4RXJyb3I6IEV4cHJlc3Npb24gdG9vIGRlZXAiJyk7CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25004</attachid>
            <date>2008-11-09 11:59:50 -0800</date>
            <delta_ts>2008-11-09 16:20:35 -0800</delta_ts>
            <desc>improved patch</desc>
            <filename>DeepParseTreePatch.txt</filename>
            <type>text/plain</type>
            <size>71682</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MjQxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMDgtMTEtMDkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICBJbmNsdWRlcyBzb21lIHdvcmsgZG9uZSBieSBDaHJpcyBCcmljaGZvcmQu
CisKKyAgICAgICAgLSBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0ODg2CisgICAgICAgICAgU3RhY2sgb3ZlcmZsb3cgZHVlIHRvIGRlZXBseSBuZXN0ZWQgcGFy
c2UgdHJlZSBkb2luZyByZXBlYXRlZCBzdHJpbmcgY29uY2F0ZW50YXRpb24KKworICAgICAgICBU
ZXN0OiBmYXN0L2pzL2xhcmdlLWV4cHJlc3Npb25zLmh0bWwKKworICAgICAgICAxKSBDb2RlIGdl
bmVyYXRpb24gaXMgcmVjdXJzaXZlLCBzbyB0YWtlcyBzdGFjayBwcm9wb3J0aW9uYWwgdG8gdGhl
IGNvbXBsZXhpdHkKKyAgICAgICAgICAgb2YgdGhlIHNvdXJjZSBjb2RlIGV4cHJlc3Npb24uIEZp
eGVkIGJ5IHNldHRpbmcgYW4gYXJiaXRyYXJ5IHJlY3Vyc2lvbiBsaW1pdAorICAgICAgICAgICBv
ZiAxMCwwMDAgbm9kZXMuCisKKyAgICAgICAgMikgRGVzdHJ1Y3Rpb24gb2YgdGhlIHN5bnRheCB0
cmVlIHdhcyByZWN1cnNpdmUuIEZpeGVkIGJ5IGludHJvZHVjaW5nIGEKKyAgICAgICAgICAgbm9u
LXJlY3Vyc2l2ZSBtZWNoYW5pc20gZm9yIGRlc3Ryb3lpbmcgdGhlIHRyZWUuCisKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQ29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkNvZGVHZW5l
cmF0b3I6OkNvZGVHZW5lcmF0b3IpOiBJbml0aWFsaXplIGRlcHRoIHRvIDAuCisgICAgICAgIChK
U0M6OkNvZGVHZW5lcmF0b3I6OmVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKTog
QWRkZWQuIEVtaXRzIHRoZSBjb2RlCisgICAgICAgIHRvIHRocm93IGEgInRvbyBkZWVwIiBleGNl
cHRpb24uCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0NvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KEpTQzo6Q29kZUdlbmVyYXRvcjo6ZW1pdE5vZGUpOiBDaGVjayBkZXB0aCBhbmQgZW1pdCBhbiBl
eGNlcHRpb24gaWYgd2UgZXhjZWVkCisgICAgICAgIHRoZSBtYXhpbXVtIGRlcHRoLgorCisgICAg
ICAgICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Tm9kZVJlbGVhc2VyOjpyZWxl
YXNlQWxsTm9kZXMpOiBBZGRlZC4gVG8gYmUgY2FsbGVkIGluc2lkZSBub2RlIGRlc3RydWN0b3Jz
CisgICAgICAgIHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxscyB0byBkZXN0cnVjdG9ycyBmb3Igbm9k
ZXMgaW5zaWRlIHRoaXMgb25lLgorICAgICAgICAoSlNDOjpOb2RlUmVsZWFzZXI6OmFkb3B0KTog
QWRkZWQuIFRvIGJlIGNhbGxlZCBpbnNpZGUgcmVsZWFzZU5vZGVzIGZ1bmN0aW9ucy4KKyAgICAg
ICAgQWxzbyBhZGRlZCByZWxlYXNlTm9kZXMgZnVuY3Rpb25zIGFuZCBjYWxscyB0byByZWxlYXNl
QWxsTm9kZXMgaW5zaWRlIGRlc3RydWN0b3JzCisgICAgICAgIGZvciBlYWNoIGNsYXNzIGRlcml2
ZWQgZnJvbSBOb2RlIHRoYXQgaGFzIFJlZlB0ciB0byBvdGhlciBub2Rlcy4KKworICAgICAgICAq
IHBhcnNlci9Ob2Rlcy5oOiBBZGRlZCBkZWNsYXJhdGlvbnMgb2YgcmVsZWFzZU5vZGVzIGFuZCBk
ZXN0cnVjdG9ycyBpbiBhbGwgY2xhc3NlcworICAgICAgICB0aGF0IG5lZWRlZCBpdC4gRWxpbWlu
YXRlZCB1c2Ugb2YgTGlzdFJlZlB0ciBhbmQgcmVsZWFzZU5leHQsIHdoaWNoIGFyZSB0aGUgdHdv
IHBhcnRzCisgICAgICAgIG9mIGFuIG9sZGVyIHNvbHV0aW9uIHRvIHRoZSBub24tcmVjdXJzaXZl
IGRlc3RydWN0aW9uIHByb2JsZW0gdGhhdCB3b3JrcyBvbmx5IGZvcgorICAgICAgICBsaXN0cywg
d2hlcmVhcyB0aGUgbmV3IHNvbHV0aW9uIHdvcmtzIGZvciBvdGhlciBncmFwaHMuIENoYW5nZWQg
UmV2ZXJzZUJpbmFyeU9wTm9kZQorICAgICAgICB0byB1c2UgQmluYXJ5T3BOb2RlIGFzIGEgYmFz
ZSBjbGFzcyB0byBhdm9pZCBzb21lIGR1cGxpY2F0ZWQgY29kZS4KKwogMjAwOC0xMS0wOCAgS2V2
aW4gT2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KICAgICAgICAgCiAgICAgICAg
IHd4IGJ1aWxkIGZpeGVzIGFmdGVyIGFkZGl0aW9uIG9mIEpTQ29yZSBwYXJzZXIgYW5kIGJ5Y29t
cGlsZXIgZGlycy4gQWxzbyBjbGVhbnVwCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzODI0MSkKKysrIEphdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3
LDYgKzIwNyw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUKICAg
ICAsIG1fbmV4dEdsb2JhbEluZGV4KC0xKQogICAgICwgbV9nbG9iYWxEYXRhKCZzY29wZUNoYWlu
Lmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCktPmdsb2JhbERhdGEoKSkKICAgICAsIG1fbGFz
dE9wY29kZUlEKG9wX2VuZCkKKyAgICAsIG1fZW1pdE5vZGVEZXB0aCgwKQogewogICAgIGlmICht
X3Nob3VsZEVtaXREZWJ1Z0hvb2tzKQogICAgICAgICBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2Nv
cGVDaGFpbiA9IHRydWU7CkBAIC0yODMsNiArMjg0LDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdl
bmVyYXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCiAgICAg
LCBtX2dsb2JhbERhdGEoJnNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKS0+
Z2xvYmFsRGF0YSgpKQogICAgICwgbV9sYXN0T3Bjb2RlSUQob3BfZW5kKQorICAgICwgbV9lbWl0
Tm9kZURlcHRoKDApCiB7CiAgICAgaWYgKG1fc2hvdWxkRW1pdERlYnVnSG9va3MpCiAgICAgICAg
IG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluID0gdHJ1ZTsKQEAgLTM1Myw2ICszNTUs
NyBAQCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBlCiAgICAgLCBtX2Nv
ZGVUeXBlKEV2YWxDb2RlKQogICAgICwgbV9nbG9iYWxEYXRhKCZzY29wZUNoYWluLmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCktPmdsb2JhbERhdGEoKSkKICAgICAsIG1fbGFzdE9wY29kZUlE
KG9wX2VuZCkKKyAgICAsIG1fZW1pdE5vZGVEZXB0aCgwKQogewogICAgIGlmIChtX3Nob3VsZEVt
aXREZWJ1Z0hvb2tzKQogICAgICAgICBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbiA9
IHRydWU7CkBAIC0xNjc2LDQgKzE2NzksMTYgQEAgdm9pZCBDb2RlR2VuZXJhdG9yOjplbmRTd2l0
Y2godWludDMyX3QgYwogICAgIH0KIH0KIAorUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1p
dFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKQoreworICAgIC8vIEl0IHdvdWxkIGJl
IG5pY2UgdG8gZG8gYW4gZXZlbiBiZXR0ZXIgam9iIG9mIGlkZW50aWZ5aW5nIGV4YWN0bHkgd2hl
cmUgdGhlIGV4cHJlc3Npb24gaXMuCisgICAgLy8gQW5kIHdlIGNvdWxkIG1ha2UgdGhlIGNhbGxl
ciBwYXNzIHRoZSBub2RlIHBvaW50ZXIgaW4sIGlmIHRoZXJlIHdhcyBzb21lIHdheSBvZiBnZXR0
aW5nCisgICAgLy8gdGhhdCBmcm9tIGFuIGFyYml0cmFyeSBub2RlLiBIb3dldmVyLCBjYWxsaW5n
IGVtaXRFeHByZXNzaW9uSW5mbyB3aXRob3V0IGFueSB1c2VmdWwgZGF0YQorICAgIC8vIGlzIHN0
aWxsIGdvb2QgZW5vdWdoIHRvIGdldCB1cyBhbiBhY2N1cmF0ZSBsaW5lIG51bWJlci4KKyAgICBl
bWl0RXhwcmVzc2lvbkluZm8oMCwgMCwgMCk7CisgICAgUmVnaXN0ZXJJRCogZXhjZXB0aW9uID0g
ZW1pdE5ld0Vycm9yKG5ld1RlbXBvcmFyeSgpLCBTeW50YXhFcnJvciwganNTdHJpbmcoZ2xvYmFs
RGF0YSgpLCAiRXhwcmVzc2lvbiB0b28gZGVlcCIpKTsKKyAgICBlbWl0VGhyb3coZXhjZXB0aW9u
KTsKKyAgICByZXR1cm4gZXhjZXB0aW9uOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Db2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0NvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
MzgyNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQ29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgICAgIExpbmVJbmZvIGluZm8gPSB7IGluc3RydWN0aW9ucygpLnNpemUoKSwgbi0+bGlu
ZU5vKCkgfTsKICAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+bGluZUluZm8uYXBwZW5kKGlu
Zm8pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG4tPmVtaXRDb2RlKCp0aGlz
LCBkc3QpOworICAgICAgICAgICAgaWYgKG1fZW1pdE5vZGVEZXB0aCA+PSBzX21heEVtaXROb2Rl
RGVwdGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVw
RXhjZXB0aW9uKCk7CisgICAgICAgICAgICArK21fZW1pdE5vZGVEZXB0aDsKKyAgICAgICAgICAg
IFJlZ2lzdGVySUQqIHIgPSBuLT5lbWl0Q29kZSgqdGhpcywgZHN0KTsKKyAgICAgICAgICAgIC0t
bV9lbWl0Tm9kZURlcHRoOworICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgIH0KIAogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0Tm9kZShOb2RlKiBuKQpAQCAtMzk5LDYgKzQwNCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTG9jYWxzKCkgeyByZXR1
cm4gKG1fY29kZVR5cGUgIT0gRXZhbENvZGUpICYmICFtX2R5bmFtaWNTY29wZURlcHRoOyB9CiAg
ICAgICAgIGJvb2wgY2FuT3B0aW1pemVOb25Mb2NhbHMoKSB7IHJldHVybiAobV9jb2RlVHlwZSA9
PSBGdW5jdGlvbkNvZGUpICYmICFtX2R5bmFtaWNTY29wZURlcHRoICYmICFtX2NvZGVCbG9jay0+
dXNlc0V2YWw7IH0KIAorICAgICAgICBSZWdpc3RlcklEKiBlbWl0VGhyb3dFeHByZXNzaW9uVG9v
RGVlcEV4Y2VwdGlvbigpOworCiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0RGVidWdIb29rczsK
ICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3M7CiAKQEAgLTQ0NCw2ICs0NTEs
MTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBzdGF0aWMgYm9v
bCBzX2R1bXBzR2VuZXJhdGVkQ29kZTsKICNlbmRpZgorCisgICAgICAgIHVuc2lnbmVkIG1fZW1p
dE5vZGVEZXB0aDsKKworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19tYXhFbWl0Tm9k
ZURlcHRoID0gMTAwMDA7CiAgICAgfTsKIAogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3Bw
CShyZXZpc2lvbiAzODI0MSkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcwIEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5h
bWVzcGFjZSBKU0MgewogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIHZvaWQgc3Vi
c3RpdHV0ZShVU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFVTdHJpbmcmIHN1YnN0cmluZykgSlNDX0ZB
U1RfQ0FMTDsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5vZGVSZWxlYXNl
ciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBOb2RlUmVsZWFzZXIg
OiBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIGluc2lk
ZSB0aGUgZGVzdHJ1Y3RvciBvZiBhIGNsYXNzIGRlcml2ZWQgZnJvbSBOb2RlLgorICAgIC8vIFRo
aXMgd2lsbCB0cmF2ZXJzZSB0aGUgdHJlZSBiZWxvdyB0aGlzIG5vZGUsIGRlc3Ryb3lpbmcgYWxs
IG9mIHRob3NlIG5vZGVzLAorICAgIC8vIGJ1dCB3aXRob3V0IHJlbHlpbmcgb24gcmVjdXJzaW9u
LgorICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VBbGxOb2RlcyhQYXJzZXJSZWZDb3VudGVkKiByb290
KTsKKworICAgIC8vIENhbGwgdGhpcyBvbiBlYWNoIG5vZGUgaW4gYSB0aGUgcmVsZWFzZU5vZGVz
IHZpcnR1YWwgZnVuY3Rpb24uCisgICAgLy8gSXQgZ2l2ZXMgdGhlIG5vZGUgdG8gdGhlIE5vZGVS
ZWxlYXNlciwgd2hpY2ggd2lsbCB0aGVuIHJlbGVhc2UgdGhlCisgICAgLy8gbm9kZSBsYXRlciBh
dCB0aGUgZW5kIG9mIHRoZSByZWxlYXNlQWxsTm9kZXMgcHJvY2Vzcy4KKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gdm9pZCBhZG9wdChSZWZQdHI8VD4mIG5vZGUpIHsgaWYgKG5vZGUpIGFkb3B0
KG5vZGUucmVsZWFzZSgpKTsgfQorICAgIHZvaWQgYWRvcHQoUmVmUHRyPEZ1bmN0aW9uQm9keU5v
ZGU+JiBub2RlKSB7IGlmIChub2RlKSBhZG9wdEZ1bmN0aW9uQm9keU5vZGUobm9kZSk7IH0KKwor
cHJpdmF0ZToKKyAgICBOb2RlUmVsZWFzZXIoKSB7IH0KKyAgICB+Tm9kZVJlbGVhc2VyKCkgeyB9
CisKKyAgICB2b2lkIGFkb3B0KFBhc3NSZWZQdHI8UGFyc2VyUmVmQ291bnRlZD4pOworICAgIHZv
aWQgYWRvcHRGdW5jdGlvbkJvZHlOb2RlKFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiYpOworCisg
ICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFBhcnNlclJlZkNvdW50ZWQ+ID4gTm9kZVJlbGVhc2VW
ZWN0b3I7CisgICAgT3duUHRyPE5vZGVSZWxlYXNlVmVjdG9yPiBtX3ZlY3RvcjsKK307CisKK3Zv
aWQgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXMoUGFyc2VyUmVmQ291bnRlZCogcm9vdCkK
K3sKKyAgICBBU1NFUlQocm9vdCk7CisgICAgTm9kZVJlbGVhc2VyIHJlbGVhc2VyOworICAgIHJv
b3QtPnJlbGVhc2VOb2RlcyhyZWxlYXNlcik7CisgICAgaWYgKCFyZWxlYXNlci5tX3ZlY3RvcikK
KyAgICAgICAgcmV0dXJuOworICAgIC8vIE5vdGU6IFRoZSBjYWxsIHRvIHJlbGVhc2UubV92ZWN0
b3ItPnNpemUoKSBpcyBpbnRlbnRpb25hbGx5IGluc2lkZQorICAgIC8vIHRoZSBsb29wLCBzaW5j
ZSBjYWxscyB0byByZWxlYXNlTm9kZXMgYXJlIGV4cGVjdGVkIHRvIGluY3JlYXNlIHRoZSBzaXpl
LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVsZWFzZXIubV92ZWN0b3ItPnNpemUoKTsg
KytpKQorICAgICAgICAoKnJlbGVhc2VyLm1fdmVjdG9yKVtpXS0+cmVsZWFzZU5vZGVzKHJlbGVh
c2VyKTsKK30KKwordm9pZCBOb2RlUmVsZWFzZXI6OmFkb3B0KFBhc3NSZWZQdHI8UGFyc2VyUmVm
Q291bnRlZD4gbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgaWYgKCFub2RlLT5oYXNP
bmVSZWYoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgIG1f
dmVjdG9yLnNldChuZXcgTm9kZVJlbGVhc2VWZWN0b3IpOworICAgIG1fdmVjdG9yLT5hcHBlbmQo
bm9kZSk7Cit9CisKK3ZvaWQgTm9kZVJlbGVhc2VyOjphZG9wdEZ1bmN0aW9uQm9keU5vZGUoUmVm
UHRyPEZ1bmN0aW9uQm9keU5vZGU+JiBmdW5jdGlvbkJvZHlOb2RlKQoreworICAgIC8vIFRoaXMg
c2lkZXN0ZXBzIGEgcHJvYmxlbSB3aGVyZSBpZiB5b3UgYXNzaWduIGEgUGFzc1JlZlB0cjxGdW5j
dGlvbkJvZHlOb2RlPgorICAgIC8vIHRvIGEgUGFzc1JlZlB0cjxOb2RlPiB3ZSBsZWF2ZSB0aGUg
dHdvIHJlZmVyZW5jZSBjb3VudHMgKEZ1bmN0aW9uQm9keU5vZGUKKyAgICAvLyBhbmQgUGFyc2Vy
UmVmQ291bnRlZCkgdW5iYWxhbmNlZC4gSXQgd291bGQgYmUgbmljZSB0byBmaXggdGhpcyBwcm9i
bGVtIGluCisgICAgLy8gYSBjbGVhbmVyIHdheSAtLSBwZXJoYXBzIHdlIGNvdWxkIHJlbW92ZSB0
aGUgRnVuY3Rpb25Cb2R5Tm9kZSByZWZlcmVuY2UKKyAgICAvLyBjb3VudCBhdCBzb21lIHBvaW50
LgorICAgIFJlZlB0cjxOb2RlPiBub2RlID0gZnVuY3Rpb25Cb2R5Tm9kZTsKKyAgICBmdW5jdGlv
bkJvZHlOb2RlID0gMDsKKyAgICBhZG9wdChub2RlLnJlbGVhc2UoKSk7Cit9CisKKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQYXJzZXJSZWZDb3VudGVkIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgUmVm
Q291bnRlZExlYWtDb3VudGVyIHBhcnNlclJlZkNvdW50ZWRDb3VudGVyKCJKU0M6Ok5vZGUiKTsK
QEAgLTc1LDYgKzEzOCwxMCBAQCBQYXJzZXJSZWZDb3VudGVkOjp+UGFyc2VyUmVmQ291bnRlZCgp
CiAjZW5kaWYKIH0KIAordm9pZCBQYXJzZXJSZWZDb3VudGVkOjpyZWxlYXNlTm9kZXMoTm9kZVJl
bGVhc2VyJikKK3sKK30KKwogdm9pZCBQYXJzZXJSZWZDb3VudGVkOjpyZWYoKQogewogICAgIC8v
IGJ1bXBpbmcgZnJvbSAwIHRvIDEgaXMganVzdCByZW1vdmluZyBmcm9tIHRoZSBuZXcgbm9kZXMg
c2V0CkBAIC0xNDAsMTMgKzIwNywxNiBAQCB2b2lkIFBhcnNlclJlZkNvdW50ZWQ6OmRlbGV0ZU5l
d09iamVjdHMoCiAgICAgZ2xvYmFsRGF0YS0+bmV3UGFyc2VyT2JqZWN0cyA9IDA7CiB9CiAKKy8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKIE5vZGU6Ok5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAg
IDogUGFyc2VyUmVmQ291bnRlZChnbG9iYWxEYXRhKQogewogICAgIG1fbGluZSA9IGdsb2JhbERh
dGEtPmxleGVyLT5saW5lTm8oKTsKIH0KIAotc3RhdGljIHZvaWQgc3Vic3RpdHV0ZShVU3RyaW5n
JiBzdHJpbmcsIGNvbnN0IFVTdHJpbmcmIHN1YnN0cmluZykgSlNDX0ZBU1RfQ0FMTDsKKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBzdGF0aWMgdm9pZCBzdWJzdGl0dXRlKFVT
dHJpbmcmIHN0cmluZywgY29uc3QgVVN0cmluZyYgc3Vic3RyaW5nKQogewogICAgIGludCBwb3Np
dGlvbiA9IHN0cmluZy5maW5kKCIlcyIpOwpAQCAtMjc1LDggKzM0NSwzMSBAQCBSZWdpc3RlcklE
KiBSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
UmVzb2x2ZShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBtX2lkZW50KTsKIH0KIAor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVsZW1lbnROb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFbGVtZW50Tm9kZTo6fkVsZW1lbnROb2RlKCkK
K3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBF
bGVtZW50Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAg
cmVsZWFzZXIuYWRvcHQobV9uZXh0KTsKKyAgICByZWxlYXNlci5hZG9wdChtX25vZGUpOworfQor
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXlOb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitBcnJheU5vZGU6On5BcnJheU5vZGUoKQorewor
ICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEFycmF5
Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFz
ZXIuYWRvcHQobV9lbGVtZW50KTsKK30KKwogUmVnaXN0ZXJJRCogQXJyYXlOb2RlOjplbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIHB1dCBhbGwgb2YgdGhpcyBjb2RlIGludG8gZW1pdE5ld0FycmF5PwpA
QCAtMzA4LDggKzQwMSwzMCBAQCBSZWdpc3RlcklEKiBBcnJheU5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lCiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwg
YXJyYXkuZ2V0KCkpOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJv
cGVydHlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHJvcGVydHlOb2RlOjp+
UHJvcGVydHlOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlz
KTsKK30KKwordm9pZCBQcm9wZXJ0eU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJl
bGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fYXNzaWduKTsKK30KKwogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9iamVjdExpdGVyYWxOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAorT2JqZWN0TGl0ZXJhbE5vZGU6On5PYmplY3RMaXRlcmFsTm9kZSgp
Cit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQg
T2JqZWN0TGl0ZXJhbE5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQor
eworICAgIHJlbGVhc2VyLmFkb3B0KG1fbGlzdCk7Cit9CisKIFJlZ2lzdGVySUQqIE9iamVjdExp
dGVyYWxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKICAgICAgaWYgKCFtX2xpc3QpIHsKQEAgLTMyMiw2ICs0MzcsMTcgQEAgUmVnaXN0
ZXJJRCogT2JqZWN0TGl0ZXJhbE5vZGU6OmVtaXRDb2RlKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gUHJvcGVydHlMaXN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCitQcm9wZXJ0eUxpc3ROb2RlOjp+UHJvcGVydHlMaXN0Tm9kZSgpCit7CisgICAgTm9k
ZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgUHJvcGVydHlMaXN0
Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFz
ZXIuYWRvcHQobV9ub2RlKTsKKyAgICByZWxlYXNlci5hZG9wdChtX25leHQpOworfQorCiBSZWdp
c3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3T2JqID0g
Z2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwpAQCAtMzU0LDYgKzQ4MCwxNyBAQCBSZWdp
c3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Q29kZShDCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBCcmFja2V0QWNjZXNzb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKK0JyYWNrZXRBY2Nlc3Nvck5vZGU6On5CcmFja2V0QWNjZXNzb3JOb2Rl
KCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9p
ZCBCcmFja2V0QWNjZXNzb3JOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNl
cikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2Jhc2UpOworICAgIHJlbGVhc2VyLmFkb3B0KG1f
c3Vic2NyaXB0KTsKK30KKwogUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUo
bV9iYXNlLmdldCgpLCBtX3N1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzLCBtX3N1YnNjcmlwdC0+aXNQ
dXJlKGdlbmVyYXRvcikpOwpAQCAtMzY0LDYgKzUwMSwxNiBAQCBSZWdpc3RlcklEKiBCcmFja2V0
QWNjZXNzb3JOb2RlOjplbWl0Q29kCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBEb3RBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorRG90
QWNjZXNzb3JOb2RlOjp+RG90QWNjZXNzb3JOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJl
bGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBEb3RBY2Nlc3Nvck5vZGU6OnJlbGVhc2VO
b2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fYmFz
ZSk7Cit9CisKIFJlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVnaXN0ZXJJRCogYmFz
ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwpAQCAtMzczLDIwICs1MjAsNjYg
QEAgUmVnaXN0ZXJJRCogRG90QWNjZXNzb3JOb2RlOjplbWl0Q29kZShDbwogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJndW1lbnRMaXN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCitBcmd1bWVudExpc3ROb2RlOjp+QXJndW1lbnRMaXN0Tm9kZSgpCit7
CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgQXJn
dW1lbnRMaXN0Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7Cisg
ICAgcmVsZWFzZXIuYWRvcHQobV9uZXh0KTsKKyAgICByZWxlYXNlci5hZG9wdChtX2V4cHIpOwor
fQorCiBSZWdpc3RlcklEKiBBcmd1bWVudExpc3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBBU1NFUlQobV9leHByKTsKICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9leHByLmdldCgpKTsKIH0KIAorLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFyZ3VtZW50c05vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworQXJndW1lbnRzTm9kZTo6fkFyZ3VtZW50c05vZGUoKQorewor
ICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEFyZ3Vt
ZW50c05vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJl
bGVhc2VyLmFkb3B0KG1fbGlzdE5vZGUpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gTmV3RXhwck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CitOZXdFeHByTm9kZTo6fk5ld0V4cHJOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVh
c2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBOZXdFeHByTm9kZTo6cmVsZWFzZU5vZGVzKE5v
ZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByKTsKKyAg
ICByZWxlYXNlci5hZG9wdChtX2FyZ3MpOworfQorCiBSZWdpc3RlcklEKiBOZXdFeHByTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdl
dCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDb25zdHJ1Y3QoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KSwgZnVuYy5nZXQoKSwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0
YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CiB9CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBFdmFsRnVuY3Rpb25DYWxsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK0V2YWxGdW5jdGlvbkNhbGxOb2RlOjp+RXZhbEZ1bmN0aW9uQ2FsbE5vZGUoKQor
eworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEV2
YWxGdW5jdGlvbkNhbGxOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikK
K3sKKyAgICByZWxlYXNlci5hZG9wdChtX2FyZ3MpOworfQorCiBSZWdpc3RlcklEKiBFdmFsRnVu
Y3Rpb25DYWxsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKGRzdCk7CkBAIC0zOTUsMTIgKzU4OCwzNyBAQCBSZWdpc3RlcklEKiBFdmFs
RnVuY3Rpb25DYWxsTm9kZTo6ZW1pdENvCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2
YWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBiYXNlLmdldCgpKSwgZnVuYy5nZXQo
KSwgYmFzZS5nZXQoKSwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2Vu
ZE9mZnNldCk7CiB9CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlv
bkNhbGxWYWx1ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGdW5j
dGlvbkNhbGxWYWx1ZU5vZGU6On5GdW5jdGlvbkNhbGxWYWx1ZU5vZGUoKQoreworICAgIE5vZGVS
ZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEZ1bmN0aW9uQ2FsbFZh
bHVlTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVs
ZWFzZXIuYWRvcHQobV9leHByKTsKKyAgICByZWxlYXNlci5hZG9wdChtX2FyZ3MpOworfQorCiBS
ZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBm
dW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7CiAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBmdW5jLmdldCgp
LCAwLCBtX2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsK
IH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbFJlc29s
dmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnVuY3Rpb25DYWxs
UmVzb2x2ZU5vZGU6On5GdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSgpCit7CisgICAgTm9kZVJlbGVh
c2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgRnVuY3Rpb25DYWxsUmVzb2x2
ZU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVh
c2VyLmFkb3B0KG1fYXJncyk7Cit9CisKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKICAgICBpZiAoUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVy
Rm9yKG1faWRlbnQpKQpAQCAtNDIyLDYgKzY0MCwyMCBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNh
bGxSZXNvbHZlTm9kZTo6ZW1pCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jLmdldCgpLCBiYXNlLmdl
dCgpLCBtX2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsK
IH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbEJyYWNr
ZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnVuY3Rpb25DYWxs
QnJhY2tldE5vZGU6On5GdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSgpCit7CisgICAgTm9kZVJlbGVh
c2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgRnVuY3Rpb25DYWxsQnJhY2tl
dE5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVh
c2VyLmFkb3B0KG1fYmFzZSk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9zdWJzY3JpcHQpOworICAg
IHJlbGVhc2VyLmFkb3B0KG1fYXJncyk7Cit9CisKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJy
YWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX2Jhc2UuZ2V0KCkpOwpAQCAtNDMxLDYgKzY2MywxOSBAQCBSZWdpc3RlcklEKiBGdW5jdGlv
bkNhbGxCcmFja2V0Tm9kZTo6ZW1pCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jdGlvbi5nZXQoKSwg
YmFzZS5nZXQoKSwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9m
ZnNldCk7CiB9CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNh
bGxEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnVuY3Rpb25D
YWxsRG90Tm9kZTo6fkZ1bmN0aW9uQ2FsbERvdE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6
cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OnJl
bGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0
KG1fYmFzZSk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9hcmdzKTsKK30KKwogUmVnaXN0ZXJJRCog
RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKQEAgLTQ5Nyw2ICs3NDIsMTcgQEAgUmVnaXN0ZXJJ
RCogUG9zdGZpeFJlc29sdmVOb2RlOjplbWl0Q29kZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gUG9zdGZpeEJyYWNrZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAorUG9zdGZpeEJyYWNrZXROb2RlOjp+UG9zdGZpeEJyYWNrZXROb2RlKCkKK3sK
KyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBQb3N0
Zml4QnJhY2tldE5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQorewor
ICAgIHJlbGVhc2VyLmFkb3B0KG1fYmFzZSk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9zdWJzY3Jp
cHQpOworfQorCiBSZWdpc3RlcklEKiBQb3N0Zml4QnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CkBAIC01MjEs
NiArNzc3LDE2IEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhCcmFja2V0Tm9kZTo6ZW1pdENvZGUKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhEb3ROb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorUG9zdGZpeERvdE5vZGU6On5Qb3N0Zml4RG90
Tm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisK
K3ZvaWQgUG9zdGZpeERvdE5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2Vy
KQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fYmFzZSk7Cit9CisKIFJlZ2lzdGVySUQqIFBvc3Rm
aXhEb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX2Jhc2UuZ2V0KCkpOwpAQCAtNTQ0LDYgKzgxMCwxNiBAQCBSZWdpc3RlcklEKiBQb3N0Zml4
RG90Tm9kZTo6ZW1pdENvZGUoQ29kCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBQb3N0Zml4RXJyb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
K1Bvc3RmaXhFcnJvck5vZGU6On5Qb3N0Zml4RXJyb3JOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFz
ZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBQb3N0Zml4RXJyb3JOb2RlOjpy
ZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9w
dChtX2V4cHIpOworfQorCiBSZWdpc3RlcklEKiBQb3N0Zml4RXJyb3JOb2RlOjplbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogewogICAgIHJldHVybiBlbWl0
VGhyb3dFcnJvcihnZW5lcmF0b3IsIFJlZmVyZW5jZUVycm9yLCBtX29wZXJhdG9yID09IE9wUGx1
c1BsdXMgPyAiUG9zdGZpeCArKyBvcGVyYXRvciBhcHBsaWVkIHRvIHZhbHVlIHRoYXQgaXMgbm90
IGEgcmVmZXJlbmNlLiIgOiAiUG9zdGZpeCAtLSBvcGVyYXRvciBhcHBsaWVkIHRvIHZhbHVlIHRo
YXQgaXMgbm90IGEgcmVmZXJlbmNlLiIpOwpAQCAtNTYzLDYgKzgzOSwxNyBAQCBSZWdpc3RlcklE
KiBEZWxldGVSZXNvbHZlTm9kZTo6ZW1pdENvZGUoCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBEZWxldGVCcmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCitEZWxldGVCcmFja2V0Tm9kZTo6fkRlbGV0ZUJyYWNrZXROb2RlKCkKK3sKKyAg
ICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBEZWxldGVC
cmFja2V0Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAg
cmVsZWFzZXIuYWRvcHQobV9iYXNlKTsKKyAgICByZWxlYXNlci5hZG9wdChtX3N1YnNjcmlwdCk7
Cit9CisKIFJlZ2lzdGVySUQqIERlbGV0ZUJyYWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKQEAgLTU3NCw2ICs4NjEs
MTYgQEAgUmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tldE5vZGU6OmVtaXRDb2RlKAogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCitEZWxldGVEb3ROb2RlOjp+RGVsZXRlRG90Tm9kZSgpCit7
CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgRGVs
ZXRlRG90Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAg
cmVsZWFzZXIuYWRvcHQobV9iYXNlKTsKK30KKwogUmVnaXN0ZXJJRCogRGVsZXRlRG90Tm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAg
ICAgUmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKQEAg
LTU4NCw2ICs4ODEsMTYgQEAgUmVnaXN0ZXJJRCogRGVsZXRlRG90Tm9kZTo6ZW1pdENvZGUoQ29k
ZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlVmFsdWVOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0RlbGV0ZVZhbHVlTm9kZTo6fkRl
bGV0ZVZhbHVlTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhp
cyk7Cit9CisKK3ZvaWQgRGVsZXRlVmFsdWVOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2Vy
JiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2V4cHIpOworfQorCiBSZWdpc3Rl
cklEKiBEZWxldGVWYWx1ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogewogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShpZ25vcmVkUmVzdWx0
KCksIG1fZXhwci5nZXQoKSk7CkBAIC01OTQsNiArOTAxLDE2IEBAIFJlZ2lzdGVySUQqIERlbGV0
ZVZhbHVlTm9kZTo6ZW1pdENvZGUoQ28KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIFZvaWROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorVm9p
ZE5vZGU6On5Wb2lkTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXMo
dGhpcyk7Cit9CisKK3ZvaWQgVm9pZE5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJl
bGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fZXhwcik7Cit9CisKIFJlZ2lzdGVySUQq
IFZvaWROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKICAgICBpZiAoZHN0ID09IGlnbm9yZWRSZXN1bHQoKSkgewpAQCAtNjIzLDYgKzk0
MCwxNiBAQCBSZWdpc3RlcklEKiBUeXBlT2ZSZXNvbHZlTm9kZTo6ZW1pdENvZGUoCiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUeXBlT2ZWYWx1ZU5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorVHlwZU9mVmFsdWVOb2RlOjp+VHlwZU9mVmFsdWVO
b2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwor
dm9pZCBUeXBlT2ZWYWx1ZU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2Vy
KQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fZXhwcik7Cit9CisKIFJlZ2lzdGVySUQqIFR5cGVP
ZlZhbHVlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7CiAgICAgaWYgKGRzdCA9PSBpZ25vcmVkUmVzdWx0KCkpIHsKQEAgLTY2OSw2ICs5
OTYsMTcgQEAgUmVnaXN0ZXJJRCogUHJlZml4UmVzb2x2ZU5vZGU6OmVtaXRDb2RlKAogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZml4QnJhY2tldE5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitQcmVmaXhCcmFja2V0Tm9kZTo6flByZWZpeEJy
YWNrZXROb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsK
K30KKwordm9pZCBQcmVmaXhCcmFja2V0Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYg
cmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9iYXNlKTsKKyAgICByZWxlYXNlci5h
ZG9wdChtX3N1YnNjcmlwdCk7Cit9CisKIFJlZ2lzdGVySUQqIFByZWZpeEJyYWNrZXROb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0
KCkpOwpAQCAtNjg4LDYgKzEwMjYsMTYgQEAgUmVnaXN0ZXJJRCogUHJlZml4QnJhY2tldE5vZGU6
OmVtaXRDb2RlKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZml4RG90
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1ByZWZpeERvdE5vZGU6
On5QcmVmaXhEb3ROb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0
aGlzKTsKK30KKwordm9pZCBQcmVmaXhEb3ROb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2Vy
JiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2Jhc2UpOworfQorCiBSZWdpc3Rl
cklEKiBQcmVmaXhEb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwpAQCAtNzA2LDYgKzEwNTQsMTYgQEAgUmVnaXN0ZXJJ
RCogUHJlZml4RG90Tm9kZTo6ZW1pdENvZGUoQ29kZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gUHJlZml4RXJyb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKK1ByZWZpeEVycm9yTm9kZTo6flByZWZpeEVycm9yTm9kZSgpCit7CisgICAgTm9k
ZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgUHJlZml4RXJyb3JO
b2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNl
ci5hZG9wdChtX2V4cHIpOworfQorCiBSZWdpc3RlcklEKiBQcmVmaXhFcnJvck5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CiAgICAgcmV0dXJu
IGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwgUmVmZXJlbmNlRXJyb3IsIG1fb3BlcmF0b3IgPT0g
T3BQbHVzUGx1cyA/ICJQcmVmaXggKysgb3BlcmF0b3IgYXBwbGllZCB0byB2YWx1ZSB0aGF0IGlz
IG5vdCBhIHJlZmVyZW5jZS4iIDogIlByZWZpeCAtLSBvcGVyYXRvciBhcHBsaWVkIHRvIHZhbHVl
IHRoYXQgaXMgbm90IGEgcmVmZXJlbmNlLiIpOwpAQCAtNzEzLDYgKzEwNzEsMTYgQEAgUmVnaXN0
ZXJJRCogUHJlZml4RXJyb3JOb2RlOjplbWl0Q29kZShDbwogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gVW5hcnkgT3BlcmF0aW9uIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKK1VuYXJ5T3BOb2RlOjp+VW5hcnlPcE5vZGUoKQoreworICAgIE5v
ZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIFVuYXJ5T3BOb2Rl
OjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5h
ZG9wdChtX2V4cHIpOworfQorCiBSZWdpc3RlcklEKiBVbmFyeU9wTm9kZTo6ZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVnaXN0ZXJJ
RCogc3JjID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7CkBAIC03MjEsNiArMTA4
OSwxNyBAQCBSZWdpc3RlcklEKiBVbmFyeU9wTm9kZTo6ZW1pdENvZGUoQ29kZUdlCiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCaW5hcnkgT3BlcmF0aW9uIE5vZGVzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0JpbmFyeU9wTm9kZTo6fkJpbmFyeU9w
Tm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisK
K3ZvaWQgQmluYXJ5T3BOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikK
K3sKKyAgICByZWxlYXNlci5hZG9wdChtX2V4cHIxKTsKKyAgICByZWxlYXNlci5hZG9wdChtX2V4
cHIyKTsKK30KKwogUmVnaXN0ZXJJRCogQmluYXJ5T3BOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGUg
PSB0aGlzLT5vcGNvZGUoKTsKQEAgLTc4Miw3ICsxMTYxLDE4IEBAIFJlZ2lzdGVySUQqIEluc3Rh
bmNlT2ZOb2RlOjplbWl0Q29kZShDb2QKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRJbnN0YW5j
ZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0
KCksIHNyYzIuZ2V0KCksIHNyYzJQcm90b3R5cGUpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gQmluYXJ5IExvZ2ljYWwgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvZ2ljYWxPcE5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMb2dpY2FsT3BOb2RlOjp+TG9naWNhbE9w
Tm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisK
K3ZvaWQgTG9naWNhbE9wTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIp
Cit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByMSk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9l
eHByMik7Cit9CiAKIFJlZ2lzdGVySUQqIExvZ2ljYWxPcE5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewpAQCAtODAyLDYgKzExOTIsMTgg
QEAgUmVnaXN0ZXJJRCogTG9naWNhbE9wTm9kZTo6ZW1pdENvZGUoQ29kZQogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uZGl0aW9uYWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCitDb25kaXRpb25hbE5vZGU6On5Db25kaXRpb25hbE5vZGUoKQorewor
ICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIENvbmRp
dGlvbmFsTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAg
cmVsZWFzZXIuYWRvcHQobV9sb2dpY2FsKTsKKyAgICByZWxlYXNlci5hZG9wdChtX2V4cHIxKTsK
KyAgICByZWxlYXNlci5hZG9wdChtX2V4cHIyKTsKK30KKwogUmVnaXN0ZXJJRCogQ29uZGl0aW9u
YWxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3RHN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KTsKQEAgLTgyNCw2ICsxMjI2LDE2IEBAIFJlZ2lzdGVySUQqIENvbmRpdGlv
bmFsTm9kZTo6ZW1pdENvZGUoQ28KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IFJlYWRNb2RpZnlSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCitSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6On5SZWFkTW9kaWZ5UmVzb2x2ZU5vZGUoKQorewor
ICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIFJlYWRN
b2RpZnlSZXNvbHZlTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7
CisgICAgcmVsZWFzZXIuYWRvcHQobV9yaWdodCk7Cit9CisKIC8vIEZJWE1FOiBzaG91bGQgdGhp
cyBiZSBtb3ZlZCB0byBiZSBhIG1ldGhvZCBvbiBDb2RlR2VuZXJhdG9yPwogc3RhdGljIEFMV0FZ
U19JTkxJTkUgUmVnaXN0ZXJJRCogZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3Rl
cklEKiBzcmMyLCBPcGVyYXRvciBvcGVyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiB7CkBAIC05MTQs
NiArMTMyNiwxNiBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRDCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBc3NpZ25SZXNvbHZlTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitBc3NpZ25SZXNvbHZlTm9kZTo6fkFz
c2lnblJlc29sdmVOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0
aGlzKTsKK30KKwordm9pZCBBc3NpZ25SZXNvbHZlTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxl
YXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9yaWdodCk7Cit9CisKIFJl
Z2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBn
ZW5lcmF0b3IucmVnaXN0ZXJGb3IobV9pZGVudCkpIHsKQEAgLTk0NSw2ICsxMzY3LDE3IEBAIFJl
Z2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Q29kZSgKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnbkRvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAorQXNzaWduRG90Tm9kZTo6fkFzc2lnbkRvdE5vZGUoKQoreworICAgIE5v
ZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEFzc2lnbkRvdE5v
ZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2Vy
LmFkb3B0KG1fYmFzZSk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9yaWdodCk7Cit9CisKIFJlZ2lz
dGVySUQqIEFzc2lnbkRvdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJh
dG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZS5nZXQoKSwgbV9yaWdodEhhc0Fzc2ln
bm1lbnRzLCBtX3JpZ2h0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CkBAIC05NTcsNiArMTM5MCwxNyBA
QCBSZWdpc3RlcklEKiBBc3NpZ25Eb3ROb2RlOjplbWl0Q29kZShDb2RlCiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWFkTW9kaWZ5RG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCitSZWFkTW9kaWZ5RG90Tm9kZTo6flJlYWRNb2RpZnlEb3RO
b2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwor
dm9pZCBSZWFkTW9kaWZ5RG90Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFz
ZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9iYXNlKTsKKyAgICByZWxlYXNlci5hZG9wdCht
X3JpZ2h0KTsKK30KKwogUmVnaXN0ZXJJRCogUmVhZE1vZGlmeURvdE5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFz
ZS5nZXQoKSwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3JpZ2h0LT5pc1B1cmUoZ2VuZXJhdG9y
KSk7CkBAIC05NzIsNiArMTQxNiwxNyBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5RG90Tm9kZTo6
ZW1pdENvZGUoCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBc3NpZ25FcnJv
ck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQXNzaWduRXJyb3JO
b2RlOjp+QXNzaWduRXJyb3JOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxO
b2Rlcyh0aGlzKTsKK30KKwordm9pZCBBc3NpZ25FcnJvck5vZGU6OnJlbGVhc2VOb2RlcyhOb2Rl
UmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fbGVmdCk7CisgICAg
cmVsZWFzZXIuYWRvcHQobV9yaWdodCk7Cit9CisKIFJlZ2lzdGVySUQqIEFzc2lnbkVycm9yTm9k
ZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKIHsKICAg
ICByZXR1cm4gZW1pdFRocm93RXJyb3IoZ2VuZXJhdG9yLCBSZWZlcmVuY2VFcnJvciwgIkxlZnQg
c2lkZSBvZiBhc3NpZ25tZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsKQEAgLTk3OSw2ICsxNDM0
LDE4IEBAIFJlZ2lzdGVySUQqIEFzc2lnbkVycm9yTm9kZTo6ZW1pdENvZGUoQ28KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnbkJyYWNrZXROb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0Fzc2lnbkJyYWNrZXROb2RlOjp+QXNzaWduQnJh
Y2tldE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOwor
fQorCit2b2lkIEFzc2lnbkJyYWNrZXROb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiBy
ZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2Jhc2UpOworICAgIHJlbGVhc2VyLmFk
b3B0KG1fc3Vic2NyaXB0KTsKKyAgICByZWxlYXNlci5hZG9wdChtX3JpZ2h0KTsKK30KKwogUmVn
aXN0ZXJJRCogQXNzaWduQnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0g
Z2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZS5nZXQoKSwgbV9zdWJzY3Jp
cHRIYXNBc3NpZ25tZW50cyB8fCBtX3JpZ2h0SGFzQXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5p
c1B1cmUoZ2VuZXJhdG9yKSAmJiBtX3JpZ2h0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CkBAIC05OTEs
NiArMTQ1OCwyMCBAQCBSZWdpc3RlcklEKiBBc3NpZ25CcmFja2V0Tm9kZTo6ZW1pdENvZGUoCiAg
ICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0
KTsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlYWRNb2RpZnlCcmFj
a2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWFkTW9kaWZ5
QnJhY2tldE5vZGU6On5SZWFkTW9kaWZ5QnJhY2tldE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNl
cjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIFJlYWRNb2RpZnlCcmFja2V0Tm9k
ZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIu
YWRvcHQobV9iYXNlKTsKKyAgICByZWxlYXNlci5hZG9wdChtX3N1YnNjcmlwdCk7CisgICAgcmVs
ZWFzZXIuYWRvcHQobV9yaWdodCk7Cit9CisKIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlCcmFja2V0
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JM
ZWZ0SGFuZFNpZGUobV9iYXNlLmdldCgpLCBtX3N1YnNjcmlwdEhhc0Fzc2lnbm1lbnRzIHx8IG1f
cmlnaHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5lcmF0b3IpICYmIG1f
cmlnaHQtPmlzUHVyZShnZW5lcmF0b3IpKTsKQEAgLTEwMDksMTMgKzE0OTAsMzUgQEAgUmVnaXN0
ZXJJRCogUmVhZE1vZGlmeUJyYWNrZXROb2RlOjplbWl0QwogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gQ29tbWFOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCitDb21tYU5vZGU6On5Db21tYU5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVs
ZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIENvbW1hTm9kZTo6cmVsZWFzZU5vZGVzKE5v
ZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByMSk7Cisg
ICAgcmVsZWFzZXIuYWRvcHQobV9leHByMik7Cit9CisKIFJlZ2lzdGVySUQqIENvbW1hTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAg
ICAgZ2VuZXJhdG9yLmVtaXROb2RlKGlnbm9yZWRSZXN1bHQoKSwgbV9leHByMS5nZXQoKSk7CiAg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fZXhwcjIuZ2V0KCkpOwogfQogCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uc3REZWNsTm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gQ29uc3REZWNsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
Q29uc3REZWNsTm9kZTo6fkNvbnN0RGVjbE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVs
ZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIENvbnN0RGVjbE5vZGU6OnJlbGVhc2VOb2Rl
cyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fbmV4dCk7
CisgICAgcmVsZWFzZXIuYWRvcHQobV9pbml0KTsKK30KIAogQ29uc3REZWNsTm9kZTo6Q29uc3RE
ZWNsTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBFeHByZXNzaW9uTm9kZSogaW5pdCkKICAgICA6IEV4cHJlc3Npb25Ob2RlKGdsb2JhbERhdGEp
CkBAIC0xMDUxLDYgKzE1NTQsMTYgQEAgUmVnaXN0ZXJJRCogQ29uc3REZWNsTm9kZTo6ZW1pdENv
ZGUoQ29kZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uc3RTdGF0ZW1l
bnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvbnN0U3RhdGVtZW50Tm9k
ZTo6fkNvbnN0U3RhdGVtZW50Tm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxs
Tm9kZXModGhpcyk7Cit9CisKK3ZvaWQgQ29uc3RTdGF0ZW1lbnROb2RlOjpyZWxlYXNlTm9kZXMo
Tm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX25leHQpOwor
fQorCiBSZWdpc3RlcklEKiBDb25zdFN0YXRlbWVudE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
Tm9kZShtX25leHQuZ2V0KCkpOwpAQCAtMTA4Miw2ICsxNTk1LDE4IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBzdGF0ZW1lbnRMaXN0UHVzaEZJRk8KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEJsb2NrTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAor
QmxvY2tOb2RlOjp+QmxvY2tOb2RlKCkKK3sKKyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxO
b2Rlcyh0aGlzKTsKK30KKwordm9pZCBCbG9ja05vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFz
ZXImIHJlbGVhc2VyKQoreworICAgIHNpemVfdCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHJlbGVhc2VyLmFk
b3B0KG1fY2hpbGRyZW5baV0pOworfQorCiBCbG9ja05vZGU6OkJsb2NrTm9kZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbikKICAgICA6IFN0YXRlbWVu
dE5vZGUoZ2xvYmFsRGF0YSkKIHsKQEAgLTExMTksNiArMTY0NCwxNiBAQCBSZWdpc3RlcklEKiBF
eHByU3RhdGVtZW50Tm9kZTo6ZW1pdENvZGUoCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBWYXJTdGF0ZW1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAor
VmFyU3RhdGVtZW50Tm9kZTo6flZhclN0YXRlbWVudE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNl
cjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIFZhclN0YXRlbWVudE5vZGU6OnJl
bGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0
KG1fZXhwcik7Cit9CisKIFJlZ2lzdGVySUQqIFZhclN0YXRlbWVudE5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CiAgICAgQVNTRVJUKG1fZXhw
cik7CkBAIC0xMTI3LDYgKzE2NjIsMTcgQEAgUmVnaXN0ZXJJRCogVmFyU3RhdGVtZW50Tm9kZTo6
ZW1pdENvZGUoQwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSWZOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitJZk5vZGU6On5JZk5vZGUo
KQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lk
IElmTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVs
ZWFzZXIuYWRvcHQobV9jb25kaXRpb24pOworICAgIHJlbGVhc2VyLmFkb3B0KG1faWZCbG9jayk7
Cit9CisKIFJlZ2lzdGVySUQqIElmTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPExhYmVsSUQ+IGFmdGVyVGhlbiA9
IGdlbmVyYXRvci5uZXdMYWJlbCgpOwpAQCAtMTE0MCwxMCArMTY4NiwyMyBAQCBSZWdpc3RlcklE
KiBJZk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0CiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRz
dCwgbV9pZkJsb2NrLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGFmdGVyVGhlbi5n
ZXQoKSk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHN0YXRl
bWVudCBleGVjdHV0ZWQgc28gdGhhdCBpdCBjYW4gYmUgcmV0dXJuZWQgYXMgYSBDb21wbGV0aW9u
CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBzdGF0ZW1lbnQgZXhl
Y3V0ZWQgc28gdGhhdCBpdCBjYW4gYmUgcmV0dXJuZWQgYXMgYSBDb21wbGV0aW9uLgogICAgIHJl
dHVybiAwOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSWZFbHNlTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWZFbHNlTm9kZTo6
fklmRWxzZU5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMp
OworfQorCit2b2lkIElmRWxzZU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVh
c2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fZWxzZUJsb2NrKTsKKyAgICBJZk5vZGU6OnJl
bGVhc2VOb2RlcyhyZWxlYXNlcik7Cit9CisKIFJlZ2lzdGVySUQqIElmRWxzZU5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJl
ZlB0cjxMYWJlbElEPiBiZWZvcmVFbHNlID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CkBAIC0xMTY3
LDEyICsxNzI2LDIzIEBAIFJlZ2lzdGVySUQqIElmRWxzZU5vZGU6OmVtaXRDb2RlKENvZGVHZW4K
IAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoYWZ0ZXJFbHNlLmdldCgpKTsKIAotICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCByZXR1cm4gdGhlIGxhc3Qgc3RhdGVtZW50IGV4ZWN0dXRlZCBzbyB0
aGF0IGl0IGNhbiBiZSByZXR1cm5lZCBhcyBhIENvbXBsZXRpb24KKyAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHN0YXRlbWVudCBleGVjdXRlZCBzbyB0aGF0IGl0IGNh
biBiZSByZXR1cm5lZCBhcyBhIENvbXBsZXRpb24uCiAgICAgcmV0dXJuIDA7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb1doaWxlTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKK0RvV2hpbGVOb2RlOjp+RG9XaGlsZU5vZGUoKQoreworICAg
IE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIERvV2hpbGVO
b2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNl
ci5hZG9wdChtX3N0YXRlbWVudCk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9leHByKTsKK30KKwog
UmVnaXN0ZXJJRCogRG9XaGlsZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxMYWJlbFNjb3BlPiBzY29wZSA9IGdl
bmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOwpAQCAtMTE5OCw2ICsxNzY4
LDE3IEBAIFJlZ2lzdGVySUQqIERvV2hpbGVOb2RlOjplbWl0Q29kZShDb2RlR2UKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdoaWxlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAorV2hpbGVOb2RlOjp+V2hpbGVOb2RlKCkKK3sKKyAgICBOb2Rl
UmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBXaGlsZU5vZGU6OnJl
bGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0
KG1fZXhwcik7CisgICAgcmVsZWFzZXIuYWRvcHQobV9zdGF0ZW1lbnQpOworfQorCiBSZWdpc3Rl
cklEKiBXaGlsZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5u
ZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOwpAQCAtMTIyNSw2ICsxODA2LDE5IEBAIFJl
Z2lzdGVySUQqIFdoaWxlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmUKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEZvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAorRm9yTm9kZTo6fkZvck5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVs
ZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEZvck5vZGU6OnJlbGVhc2VOb2RlcyhOb2Rl
UmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fZXhwcjEpOworICAg
IHJlbGVhc2VyLmFkb3B0KG1fZXhwcjIpOworICAgIHJlbGVhc2VyLmFkb3B0KG1fZXhwcjMpOwor
ICAgIHJlbGVhc2VyLmFkb3B0KG1fc3RhdGVtZW50KTsKK30KKwogUmVnaXN0ZXJJRCogRm9yTm9k
ZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7
CiAgICAgaWYgKGRzdCA9PSBpZ25vcmVkUmVzdWx0KCkpCkBAIC0xMjY0LDYgKzE4NTgsMTkgQEAg
UmVnaXN0ZXJJRCogRm9yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9ySW5Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCitGb3JJbk5vZGU6On5Gb3JJbk5vZGUoKQoreworICAgIE5vZGVSZWxlYXNl
cjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEZvckluTm9kZTo6cmVsZWFzZU5v
ZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9pbml0
KTsKKyAgICByZWxlYXNlci5hZG9wdChtX2xleHByKTsKKyAgICByZWxlYXNlci5hZG9wdChtX2V4
cHIpOworICAgIHJlbGVhc2VyLmFkb3B0KG1fc3RhdGVtZW50KTsKK30KKwogRm9ySW5Ob2RlOjpG
b3JJbk5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9uTm9kZSogbCwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCkKICAgICA6IFN0YXRl
bWVudE5vZGUoZ2xvYmFsRGF0YSkKICAgICAsIG1faW5pdCgwTCkKQEAgLTEzODcsNiArMTk5NCwx
NiBAQCBSZWdpc3RlcklEKiBCcmVha05vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXR1cm5Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKK1JldHVybk5vZGU6On5SZXR1cm5Ob2RlKCkKK3sKKyAgICBOb2Rl
UmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBSZXR1cm5Ob2RlOjpy
ZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9w
dChtX3ZhbHVlKTsKK30KKwogUmVnaXN0ZXJJRCogUmV0dXJuTm9kZTo6ZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgaWYgKGdlbmVyYXRv
ci5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSkKQEAgLTE0MDYsNiArMjAyMywxNyBAQCBSZWdp
c3RlcklEKiBSZXR1cm5Ob2RlOjplbWl0Q29kZShDb2RlR2VuCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBXaXRoTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKK1dpdGhOb2RlOjp+V2l0aE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVs
ZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIFdpdGhOb2RlOjpyZWxlYXNlTm9kZXMoTm9k
ZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2V4cHIpOworICAg
IHJlbGVhc2VyLmFkb3B0KG1fc3RhdGVtZW50KTsKK30KKwogUmVnaXN0ZXJJRCogV2l0aE5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIu
Z2V0KCkpOyAvLyBzY29wZSBtdXN0IGJlIHByb3RlY3RlZCB1bnRpbCBwb3BwZWQKQEAgLTE0MTYs
NyArMjA0NCw0NSBAQCBSZWdpc3RlcklEKiBXaXRoTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IENhc2VDbGF1c2VOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Nhc2VD
bGF1c2VOb2RlOjp+Q2FzZUNsYXVzZU5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFz
ZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIENhc2VDbGF1c2VOb2RlOjpyZWxlYXNlTm9kZXMo
Tm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNlci5hZG9wdChtX2V4cHIpOwor
fQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2xhdXNlTGlzdE5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2xhdXNlTGlzdE5vZGU6On5DbGF1c2VM
aXN0Tm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9
CisKK3ZvaWQgQ2xhdXNlTGlzdE5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVh
c2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fY2xhdXNlKTsKKyAgICByZWxlYXNlci5hZG9w
dChtX25leHQpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2FzZUJs
b2NrTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDYXNlQmxvY2tOb2Rl
Ojp+Q2FzZUJsb2NrTm9kZSgpCit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXMo
dGhpcyk7Cit9CisKK3ZvaWQgQ2FzZUJsb2NrTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNl
ciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9saXN0MSk7CisgICAgcmVsZWFz
ZXIuYWRvcHQobV9kZWZhdWx0Q2xhdXNlKTsKKyAgICByZWxlYXNlci5hZG9wdChtX2xpc3QyKTsK
K30KKwogZW51bSBTd2l0Y2hLaW5kIHsgCiAgICAgU3dpdGNoVW5zZXQgPSAwLAogICAgIFN3aXRj
aE51bWJlciA9IDEsIApAQCAtMTU2MCw2ICsyMjI2LDE3IEBAIFJlZ2lzdGVySUQqIENhc2VCbG9j
a05vZGU6OmVtaXRDb2RlRm9yQmwKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IFN3aXRjaE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorU3dpdGNo
Tm9kZTo6flN3aXRjaE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVz
KHRoaXMpOworfQorCit2b2lkIFN3aXRjaE5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXIm
IHJlbGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fZXhwcik7CisgICAgcmVsZWFzZXIu
YWRvcHQobV9ibG9jayk7Cit9CisKIFJlZ2lzdGVySUQqIFN3aXRjaE5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxM
YWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6OlN3
aXRjaCk7CkBAIC0xNTczLDYgKzIyNTAsMTYgQEAgUmVnaXN0ZXJJRCogU3dpdGNoTm9kZTo6ZW1p
dENvZGUoQ29kZUdlbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTGFiZWxO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitMYWJlbE5vZGU6On5M
YWJlbE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOwor
fQorCit2b2lkIExhYmVsTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIp
Cit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9zdGF0ZW1lbnQpOworfQorCiBSZWdpc3RlcklEKiBM
YWJlbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQogewogICAgIGlmIChnZW5lcmF0b3IuYnJlYWtUYXJnZXQobV9uYW1lKSkKQEAgLTE1ODcs
NiArMjI3NCwxNiBAQCBSZWdpc3RlcklEKiBMYWJlbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaHJvd05vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1Rocm93Tm9kZTo6flRocm93Tm9kZSgpCit7Cisg
ICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQgVGhyb3dO
b2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiByZWxlYXNlcikKK3sKKyAgICByZWxlYXNl
ci5hZG9wdChtX2V4cHIpOworfQorCiBSZWdpc3RlcklEKiBUaHJvd05vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIGlmIChkc3Qg
PT0gaWdub3JlZFJlc3VsdCgpKQpAQCAtMTU5OSw2ICsyMjk2LDE4IEBAIFJlZ2lzdGVySUQqIFRo
cm93Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFRyeU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAor
VHJ5Tm9kZTo6flRyeU5vZGUoKQoreworICAgIE5vZGVSZWxlYXNlcjo6cmVsZWFzZUFsbE5vZGVz
KHRoaXMpOworfQorCit2b2lkIFRyeU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJl
bGVhc2VyKQoreworICAgIHJlbGVhc2VyLmFkb3B0KG1fdHJ5QmxvY2spOworICAgIHJlbGVhc2Vy
LmFkb3B0KG1fY2F0Y2hCbG9jayk7CisgICAgcmVsZWFzZXIuYWRvcHQobV9maW5hbGx5QmxvY2sp
OworfQorCiBSZWdpc3RlcklEKiBUcnlOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8TGFiZWxJRD4gdHJ5U3RhcnRM
YWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwpAQCAtMTY1Nyw2ICsyMzY2LDE3IEBAIFJlZ2lz
dGVySUQqIFRyeU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmEKICAgICByZXR1cm4gZHN0OwogfQog
CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGFyYW1ldGVyTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXJhbWV0ZXJOb2RlOjp+UGFyYW1ldGVyTm9kZSgp
Cit7CisgICAgTm9kZVJlbGVhc2VyOjpyZWxlYXNlQWxsTm9kZXModGhpcyk7Cit9CisKK3ZvaWQg
UGFyYW1ldGVyTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7Cisg
ICAgcmVsZWFzZXIuYWRvcHQobV9uZXh0KTsKK30KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIFNjb3BlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0x
NzM2LDggKzI0NTYsOCBAQCBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpTR2xv
CiAKIEZ1bmN0aW9uQm9keU5vZGU6On5GdW5jdGlvbkJvZHlOb2RlKCkKIHsKLSAgICBpZiAobV9w
YXJhbWV0ZXJzKQotICAgICAgICBmYXN0RnJlZShtX3BhcmFtZXRlcnMpOworICAgIEFTU0VSVCgh
bV9yZWZDb3VudCk7CisgICAgZmFzdEZyZWUobV9wYXJhbWV0ZXJzKTsKIH0KIAogdm9pZCBGdW5j
dGlvbkJvZHlOb2RlOjpmaW5pc2hQYXJzaW5nKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFy
YW1ldGVyTm9kZSogZmlyc3RQYXJhbWV0ZXIpCkBAIC0xODQyLDYgKzI1NjIsMTcgQEAgSWRlbnRp
ZmllciogRnVuY3Rpb25Cb2R5Tm9kZTo6Y29weVBhcmFtZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gRnVuY0RlY2xOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCitGdW5jRGVjbE5vZGU6On5GdW5jRGVjbE5vZGUoKQoreworICAgIE5vZGVSZWxlYXNl
cjo6cmVsZWFzZUFsbE5vZGVzKHRoaXMpOworfQorCit2b2lkIEZ1bmNEZWNsTm9kZTo6cmVsZWFz
ZU5vZGVzKE5vZGVSZWxlYXNlciYgcmVsZWFzZXIpCit7CisgICAgcmVsZWFzZXIuYWRvcHQobV9w
YXJhbWV0ZXIpOworICAgIHJlbGVhc2VyLmFkb3B0KG1fYm9keSk7Cit9CisKIEpTRnVuY3Rpb24q
IEZ1bmNEZWNsTm9kZTo6bWFrZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW4pCiB7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVj
LCBtX2lkZW50LCBtX2JvZHkuZ2V0KCksIHNjb3BlQ2hhaW4pOwpAQCAtMTg1NCw2ICsyNTg1LDE3
IEBAIFJlZ2lzdGVySUQqIEZ1bmNEZWNsTm9kZTo6ZW1pdENvZGUoQ29kZUcKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmNFeHByTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAorRnVuY0V4cHJOb2RlOjp+RnVuY0V4cHJOb2RlKCkKK3sKKyAgICBO
b2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBGdW5jRXhwck5v
ZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIHJlbGVhc2Vy
LmFkb3B0KG1fcGFyYW1ldGVyKTsKKyAgICByZWxlYXNlci5hZG9wdChtX2JvZHkpOworfQorCiBS
ZWdpc3RlcklEKiBGdW5jRXhwck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5ld0Z1bmN0
aW9uRXhwcmVzc2lvbihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB0aGlzKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAzODI0MSkKKysrIEphdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVk
ZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSAiUmVn
RXhwLmgiCi0jaW5jbHVkZSA8d3RmL0xpc3RSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KQEAgLTU1LDYgKzU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgTm9kZTsK
ICAgICBjbGFzcyBFdmFsQ29kZUJsb2NrOwogICAgIGNsYXNzIEpTRnVuY3Rpb247CisgICAgY2xh
c3MgTm9kZVJlbGVhc2VyOwogICAgIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CiAgICAgY2xhc3Mg
UHJvcGVydHlMaXN0Tm9kZTsKICAgICBjbGFzcyBTb3VyY2VTdHJlYW07CkBAIC0xMzUsNiArMTM1
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OwogCiAgICAgcHVibGljOgorICAgICAgICAvLyBOb25yZWN1cnNpdmUgZGVzdHJ1Y3Rpb24uCisg
ICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAg
ICAgdm9pZCByZWYoKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2b2lkIGRlcmVmKCkgSlNDX0ZB
U1RfQ0FMTDsKICAgICAgICAgYm9vbCBoYXNPbmVSZWYoKSBKU0NfRkFTVF9DQUxMOwpAQCAtMTkw
LDcgKzE5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGJv
b2wgbmVlZHNQYXJlbnNJZkxlZnRtb3N0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAg
ICAgCisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGludCBtX2xpbmU7CiAgICAgfTsKQEAgLTQ3
Nyw3ICs0ODAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIElk
ZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgaW50MzJfdCBtX3N0YXJ0T2Zmc2V0OwotICAgICAg
ICAKICAgICB9OwogCiAgICAgY2xhc3MgRWxlbWVudE5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC00
OTcsNiArNDk5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBsLT5tX25leHQgPSB0
aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+RWxlbWVudE5vZGUoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2
aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKIApAQCAtNTA0LDEwICs1MDks
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIHZhbHVlKCkgeyBy
ZXR1cm4gbV9ub2RlLmdldCgpOyB9CiAKICAgICAgICAgRWxlbWVudE5vZGUqIG5leHQoKSB7IHJl
dHVybiBtX25leHQuZ2V0KCk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxFbGVtZW50Tm9kZT4gcmVs
ZWFzZU5leHQoKSBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG1fbmV4dC5yZWxlYXNlKCk7IH0KIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIExpc3RSZWZQdHI8RWxlbWVudE5vZGU+IG1fbmV4dDsKKyAg
ICAgICAgUmVmUHRyPEVsZW1lbnROb2RlPiBtX25leHQ7CiAgICAgICAgIGludCBtX2VsaXNpb247
CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9ub2RlOwogICAgIH07CkBAIC01Mzcs
NiArNTQxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAg
ICAgIHZpcnR1YWwgfkFycmF5Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5v
ZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1Rf
Q0FMTDsKQEAgLTU2MCw2ICs1NjcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAg
ICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+UHJvcGVydHlOb2RlKCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAKQEAgLTU4NywxNiArNTk3LDE3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbGlzdC0+bV9uZXh0ID0gdGhpczsKICAgICAgICAg
fQogCisgICAgICAgIHZpcnR1YWwgflByb3BlcnR5TGlzdE5vZGUoKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJl
Z2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19G
QVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsg
fQogCi0gICAgICAgIFBhc3NSZWZQdHI8UHJvcGVydHlMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBK
U0NfRkFTVF9DQUxMIHsgcmV0dXJuIG1fbmV4dC5yZWxlYXNlKCk7IH0KLQogICAgIHByaXZhdGU6
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RMaXRlcmFsTm9kZTsKICAgICAgICAgUmVmUHRy
PFByb3BlcnR5Tm9kZT4gbV9ub2RlOwotICAgICAgICBMaXN0UmVmUHRyPFByb3BlcnR5TGlzdE5v
ZGU+IG1fbmV4dDsKKyAgICAgICAgUmVmUHRyPFByb3BlcnR5TGlzdE5vZGU+IG1fbmV4dDsKICAg
ICB9OwogCiAgICAgY2xhc3MgT2JqZWN0TGl0ZXJhbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5v
ZGUgewpAQCAtNjEyLDYgKzYyMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAg
ICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5PYmplY3RMaXRlcmFsTm9kZSgpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
SlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0KQEAgLTYzMSw2ICs2NDUsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVh
bCB+QnJhY2tldEFjY2Vzc29yTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5v
ZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1Rf
Q0FMTDsKQEAgLTY1Niw2ICs2NzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAg
ICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+RG90QWNjZXNzb3JOb2RlKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBK
U0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNl
ZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTWVtYmVyOyB9CkBAIC02ODUsMTMgKzcwNSwxNCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGxpc3ROb2RlLT5tX25leHQgPSB0aGlzOwog
ICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+QXJndW1lbnRMaXN0Tm9kZSgpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHBy
ZXNzaW9uOyB9CiAKLSAgICAgICAgUGFzc1JlZlB0cjxBcmd1bWVudExpc3ROb2RlPiByZWxlYXNl
TmV4dCgpIEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQotCi0gICAg
ICAgIExpc3RSZWZQdHI8QXJndW1lbnRMaXN0Tm9kZT4gbV9uZXh0OworICAgICAgICBSZWZQdHI8
QXJndW1lbnRMaXN0Tm9kZT4gbV9uZXh0OwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IG1fZXhwcjsKICAgICB9OwogCkBAIC03MDgsNiArNzI5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkFyZ3VtZW50c05vZGUoKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KIApAQCAtNzI5LDYg
Kzc1Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAg
ICB2aXJ0dWFsIH5OZXdFeHByTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5v
ZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1Rf
Q0FMTDsKQEAgLTc0OCw2ICs3NzUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAg
ICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+RXZhbEZ1bmN0aW9uQ2FsbE5vZGUoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDYWxsOyB9CkBAIC03NjYsNiArNzk2LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1
YWwgfkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFz
ZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY0NhbGw7IH0KQEAgLTc4NSw2ICs4MTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+RnVuY3Rpb25DYWxsUmVzb2x2
ZU5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXIm
KTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBAIC04MDgsNiAr
ODQ0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAg
IHZpcnR1YWwgfkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9D
QUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
SlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IHJldHVybiBQcmVjQ2FsbDsgfQpAQCAtODI5LDYgKzg2OCw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5GdW5jdGlvbkNh
bGxEb3ROb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVh
c2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ2FsbDsg
fQpAQCAtODc5LDYgKzkyMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAg
IH0KIAorICAgICAgICB2aXJ0dWFsIH5Qb3N0Zml4QnJhY2tldE5vZGUoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpT
Q19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9CkBAIC05MDAsNiArOTQ1LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwg
flBvc3RmaXhEb3ROb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9k
ZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
UG9zdGZpeDsgfQpAQCAtOTIwLDYgKzk2OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5Qb3N0Zml4RXJyb3JOb2RlKCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUG9zdGZpeDsgfQpAQCAtOTU3LDYgKzEw
MDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAg
dmlydHVhbCB+RGVsZXRlQnJhY2tldE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVh
c2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAK
ICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19G
QVNUX0NBTEw7CkBAIC05NzcsNiArMTAzMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5EZWxldGVEb3ROb2RlKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwpAQCAtOTk1LDYgKzEwNTIsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+RGVsZXRl
VmFsdWVOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVh
c2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwpAQCAtMTAx
Miw2ICsxMDcyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisg
ICAgICAgIHZpcnR1YWwgflZvaWROb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNl
Tm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFT
VF9DQUxMOwpAQCAtMTA0OSw2ICsxMTEyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsK
ICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgflR5cGVPZlZhbHVlTm9kZSgpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKQEAgLTEwODYsNiArMTE1Miw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5QcmVm
aXhCcmFja2V0Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVS
ZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAg
ICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1Vu
YXJ5OyB9CkBAIC0xMTA3LDYgKzExNzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewog
ICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+UHJlZml4RG90Tm9kZSgpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
SlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1Bvc3RmaXg7IH0KQEAgLTExMjcsNiArMTE5OSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0
dWFsIH5QcmVmaXhFcnJvck5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2Rl
cyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNVbmFyeTsgfQpAQCAtMTE1MCw2ICsxMjI1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgflVuYXJ5T3BOb2RlKCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIE9wY29kZUlEIG9wY29kZSgpIGNv
bnN0IEpTQ19GQVNUX0NBTEwgPSAwOwogCkBAIC0xMjI1LDYgKzEzMDMsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+QmluYXJ5T3BO
b2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7
CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIE9wY29kZUlE
IG9wY29kZSgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgPSAwOwogCkBAIC0xMjM0LDMxICsxMzE1LDE5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fcmlnaHRIYXNBc3NpZ25tZW50czsK
ICAgICB9OwogCi0gICAgY2xhc3MgUmV2ZXJzZUJpbmFyeU9wTm9kZSA6IHB1YmxpYyBFeHByZXNz
aW9uTm9kZSB7CisgICAgY2xhc3MgUmV2ZXJzZUJpbmFyeU9wTm9kZSA6IHB1YmxpYyBCaW5hcnlP
cE5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgUmV2ZXJzZUJpbmFyeU9wTm9kZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpCi0gICAgICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKGdsb2JhbERhdGEpCi0gICAgICAgICAgICAsIG1fZXhwcjEoZXhwcjEpCi0gICAgICAg
ICAgICAsIG1fZXhwcjIoZXhwcjIpCi0gICAgICAgICAgICAsIG1fcmlnaHRIYXNBc3NpZ25tZW50
cyhyaWdodEhhc0Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgOiBCaW5hcnlPcE5vZGUoZ2xvYmFs
RGF0YSwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKQogICAgICAgICB7CiAgICAg
ICAgIH0KIAogICAgICAgICBSZXZlcnNlQmluYXJ5T3BOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgUmVzdWx0VHlwZSB0eXBlLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25O
b2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgOiBFeHBy
ZXNzaW9uTm9kZShnbG9iYWxEYXRhLCB0eXBlKQotICAgICAgICAgICAgLCBtX2V4cHIxKGV4cHIx
KQotICAgICAgICAgICAgLCBtX2V4cHIyKGV4cHIyKQotICAgICAgICAgICAgLCBtX3JpZ2h0SGFz
QXNzaWdubWVudHMocmlnaHRIYXNBc3NpZ25tZW50cykKKyAgICAgICAgICAgIDogQmluYXJ5T3BO
b2RlKGdsb2JhbERhdGEsIHR5cGUsIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cykK
ICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIE9wY29kZUlEIG9wY29kZSgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgPSAwOwot
Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7
Ci0gICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKLSAgICAgICAgYm9vbCBt
X3JpZ2h0SGFzQXNzaWdubWVudHM7CiAgICAgfTsKIAogICAgIGNsYXNzIE11bHROb2RlIDogcHVi
bGljIEJpbmFyeU9wTm9kZSB7CkBAIC0xNTQzLDYgKzE2MTIsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+TG9naWNhbE9wTm9kZSgp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gKG1fb3BlcmF0b3IgPT0gT3BMb2dp
Y2FsQW5kKSA/IFByZWNMb2dpY2FsQW5kIDogUHJlY0xvZ2ljYWxPcjsgfQpAQCAtMTU2Niw2ICsx
NjM4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAg
IHZpcnR1YWwgfkNvbmRpdGlvbmFsTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFz
ZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY0NvbmRpdGlvbmFsOyB9CkBAIC0xNTg4LDYgKzE2NjMsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+UmVhZE1vZGlm
eVJlc29sdmVOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJl
bGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwpAQCAt
MTYxMSw2ICsxNjg5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQog
CisgICAgICAgIHZpcnR1YWwgfkFzc2lnblJlc29sdmVOb2RlKCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFT
VF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBKU0NfRkFTVF9DQUxMOwpAQCAtMTYzNyw2ICsxNzE4LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgflJlYWRNb2RpZnlCcmFj
a2V0Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNl
ciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKQEAgLTE2NjQs
NiArMTc0OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAg
ICAgICB2aXJ0dWFsIH5Bc3NpZ25CcmFja2V0Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FM
TDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
SlNDX0ZBU1RfQ0FMTDsKQEAgLTE2ODksNiArMTc3Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5Bc3NpZ25Eb3ROb2RlKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQpAQCAtMTcx
Myw2ICsxODAzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisg
ICAgICAgIHZpcnR1YWwgflJlYWRNb2RpZnlEb3ROb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9D
QUxMOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBKU0NfRkFTVF9DQUxMOwpAQCAtMTczNyw2ICsxODMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkFzc2lnbkVycm9yTm9kZSgp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KQEAg
LTE3NTYsNiArMTg1Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0K
IAorICAgICAgICB2aXJ0dWFsIH5Db21tYU5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJl
bGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0Nf
RkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CkBAIC0xNzc4LDEyICsxODc3LDE0IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgQ29uc3REZWNsTm9kZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSog
aW4pIEpTQ19GQVNUX0NBTEw7CiAKKyAgICAgICAgdmlydHVhbCB+Q29uc3REZWNsTm9kZSgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9D
QUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQotICAgICAgICBQYXNz
UmVmUHRyPENvbnN0RGVjbE5vZGU+IHJlbGVhc2VOZXh0KCkgSlNDX0ZBU1RfQ0FMTCB7IHJldHVy
biBtX25leHQucmVsZWFzZSgpOyB9CiAKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwotICAg
ICAgICBMaXN0UmVmUHRyPENvbnN0RGVjbE5vZGU+IG1fbmV4dDsKKyAgICAgICAgUmVmUHRyPENv
bnN0RGVjbE5vZGU+IG1fbmV4dDsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2lu
aXQ7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CkBAIC0xNzk4LDYgKzE4
OTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAg
dmlydHVhbCB+Q29uc3RTdGF0ZW1lbnROb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxl
YXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIAogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIEpTQ19GQVNUX0NBTEw7CkBAIC0xODI3LDEyICsxOTMxLDE2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHB1YmxpYzoKICAgICAgICAgQmxvY2tOb2RlKEpTR2xvYmFsRGF0YSosIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbikgSlNDX0ZBU1RfQ0FMTDsKIAorICAgICAgICB2aXJ0dWFsIH5CbG9j
a05vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXIm
KTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIFN0
YXRlbWVudFZlY3RvciYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9CiAKICAgICAg
ICAgdmlydHVhbCBib29sIGlzQmxvY2soKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIHRy
dWU7IH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgU3RhdGVtZW50VmVjdG9yIG1fY2hpbGRy
ZW47CiAgICAgfTsKQEAgLTE4ODUsNiArMTk5Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHZpcnR1YWwgflZhclN0YXRlbWVudE5v
ZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsK
KwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBAIC0xOTAyLDYgKzIw
MTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAg
dmlydHVhbCB+SWZOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9k
ZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKIApA
QCAtMTkxOCw2ICsyMDMyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAg
fQogCisgICAgICAgIHZpcnR1YWwgfklmRWxzZU5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NB
TEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBK
U0NfRkFTVF9DQUxMOwogCkBAIC0xOTM0LDEwICsyMDUxLDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5Eb1doaWxlTm9kZSgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCBib29s
IGlzTG9vcCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgcHJp
dmF0ZToKICAgICAgICAgUmVmUHRyPFN0YXRlbWVudE5vZGU+IG1fc3RhdGVtZW50OwogICAgICAg
ICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjsKQEAgLTE5NTIsMTAgKzIwNzMsMTQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwg
fldoaWxlTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxl
YXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKICAgICAg
ICAgdmlydHVhbCBib29sIGlzTG9vcCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1
ZTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4
cHI7CiAgICAgICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBtX3N0YXRlbWVudDsKQEAgLTE5NzQs
MTAgKzIwOTksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoc3RhdGVt
ZW50KTsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkZvck5vZGUoKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvb3Ao
KSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHByaXZhdGU6CiAg
ICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMTsKICAgICAgICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwpAQCAtMTk5MSwxMCArMjEyMCwxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgRm9ySW5Ob2RlKEpTR2xvYmFsRGF0YSosIEV4cHJlc3Npb25Ob2RlKiwg
RXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKikgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAg
Rm9ySW5Ob2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9k
ZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSosIGludCBkaXZvdCwgaW50IHN0YXJ0
T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KSBKU0NfRkFTVF9DQUxMOwogICAgICAgICAKKyAgICAgICAg
dmlydHVhbCB+Rm9ySW5Ob2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMo
Tm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsK
IAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMb29wKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJl
dHVybiB0cnVlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7
CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9pbml0OwpAQCAtMjA1Miw2ICsyMTg1
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZp
cnR1YWwgflJldHVybk5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhO
b2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZXR1cm5Ob2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7
IHJldHVybiB0cnVlOyB9CkBAIC0yMDcxLDYgKzIyMDcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+V2l0aE5vZGUoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogCkBAIC0yMDkwLDYgKzIyMjksOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+TGFi
ZWxOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2Vy
Jik7CisKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKIApAQCAtMjEwNiw2
ICsyMjQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAg
ICAgIHZpcnR1YWwgflRocm93Tm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5v
ZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NB
TEw7CiAKQEAgLTIxMjQsNiArMjI2OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAg
ICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5UcnlOb2RlKCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CisKICAgICAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
ZHN0ID0gMCkgSlNDX0ZBU1RfQ0FMTDsKQEAgLTIxNTAsMTcgKzIyOTgsMTkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBsLT5tX25leHQgPSB0aGlzOwogICAgICAgICB9CiAKKyAgICAg
ICAgdmlydHVhbCB+UGFyYW1ldGVyTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFz
ZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCiAgICAgICAgIElkZW50aWZpZXIgaWRlbnQoKSBKU0Nf
RkFTVF9DQUxMIHsgcmV0dXJuIG1faWRlbnQ7IH0KICAgICAgICAgUGFyYW1ldGVyTm9kZSAqbmV4
dFBhcmFtKCkgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7
Ci0gICAgICAgIFBhc3NSZWZQdHI8UGFyYW1ldGVyTm9kZT4gcmVsZWFzZU5leHQoKSBKU0NfRkFT
VF9DQUxMIHsgcmV0dXJuIG1fbmV4dC5yZWxlYXNlKCk7IH0KICAgICAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4g
UHJlY0V4cHJlc3Npb247IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBG
dW5jRGVjbE5vZGU7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBGdW5jRXhwck5vZGU7CiAgICAgICAg
IElkZW50aWZpZXIgbV9pZGVudDsKLSAgICAgICAgTGlzdFJlZlB0cjxQYXJhbWV0ZXJOb2RlPiBt
X25leHQ7CisgICAgICAgIFJlZlB0cjxQYXJhbWV0ZXJOb2RlPiBtX25leHQ7CiAgICAgfTsKIAog
ICAgIGNsYXNzIFNjb3BlTm9kZSA6IHB1YmxpYyBCbG9ja05vZGUgewpAQCAtMjMyNCw2ICsyNDc0
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2JvZHktPmZpbmlzaFBhcnNpbmco
c291cmNlLCBtX3BhcmFtZXRlci5nZXQoKSk7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFs
IH5GdW5jRXhwck5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2Rl
UmVsZWFzZXImKTsKKwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIEpTRnVu
Y3Rpb24qIG1ha2VGdW5jdGlvbihFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopIEpTQ19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBKU0NfRkFTVF9DQUxMOwpAQCAtMjM1MSw2ICsyNTA0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBtX2JvZHktPmZpbmlzaFBhcnNpbmcoc291cmNlLCBtX3BhcmFtZXRlci5nZXQo
KSk7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIH5GdW5jRGVjbE5vZGUoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CkBAIC0yMzgxLDYgKzI1MzcsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBjaGlsZHJlbi0+cmVsZWFzZUNvbnRlbnRzSW50
b1ZlY3RvcihtX2NoaWxkcmVuKTsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgfkNhc2VD
bGF1c2VOb2RlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVh
c2VyJik7CisKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9
CiAKQEAgLTI0MDcsMTYgKzI1NjYsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBj
bGF1c2VMaXN0LT5tX25leHQgPSB0aGlzOwogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCB+
Q2xhdXNlTGlzdE5vZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2Rl
UmVsZWFzZXImKTsKKwogICAgICAgICBDYXNlQ2xhdXNlTm9kZSogZ2V0Q2xhdXNlKCkgY29uc3Qg
SlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBtX2NsYXVzZS5nZXQoKTsgfQogICAgICAgICBDbGF1c2VM
aXN0Tm9kZSogZ2V0TmV4dCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0Lmdl
dCgpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBKU0NfRkFTVF9DQUxMOwotICAgICAgICBQYXNzUmVmUHRyPENsYXVzZUxpc3ROb2RlPiByZWxl
YXNlTmV4dCgpIEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQogICAg
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgZnJpZW5kIGNsYXNzIENhc2VCbG9ja05vZGU7CiAgICAgICAgIFJlZlB0cjxDYXNlQ2xhdXNl
Tm9kZT4gbV9jbGF1c2U7Ci0gICAgICAgIExpc3RSZWZQdHI8Q2xhdXNlTGlzdE5vZGU+IG1fbmV4
dDsKKyAgICAgICAgUmVmUHRyPENsYXVzZUxpc3ROb2RlPiBtX25leHQ7CiAgICAgfTsKIAogICAg
IGNsYXNzIENhc2VCbG9ja05vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC0yNDI5LDYgKzI1OTAsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVh
bCB+Q2FzZUJsb2NrTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU5vZGVzKE5v
ZGVSZWxlYXNlciYpOworCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDb2RlRm9yQmxvY2soQ29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqIGlucHV0LCBSZWdpc3RlcklEKiBkc3QgPSAwKSBKU0Nf
RkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBKU0NfRkFTVF9DQUxMOwpAQCAtMjQ1MCw2ICsyNjE0LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgflN3aXRjaE5vZGUo
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImKTsKKwog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAzODI0MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDA4LTExLTA5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHRlc3QgZm9y
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg4NgorICAgICAgICAg
IFN0YWNrIG92ZXJmbG93IGR1ZSB0byBkZWVwbHkgbmVzdGVkIHBhcnNlIHRyZWUgZG9pbmcgcmVw
ZWF0ZWQgc3RyaW5nIGNvbmNhdGVudGF0aW9uCisKKyAgICAgICAgKiBmYXN0L2pzL2xhcmdlLWV4
cHJlc3Npb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9sYXJnZS1l
eHByZXNzaW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy9sYXJn
ZS1leHByZXNzaW9ucy5qczogQWRkZWQuCisKIDIwMDgtMTEtMDkgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL2xhcmdlLWV4cHJlc3Npb25zLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2xhcmdlLWV4cHJlc3Npb25zLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvbGFyZ2UtZXhwcmVzc2lvbnMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACitUaGlzIHRlc3QgY2hl
Y2tzIGJlaGF2aW9yIHdpdGggZXhwcmVzc2lvbnMgdGhhdCBjcmVhdGUgZGVlcCBwYXJzZSB0cmVl
cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZXZhbChyZXBlYXRlZEV4
cHJlc3Npb24oImxldHRlckEiLCAiKyIsIDEwMCkpIGlzIHJlcGVhdGVkU3RyaW5nKCJhIiwgMTAw
KQorUEFTUyBldmFsKHJlcGVhdGVkRXhwcmVzc2lvbigibGV0dGVyQSIsICIrIiwgMTAwMCkpIGlz
IHJlcGVhdGVkU3RyaW5nKCJhIiwgMTAwMCkKK1BBU1MgZXZhbChyZXBlYXRlZEV4cHJlc3Npb24o
ImxldHRlckEiLCAiKyIsIDEwMDAwKSkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBFeHBy
ZXNzaW9uIHRvbyBkZWVwLgorUEFTUyBldmFsKHJlcGVhdGVkRXhwcmVzc2lvbigibGV0dGVyQSIs
ICIrIiwgMTAwMDAwKSkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBFeHByZXNzaW9uIHRv
byBkZWVwLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvanMvbGFyZ2UtZXhwcmVz
c2lvbnMtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvbGFyZ2UtZXhwcmVzc2lvbnMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2xhcmdlLWV4cHJlc3Npb25zLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2xhcmdlLWV4cHJlc3Npb25zLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi
LS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9InJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvbGFyZ2UtZXhwcmVzc2lvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9qcy9sYXJnZS1leHByZXNz
aW9ucy5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvaHRtbApO
YW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZXNvdXJjZXMvbGFyZ2UtZXhwcmVzc2lvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZXNvdXJjZXMvbGFyZ2UtZXhwcmVzc2lvbnMuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9sYXJnZS1leHByZXNzaW9ucy5qcwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorZGVzY3JpcHRpb24oCisiVGhpcyB0ZXN0IGNoZWNr
cyBiZWhhdmlvciB3aXRoIGV4cHJlc3Npb25zIHRoYXQgY3JlYXRlIGRlZXAgcGFyc2UgdHJlZXMu
IgorKTsKKworLy8gQXQgdGhlIG1vbWVudCwgdGhpcyB0ZXN0cyBvbmx5IHJlcGVhdGVkICIrIiBv
cGVyYXRvciBleHByZXNzaW9uIHRyZWVzLgorLy8gVGhlcmUgYXJlIGxvdHMgb2Ygb3RoZXIgY2Fz
ZXMgd2VyIGNvdWxkIGNvdmVyIHRvIG1ha2UgdGhpcyBhIG1vcmUgdGhvcm91Z2ggdGVzdC4KKwor
Ly8gVXNlIGEgdmFyaWFibGUgdG8gZGVjcmVhc2UgdGhlIGNoYW5jZSB0aGUgdGVzdCB3aWxsIGJl
IGludmFsaWQgZHVlIHRvIGNvbnN0bmF0IGZvbGRpbmcuCit2YXIgbGV0dGVyQSA9ICdhJzsKKwor
ZnVuY3Rpb24gcmVwZWF0ZWRFeHByZXNzaW9uKHZhbHVlLCBvcGVyYXRvciwgY291bnQpCit7Cisg
ICAgdmFyIGV4cHJlc3Npb24gPSB2YWx1ZTsKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNvdW50
OyArK2kpCisgICAgICAgIGV4cHJlc3Npb24gKz0gJyAnICsgb3BlcmF0b3IgKyAnICcgKyB2YWx1
ZTsKKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKK30KKworZnVuY3Rpb24gcmVwZWF0ZWRTdHJpbmco
dmFsdWUsIGNvdW50KQoreworICAgIHZhciByZXN1bHQgPSAiIjsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHJlc3VsdCArPSB2YWx1ZTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzaG91bGRCZSgnZXZhbChyZXBlYXRlZEV4cHJlc3Npb24oImxldHRlckEi
LCAiKyIsIDEwMCkpJywgJ3JlcGVhdGVkU3RyaW5nKCJhIiwgMTAwKScpOworc2hvdWxkQmUoJ2V2
YWwocmVwZWF0ZWRFeHByZXNzaW9uKCJsZXR0ZXJBIiwgIisiLCAxMDAwKSknLCAncmVwZWF0ZWRT
dHJpbmcoImEiLCAxMDAwKScpOworc2hvdWxkVGhyb3coJ2V2YWwocmVwZWF0ZWRFeHByZXNzaW9u
KCJsZXR0ZXJBIiwgIisiLCAxMDAwMCkpJywgJyJTeW50YXhFcnJvcjogRXhwcmVzc2lvbiB0b28g
ZGVlcCInKTsKK3Nob3VsZFRocm93KCdldmFsKHJlcGVhdGVkRXhwcmVzc2lvbigibGV0dGVyQSIs
ICIrIiwgMTAwMDAwKSknLCAnIlN5bnRheEVycm9yOiBFeHByZXNzaW9uIHRvbyBkZWVwIicpOwor
Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>
<flag name="review"
          id="11479"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>